设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2015-10-15 08:53:29 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2015-10-28 19:02 编辑 + E9 n0 ^0 \" ]4 w

$ X( O3 f, Y# ?9 i1 oFC自动演示修改教程
; a# x- `+ l4 x. e1 y作者:火焰烈旋风) J4 P  k8 w) c% G3 L! {  O" e
工具:FCEUX中文版(www.9553.cn搜FCEU即可)# w/ Z3 p0 y) U/ m3 H
1.找按键地址:
' j5 \0 q8 R9 N" _4 S. O    首先,我们打开FCEUX,再打开魂斗罗美版,进入游戏无动作,打开FCEUX的工具>作弊,若左下角的"活跃时暂停"没打勾请点击打勾,游戏暂停了,点击中上部的"重设",在已知值输入后输入框中00,点击按钮"已知值",此时搜到大量数据为00的地址.单击FCEU窗口,游戏正常运行,按住一个按键不放如上键,点击作弊窗口的">",游戏暂停了,此时剩下几个地址,再单击FCEU窗口,按住两个按键如上+选择键不放,点击作弊窗口的">",游戏暂停了,只剩下几个地址了,再单击FCEU窗口,不要按任何按键键,点击作弊窗口的"已知值:00"最后剩下两个地址F1,F2,点中其中一个,再点左下角的"添加",发现按什么按键人物都不能动,说明这两个地址就是按键地址,双击左上部的锁定地址,前面的"*"号消失就解除了锁定,并且通过调试知道上=08,下=04,左01,右=02,A=80,B=40,选择=20,开始=10.7 ^- g' N1 }9 e9 l5 g# S3 {" r! l& e
2.找演示时按键的数据来源:
9 b$ L/ }: a% g$ f; P1 V    既然知道了按键的地址,那么就要看演示时是什么改变了这些值.点击FCEUX的>游戏>重设,等进入自动演示时,我们打开打开FCEUX的调试>调试器,在右上部分点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入F1(我们找到的按键),将输入框下面的"写"打上勾,CPU也打勾,点"确定".此时调试窗口出现如下指令:
% Z# D. `" G" l& b7 r4 G07:C38F:94 F1     STY $F1,X @ $00F1 = #$01
8 X) c' d8 y2 N& c  P9 _- X0 E; P07:C391:94 F9     STY $F9,X @ $00F9 = #$006 b% `! @1 S" _4 c
07:C393:CA        DEX
/ W8 m8 }9 i0 f07:C394:10 F0     BPL $C386+ R5 g" C8 Y: v5 a6 L
07:C396:60        RTS
9 @1 D8 X' O! N* U我们点击"运行"左边的上拉按钮上拉,看到如下指令:2 ^' _  n2 e( z0 ]% a
07:C378:A5 1D     LDA $001D = #$074 d" t) L3 a% ~" e6 N/ e0 E
07:C37A:29 04     AND #$04
6 X+ m( l8 s* D, ?; W& \( S07:C37C:D0 06     BNE $C384
) u! v) y& ]$ G9 L" ]0 v5 `' _07:C37E:A5 04     LDA $0004 = #$001 L: w. f, ?; o% X% \$ l5 ^
07:C380:05 05     ORA $0005 = #$00
2 ^7 q) T2 k: p  o1 w9 v3 W07:C382:85 04     STA $0004 = #$002 m+ o9 V: K, p0 O
07:C384:A2 01     LDX #$01
) L0 o6 p7 @# f/ Z" [  a07:C386:B5 04     LDA $04,X @ $0004 = #$003 X. q3 _$ [$ G. @4 y! E
07:C388:A8        TAY
. |# p: \$ _+ ^6 Z) O4 p07:C389:55 F9     EOR $F9,X @ $00F9 = #$00$ i4 C) L* P+ g1 i% e- t: @
07:C38B:35 04     AND $04,X @ $0004 = #$000 f1 A5 ^) x: ], \
07:C38D:95 F5     STA $F5,X @ $00F5 = #$00/ o. d) e" m. W$ O+ H$ C6 q
07:C38F:94 F1     STY $F1,X @ $00F1 = #$01
* b& d& Q3 O$ O2 b- y; d07:C391:94 F9     STY $F9,X @ $00F9 = #$00
4 X+ m9 C* e" Y! h$ Z2 K0 w* W6 l07:C393:CA        DEX8 p. h$ x0 u. ]  L$ \  D' T% I
07:C394:10 F0     BPL $C386- A# g, M$ b+ N$ N9 O: T. w4 ^; i
07:C396:60        RTS  M9 h2 |/ H! A( H7 i
由于演示的数据存放在某处,然而这里并没有读取某处的值送F1的指令,所以很可能不是我们要找的指令,点击"断点"窗口旁边的"运行",窗口中出现如下数据:2 @$ J$ y7 \( i* s
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
6 o* V7 T) p. P/ a3 O05:B3A5:A5 2E     LDA $002E = #$C8
2 ~: [( s+ D3 Q) j05:B3A7:C9 50     CMP #$50
: g. v) P: r6 I. P5 i' ]6 R05:B3A9:90 20     BCC $B3CB; N; l" g2 r/ n9 K
05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00
* _, M& P% J! t# L* F1 }8 Y6 }05:B3AD:29 0F     AND #$0F
* U2 y# G. B3 G2 G6 V0 v05:B3AF:C9 01     CMP #$01
' n- r- M2 u" u( Y' D9 F7 n1 N$ F05:B3B1:F0 04     BEQ $B3B70 `. U. h5 c! N; u! O: J
05:B3B3:C9 04     CMP #$04
8 ?, p* {' I1 S( b" B.........7 U+ d8 S; a7 _8 |* U% ]
我们点击"运行"左边的上拉按钮上拉,看到如下指令:
5 b' U5 H4 E2 V5 ~) e5 e9 k/ r1 O05:B39F:B5 5C     LDA $5C,X @ $005C = #$01, P* {6 ]1 a' M
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$01( N4 p& k. M# u) u3 H+ K! [
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00# g+ k1 N: C- ^) W
05:B3A5:A5 2E     LDA $002E = #$C8
6 j$ _- B2 y* I+ }4 n5 B05:B3A7:C9 50     CMP #$50; l# H1 C$ ?" _+ ]. @# P/ ]
05:B3A9:90 20     BCC $B3CB
% f7 l/ q4 R- Y2 b05:B3AB:B5 AA     LDA $AA,X @ $00AA = #$00
0 L1 k3 |" @& S1 c05:B3AD:29 0F     AND #$0F
" v! o: s$ t* X" s' A- U8 I, J* h看到
! ^  X% K( A5 d3 d, q2 ^# d05:B39F:B5 5C     LDA $5C,X @ $005C = #$01- `  Y$ X' f/ T+ E3 k5 ~( }# g
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$011 \8 i8 I. T. a
05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00
5 t; X8 n& h% b没有?这个说明F1的数据是从地址5C送出得到的,说明我们要找到存储演示按键数据必须从地址5C入手.
8 d) U* m4 l& [) y( B& C    接下来调试器,双击取消F1断点,点击"断点"下的"添加",此时弹出"添加断点"窗口,我们在"地址"第一个输入框输入5C,同样"写"打上勾,点"确定",一会出现如下指令:0 k, m! I8 i$ z! e
05:B392:95 5C     STA $5C,X @ $005C = #$016 E- n% S6 O3 Q% P7 s
05:B394:C8        INY. P. x% n) o, x! D& n% D7 {4 E
05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09
/ J% g' f1 |2 s- ^- F05:B397:95 5A     STA $5A,X @ $005A = #$00! I8 U- l( u5 G$ b7 R# p
05:B399:C8        INY6 h# ^2 C" D0 `4 x6 ~8 B
05:B39A:98        TYA$ t& [0 U; x/ h( h4 V) J  s3 k& V
然后我们再上拉,得到如下指令:
& u9 U8 G. A. i! W0 q" }2 P05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$09
/ l; Q" o2 S  L4 Q05:B38E:C9 FF     CMP #$FF
/ j+ u* ~! U8 P7 X6 D  }. t05:B390:F0 3D     BEQ $B3CF
" B  G/ n2 N3 a05:B392:95 5C     STA $5C,X @ $005C = #$01
! B3 w/ g7 V6 O9 D05:B394:C8        INY) ^2 k- S$ v6 V* R  x7 [3 Q
05:B395:B1 08     LDA ($08),Y @ $B3F2 = #$09* M* r# z5 S( e8 A+ G  F4 i& V
05:B397:95 5A     STA $5A,X @ $005A = #$00
. t( z; p/ z8 n& U- d05:B399:C8        INY+ i% z% W) j! h3 ]  O3 O
05:B39A:98        TYA$ T, l3 O- X  \& U
看到05:B38C:B1 08     LDA ($08),Y @ $B3F2 = #$090 p8 d" n. _5 J0 y5 F8 Y
没有?说明现在5C的值来源于变址得到的$B3F2,哈哈,演示按键的数据找到了,在游戏CPU的$B3F2附近.
; @1 l; ^& Y- L3 W. v3.修改演示:
* D. C- l* n9 ]$ K    打开FCEUX的调试>十六进制编辑器,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3F2,此时黑色光标标记的地方就是CPU的$B3F2,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了.+ }% H% @5 o) `! T
    我们要修改,必须从开始演示的第一个演示按键开始,接下来去找到它:5 ]# T; {; L5 r
打开FCEUX的游戏>重设,此时游戏暂停无状态,点击调试器的"运行",出现黑屏,再点击两次"运行"游戏运行了,过一会又暂停,再点击两次"运行"游戏运行了,出现背景画面时暂停了,调试器窗口中出现了如下数据:7 e! T. _# d1 N; X, h9 H, Q: \; g
05:B392:95 5C     STA $5C,X @ $005C = #$00
5 J5 b% `# a& I' Q/ t3 B" I05:B394:C8        INY
( h  z7 O! w# v5 L/ _& {7 K05:B395:B1 08     LDA ($08),Y @ $B3DE = #$00, y, U8 c6 H0 S/ l" @+ A6 c- Z# c
05:B397:95 5A     STA $5A,X @ $005A = #$00
  \+ _' ]& s6 F0 j& A05:B399:C8        INY
  g; N" j3 d8 _& D4 _05:B39A:98        TYA* Y9 h4 d) N& \8 v/ ]' ~
我们上拉看到了:
+ E$ a  T' H* D; \" }05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00$ R# T# L8 S/ d
05:B38E:C9 FF     CMP #$FF: Q$ u: y9 A+ t8 F
05:B390:F0 3D     BEQ $B3CF0 K# ~" H% Q/ B# x+ Y+ s
05:B392:95 5C     STA $5C,X @ $005C = #$00
  Y" L: g5 @0 _! `( t" s/ p. D6 h05:B394:C8        INY
4 _8 d% G" @$ a5 G# m05:B395:B1 08     LDA ($08),Y @ $B3DE = #$000 g/ @6 V2 {" u- s
05:B397:95 5A     STA $5A,X @ $005A = #$002 t- h- i# `6 M, B: R
05:B399:C8        INY
9 V- E# k; M! w& G. @0 a1 Y05:B39A:98        TYA9 W2 S# k; B- E4 [6 d2 e! `2 x
看到
# @3 r+ N; b1 w- z+ [0 O, l4 p05:B38C:B1 08     LDA ($08),Y @ $B3DE = #$00
6 [8 _' V3 }& E$ V没有?它应该是第一个演示按键,接下来进入十六进制编辑器,点击查看>NES内存,此时切换到NES的CPU内存,按Ctrl+A或点击十六进制编辑器>转到地址,输入B3DE,此时黑色光标标记的地方就是CPU的$B3DE,右击黑色光标>转至ROM文件中对应位置,此时已转至ROM文件中对应位置了,这里就是演示按键的开始地址.% I+ R( M4 ]' l9 P2 }% l* o
说明:演示按键地址的结构,以开始的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(时间).......以此类推,判断根据:: [  ~& ^3 A6 J6 X
05:B371:B5 5A     LDA $5A,X @ $005A = #$7F
8 q0 T9 C1 d0 r& m' h0 |4 ?05:B373:D0 28     BNE $B39D(如果5A=00,那么就会跳过28字节执行2A递减的指令)
  O2 p& R) y( Q% q. V05:B375:A5 30     LDA $0030 = #$003 a$ x& \9 n7 `3 V' X* e' P
05:B377:0A        ASL
8 J, A8 w" w, ]: x7 [# l/ b05:B378:0A        ASL
7 E) g: i4 a- P( V9 l8 x1 ^05:B379:85 08     STA $0008 = #$29% M- m" N( d) d1 `2 K- w% H
05:B37B:8A        TXA7 T% i" ?+ e# z6 @/ [! d  g9 K
05:B37C:0A        ASL% b# V* g* K2 s8 D$ P
05:B37D:65 08     ADC $0008 = #$29
  I4 U6 C5 E  E/ g05:B37F:A8        TAY
2 g5 M7 R' l5 H6 M  {! K8 p  h05:B380:B9 D2 B3  LDA $B3D2,Y @ $B3D7 = #$B4
* a& W' y* z- G05:B383:85 08     STA $0008 = #$290 ]8 |+ L6 J/ z
05:B385:B9 D3 B3  LDA $B3D3,Y @ $B3D8 = #$FC
" W/ o& @6 r+ d6 U% |8 i! ^05:B388:85 09     STA $0009 = #$B2' Y' w/ p/ w( y- f9 ^% r
05:B38A:B4 5E     LDY $5E,X @ $005E = #$02( }) F8 k! ]; D$ m5 x9 X; l& |1 ]
05:B38C:B1 08     LDA ($08),Y @ $B22E = #$108 C+ Z0 q& j# a, Q2 x
05:B38E:C9 FF     CMP #$FF3 ~8 t  H9 _/ e2 c  y5 B, S( a
05:B390:F0 3D     BEQ $B3CF
6 {6 V( Q! F- R3 K1 Z- f4 z05:B392:95 5C     STA $5C,X @ $005C = #$00+ r  w, G4 H$ n6 v3 B. |- q$ {' ^
05:B394:C8        INY
; r9 R( s( Q5 U; t! e05:B395:B1 08     LDA ($08),Y @ $B22E = #$10/ ?. z5 J% E; e5 _: b* f/ O8 @) s
05:B397:95 5A     STA $5A,X @ $005A = #$7F' y6 `3 K5 U* @, U5 M
05:B399:C8        INY. N" H5 m; i1 O7 r
05:B39A:98        TYA
& v& V! g' o: W4 ]6 P1 k05:B39B:95 5E     STA $5E,X @ $005E = #$02
6 J. F  @9 |, O  K+ |, Q05:B39D:D6 5A     DEC $5A,X @ $005A = #$7F(5A递减)
7 \- q' |/ c2 o4 |# n6 f- _. R05:B39F:B5 5C     LDA $5C,X @ $005C = #$000 M- ~9 b8 I+ a% v
05:B3A1:95 F5     STA $F5,X @ $00F5 = #$00
. e2 x7 Y7 n: L- B/ T05:B3A3:95 F1     STA $F1,X @ $00F1 = #$00  p, x8 p! y- Q% e

) ]4 j4 h2 m% p& T! D. E3 C4 q由于技术原因,本人以前只能改到打完三关,因为间址LDA ($08),Y得到的地址发生改变,那时本人无能力了.现在全部完成,用到其他方法们再次难以叙述了
9 u0 K7 e1 f- r) G  G0 Z4 a可以下载玩一玩& Y2 H/ L+ E' v! I0 l5 ]
http://pan.baidu.com/s/1bnE0AwZ

签到天数: 1291 天

[LV.10]以坛为家III

发表于 2015-10-16 08:11:53 | 显示全部楼层
我以前曾经也想改这个,看看游戏是否能演示到通关。
* m+ R3 [& M2 l6 E# X* |首先考虑的是将游戏改成无敌版,演示时,到背景断层处,主角还是会掉下去死了。0 U9 o4 ~- _! B" d+ K2 u2 I
后来尝试其它修改,但是偶尔会造成花版或者死机。
1 ]: `: q' \7 M: M% p* }- T深入研究,发现要以演示模式通关,需要做的事情还很多。0 c% z" z# n  _
因为太麻烦,也没太多时间弄这个,最后放弃。
[发帖际遇]: 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-6 07:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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