FC外星战将按键hack教程2010-10-2314:04游戏资料是Konami根据著名连环画兔子巴奇(BuckyO'Hare)改编的街机游戏。1、漫画介绍:兔子巴奇是由美国漫画作家LarryHama于1978至1979创作的,兔子巴奇漫画主要讲述的是在一个平行宇宙一场发生在有哺乳动物领导的动物联盟与毒蟾蜍帝国的战争,蟾蜍帝国的领导者是一台巨大的电子系统坎普斯,它将蟾蜍一族进行了洗脑。漫画不仅被拍成动画片,还被改编成多款游戏,其中较著名的就是街机游戏外星战将。2、主要人物介绍:兔子巴奇(BuckyO'Hare):队长,绿色的兔子,驾驶一架名为‘正义之愤怒’的太空飞船,他的队友包括:猫女詹尼(Jenny):巴奇的第一位队友,领航员,拥有神秘力量的猫族,具有读心术,治愈,能量释放等多种力量,平时总是隐藏自己的能力,只有对另一位队员威利才会展露出原本的力量,对威利是母亲一般的人物机器人布灵奇(Blinky):只有一只眼睛的高级机器人,使用特殊的语言为队员们判别形势神枪手鸭(DeadeyeDuck)狙击手,是有四只手的鸭子,一只眼睛瞎了,脾气很暴躁,不喜欢说话,更多时候是喜欢疯狂射击威利·杜伟(WillyDuWitt)飞船的工程师,来自旧金山的十几岁的地球男孩,通过自己制作的加速装置来到巴奇的飞船,原来的工程师布鲁斯(游戏中未提及)牺牲后,威利代替他的位置。3、游戏发行商:Konami发行年份:1992运行平台:NES/FC游戏类型:单机动作类游戏4、游戏介绍:游戏讲述了队长兔子巴奇在一系列的星球中要求拯救他的其他四位队员,每当救出一位队员,玩家即可获得一种在巴奇和其他队员转换的能力,每个队员都有其特殊的能力,主要有巴奇跳跃,布灵奇飞行融冰,詹尼发射能量球,神枪手鸭爬墙散弹,威利高能量射击,以应对各种不同的挑战,当巴奇成功救出其他的队员之时,却马上被敌人捕获被囚禁于一架名为蟾蜍之母的飞船中,巴奇和布灵奇被囚禁于同一囚室中,并成功越狱,他们必须救出其他的成员。最后,巴奇与其队友继续突破怪兽飞船。5、游戏评价:是KONAMI旗下财宝公司的三大杰作之一。财宝公司有专门做超高难度的游戏之美誉,最著名的第一大杰作就是斑鸠,第二是宇宙巡航机5,都是难度非常高的游戏,而外星战将则是财宝公司成立之前的作品,也是同样出色,游戏需要较高的操作技巧,很考验玩家的应变能力,游戏关卡的设定十分新颖,且都有一定的难度,游戏类型与Capcom的洛克人系列很相似。----以上游戏资料转自百度百科原文链接:以下内容转载请注明本人的辛苦成果不希望成为别人的作品。----猫美玲[Mermailing]相关资料:初级hack方法请到我空间查看猫美玲/blog狼哥(疾风之狼)的博客,里面有狼哥的教程游戏下载:猫美玲/blog当我会了按键hack后,发现其实并不难,代码是早早的准备好了,真正费时间的,是在寻找rom中空闲代码太麻烦了,也许只是我的方法不对吧。基本的设置断点查找指令的方法可以看上面的相关资料,现在来说说这次的重点。按键hack方法,就是在游戏中,通过按特定的键,执行我们准备好的程序,一般是恢复血量能量等功能的程序(话说如果是病毒程序...太不道德了,鄙视一下,我们的目的是要让游戏能正常运行...)。游戏中有内存是存放输入状态的,在这个游戏中,可以找到内存[00F7]是存放输入状态的,一个字节8位,存放fc上的8个按键状态。按下各键测试到该字节状态对应方式为:00000000(此为该字节的2进制表现形式,左边是高位,右边是低位)ABSEST上下左右当按住上不放的时候,表示上的那位就变成1,而这个字节就变成08[00001000],而如果再同时按住B不放的话,B位置变成1,这个字节就变成了48[01001000]。我们只需要在游戏对这个值修改的地方加入对键的判断再执行我们准备好的程序即可。hack内容:初始隐身并且隐身时间不减:0x000003B1F0改为D0说明:虽然为隐身了,但是碰到像岩浆尖刺等特殊障碍还是会直接挂的。这里是改的跳转判断,原本是判断如果隐身时间不为0就跳转到隐身时间自减指令,改成D0后就成了如果隐身时间为0就跳转到隐身时间自减指令,而游戏一开始隐身时间就是0的通过这里执行后隐身时间变为-1(内存中为FF,无符号的话数值为255),变成隐身状态,而由于这个时候隐身时间已经不是0了,不再执行隐身时间自减指令,从而达到持续保持隐身状态。本操作其实可以用隐身时间自减指令改为EA的方式替换,很可惜碰到敌人触发隐身会卡住,如果仅仅是血量不减,那么后面有无限能量飞行的时候也很麻烦,所以这里的改法有点特殊。能量不减:0x00000B7BC643改为EAEA0x00000B97C644改为EAEA0x00000C1DC642改为EAEA说明:[0042]为猫女詹尼(Jenny)的能量地址,[0043]为神枪手鸭(DeadeyeDuck)的能量地址,[0044]为机器人布灵奇(Blinky)的能量地址,上面3个地方都是能量减少的指令,改为EA空操作后,能量不再减少。但是这个时候问题出现了,猫女的能量可以在能量球飞出屏幕后恢复正常,但机器人和鸭子的能量不减少后,无法恢复正常状态,所以我们要增加个能量恢复的功能,其他2名角色能量用完就释放的,而且没有什么太大的功能所以不需要修改,目前有了隐身+无限飞行,已经很方便了。以上都是基本的修改法就好了,下面是重点。按下B的时候清空能量:(确保能恢复正常状态)0x0001FD1985F584F7改为4C10BCEA说明:这里是当按下某个键时,将修改内存[00F7]的操作,我们把这里改为转向到rom指令空白区域去执行我们自己的程序。注意被改掉的85F584F7是必须需要的,所以转过去后要将这条指令补回来。地址16进制码ASM指令注释说明FD09:4C10BCJMP$BC10;跳转到BC10转向BC10去执行我们增加的操作FD0C:EANOP;空操作其实这里被跳过了写什么都无所谓的FD0D:60RTS;由子程序返回注意这里的地址,我们的程序执行完了就转回到这里继续运行内存中的[BC10]处为BC00:5C5D5E5F5F5F5F5F0000000000000000BC10:00000000000000000000000000000000BC20:00000000000000000000000000000000通过在rom里查找5C5D5E5F5F5F5F5F0000可以找到[BC10]对应的rom地址为0x00003C20。0x00003C20写入85F584F7C940D008A9008542854385444C0DFD地址16进制码ASM指令注释说明BC10:85F5STA$F5;[00F5]=A=0x40增加跳转时跳转指令覆盖了这条指令,所以先补回来BC12:84F7STY$F7;[00F7]=Y=0x40增加跳转时跳转指令覆盖了这条指令,所以先补回来BC14:C940CMP#$40;0x40和A比较判断是否是B键被按下BC16:D008BNE#$08;Z==0?BRABC18是则继续下一条指令,不是则指令往后8个字节(即转向BC20处)BC18:A900LDA#$00;A=0x00将0写入寄存器ABC1A:8542STA$42;[0042]=A=0x00将寄存器A中的值存入[0042]地址BC1C:8543STA$43;[0043]=A=0x00将寄存器A中的值存入[0043]地址BC1E:8544STA$44;[0044]=A=0x00将寄存器A中的值存入[0044]地址BC20:4C0DFDJMP$FD0D;跳转到FD0D转回原来来的地方继续执行下一条好了测试游戏,隐身状态不怕普通的小喽啰了,无限能量的飞行效果很好,需要停下来的时候按B就可以了,猫女的能量球可以慢慢控制,对BOSS的必杀也很棒,鸭子的爬墙,在机器人飞行不好控制的地方也很好用。自杀功能:测试到水星BOSS时,被BOSS冻住后由于不能移动,子弹也无法击中BOSS,出现想死都死不了的情况,所以,还得增加自杀功能,先在游戏里测试,将血量改为0,人物是没有挂的,所以再试试直接跳转到死亡处理的指令处,将断点设置为“注释内出现[05A0]暂停”,然后到游戏里去跳崖,死前的一瞬间,游戏暂停了...地址16进制码ASM指令注释说明FCEF:8576STA$76;[0076]=A=0x00FCF1:60RTS;由子程序返回这里刚好是一个子程序结束的位置8560:ADA005LDA$05A0;A=0x14我们从这里开始调用8563:38SEC;C=1也就是使按特定键的时候之间转向8560处开始执行8564:E502SBC$02;A-=0x808566:8DA005STA$05A0;[05A0]=A=0x94自杀功能太过强大,要避免玩家不小心操作到了,所以我决定设置成同时按【上、B开始键】的时候自杀,同时按【上、B开始键】,[00F7]的值为58,所以在0x00003C30处开始修改代码为:A5F7C958D0034C60854C0DFD地址16进制码ASM指令注释说明BC20:A5F7LDA$00F7;A=0x58将[00F7]的值存入寄存器ABC22:C958CMP#$58;0x58和A比较判断是否同时按下上、B开始键BC24:D003BNE#$03;Z==0?BRABC26是则继续执行,不是则指令往后3字节(即转向BC29处)BC26:4C6085JMP$8560;跳转到8560转向死亡处理指令前,准备死BC29:4C0DFDJMP$FD0D;跳转到FD0D转回原来来的地方继续执行下一条回到游戏后发现开始键按下后是暂停游戏,如果不在暂停中死亡,一切正常,如果在暂停中死亡,不会有死亡音效,不过效果还是正常。游戏测试前面都基本正常,到最后两关,出现花屏情况,会卡死人,说明这里找的BC10~BC29的地址并非空白rom,等再找到合适的空白rom再改了。不过按键hack的方法是正确的了。目前没有找到空白rom,但有了解决办法:花屏原因:0x00003C20其实是最后1大关的第6小关到第7小关之间的背景,原本00的位置,其实是中间的过道,而0E表示的是下面的尖刺,将hack代码加入到这里当然会照成花屏。解决办法:仔细分析后发现,0x00003C18开始,每8个字节控制一行背景,每个背景48字节即6排,考虑到通关时最后的背景都是星星,而主角是在中间飞行,所以决定保留中间两排过道,上下4排星星换成hack代码,这样小部分的花屏也不影响游戏了。最后修改后的代码变动处为:0x000003B1F0改为D00x00000B7BC643改为EAEA0x00000B97C644改为EAEA0x00000C1DC642改为EAEA0x0001FD1985F584F7改为4CF8BCEA在0x00003D08处开始修改代码为:85F584F7C940D01CA90085424C18BD在0x00003D28处开始修改代码为:85438544A5F7C958D0034C60854C0DFD最后的花屏图说明:1.对小怪和子弹无敌,(遇到地形等即死状态时正常死亡)。2.猫女、机器人、鸭子三个角色能量无限,特殊状态中按B取消。3.同时按上、B、开始键可以随时自杀。4.通关时在太空中的飞行,上下两边会出现花屏,但不影响游戏。