改游戏源码-FC(NES)游戏切换基础教程

1. 序言

童年时期,很多人似乎对FC都有很多回忆,我也不例外。 但说实话,我在家能玩的FC游戏很少,能回忆起来的也只有坦克大战、Double Cut之类的几款。 《龙》、《红色堡垒》、《萨洛曼蛇》……当然最经典的还是小时候玩的热血格斗游戏……之后,因为种种诱因,我再也没有碰过它们。 直到PC的出现,我重新审视了这些经典。

而且经常在网上看到各种HACK版本,总希望自己能做一些改动,于是找教程、搜资料……可能没有多少人关心那些已经被淘汰很久的FC游戏了时间。 教程就像烟雾弹一样,通常可以被忽略......

而对于已经踏入黑暗旅程的我来说,或许还有一种发自内心的爱……

我教过一些人,我总觉得我的方法好像不合适,教不了。 明天我会写这样的东西,希望能遇到一些有才华的人。 如果我能遇到一个能批评我、强调我的人,也许我可以做得更好。

我不能保证我100%正确,如果我错了,希望您能指正。

好吧,既然你们都不喜欢读废话,那么我们开始吧……

2. 基本变化

改变实际上需要设计工具。 这里推荐一款功能极其强大的FC模拟器——FCEUX系列。 现在最新的版本是2.2.3(当我敲下这篇文章时),它提供了一套非常完整的调试工具。 编译器和16补码编辑器。 事实上,如果你想改变FC纹理,你可以使用很多FC纹理改变器来进行改变。 网上应该有很多。 我在这里找不到什么好的。 你可以自己找找。 我主要是解释游戏内容的变化,而不是纹理的变化。

好吧,我们开始把我改成难受的游戏——魂斗罗。

这一段,谢谢小月饼的原创教导。

双截龙是经典,到明天或许没有人能一辈子通关。 对于有这样头痛的玩家,我们会给他们一些选择。 1、生命无限; 2、无限金身; 3.瞬间敌人(不建议改,有点高端)。

友情提醒,在下面的16补码编辑器中,查看菜单包括NES显存、PPU显存、ROM文件,所以在进行修改之前,请注意您所在的页面,避免修改错误导致没有相应效果

只有NES显存和PPU显存可以右键,NES显存下很难改。 一旦更改,该值将立即更改为未更改的状态。 请注意您所在的页面。

改游戏源码-FC(NES)游戏切换基础教程

1.无限生命

我们在网上都知道双龙的1P生命值的地址是0032(如果你不知道,就上网查一下。如果你不知道如何使用或查看金手指,那就自己学吧= =)。 我点击的地址是0032(你可以看标题栏,写在那里)。 很多人都知道,游戏中的很多地方都是由所谓的作弊手指控制的。 我知道它是由NES显存控制的。 因此,通过对那些显存进行相应的操作,就能达到相应的疗效……比如金手指锁定了一个地址,如果网上有0032-01-14,就会有一定数量的生命被锁定,就可以达到无限生命的目标。 ,这只是简单地对0032地址进行相应的操作(锁定)即可达到相应的效果(寿命不会改变)。

图1

我只能说:哈哈,又废话了。 想想看,我们因为“重写”健康值地址0032而失去了一条生命。既然是“重写”,那么右键点击地址0032(NES显存)后,我们“在地址0x0032处添加写入断点”, add 以后会弹出调试器,忽略它并切换回游戏屏幕。 事实上,生命值即将被“改写”,所以让我们英勇地击中炮弹吧,孩子!

翻完后,游戏会暂停,然后调试器第一行会显示

图2

查6502百科就知道了(如果不知道可以查本文附录)。

D6命令为DEC——内存单元内容减1,轮询方式为零页轮询X索引。

其实我们很容易理解。 如果内存单元的内容减少了1,我们很高兴听到并给您发来贺电。 这只是失去一条生命。 所以我们只要不让它执行这条命令行,自然就不会丧命了。

使用键盘右键直接点击红框,进入16的补码编辑器(ROM文件),选择的是D6,所以我们将其改为EAEA。

EA在6502汇编中是NOP,意思是不进行任何操作,即执行这行代码时,不会做任何事情,但是会愣住两行。

请注意,输入命令必须完整键入,以便输入标记落入下一个代码中。 例如,代码原来是95,需要改为85。你不能只输入一个8,而是输入整个代码85,否则模拟器无法识别你的更改。

改游戏源码-FC(NES)游戏切换基础教程

然后我们切换回调试器,调试器如下所示:

图3

修改完成后,双击一侧断点处的0032,将0032后面的EC-W--改为-CW--,让模拟器取消对0032断点的监控,然后点击运行。

图4

好吧,无论你怎么死,你都不会死。

2.无限金身

金身是无敌的象征,是必然的存在,是GODMODE的愿景……(这作者是在写小说吗……我扔砖墙了!!!) 抱歉,又废话了。 我从百度上查到,金身的地址是00B0。 想一想。 为什么金身打不死(因为他是金身,废话)是游戏的判断。 读取金身的地址内容是,有金身就不会死,否则就会翻身。 这个思想很重要,因为涉及到断点的判断方法就是读或者写。

好了,找到思路后,我们添加一个断点00B0(NES内存)

图5

一旦添加断点改游戏源码,模拟器就会立即暂停,有以下两种可能

图6

图7

如果你明白了,我自然能看出原理,但如果你不明白,我希望你们都可以尝试改变它。 更改错误不会导致蓝屏,只会使游戏变得困难,但 FCEUX 可以在更改后撤消更改。

图6的童鞋请点击运行,图7应该就可以停止了,接下来我们看代码。 B5B0和B5是什么? 让我们检查。 LDA--将数据从存储发送到累加器,M→A,B5,零页X索引。

从存储器中取出数并发送给累加器,即从地址00B0处读取数并向下发送,然后倒入累加器A中。关于累加器A,后面会有介绍。 目前,它被认为能够存储数字并执行计算。 某物。 向下发送数字00B0后,下一行代码是F012。 对于F0,我们可以检查“如果标志Z=1,则传输,否则继续”。 我将用简单的方式解释它。 读取00B0的内容并将其加载到累加器中。 在A中,如果相等,则跳转。 当你这样读的时候,其实感觉少了点什么,是的,哪些是平等的?

虽然这里如果没有给出比较号的话,默认可以理解为与0比较,所以这句话可以理解为:将00B0的内容读入累加器A,与0比较,相等则跳转。 跳转到8个代码,可以自己数一下,就到D482的地方。

嗯,如果是0,就跳跃,也就是金身状态为0的话,就会跳跃。 那是不是意味着金身的状态不能继续了,如果你觉得不舒服,就取消跳跃,直接把F008改成EAEA。

好吧,那就先取消00B0的监控状态,然后点击运行,看比赛的小人白光闪闪了!

3.瞬间击败敌人(高端)

事实上,有些人不喜欢玩双龙,所以他们必须开秘籍。 我提供秘籍,大家都可以玩! 观察到,虽然双龙的敌人有生命值,但我们发现敌人的生命值。

图8

16 补码查看器中突出显示的是我身后炮塔的当前运行状况。 注意这个炮塔的地址不一定是0585,它是系统分配的,取决于游戏。 后来,其实当我们射击它的时候,它就掉了一滴血,所以我们很自然地“重写”了它的HP,所以我们在这个地址上加了一个写入断点(NES内存)。 添加完毕后,我们让炮塔开火,然后游戏会暂停,切换到调试器,我们看一下代码。

改游戏源码-FC(NES)游戏切换基础教程

图9

E3ED:997805STA$0578,Y@$0585=#$06

99 我们可以看一下,STA——将累加器的内容发送到内存A→M,并绝对轮询Y索引。

此时Y内容在十六进制补码中为0D,即十进制补码中为13,而99后面的地址为0578改游戏源码,然后将0578偏转13,即为0585(16的补码无非是0123456789ABCDEF,只要记住好,这很容易数)

图10

然后,我们使用跳转语句来修改图3-2中的程序段。 看到此时累加器A的数量为5,说明5正式加载到了原来炮塔的生命值已经被替换掉了。 好了,文章就从这里开始吧。

我们找到了很多FF的地方(NES显存),这里我们可以随意编写代码,而且要注意,最好找到C000之后的代码(注:这主要取决于Mapper的特性),否则不行,但是8000之前基本上很难改,请不要在那里使用FF,因为你不能使用它。

其中,我找到的是F620。 这里的草原好广阔啊……(射击飞翔!)

图11

我们想一下,我们不能把05放在0585里面,而是直接把0放在里面。 如果没有血,堡垒就会自然爆炸。 我们要减少代码,如图点击鼠标右键“转到ROM文件中对应的位置”,首先输入代码A90099780560(5),好了,我们在右侧点击鼠标右键图3-2第一行的一侧,然后将997805更改为2020F6。 (6)

好吧,我们取消断点监控,然后瞬间秒杀整个宇宙(只有二、四级BOSS没有这个效果)!

改游戏源码-FC(NES)游戏切换基础教程

基础课程到此结束。 我希望你有所收获。

补充:

(1)零页轮询是对NES显存中的地址0000-00FF进行操作; 即对以下地址进行操作。 事实上,最后一行已经超出了范围,所以零页轮询很难操作。

图12

(2)X索引:是偏转量,根据X寄存器的内容进行偏转。 CPU 有 3 个寄存器,它们也显示在调试器中,即 A、X 和 Y(图 13)。 刚才的命令D632中(图2),对零页轮询X进行了索引,我们可以看到此时X为0,所以模拟器偏转估计为@0032,如果X为1则为@0033,如果是 2,则 @0034 遵循此推理。

图13

其实Y索引是一样的,只是偏转使用的寄存器不同,即使用Y寄存器,用法是一样的。

(3)跳转:简单来说就是跳转到某个程序段继续执行。 这里的跳转有两种,条件跳转和无条件跳转。

这里的F0(图7)中,有一个条件跳转。 当标志Z=1时,执行跳转,否则继续。

(4)绝对轮询:记住零页轮询,即只对0000-00FF进行操作,而绝对轮询可以对所有地址,即0000-FFFF进行操作,绝对轮询的区别在于它的轮询方式是从高到低。 例如图3-2中的997805,则地址为0578。基本上,6502中的绝对轮询是从高位到低位。 简单地说,情况正好相反。

(5)A900:在6502中,将从存储器中取出的数据发送到累加器,累加器立即轮询。 我们先简单介绍一下立即轮询,就是直接把00放入累加器A中,所有对应的立即轮询小艺,我就不多介绍了,大家自己理解即可。 不过需要注意的是,如果要将累加器A的内容加载到十的补码10中,就必须写成A90A,因为这里所有的操作都是基于16的补码。

(6)这里的20是6502中的无条件跳转。即程序执行到这里后,会无条件跳转到对应的位置,这里是2020F6,那么就会无条件跳转到F620的地址【为什么是相反的】 ,请参见(4)关于绝对轮询]执行该程序段,执行完成后会返回到原来的D008继续执行,返回码为60。相当于一条直路。 当我们遇到一个牌子:高速公路施工,请绕道(20的函数)时,我们绕道到某条路,绕道后必须返回主路,于是我们看到了一个“

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 改游戏源码-FC(NES)游戏切换基础教程 https://www.wkzy.net/game/184751.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务