FC游戏按键修正的教程.docVIP

  • 11
  • 0
  • 约1.81千字
  • 约 2页
  • 2017-05-04 发布于四川
  • 举报
FC游戏按键修正的教程

?????? 游戏有很多种修改,这次我们来说说如何做到在游戏中按某键得到某效果的修改方法,虽然是以FC为题材,不过只要知道了这种方法,再去了解下其他机种的汇编语,那样就可以把那种效果搬到其他的机种了。 注意:这篇教程不是基础教程,一些修改游戏最基本的这里不会赘述,没有任何修改基础的人很难看明白,新人最好去翻翻修改游戏的基础教程,网上很多。 好,接下来进入正题: 1.首先要知道FC游戏所用的汇编语——6502汇编(网上可以轻松搜索到),因为以下修改需要用到一些6502的简单指令。 2.需要的工具有1.VNES DEBUG版 2.VNES模拟器 3.EMU CHEAT(用来找EC码)4.16进制编辑器(推荐ultra edit 和 winhex) 3.用模拟器运行FC游戏,用EMU CHEAT找按键内存地址和你想要的效果地址,比如你要按某键使生命为99,那除了找到按键内存还要找到生命内存地址。 4.找到需要找的地址后就用VNES DEBUG版的模拟器运行游戏,设置断点,等游戏自动暂停后使用跳转指令跳到游戏的空白内存,然后添加指令来达到想要的效果。 5.在游戏的内存里写完指令所对应的机器码后就进行调试,看你想要的效果有没有,如果有了就用16进制编辑器打开ROM,把内存里写的机器码写到ROM里,保存之后就完成了,接下来详细解说。 找到按键内存地址——运行游戏后不按键搜00 随便按一个键(按住)后搜大于,然后松开搜00,再按住其他的键再搜大于,如此反复 就能搜到很少的地址,自己判断哪个或者试验。 好,我们以FC的双截龙2为例子,搜到的按键内存为00E2 并且每个按键值分别为:上[08] 下[04] 左[02] 右[01] B[40] A[80]? SELECT[20]?? START[10],并且搜到体力内存为041E 满值为7F。 接下来用VNES DEBUG版运行游戏,先打开RAM(用来看内存的),然后打开DEBUG窗口,把刚才找到的按键内存地址设置为断点,格式为[00E2],然后点右边的确定, 如图: 然后游戏就会因为运行到你设置的断点而停止运行,这时可以看到很多指令,我们只看最后两条: FD7A:??95 E0 STA $E0,X? :[00E0]=A=0x00 FD7C: ?94 E2 STY $E2,X? :[00E2]=Y=0x00 我们可以试着在断点处输入 [00E2]=Y=0x80 然后在游戏中按A键,看游戏会不会停止。 结果是暂停了,接着我们查看内存,先找一???空白区域,一般是3-5行以上的FFFFFF,实在没有就找000000000,不过0000000容易有BUG,而这个游戏就没有什么FFFFFFFF(注意:找空间最好从C000-FFFF那里找,因为有些游戏8000-BFFF会切页(这个暂时不解说了)。 ????? 我这里就准备写在FFC0那里。然后找到地址 FD7A:95 E0 和 FD7C: 94 E2 把 95 E0 94 E2 改成 4C C0 FF (意思是跳转到FFC0那里,注意高低位互换)把4C C0 FF覆盖掉95 E0 94 E2前3个字节,后面那个 E2 留着不用管。 然后到FFC0那里写上覆盖掉的那两条指令 95 E0 94 E2 ,接着我们就准备把这个游戏改成按SELECT这个键让体力回复满,看看上面的按键值,SELECT键的值是什么,是 20 ,所以我们就接着输入: 48 C9 20 D0 05 A9 7F 8D 1E 04? 68??4C 7E FD 上面的机器码代表的指令是: PHA A入栈(可以理解成保存寄存器A里的数据) CMP #$20 对比寄存器A与20(20是SELECT的按键值) BNE #$05 如果不相等就跳过5个字节,相等的话继续运行,其实就是判断有没有按SELECT键. LDA #$7F 把7F送入寄存器A(7F是体力满的时候的数值,这一段也可以理解成mov a,7fh) STA $041e 把寄存器A的数据写入地址041e(这个时候寄存器A的数据是7F) PLA A出栈(还原寄存器A在保存的时候的数据) JMP $fd7e 跳转到地址fd7e,返回到原来的程序 然后进入游戏试验,成功之后,把你改的代码写到用16进制编辑器打开的ROM里就可以了,这样你就完成了按某键得到某效果的修改了。

文档评论(0)

1亿VIP精品文档

相关文档