易码技术论坛

 找回密码
 加入易码
搜索
楼主: laugj

请求统一RPG的脚本语言

[复制链接]
 楼主| 发表于 2004-12-24 11:58:00 | 显示全部楼层
可是给点建议呦......
发表于 2004-12-24 12:24:00 | 显示全部楼层
27 SHOW  SHOW <CHAR>    ;激活人物 例:SHOW 1 //让赵灵儿出现(赵的ID=1,李=0,林=2,阿奴=3,后期巫后替换林的位置)
巫后替换么……?添加就行了……新仙剑的隐藏剧情林到最后复活了的……
发表于 2004-12-24 12:26:00 | 显示全部楼层
其他的暂时看来还不错。
 楼主| 发表于 2004-12-25 12:07:00 | 显示全部楼层
旧仙
DOS版d
发表于 2004-12-25 12:13:00 | 显示全部楼层
DOS版的真令人怀恋啊.............
 楼主| 发表于 2004-12-25 12:14: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 <INITX>,<INITY>,<DIRECTION>,<STEP>,<SCREEN> ;让玩家自己走动 例:AUTO 0,5,1 //让主角向上走5步,SCREEN为1时拖屏,0时屏幕不动,人物可以走出去(不会有BUG出现),3时视角跟着主角移动
32 SETPLAYER SETPLAYER <OFFSET>,<LEN>  ;更换玩家在地图上的MASK图片 例:SETPLAYER +24,24 //将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时可以使用,否则无效
42 GETSTAGE GETSTAGE <NPC>    ;得到NPC的STAGE值 送至A 例:GETSTAGE 8 //得到ID为8的STAGE值送到A
脚本缓存2KB
图库分为:
{
16x16共享图库(配合SETPLAYER SETBLOCK 等)
对话时头像图库
玩家动作图库
敌人动作图库
法术效果图库
系统图库(160x80比如说游戏制作群等.......)
动画图库(配合PLAY语句)
}

//以上语法非当前标准,一切待研究后决定-_-b~!
发表于 2005-1-25 18:44:00 | 显示全部楼层
不错不错,支持支持,我虽然还没学过LAVA(汗……),不过这样的话,我也可以学学了~~~~~~[em05]
 楼主| 发表于 2004-11-11 11:59:41 | 显示全部楼层 |阅读模式
请求统一一RPG脚本的语言,作为标准~!

RPG连们的神州用的引擎应该也是用脚本带动剧情的吧

(别告诉我是LAVA代码)

我认为有必要弄一个标准的脚本语言,中文的

能够满足大多数RPG游戏的剧情

并且有足够的升级可能


PSAVA代码做为脚本的缺点是不能用switch,所以要判断剧情就要用大量的"if"


恳求同意~
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-20 04:20 , Processed in 0.010866 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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