索引:
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 编辑 ] |