12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 221|回复: 0

fc游戏的rom修改方法

[复制链接]
发表于 2020-8-27 22:10:11 | 显示全部楼层 |阅读模式
很多fc游戏都有现成的金手指代码,缺点是每次玩游戏都要开一次。
而网上很多无敌版无限命版都是在游戏原版语言的基础上修改的。以是整理一个教程,我们就可以在中文版fc游戏上修改rom文件,做中文版无限命版。
网上也很少有fc游戏的修改资料,毕竟fc游戏的时代已经过去了。在此稍做记载,以备存档。
以游戏fc坦克大战为例,本文实现命数不减,和取消指挥部判定(就是老鹰被炸了依旧能继承通关)。


游戏原版(未修改):
链接: https://pan.baidu.com/s/1307_Qm3W5ieurDty6aYjjg 提取码: v9i3
fc模拟器(自带6502调试工具,是个通用模拟器,可以网上搜索到下载)
链接: https://pan.baidu.com/s/1_x8_UXy3-1U2cCCP8j-xYQ 提取码: ycfm


开工:

首先通过百度或者自己查找,找到以下功能地点
0051 生命数
0068 指挥部

1.命数不减
打开fceux,载入游戏,正式开始游戏后故意死命,死一次就搜索一次变小了的数值,最后找到一个数值和游戏实际相匹配的地点。

生命数的地点的0051,添加到调试器中并设置“写”断点,因为我们要找到是哪条指令让它的值变小了。

故意死掉一命,然后游戏自动暂停,断点位置跳出。

注意到带箭头的那行,也就是第2行:
DE0D:D6 51     DEC $51,X @ $0051 = #$03
DEC是自减1,以是把DE0D地点开始的2个字节给nop掉即可。在6502汇编中,空操作的代码是EA
打开十六进制编辑器

转到地点DE0D处:

我们可以查看nes内存,表现的更加详细一些。

最后还是要转到rom中对应的位置(在nes内存中,鼠标点一下要修改的地点,然后点鼠标右键,弹出这个菜单),2个字节改成EA EA(下面图片中的右下角红色字节),然后保存rom文件即可。

此时,我们用模拟器重新载入这个修改后的rom文件(nes扩展名),故意死一次,就可以看到命数不减了。

2.无视指挥部
在游戏中,如果指挥部被炸了,游戏就直接输掉了。以是把指挥部炸掉后的后续处理给改掉。
首先找到对应的地点,是0068。这个地点非常欠好找,因为我们一般标志状态就一个0和1,而这个是正常状态128,指挥部被炸的刹时,它会变成十进制39,然后每一帧数值减1,不停到0为止。以是很难搜索出来。
同样地,对0068下断点,然后攻击指挥部,断点指令被触发。
STA $0068 = #$80,然后点“运行”,会发现DEC指令多次被触发,如下:
1D:E2DC:C6 68     DEC $0068 = #$27
1D:E2DE:A5 68     LDA $0068 = #$27

这两行指令被反复执行,0068处的值从0x27开始,一帧一减去1,最后为0。
因此利用上述方法,找到E2DC开始4个字节转到ROM中的地点,均EA掉,保存即可。
最终修改结果见视频:
https://www.bilibili.com/video/av540502231
修改后的成品:
链接: https://pan.baidu.com/s/15ozkoAu2wS1tFTY0Inlicg 提取码: 4khw


3.lua脚本
fceux模拟器可以在执行游戏的时候同步嵌入lua脚本,实现一些附带功能。比如直接修改内存,或者在游戏界面表现某些不能直接看到的数值提示信息。
比如我们用lua脚本实现无视指挥部的话,可以保证0068处的值不停是128即可。
[Lua] 纯文本查看 复制代码while true dosms=memory.readbyte(0x51) --生命数zhb=memory.readbyte(0x68) --指挥部gqs=memory.readbyte(0x85) --关卡数gui.text(200,10,string.format("shengming:%s",sms)) --初始为2,实则3命gui.text(200,20,string.format("laoying:%s",zhb)) --老鹰的状态值gui.text(206,30,string.format("guanqia:%s",qgs)) --当前关卡数memory.readbyte(0x68,0x80) --把指挥部状态值重置为正常值endemu.frameadvance() --帧进,每一帧刷新一遍end

附加:一个fc游戏 西游记 的lua脚本
[Lua] 纯文本查看 复制代码while true dodaojishi=memory.readbyte(0x106) --场景扣血倒计时shoutao=memory.readbyte(0x10f) --手套次数feixie=memory.readbyte(0x112) --飞鞋次数jinqian=memory.readbyte(0x109)+memory.readbyte(0x10A)*256gui.text(200,10,string.format("daojishi:%s",daojishi)) --32秒。满值128,最低0gui.text(200,20,string.format("shoutao:%s",shoutao)) --秒杀buggui.text(206,30,string.format("feixie:%s",feixie)) --飞鞋次数gui.text(200,40,string.format("jinqian:%s",jinqian)) --金钱是2字节hp1=memory.readbyte(0x36b)hp2=memory.readbyte(0x37b)if hp1==0 thengui.text(226,50,string.format("HP:%s",hp2))elsegui.text(226,50,string.format("HP:%s",hp1))endemu.frameadvance()end
在这个游戏中,初始武器不升级再配合手套道具可以秒杀全部敌人,包括boss,但是攻击次数用完后就不能秒了。以是速通的唯一难点是不知道剩余可用的攻击次数。使用这个lua脚本就可以在游戏界面中表现出来关键信息。
视频地点见:
https://www.bilibili.com/video/av925624622

总结:只要方法有了,修改任何游戏就比较随意了。
比如魂斗罗开场3命,我们可以先查到0032处是游戏初始的读取位置,默认为02。注意均为16进制值,那么我们只要改成1D,那么开场就是30命了。
同样,开场自带的武器也可以修改。还有对武器写断点,找到死命后武器被重置的指令EA掉,就可以实现死命不掉武器的修改了。
魂斗罗的武器地点是00AA,拿到新武器后,写“写入”断点,然后故意死掉,死的刹时游戏暂停,可以看到DA09处的STA指令(存入值)

我们只要转入到对应的rom位置,把对应的指令(此处指令是2字节)给EA掉即可。(截图是我改过以后才截的图)
魂斗罗中文版武器死后不掉的成品:
链接: https://pan.baidu.com/s/1WwSzX-EUq-kfMJwchKYdAA 提取码: w9q4

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-5-19 23:10 , Processed in 0.095703 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表