FC(NES)修改教程资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FC(NES)游戏修改基础教程
14号拐角
一、序言
在童年时期,很多人或许对于FC的回忆有许许多多,我也不例外,不过说实在话,我在家能玩到的FC游戏非常的少,回忆起来也只有几个,坦克大战,魂斗罗,赤色要塞,沙罗曼蛇……当然最经典的还是小时候玩的热血格斗……之后就由于种种原因再也没有接触了,直到PC的出现,我又重温了那些经典。
但是每每看到网上各种HACK版本,总是希望自己也能做点什么修改,所以各种找教程,各种翻资料……可能对于FC这种已经淘汰的游戏没有很多人关心一样,教程的东西也像烟雾弹一般,可以忽略一样……
但是对于已经进入迷途的我,似乎有种由衷的爱好般……
我教过一些人,但是总觉得自己的方法或许不得当,教不会,今天写出这些东西,希望能遇到一些有天赋的人,如果能遇到给予我批评指出的人或许会更好。
我不能保证我100%全对,有误的地方希望大家能更正吧。
好吧,或许大家都不喜欢看废话,于是我们开始吧……
二、基础修改
修改,当然要准备工具,这里我推荐一个非常强大的FC模拟器——FCEUX 系列,现在最新版本是2.1.6吧(在我打这篇文章的时候),它提供了非常齐全完善的调试器和16进制编辑器。当然,如果要修改FC贴图的话可以用很多FC 贴图修改器进行修改,网上应该有很多,这里我找不到好的东西,大伙可以自己找找吧,我主要是讲解游戏内容的修改,而不是贴图修改。
好吧,我们开始修改我修改到恶心的游戏——魂斗罗。
对于这一段,感谢小粽子以前的教诲。
魂斗罗很经典,可能到今天都没有人能够一命通关,对于这些头疼的玩家,我们就给他几个选项。1、无限命;2、无限金身;3、瞬秒敌人(不推荐修改,有点偏高端)。
友情提示,以下16进制编辑器中,在查看菜单有NES内存、PPU内存、ROM 文件,所以在进行修改之前,请注意自己所在那一页,以免修改错误导致没有相应的效果出现。
只有NES内存和PPU内存才能右键,但是在NES内存下无法进行修改,一改变之后数值会立即转变成为没有修改的状态,注意好自己所在页。
1、无限命:
我们在网上都能知道,魂斗罗的1P的生命值的地址是0032(如果不知道的话就自己网上查吧,如果金手指不会用/查,那就自己学吧= =)。我所点的地址就是0032(可以看看标题栏,上面有写),很多人都知道,游戏中的很多地方都是由大家所称的金手指,我所认识是NES内存所控制的,所以,对这些内存进行相应的操作,就能达到相应的效果……,比如金手指锁定某个地址,网上有
0032-01-14就会锁定一定生命数不变,然后就能达到无限命的目的,这个就是简单的对0032这个地址做相应的操作(锁定),达到相应的效果(命不改变)。
(图2-1)
我只能说:呵呵,又废话了多了。想想,我们死了一条命,就是对0032这个生命值地址进行“改写”,因为是“改写”,右键0032(NES内存)这个地址之后,我们“给地址0x0032添加写入断点”,添加之后会弹出调试器,不理它,切回游戏画面。当然,生命值要进行“改写”,我们就英勇的去撞子弹吧,少年!
翻身之后,游戏会暂停,然后调试器的第一行会显示
(图2-2)
我们查一查6502大全里面会知道(不知道你可以查这篇文章的附录)。
D6命令是DEC——存储器单元内容减1,寻址方式是零页寻址(1)X变址(2)。
当然我们非常好理解,存储器单元内容减1,喜闻乐见,发来贺电,就是减一条命罢了。于是我们就是不让它执行这条命令行,自然就不会减命了。
用鼠标右键直接点击那个红框框的地方,进入16进制编辑器(ROM文件),被选中的就是D6,于是我们修改成EA EA。
EA在6502汇编中是NOP,就是无操作的意思,也就是执行这行代码的时候
什么都不做,就是要傻楞两行。
强调一下,输入命令要打完整,要使输入标示跳入下一个代码中才行,比如代码原本是95,要改成85,不能只打一个8,要打完整个代码85,要不然模拟器不承认你的修改。
之后我们切回调试器,这个时候调试器就变成了这样:
(图2-3)
修改好之后双击右边的断点中的0032,使0032之后的EC-W-- 变成-C-W-- ,让模拟器取消对0032断点的监视(要不然会一死因为已经监视了0032的“改写”会再次暂停的,要恢复再双击即可),然后点运行即可。
(图2-4)
好了,再怎么死也死不完了。
2、无限金身
金身,所向披靡的一种标志,一种必须的存在,一种GOD MODE的向往……(这个作者在写小说么……扔砖头了哦!!!)不好意思,又废话了。百度一下我就知道金身的地址是00B0,这个要想想,金身为什么会打不死(因为他是金身啊,废话),是游戏的一种判定,读取金身这个地址内容,是金身,就不死,否则翻身。这个思路很重要,因为要涉及断点的判定方法是读还是写。
好了,找到思路之后,我们添加00B0的断点(NES内存)
(图2-7)
一添加断点之后,模拟器马上暂停,有下面两种可能
(图2-8)
(图2-9)
了解的我自然能看出来原理,不过不了解的也希望大家都可以试着修改,修改错误不会造成死机,只会造成无法玩游戏而已,而且FCEUX可以在你修改过后撤销修改。
停留在图2-8的童鞋,请点一下运行,应该就能停在图2-9了,然后我们看代码。B5 B0,B5是什么,我们查一下。LDA--由存储器取数送入累加器,M→A,B5,零页X变址。零页寻址X变址没什么好讲的,不懂可以再看看(1)(2)。
由存储器取数送入累加器,也就是从00B0这个地址读取数字送出来,然后放入累加器A中,关于累加器A,之后会有介绍,目前就当做能寄放数字并且能运算的东西吧。把00B0的数字送出来之后,下一行代码是F0 12,F0我们能查查看“如果标志位Z=1则转移,否则继续”,我用简单的方法解释一下,读取00B0的内容放入累加器A中,如果相等则跳转。这样读下来或许感觉少了些什么,没错,什么相等啊?
其实在这里,如果没有给出比较数,默认情况下可以理解成为与0进行比较,于是这句话可以理解成了:读取00B0的内容放入累加器A中,和0进行比较,如果相等则跳转(3)。跳转8个代码,可以自己数数看,正好到D482的地方。