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这个地址做相应的操作(锁定),达到相应的效果(命不改变)。
我只能说:呵呵,又废话了多了。想想,我们死了一条命,就是对 0032这 个生命值地址进行“改写”,因为是“改写”,右键0032(NES内存)这个地址之后, 我们“给地址0x0032添加写入断点”,添加之后会弹出调试器,不理它,切回游 戏画面。当然,生命值要进行“改写”,我们就英勇的去撞子弹吧,少年!
我们查一查6502大全里面会知道(不知道你可以查这篇文章的附录)
D6命令是DEC存储器单元内容减1,寻址方式是零页寻址(1) X变址(2)。
当然我们非常好理解,存储器单元内容减 1,喜闻乐见,发来贺电,就是减 一条命罢了。于是我们就是不让它执行这条命令行,自然就不会减命了。
用鼠标右键直接点击那个红框框的地方, 进入16进制编辑器(ROM文件),被
选中的就是D6,于是我们修改成EA EA
EA在6502汇编中是NOP就是无操作的意思,也就是执行这行代码的时候 --FA讲制编辑衆-编聲RA1倩转 血UMU范
文件① 編蛊⑥ 查着① 书蹩辺)W Qf)
no
co
PO
(10
to
(12
10
CO
C9
Cl
00
00
02
00
C2
00
C6
00
05
00
00
00
05 D 0 Dri 5 3 O 4
F
on 2
0 0
1 Boon 2
5
o
n o Q o n 7 o-
o n 3
o o
n 2
Q
o
n o Q on 04D厂 CD
7
o
F
clop 1
o o o Qw 7 n
称结/擀味地址(E)
给地址0x0032脈加读取斷点追)
箔地址0^0032恭加写入斷点粗)
给地址0x0032丽办臥行断点但)
馬力叫務除书赛CA)
OOOAO6O3OO 0006000000 00 00 02
00 01 00
00 DO 0
0 0A 06
06 7C
DO 0?
0C 0?
02 07 07
F0 30 00
00
IE F0 0 0
00
00
00
00
00
3C
10
02
10
Ofc 00 00 1 E
D 0 D
6
o
-y
o o o nu
o o nu o OOOOOA6O 00000200 OOO2O1A51OO1OO OOOOO29OOOOOS OOOFOO71OO2OO 000F009000000
|(图 2-1)
(图 2-2) "ICEU1 2. 1. 6-
図件⑧游找四I
翻身之后,游戏会暂停,然后调试器的第一行会显示 什么都不做,就是要傻楞两行
强调一下,输入命令要打完整,要使输入标示跳入下一个代码中才行,比如 代码原本是95,要改成85,不能只打一个8,要打完整个代码85,要不然模拟 器不承认你的修改。
之后我们切回调试器,这个时候调试器就变成了这样:
65D2调试赛
(图 2-4)
好了,再怎么死也死不完了
2、无限金身
金身,所向披靡的一种标志,一种必须的存在,一种 GOD MODE向往……
(这个作者在写小说么……扔砖头了哦! !!)不好意思,又废话了。百度一下我 就知道金身的地址是00B0,这个要想想,金身为什么会打不死(因为他是金身啊, 废话),是游戏的一种判定,读取金身这个地址内容,是金身,就不死,否则翻 身。这个思路很重要,因为要涉及断点的判定方法是读还是写。
好了,找到思路之后,我们添加 00B0的断点(NES内存)[n |07:DA03:EA
07:DA04 :El
07:DAOS:&0 HOP
HOP
RTE (图 2-3)
修改好之后双击右边的断点中的 0032,使0032之后的 EC-W--变成-C-W--
让模拟器取消对0032断点的监视(要不然会一死因为已经监视了 0032的“改写”
会再次暂停的,要恢复再双击即可),然后点运行即可
[远行] 歩入
■ ______________ J
歩出 步过
1 ________
址8行
据寻至: 0000
FC: CO5D 1撥寻兀, EG-VT— -编辑RAI篇转OaOOO
文件緒I墮〕直看① 弔签⑩ 帮助®
一添加断点之后,模拟器马上暂停,有下面两种可能
了解的我自然能看出来原理,不过不了解的也希望大家都可以试着修改, 修 改错误不会造成死机,只会造成无法玩游戏而已,而且FCEU)可以在你修改过后 撤销修改。
停留在图2-8的童鞋,请点一下运行,应该就能停在图2-9 了,然后我们看 代码。B5 BO, B5是什么,我们查一下。LDA--由存储器取数送入累加器,MR A, B5,零页X变址。零页寻址X变址没什么好讲的,不懂可以再看看(1) (2)。
由存储器取数送入累加器,也就是从 00B0这个地址读取数字送出来,然后 放入累加器A中,关于累加器A,之后会有介绍,目前就当做能寄放数字并且能 运算的东西吧。把00B0的数字送出来之后,下一行代码是 F0 12,F0我们能查 查看“如果标志位Z=1则转移,否则继续”,我用简单的方法解释一下,读取00B0 的内容放入累加器A中,如果相等则跳转。这样读下来或许感觉少了些什么, 没 错,什么相等啊?
其实在这里,如果没有给出比较数,默认情况下可以理解成为与0进行比较, 于是这句话可以理解成了: 读取00B0的内容放入累加器A中,和0进行比较, 如果相等则跳转(3)。跳转8个代码,可以自己数数看,正好到 D482的地方。 000000:
000010:
C00020:
000030:
000040:
D00050
OOOOGO: 000070 000080 000090 0000A0
ODOOBO:
OOOOCC;
OOQODO:
noociEO -
ODOOFO:
0001 010 ■
000110■ o 2 o o 8 1 o n
o o- 1
o- c o o c c c 4
8 0 0 0 3 0 0
D Irtuooooo 4
3 0 2
14
0-2000-0
30000 o-loooon ro o- o n o o o仃0 10-7
1
o o o o o o n ooonoooooDon 2 0 0 012 o o o o o n OOOO72COOO-OA o
4
o c o 1 o o- o o o A
07*UF8000D00n 40
0 0
Oft
0 0
肌 0? 27 00
00
00
00 n件 B B o o o o o n o o- o o- o o- o A
绐地址QxOOED雨加读取断点血) o O 0-0
錯地址OkODBO泵加写入斷点迪
鰭地址OxCOBO忝加执行斷点⑧
證加/移隊韦摇® tl(图 2-7)
02 B01E E4 LDV 甜(LX SOOEO =
02 E020 FO BEQ $B034
02 E022 A9 EDA #S04
02 B024 es STA 5000D =
C2 B026 AE LDA SQ01A =
02 B026 5D 52 ED EOR SB052.
X @ SED52 -#SDO
02 BD2E Au LDY 能04
02 B02D JE AND SOOOO 三 JJSB2
02 B02F FO BEQ SB033
02 B031 AO LDY #$05
02 B033 9S TYA
02 B034 B4 DA LEV $DA,X SOODA =
(图 2-8)
07 B47G1EE EO
07 D47S:Fa 09
07 D47A1A5 1A
07 D47C:29 07 07 DJ7E:D0 02
07 D^eOrDG BO
07 Dq92:E5 匚E LDA 甜Cl很 eooEO = #S00
BEQ SD4S2
LDA SD01A 二
AND 般07
BNE SD492
DEC €00B0 二 jreao
LDA SCE.X SOO匚E = Jf$OO (图 2-9) O