longs 发表于 2009-12-8 07:42:39

FC(NES)模拟器金手指详解

  前几天花了点时间研究了一下模拟器金手指的功能,昨天花了一晚上时间写了一篇详细教程,发在http://bbs.ayinfo.cn/thread-216808-1-1.html,现转贴过来,供大家参考。

  FC全称为Family Computer,是日本任天堂公司1983年生产的游戏主机,在中国大陆一般称为“红白机”。在欧美则称为NES(Nintendo Entertainment System)。
http://bbs.ayinfo.cn/attachments/month_0912/09120719156f16aa6088f2e1da.jpg

  所谓“金手指”,就是指通过修改游戏的部分参数,达到无限生命、无敌、拥有道具等等功能,目前对FC游戏支持较好的模拟器有Nestopia、virtuanes等,现在以这两款模拟器为例,详细介绍一下如何在模拟器上使用“金手指”功能。

  一、什么是“金手指”
  “金手指”原意是指内存条金黄色的导电触片,因其表面镀金而且导电触片排列如手指状,所以称为“金手指”。因为金的抗氧化性极强,而且传导性也很强。不过因为金昂贵的价格,目前较多的内存都采用镀锡来代替。
  在游戏术语中,“金手指”指游戏机的修改工具,用此工具可以将游戏的内容修改,使得玩家快速增加自己的生命、金钱、力量、等级、道具等!
http://bbs.ayinfo.cn/attachments/month_0912/0912072015d98ccadd59f48d36.jpg

  “金手指”对应的英语术语中有两个名词,是大家最感到迷惑的地方。一个是Cheat code(作弊码),还有一个是Game genie(游戏精灵)。
  1、Cheat code(作弊码)
  Cheat code(作弊码)是指在游戏运行时,通过替换内存参数,达到作弊的目的。以游戏“马戏团”为例,游戏运行时,地址0060(十六进制,下同)存放的值表示生命数,游戏主角每死一次,此值减1,当此值为0时,GAME OVER……因此,我们如果让这个值永远不变,也就是永远不能为0,就达到无限生命的目的,这个方法就称为Cheat code(作弊码)修改方式。
  注意:Cheat code修改的数据在0000—07FF之间,也就是游戏机的RAM中,改变的是游戏的动态参数,而不是游戏的程序代码。
  2、Game genie(游戏精灵)
  Game genie(游戏精灵)是美国GALOOB公司推出的世界第一款金手指工具,作用是修改游戏。1991年 Galoob 玩具公司推出了Game Genie,但此举惹恼了任天堂公司:此设备使玩家得以在NES游戏中使用密技,因而能够轻而易举地获取胜利。任天堂公司将 Game Genie 视为一款破坏其游戏耐玩价值的工具,并试图阻止其上市销售。
  Game genie 是一个6位或8位的字母串,如“SXNVZPAX”。其实,这个字母串并不神秘,它实质是把Cheat code(作弊码)通过一定算法转变成的“作弊密码”,如上面的“SXNVZPAX”是日版“魂斗罗”的一个Game genie码,代表的含义是将地址E1FA的值由32改为173,作用是“无敌”,“SZUSOPVI”是它的另一个Game genie码,含义是将地址D939的值由214改为165,作用是“无限生命”。
  注意:Game genie修改的数据在8000—FFFF之间,也就是游戏卡的ROM中,改变的是游戏的程序代码!当然只是模拟改变,不是真正的改变,但一些游戏厂家也会利用Game genie改变游戏程序代码并烧录成游戏卡,这就是各种Hack修改版、无敌修改版游戏卡的由来。
http://bbs.ayinfo.cn/attachments/month_0912/0912071915773a1a65c6b587fd.jpg

[ 本帖最后由 longs 于 2009-12-8 07:45 编辑 ]

longs 发表于 2009-12-8 07:47:55

  可以看到,游戏机的整个64K空间中,Cheat code是修改前面RAM内存数据,Game genie是修改后面ROM内存代码,好比军队的空军和陆军,管辖的范围不同,但它们的目的一样,那就修改游戏参数或代码,降低游戏难度,使游戏更容易通关。

二、模拟器金手指修改方法

  模拟器的金手指功能,实际上就是Cheat code 和 Game genie功能,现在以Nestopia1.40中文版为例,详细介绍一下金手指功能的使用,同时也对virtuanes0.97中文版的金手指功能做个介绍,比较一下两个模拟器金手指功能用法。

1、Cheat code
  以游戏“马戏团”为例,这次修改的目的,是找到游戏的生命值参数的位置,并设置成“无限生命”。
  第一步:首先打开软件,载入游戏并开始进行游戏。游戏运行时,我们看右上角,主角的生命还剩下3次,这时打开“选项”菜单,选择“金手指”:
http://bbs.ayinfo.cn/attachments/month_0912/09120721016a96beea4f82dfd5.jpg

  第二步:出现金手指界面,点击“添加”:
http://bbs.ayinfo.cn/attachments/month_0912/091207205760fb00df188f8aa1.jpg

  第三步:出现添加代码界面,如“重置”按钮是灰色的,就直接点“取消”按钮退出,如果“重置”按钮不是灰色的,点击“重置”,初始化数据后再退出。然后再点“确定”退出金手指界面,继续游戏。参数的含义我们等一下再介绍。
http://bbs.ayinfo.cn/attachments/month_0912/0912072057b8d12bc07d5e6976.jpg

  第四步:站着别动,等火圈过来后主角死掉一次,然后再次返回游戏界面时,看到右上角主角人数变成2了,立刻再次进入金手指界面,再点“添加”进入添加代码界面:
http://bbs.ayinfo.cn/attachments/month_0912/09120720570667e4b7079633d5.jpg
http://bbs.ayinfo.cn/attachments/month_0912/0912072057e8e77a5d401e9e19.jpg

  第五步:这一步最关键!如上图,进入添加代码界面。CPU内存一项,Index一栏表示地址0000—07FF,R0一栏表示第一次来这里时内存初始值,R1一栏表示第二次来时内存的值。第二次来这里时,内存中一些参数发生了变化,我们知道第一次中断来到这里时,生命值是3,死掉一次再来到这个界面时,生命值变成2,所以我们设搜索过滤器中的A参数为3,B参数为2,选择R0=A和R1=B,意即设置搜索的条件:第一次中断时内存数据R0=3,第二次中断时内存数据变成R1=2。左边CPU内存一栏立刻发生了变化,符合搜索条件的只剩下0060地址,如上图,说明这个地址保存的就是生命值!

  第六步:在原始数据一栏,地址内容填0060,值填3,表示生命永远是3,当然你也可以填2,填5,等等,建议填2-5中的一个数,太大了可能会发生问题,反正不死就行了嘛。填写完毕后点击“提交”:
http://bbs.ayinfo.cn/attachments/month_0912/09120720571b95ed97226cda8e.jpg

  第七步:回到金手指界面,看到在我们找到的Cheat code前面有个复选框,选中表示生效,然后点“确定”回到游戏。
http://bbs.ayinfo.cn/attachments/month_0912/0912072101eed4255308900af9.jpg

再进行游戏,发现了吧,不管你死N次,生命值永远都是3,永远不会死!!好了,Nestopia的Cheat code使用方法至此就结束了。

[ 本帖最后由 longs 于 2009-12-8 07:59 编辑 ]

longs 发表于 2009-12-8 08:02:29

2、Game genie
  Game genie 是游戏牛人们通过反汇编游戏程序,找到游戏程序中设置有关参数的语句,然后直接修改程序(计算机的程序其实也是由数据组成的),其过程类似于软件的共享软件的破解。只不过在这里要破解的不是80X86 CPU汇编代码,而是6502 CPU汇编代码。

  第一步:从网上找Game genie打包下载。例如下面这个地址可以下载Nestopia和virtuanes最新的Game genie打包文件:
http://www.mightymo.net/downloads.html

  第二步:以Nestopia为例,将文件包内的文件解压到模拟器的\cheats目录下,都是后缀名为.xml的文件。例如日版魂斗罗Game genie的文件名为Contra(J).xml,内容为:
<?xml version="1.0" encoding="UTF-8" ?>
- <cheats version="1.0">
- <cheat enabled="0">
<genie>SXNVZPAX</genie>
<description>注释:无敌</description>
</cheat>
- <cheat enabled="0">
<genie>SZUSOPVI</genie>
<description>注释:无限生命</description>
</cheat>
</cheats>
这个文件相信大家应该能看得懂吧,下面是如何使用它。

  第三步:打开软件,运行日版魂斗罗游戏,在设置菜单中打开金手指选项,点击“导入”按钮,找到该Game genie文件:
http://bbs.ayinfo.cn/attachments/month_0912/0912072305bcaf7b1dfd2e436f.jpg

可以看到,共有2个游戏精灵码,一个是无敌,一个是无限生命,美版的魂斗罗提供的更多,有7个,能选择新生命开始时用什么枪,现在你明白那些能选枪的魂斗罗合卡是怎么回事了吧?仅仅是改一个字节的数据而已。这时,要根据你的需要,选择用哪个,不用哪个,在前面的复选框进行选择:
http://bbs.ayinfo.cn/attachments/month_0912/0912072305a2c5a3eaa661aec3.jpg

  好了,点击“确定”,开始游戏,Game genie已经起作用了,主角既不怕子弹,又是无限生命~天,这样的游戏还有意思吗?

  Nestopia金手指的用法至此就全部介绍完了,最后要说明的是:Cheat code 和 Game genie 两种游戏修改方法,在本质上是一样的,下面来看看它们到底是什么关系:

  选择一个Game genie码,点击“更改”按钮,进入添加代码界面:
http://bbs.ayinfo.cn/attachments/month_0912/09120723056e402b9e15527e2e.jpg
http://bbs.ayinfo.cn/attachments/month_0912/0912080042ece279541fbf215b.jpg

  哈哈,看到了吧,左侧是Cheat code的设置界面,右侧是Game genie的设置界面,两个选项是一一对应的,每一个地址(8000—FFFF)、值、比较(应翻译成原值更合适),对应一个Game genie码,你试着改一改左侧的数据,点击“校验”按钮,右侧Game genie的值立即会跟着变动!有能力的朋友,可以看看Nestopia的C++源代码,看看算法是什么。
  很明显,Pro Action Rocky应该是另一种和Game genie类似的修改工具,数据都是一一对应的,不要管它了~~

[ 本帖最后由 longs 于 2009-12-8 08:08 编辑 ]

longs 发表于 2009-12-8 08:03:26

VirtuaNES 游戏修改使用方法:

  以“马戏团”游戏为例进行介绍。在VirtuaNES里,Cheat code 和Game genie分的很清楚,在这个模拟器中根本看出它们之间有什么联系。
  在VirtuaNES0.97汉化版的“工具”一栏,“查找金手指”中的内容与Nestopia中查找Cheat code的方法类似,后者功能更强大一些,不再重复介绍了,大家可以自己试试它的用法。在这里,“金手指”翻译成“作弊码”更合理一些,现在姑且先这么叫吧。
  选择“金手指”,进入输入金手指的界面首先要输入一个数据,这个数据是有格式要求的,如图,点击“输入”,输入0060-01-05,确定后,再点击“编辑”,就能看到编辑金手指界面,为方便比较,把这两个界面做到一张图中,实际中两个界面不能同时打开。
http://bbs.ayinfo.cn/attachments/month_0912/0912080007d019e16c020bbd23.jpg

  0060:表示地址;
  01:前面一个数可输入0,1,2,3,分别代表“始终”,“一次”,“动态”,“从不”;后面一个数可输入1,2,3,4,代表字节数;
  05:表示要修改的字节内容。字节长度必须与上面的数值对应,如上面确定是3字节,就必须输入三位,例如052713。
  输入的数据一般用16进制。
  修改完后记得点“确定”,否则数据不保存!
  点“全部开启”,Cheat code开始发挥作用,也可在菜单中选择开启金手指或关闭金手指。
  Cheat code 的操作就是这些了。

  Game genie就没什么好讲的了,完全是暗箱操作,先进入游戏,然后打开“工具”菜单,点击Game genie,然后选择相应文件, 确定后回到游戏,修改代码生效。

  好累啊~~

  看完这篇,相信大家对 Cheat code(作弊码) 和 Game genie(游戏精灵)已经完全掌握了吧,给汉化语言文件的朋友提个建议,以后规范一下称谓,cheat code功能统一翻译成“作弊码”,Game genie 统一翻译成“游戏精灵”,而“金手指”是对两者及其它一切修改方法的统称,这样就更明白了。

                        2009年12月8日0时8分

[ 本帖最后由 longs 于 2009-12-8 08:11 编辑 ]

李伟 发表于 2009-12-8 11:22:57

还有一个更简单的修改方法,用EC,里面有现成的作弊码,很容易懂。

maple1234 发表于 2009-12-8 11:28:58

金手指的改进日益简单上手~:loveliness:

money_114 发表于 2009-12-8 13:00:14

EC也是要人做的,而且還要有模擬器支持文件才行
FC到沒什麽,但一些模擬器cht和新模擬器的支持文件更新不及時,現在確成了EC的詬病
而模擬器的自身修改功能加上整理好的金手指對玩家來説是個很好的互補
話説Cheat code和Game genie的區別我還是在下了BSNES Cheat Code Pac后知道的

longs 发表于 2009-12-8 13:43:53

写这篇的目的,就是在不知道作弊码的情况下,怎样利用模拟器的金手指功能,找到可用的作弊码,其实过程也很简单,各位见笑了。

谢谢版主打分鼓励!!

湘西小人物 发表于 2009-12-10 23:47:59

楼上对金手指很有研究嘛

疾风之狼 发表于 2009-12-10 23:55:13

教程写得不错,支持一下。:loveliness:
页: [1]
查看完整版本: FC(NES)模拟器金手指详解