12558网页游戏私服论坛

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

fc游戏的rom修改方法

[复制链接]

63

主题

63

帖子

136

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
136
发表于 2021-2-19 18:09:41 | 显示全部楼层 |阅读模式
很多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 21:33 , Processed in 0.092773 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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