【原创】【东方地灵殿】浅析某全开档的 "Ai"(附清除"Ai"的补丁)
东方地灵殿吧
全部回复
仅看楼主
level 11
阿空
镇楼
,正文在 2 楼
2014年08月01日 01点08分 1
level 11
如果你的东方地灵殿使用了某全开档,你所保存的每一个 REP 的机签后面都会莫名其妙地多出 2 个字母 "Ai" ,使得原本应该只有 8 个字符的机签奇迹般地变成 10 个。
由于我自己也用这个全开档,所以每次看到自己打的REP里多出这两个字母都很不爽。于是利用最近空余时间分析了一下游戏主程序 th11.exe ,发现原因貌似跟默认机签有关。
我们知道游戏会保存你上次输入的机签(如果你从未输入过,那么就是 8 个空格)。而每次你保存 REP 时,默认的机签即为你上次输入的机签。而在游戏内部,会先把上次输入的机签拷贝到一个 buffer 中,玩家输入机签时所修改的,以及最终在 REP 里保存的便是这个 buffer 里的内容。而这个拷贝操作使用的是类似 C语言库函数 strcpy() 的操作,也就是循环拷贝字符,直至遇到 *\0* 结束。
而问题在于这个全开档的默认机签,她的第 9 和 第 10 个字节分别为 *A* 和 *i*。我们知道东方STG的机签应该固定为 8 个字符(你没填的地方其实都填了空格,而不是没有字符哦),所以第 9 个字符应该为 *\0* (字符串结束标志)。那为什么这个全开档的默认机签的第 9 个字符不是 *\0* 呢?那就只有问全开档的作者了。
正常情况下,因为玩家只能在游戏中输入长度为 8 个字节的机签。那么玩家不管怎么努力,都无法改变 buffer 中第 9 个字节及其之后的内容。于是,从默认机签中拷贝而来的 "Ai" 自然也是改不掉的,所以最终就跑到了所有你保存的 REP 里。
那么,解决的办法就是,在游戏运行时直接改游戏内存,把默认机签的第9个字节改成 *\0*,关掉游戏。以后再保存 REP 时就不会有 "Ai" 了。
默认机签的地址在 th11.exe 进程内存的 [4a8ebc]+2dde0 处 。如果使用了全开档,那你应该看到 第9 和 第 10 个字符(偏移 8 和 9)分别为 *A* 和 *i*,把 *A* 的十六进制值改成 00 ,改好后为了保险可以先退出游戏,以后你保存的 REP 的机签就不会再拖个 "Ai" 了。
如果你不懂内存修改,或者懒得自己动手,可以下载我写的补丁程序。该补丁只需应用一次,以后保存的 REP 机签就正常了(除非你又重新用了没打补丁的全开档)。
无论哪种改法理论上都不会影响除了默认机签以外的游戏数据。不过为了保险起见,建议先备份一下游戏数据文件 scoreth11.dat 。
2014年08月01日 01点08分 2
level 11
补丁程序(th11aifix.zip): [无效] http://pan.baidu.com/s/1kTwXL0F
2014年08月01日 01点08分 3
level 15
点赞
2014年08月01日 05点08分 4
level 12
这个不错,那个AI是比较烦
2014年08月01日 09点08分 5
level 12
碉堡了
2014年08月03日 01点08分 6
level 7
欢迎LZ,本人 OD+IDA 的路过…………
2014年09月15日 05点09分 7
我是 hxd 搜默认机签,cheatengine 搜指针搞定[滑稽]
2014年09月17日 01点09分
回复 天使的枷锁 :[滑稽],同道中人,握个手!
2014年09月21日 11点09分
level 6
好评
2014年09月25日 03点09分 8
level 12
赞 。。 收了(我竟然一直没发现那儿有个“ai”
2014年09月25日 15点09分 9
level 11
给的EXE一运行游戏就崩,我只好下了个CE自己动手把它改了[喷]原来这么容易
2014年10月03日 01点10分 10
[汗]会崩么?有没有错误信息?
2014年10月03日 02点10分
回复 天使的枷锁 :[汗]是游戏崩了,没有错误信息.
2014年10月03日 11点10分
@天使的枷锁 启动游戏本体,启动补丁,本体自动关闭,补丁报错说没找到窗口
2021年01月12日 07点01分
level 1
感谢大佬分享!顺便问一下,已经存过的replay可以直接改么[阴险],梦B重新通一遍L难度太累了[阴险]
希望这贴还活着[滑稽]
2019年01月24日 13点01分 11
不可以
2019年01月25日 02点01分
1