标题: 曹操传剧本代码详解, 挖一坑
性别:男-离线 博雅张生
(张生手持石鼓文)

象郡公中书令枢密直学士

Rank: 19Rank: 19Rank: 19Rank: 19
资政殿大学士(从一品)
组别 经略使
级别 前将军
好贴 3
功绩 1118
帖子 1730
编号 28805
注册 2004-12-26


发表于 2005-12-12 19:42 资料 个人空间 短消息 看全部作者 QQ
其实也没有什么新东西。曹操传的剧本代码已经基本被研究透彻了。van的编辑器也做得很完美。
在这里我再把剧本代码总结总结,顺便把我这些天做剧本的经验写一写。
欢迎大家指正、补充。

一、剧本的基本结构

用剧本编辑器可以看到,曹操传的剧本是由多个Scene组成的。
而每个Scene是由一个或多个Section构成的。
每个Section由两部分组成:测试条件和事件。同一个Section的各个测试条件是and的关系,同时满足这些测试条件,才会发生下面的事件。

只含有一个Section的Scene和含有多个Section的Scene稍有不同。只含有一个Section的Scene的Section只能以2 内部信息为测试条件,也就是没有实际的测试条件。下面的事件会自动发生,按顺序执行一遍后自动转到下一个Scene,不需要用d 结束Scene。而含有多个Section的Scene的Section可以以各种测试代码为测试条件。系统按由下到上的顺序检查这些测试条件是否满足。一旦满足某个Section的测试条件,就执行这个Section的事件。执行后继续按由下到上的顺序(重新从最下面的Scene开始)检查各个Section的测试条件是否满足。要想进入下一个Scene,就必须用d 结束Scene。

Section的事件部分可以嵌套子事件,子事件里可以进一步嵌套子事件。子事件的结构与Section类似,但是只能有一个测试条件。如果子事件的测试条件不满足,则会跳过子事件而执行后面的代码。

下面说一下剧本文件的具体结构:

前10个字节是文件头: 45 45 58 00 01 02 00 00 00 00
在这之后的n*4个字节用来标志n个Scene的开始位置。其后就是各个Scene。
对于每一个Scene。首先要用2个字节说明这个Scene里有多少个Section,其后就是各个Section了。
每个Section,首先要用2个字节说明这个Section的总长度(不包括这2个字节本身),随后是各个测试条件的代码。测试条件部分的最后一条代码是0 事件结束,随后用2个字节说明事件部分的长度(同样不包括这2个字节本身),随后就是事件代码。事件部分的最后一条代码同样是0 事件结束。
子事件的开头是1 子事件开始标志(2个字节),随后是1条子事件测试条件代码。随后用2个字节说明子事件的事件部分的长度(同样不包括这2个字节本身),随后是事件代码。事件部分的最后一条代码同样是0 事件结束

二、剧本代码

0 事件结束

前面已经说过了。用于Section的测试条件的最后、Section的最后、子事件的最后。在剧本编辑器里是自动设置的,不能手动添加。

实际代码:
00 00

1 子事件设定

同样前面说过。是子事件开头的标志。在剧本编辑器里要用添加子事件的方法添加。要注意的是,在剧本编辑器要想删除或移动一个子事件,一定要把子事件设定和后面的子事件的内容同时删除或移动,否则剧本会出错,而且保存后无法再用剧本编辑器打开,只能用UE等工具修复。

实际代码:
01 00

2 内部信息

没什么实际意义,更多的是作为注释来使用。原版曹操传剧本多数内部信息没写什么内容。但我们做剧本时应该在这里写上这后面一段代码的作用,这样自己检查剧本也容易,其他人查看剧本也好理解。

实际代码:
02 00
05 00 文字 00

3 else

作为子事件的测试条件,与各种高级语言里的else含义相同,就是将和这个子事件并列的上一个子事件的测试条件取反。很有用。

实际代码:
03 00

4 询问测试

弹出一个对话框“可以么?”,根据玩家的选择来确定是否满足测试条件。注意如果要对是否两个选择都安排一些事件,那就需要两个子事件,第一个的条件是询问测试,而第二个的条件要用else而不要用询问测试,否则对话框会弹出两次。

实际代码:
04 00
26 00 XX XX (0000表示选否,0100表示选是)

5 变量测试

很重要的测试条件。同时测试多个变量。只有这些变量同时满足要求,才算是满足测试条件。

实际代码:
05 00
35 00 XX XX (要求变量值为true的变量个数,假设是a)
(XX XX)*a (a个要求变量值为true的变量序号)
35 00 XX XX (要求变量值为false的变量个数,假设是b)
(XX XX)*b (b个要求变量值为false的变量序号)

6 我军出场设定

用法比较固定。主要用在R剧本中。

(1)  出场限制是true,屏幕上出现“出兵”、“装备”、“买进”、“卖出”四个按钮。人数限制就是下一关的最大出场人数。最大是15,其后是5个强制出场人物和5个强制不出场人物。注意默认情况下,0号武将是强制出场的。所以在强制出场人物里不必填0号武将。但要想让他不出场,就要填到强制不出场的人物里。
(这一句通常用在R剧本,情节已经交待完毕,需要玩家调整装备买卖物品的时候)

(2) 出场限制是False,屏幕上的“出兵”、“装备”、“买进”、“卖出”四个按钮消失。此时其余参数不起作用。
(这一句通常用在R剧本出战测试的Section里)

实际代码:
06 00
2e 00 XX XX (0000表示出场限制为False,0100表示出场限制为True)
04 00 XX XX XX XX(人数限制)
(38 00 XX XX)*5  (五个强制出场的人物,FFFF表示无)
(39 00 XX XX)*5  (五个强制不出场的人物,FFFF表示无)

7 出战测试

按下“出兵”并选定人物按下确定按钮后,此测试条件成立。注意这个条件一旦成立,菜单会自动变成无效(类似与8 菜单处理False的状态),并且“出兵”、“装备”、“买进”、“卖出”四个按钮不消失但是也变得无效。此时如果使用 8 菜单处理 True 可以恢复到按下出兵按钮之前的状态。

实际代码:
07 00

8 菜单处理

控制菜单和菜单下面的一排按钮是否有效。

(1)当菜单处理为True时,这些菜单和按钮多数是可以点击的。(当然RS剧本略有不同,R剧本中检索未执行部队、结束回合、胜利条件、战场缩小图永远是无效的)

(2)当菜单处理为False时,只有第一个“结束游戏”的按钮是可以点击的,其余菜单和按钮都是无效的。

另外,在战斗过程中,我方阶段菜单总是有效的,友方和敌方阶段菜单总是无效的,所以战斗中这条指令不起什么作用。

实际代码:
08 00
2E 00 XX XX (0000表示False,0100表示True)

9 延时

延时在很多地方都用得上。用得比较多的是音轨或音效代码之后。如果需要音轨或音效放一段时间再执行后面的命令,就要用延时(岳飞传的满江红字幕就是这样弄的)。延时时间以十分之一秒为单位。

实际代码:

09 00
04 00 XX XX XX XX (延时时间,以十分之一秒为单位)

a 初始化局部变量

将所有局部变量的值都变成False。通常用在R剧本开头。
曹操传里的0-255号变量都是局部变量,256-2047号是全局变量。

实际代码:

0a 00

b 变量赋值

给变量赋值。

实际代码:

0b 00
04 00 XX XX XX XX  (变量序号)
27 00 XX XX (0100表示True,0000表示False)

c 结束Section

用来强行结束一个Section。

实际代码:

0c 00

d 结束Scene

用来结束Scene。前面已经提到了,如果一个Scene里只有一个Section,那没必要用这条代码。而如果一个Scene里有多个Section,就必须用这条代码来结束Scene。

实际代码:

0d 00

e 战斗失败

战斗失败。通常用在49 战斗结束之后。

实际代码:

0e 00

f 结局设定

结局设定。用在游戏的最后。

实际代码:

0f 00
12 00 XX XX (0000表示红线,0100表示黄线,0200表示蓝线)

待续……


顶部

正在浏览此帖的会员 - 共 2 人在线




当前时区 GMT+8, 现在时间是 2024-11-27 04:13
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.012499 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP