首先,感谢S大的无私奉献!
口袋红、金、银、水晶,有好几个年头了吧。尤其水晶这个版本,已经改了很多次,修正无数BUG。没有真爱是做不到这个程度的。
这次加入的时间调节功能很实用,原版的金、银、水晶都有过相关补丁,不过在中文版上都有冲突不能用,所以这次修改很有意义。
测试了一下,日版那个问题不大,但中文版的遇到剧情时很容易卡死。
正好这两天手头有点空,就稍微研究了一下,搞了一个修正方案。
不过自我感觉还不是很完美,所以把修改思路和代码都贴在这里给各位大神参考一下。
以下代码还借鉴了 infinest 的美版 Crystal RTC Changer 补丁,主要是有加速调节功能。
首先是中断切入点(2B):
0x0005AE -> 15 2D
其实就是改个地址,这个还是和S大的一样,ROM0也实在没什么能利用的地方了。
然后是预处理代码(16B):
0x002D15 -> FA AD CF FE C5 C2 1D 06 3E 02 EA 00 20 C3 70 7F
这个是关键点,也是改动比较大的地方,但因为只有16B空间,只能有限折腾一下。
主要思路是将允许调节时间的第一个判断条件放到这里来提前判断,目的是在大多数情况下让这里的PC不要走到ROM0以外的地址去,避免BANK切换冲突。(其实,将所有修改代码都放到ROM0里才是最完美的解决方法,但现实显然不允许这么做)
至于现场保护,在ROM0里实在是找不到足够的空间来做这些工作了,所以果断放弃。经自己实测,并没有太大问题,估计是原有的中端保护措施做的比较好。
再下来就是主体修改代码了(144B):
0x00BF70 ->
FA 57 CF FE 01 C2 1D 06 FA 25 D4 FE 04 C2 1D 06
06 01 F0 A4 CB 47 28 02 06 0F CB 77 20 07 CB 7F
20 3A C3 1D 06 FA B0 D4 80 FE 3C 30 05 EA B0 D4
18 F0 AF EA B0 D4 FA AF D4 C6 01 FE 18 30 05 EA
AF D4 18 DE AF EA AF D4 FA AE D4 C6 01 FE 07 30
05 EA AE D4 18 CC AF EA AE D4 18 C6 FA B0 D4 90
38 05 EA B0 D4 18 BB 3E 3B EA B0 D4 FA AF D4 D6
01 38 05 EA AF D4 18 AA 3E 17 EA AF D4 FA AE D4
D6 01 38 05 EA AE D4 18 99 3E 06 EA AE D4 18 92
这里主要借鉴了 infinest 的补丁思路,允许按住 A 键加速调节时间,相当实用。
因为还在中断里,所有调用及返回全部改成短跳,减少一点堆栈压力。这样做还有一个好处,就是代码可以方便移动到ROM任意位置,对应调整预处理代码中的跳转指令即可。
我这里是放在了ROM2的尾部,BF70 - BFFF 这个位置,可以根据自己需要再调整。
还有一个小改动(1B):
0x090EA8 -> 0E
这个是为了让时钟界面里按 A 键不会退出,这样加速功能才能正常使用。
最后小小吐槽一下,星星的汉化实在不怎么样,先天不足,算是这个改版的最大遗憾吧。