扩容作弊:泡泡龙3(土星版)
在本期中,我们将探讨爆破行动3(又名拼图龙3),这是Taito的益智游戏。
在查看这款游戏的数据时,有些字符串似乎属于一个未使用的菜单,吸引了我的注意:
06039da0 "URA SWITCH "
06039db4 "MY CHARA "
06039dc8 "PLAY STAGE "
06039ddc "GAME LEVEL " 可惜,它无法通过作弊码访问。但我做了一个补丁可以重新启用它——可以从世嘉极限!下面我会介绍这个贴片的工作原理。
连接作弊菜单
通过用 Ghidra 追踪上述字符串的引用,我得到了函数06058b10.反编译器里有类似这样的代码(我给变量和函数加了名字):
if (game_state_060dc4d4 == 0x27) {
if (game_type_060dc4c8 == 5) {
render_cheat_menu_05_0603aee4();
}
else if (game_type_060dc4c8 == 1) {
render_cheat_menu_01_0603a4c8();
}
else if (game_type_060dc4c8 == 3) {
render_cheat_menu_03_06039ad8();
}
}变量的含义如下:
game_state_060dc4d4追踪游戏进程。州际0x1是开场动画,状态0x2是正常的游戏玩法,状态0x4是获胜动画,等等。game_type_060dc4c8存储当前的玩法风格。0x11P街机,0x31人街机与CPU,0x5 是挑战.
上面的代码是在寻找状态0x27.如果你用内存编辑器或动作回放代码强制游戏进入那个状态,就会弹出一个作弊菜单。这是给1P街机玩法风格:
以下是挑战(左)和1人街机与CPU风格:
菜单激活时,你可以用方向键进行修改并提交A按钮:
- 该区域编号和区域舞台/游戏舞台道具控制你玩的关卡,在不同的玩法风格中有不同的含义。
- 该URA交换机使另一个世界作弊码的影响——通常你在标题画面上输入。激活时,它会启动不同的阶段。
- 我的查拉/查拉数字控制你所操控的角色。
我怀疑开发版本的游戏将这个菜单连接到手柄按钮,以便让质量保证人员更方便。但在最终成品中,这种感觉被遗弃了。
为了重新连接,我借用了Z按钮的功能。通常,你可以按Z用来隐藏HUD文字。以下是HUD默认状态(文字开启)和隐藏状态(文字关闭)的截图:
函数在060385b0控制此功能。在反编译器中看起来是这样的:
if (((p1_pressed_01 & 0x10) != 0) || ((p2_pressed_060927ba & 0x10) != 0)) {
suppress_hud_060dc818 = suppress_hud_060dc818 + 1;
}
suppress_hud_060dc818 = suppress_hud_060dc818 & 1;
if (suppress_hud_060dc818 == 0) {
hud_vert_offset_060dc634 = 6;
}
else {
hud_vert_offset_060dc634 = -0x20;
}有趣的是,按键时它并没有真正关闭HUD文字Z- 它只是把它移到屏幕可见部分(位置)稍高一点-0x20).
我的补丁很简单——它会改变你按下后第一次写入的目标Z.而不是存储一个值0x1到“抑制HUD”地址时,它会写入一个值0x27到“游戏状态”索引:
if (((p1_pressed_01 & 0x10) != 0) || ((p2_pressed_060927ba & 0x10) != 0)) {
game_state_060dc4d4 = 0x27;
}这是 Mednafen 调试器中反汇编代码的视图:
有了这些改动,你可以通过按下Z每当你对正在玩的游戏感到厌倦时,
其他
我查了PlayStation版本的拼图龙3在美国称为爆破行动 '99为了这个作弊菜单,但它不存在!工作人员名单上是同一批程序员,所以我不明白为什么会缺失。
如果你喜欢复古游戏,你也许还会喜欢《隐秘宫殿》的播客。在最新一集中,Hidden Palace创始人drx和我与一位孢子对这款游戏的预发布版本充满热情,这为模组界带来了推动。