设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2015-10-15 08:53:29 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2015-10-28 19:02 编辑
" i' c& d1 @/ t% Q
) o( b* X1 y3 LFC自动演示修改教程
5 A" e$ B% R$ ?3 A作者:火焰烈旋风5 _; O8 B$ M$ J
工具:FCEUX中文版(www.9553.cn搜FCEU即可)
! |/ L' X0 _3 T1.找按键地址:: n3 X2 R2 v, T7 c1 Y! T6 V
    首先,我们打开FCEUX,再打开魂斗罗美版,进入游戏无动作,打开FCEUX的工具>作弊,若左下角的"活跃时暂停"没打勾请点击打勾,游戏暂停了,点击中上部的"重设",在已知值输入后输入框中00,点击按钮"已知值",此时搜到大量数据为00的地址.单击FCEU窗口,游戏正常运行,按住一个按键不放如上键,点击作弊窗口的">",游戏暂停了,此时剩下几个地址,再单击FCEU窗口,按住两个按键如上+选择键不放,点击作弊窗口的">",游戏暂停了,只剩下几个地址了,再单击FCEU窗口,不要按任何按键键,点击作弊窗口的"已知值:00"最后剩下两个地址F1,F2,点中其中一个,再点左下角的"添加",发现按什么按键人物都不能动,说明这两个地址就是按键地址,双击左上部的锁定地址,前面的"*"号消失就解除了锁定,并且通过调试知道上=08,下=04,左01,右=02,A=80,B=40,选择=20,开始=10.
& J9 {3 {6 _3 k# n2.找演示时按键的数据来源:
, w: |- Y2 }. [3 x    既然知道了按键的地址,那么就要看演示时是什么改变了这些值.点击FCEUX的>游戏>重设,等进入自动演示时,我们打开打开FCEUX的调试>调试器,在右上部分点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入F1(我们找到的按键),将输入框下面的"写"打上勾,CPU也打勾,点"确定".此时调试窗口出现如下指令:
7 C( h$ ^, o. x& K07:C38F:94 F1     STY $F1,X @ $00F1 = #$01/ F) i/ P) E3 ~' @4 R
07:C391:94 F9     STY $F9,X @ $00F9 = #$00
& C* B. E& _7 k* M6 W8 n# E, B07:C393:CA        DEX
& m# N! Y$ [6 k1 X  ^07:C394:10 F0     BPL $C386) z# a- W3 R! V4 p# A: _8 `
07:C396:60        RTS
8 a: x. H  _4 I我们点击"运行"左边的上拉按钮上拉,看到如下指令:: N  ^0 j4 a- J1 _; Y3 A
07:C378:A5 1D     LDA $001D = #$077 u# z. m/ a! f
07:C37A:29 04     AND #$04
# u1 J( R/ @7 @- ?07:C37C:D0 06     BNE $C3847 s, L9 n4 w: H- D; W% H; y
07:C37E:A5 04     LDA $0004 = #$00; c" q. u; w% D) Z" \- q: g
07:C380:05 05     ORA $0005 = #$00
9 |( Q3 ]" l$ K0 D9 Q1 `07:C382:85 04     STA $0004 = #$00  q8 Q4 E7 g: @8 Q
07:C384:A2 01     LDX #$01
/ o! ?  w2 o  Y  d! h$ |$ U( b07:C386:B5 04     LDA $04,X @ $0004 = #$00
3 x+ o& C0 Y8 q4 k3 _2 \/ B) L1 }3 z07:C388:A8        TAY
* j% d0 o: W( u* ?9 P07:C389:55 F9     EOR $F9,X @ $00F9 = #$004 [' k- o; C6 H- Z: i8 s8 u* o
07:C38B:35 04     AND $04,X @ $0004 = #$00: o  M! L* ]+ c2 F0 O
07:C38D:95 F5     STA $F5,X @ $00F5 = #$00
! `; K' [; z! r# ^1 ?/ w# n07:C38F:94 F1     STY $F1,X @ $00F1 = #$01
8 D; T: F: ^9 C" ~5 O07:C391:94 F9     STY $F9,X @ $00F9 = #$00
' c( _: p: x3 p( T8 s07:C393:CA        DEX
  k& y5 y9 p* P2 t8 ?* Q6 P2 A07:C394:10 F0     BPL $C386
$ ]  E/ a& |! R5 S/ b07:C396:60        RTS
: H& S& n+ e' E4 F由于演示的数据存放在某处,然而这里并没有读取某处的值送F1的指令,所以很可能不是我们要找的指令,点击"断点"窗口旁边的"运行",窗口中出现如下数据:
3 |2 ?4 r# m# J05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
2 C( j: c8 V. B: {) T- O  `) S05:B3A5:A5 2E     LDA $002E = #$C8- O$ N* l2 T7 z
05:B3A7:C9 50     CMP #$50
0 ?4 D; G1 w+ K05:B3A9:90 20     BCC $B3CB# O; Y# t5 d9 N! R7 [: f
05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00
1 v: n8 v% F& m) f05:B3AD:29 0F     AND #$0F
$ H# x  f+ E* l5 a( T3 H05:B3AF:C9 01     CMP #$01: _! c! o; r! ?0 a) Q) Y! t
05:B3B1:F0 04     BEQ $B3B7
. l( D/ ]5 q. P7 M05:B3B3:C9 04     CMP #$04" O4 p# k8 C4 y' d" G& i
.........3 c( d' N8 a% D4 }" v9 \6 V. E
我们点击"运行"左边的上拉按钮上拉,看到如下指令:/ u9 D$ c, c# _, }6 W
05:B39F:B5 5C     LDA $5C,X @ $005C = #$01
, {6 R% x9 r4 }) [( P  @3 Y0 S05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01# D! `" q6 u) z2 J; n8 D9 V( D
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00# H2 g; C8 K$ Z7 g
05:B3A5:A5 2E     LDA $002E = #$C8
' {5 u: K' y4 U& E5 H" k$ P% N! j05:B3A7:C9 50     CMP #$505 ]9 {9 K; F; l8 [8 x
05:B3A9:90 20     BCC $B3CB
" ]  d/ Y3 ]' q( F) ^05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$003 N6 z" j5 X3 a( v. Y( O4 ^
05:B3AD:29 0F     AND #$0F
4 ^* K# {4 L% z; y/ y看到
1 I' c6 z" j! ]05:B39F:B5 5C     LDA $5C,X @ $005C = #$017 G/ J8 Z) {! _% X0 L
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01
$ z+ I5 r! {% }) z& C% U, L4 [3 k05:B3A3:95 F1     STA $F1,X @ $00F1 = #$005 R( J0 T+ R) h# C
没有?这个说明F1的数据是从地址5C送出得到的,说明我们要找到存储演示按键数据必须从地址5C入手.( ^* K. M% g% h
    接下来调试器,双击取消F1断点,点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入5C,同样"写"打上勾,点"确定",一会出现如下指令:: Q1 @- L; V4 A+ h& q: W+ f
05:B392:95 5C     STA $5C,X @ $005C = #$01
% |1 a1 t1 z- o+ C2 R05:B394:C8        INY' R, a. b- K$ N$ `( F
05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09
7 T5 u/ M- @! v0 a0 }# ]0 w) K05:B397:95 5A     STA $5A,X @ $005A = #$00, a; W: T) U% o) Y0 |$ c. [& h6 C
05:B399:C8        INY. g: r7 N/ L2 Q8 C
05:B39A:98        TYA, ~5 c  h2 L7 ^( W+ B  r( P
然后我们再上拉,得到如下指令:
6 p1 _( T: A: k' B4 R05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09
- Q' [9 A; l# A) o& n05:B38E:C9 FF     CMP #$FF* H" ^* J- A( Z# ^5 _4 e' m  h
05:B390:F0 3D     BEQ $B3CF
/ V0 L6 g$ D* s; }05:B392:95 5C     STA $5C,X @ $005C = #$01
2 \* k# p. ~. z/ f& P05:B394:C8        INY
- m/ n1 Q; l  `( k; F: p6 N05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$091 S. w* Q4 ~- G9 E2 V, X
05:B397:95 5A     STA $5A,X @ $005A = #$00
- a; b0 H; p" l& _- }, U05:B399:C8        INY+ i# |/ i3 H  \, j. ~0 I7 Z6 x
05:B39A:98        TYA
' }% B: R: L, T4 s% P5 e看到05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$097 K) I5 f; y( Y3 D# v
没有?说明现在5C的值来源于变址得到的$B3F2,哈哈,演示按键的数据找到了,在游戏CPU的$B3F2附近.& `' p4 `3 s; [8 X' {& ~9 n
3.修改演示:
5 ^: H2 s/ n. E; u$ W6 L    打开FCEUX的调试>十六进制编辑器,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3F2,此时黑色光标标记的地方就是CPU的$B3F2,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了.
  f0 q4 Q9 J# I( ]; D" H* \    我们要修改,必须从开始演示的第一个演示按键开始,接下来去找到它:: X+ t# H6 B$ |6 T3 _) Z5 n
打开FCEUX的游戏>重设,此时游戏暂停无状态,点击调试器的"运行",出现黑屏,再点击两次"运行"游戏运行了,过一会又暂停,再点击两次"运行"游戏运行了,出现背景画面时暂停了,调试器窗口中出现了如下数据:9 E, e- Z% G- Z% `; x
05:B392:95 5C     STA $5C,X @ $005C = #$00
; k5 }0 f8 y5 u05:B394:C8        INY
7 D/ w; K- X% U& B% S8 n+ E05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00
8 H9 {8 z6 I9 ]( s  U5 R; I05:B397:95 5A     STA $5A,X @ $005A = #$00
0 i  _* [  c8 A- `- X05:B399:C8        INY. `4 H1 l2 d9 D7 X1 D. m
05:B39A:98        TYA) ^; T% r1 x9 Q
我们上拉看到了:" U1 K- [' G. y6 r# z
05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00, h0 ]# z* h9 u/ w4 e1 H: |
05:B38E:C9 FF     CMP #$FF
' K+ u: M+ c- N1 Z, M  H05:B390:F0 3D     BEQ $B3CF! B9 K" A5 @  y) M
05:B392:95 5C     STA $5C,X @ $005C = #$00( P. b# r, ]6 U& M. J5 x, a
05:B394:C8        INY. E' K4 T- M, Y4 \" U  a" C
05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00: s  n6 o9 I/ L0 e
05:B397:95 5A     STA $5A,X @ $005A = #$00
# N; s0 j, A$ L/ L; M  {' x05:B399:C8        INY( Q6 ?, D# e4 f: ^5 S
05:B39A:98        TYA, u# o8 h( I4 m9 U3 s: g
看到3 D' `) q, D& v% r  Y  [5 F
05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00
2 m6 q8 O2 \0 ^. C- N没有?它应该是第一个演示按键,接下来进入十六进制编辑器,点击查看>NES内存,此时切换到NES的CPU内存,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3DE,此时黑色光标标记的地方就是CPU的$B3DE,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了,这里就是演示按键的开始地址.
) Q, v9 O# m, \& L  Z5 G说明:演示按键地址的结构,以开始的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(时间).......以此类推,判断根据:
  O- x: }' |' `" J3 D05:B371:B5 5A     LDA $5A,X @ $005A = #$7F
; ~' m; C; v2 w% T' u05:B373:D0 28     BNE $B39D(如果5A=00,那么就会跳过28字节执行2A递减的指令), q. t3 L  A+ \! B8 J/ p% G
05:B375:A5 30     LDA $0030 = #$00
( ^2 t& w2 }) c3 S- z05:B377:0A        ASL
+ F" ]- C% E( a05:B378:0A        ASL1 F) t0 }( W$ ^9 \. |* u: e
05:B379:85 08     STA $0008 = #$29& D' n, N" I0 R7 N3 m% w# i
05:B37B:8A        TXA" P0 y" b. N0 G
05:B37C:0A        ASL6 m9 H! f2 h: z+ V% I. R
05:B37D:65 08     ADC $0008 = #$299 [' [- ~8 `3 `4 b  C
05:B37F:A8        TAY
4 ?0 ]% v8 K) l6 U1 Y9 G. @05:B380:B9 D2 B3  LDA $B3D2,Y @ $B3D7 = #$B4
" B* U: E) t6 W" J8 g05:B383:85 08     STA $0008 = #$292 }& ~- v# R; H9 }7 Y" \
05:B385:B9 D3 B3  LDA $B3D3,Y @ $B3D8 = #$FC' F: P7 Y$ S# w5 Z7 H, l% S& C) K
05:B388:85 09     STA $0009 = #$B2
4 `' r4 B1 I7 Y; B9 }05:B38A:B4 5E     LDY $5E,X @ $005E = #$02# L' @4 U, Z2 D& O
05:B38C:B1 08     LDA ($08),Y @ $B22E = #$10
9 L, Y6 g' A6 J" G& W05:B38E:C9 FF     CMP #$FF; h' s2 x) S5 s, e- A) d& q
05:B390:F0 3D     BEQ $B3CF
5 }/ _9 ]0 K  M" A: l! v) O05:B392:95 5C     STA $5C,X @ $005C = #$00- A" l( ~' `( U( q6 o+ o
05:B394:C8        INY$ M! u" e) B  Q- _+ D% \9 L% y
05:B395:B1 08     LDA ($08),Y @ $B22E = #$10
- x2 m; n( D; F0 D- t05:B397:95 5A     STA $5A,X @ $005A = #$7F
8 v5 @9 M! k9 Z" N05:B399:C8        INY9 I0 L- d7 n- C* x: }7 w) R
05:B39A:98        TYA0 f, J0 u# P0 E3 u. d  e7 n! C
05:B39B:95 5E     STA $5E,X @ $005E = #$028 Y6 x5 p6 f9 b- e! g) ^$ j3 ~
05:B39D:D6 5A     DEC $5A,X @ $005A = #$7F(5A递减)' @" U, T$ R$ A! ?3 }! H
05:B39F:B5 5C     LDA $5C,X @ $005C = #$00
! S% ]3 v# f- j  S' G% b) F05:B3A1:95 F5     STA $F5,X @ $00F5 = #$00- ^' d+ {1 M( i! ?: ^5 U
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
% Q1 o' W! h0 r, O$ {4 O  Z+ A- m7 K+ U- X! E5 B$ J/ G. ]
由于技术原因,本人以前只能改到打完三关,因为间址LDA ($08),Y得到的地址发生改变,那时本人无能力了.现在全部完成,用到其他方法们再次难以叙述了# f" o  W5 o$ M8 ?
可以下载玩一玩
  u# M& x+ t- b& P/ ]# i  d: dhttp://pan.baidu.com/s/1bnE0AwZ

签到天数: 1291 天

[LV.10]以坛为家III

发表于 2015-10-16 08:11:53 | 显示全部楼层
我以前曾经也想改这个,看看游戏是否能演示到通关。
4 Q% K# D; S, L* w首先考虑的是将游戏改成无敌版,演示时,到背景断层处,主角还是会掉下去死了。
9 y& r5 f$ Z& l# I7 i后来尝试其它修改,但是偶尔会造成花版或者死机。
. p7 f9 H4 t! n8 K深入研究,发现要以演示模式通关,需要做的事情还很多。
6 ?  B; c+ O8 L) |7 s% {因为太麻烦,也没太多时间弄这个,最后放弃。
[发帖际遇]: 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-6-26 14:12

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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