铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 26486|回复: 65

[通用] Fish.72_AddKdef天书*低资质通用版初版

[复制链接]
发表于 2007-1-7 13:56 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
索引:

1.        前言
1.1.        基本知识
2.        指令说明
2.1.        跳转36(type,偏移1, 偏移2)
3.        通用类指令
3.1.        变量赋值50(0,x,v,-1,-1,-1,-1)
3.2.        数组变量赋值50(1, type1,type2,x, I , y , -1)
3.3.        取数组变量值50(2, type1,type2,x, I , y , -1)
3.4.        四则运算(3, type1,type2,y, a , b , -1 )
3.5.        变量判断(4, Type1, Type2,a, b , -1, -1 )
3.6.        全部变量清零(5,-1,-1,-1,-1,-1,-1)
3.7.        变量名定义(6,x,s1,s2,s3,s4,s5)
4.        字符串指令
4.1.        读对话到字符串(8,type,id,x ,-1 , -1, -1)
4.2.        sprintf(9, type,s, format, x, -1, -1)
4.3.        取字符串长度(10,s,l,-1,-1,-1)
4.4.        字符串合并(11,x,a,b,-1,-1)
4.5.        产生空格字符串(12,type,s,n,-1,-1)
5.        存取属性指令
5.1.        保存人物物品等属性(16, type1,type2,id, i , x, -1)
5.2.        取人物物品等属性(17, type1,type2,id, i , x, -1)
5.3.        存队伍(18, type,id, x , -1, -1, -1)
5.4.        取队伍(19, type,id, x , -1, -1, -1)
5.5.        得到主角携带的物品数量 (20,type,i, x , -1, -1, -1)
5.6.        存D*数据(21,type,id, i , j, x, -1)
5.7.        取D*数据(22,type,id, i , j, x, -1)
5.8.        存S*数据(23,type,id, i , x, y, v)
5.9.        取S*数据(24,type,id, i , x, y, v)
5.10.        存给定内存地址数据(25,type1,type2, AddressL ,AddressH , x, -1)
5.11.        取给定内存地址数据(26,type1,type2, AddressL ,AddressH , x, -1)
5.12.        取人物物品等属性名称(27, type1,type2,id, s , -1, -1)
6.        特殊指令
6.1.        修改指令参数(32, type ,x,i,-1 , -1, -1)
6.2.        显示字符串(33,type,s,x,y ,color,-1)
6.3.        处理背景(34,type,x,y,w , h,-1)
6.4.        读键盘(35,x,-1,-1,-1 , -1,-1)
6.5.        显示字符串并等待击键(36,type,s,x,y ,color,-1)
6.6.        延时(37,type,n, -1,-1 , -1, -1, -1)
6.7.        随机数(38,type, n,x , -1, -1, -1)
6.8.        菜单选择(39,type,n,s,r,x,y)
6.9.        菜单选择(40,type,n,s,r,x,y)
6.10.        显示图片指令(41,type1,type2,x,y,n,-1)
6.11.        改变主地图坐标(42,type,x,y,0,0,0)
6.12.        调用其它事件(43,type,n,x1,x2,x3,x4)
6.13.        调试指令(48,x, n,-1 , -1, -1, -1)
7.        评各指令的重要性
8.        长篇指令解说
8.1        菜单1(三项)

1.        前言

在平时有人说不会用这不会用那的话,我都会叫他看说明书,即使是英文日文德文也只会叫他查字典。今次不同了,连我自己都看不懂,而且还是中文……

要帮忙解释的:
5.8.&5.9. S*数据

低资质通用版出版原因:
1.会部分50指令原理的新手,有;贯彻各指令而又可用简单的语句完成事件的高手,有;两者之间的进阶者,好像没有。因断层的关系,做mod事件编辑的,来来去去都是那几个高手。先不说辛苦、欠新意这些,就是没有集思广益这一项已经不好了。
2.达摩堂太冷清了。50指令对没学过C++的人是不简单的,引致要入门做新手都有点困难。
3.即使以后大家觉得mod的事件设得很差,也不再空口讲白话,可以把自己造的事件贴上来,然后说句:“大家觉得我造的比mod的差就减我分禁我言吧!”大家就自然会对你另眼相看了~(引申义就是去百花谷提意见都知道是否可行)

知道那一项指令的重要性高,就要优先那一项。

必用的有:

2.1.跳转、3.1.变量赋值、3.4.四则运算、3.5.变量判断、4.1.读对话到字符串、4.2.sprintf、、4.4.字符串合并、4.5.产生空格字符串、
5.1.保存人物物品等属性、5.2.取人物物品等属性、6.2.显示字符串、6.3.处理背景、6.5.显示字符串并等待击键、6.8.菜单选择、6.11.        改变主地图坐标


学了更好:
3.2.数组变量赋值、3.3.取数组变量值、4.3.取字符串长度、
5.3.存队伍、5.4.取队伍、5.5.得到主角携带的物品数量 、5.10.存给定内存地址数据、5.12.取人物物品等属性名称、
6.1.修改指令参数、6.4.读键盘、6.6.延时、6.7.随机数、6.9.菜单选择、6.10.显示图片指令、6.12.调用其它事件


【注释1:并非仅是C++,任何一门程序语言均可】
【注释2:我将原作者的第7节提到前面来】

1.1.        基本知识

注意:要用新增指令一定要用0.72的z.dat。如用原版z.dat,新增指令会被视为错误而跳过;用0.70或0.71的话最新的几个指令会跳过

~所有数值都是用十进制整数。
~如输入的数值大于32768,则要减去65536转负数输入。
~如没有发生跳转,事件依指令由上至下执行一次。(如果这句是多余的话就删了这句吧…)
~;后面的东东是不会读取的,打一大篇文章都没分别。(别说我无聊,我想详细一点…)
~经计算出来的结果中,所有小数点之后的数值都会舍去。
~原本说明里的-1即是改什么数字都没影响。
~Byte最大值是255(FFh),可存一个半角字符;Int【应为16位整数】最大值是65535(FFFFh),可存一个全角字符或两个半角字符。
~想知属性偏移是什么可在用FISH改R.档时看左下就知了。
~50指令的type是二进制的。b0就是二进制的0位,b8=1就是+256。


参数类型:
1.        数值,就是整数0、1、2、-1之类。
2.        变量,就是[X0]、[X1]之类,[X0]表示变量0,[X123]表示变量123。[X16383]是最后一个变量。变量的最大值是65535(FFFFh)
3.        字符串变量,就是Str0、Str1之类,Str0表示字符串变量0。
           可以在文本程式出现的就是字符串,字符串变量就是以字符串型式读取变量,末尾以0表示字符串结束。
           注意,用Str时隔开一点,以免覆写。一个字就用一个变量。
           字元串 - Wikipedia

2.        指令说明
我会在原本的说明下面加上*实例和#基础用法。
看实例的代码和解释应该可以看出代码的参数怎影响事件了

2.1.        跳转36(type,偏移1, 偏移2)
type<256,仍然调用原来判断性别的功能。
Type>=256,则根据内部跳转变量的值决定跳转的方向。
=0 则跳转到偏移1
=1 则跳转到偏移2

  36 256 0 -5                    ;  36(24):跳转变量JMP是否为0否则(向前)跳转到:Label*
  36 256 0 1                     ;  36(24):跳转变量JMP是否为0否则(向后)跳转到:Label*
  36 256 -5 0                    ;  36(24):跳转变量JMP是否为0是则(向前)跳转到:Label*
  36 256 1 0                     ;  36(24):跳转变量JMP是否为0是则(向后)跳转到:Label*
偏移1是0,偏移2是负:JMP是1则向前跳转
偏移1是0,偏移2是正:JMP是1则向后跳转
偏移1是负,偏移2是0:JMP是0则向前跳转
偏移1是正,偏移2是0:JMP是0则向后跳转
#配合变量判断作出分支,每个跳转指令都带着Label,向前跳转则Label在指令上面,反之则在指令下面。

3.1.        变量赋值50(0,x,v,-1,-1,-1,-1)
变量x=v

  50 0 1 2 0 0 0 0               ;  50(32):变量赋值 [X1]=2
#造出变量的基本方法

3.2.        数组变量赋值50(1, type1,type2,x, I , y , -1)
Type1:  b0=0  I为数值,=1  I为变量   (b0表示此参数的第0位,以下同)
         b1=0  y为数值,=1  y为变量
Type2: 数组单元长度 =0数组,存取一个字,=1字符串,存取一个字节
   x(i)=y

  50 1 0 0 10 20 30 0            ;  50(32):数组变量赋值 数组10(20)=30(Int)
  50 1 1 0 10 20 30 0            ;  50(32):数组变量赋值 数组10([X20])=30(Int)
  50 1 2 0 10 20 30 0            ;  50(32):数组变量赋值 数组10(20)=[X30](Int)
  50 1 3 0 10 20 30 0            ;  50(32):数组变量赋值 数组10([X20])=[X30](Int)
  50 1 0 1 10 20 30 0            ;  50(32):数组变量赋值 数组10(20)=30(Byte)

原帖由 KG 于 2007-1-7 22:14 发表
1、数组:
例:
数组100、100……100意义同变量100、101……110


3.3.        取数组变量值50(2, type1,type2,x, I , y , -1)
Type1: b0  =0  I为数值,=1  I为变量
Type2: =0 数组,存取一个字,=1 字符串,存取一个字节
        
    Y=x(i)
   
x为变量,数组以x为起始地址
y为变量,保存取得的数组值

  50 2 0 0 10 20 30 0            ;  50(32):取数组变量值 [X30]=数组10(20)(Int)
  50 2 1 0 10 20 30 0            ;  50(32):取数组变量值 [X30]=数组10([X20])(Int)
  50 2 0 1 10 20 30 0            ;  50(32):取数组变量值 [X30]=数组10(20)(Byte)


3.4.        四则运算(3, type1,type2,y, a , b , -1 )
Type1:=0  b为数值 =1 b为变量
Type2: =0   Y=a+b
       1   Y=a-b
       2   Y=a*b
       3   y=a/b
       4   y=a mod b  a/b的余数



    Y和a均为变量

  50 3 0 0 10 20 30 0            ;  50(32):四则运算 [X10]=[X20]+30
  50 3 1 0 10 20 30 0            ;  50(32):四则运算 [X10]=[X20]+[X30]
  50 3 0 1 10 20 30 0            ;  50(32):四则运算 [X10]=[X20]-30
  50 3 0 2 10 20 30 0            ;  50(32):四则运算 [X10]=[X20]*30
  50 3 0 3 10 20 30 0            ;  50(32):四则运算 [X10]=[X20]/30
#唔…就是将变量改変的重要方法…
以[X10]=[X20]+30为例,[X20]要是设好的变量,如[X20]=10,[X10]就变成40,这指令只改[X10],不改[X20]

   
3.5.        变量判断(4, Type1, Type2,a, b , -1, -1 )
Type1:=0  b为数值, =1 b为变量
Type2: 0: a<b跳转变量设为0,否则设为1
1: a<=b跳转变量设为0,否则设为1
2: a=b跳转变量设为0,否则设为1
3: a<>b跳转变量设为0,否则设为1
4: a>=b 跳转变量设为0,否则设为1
5: a>b 跳转变量设为 0,否则设为1
6: 不管a、b的值,跳转变量设为 0
7: 不管a、b的值,跳转变量设为 1

a为变量,根据变量的值设置跳转标记。
上面有很多是重复的,但是为了使用方便,还是把所有情况都列举。

此指令与跳转指令结合即可实现条件跳转和无条件跳转功能。


  50 4 0 0 10 20 0 0             ;  50(32):变量判断 If[X10]<20 then JMP=0 else JMP=1
  50 4 1 0 10 20 0 0             ;  50(32):变量判断 If[X10]<[X20] then JMP=0 else JMP=1
  50 4 0 1 10 20 0 0             ;  50(32):变量判断 If[X10]<=20 then JMP=0 else JMP=1
  50 4 0 2 10 20 0 0             ;  50(32):变量判断 If[X10]=20  then JMP=0 else JMP=1
  50 4 0 3 10 20 0 0             ;  50(32):变量判断 If[X10]<>20 then JMP=0 else JMP=1
  50 4 0 4 10 20 0 0             ;  50(32):变量判断 If[X10]>=20 then JMP=0 else JMP=1
  50 4 0 5 10 20 0 0             ;  50(32):变量判断 If[X10]>20 then JMP=0 else JMP=1
  50 4 0 6 0 0 0 0             ;  50(32):变量判断  JMP=0
  50 4 0 7 0 0 0 0             ;  50(32):变量判断  JMP=1
#配合跳转可做出多元化的分支,不再限于武力道德物品了

3.6.        全部变量清零(5,-1,-1,-1,-1,-1,-1)
全部变量清零,包括内部变量。

  50 5 0 0 0 0 0 0               ;  50(32):全部变量清零
#清零方便再设

3.7.        变量名定义(6,x,s1,s2,s3,s4,s5)
定义变量的名字。用于解释变量和指令指导中选择变量,不用在记变量的编号了。
X: 要定义的变量编号
S1: 变量名字符1和字符2,一个16位数定义两个字符的ASCII码。低位在前,高位在后。
S2-S5 : 字符3-字符10。含义同上

最多可以定义10个字符,如果某个字符为0则表示字符串终止。

此指令在游戏中无用,仅用于事件修改器定义变量名使用。

#注意只可用半角英数符号定义变量的名字。

4.        字符串指令
本节为字符串处理指令。字符串可以从对话中读入,变量的值可以用sprintf转换为字符串,还有字符串合并函数。这些指令组合基本可以满足对字符串的需要。如果不能满足,可以直接通过访问字符串中的每个字符来实现复杂功能。

4.1.        读对话到字符串(8,type,id,x ,-1 , -1, -1)
type:b0=0  id为数值,=1 id为变量

     读取对话id到字符串x
可以先把定义好的字符串保存到对话中,然后用此指令读到游戏中,后面可以处理或者显示出来。

  50 8 0 10 20 0 0 0             ;  50(32):读对话到字符串  Str20=talk(10)
  50 8 1 10 20 0 0 0             ;  50(32):读对话到字符串  Str20=talk([X10])
#难得地看原本的就够

4.2.        sprintf(9, type,s, format, x, -1, -1)
    type:b0=0  x为数值,=1 x为变量
类似C语言中的sprintf函数,按照字符串format变量的格式(诸如%d等),输出x 变量的值到字符串S中。
指令调用游戏程序的sprintf函数。因此格式与C语言相同。但是变量只能是整型,不能是字符串。
若要输出字符串,必须自己操作。
为了设计简单,只输出能输出一个变量,若要输入多个变量,请自行用字符串合并函数。
这个指令用于输出属性的值,比如显示资质等。先把变量的值输出到字符串中,然后再显示出来。
字符串format可以先定义在对话中,然后用读对话到字符串指令读出。

  50 9 0 10 20 30 0 0            ;  50(32):Sprintf  Str10=Cstr(30) FORMAT=Str20
  50 9 1 10 20 30 0 0            ;  50(32):Sprintf  Str10=Cstr([X30]) FORMAT=Str20

原帖由 KG 于 2007-1-7 22:14 发表
这里的format是C语言里的变量格式,即“%d”“%c”“%f”等(本人只用过%d)
使用时要先把“%d”这两个字符做成一个对话,记下对话编号N
然后用“读取对话到字符串”把N号对话赋给字符串 STR Y
然后用sprintf(9, type,s, Y, x, -1, -1)这个命令把变量x的值以Y的格式做为字符串赋给字符串s

%b - 将参数看待成整数,而且结果为二进制的值
%c - 将参数看待成整数,而且结果为此ASCII值的字元
%d - 将参数看待成整数,而且结果为十进位的数值
%f - 将参数看待成浮点数,而且结果为浮点数
%o - 将参数看待成整数,而且结果为八进制的数值
%s - 将参数和结果都看待成字串
%x - 将参数看待成整数,而且结果为十六进制的数值(小写字母)
%X - 将参数看待成整数,而且结果为十六进制的数值(大写字母)
有用的只有%d
以50 9 0 10 20 30 0 0            ;  50(32):Sprintf  Str10=Cstr(30) FORMAT=Str20
如果Str20是%d,Str10就是30,[X10]就是3033h

4.3.        取字符串长度(10,s,l,-1,-1,-1)
取字符串s的长度赋给变量I

  50 10 20 30 0 0 0 0            ;  50(32):取字符串长度 [X30]=Len(Str20 )
#方便在做菜单时弄格式

4.4.        字符串合并(11,x,a,b,-1,-1)
x=a+b
字符串x为字符串a后面接着字符串b。

  50 11 20 30 40 0 0 0           ;  50(32):字符串合并 Str20=Str30+Str40
#就是二合一

4.5.        产生空格字符串(12,type,s,n,-1,-1)
type: b0=0  n为数值,=1 n为变量
     设置字符串s为n个空格

  50 12 0 30 40 0 0 0            ;  50(32):空格字符串 Str30=40个空格
  50 12 1 30 40 0 0 0            ;  50(32):空格字符串 Str30=[X40]个空格
#加空格令显示对话时好看一点

5.        存取属性指令
这些指令用来在属性和变量之间存取,以便处理这些属性值。   
一些复杂功能都可以用这些指令来实现。
比如关闭某些场景。只要设置场景进入条件为1则该场景就关闭。

5.1.        保存人物物品等属性(16, type1,type2,id, i , x, -1)
type1: b0=0  id为数值,=1 id为变量
b1=0  i为数值,=1 i为变量
b2=0  x为数值,=1 x为变量

type2= 0 人物id属性(i)=x
      1 物品id属性(i) = x
          2 场景id属性(i) = x
          3 武功id属性(i) = x
          4 小宝商店id属性(i)=x
   
id为相应的编号。X为要保存的值
I为属性偏移,为相应的属性起始地址开始的偏移字节数。具体的偏移字节数可以在chaoliu和我的修改器中查看,各个属性都是依次排列。一般代号偏移为0,姓名和外号为10字节,其余变量都是两个字节。
可以使用游戏中不用的参数做为自定义的属性变量,比如在人物属性中游戏中不使用的参数:
人物代号,无用,外号(10字节,可以设置5个变量了)
如果想永久保存变量,可以增加一个不使用的人,把变量值保存在这个人的参数中,使用时取出,即可实现永久保存变量。

  50 16 0 0 10 20 30 0           ;  50(32):保存属性 人物10属性偏移20=30
  50 16 1 0 10 20 30 0           ;  50(32):保存属性 人物[X10]属性偏移20=30
  50 16 0 1 10 20 30 0           ;  50(32):保存属性 物品10属性偏移20=30
  50 16 0 2 10 20 30 0           ;  50(32):保存属性 场景10属性偏移20=30
  50 16 0 3 10 20 30 0           ;  50(32):保存属性 武功10属性偏移20=30
  50 16 0 4 10 20 30 0           ;  50(32):保存属性 小宝商店10属性偏移20=30
#改原有指令外的各属性必用,如想改主角御剑成1就:  50 16 0 0 0 102 1 0           ;  50(32):保存属性 人物0属性偏移102=1

5.2.        取人物物品等属性(17, type1,type2,id, i , x, -1)
type:b0=0  id为数值,=1 id为变量
b1=0  i为数值,=1 i为变量
type2= 0 x=人物id属性(i)
      1 x=物品id属性(i)
          2 x=场景id属性(i)
          3 x=武功id属性(i)
          4 x=小宝商店id属性(i)

此功能用来取属性到变量,以便进行处理。
id为编号。X为变量。
I为属性偏移,

  50 17 0 0 10 20 30 0           ;  50(32):读取属性 [X30]=人物10属性偏移20
  50 17 1 0 10 20 30 0           ;  50(32):读取属性 [X30]=人物[X10]属性偏移20
  50 17 2 0 10 20 30 0           ;  50(32):读取属性 [X30]=人物10属性偏移[X20]
  50 17 3 0 10 20 30 0           ;  50(32):读取属性 [X30]=人物[X10]属性偏移[X20]
  50 17 0 1 10 20 30 0           ;  50(32):读取属性 [X30]=物品10属性偏移20
  50 17 0 2 10 20 30 0           ;  50(32):读取属性 [X30]=场景10属性偏移20
  50 17 0 3 10 20 30 0           ;  50(32):读取属性 [X30]=武功10属性偏移20
  50 17 0 4 10 20 30 0           ;  50(32):读取属性 [X30]=小宝商店10属性偏移20
#增减属性和设条件时常用,读取属性后再做四则运算然后后保存属性就可实现增减属性了

5.3.        存队伍(18, type,id, x , -1, -1, -1)
type:b0=0  id为数值,=1 id为变量
b1=0  x为数值, =1 x为变量

队伍(id)=x
   
此功能存队伍数据。游戏中队伍单独保存在内存,因此需要专门处理
Id为队伍编号,0-5
队伍的变化规律为:
游戏中加入队友和离队后人物都会重新排序,
主角始终在位置0。队友靠前排列,后面空位为-1。

  50 18 0 5 20 0 0 0            ;  50(32):保存队伍 队友5=20
  50 18 1 5 20 0 0 0            ;  50(32):保存队伍 队友[X5]=20
  50 18 2 5 20 0 0 0            ;  50(32):保存队伍 队友5=[X20]
  50 18 3 5 20 0 0 0            ;  50(32):保存队伍 队友[X5]=[X20]
#就是换队友。

5.4.        取队伍(19, type,id, x , -1, -1, -1)
type:b0=0  id为数值,=1 id为变量

x=队伍(id)
   
此功能存队伍数据。
Id为队伍编号,0-5
X为变量

  50 19 0 5 20 0 0 0             ;  50(32):读取队伍 [X20]=队友5
  50 19 1 5 20 0 0 0             ;  50(32):读取队伍 [X20]=队友[X5]
  50 19 2 5 20 0 0 0             ;  50(32):读取队伍 [X20]=队友5
  50 19 3 5 20 0 0 0             ;  50(32):读取队伍 [X20]=队友[X5]
#想不到用法…特定队型引发隐藏事件?
【注释:可用于制作选择队员的选单】


5.5.        得到主角携带的物品数量 (20,type,i, x , -1, -1, -1)
type:b0=0  i为数值,=1 i为变量
   
返回主角携带的200个物品中物品编号为I的物品的数量,如果没有该物品,则返回0
该功能主要用于判断物品的数量。可以用该指令返回物品数量,然后进行判断。
直接存取物品的地址意义不大。用此指令加上原有指令32(20H)增加物品数量即可实现大部分访问物品的功能。比如要实现根据物品的数量判断,即可先用此指令得到物品数量,然后判断其数量。如果需要使用物品则使用后用原有指令32(20H)增加或减少物品的数量。

  50 20 0 5 20 0 0 0             ;  50(32):主角200个物品数量 [X20]=物品编号5数量
  50 20 1 5 20 0 0 0             ;  50(32):主角200个物品数量 [X20]=物品编号[X5]数量
#难得地看原本的就够


5.6.        存D*数据(21,type,id, i , j, x, -1)
type:b0=0  id为数值,=1 id为变量
b1=0  i为数值,  =1 i为变量
b2=0  j为数值,  =1 j为变量
b3=0  x为数值, =1 x为变量

场景id场景事件i(j)=x

此功能用来存取场景事件D*数据。
ID为场景编号
I为场景事件的编号
J为场景事件的11个属性的编号
    X为要保存的数据
    这个似乎与指令3功能类似?
*;
  50 21 0 10 20 30 40 0          ;  50(32):保存D*数据 场景10场景事件20属性30=40
  50 21 1 10 20 30 40 0          ;  50(32):保存D*数据 场景[X10]场景事件20属性30=40
  50 21 2 10 20 30 40 0          ;  50(32):保存D*数据 场景10场景事件[X20]属性30=40
  50 21 3 10 20 30 40 0          ;  50(32):保存D*数据 场景[X10]场景事件[X20]属性30=40
  50 21 4 10 20 30 40 0          ;  50(32):保存D*数据 场景10场景事件20属性[X30]=40
  50 21 5 10 20 30 40 0          ;  50(32):保存D*数据 场景[X10]场景事件20属性[X30]=40
  50 21 6 10 20 30 40 0          ;  50(32):保存D*数据 场景10场景事件[X20]属性[X30]=40
  50 21 7 10 20 30 40 0          ;  50(32):保存D*数据 场景[X10]场景事件[X20]属性[X30]=40
  50 21 8 10 20 30 40 0          ;  50(32):保存D*数据 场景10场景事件20属性30=[X40]
  50 21 9 10 20 30 40 0          ;  50(32):保存D*数据 场景[X10]场景事件20属性30=[X40]
  50 21 10 10 20 30 40 0         ;  50(32):保存D*数据 场景10场景事件[X20]属性30=[X40]
  50 21 11 10 20 30 40 0         ;  50(32):保存D*数据 场景[X10]场景事件[X20]属性30=[X40]
  50 21 12 10 20 30 40 0         ;  50(32):保存D*数据 场景10场景事件20属性[X30]=[X40]
  50 21 13 10 20 30 40 0         ;  50(32):保存D*数据 场景[X10]场景事件20属性[X30]=[X40]
  50 21 14 10 20 30 40 0         ;  50(32):保存D*数据 场景10场景事件[X20]属性[X30]=[X40]
  50 21 15 10 20 30 40 0         ;  50(32):保存D*数据 场景[X10]场景事件[X20]属性[X30]=[X40]
#想不到用法…
【注释:5.6~5.9在通常的制作中确实用途不大,但可用来保存其他数据。在《菠萝》系列中运用这些指令实现随机遇敌。】

5.7.        取D*数据(22,type,id, i , j, x, -1)
type:b0=0  id为数值,=1 id为变量
b1=0  i为数值,  =1 i为变量
b2=0  j为数值,  =1 j为变量

x=场景id场景事件i(j)

此功能用来取场景事件D*数据。
ID为场景编号
I为场景事件的编号
J为场景事件的11个属性编号
    X为变量

    存取D*数据可以实现一些场景的复杂功能。比如可以修改场景跳转口和出口,一个场景可以有多个跳转口,实现大型场景。

  50 22 0 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景10场景事件20属性30
  50 22 1 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景[X10]场景事件20属性30
  50 22 2 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景10场景事件[X20]属性30
  50 22 3 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景[X10]场景事件[X20]属性30
  50 22 4 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景10场景事件20属性[X30]
  50 22 5 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景[X10]场景事件20属性[X30]
  50 22 6 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景10场景事件[X20]属性[X30]
  50 22 7 10 20 30 40 0          ;  50(32):读取D*数据 [X40]=场景[X10]场景事件[X20]属性[X30]
#看原本的就够

5.8.        存S*数据(23,type,id, i , x, y, v)
type:b0=0  id为数值,=1 id为变量
b1=0  i为数值,  =1 i为变量
b2=0  x为数值,  =1 x为变量
b3=0  y为数值, =1 y为变量
b4=0  v为数值, =1 v为变量

场景id层i(x,y)=v

此功能用来存S*数据
ID为场景编号
I为场景的层
X,y为场景的坐标
V为要保存的值

  50 23 0 10 20 30 40 50         ;  50(32):保存S*数据 场景10层20坐标(30,40)=50
  50 23 1 10 20 30 40 50         ;  50(32):保存S*数据 场景[X10]层20坐标(30,40)=50
  50 23 2 10 20 30 40 50         ;  50(32):保存S*数据 场景10层[X20]坐标(30,40)=50
  50 23 3 10 20 30 40 50         ;  50(32):保存S*数据 场景[X10]层[X20]坐标(30,40)=50
  50 23 4 10 20 30 40 50         ;  50(32):保存S*数据 场景10层20坐标([X30],40)=50
  50 23 5 10 20 30 40 50         ;  50(32):保存S*数据 场景[X10]层20坐标([X30],40)=50
  50 23 6 10 20 30 40 50         ;  50(32):保存S*数据 场景10层[X20]坐标([X30],40)=50
  50 23 7 10 20 30 40 50         ;  50(32):保存S*数据 场景[X10]层[X20]坐标([X30],40)=50
  50 23 8 10 20 30 40 50         ;  50(32):保存S*数据 场景10层20坐标(30,[X40])=50
  50 23 9 10 20 30 40 50         ;  50(32):保存S*数据 场景[X10]层20坐标(30,[X40])=50
  50 23 10 10 20 30 40 50        ;  50(32):保存S*数据 场景10层[X20]坐标(30,[X40])=50
  50 23 11 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层[X20]坐标(30,[X40])=50
  50 23 12 10 20 30 40 50        ;  50(32):保存S*数据 场景10层20坐标([X30],[X40])=50
  50 23 13 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层20坐标([X30],[X40])=50
  50 23 14 10 20 30 40 50        ;  50(32):保存S*数据 场景10层[X20]坐标([X30],[X40])=50
  50 23 15 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层[X20]坐标([X30],[X40])=50
  50 23 16 10 20 30 40 50        ;  50(32):保存S*数据 场景10层20坐标(30,40)=[X50]
  50 23 17 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层20坐标(30,40)=[X50]
  50 23 18 10 20 30 40 50        ;  50(32):保存S*数据 场景10层[X20]坐标(30,40)=[X50]
  50 23 19 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层[X20]坐标(30,40)=[X50]
  50 23 20 10 20 30 40 50        ;  50(32):保存S*数据 场景10层20坐标([X30],40)=[X50]
  50 23 21 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层20坐标([X30],40)=[X50]
  50 23 22 10 20 30 40 50        ;  50(32):保存S*数据 场景10层[X20]坐标([X30],40)=[X50]
  50 23 23 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层[X20]坐标([X30],40)=[X50]
  50 23 24 10 20 30 40 50        ;  50(32):保存S*数据 场景10层20坐标(30,[X40])=[X50]
  50 23 25 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层20坐标(30,[X40])=[X50]
  50 23 26 10 20 30 40 50        ;  50(32):保存S*数据 场景10层[X20]坐标(30,[X40])=[X50]
  50 23 27 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层[X20]坐标(30,[X40])=[X50]
  50 23 28 10 20 30 40 50        ;  50(32):保存S*数据 场景10层20坐标([X30],[X40])=[X50]
  50 23 29 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层20坐标([X30],[X40])=[X50]
  50 23 30 10 20 30 40 50        ;  50(32):保存S*数据 场景10层[X20]坐标([X30],[X40])=[X50]
  50 23 31 10 20 30 40 50        ;  50(32):保存S*数据 场景[X10]层[X20]坐标([X30],[X40])=[X50]
#太复杂的事是要多一点时间了解…(对我来说)

5.9.        取S*数据(24,type,id, i , x, y, v)
type:b0=0  id为数值,=1 id为变量
b1=0  i为数值,  =1 i为变量
b2=0  x为数值,  =1 x为变量
b3=0  y为数值, =1 y为变量
b4=0  v为数值, =1 v为变量

v=场景id层i(x,y)

此功能用来存S*数据
ID为场景编号
I为场景的层
X,y为场景的坐标
V为要保存的值

  50 24 0 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景10层20坐标(30,40)
  50 24 1 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景[X10]层20坐标(30,40)
  50 24 2 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景10层[X20]坐标(30,40)
  50 24 3 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景[X10]层[X20]坐标(30,40)
  50 24 4 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景10层20坐标([X30],40)
  50 24 5 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景[X10]层20坐标([X30],40)
  50 24 6 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景10层[X20]坐标([X30],40)
  50 24 7 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景[X10]层[X20]坐标([X30],40)
  50 24 8 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景10层20坐标(30,[X40])
  50 24 9 10 20 30 40 50         ;  50(32):读取S*数据 [X50]=场景[X10]层20坐标(30,[X40])
  50 24 10 10 20 30 40 50        ;  50(32):读取S*数据 [X50]=场景10层[X20]坐标(30,[X40])
  50 24 11 10 20 30 40 50        ;  50(32):读取S*数据 [X50]=场景[X10]层[X20]坐标(30,[X40])
  50 24 12 10 20 30 40 50        ;  50(32):读取S*数据 [X50]=场景10层20坐标([X30],[X40])
  50 24 13 10 20 30 40 50        ;  50(32):读取S*数据 [X50]=场景[X10]层20坐标([X30],[X40])
  50 24 14 10 20 30 40 50        ;  50(32):读取S*数据 [X50]=场景10层[X20]坐标([X30],[X40])
  50 24 15 10 20 30 40 50        ;  50(32):读取S*数据 [X50]=场景[X10]层[X20]坐标([X30],[X40])
#又一个太复杂的事是要更多时间了解…(也是对我来说)

5.10.        存给定内存地址数据(25,type1,type2, AddressL ,AddressH , x, -1)
type1:b0=x  x为数值,  =1 x为变量
type2:  =0 保存字,=1保存字节
内存地址(AddressH , AddressL)=x

此功能用来存数据到程序内存空间,用于访问游戏内部数据。具体可以访问的内存数据的含义和地址以后会给出列表。这里先给出一个通用的函数
内存地址为32位,因此需要两个16位数表示,AddressL为低16位,AddressH为高16位。
根据 type2的值,保存变量x为一个字或者一个字节。
注意如果输入的x为无符号整型时,需要进行变换才能输入。

  50 25 0 0 28672 1000 9 0       ;  50(32):保存给定地址数据 [3E8-7000]=9(Int)
  50 25 1 0 28672 1000 9 0       ;  50(32):保存给定地址数据 [3E8-7000]=[X9](Int)
  50 25 0 1 28672 1000 9 0       ;  50(32):保存给定地址数据 [3E8-7000]=9(Byte)
#看另一帖有说明

5.11.        取给定内存地址数据(26,type1,type2, AddressL ,AddressH , x, i)
type1:不用
type2:  =0 取字,=1取字节

x=内存地址(AddressH , AddressL)

此功能用来程序内存空间取数据,用于访问游戏内部数据。
内存地址为32位,因此需要两个16位数表示,AddressL为低16位,AddressH为高16位
I为内存地址的偏移量

  50 26 0 0 28672 1000 9 10      ;  50(32):读取给定地址数据 [X9]=[3E8-7000+10](Int)
  50 26 0 1 28672 1000 9 10      ;  50(32):读取给定地址数据 [X9]=[3E8-7000+10](Byte)
#查船的位置引发隐藏事件…够恶搞吧
【此二指令能够实现的功能取决于制作者对游戏文件的理解程度,但是并不提倡过分依赖它们,这会造成移植的困难】

5.12.        取人物物品等属性名称(27, type1,type2,id, s , -1, -1)
type1:b0=0  id为数值,=1 id为变量
type2= 0 s=人物id名称
      1 x=物品id名称
          2 x=场景id名称
          3 x=武功id名称

   根据编号取人物物品等属性的名称。
   用指令17取字符串不方便,因此特增加此指令,用来取属性的名称。
*;Kdefnum=1
  50 27 0 0 20 30 0 0            ;  50(32):取属性名称 Str30=人物20
  50 27 1 0 20 30 0 0            ;  50(32):取属性名称 Str30=人物[X20]
  50 27 0 1 20 30 0 0            ;  50(32):取属性名称 Str30=物品20
  50 27 0 2 20 30 0 0            ;  50(32):取属性名称 Str30=场景20
  50 27 0 3 20 30 0 0            ;  50(32):取属性名称 Str30=武功20
#名称汇入对话等

[ 本帖最后由 scarscc 于 2008-6-21 14:12 编辑 ]

评分

参与人数 1 +50 收起 理由
KG + 50

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-7 13:56 | 显示全部楼层
6.        特殊指令
这些指令实现常用的几个特殊功能  
6.1.        修改指令参数(32, type ,x,i,-1 , -1, -1)
type  =0  i为数值 =1 i为变量        
    修改从下一条指令开始的指令偏移i个字(即第I个参数)为变量x的内容。

此指令用来让游戏原有的指令参数能够用变量的形式执行。指令偏移的单位为字,两个字节,从0开始。此修改只在内存临时修改,不保存到kdef中。
此指令还可以可以用来间接实现指针的功能。所有使用变量的指令都可以用这个指令实现用变量指针作为参数。

  50 32 0 10 1 0 0 0            ;  50(32):修改下一条指令参数 下一条指令参数1=[X10]
  50 32 1 10 1 0 0 0            ;  50(32):修改下一条指令参数 下一条指令参数[X1]=[X10]
#以50 32 0 10 1 0 0 0为例,下一条指令如果是50 32 0 10 1 0 0 0,就会变成50 1 0 10 1 0 0 0
【注释:可用于临时修改得到的物品】

6.2.        显示字符串(33,type,s,x,y ,color,-1)
type:b0=0 x 为数值,=1 x为变量
    b1=0 y 为数值,=1 y为变量
    b2=0 color 为数值,=1 color为变量
显示字符串s,显示字符串
(x,y)为字符串左上角的屏幕坐标。
Color显示颜色,color的两个字节分别表示两种颜色值,显示字符串时分别用这两种颜色交错显示,以实现字符的阴影效果。
每种颜色值的颜色可以在修改器的”编辑贴图”模块中的颜色表中看到。256种颜色从左到右,从上到下依次排列。
游戏常用的显示颜色(16进制表示):
    0705(黄)
    2331(橙)
    6664(白)
  等。
Color为无符号数,如果大于32768,需要进行变换。输入(65536-color)即可
字符串显示时并不处理背景,要实现阴影背景效果,请调用指令34处理背景或者指令36直接显示包括背景的字符串。


  50 33 0 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 (20,30)Color40
  50 33 1 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 ([X20],30)Color40
  50 33 2 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 (20,[X30])Color40
  50 33 3 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 ([X20],[X30])Color40
  50 33 4 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 (20,30)Color[X40]
  50 33 5 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 ([X20],30)Color[X40]
  50 33 6 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 (20,[X30])Color[X40]
  50 33 7 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 ([X20],[X30])Color[X40]
  50 33 8 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 (20,30)Color40
  50 33 9 10 20 30 40 0          ;  50(32):显示字符串 显示字符串10 ([X20],30)Color40
  50 33 10 10 20 30 40 0         ;  50(32):显示字符串 显示字符串10 (20,[X30])Color40
  50 33 11 10 20 30 40 0         ;  50(32):显示字符串 显示字符串10 ([X20],[X30])Color40
  50 33 12 10 20 30 40 0         ;  50(32):显示字符串 显示字符串10 (20,30)Color[X40]
  50 33 13 10 20 30 40 0         ;  50(32):显示字符串 显示字符串10 ([X20],30)Color[X40]
  50 33 14 10 20 30 40 0         ;  50(32):显示字符串 显示字符串10 (20,[X30])Color[X40]
  50 33 15 10 20 30 40 0         ;  50(32):显示字符串 显示字符串10 ([X20],[X30])Color[X40]
#就是显示字符串

6.3.        处理背景(34,type,x,y,w , h,-1)
type:b0=0 x 为数值,=1 x为变量
    b1=0 y 为数值,=1 y为变量
    b2=0 w 为数值,=1 w为变量
    b3=0 h 为数值,=1 h为变量

显示一个起始位置为(x,y), 宽w,高h的背景方框,背景中的颜色变暗,和游戏中显示字符的背景一样。


  50 34 0 10 20 30 40 0          ;  50(32):处理背景 位置(10,20) Width=30 Height=40
  50 34 1 10 20 30 40 0          ;  50(32):处理背景 位置([X10],20) Width=30 Height=40
  50 34 2 10 20 30 40 0          ;  50(32):处理背景 位置(10,[X20]) Width=30 Height=40
  50 34 3 10 20 30 40 0          ;  50(32):处理背景 位置([X10],[X20]) Width=30 Height=40
  50 34 4 10 20 30 40 0          ;  50(32):处理背景 位置(10,20) Width=[X30] Height=40
  50 34 5 10 20 30 40 0          ;  50(32):处理背景 位置([X10],20) Width=[X30] Height=40
  50 34 6 10 20 30 40 0          ;  50(32):处理背景 位置(10,[X20]) Width=[X30] Height=40
  50 34 7 10 20 30 40 0          ;  50(32):处理背景 位置([X10],[X20]) Width=[X30] Height=40
  50 34 8 10 20 30 40 0          ;  50(32):处理背景 位置(10,20) Width=30 Height=[X40]
  50 34 9 10 20 30 40 0          ;  50(32):处理背景 位置([X10],20) Width=30 Height=[X40]
  50 34 10 10 20 30 40 0         ;  50(32):处理背景 位置(10,[X20]) Width=30 Height=[X40]
  50 34 11 10 20 30 40 0         ;  50(32):处理背景 位置([X10],[X20]) Width=30 Height=[X40]
  50 34 12 10 20 30 40 0         ;  50(32):处理背景 位置(10,20) Width=[X30] Height=[X40]
  50 34 13 10 20 30 40 0         ;  50(32):处理背景 位置([X10],20) Width=[X30] Height=[X40]
  50 34 14 10 20 30 40 0         ;  50(32):处理背景 位置(10,[X20]) Width=[X30] Height=[X40]
  50 34 15 10 20 30 40 0         ;  50(32):处理背景 位置([X10],[X20]) Width=[X30] Height=[X40]
#弄出好看的方框~

6.4.        读键盘(35,x,-1,-1,-1 , -1,-1)
等待击键,然后把键值赋给x

  50 35 10 0 0 0 0 0             ;  50(32):读取键盘 [X10]=键值
#根据南宫老师测试,这个指令返回值为输入键的ASCII值
可以实现英数密码输入
ASCII - Wikipedia

用不到的:
十进制001,002,004~007,010~012,014~26,033~038,040,041,058,060,094,095,097~126
十六进制01,02,04~07,0A~0C,0E~1A,21~26,28,29,3A,3C,5E,5F,61~7E
十进制十六进制十进制十六进制
00303F1113082Ctrl
00808Backspace退格13183左Shift
00909Tab水平制表符13284右Shift
0130DEnter回车键13385Alt
0271BEsc跳出13486Caps Lock
03220Space空格13587Num Lock
03927'13688Scroll Lock
042~0472A~2F*+,-./13789Delete(Num.)
048~05730~39主键盘数字0至915096Insert(Num0)
0593B;15197End(Num1)
0613D=15298下(Num2)
065~09041~5A英文字A至Z15399Page Down(Num3)
091~0935B~5D[\]1549A左(Num4)
09660`1559B(Num5)



1569C右(Num6)



1579DHome(Num7)



1589E上(Num8)



1599FPage Up(Num9)



201~210C9~D2F1至F10

【注释:方向键的键值可能需要读两次】

6.5.        显示字符串并等待击键(36,type,s,x,y ,color,-1)
type:b0=0 x 为数值,=1 x为变量
type:b1=0 y 为数值,=1 y为变量

显示字符串s,自动处理了阴影背景,等待键盘输入,输入Y则跳转变量设为0,输入其他则跳转变量设为1。键盘输入后清屏。
(x,y)为字符串左上角的屏幕坐标。
Color为颜色

该指令实际上是指令33,34,35的组合。如果要显示单独的字符串,可以使用本指令。但是如果想要实现更加复杂的效果,可以分别调用以上几条指令。比如可以显示一首诗,每按一个键多显示一行,显示完成后清屏。清屏可以调用游戏原有的指令0

  50 36 0 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 (20,30)Color40
  50 36 1 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 ([X20],30)Color40
  50 36 2 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 (20,[X30])Color40
  50 36 3 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 ([X20],[X30])Color40
  50 36 4 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 (20,30)Color[X40]
  50 36 5 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 ([X20],30)Color[X40]
  50 36 6 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 (20,[X30])Color[X40]
  50 36 7 10 20 30 40 0          ;  50(32):显示字符串并等待击键 显示字符串10 ([X20],[X30])Color[X40]
#看原本

6.6.        延时(37,type,n, -1,-1 , -1, -1, -1)
  type:b0=0 n 为数值,=1 n为变量

延时一定的毫秒数,n为具体延时的时间,单位为毫秒
注意这个延时的毫秒数不一定准确,需要试验确定具体的数值。

  50 37 0 10 0 0 0 0             ;  50(32):延时 延时10
  50 37 1 10 0 0 0 0             ;  50(32):延时 延时[X10]
#就是延时

6.7.        随机数(38,type, n,x , -1, -1, -1)
type:b0=0 n 为数值,=1 n为变量
   x=random(0 ~ n-1)
得到从0到(n-1)之间的随机数。赋给变量x

  50 38 0 10 20 0 0 0            ;  50(32):随机数 [X20]=Random(10)
  50 38 1 10 20 0 0 0            ;  50(32):随机数 [X20]=Random([X10])
#随机性事件增加可玩性,记着是(0 ~ n-1),即上面例子是0~9

6.8.        菜单选择(39,type,n,s,r,x,y)
type:b0=0 n 为数值,=1 n为变量
     b1=0 x 为数值,=1 x为变量
     b2=0 y 为数值,=1 y为变量


显示类似小宝商店那样的菜单,等待用户选择。


n为菜单项数
s为菜单显示数组。数组共n个数据,每个数据中保存一个字符串变量的编号。
r为返回的选择项。0表示没有选择,1-n表示选择的项
(x,y)为显示菜单左上角的屏幕坐标。
可以实现菜单选择功能。比如大家期盼已久的自废武功。可以先把主角武功显示出来,菜单选择废掉哪个武功,然后再删掉这个武功。

  50 39 0 10 20 30 40 50         ;  50(32):菜单选择 菜单个数10Str20()返回=[X30]显示位置(40,50)
  50 39 1 10 20 30 40 50         ;  50(32):菜单选择 菜单个数[X10]Str20()返回=[X30]显示位置(40,50)
  50 39 2 10 20 30 40 50         ;  50(32):菜单选择 菜单个数10Str20()返回=[X30]显示位置([X40],50)
  50 39 3 10 20 30 40 50         ;  50(32):菜单选择 菜单个数[X10]Str20()返回=[X30]显示位置([X40],50)
  50 39 4 10 20 30 40 50         ;  50(32):菜单选择 菜单个数10Str20()返回=[X30]显示位置(40,[X50])
  50 39 5 10 20 30 40 50         ;  50(32):菜单选择 菜单个数[X10]Str20()返回=[X30]显示位置(40,[X50])
  50 39 6 10 20 30 40 50         ;  50(32):菜单选择 菜单个数10Str20()返回=[X30]显示位置([X40],[X50])
  50 39 7 10 20 30 40 50         ;  50(32):菜单选择 菜单个数[X10]Str20()返回=[X30]显示位置([X40],[X50])
#就是菜单
實例中的Str比较複雜
其實是以數組形式讀取字串位址
如果數組20(0)是1000,數組20(1)是1500
第一個选项就是str1000
第二個选项就是str1500
菜单项数多於10項會顯示不到
选第一项返回值就是1
选第二项返回值就是2

6.9.        菜单选择(40,type,n,s,r,x,y)
type:b0=0 n 为数值,=1 n为变量
     b1=0 x 为数值,=1 x为变量
     b2=0 y 为数值,=1 y为变量
     b8-b15  最大菜单项,如果为0则最大菜单项自动设为5
   
显示可以上下滚动的菜单。

与39不同之处:
1.        此菜单项数可以多于最大菜单项数,当前选中项移到顶部或底部时,可以继续滚动。
2.        移到一个项时,不能再向上移动。移动到最后一项时,不能再往下移动
3.        为实现滚动显示,自动调用清屏指令,因此此指令的显示背景是自动绘出的,不用先调用了。(先调用也没有,滚动菜单时自动清屏了)

  50 40 0 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数10Str20()返回=[X30]显示位置(40,50)
  50 40 1 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数[X10]Str20()返回=[X30]显示位置(40,50)
  50 40 2 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数10Str20()返回=[X30]显示位置([X40],50)
  50 40 3 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数[X10]Str20()返回=[X30]显示位置([X40],50)
  50 40 4 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数10Str20()返回=[X30]显示位置(40,[X50])
  50 40 5 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数[X10]Str20()返回=[X30]显示位置(40,[X50])
  50 40 6 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数10Str20()返回=[X30]显示位置([X40],[X50])
  50 40 7 10 20 30 40 50         ;  50(32):菜单选择2 菜单个数[X10]Str20()返回=[X30]显示位置([X40],[X50])
#另一菜单,用法一样,不同之处看上面。type的值+256,最大菜单项就是1;+2560最大菜单项就是10了

6.10.        显示图片指令(41,type1,type2,x,y,n,-1)
type1:b0=0 x 为数值,=1 x为变量
     b1=0 y 为数值,=1 y为变量
     b2=0 n 为数值,=1 n为变量
type2:=0 显示场景贴图smp
      =1 显示头像贴图hdgrp
x,y 显示位置
n: 对于场景,为贴图编号*2;对于头像,为贴图编号

在位置(x,y) 显示一副图片。
此指令没有其他效果,如果要加边框、处理背景或者按任意键自动清除,请在指令前后自行增加其他指令。
注意显示的位置(x,y)并不在图象的左上角,可能是在右下角,具体位置请自行实践。

  50 41 0 0 20 30 40 0           ;  50(32):显示图片 场景图片40 位置(20,30)
  50 41 1 0 20 30 40 0           ;  50(32):显示图片 场景图片40 位置([X20],30)
  50 41 2 0 20 30 40 0           ;  50(32):显示图片 场景图片40 位置(20,[X30])
  50 41 3 0 20 30 40 0           ;  50(32):显示图片 场景图片40 位置([X20],[X30])
  50 41 4 0 20 30 40 0           ;  50(32):显示图片 场景图片[X40] 位置(20,30)
  50 41 5 0 20 30 40 0           ;  50(32):显示图片 场景图片[X40] 位置([X20],30)
  50 41 6 0 20 30 40 0           ;  50(32):显示图片 场景图片[X40] 位置(20,[X30])
  50 41 7 0 20 30 40 0           ;  50(32):显示图片 场景图片[X40] 位置([X20],[X30])
  50 41 8 0 20 30 40 0           ;  50(32):显示图片 场景图片40 位置(20,30)
  50 41 0 1 20 30 40 0           ;  50(32):显示图片 头像图片40 位置(20,30)
#显示图片,图象的x,y偏移会改变显示的位置(x,y)的中心

6.11.        改变主地图坐标(42,type,x,y,0,0,0)

type: b0=0 x 为数值,=1 x为变量
     b1=0 y 为数值,=1 y为变量

改变主地图的主角坐标为(x,y),用于从场景中出来时到主地图其它地方。

  50 42 0 30 20 0 0 0            ;  50(32):改变主地图坐标 (30,20)
  50 42 1 30 20 0 0 0            ;  50(32):改变主地图坐标 ([X30],20)
  50 42 2 30 20 0 0 0            ;  50(32):改变主地图坐标 (30,[X20])
  50 42 3 30 20 0 0 0            ;  50(32):改变主地图坐标 ([X30],[X20])
#还要说明吗?

6.12.        调用其它事件(43,type,n,x1,x2,x3,x4)
调用编号为n的事件。相当于函数
type: b0=0 n 为数值,=1 n为变量
     b1=0 x1 为数值,=1 x1为变量
     b2=0 x2 为数值,=1 x2为变量
     b3=0 x3 为数值,=1 x3为变量
     b4=0 x4 为数值,=1 x4为变量
N为事件编号,数字
X1-X4为事件的4个参数,在被调用的事件中对应于内部变量7100H-7103H

用该指令可以实现函数功能。
注意调用事件和被调用事件(函数)共享变量空间,因此要注意函数中的变量不要与调用事件的重复,一般可以在函数中用编号较大(如大于5000)的变量编号。
设定4个参数主要是为了把变量传递到函数中,方便调用函数。在函数中可以把他们的值再赋给其它变量以便使用,当然也可以直接使用这些内部变量编号,但最好不要这样做,因为这些变量编号是内部的。

如果要从函数返回值,则不能通过参数,只能利用变量来实现两边共同访问。

  50 43 0 50 10 20 30 40         ;  50(32):调用其它事件 Call Sub50(10,20,30,40)
  50 43 1 50 10 20 30 40         ;  50(32):调用其它事件 Call Sub[X50](10,20,30,40)
  50 43 2 50 10 20 30 40         ;  50(32):调用其它事件 Call Sub50([X10],[X20],[X30],[X40])
  50 43 3 50 10 20 30 40         ;  50(32):调用其它事件 Call Sub[X50]([X10],[X20],[X30],[X40])


6.13.        调试指令(48,x, n,-1 , -1, -1, -1)
依次显示变量x-x+n,n为数值

此指令用于中间调试,可以显示变量的值,按任意键显示下一个变量,直到显示完毕。
X可以为内部变量。比如7000H为内部跳转变量的编号,在调试时可以使用此指令查看内部变量的值

  50 48 10 40 0 0 0 0            ;  50(32):调试指令,显示变量 [X10] -- [X49]
#显示变量x至x+n,上面就是显示变量10至变量49



7.        各指令的重要性
知道那一项指令的重要性高,就要优先那一项

必用的有:

2.1.跳转、3.1.变量赋值、3.4.四则运算、3.5.变量判断、4.1.读对话到字符串、4.2.sprintf、、4.4.字符串合并、4.5.产生空格字符串、
5.1.保存人物物品等属性、5.2.取人物物品等属性、6.2.显示字符串、6.3.处理背景、6.5.显示字符串并等待击键、6.8.菜单选择、6.11.        改变主地图坐标


学了更好:
3.2.数组变量赋值、3.3.取数组变量值、4.3.取字符串长度、
5.3.存队伍、5.4.取队伍、5.5.得到主角携带的物品数量 、5.10.存给定内存地址数据、5.12.取人物物品等属性名称、
6.1.修改指令参数、6.4.读键盘、6.6.延时、6.7.随机数、6.9.菜单选择、6.10.显示图片指令、6.12.调用其它事件


其他可以等学完这些再慢慢了解

[ 本帖最后由 scarscc 于 2008-6-21 14:16 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-7 13:59 | 显示全部楼层
8.        长篇指令解说

以下指令在南宫梦的再战江湖使用过

8.1        菜单1(三项)
  50 0 1002 0 0 0 1 0            ;  50(32):变量赋值 [X1002]=0
  50 0 1000 0 0 0 1 0            ;  50(32):变量赋值 [X1000]=0
;:Label3
  50 3 0 2 1001 1000 100 0       ;  50(32):四则运算 [X1001]=[X1000]*100
  50 3 0 0 1001 1001 2000 0      ;  50(32):四则运算 [X1001]=[X1001]+2000
  50 1 3 0 1100 1000 1001 0      ;  50(32):数组变量赋值 数组1100([X1000])=[X1001](Int)
  50 3 0 0 1000 1000 1 0         ;  50(32):四则运算 [X1000]=[X1000]+1
  50 4 0 0 1000 3 0 0            ;  50(32):变量判断 If[X1000]<3 then JMP=0 else JMP=1
  36 256 -44 0                   ;  36(24):跳转变量JMP是否为0是则跳转到:Label3
;上面这一段的目的是改X1100=2000,X1101=2100,X1102=2200,做菜单用
  0                              ;  0(0)::空语句(清屏)
  50 0 1 7814 0 0 0 0            ;  50(32):变量赋值 [X1]=7814(第一个选项的对话编号)
;:Label4
  50 3 0 2 1005 1002 100 0       ;  50(32):四则运算 [X1005]=[X1002]*100
  50 3 0 0 1005 1005 2000 0      ;  50(32):四则运算 [X1005]=[X1005]+2000
  50 32 0 1005 4 0 0 0           ;  50(32):修改下一条指令参数 下一条指令参数4=[X1005](即是Str400=talk([X1])变成Str[X1005]=talk([X1]))
  50 8 1 1 400 0 0 0             ;  50(32):读对话到字符串  Str400=talk([X1])
  50 3 0 0 1 1 1 0               ;  50(32):四则运算 [X1]=[X1]+1
  50 3 0 0 1002 1002 1 0         ;  50(32):四则运算 [X1002]=[X1002]+1
  50 4 0 0 1002 3 0 0            ;  50(32):变量判断 If[X1002]<3 then JMP=0 else JMP=1
  36 256 -60 0                   ;  36(24):跳转变量JMP是否为0是则跳转到:Label4
;上面这一段的目的改Str2000=talk([7814]),Str2100=talk([7815]),Str2200=talk([7816]),做菜单用
  50 34 0 80 95 90 63 0          ;  50(32):处理背景 位置(80,95) Width=90 Height=63
  50 39 0 3 1100 100 85 100      ;  50(32):菜单选择 菜单个数3Str1100()返回=[X100]显示位置(85,100)
  50 4 0 2 100 0 0 0             ;  50(32):变量判断 If[X100]=0  then JMP=0 else JMP=1(如按esc,[X100]=0)
  36 256 0 2                     ;  36(24):跳转变量JMP是否为0否则跳转到:Label5
  0                              ;  0(0)::空语句(清屏)
  7                              ;  7(7):无条件返回(按esc就无条件返回)
;:Label5(选了的继续)
此指令解说到此,如果真的看不懂,就暂时当天书吧,红字改菜单项数,蓝字第一个选项的对话编号

8.2        

[ 本帖最后由 x0x 于 2007-1-29 15:45 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 14:11 | 显示全部楼层
阁下有学过C++吗?没有的话还能看懂就真的很厉害,
补充地方就留给其他高手吧,我不献丑了......
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 15:13 | 显示全部楼层
不加分加精华就没天理了


另外6。4是用来读取输入的字符的ASCIII码啊

[ 本帖最后由 KG 于 2007-1-7 15:21 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 15:26 | 显示全部楼层
确实不错,建议加个精,虽然解读不太全,看出费了很多心,再说我也不看不懂
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 15:33 | 显示全部楼层
强烈支持所有有志于指令开发的兄弟
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 15:47 | 显示全部楼层
楼主写他可能认识我,我可不认识它..高手与菜鸟的区别就在这..
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-7 16:07 | 显示全部楼层
还不把你逼出来????

就是因解读不太全,所以这是初版
我相信努力做可以令这成为正式版
希望大家支持
对于6.8.菜单选择之类难解釋的指令,我想用再战的事件作例子
不然很难说明

P.S.我就是因没学C++所以有一大堆不懂…

[ 本帖最后由 x0x 于 2007-1-29 14:15 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 16:49 | 显示全部楼层
C++当年我只看了三天就丢一边了,所以....... 看不懂
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 16:54 | 显示全部楼层
虽然我大学里学了两个学期C++..而且自认学的还不错..虽然能找到一些共通点..但基本上还是完全看不懂..
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 16:58 | 显示全部楼层
本来想把所有教程看看,自己尝试着做的..置顶的看着都很容易..
看完这个..额滴神啊```额滴雄心直接萎掉了- -
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 22:14 | 显示全部楼层
1、数组:
例:
数组100[0]、100[1]……100[10]意义同变量100、101……110
数组只是为了方便统一处理

2、字符串:
例:
假设100号物品名字为“血刀”
STR200=读取物品编号100名字
因为字符串和变量占用的是同样的空间
所以X200、X201两个变量的值即STR200

3、sprintf(9, type,s, format, x, -1, -1)
这里的format是C语言里的变量格式,即“%d”“%c”“%f”等(本人只用过%d)
使用时要先把“%d”这两个字符做成一个对话,记下对话编号N
然后用“读取对话到字符串”把N号对话赋给字符串 STR Y
然后用sprintf(9, type,s, Y, x, -1, -1)这个命令把变量x的值以Y的格式做为字符串赋给字符串s

4、字符串长度
不用说了吧,就是取字符串长度
例子:
做菜单,内容为物品+数量
如果不用字符串长度的命令,单纯两个字符串连接(数量如何变成字符串?看上一个命令),效果如下:
药材100
屠龙刀1
……

如果用读字符串长度处理一下,得到物品名的长度X,然后用一个常量N减去X得到Y,在物品名和数量中间加上Y个空格
是不是很美观呢?

5、S*数据
没用过

6、读键盘
根据南宫老师测试,这个指令返回值为输入键的ASCIII值

7、菜单
菜单选择(39,type,n,s,r,x,y)
n=菜单项数
s=这是一个数组,用来存放每一项的字符串编号
r=菜单选择项返回值,即选择了第几项
例如要做一个可以选择身上已学会武功的菜单
要先把身上每一个武功的名称存到字符串STR100、STR200、STR300、STR400 ……STR1000
然后数组S[0]=100,S[1]=200……S[9]=STR1000(S的值由自己确定,但不能是100-1100之间的值)
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-7 22:22 | 显示全部楼层
很不错
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-8 13:00 | 显示全部楼层
顶楼主一下     虽然我一点都看不懂的说
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-8 23:34 | 显示全部楼层
原帖由 KG 于 2007-1-7 22:14 发表
1、数组:
数组100[0]、100[1]……100[10]意义同变量100、101……110

终于明白循环中为什么要用到数组了
如数组100([X0]),在每次循环中[X0]加1的话就可以每次循环新增一个变量了。
不用循环时可以直接用变量赋值,不必用数组,
但没有数组的话就做不出可以新增变量的循环。
原帖由 KG 于 2007-1-7 22:14 发表
2、字符串:
假设100号物品名字为“血刀”
STR200=读取物品编号100名字
因为字符串和变量占用的是同样的空间
所以X200、X201两个变量的值即STR200

原来STR=string=字符串…
难怪指令用上STR1000、STR1100、STR1200
就是为免字符串变量互相复写合并
要在顶帖记下~!
原帖由 KG 于 2007-1-7 22:14 发表
4、字符串长度
如果用读字符串长度处理一下,得到物品名的长度X,然后用一个常量N减去X得到Y,在物品名和数量中间加上Y个空格
是不是很美观呢?

问一问,产生空格字符串是产生半角空格' ',全角空格' ',还是两个半角空格'  '?
原帖由 KG 于 2007-1-7 22:14 发表
6、读键盘
根据南宫老师测试,这个指令返回值为输入键的ASC I I I 值

多了个I
原帖由 KG 于 2007-1-7 22:14 发表
7、菜单

我不明白的是6.9.        菜单选择(40,type,n,s,r,x,y)的最大菜单项,
     b8-b15  最大菜单项,如果为0则最大菜单项自动设为5
二进制1111111100000000(-256)是不是最大菜单项有13个?还是8个?
--------------------------------

P.S.其实基本上简单的驿站功能可以实现了
就是出大地图后画面还是你离开的場景,要等一等画面才会转到你改的坐標

[ 本帖最后由 x0x 于 2007-1-12 17:44 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-9 02:29 | 显示全部楼层
原帖由 x0x 于 2007-1-8 23:34 发表
[quote]原帖由 KG 于 2007-1-7 22:14 发表
4、字符串长度
如果用读字符串长度处理一下,得到物品名的长度X,然后用一个常量N减去X得到Y,在物品名和数量中间加上Y个空格
是不是很美观呢?


问一问,产生空格字符串是产生半角空格' ',全角空格' ',还是两个半角空格'  '?
[/quote]

一个半角

原帖由 x0x 于 2007-1-8 23:34 发表
[quote]原帖由 KG 于 2007-1-7 22:14 发表
6、读键盘
根据南宫老师测试,这个指令返回值为输入键的ASC I I I 值


多了个I
[/quote]
唔……知道意思就行

原帖由 x0x 于 2007-1-8 23:34 发表
[quote]原帖由 KG 于 2007-1-7 22:14 发表
7、菜单

我不明白的是6.9.        菜单选择(40,type,n,s,r,x,y)的最大菜单项,
     b8-b15  最大菜单项,如果为0则最大菜单项自动设为5
二进制11111111000101(8165)是不是最大菜单项有13个?还是8个?
[/quote]
这个我从来就没实验成功过,所以我写的储存箱都是只有5个选项


P.S.其实基本上简单的驿站功能可以实现了
就是出大地图后画面还是你离开的場景,要等一等画面才会转到你改的坐標

时间就是金钱,我是不会让玩家等的,我的观念是做不到完美不如不做
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-10 01:01 | 显示全部楼层
为啥我c++和汇编都学过还是看不大懂,丢人啊
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-10 21:32 | 显示全部楼层
感谢楼主发表了这么多解释。我之所以没有给出更多的解释,主要是因为这些指令都属于高级用法,类似于一门简化的语言,没有C语言编程的基础是很难理解的。而有基础的人现有的说明基本上已经够了。

菜单40和39的区别是39的菜单项最多10个,多了就显示不出来了。而40的菜单项目可以多于10个可以滚动显示。也就是说,菜单可能有100项,但是只能显示出若干项。其余的可以通过上下键滚动显示出来。而B8-B15定义显示出来的菜单项目,如果为0,则缺省显示5项。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-11 00:29 | 显示全部楼层
其实原本说明是足够的
因为以现在的情况来看
没有C语言编程又想学这些指令的真是没多少个
不过有了这篇可以令我修改事件的速度快一些
况且推广和教学等事由我们做会比较好
这样游泳的鱼就可专注开发FISH修改器
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-11 01:07 | 显示全部楼层
我就没学过C++,C语言也一塌糊涂(如果用分数衡量的话)
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-11 16:47 | 显示全部楼层
跳转36(type,偏移1, 偏移2)
假如正负我知道是往前还是往后寻找指标了,
那偏移1和偏移2的数字可以乱填吗?
指标n的n值我可以改吗?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-11 16:59 | 显示全部楼层
原帖由 游客 于 2007-1-11 16:47 发表
跳转36(type,偏移1, 偏移2)
假如正负我知道是往前还是往后寻找指标了,
那偏移1和偏移2的数字可以乱填吗?
指标n的n值我可以改吗?

偏移1和偏移2的数字(除0以外)可以乱填
偏移1和偏移2的数字其实是跳转指令和指标的距离,用FISH事件编辑移动就好
指标n的n值不能改
一定会是跳转指令自带的指标

[ 本帖最后由 x0x 于 2007-1-11 17:05 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2007-1-12 13:17 | 显示全部楼层
KG、游客,我成功了~我终于明白菜单选择2了
要明白怎改最大菜单项,
就先要明白type的原理:
所有50指令的type都是用二进制原理的
菜单选择2都是,但菜单选择2的type是用两BYTE
第一个BYTE(b0~b7)是用二进制,第二个BYTE(b8~b15)是用十六进
即100h的最大菜单项就是1个
000h和500h都是5个
1000h就是10个

多谢KG、游客、游泳的鱼的帮助和支持!


我连C语言都没学过
其实任何电脑相关的知识都没正式学过
真是有点怕以后FISH的新版出了而我却不懂得怎用…
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2007-1-12 14:52 | 显示全部楼层
看不懂
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-7 09:29

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表