设为首页收藏本站

 找回密码
 立即注册
搜索
查看: 718|回复: 3

[原创HACK教程] FC自动演示修改教程

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2015-10-15 08:53:29 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2015-10-28 19:02 编辑 3 o) C# l' w8 X  F, N- j
& t& D9 d' q2 e0 Q" D
FC自动演示修改教程
6 Z& p& \% x8 ]0 U; |作者:火焰烈旋风  V3 g- ?3 Y! y7 i
工具:FCEUX中文版(www.9553.cn搜FCEU即可)/ Y. A6 g1 k$ z' U5 G2 A
1.找按键地址:
* ~) L% z7 e  U" [) n6 S    首先,我们打开FCEUX,再打开魂斗罗美版,进入游戏无动作,打开FCEUX的工具>作弊,若左下角的"活跃时暂停"没打勾请点击打勾,游戏暂停了,点击中上部的"重设",在已知值输入后输入框中00,点击按钮"已知值",此时搜到大量数据为00的地址.单击FCEU窗口,游戏正常运行,按住一个按键不放如上键,点击作弊窗口的">",游戏暂停了,此时剩下几个地址,再单击FCEU窗口,按住两个按键如上+选择键不放,点击作弊窗口的">",游戏暂停了,只剩下几个地址了,再单击FCEU窗口,不要按任何按键键,点击作弊窗口的"已知值:00"最后剩下两个地址F1,F2,点中其中一个,再点左下角的"添加",发现按什么按键人物都不能动,说明这两个地址就是按键地址,双击左上部的锁定地址,前面的"*"号消失就解除了锁定,并且通过调试知道上=08,下=04,左01,右=02,A=80,B=40,选择=20,开始=10.
( H' W) ^* i! R% B2 v1 ]+ y2.找演示时按键的数据来源:
# j9 Y5 i" `* \# w6 i) b* i    既然知道了按键的地址,那么就要看演示时是什么改变了这些值.点击FCEUX的>游戏>重设,等进入自动演示时,我们打开打开FCEUX的调试>调试器,在右上部分点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入F1(我们找到的按键),将输入框下面的"写"打上勾,CPU也打勾,点"确定".此时调试窗口出现如下指令:
! S4 J  _; n# C. f+ n6 ^07:C38F:94 F1     STY $F1,X @ $00F1 = #$019 L, _* J) M3 ?
07:C391:94 F9     STY $F9,X @ $00F9 = #$00
' @1 L! u. x- S9 c3 d07:C393:CA        DEX: J4 d: O) |" ^/ ?1 \; k& M5 h
07:C394:10 F0     BPL $C386
2 N9 U$ `- I/ ?' o6 _1 F9 v) V07:C396:60        RTS
1 u' F! h5 N3 Q4 z9 U我们点击"运行"左边的上拉按钮上拉,看到如下指令:" i* o8 b% ^  c* ^6 A2 @  B6 ?; M
07:C378:A5 1D     LDA $001D = #$07* ~5 [, {1 T2 z+ o& b
07:C37A:29 04     AND #$04
( l- H* i! K# e$ C# E, C" r$ r07:C37C:D0 06     BNE $C3848 I1 z0 M8 W0 I# p  e! G/ u
07:C37E:A5 04     LDA $0004 = #$00
) D; J% e  _' C* v07:C380:05 05     ORA $0005 = #$00
$ H- b5 M5 Q; y% h8 z07:C382:85 04     STA $0004 = #$00" `0 @" |0 U- G* ~; T
07:C384:A2 01     LDX #$01* a8 r* ^) X  p" o2 `/ K
07:C386:B5 04     LDA $04,X @ $0004 = #$00
) ^( I  P1 n& t2 [" H% b) \  l07:C388:A8        TAY
9 }6 ?8 U# ?0 z( x6 I, u' k/ ~07:C389:55 F9     EOR $F9,X @ $00F9 = #$00# I% q% K2 U& `$ Q; j. G4 i# I
07:C38B:35 04     AND $04,X @ $0004 = #$00
: [) G$ `% z- `8 G07:C38D:95 F5     STA $F5,X @ $00F5 = #$00, M( o6 y2 R# [; S) p
07:C38F:94 F1     STY $F1,X @ $00F1 = #$018 U7 Z1 \* W- B0 T$ ~( Z% V# C
07:C391:94 F9     STY $F9,X @ $00F9 = #$00* a& n% H- s0 n7 F9 U
07:C393:CA        DEX
9 O8 u/ @3 R8 ^6 q) a07:C394:10 F0     BPL $C3868 a  w  w6 k% H& y/ s2 }" }$ c
07:C396:60        RTS& q2 s4 ^/ Y" x4 |- J+ I9 v4 n. j: l
由于演示的数据存放在某处,然而这里并没有读取某处的值送F1的指令,所以很可能不是我们要找的指令,点击"断点"窗口旁边的"运行",窗口中出现如下数据:
) x# P; a/ H2 B2 J: b- n05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00! _# A7 C; T6 D/ y) F/ j. w( j* z+ f
05:B3A5:A5 2E     LDA $002E = #$C8
! {% R; b7 s8 f05:B3A7:C9 50     CMP #$509 y3 S+ o' s+ L8 o. }, e* T% ?* W) C7 v
05:B3A9:90 20     BCC $B3CB
- t5 W, x, z0 t05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00
- J+ Y2 N( s0 c3 L6 {7 D( D8 }3 b8 ^05:B3AD:29 0F     AND #$0F
% L; X& E- R  u1 r0 V05:B3AF:C9 01     CMP #$01/ D. C4 ~& P- g3 x0 q: E( P
05:B3B1:F0 04     BEQ $B3B7
7 m! D- D+ @$ a5 h9 D+ m( \% K% v05:B3B3:C9 04     CMP #$04
3 Y7 v, z+ K1 r4 m$ ].........  y7 Z0 f% G1 ]8 }2 h
我们点击"运行"左边的上拉按钮上拉,看到如下指令:
0 g; S8 i# c* a4 @5 R$ I05:B39F:B5 5C     LDA $5C,X @ $005C = #$01
: b  Y% G7 f! x+ U: V- n  d& {05:B3A1:95 F5     STA $F5,X @ $00F5 = #$013 y' |5 J& F. J" w
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
. @9 ~8 K& `4 `% b5 ~8 t05:B3A5:A5 2E     LDA $002E = #$C8& o/ m; A# Y1 a& R4 W
05:B3A7:C9 50     CMP #$50' ~: x1 \8 W0 b4 O6 A
05:B3A9:90 20     BCC $B3CB0 w0 k+ A; W* f! q" {- J, A+ ]/ @
05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00/ G- u3 ~+ C. L+ J0 U0 t
05:B3AD:29 0F     AND #$0F
1 C0 s9 S3 P/ c+ o# n$ J5 b, {& r看到
& ?1 L2 m8 p$ f* g7 A* {. i1 p7 h; V05:B39F:B5 5C     LDA $5C,X @ $005C = #$018 S' P, W8 j9 ~, ?8 `( l+ g
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01* o0 ~7 _0 f; U
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$008 v# z6 P! d4 ?5 r2 D/ Q, D$ p* G
没有?这个说明F1的数据是从地址5C送出得到的,说明我们要找到存储演示按键数据必须从地址5C入手.
0 B( m" g, Z5 d# B    接下来调试器,双击取消F1断点,点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入5C,同样"写"打上勾,点"确定",一会出现如下指令:
4 v6 @3 Q+ _, J, y05:B392:95 5C     STA $5C,X @ $005C = #$01
2 i  k+ a* E& f3 m1 I05:B394:C8        INY# q  T# H0 B3 G+ B& |5 h1 k; n
05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09
, R0 n8 q- t6 h9 Z% f6 S05:B397:95 5A     STA $5A,X @ $005A = #$00) P. U" j5 F( y# A- k; }
05:B399:C8        INY
) |  b4 \* H8 u% e% C- ~2 }8 j05:B39A:98        TYA
) ^  y$ r2 O5 V1 b% ~$ ?然后我们再上拉,得到如下指令:
0 H2 n; g2 V7 x8 Z; n8 v. y$ B05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09
. u! Y1 _4 R* h6 a9 z* H. ]05:B38E:C9 FF     CMP #$FF
- Z3 o* j: a' G3 S1 b+ ?05:B390:F0 3D     BEQ $B3CF! x% T  ]  D, d" A- [, c
05:B392:95 5C     STA $5C,X @ $005C = #$010 r% V4 {4 Z: |) E, G
05:B394:C8        INY
5 O1 t' ]/ @  ]8 ?, i+ u05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09* G& L' c: o; n* I5 ?" d
05:B397:95 5A     STA $5A,X @ $005A = #$00: v# t9 k3 T! ]8 ~; X% ^' [9 N
05:B399:C8        INY4 l" n6 O$ u6 d7 G* @& W  ]2 F
05:B39A:98        TYA) j& M2 ~0 c/ Z. D
看到05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09' E) H( E3 X+ ~2 q9 O
没有?说明现在5C的值来源于变址得到的$B3F2,哈哈,演示按键的数据找到了,在游戏CPU的$B3F2附近.1 c: l! |; R( Y; m% B  q
3.修改演示:
; U" U9 k: q8 \: K  Y' @7 [, I: }    打开FCEUX的调试>十六进制编辑器,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3F2,此时黑色光标标记的地方就是CPU的$B3F2,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了.
1 R; O( S- w* G( x( ?& ~    我们要修改,必须从开始演示的第一个演示按键开始,接下来去找到它:8 l4 Y9 s9 r' R# {, `/ E
打开FCEUX的游戏>重设,此时游戏暂停无状态,点击调试器的"运行",出现黑屏,再点击两次"运行"游戏运行了,过一会又暂停,再点击两次"运行"游戏运行了,出现背景画面时暂停了,调试器窗口中出现了如下数据:( M8 u% ]9 ?( c. f9 P
05:B392:95 5C     STA $5C,X @ $005C = #$00% O: a3 B: C9 D6 Q
05:B394:C8        INY
) i/ t: o; }7 F! }! w05:B395:B1 08     LDA ($08),Y @ $B3DE = #$003 ?& p5 x+ t+ ~/ U0 ^6 O/ Y$ X
05:B397:95 5A     STA $5A,X @ $005A = #$00( r  ?% g9 E- g* B' N
05:B399:C8        INY
; b4 Z" f, t2 J2 T6 d- A05:B39A:98        TYA
. l' r1 n% _% a6 Q6 [我们上拉看到了:
7 d% ~" |7 f) N: R/ t4 P. ~05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$003 U3 d7 [# b3 [  V; A
05:B38E:C9 FF     CMP #$FF3 `  Q0 ~% q/ ]
05:B390:F0 3D     BEQ $B3CF& V3 a/ F( r  T2 t% Z, h& L- G
05:B392:95 5C     STA $5C,X @ $005C = #$00
: ^' D. l7 W) k3 C05:B394:C8        INY  K" u( K! x: ^: v% |- m* e
05:B395:B1 08     LDA ($08),Y @ $B3DE = #$006 x# r" @! ~2 g5 D/ Q+ E3 b3 x
05:B397:95 5A     STA $5A,X @ $005A = #$008 L% T4 s, u- f6 a! [. y  H
05:B399:C8        INY* l8 B7 ^6 V) [
05:B39A:98        TYA
" ~' f/ d7 D: T  C& ^' M! b7 Q看到9 N+ `: _( ^" s# g. Y
05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00
! \- D2 F$ ?- m* [0 U没有?它应该是第一个演示按键,接下来进入十六进制编辑器,点击查看>NES内存,此时切换到NES的CPU内存,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3DE,此时黑色光标标记的地方就是CPU的$B3DE,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了,这里就是演示按键的开始地址.
% F" N. E5 a  ^  b0 J说明:演示按键地址的结构,以开始的00 21 01 03 00 0E 01 3D 04 06 05 33 00 0E 04 0A 05 01为例:第1个00是按键数值(无行动),第2个21是指按键数值21前的按键保持21(时间),第3个01是按键数值(向右走),第4个03是指按键数值03前的按键保持03(时间).......以此类推,判断根据:9 u* J- B) \! l
05:B371:B5 5A     LDA $5A,X @ $005A = #$7F% I. U# ^* k3 i8 [/ ]5 r
05:B373:D0 28     BNE $B39D(如果5A=00,那么就会跳过28字节执行2A递减的指令)  d6 ]( b% \( N" j
05:B375:A5 30     LDA $0030 = #$009 _# l/ G6 w- }$ B! j" z9 L
05:B377:0A        ASL
* y7 L- m- |! I' N3 Y' e) L! q' Y4 \& ]05:B378:0A        ASL
* [! N# c' {1 D0 K4 k& ], L! h05:B379:85 08     STA $0008 = #$29  z/ X, h* }' G' n4 _$ C  w  `8 Q
05:B37B:8A        TXA9 f7 M7 P% B3 k' F! X$ v
05:B37C:0A        ASL5 j9 v+ r# _5 ~7 |3 N- `# }
05:B37D:65 08     ADC $0008 = #$29% M: ~3 Z( O* Q7 k2 D
05:B37F:A8        TAY" V$ e1 i6 H' B6 j' \6 u5 t
05:B380:B9 D2 B3  LDA $B3D2,Y @ $B3D7 = #$B4
: Z- v1 V; q9 S7 m4 r05:B383:85 08     STA $0008 = #$29: v2 V+ L" ^( d# x+ s
05:B385:B9 D3 B3  LDA $B3D3,Y @ $B3D8 = #$FC/ b+ m/ N- I/ B" a/ D
05:B388:85 09     STA $0009 = #$B2
2 k( K' B" z7 Y' A05:B38A:B4 5E     LDY $5E,X @ $005E = #$022 K# S$ w9 K* @4 @6 T
05:B38C:B1 08     LDA ($08),Y @ $B22E = #$107 e0 m! f- X$ w( O
05:B38E:C9 FF     CMP #$FF
' h' n( e" Q8 f05:B390:F0 3D     BEQ $B3CF
0 k2 S: `( z% e3 |05:B392:95 5C     STA $5C,X @ $005C = #$008 \1 ~9 q$ s! j
05:B394:C8        INY" D8 m9 N7 w% R4 z7 S; r
05:B395:B1 08     LDA ($08),Y @ $B22E = #$10$ a8 I& E$ K! {# e2 K
05:B397:95 5A     STA $5A,X @ $005A = #$7F
) V2 G% ^& o+ f9 D# \  ~' s" L05:B399:C8        INY
9 d7 I' o/ f) S6 ~/ P05:B39A:98        TYA+ L- j$ e& M; X+ M6 ^
05:B39B:95 5E     STA $5E,X @ $005E = #$02
& ^9 n+ t: }0 \& c7 ?& M5 S: f05:B39D:D6 5A     DEC $5A,X @ $005A = #$7F(5A递减)
8 x/ q& _# F/ J05:B39F:B5 5C     LDA $5C,X @ $005C = #$00) D! X" v. ^& X
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$00
8 N- i: \% s! s4 H! M05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
* `" R5 T. {# D0 b) t1 W' k% M
4 {. i/ `: c4 r6 ]1 r由于技术原因,本人以前只能改到打完三关,因为间址LDA ($08),Y得到的地址发生改变,那时本人无能力了.现在全部完成,用到其他方法们再次难以叙述了
7 B" w& R5 z4 v0 R% Y4 V( `可以下载玩一玩* Z5 ?7 h- \5 u% C9 f* `* l
http://pan.baidu.com/s/1bnE0AwZ

签到天数: 1291 天

[LV.10]以坛为家III

发表于 2015-10-16 08:11:53 | 显示全部楼层
我以前曾经也想改这个,看看游戏是否能演示到通关。
+ e5 O( N' `, v# W  t% ^首先考虑的是将游戏改成无敌版,演示时,到背景断层处,主角还是会掉下去死了。
$ ]/ t1 [5 i" _& I! j后来尝试其它修改,但是偶尔会造成花版或者死机。
3 g6 I2 d3 S7 {$ Q+ l' }& d4 m, m深入研究,发现要以演示模式通关,需要做的事情还很多。* `6 D( ?- T8 T1 h# @! h! S+ C
因为太麻烦,也没太多时间弄这个,最后放弃。
[发帖际遇]: wyw 被钱袋砸中进医院,看病花了 3 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 112 天

[LV.6]常住居民II

发表于 2015-10-16 08:50:07 | 显示全部楼层
厉害啊,这个真厉害
回复

使用道具 举报

签到天数: 9 天

[LV.3]偶尔看看II

发表于 2015-12-21 10:43:36 | 显示全部楼层
啊哦,你来晚了,分享的文件已经被删除了,下次要早点哟。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2026-4-27 13:00

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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