- 注册时间
- 2004-8-31
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2004-12-23 23:58:00
|
显示全部楼层
首先,脚本的运行方法:
假设有3个npc
那么每个NPC有个STATE状态和STAGE阶段(剧情进行的阶段)
STATE影响着NPC的状态,比如隐身等
STAGE则影响NPC的剧情脚本
STAGE为0时脚本是一段
为1时是另一段,虽然可以共享脚本,但正常是每个STAGE的数字代表一段脚本,随着更改STAGE的值,NPC做出的动作就各不相同
OFFSET:
偏移量,可正可负,不同的命令中有不同的指针基准(base)
比如LOAD命令是在玩家所有属性信息的指针PLAYER的基础想增加,负数则为一块256字节的可用空间
如次类推不加详细说明
寄存器:
A与B,虚拟的寄存器
用语运算:
A-B可以运算,如何运算B-A?
答:先SWAP即可
能判断A>B否怎么判断B>A?
答:先SWAP即可
总之SWAP配合各种运算可以达到所有效果
脚本语法
1 TALK TALK "LEN=256"[,ICO][,MODE] ;对话 例: TALK "你好你好!",1,0 //0在上面,1在下面,2全屏显示,3全屏滚屏速度1,4全屏滚屏速度2,5全屏滚屏速度3
2 MESSAGE MESSAGE "LEN=20" ;消息 例: MESSAGE "得到'蜂王密'" //根据字符长度的不同,框架大小就不同
3 ADDITEM ADDITEM <ID>[,COUNT] ;添家装备 例: ADDITEM 2,20 //增加ID为2的装备20件
4 CHKITEM CHKITEM <ID> ;检测装备 例: CHKITEM 2 //检测玩家有多少件ID为2的装备,结果送至寄存器A
5 DELITEM DELITEM <ID>[,COUNT] ;删除装备 例: DELITEM 2,10 //删除10件ID为2的装备
6 RESITEM RESITEM <CHAR> ;复位装备 例: RESITEM 0 //把李逍遥身上穿的装备清楚
7 SETITEM SETITEM <ID>,<LOCATE>,<CHAR> ;装备装备 例: SETITEM 2,1,0 //把ID为2的装备装在李逍遥'手'上(比如刀~剑)
8 ADDSKILL ADDSKILL <ID>,<CHAR> ;添加法术 例: ADDSKILL 8,1 //让赵灵儿学会ID为8的法术
9 CHKSKILL CHKSKILL <ID>,<CHAR> ;检测法术 例: CHKSKILL 0,0 //检测李逍遥是否学会了'治疗述'
10 RESSKILL RESSKILL <CHAR> ;复位法术 例: RESSKILL 1 //将赵灵儿的法术全部清楚掉
11 JUMP JUMP <OFFSET>[,OFFSET2...] ;跳转语句 例: JUMP label1 /*直接跳到label1处*/ JUMP label1,label2 /*随机跳到label1或label2*/
12 RNDNUM <RANGE> ;随机数字 例: RNDNUM 50 //生成0-50的数字送到寄存器A
13 SWAP SWAP ;寄存器调换 例 A=600000,B=80000) SWAP (A=80000,B=600000)
14 ADD ADD ;加法运算 A+B->A 例 A=600000,B=80000) ADD (A=680000,B=80000)
15 SUB SUB ;减法运算 A-B->A 例 A=600000,B=80000) SUB (A=520000,B=80000)
16 MUL MUL ;乘法运算 A*B->A 例:(A=60,B=8) SUB (A=480,B=8)
17 DIV DIV ;除法运算 A/B->A 例:(A=40,B=8) DIV (A=5,B=8)
18 COPY COPY ;复制运算 A=B 例:(A=20,B=60) COPY (A=60,B=60)
19 SET SET <NUM>[,SIZE] ;设定寄存器A A=? 例:SET 5000,2 //将5000这个数字以int形式存与寄存器A中
20 LOAD LOAD <OFFSET>[,SIZE] ;读取数据 A=(?) 例 OAD +4,2 //将当前地图的id以int格式发送到寄存器A中(在角色信息的地址基础上的偏移量,是什么要根据程序中的排列数据决定)
21 SEND SEND <OFFSET>[,SIZE] ;送数据 (?)=A 例 OAD +4,2 //将当前寄存器的值以int形式发送到当前人物的地图上(在角色信息的地址基础上的偏移量,是什么要根据程序中的排列数据决定)
22 BIG BIG <OFFSET> ;判断A>B? 例:BIG label1 //A>B就跳转到label1否则继续
23 EQUAL EQUAL <OFFSET> ;判断A=B? 例:EQUAL label1 //A=B就跳转到label1否则继续
24 DELAY DELAY <MS> ;延时 例 ELAY 150 //延时150毫秒
25 END END [MODE] ;结束脚本 例:END 0 //0.结束脚本退回游戏中玩家的操作 1.显示战斗失败 2.直接重新开始 3.通关
26 BATTLE BATTLE <ARRARY>,<BACKGROUND_ID> ;进入战斗状态 例:BATTLE 5,-1 //5是预定好的id为5的怪物组合方式,组合方式人为编写,-1为默认当前地图的背景图片,
27 SHOW SHOW <CHAR> ;激活人物 例:SHOW 1 //让赵灵儿出现(赵的ID=1,李=0,林=2,阿奴=3,后期巫后替换林的位置)
28 HIDE HIDE <CHAR> ;隐藏人物 例:HIDE 1 //让赵灵儿消失(但不清楚其属性等信息)
29 INKEY INKEY ;等待按键 例:INKEY //键值送到寄存器A中
30 PLAY PLAY <OFFSET>,<MASK?>,<X>,<Y>,<W>,<H>,<MS>[X,Y,W,H,MS] ;播放动画 例 LAY 0,0,0,0,160,80,100,0,0,160,80,100,0,0,160,80,100 //播放在图库的0偏移量的3张全屏图片连续组成的动画,每张图片显示完后延时100毫秒
31 AUTO AUTO <DIRECTION>,<STEP>,<SCREEN> ;让玩家自己走动 例:AUTO 0,5,1 //让主角向上走5步,SCREEN为1时拖屏,0时屏幕不动,人物可以走出去(不会有BUG出现),3时视角跟着主角移动
32 SETPLAYER SETPLAYER <OFFSET>,<LEN> ;更换玩家在地图上的MASK图片 例:SETPLAYER +768,768 //将16x16图库偏移768字节的数据暂时当作当前的人物MASK图片
33 RESPLAYER RESPLAYER ;还原玩家MASK图片 例:RESPLAYER //顾名思义,还原到正常状态
34 SETSTATE SETSTATE <NUM>,<NPC> ;设置NPC状态 例:SETSTATE 2,1 //将ID为1的NPC状态值设为2(0为可走上去,不激活脚本,1为不可以走上去,按输入激活脚本,2为不可走上去,在往上面走一步后激活脚本(人物不走上去,在NPC旁边继续想那方向走就激活脚本),3为可以走上去,人走上去后在激活脚本0)
35 SETSTAGE SETSTAGE <NUM>,<NPC> ;设置NPC阶段 例:SETSTATE 1,0 //将ID为0的NPC阶段值设为1(阶段值不同 NPC激活的脚本的位置就不同)
36 BUY BUY <ID>[,ID,ID...] ;出现购买窗口 例:BUY 2,3,4,5,6 //出现ID为2、3、4、5、6的装备,以够玩家选择
37 SELL SELL ;出现当铺窗口 例:SELL //出现自己的装备栏 和一价钱栏
38 SETBLOCK SETBLOCK <OFFSET>,<NPC> ;设置NPC的block图片 例:SETBLOCK +1536,0 //将ID为0的NPC在地图上显示的图片换为16x16图片库的+1536字节所在的数据(即使当前NPC就在视线内,也不即时发生变化)
39 RESCREEN RESCREEN ;恢复屏幕 例:TALK "呵呵" INKEY RESCREEN //先出现对话框'呵呵',等待按键后恢复地图状态(TALK功能使用前会根据是否已经恢复过屏幕而重新拷贝屏幕,能用到RESCREEN功能的命令还有MESSAGE和PLAY等)
40 SETMAP SETMAP <ID>,<X>,<Y>,<DIRECTION> ;更换地图 例:SETMAP 2,3,3,1 //转换到第3张地图上的x:3,Y:3位置上,玩家方向想右
41 DEBUG DEBUG ;进入调试状态 例 EBUG //运行后会出项类似WQXHEX的界面,当程序中 IS_DEBUG为-1时可以使用,否则无效
|
|