kongmao45678 发表于 2009-7-31 12:05:52

如何hack成按一次键出一种功能,再按同样的键出另一种功能?

拿FC的魂斗罗2为例,按一下选择键出散弹,再按一下出苹果弹,再按一下出激光。程序如何认别出,我第一次选择键后,执行散弹的代码,第二次按键后,执行苹果弹的代码,第三次执行激光的代码呢?

湘西小人物 发表于 2009-7-31 13:38:47

输入累增或减的代码
游戏中按一下选择键,武器地址累加或减,武器自然会变化

可以搜索高手的作品来分析

kongmao45678 发表于 2009-7-31 13:43:41

原帖由 湘西小人物 于 2009-7-31 13:38 发表 http://bbs.emu618.com/forum/images/common/back.gif
输入累增或减的代码
游戏中按一下选择键,武器地址累加或减,武器自然会变化

可以搜索高手的作品来分析
10表示普通子弹,如果是累加的话11表示散弹,12表示苹果弹,13表示激光,那么一直加上去的话,怎么样才能回到10?

湘西小人物 发表于 2009-7-31 13:53:13

在加段指令
当到武器地址到达XX值的时候返回XX值

kongmao45678 发表于 2009-7-31 15:10:01

原帖由 湘西小人物 于 2009-7-31 13:53 发表 http://bbs.emu618.com/forum/images/common/back.gif
在加段指令
当到武器地址到达XX值的时候返回XX值
谢谢啦:loveliness:

shinwa 发表于 2009-7-31 19:28:02

pha
lda    按键内存
cmp#$20      SELECT键
bneend
inc   子弹内存
lda   子弹内存
cmp#$06   假设有5种子弹,那么到了6就变0
bne   end
lda   #$00
sta子弹内存
end:
pla
rts

魂斗罗这个游戏 子弹代码是 00 01 02 03............. 吃了加速后是 10 11 12 13..................
这里的判断还要多判断几次
按键的映射内存有两个 一个是按一次后自动归0这样的效果就是 即使按住也只运行一次
另一个内存是按住之后是每个周期都运行的,那样的话就是按一下就运行了N次了,基本选不到你要的武器, 效果就是 随机抽到某子弹,因为按一次就加了N次了
两个内存是在一起的 中间隔开一个字节~~
当然也可以写程序处理这个问题,只是没必要兜圈子了

湘西小人物 发表于 2009-8-1 00:35:42

感谢楼上提供的资料
页: [1]
查看完整版本: 如何hack成按一次键出一种功能,再按同样的键出另一种功能?