设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2015-10-15 08:53:29 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2015-10-28 19:02 编辑 4 `8 X, I" z2 ]; F5 g, Z3 {! d
8 q3 n& r5 k6 h- o1 K4 S, U6 `
FC自动演示修改教程- B2 j8 P# s# g* Y# Q0 R* M/ L
作者:火焰烈旋风
" G( D$ y0 n0 e5 b, @工具:FCEUX中文版(www.9553.cn搜FCEU即可)/ q) y7 ]  `2 {" [' }' C
1.找按键地址:
. {; y( n- u/ O* W- Z, q    首先,我们打开FCEUX,再打开魂斗罗美版,进入游戏无动作,打开FCEUX的工具>作弊,若左下角的"活跃时暂停"没打勾请点击打勾,游戏暂停了,点击中上部的"重设",在已知值输入后输入框中00,点击按钮"已知值",此时搜到大量数据为00的地址.单击FCEU窗口,游戏正常运行,按住一个按键不放如上键,点击作弊窗口的">",游戏暂停了,此时剩下几个地址,再单击FCEU窗口,按住两个按键如上+选择键不放,点击作弊窗口的">",游戏暂停了,只剩下几个地址了,再单击FCEU窗口,不要按任何按键键,点击作弊窗口的"已知值:00"最后剩下两个地址F1,F2,点中其中一个,再点左下角的"添加",发现按什么按键人物都不能动,说明这两个地址就是按键地址,双击左上部的锁定地址,前面的"*"号消失就解除了锁定,并且通过调试知道上=08,下=04,左01,右=02,A=80,B=40,选择=20,开始=10.9 f+ G; y7 [- _+ v& P& L7 v
2.找演示时按键的数据来源:
- w* S: f/ T8 Q" E    既然知道了按键的地址,那么就要看演示时是什么改变了这些值.点击FCEUX的>游戏>重设,等进入自动演示时,我们打开打开FCEUX的调试>调试器,在右上部分点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入F1(我们找到的按键),将输入框下面的"写"打上勾,CPU也打勾,点"确定".此时调试窗口出现如下指令:0 ]7 c" n! B, q) G  o$ i  Q+ s5 q* S
07:C38F:94 F1     STY $F1,X @ $00F1 = #$01
7 ~/ \0 j% {* x1 p2 k07:C391:94 F9     STY $F9,X @ $00F9 = #$00! _1 c' w8 n! t$ P8 g  p2 n* r
07:C393:CA        DEX- a4 _+ t& u6 Y) g5 L8 J/ e* b8 ^' C
07:C394:10 F0     BPL $C386; }# J$ `1 B# {( D
07:C396:60        RTS
$ I  ?$ z7 }/ ~+ a我们点击"运行"左边的上拉按钮上拉,看到如下指令:. c) N1 K* n* D! X$ l6 _
07:C378:A5 1D     LDA $001D = #$075 l! v1 d+ |+ i5 B
07:C37A:29 04     AND #$04
2 D# K- g* l6 r: A' M# J& W0 X( T07:C37C:D0 06     BNE $C3845 Q% P' r8 X7 I0 d8 t1 [
07:C37E:A5 04     LDA $0004 = #$00
5 j# V  l# v1 Q7 _3 C07:C380:05 05     ORA $0005 = #$00
  Z0 H( q$ ~+ V; l07:C382:85 04     STA $0004 = #$00' t# k+ `' [' u
07:C384:A2 01     LDX #$01/ ]; t+ C  {6 A( |1 k! s& \
07:C386:B5 04     LDA $04,X @ $0004 = #$00
. R# N2 [/ S2 g4 C, ~07:C388:A8        TAY& K+ P5 ]$ z  T$ |+ i; K" M, k
07:C389:55 F9     EOR $F9,X @ $00F9 = #$00
# g  ~( C4 h& t  t& S07:C38B:35 04     AND $04,X @ $0004 = #$00
& g9 M  [, j; t9 P07:C38D:95 F5     STA $F5,X @ $00F5 = #$00
0 y+ H7 L% a" V07:C38F:94 F1     STY $F1,X @ $00F1 = #$010 s. o& Y8 ~% X  @! t
07:C391:94 F9     STY $F9,X @ $00F9 = #$00
3 @' ]$ h! d& ~07:C393:CA        DEX
+ o2 ^, i. ^3 q7 M07:C394:10 F0     BPL $C3860 C6 P' X# m. U  Z% e
07:C396:60        RTS& m# ?" M8 m1 h4 U9 L# h! Z% j
由于演示的数据存放在某处,然而这里并没有读取某处的值送F1的指令,所以很可能不是我们要找的指令,点击"断点"窗口旁边的"运行",窗口中出现如下数据:
% T9 S7 a7 k% w- E05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
# [! T' R1 s6 p05:B3A5:A5 2E     LDA $002E = #$C8! z7 I8 E0 L2 @8 S
05:B3A7:C9 50     CMP #$50: {" M- F$ w/ I
05:B3A9:90 20     BCC $B3CB
" `1 ^% f! Q  R+ W! f5 A2 \: ^05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00% @$ a5 Q0 B& K( x- A
05:B3AD:29 0F     AND #$0F% [  p* P& V7 w  O7 B, r$ D8 x: k
05:B3AF:C9 01     CMP #$016 h4 H3 A6 l7 |. I
05:B3B1:F0 04     BEQ $B3B7# N4 S- l' q4 z& f. p
05:B3B3:C9 04     CMP #$044 Y; ^% x# m! v. ~9 I) {5 T
.........
! M" i! V5 k; z. Z5 z9 r我们点击"运行"左边的上拉按钮上拉,看到如下指令:
2 N, G) _0 w3 a) f) g! ~05:B39F:B5 5C     LDA $5C,X @ $005C = #$01. p( E  U! p0 S  k1 W1 m
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01' d% J0 W$ D! X* v
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00" F, \1 X3 A, K- [9 ]
05:B3A5:A5 2E     LDA $002E = #$C8
3 k8 _8 y1 a7 m/ R# H  D6 g) G4 T. [05:B3A7:C9 50     CMP #$50/ L. @- ]$ W4 b2 X. v, s, q! Y' v
05:B3A9:90 20     BCC $B3CB7 a; K0 v3 `, G! n$ Q( v1 q% E1 A
05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$008 y9 }$ {9 A0 y1 z: R5 N- ]
05:B3AD:29 0F     AND #$0F. Q' e$ ~9 f' L! g8 I
看到/ ^! p/ g5 \5 g
05:B39F:B5 5C     LDA $5C,X @ $005C = #$01
( Z3 Z& p5 p. {" {" ~& w5 T) G05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01
) P: S/ i' t5 L7 n( N1 c, b# i" ?- U05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
6 V6 w5 K  r- U$ Z# I6 p3 w1 ^没有?这个说明F1的数据是从地址5C送出得到的,说明我们要找到存储演示按键数据必须从地址5C入手.1 C, d& ?0 f! y; K0 M1 C
    接下来调试器,双击取消F1断点,点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入5C,同样"写"打上勾,点"确定",一会出现如下指令:
* @3 b" |5 h9 z' P05:B392:95 5C     STA $5C,X @ $005C = #$016 S" t7 }8 T8 a
05:B394:C8        INY
$ @3 `' N8 I6 D- s05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$099 p2 A/ m2 X1 ^- i* |5 ^1 e
05:B397:95 5A     STA $5A,X @ $005A = #$00
6 O" ?7 L2 v* H) o% U05:B399:C8        INY* t7 z3 m1 M( _
05:B39A:98        TYA
7 O5 H( j2 P4 L7 j! M$ F" K* y然后我们再上拉,得到如下指令:  x$ Z& v3 S4 T2 d
05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09
. Z  Z: B- x& }. n* E) }+ ^05:B38E:C9 FF     CMP #$FF
* P( a  ^6 t" ^) R: @05:B390:F0 3D     BEQ $B3CF6 `( G& n7 C4 g& ]2 F$ J: ^. Y
05:B392:95 5C     STA $5C,X @ $005C = #$01$ N" S! h% f6 }1 }+ E
05:B394:C8        INY7 |1 P2 L  l: U. Y( E
05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09
; d4 S  s2 E( N$ v. B05:B397:95 5A     STA $5A,X @ $005A = #$00
3 w% n8 x3 M6 C- F05:B399:C8        INY
! W  S# ?. t$ T; a6 {; H" q8 l05:B39A:98        TYA2 u' U) `1 F  i. T" v9 j
看到05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09
$ N' s, V% i% t( x+ g2 _) {没有?说明现在5C的值来源于变址得到的$B3F2,哈哈,演示按键的数据找到了,在游戏CPU的$B3F2附近.3 J/ g4 f. u; n$ [9 T/ R! m
3.修改演示:$ O& C& _- i" \; B
    打开FCEUX的调试>十六进制编辑器,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3F2,此时黑色光标标记的地方就是CPU的$B3F2,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了.0 ~1 D" _# X3 j, }
    我们要修改,必须从开始演示的第一个演示按键开始,接下来去找到它:. C; p6 B* a& t7 `0 g9 v9 K# ~
打开FCEUX的游戏>重设,此时游戏暂停无状态,点击调试器的"运行",出现黑屏,再点击两次"运行"游戏运行了,过一会又暂停,再点击两次"运行"游戏运行了,出现背景画面时暂停了,调试器窗口中出现了如下数据:: z0 `2 W* W1 p
05:B392:95 5C     STA $5C,X @ $005C = #$00
( p  n+ u9 f( r: |05:B394:C8        INY
% E3 L; n' ^- g% ^; S5 L05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00/ v& [, H( d; z2 l
05:B397:95 5A     STA $5A,X @ $005A = #$002 Q, F9 b0 u/ N, g" J
05:B399:C8        INY1 U! D+ N6 T5 b. @7 k
05:B39A:98        TYA# r0 w+ W& f+ B$ O
我们上拉看到了:
% T. c3 M% L: s# a" S8 c7 U2 }( E05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00. g* _  r" v5 P9 |
05:B38E:C9 FF     CMP #$FF
2 |, @7 f+ f" U7 |5 ]+ b0 h05:B390:F0 3D     BEQ $B3CF) Q/ H7 @# f: a3 J; v/ M2 H; u/ C
05:B392:95 5C     STA $5C,X @ $005C = #$00
- D/ O. X. a, Y: O/ i) V05:B394:C8        INY  u4 e3 ~# i" n1 W" x! `+ s
05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00" u5 m+ i( Q! V9 C+ F& m8 I2 f
05:B397:95 5A     STA $5A,X @ $005A = #$006 c0 @; t$ r9 b$ o  u( o- o
05:B399:C8        INY! r  y* t5 H# I8 D: z
05:B39A:98        TYA2 P. C% W$ n, s" _: c4 u7 y
看到
9 k7 }" f) F% k05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00
6 \; }: H: [$ L6 }/ e! T没有?它应该是第一个演示按键,接下来进入十六进制编辑器,点击查看>NES内存,此时切换到NES的CPU内存,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3DE,此时黑色光标标记的地方就是CPU的$B3DE,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了,这里就是演示按键的开始地址.3 M2 ^' ^  q0 ]. b0 t3 `
说明:演示按键地址的结构,以开始的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(时间).......以此类推,判断根据:
1 y5 q  }) T- W3 A- b05:B371:B5 5A     LDA $5A,X @ $005A = #$7F
4 H" s, Z& m9 ]- j3 S# x, `. d05:B373:D0 28     BNE $B39D(如果5A=00,那么就会跳过28字节执行2A递减的指令)
& n: C% f- p/ @) h05:B375:A5 30     LDA $0030 = #$00$ Z" B# _+ X$ [2 N+ J- o: v( A
05:B377:0A        ASL% c0 C$ Q1 p, d9 ^3 {
05:B378:0A        ASL
& i& ~. m7 X. T4 X05:B379:85 08     STA $0008 = #$29
# ?5 m8 l; s2 V# g0 Y7 n- J05:B37B:8A        TXA
: x; F9 _' |, k6 a; S05:B37C:0A        ASL/ e, {6 s$ f  b5 t7 d
05:B37D:65 08     ADC $0008 = #$298 e/ P2 I4 A; L" D! ]
05:B37F:A8        TAY1 x; S3 j% }/ p$ H
05:B380:B9 D2 B3  LDA $B3D2,Y @ $B3D7 = #$B43 n% B$ T6 R2 @" ~. N8 v6 ^+ U; s
05:B383:85 08     STA $0008 = #$29
& g/ w$ `: [4 q$ X0 n' ^" I" x/ }2 }05:B385:B9 D3 B3  LDA $B3D3,Y @ $B3D8 = #$FC
0 m% b  H4 K1 O05:B388:85 09     STA $0009 = #$B2
0 T# x$ b$ }& C8 l, E) Y2 n- N. g, M05:B38A:B4 5E     LDY $5E,X @ $005E = #$02$ a" g# k% J, L
05:B38C:B1 08     LDA ($08),Y @ $B22E = #$10
$ E0 R; z2 I' R1 e! h+ o" B& r" X" n05:B38E:C9 FF     CMP #$FF" w- r. P! c5 Z# K% u9 A
05:B390:F0 3D     BEQ $B3CF" g5 [. e" P) [. G1 @
05:B392:95 5C     STA $5C,X @ $005C = #$003 U  ]$ N) J& ], Q# [  q
05:B394:C8        INY
6 b; S# @! \' O5 U( K05:B395:B1 08     LDA ($08),Y @ $B22E = #$100 v! l' ~' I8 v9 O" Y  S& f; r7 _
05:B397:95 5A     STA $5A,X @ $005A = #$7F; M1 P" i0 W$ Y$ S8 V& U
05:B399:C8        INY4 z5 [! _% f6 e, |: v" S6 t
05:B39A:98        TYA
* u1 k: q  }" W. C1 p3 Y& Q05:B39B:95 5E     STA $5E,X @ $005E = #$02$ N: i# R& ?& _) }# W
05:B39D:D6 5A     DEC $5A,X @ $005A = #$7F(5A递减)) ]3 V/ A9 w: i; K2 ^5 Y
05:B39F:B5 5C     LDA $5C,X @ $005C = #$00
3 b1 A% m) `& K+ }! C05:B3A1:95 F5     STA $F5,X @ $00F5 = #$00
7 u* Z* ^* Y' v- D0 ~05:B3A3:95 F1     STA $F1,X @ $00F1 = #$005 p1 e# R( W* A3 t" v# b
% j! H( h  k" D1 W% |0 O
由于技术原因,本人以前只能改到打完三关,因为间址LDA ($08),Y得到的地址发生改变,那时本人无能力了.现在全部完成,用到其他方法们再次难以叙述了$ p$ U# p2 S& \1 O6 i
可以下载玩一玩
. @/ w5 @+ |% W) Z) I# F! v5 nhttp://pan.baidu.com/s/1bnE0AwZ

签到天数: 1291 天

[LV.10]以坛为家III

发表于 2015-10-16 08:11:53 | 显示全部楼层
我以前曾经也想改这个,看看游戏是否能演示到通关。6 s  y- y4 b: k$ k# S
首先考虑的是将游戏改成无敌版,演示时,到背景断层处,主角还是会掉下去死了。8 p% m8 U* ?$ e1 b9 _
后来尝试其它修改,但是偶尔会造成花版或者死机。
* A9 q8 m, _( d. Z3 u深入研究,发现要以演示模式通关,需要做的事情还很多。6 v# A" V1 t* S) `  Q: E
因为太麻烦,也没太多时间弄这个,最后放弃。
[发帖际遇]: 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-7 00:44

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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