注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

シンワのブログ

 
 
 

日志

 
 

FC游戏按键得到某效果的修改教程  

2008-03-25 06:36:22|  分类: FC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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],然后点右边的确定, 如图:

FC游戏按键得到某效果的修改教程 - shinwa - シンワのブログ

然后游戏就会因为运行到你设置的断点而停止运行,这时可以看到很多指令,我们只看最后两条:

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 E0FD7C: 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

上面的机器码代表的指令是:

48           PHA            A入栈(可以理解成保存寄存器A里的数据)

C920      CMP #$20  对比寄存器A与20(20是SELECT的按键值)

D005      BNE #$05   如果不相等就跳过5个字节,相等的话继续运行,其实就是判断有没有按SELECT键.

A97F      LDA #$7F   把7F送入寄存器A(7F是体力满的时候的数值,这一段也可以理解成mov a,7fh)

8D1E04  STA $041e 把寄存器A的数据写入地址041e(这个时候寄存器A的数据是7F)

68           PLA             A出栈(还原寄存器A在保存的时候的数据)

4C7EFD JMP $fd7e  跳转到地址fd7e,返回到原来的程序

然后进入游戏试验,成功之后,把你改的代码写到用16进制编辑器打开的ROM里就可以了,这样你就完成了按某键得到某效果的修改了。

 

PS:

跳转指令也可以用JSR调用 机器码 0x20  如果要跳到地址$1234 就输入机器码 20 34 12  返回的时候只要 输入机器码 0x60 即可

这个指令也是占用3个字节,如果你覆盖了两条2字节的指令,那么最后一个字节要改为 0xEA  因为返回的时候是返回到EA这个字节上的,而EA是单字节指令NOP

  评论这张
 
阅读(5489)| 评论(41)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017