设为首页收藏本站

永远的光荣

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2179|回复: 5

【原创】PC版大航海时代2的SNR剧本脚本文件的初步分析

[复制链接]

3

主题

0

听众

736

积分

中级会员

Rank: 3

帖子
22
精华
4
发表于 2015-12-5 17:35:29 |显示全部楼层
本帖最后由 red_fire_fox 于 2015-12-6 00:02 编辑

【原创】PC版大航海时代2的SNR剧本脚本文件的初步分析


一.文件介绍:
SNRX.dat触发脚本文件,X=0是事务所与国王任务,1-6对应法雷尔,卡特琳娜,奥托,恩斯特,皮耶德,阿兰。
SNRX.mes对应的台词文件。

二.脚本执行的基本特点:
SNR命令的特点和汇编语言差不多,但无法用IDA来读取。另外要特别注意的是里面的16进制数据代码是顺的,
比如10000就是27 10,而不是Main.exe里的10 27。
执行逻辑就是按时间和触发要求的先后顺序一个个往下执行,每个事件中的具体动作也是顺序执行,比如:
1,弹出卡特琳娜与法雷尔剧情小图
2,播放卡特琳娜主题乐
3,弹出带卡特琳娜头像的对话框
4,卡特琳娜台词1
5,卡特琳娜台词2
6,…………
因此只要找到了关键的声望触发点,或者直接干脆找到某个具体动作就能很快定位命令位置。比如搜索奥托剧情里第一次弹出皮耶德对话框处,往下就很容易找到他的要价代码。

对于同一个事件触发里不同场所的脚本则先后不定,比如公爵府里送法雷尔蛇形剑的命令地址却在王宫揭露马丁内斯诬陷的前面。

这些命令无法随便增减改变文件长度,不然似乎会出现
Bug和触发顺序错误。通过清FF可以删除一些不要的语句,比如罗耀拉追击事件发生后不论输赢都被全歼的舰队状态命令可以选择干脆清零。

SNR文件进行研究测试的一个方便之处是在游戏运行中只有在进入某个场景或时间改变时才会读SNR文件来判断触发条件,并执行触发,因此可以一边游戏一边改,在即将发生的事件触发前存个档就可以反复看修改的执行过程与结果,比修改Main.exe要大大方便多了

三.一些基本的通用命令代码的分析举例:

1.弹出人物头像对话框:
举例:弹出皮耶德头像对话框
CC 00 04
分析:
CC 00
04 头像序号

注意:头像序号00-7F不是航海士序号,而且其实和航海士本身的位置和归属情况不存在任何关联,具体可以用百度大航海时代2吧友botxp整合的头像列表来查找

2.人物台词:
举例:
C8 00 C9 C7
分析:
C8
00 C9 台词序号(对应mes文件里的台词的目录的序号)
C7

在脚本文件里绝大部分就是以上这两个命令,尽量不要改动,但对于快速定位相关其他动作的地址很有用处。

关于对应的mes文件,结构比较简单,第一部分就是台词地址的目录,dat调用的就是这个,后面就是每段台词,以00分隔。由于目录不会自动变更,建议改台词不要改变句子长度,非要改变长度或增减对话的话就要改该句和后面所有台词的目录地址了,不编程序的话还是别尝试了。

台词的繁体中文字符串用DK2TxtView(http://zcompass.ys168.com/有下载)来查找,注意要先转换成繁体中文,在线简繁转换工具随便找一个用就成。数字和标点符号比较麻烦,是全角拼音,DK2TxtView漏了这个,只好根据剧情里出现的具体例子来建立代码表。英文数字和标点符号原版台词里基本没用过,但其实可以用就是ASCII码,用的时候注意它只占1个字节,多出一个字节的话要用其他ASCII码补上。

3.播放音乐:
CA
07 音乐列表的序号
C0

这个比较复杂点,音乐列表的序号和对应的音乐文件序号是两个概念
音乐列表在Main.exe的以下地址段:45F70-45F85
15 13 16 12 02 03 04 07 06 05 0B 09 08 0A 01 0D 0E 0F 10 14 11 0C
这22个代码对应的就是吧友botxp提取出的midi文件的序号,具体名称如下:

列表号        文件号        说明
00        15        开场
01        13        公爵通关
02        16        片尾
03        12        开始菜单
04        02        法雷尔主题
05        03        卡特琳娜主题
06        04        奥托主题
07        07        恩斯特主题
08        06        皮耶德主题
09        05        阿兰主题
0A        0B        欧洲港口
0B        09        非洲美洲港口
0C        08        伊斯兰港口
0D        0A        印度港口
0E        01        东亚港口
0F        0D        补给港
10        0E        战斗
11        0F        胜利
12        10        晋见国王
13        14        酒吧
14        11        失败
15        0C        胜利号


4.弹出剧情小插图:
举例:
C0 03 CB 00 70 00 18 01
分析:
C0 03 CB 00 70 00 18
01 剧情插图序号

5.进入单挑:
举例:
E8 3C 安东尼奥•卡恩单挑事件
分析:
E8
3C 航海士序号

6.给钱或扣钱:
举例:
0C 00 03 E8 加1000金币
分析:
0C 00 加的是金币(02则是声望)
03 E8 金币数
这个命令配合其他命令条件则可以变成扣钱,具体还有待分析


四.以DC开头的复杂通用命令的举例分析:

1.给予主角随身物:
举例:
DC0006003F1D0019 阿兰获得猫
分析:
DC0006003F
1D0019 随身物序号

2.送船:
举例1:
奥托偷来的巴斯克号:地址0787-07ED
分析:
DC000700080501006D01EF110001
DC000A000F
1D00FFF90A 舰船类型
05FA0A0096 船名代码
DC00070000水手数
1C000096
DC00070006武装
1D0046
DC00070002耐久度
1D0064
DC00070003最大耐久
1D0064
这与NPC初始舰队舰船属性设置顺序相同00水手数,02耐久度,03最大耐久度,04转向力,05推进力,06武装
DC000700080501006C0104110001
DC00090000水*10
1C0007D0
DC00090002粮*10
1C0007D0
DC00090006弹药
1C000032
(00水,02粮,04资材,06弹药)

举例2:
卡特琳娜抢来的瑞贝尔号:地址069C-06ED
分析:
DC0003482E1D0003F90A
05FA0A0098
DC00070000
1C000078
DC00070006
1D0032
DC000700080501006C0104110001
DC00090000
1C0003E8
DC00090002
1C0003E8
DC00090006
1C000032
DC00090016携带商品类型
1D001F黄金
DC0009000C积载量
1C00000A

3.航海士属性覆盖:
举例:
普雷多•佩罗对安东尼奥•卡恩的属性覆盖,地址1C6A-1CD8
分析:
DC00033C0D 赋姓
1F0000D40240
DC00033C00 附名
1F0000
DC00033C1A 头像替换
1C000060
DC00033C1C  八项基本属性
1D004E
4C0001
1D004B
4C0001
1D0030
4C0001
1D005F
4C0001
1D0054
4C0001
1D0049
4C0001
1D001F
4C0001
1D0064
DC00033C24 航级
1D000E
DC00033C25 战级
1D0012
DC00033C31 国籍
0501006D01F06C0126110001

代码DC00033C里出现的3C即是要覆盖的航海士序号

研究过Main.exe和存档里航海士代码的会发觉这些属性序号就是航海士的50个字节代码的序号

4.舰队动作:
举例:
罗耀拉追杀奥托:地址0971-0999
分析:
DC010812001401004C00024C0102140100
DC0308121B 动作
1D0307
DC0308121C 目标(航海士或港口)
1D0302
DC03081229 舰队状态
1D0341

代码DC030812里的12为舰队序号

动作代码:
00 返回祖国
01 投资
02 贸易
03 埋伏
04 追杀1(叫骂,逢舰队就打)
05 追杀2(无敌对目标则返回祖国)
06 追杀3(无敌对目标则返回祖国)
07 搜索追杀4(默认剧本常用)
08 商船护卫
09 警戒
0A 跟随
0B 追杀5(逢舰队就打)


舰队状态命令在不同条件下变化规律还没分析清楚,但如果为00则是“被全歼”状态。

五.关于事件触发:

首先,经过严格的测试发现,所有的战斗与单挑的相关事件除了最终决战外,其实都不需要胜利,单挑失败和进入海战模式后撤退,都不影响后续剧情触发(天黑停战和逃跑一个结果)。剧情的触发条件其实就是看是否发生的必要的剧情对话,比如西班牙舰队追击卡特琳娜的两战都选择逃跑,剧情照旧。而罗耀拉追杀奥托时间,进入海战发生马休和奥托的对话后撤退,罗耀拉就直接“被全歼了”!

事件触发条件的命令比较复杂,最简单常见的还是声望触发条件设置:
举例:
奥托黄金船事件
分析:
DC 00 01 02 主角序号
00 4C 00 02 触发声望类型(00交易,02海盗,04冒险)
04 01 作用未知(有01,02之分)
00 0C 02 3A 98 触发声望值

这个命令有时则是用来加主角的声望,具体区别还未分析出来。

通过搜索这个命令,就可以把过去各个角色剧情攻略里的触发声望条件做一个更准确的验证:

1.约翰•法雷尔 冒险声望
2000 多明戈王子归国
8000 卡特琳娜追杀
16000 马沙华事件
30000 恩里克去日本
40000 恩里克来信直到最终决战马丁内斯

2.卡特琳娜•艾兰茨 海盗声望
1 无敌舰队追杀
1500 听闻法雷尔消息
2000 船厂初遇法雷尔
8000 普雷多•佩罗事件
15000 海战得到法雷尔在马沙华消息直到最终决战马丁内斯

3.奥托•斯宾诺拉 海盗声望
5000 与卡特琳娜酒吧见面
15000 皮耶德黄金船事件
(20000) 皮耶德黄金船事件跳过(到20000点声望,就遇不到皮耶德了)
30000 亨利八世召见到最终决战艾泽格

4.恩斯特•洛佩斯 冒险声望
1000 遇见劳拉
5000 港口对话更新
20000 港口对话更新
40000 得到去日本信息直到长安结局

5.皮耶德•康迪 冒险声望
10000 公爵府法雷尔请找圣人手杖
40000 阿兰在港口告知黄金国在日本信息直到最终结局

6.阿兰•维斯特 交易声望
40000 港务员埋怨阿兰帮助苏莱曼引发战争,直到最后买房结局
可见阿兰的声望触发和已有攻略里出入最大,实际其他剧情的触发条件都不是声望:
严格测试出的条件如下
苏莱曼第一次给50金块的条件:
(1)4处债都还清(皮耶德借钱给与不给都不影响)
(2)爵位升到士爵后和旅馆大娘对话
满足这两个条件后在伊斯坦堡的旅馆酒馆银行外的其他场所会得到奥斯曼召见消息。
伊斯坦堡酒馆遇法雷尔:
(1)苏莱曼给过50金块
(2)阿兰携带现金≥100金块
向皮耶德讨债的条件:
(1)奥斯曼同盟港超过30个。
(2)巴士拉找到阿兰妹妹后在伊斯坦堡向蒂迪亚汇报过见面情况,再出港投资出一个新的同盟港
满足这两个条件后回伊斯坦堡就会得到银行业务员要回威尼斯的信息。

阿兰和皮耶德的剧情里还有现金触发命令:
举例1:阿兰现金≥100金块,触发遇法雷尔剧情
EA 00 8E 00 64
举例2:皮耶德现金≥1金块,触发酒馆卖金质奖章藏金图剧情
EA 01 8E 01 01


已有 1 人评分纹银 贡献 收起 理由
compass + 50 + 10 很给力!

总评分: 纹银 + 50  贡献 + 10   查看全部评分

回复

使用道具 举报

82

主题

7

听众

3万

积分

超级版主

导航员

Rank: 15Rank: 15Rank: 15

帖子
5438
精华
33

游戏原创奖章

发表于 2015-12-5 21:46:52 |显示全部楼层
这个靠谱。
回复

使用道具 举报

3

主题

0

听众

736

积分

中级会员

Rank: 3

帖子
22
精华
4
发表于 2015-12-5 22:44:27 |显示全部楼层
测试过程累人啊,这些触发声望条件都是参考了攻略后反复试各种可能性的结果,还好SNR是在游戏中被临时调用而不是读在内存里,所以预先存个档反复测试的效率还行。
不像Main不但要退出游戏重进,数据部分的代码还要重开新游戏来看效果,要不是有功能强大的存档查看器,真是累死人
回复

使用道具 举报

0

主题

0

听众

65

积分

新手会员

帖子
36
精华
0
发表于 2015-12-11 00:38:36 |显示全部楼层
red_fire_fox 发表于 2015-12-5 22:44
测试过程累人啊,这些触发声望条件都是参考了攻略后反复试各种可能性的结果,还好SNR是在游戏中被临时调用而 ...

距离mod出新角色又进了一步
为了大航海时代II,加油~~
回复

使用道具 举报

1

主题

0

听众

53

积分

新手会员

帖子
25
精华
0
发表于 2016-5-31 14:20:32 |显示全部楼层
这个必须顶。
回复

使用道具 举报

0

主题

0

听众

4

积分

蜡笔小新

Rank: 1

帖子
1
精华
0
发表于 2017-3-19 23:37:04 |显示全部楼层
有个不情之请
有大大可以把大航海时代外传完美简体版 改做繁体版吗?
因为繁体版原来是 视窗外死机那种 十五年前左右 我玩的就是这版
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|永远的光荣 ( 京ICP备11036817号  

GMT+8, 2018-2-24 00:23 , Processed in 0.036492 second(s), 28 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部