标题:
【代码修改】用信息传送剧本指令修改游戏封面
[打印本页]
作者:
鲍三郎
时间:
2026-1-13 21:06
标题:
【代码修改】用信息传送剧本指令修改游戏封面
瓦岗有一个非常有意思的功能,就是随着游戏流程推进,再次进入游戏后,标题界面的游戏封面也会随之改变,据说是利用了原版的三鸟来进行这种超越出游戏存档,直接影响全局的操作。游戏自带的宝物图鉴也有这种特点(只要点亮过某个道具,无论之后读哪个存档都会显示),而三鸟和宝物图鉴的信息都存在sv.e5中,因此利用该文件,并结合信息传送实现一个类似点亮宝物图鉴的效果,从而改变游戏开局读取的封面,有助于提升游戏的互动感和沉浸感。在此特别感谢普罗大神,因为这些地址和函数的用法都是他告诉我的
在这之前还要多提一句,6.5发布帖提到
六、环境设定进入公档(数据保存至sv.e5的04-06位置)
整形变量4024 默认0 公档、1 私档(同原版)
我简单测试了一下sv.e5文件各个字节的含义,结果如下,如与实际有出入也请指正
00-02代表三只鸟,为0是没有
03-07是环境设置里的内容,其中
03是花色,四种花色分别取0-3,无取4
04是环境设定中左边一栏的五个勾选,从上到下分别是1、2、4、8、16(10H)
05是讯息显示速度,快中慢分别为012
06是移动速度,快中慢012
07是背景音乐滚动条的大小,取值0-64
08-0f不知道
10-10e,共254个字节,每个字节代表一个道具,为0则宝物图鉴中显示未解锁,不为0则显示解锁,如果data设置中未勾选进入宝物图鉴,那对应这个字节就对游戏没有任何影响
08-0f我推测是暂时没有使用到的字节,因此可以考虑选用这几个字节中的一个用于存储封面对应的编号,但是保险起见,这里选择手动在这些字节最后再扩展一个字节,具体操作如下:
(注意,下面改法不适用6.4及之前的引擎)
1.用UE打开SV.E5S,注意要用二进制打开
[attach]151731[/attach]
2.在10F对应的字节添加一个00,并保存
[attach]151732[/attach]
3.使用od将引擎中如下地址的108和10F分别改成109和110
[attach]151733[/attach]
这样就实现了sv.e5的扩展
下面是正式修改代码:
0042BDB1 |.^\E9 70E6FEFF jmp 0041A426 跳到空地址
0041A426 /> /6A 00 push 0
0041A428 |. |50 push eax
这一段是jmp0041A426破坏掉的原代码,照抄下来
0041A429 |. |68 0F010000 push 10F ; /Arg1 = 10F
0041A42E |. |E8 4DFEFFFF call 0041A280 ; \Ekd5三鸟.0041A280
这一段作用是读取sv.e5中的10F字节,结果输出在eax中
0041A433 |. |50 push eax
这一行对应原代码中42BDB4处为push 0,这个0就代表logo.e5文件中第1张图,修改之后,此处从push 0变为push eax,这个eax的值就是前一行从sv.e5中提取出的数字,后续可以通过剧本指令修改sv.e5中这个字节的值,从而实现封面的替换
0041A434 |. |8B44E4 04 mov eax,dword ptr [esp+4]
复原eax
0041A438 \. |E9 79190100 jmp 0042BDB6
跳回去
这里多提一点,如果觉得前面给sv.e5扩展字节的操作太繁琐,可以尝试直接使用sv.e5中的08-0f字节,这样就不需要进行扩展字节的三个步骤,相应的,41A429处的push 10F也要改成对应的数字,如选用08字节,41A429处即改成push 08。这个改法理论上没问题,但是我个人没有测试过
到这里代码的修改就完成了,接下来是剧本指令的用法,如图
[attach]151734[/attach]
第一行照抄
第二行,第一个数字自己填写,填几就是logo.e5中的几号图,第二个数字271是10F的十进制,如果前面用的是08字节,这里就要填08
第三行照抄
第四行照抄
这个剧本指令的效果就是将sv.e5中对应的字节改成自己设定的数字,因此大部分情况下只需要改第二行的第一个数字。
运行完这一条剧本指令后,再次启动游戏,封面就会改变,因此建议每个r剧本开头都写一条这个指令,这样只需要读取一遍某关的战后存档,之后封面就会变化。
举例:如果写0,代表将封面设置成logo.e5中的第一张图,同理,写5就代表第六张图
[attach]151735[/attach]
如果想新增封面,只需要在logo中新增图,比如新增图序号是33,数字就写32
[attach]151736[/attach]
假如我把这条指令写在r10的最前面,那么只需要读取s9的战后存档,封面就会直接变成这张图
(读完档之后不需要专门存档,封面会直接变)
下面是洗隋录系列6.4引擎改法,由于6.4引擎sv.e5中有空闲的字节,因此不需要额外扩展,但是6.4与6.5地址存在一定偏差,具体代码如下
0042BDCF |.^\E9 9BE6FEFF jmp 0041A46F
0041A46F /> /6A 00 push 0
0041A471 |. |50 push eax
0041A472 |. |6A 07
push 7
; /Arg1 = 7
(第七个字节,后面剧本指令中也是7)
0041A474 |. |E8 07FEFFFF call 0041A280 ; \Ekd5剧本换封面.0041A280
0041A479 |. |50 push eax
0041A47A |. |8B44E4 04 mov eax,dword ptr [esp+4]
0041A47E \. |E9 51190100 jmp 0042BDD4
剧本写法如下
[attach]151737[/attach]
一、三、四行照抄,第二行第二个数字照抄,
第二行第一个数字可以自己设定
根据这个思路,开局BGM也可以用同样的方法改变,这里同样提供一个适用6.4洗隋录系列引擎的用法
代码修改:
地址 十六进制数据 汇编代码 注释
00404CB7 6A 08
push 8
00404CB9 E9 C5570100 jmp 0041A483
跳到空地址
6A 08 E9 C5 57 01 00
0041A483 E8 F8FDFFFF call 0041A280
0041A488 50 push eax
0041A489 B9 B8694B00 mov ecx,004B69B8
0041A48E ^ E9 2BA8FEFF jmp 00404CBE
E8 F8 FD FF FF 50 B9 B8 69 4B 00 E9 2B A8 FE FF
剧本写法如下
[attach]151738[/attach]
一、三、四行照抄,第二行第二个数字(8)照抄,
第二行第一个数字可以自己设定
效果就是指定SoundTrk中任意一个为进游戏BGM,建议每个剧本开头都写一条这个指令,这样只需要读取一遍某关的战后存档,之后BGM就会变化。
举例:如果第二行第一个数字写5,代表将BGM设置成05-AudioTrack 05,同理,写18就代表18-AudioTrack 18
[
本帖最后由 鲍三郎 于 2026-1-13 21:20 编辑
]
图片附件: [1]
图片1.jpg
(2026-1-13 21:12, 35.66 K) / 该附件被下载次数 9
http://xycq.org.cn/forum/attachment.php?aid=151731
图片附件: [2]
图片2.jpg
(2026-1-13 21:12, 75.47 K) / 该附件被下载次数 10
http://xycq.org.cn/forum/attachment.php?aid=151732
图片附件: [3]
图片3.jpg
(2026-1-13 21:16, 90.82 K) / 该附件被下载次数 8
http://xycq.org.cn/forum/attachment.php?aid=151733
图片附件: [4]
图片4.jpg
(2026-1-13 21:16, 24.05 K) / 该附件被下载次数 7
http://xycq.org.cn/forum/attachment.php?aid=151734
图片附件: [5]
图片5.jpg
(2026-1-13 21:16, 174.3 K) / 该附件被下载次数 8
http://xycq.org.cn/forum/attachment.php?aid=151735
图片附件: [6]
图片6.jpg
(2026-1-13 21:16, 80.93 K) / 该附件被下载次数 8
http://xycq.org.cn/forum/attachment.php?aid=151736
图片附件: [7]
图片7.jpg
(2026-1-13 21:16, 37.59 K) / 该附件被下载次数 10
http://xycq.org.cn/forum/attachment.php?aid=151737
图片附件: [8]
图片8.jpg
(2026-1-13 21:16, 52.91 K) / 该附件被下载次数 8
http://xycq.org.cn/forum/attachment.php?aid=151738
作者:
ささきこじろう
时间:
2026-1-16 09:37
08-0f的字节是尚未使用的内存区。
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/)
Powered by Discuz! 5.0.0