初来乍到,才疏学浅,希望前辈们多多指教。新手发帖,若有违规,望版主宽宥则个。{:1_931:}
下面正题
吾爱高手众多 涉及模拟者甚少 此贴重在抛砖引玉 愿那年街机带来的感动仍在心中
MAME PLUS 一款强大的模拟器 在下口舌笨拙难以言传 有心者请 鼓歌
此次以最简单的 拳皇97 放大招加血 作为主要内容
拳皇97 是SNK的一款游戏 只要是80年代后的几乎没有人不知道此款游戏 此游戏采用摩托罗拉的MC68000作为处理器
那么我们只需要了解简单的68K汇编指令集即可 具体自行寻找 不赘述
我们打开MAMEPLUS 开启调试器功能 执行拳皇97 如图 (基本快捷键如常用调试器 F5 run F9 设置/取消断点 F10步进 F11有子程序的步进 等等)
控制台中可以直接调用help查看调试指令
思路:放大招扣除能量点 在此处加入加血功能
我们开始游戏 假设无作弊码
那么我们需要自行搜索能量珠位置,并在其处下断点
ci 初始化搜索引擎
cn eq,1 搜索内存为1的地址
此时我继续积攒能量珠到2和3
再次搜索
得出三个地址 *-*如ce搜索是一样的
自行测试 得到1082E3则是P1能量珠的数量
对其下坑 wp 1082E3,1,w (当1082e3处被写入数据后中断,涉及长度为1)
放个大招 那么程序便会停止
如图 停下的上一句即使掉能量珠的语句 如果把其nop 则放大招不扣能量了
我们这里仍旧要扣掉能量 但是还要给自己回血
那么就要知道血量的地址 不知道的情况下 仍旧进行搜索 为了方便 这里已知1P血量地址为108239
此时1P的基址为A4 = 108100 那么可得全局血量基址为A4+139
我们加1/10个血量(67H=103)
我们所需要的就是把addi.b #a,($139,A4)插入这句话的前后即可
由于上下都被占了 那么只能跳到空白地方写入程序再跳回来了
比如我们需要跳转到 90000H这个空白处写程序 那么指令jmp $90000的机器码则是 4EF9 0009 0000 一共六个字节
很明显也是挤不下了 那么我们可以先跳到短地址 比如jmp $400 机器码是 4EF8 0400 再跳到长地址 即可
(有人在这里就要问 可以直接在短地址那里写就可以 这样是可以 但是短地址是稀有资源 能少用就少用咯)
那么程序出来了
[Asm] 纯文本查看 复制代码 org $400
jmp $90000
org $1e7f8
jmp $400
org $90000
subq.b #1,($1e3,A4) **恢复占用的语句
addi.b #10,($139,A4) **加血
jmp $1e7fc
以上代码可以使用easy68K进行编译得到机器码如图
那么我们打开拳皇97的rom 找到程序文件232-P1.bin(这个P1不是Player1哈 1P和P1不一样 就如3P和P3不一样)
使用十六进制编辑器打开 我使用winhex
ROM与程序中的显示是16位字节交换的
比如程序机器码是 12 34 56 78 那么rom会显示 34 12 78 56
如机器码4EF9 0400 在ROM就为F9 4E 00 04 如果看不顺眼可以用winhex全选右键交换 待做完修改后再转换回来
好 P1文件扔回rom包 运行测试
放大招之后
修改成功
由于血量大于67H 会出现乱码
那么我们可以在以上程序90000H处设置判断语句 加血后如果大于67H 那么就限制为67H
[Asm] 纯文本查看 复制代码 org $90000
subq.b #1,($1e3,A4) **恢复占用的语句
addi.b #10,($139,A4) **加血1/10
cmpi.b #$67,($139,A4)
bls _noact //低于或者等于67H跳
move.b #$67,($139,A4) //67H放入血量地址
_noact
jmp $1e7fc
最后 下载easy68k最新版请访问 www.easy68k.com就好
MAMEPLUS以及winhex请自行寻找
在下使用MAMEP版本 0.149
手残党边搞别写两个小时 终于弄好了 结尾不知道说什么
{:1_931:}
|