关注PPSSPP模拟器时间稍长一点的玩家都知道,此模拟器的更新速度非常快,一日数更是常有的事。这样做的好处是老版中存在的问题可能会很快修复,但坏处则是修复了老问题却带了新问题,上一个版本运行正常的游戏到了下一个版本可能就会出问题。因此,想要模拟更多的游戏,各个版本的模拟器都需要准备一份。这样一来,喜欢修改的就麻烦了。虽然网上能找到几个银河漫步大大公布的正式版基址,由于数量太少,远不能匹配日新月异的其它版本模拟器。而相关搜索教程就更别提了。
还好,在switch0523网友所发的基址查找求助帖里,经Blader网友的指点,本人终于在自家电脑上成功找到其它版本模拟器的基址,这里特对Blader网友表示感谢。而原帖里所使用的修改工具MECC不太为人所知,为了方便更多人加入到研究修改PPSSPP的队伍中来,特地做了个CE移植版,希望大家能多多支持。
教程篇 教程开始前要说明一下,载入不同的游戏PPSSPP查看内存功能所显示的内容也会不一样,需要区别对待。以下会分别以《怪物猎人2G》与《重生传说》做例子来讲解如何搜索基址,所使用的PPSSPP版本为:0.9.5-357-gddf5b69。
先载入游戏,按Ctrl+M键打开内存查看窗口(图01),按原帖所讲从08804004开始用“字节数组”方式搜索图中红框选中的8个字节(图02),会得到两个地址,此时打开计算器,先选中科学模式下的16进制,再用下面那一个较大的地址按原帖教程所讲,依次减去4、4000、8800000得到最终要搜索的数值4C00000。最后回到CE,用“精确数值+4字节”并钩选Hex直接用16进制方式搜索4C00000就能得到基址010912C8了(图03)。
01
02
03
接下来用《重生传说》再搜索一次,为的是让大家能像原帖讲的那样举一反三,灵活处理。同样先载入游戏并打开内存查看窗口,发现从08804000开始是一大段的0(图04),那么该如何搜索呢?经本人尝试,最好是从“头部”也就是020、030开始的地址搜索,这里选择从08804020开始搜索8个字节,同样得到了两个地址(图05)。接下来就简单了,这次用下面较大的地址依次减去20、4000、8800000,同样得到最终要搜索的数值4C00000,那么结果显而易见了,由于地址相同就不重复贴图了。
04
05
疑问篇 教程到此结束,本人却产生更多疑惑。在CM中添加正确的相关信息后,可以很方便指定搜索范围以过滤掉不必要的地址。由于PPSSPP是动态运行的,在得知了基址后,如何在CE上实现CM这样,指定只属于PPSSPP 0-1800000的搜索范围,此其一;
第二,有过其它机种模拟器Hack或Debug经验的人应该知道,参考金手指码可以很容易得到偏移地址,也能很方便地转移到CE或添加了基址的EC与CM上使用。以SFC金手指为例:7E1234表示偏移为01234(7F1234则表示11234),在CE中用基址加1234的偏移便可得到指向该金手指所控制地址的指针。而在添加了基址的EC或CM中,则可直接在内存窗口中输入1234的偏移地址从而转到对应的内存地址。
这里再以《怪物猎人2G》举例:通过CE搜索金钱得到的动态地址为XXXFF090(不管怎么搜索只有前三位不固定),而对应的金手指码为211FF090,后面5位与CE动态地址后5位是相同的,不知这与查找偏移之间有没有什么关联呢?那么,问题来了,像这种通过多次计算得到的基址,该如何参考金手指码从而在CE中正确地添加偏移得到稳定的指针呢?
第三,其实解决了上面两个问题后,应该可以实现大部份金手指码的功能,但PSP的金手指码中有一种很复杂的指针码,也是需要通过基址+偏移来定位的(例如战神系列的HP地址),像这种本身就包含指针的地址,CE或CM又该如何解决呢?
PPSSPP发布已经一年多了,至今还没有一款CE或CM制作的动态修改器(如果有请指正),我想应该与这些问题都没有解决有关吧,希望这篇教程能吸引更多的人加入讨论,以便早日打破这种怪圈。