设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2015-10-15 08:53:29 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2015-10-28 19:02 编辑
7 C* O! ^% x3 k/ W5 n6 V  A
' U& W* @* a1 h5 zFC自动演示修改教程. b7 l; {; _  W
作者:火焰烈旋风
2 _# G9 {2 c. o- K4 K. I) E工具:FCEUX中文版(www.9553.cn搜FCEU即可). P7 I  l( }/ ]4 l1 ?) P: _7 I
1.找按键地址:
  K# R3 S) S% w( ?0 p! F  h. r1 \    首先,我们打开FCEUX,再打开魂斗罗美版,进入游戏无动作,打开FCEUX的工具>作弊,若左下角的"活跃时暂停"没打勾请点击打勾,游戏暂停了,点击中上部的"重设",在已知值输入后输入框中00,点击按钮"已知值",此时搜到大量数据为00的地址.单击FCEU窗口,游戏正常运行,按住一个按键不放如上键,点击作弊窗口的">",游戏暂停了,此时剩下几个地址,再单击FCEU窗口,按住两个按键如上+选择键不放,点击作弊窗口的">",游戏暂停了,只剩下几个地址了,再单击FCEU窗口,不要按任何按键键,点击作弊窗口的"已知值:00"最后剩下两个地址F1,F2,点中其中一个,再点左下角的"添加",发现按什么按键人物都不能动,说明这两个地址就是按键地址,双击左上部的锁定地址,前面的"*"号消失就解除了锁定,并且通过调试知道上=08,下=04,左01,右=02,A=80,B=40,选择=20,开始=10.
2 s# K* ?- ]8 d" O  a2.找演示时按键的数据来源:' p% b3 {! ~5 K( Q7 a# p" \1 R; F
    既然知道了按键的地址,那么就要看演示时是什么改变了这些值.点击FCEUX的>游戏>重设,等进入自动演示时,我们打开打开FCEUX的调试>调试器,在右上部分点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入F1(我们找到的按键),将输入框下面的"写"打上勾,CPU也打勾,点"确定".此时调试窗口出现如下指令:
; I9 H6 N3 ~7 c! q/ W07:C38F:94 F1     STY $F1,X @ $00F1 = #$01$ L/ o# p* q0 Q  w
07:C391:94 F9     STY $F9,X @ $00F9 = #$00
( u( _1 T+ v' W% z: O07:C393:CA        DEX5 z$ k! w& J; a/ ^1 F
07:C394:10 F0     BPL $C386$ D& O9 F' ~! L# z' X% Q8 k
07:C396:60        RTS; U- q" @9 B+ R+ x: ^# @& j
我们点击"运行"左边的上拉按钮上拉,看到如下指令:
$ i% w; n- y7 I( X" h1 T8 l' d07:C378:A5 1D     LDA $001D = #$076 r. i3 ~5 m0 |2 ~# }
07:C37A:29 04     AND #$04
$ J9 J% [3 S5 Y" q3 {; A: G07:C37C:D0 06     BNE $C384
6 o" x  d8 Y% d( v, q, ]3 C, \; ]07:C37E:A5 04     LDA $0004 = #$006 Z6 B1 K: {+ k: ]8 ]# U3 w3 W
07:C380:05 05     ORA $0005 = #$00
  U- V& M3 V' f$ r07:C382:85 04     STA $0004 = #$00
) o& z7 O: H0 P! \! R. t: w! f7 L& {07:C384:A2 01     LDX #$01
& p# p! d) q( b( v07:C386:B5 04     LDA $04,X @ $0004 = #$001 [9 @$ y: o6 B/ b! ]
07:C388:A8        TAY4 B; O/ t; }) D4 C; S
07:C389:55 F9     EOR $F9,X @ $00F9 = #$00# E9 N; M" S1 F# E
07:C38B:35 04     AND $04,X @ $0004 = #$00% ~! l* ?% v/ H9 X# Z0 o8 v
07:C38D:95 F5     STA $F5,X @ $00F5 = #$00
$ P8 x: a6 l2 y5 ]2 X% }  D07:C38F:94 F1     STY $F1,X @ $00F1 = #$01% S7 R+ Q8 ~* `( [9 ~- S
07:C391:94 F9     STY $F9,X @ $00F9 = #$00
% u+ M9 i* b" E+ N& C07:C393:CA        DEX- r9 P( f9 S% U* R4 {5 f* @1 ^: a0 Z
07:C394:10 F0     BPL $C386
) Q+ k9 A" u/ ?$ j07:C396:60        RTS3 U7 k( N0 K  v) Q$ M$ Q
由于演示的数据存放在某处,然而这里并没有读取某处的值送F1的指令,所以很可能不是我们要找的指令,点击"断点"窗口旁边的"运行",窗口中出现如下数据:
9 q- i# R8 D' {' l$ E) G05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00! K+ k0 u( B- @. J# L( W
05:B3A5:A5 2E     LDA $002E = #$C80 B/ y' [  `, Q$ w0 H7 [
05:B3A7:C9 50     CMP #$50
* o+ Y) Y5 g1 a05:B3A9:90 20     BCC $B3CB
$ v- m; I% {0 k$ r8 F9 x! y- G05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$000 C, Y% v: @; Z) y2 n0 {" o
05:B3AD:29 0F     AND #$0F
6 v5 ^! C( n5 v9 I6 E05:B3AF:C9 01     CMP #$01
4 {  K3 }- g' H7 b6 d3 q0 C05:B3B1:F0 04     BEQ $B3B7
7 W2 f9 R  D" D$ f0 ~0 k05:B3B3:C9 04     CMP #$04( \4 p) W9 `" L
.........& P) Z' K$ k; E( k) ]
我们点击"运行"左边的上拉按钮上拉,看到如下指令:
; t, V8 d6 n, v, i* d0 l05:B39F:B5 5C     LDA $5C,X @ $005C = #$01* H7 R- O* U; N3 g9 m
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01
! q, y$ b- g8 l' ]3 L7 [05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
3 g0 k% M  C. v' R05:B3A5:A5 2E     LDA $002E = #$C8
5 X" i3 c! X$ b- ]9 z3 x$ G05:B3A7:C9 50     CMP #$504 U4 |6 W/ F- K$ U( {
05:B3A9:90 20     BCC $B3CB" B5 z! ?- w3 n' Y1 y* D7 ~
05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00
; I! u: d- o1 @6 T4 ]1 M. X05:B3AD:29 0F     AND #$0F
6 x3 F0 j1 _4 k! @看到3 n- M1 C, p- A) x+ S1 s$ R
05:B39F:B5 5C     LDA $5C,X @ $005C = #$01
  G  ?- d& {: l4 }6 G+ w* p05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01
9 M0 Y( a; u9 A, D3 ?% ]05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
$ Y* q( X: ]+ G) j$ y0 M# n+ i4 H没有?这个说明F1的数据是从地址5C送出得到的,说明我们要找到存储演示按键数据必须从地址5C入手.' [* h. k, s; ^8 D. K7 P
    接下来调试器,双击取消F1断点,点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入5C,同样"写"打上勾,点"确定",一会出现如下指令:% r$ u' g4 z* ^6 I% B0 y
05:B392:95 5C     STA $5C,X @ $005C = #$01' t' F0 c6 w% K7 _3 _4 C
05:B394:C8        INY# r9 E1 Q' L9 c. i
05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09
* L* V6 E0 s9 {' ?# X3 g05:B397:95 5A     STA $5A,X @ $005A = #$00
, q6 P% X" X& `5 b05:B399:C8        INY
7 y4 i# r  N' h8 ~05:B39A:98        TYA$ [: l9 z4 i3 W1 o
然后我们再上拉,得到如下指令:" R! I; t* Y7 M  \' V
05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09
$ ~  M7 l! e# R' p05:B38E:C9 FF     CMP #$FF0 E! l" V* c* w1 l  i* d
05:B390:F0 3D     BEQ $B3CF
+ e2 S* J) z6 l) e! w! x  Q6 y& i9 J05:B392:95 5C     STA $5C,X @ $005C = #$01
- P- T( J6 Z- O1 D, S5 J/ k9 V9 Z05:B394:C8        INY
) Z& f7 d2 u9 Q  S05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09  ]+ s$ ^% h, L& x; n
05:B397:95 5A     STA $5A,X @ $005A = #$00
9 ^0 ^4 H2 u3 E: f05:B399:C8        INY
) D0 T. ?) J# S# F) @05:B39A:98        TYA
1 {) T0 ^$ k/ y6 c- n2 T看到05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09$ l: C; q/ ^, J$ k! h1 K7 W
没有?说明现在5C的值来源于变址得到的$B3F2,哈哈,演示按键的数据找到了,在游戏CPU的$B3F2附近.2 G/ o$ d, \9 \& ~! Y" ~
3.修改演示:
4 H' m5 Y4 K5 m/ q% J; e    打开FCEUX的调试>十六进制编辑器,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3F2,此时黑色光标标记的地方就是CPU的$B3F2,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了.5 Y; N; n6 d1 f+ N6 I/ s; |
    我们要修改,必须从开始演示的第一个演示按键开始,接下来去找到它:
! g6 W( o! D8 q' S9 o7 ^打开FCEUX的游戏>重设,此时游戏暂停无状态,点击调试器的"运行",出现黑屏,再点击两次"运行"游戏运行了,过一会又暂停,再点击两次"运行"游戏运行了,出现背景画面时暂停了,调试器窗口中出现了如下数据:) b4 P& A3 C& D& b! n* h
05:B392:95 5C     STA $5C,X @ $005C = #$004 n3 j) ?4 v5 N9 }9 o" t2 l( q
05:B394:C8        INY+ D+ d2 |8 w6 x( L- W9 X/ h
05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00
2 R* J- q" a$ ~- u3 F05:B397:95 5A     STA $5A,X @ $005A = #$00
# u: ^  ^/ @* A( m/ x( b05:B399:C8        INY
/ ?3 j+ D3 T$ O; e05:B39A:98        TYA
3 i& y, y  v4 F/ C9 K我们上拉看到了:
, @$ w, r2 z3 m% \05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00
. v6 k/ E: s7 s; `, o05:B38E:C9 FF     CMP #$FF5 ~7 K" Q1 t' a! z' J( E5 C
05:B390:F0 3D     BEQ $B3CF
  j8 s/ Y9 T& s# G, @4 n: z3 E05:B392:95 5C     STA $5C,X @ $005C = #$00
! I. t( O# u; Y05:B394:C8        INY' L2 @5 N' q! \* a
05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00
: R) J2 C9 [8 o  ^, c1 o, ~05:B397:95 5A     STA $5A,X @ $005A = #$00
5 U% F4 E# \5 r05:B399:C8        INY" Q! Q7 U, W6 C- w& {
05:B39A:98        TYA& f& p3 z8 X) Y$ l- b
看到
; v9 N3 L% `* E  S+ c05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00
  R0 ~1 o* A( l6 i0 [  o7 A没有?它应该是第一个演示按键,接下来进入十六进制编辑器,点击查看>NES内存,此时切换到NES的CPU内存,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3DE,此时黑色光标标记的地方就是CPU的$B3DE,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了,这里就是演示按键的开始地址.+ w/ k. Q, T" K  ]" x
说明:演示按键地址的结构,以开始的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(时间).......以此类推,判断根据:
4 [9 d* w) |9 z3 ^1 y7 ~  D" E05:B371:B5 5A     LDA $5A,X @ $005A = #$7F6 b0 B# C- U' g# r
05:B373:D0 28     BNE $B39D(如果5A=00,那么就会跳过28字节执行2A递减的指令)
3 _6 @1 @* h- K' W6 y" w05:B375:A5 30     LDA $0030 = #$00
4 ?/ B6 N% `% ^05:B377:0A        ASL
+ Q( B6 d/ [1 g2 U) q/ o05:B378:0A        ASL& K. K) {1 _! D8 s' B
05:B379:85 08     STA $0008 = #$298 g7 V3 k& s+ W5 S7 @9 ^
05:B37B:8A        TXA
/ o* z% y7 i) q9 Y" \05:B37C:0A        ASL
- g4 T; r- E: z& h, W, t; e05:B37D:65 08     ADC $0008 = #$29
/ W0 n3 y3 m9 I8 T' ?05:B37F:A8        TAY* g! H8 w$ V& t
05:B380:B9 D2 B3  LDA $B3D2,Y @ $B3D7 = #$B4* [  `  R4 ^0 ^9 @
05:B383:85 08     STA $0008 = #$29
- ]9 z; }& }" x4 C4 V05:B385:B9 D3 B3  LDA $B3D3,Y @ $B3D8 = #$FC
! P3 f& Y) t6 b6 k/ _05:B388:85 09     STA $0009 = #$B2
; L& b. a+ j- {* C% ?: D05:B38A:B4 5E     LDY $5E,X @ $005E = #$02
) s3 Z; N/ k5 Q$ b% K05:B38C:B1 08     LDA ($08),Y @ $B22E = #$10/ y9 c2 \9 O  ^, _/ l1 E
05:B38E:C9 FF     CMP #$FF! S: d4 x! l- z+ U; q- J
05:B390:F0 3D     BEQ $B3CF) Z& _" G! P: U: n) q7 }1 ^
05:B392:95 5C     STA $5C,X @ $005C = #$00
; f+ @; t, O7 {! r3 L' v05:B394:C8        INY
, v% Z4 @9 N6 D! m- Y05:B395:B1 08     LDA ($08),Y @ $B22E = #$10
0 A3 S, t5 C7 K2 X$ W0 s/ q1 `& u+ }05:B397:95 5A     STA $5A,X @ $005A = #$7F; k3 }* C, v6 a. I, w  K
05:B399:C8        INY3 X6 l7 I4 ?1 W8 ]& U5 K  N1 j4 a
05:B39A:98        TYA% D( O# j8 u8 y* K
05:B39B:95 5E     STA $5E,X @ $005E = #$02
( I  v* q3 ?, Q* f( H8 F" M; v05:B39D:D6 5A     DEC $5A,X @ $005A = #$7F(5A递减)3 s2 e0 F1 p8 ]8 x# Z( o# o5 f# o
05:B39F:B5 5C     LDA $5C,X @ $005C = #$00
( R- q0 N% D) d- y5 @9 f! i05:B3A1:95 F5     STA $F5,X @ $00F5 = #$00
! z/ v% k; C8 `" ]/ ~  \05:B3A3:95 F1     STA $F1,X @ $00F1 = #$003 S( X+ C8 {0 E2 {4 L; B
  T: f9 W" P, [( l$ f/ X2 w
由于技术原因,本人以前只能改到打完三关,因为间址LDA ($08),Y得到的地址发生改变,那时本人无能力了.现在全部完成,用到其他方法们再次难以叙述了8 j# I. c  P8 m4 y. \
可以下载玩一玩
2 ]# i4 Y% O$ E3 y; U$ R0 i# xhttp://pan.baidu.com/s/1bnE0AwZ

签到天数: 1291 天

[LV.10]以坛为家III

发表于 2015-10-16 08:11:53 | 显示全部楼层
我以前曾经也想改这个,看看游戏是否能演示到通关。) j1 Q% ^5 B1 [1 u
首先考虑的是将游戏改成无敌版,演示时,到背景断层处,主角还是会掉下去死了。
; q7 @# c/ I% T后来尝试其它修改,但是偶尔会造成花版或者死机。! l4 ?- v% d2 y' Z
深入研究,发现要以演示模式通关,需要做的事情还很多。
9 U. O( y0 Y5 _+ F4 }因为太麻烦,也没太多时间弄这个,最后放弃。
[发帖际遇]: 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-3-17 20:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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