EMU618社区

 找回密码
 立即注册
搜索
查看: 2372|回复: 8

[研究] PS洛克X5不减命修改实例

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,4 L- S8 ?/ V# t) ~& g; X
) K' j  L, q, m# y+ ]' ~' N
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
) [5 |6 k+ F: O0 r有什么错误及不足请多提出。5 C8 w$ U  w( |& z+ \& R

7 V5 ]# O! X  Y& V" U需要工具:HexCmp[Ultra Edit]( J/ m9 J6 c1 C8 I2 b
PSX v1.13(Ps 调试器)' z9 y3 w; D) m% J% H
EmuCheat
! J$ q9 ?( y" u, n  S1 ]) ]MIPS汇编指令。9 e# I1 o# P' m- J. y# c$ ^0 _; s

4 a: A2 z- w4 f2 \) C; k1 W, |洛克人X5 EC:/ W3 L$ i3 f) ?! b( X/ }9 N: L  O) R
人数:0d311d,2.1 c5 ?) E6 ]  U/ F" q* O: N

1 c, V% o/ c/ s+ ^# }步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。& P+ x2 i5 z7 w" ]( l

$ ~7 U7 h5 C0 i步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。( f# N" F" w7 @8 t( ]& ~! r7 |; y
会出现调试器界面。
$ T% D$ j1 r+ N0 d- c+ S2 y其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
8 R' n! A8 k. |8 a% [6 S/ a% w/ L界面(Disassembly)。
0 t+ P3 F) q$ L* ~, X( `右击Breakpoints的空白地,出现了添加命令的方框,点Add。" ~4 B' h! N+ \) L
/ j$ o( f! ]2 g# K0 }' L7 ]7 t

& ~- ^& V. T" ?7 S2 l7 u8 x9 e然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。5 l( ?0 \6 M2 ~2 G( X( _. c. S
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
; @, n) B; Q- L( T5 L0 i
! [( T$ n  k% m% X按F9,运行游戏。* v* v" R+ r# a1 J1 `! w
死一条人后,来到了这里,看Disassembly。
7 I+ E/ M( K: q. M3 H0 H
; M! O- u8 A. l8 r( @) j, h- g/ d# o# X- v. M1 n
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600& Z& x( t  \0 J( y3 P, e
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
4 ~3 C3 J& D0 d6 Q9 M2 k$ I+ |& w' K1 Y9 S4 R
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。- p9 a( i8 f. Q6 G9 b

, t" \" K! X3 c& |步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)) y% W7 K: S' y  n" B; h, Z5 o
( b+ g  T1 K. P# Q
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
6 h# e% @: Y  M
% @5 U, E( v+ L: Z, i到了这里,201afdcc.
0 c' o8 i, C/ X0 S- y0 H; t7 j% R, M, r! o

" J6 h( W. ?  O将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就0 [+ X( k- h. P: S) q! u) g, t
达到了不减命的目的。
: d8 \* J9 G) v4 z7 v% N0 Q9 o# k9 |1 \9 n* @2 I
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
& @0 t+ v! o) ^2 u8 m4 U! a0 K3 [& F+ ~
( m; A9 F; q% |. k* w, [9 ]: P说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
: k8 P$ T, ?1 b4 `另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
0 c% y* A: Y9 X6 ?* b
9 M- }1 T( t$ n! `$ g注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制0 E7 |- ?* V/ m6 s; K: A

/ Y' S8 R) y4 g& O2 [过去)。另PS游戏较大,改之前最好先做好备份。6 ~" ~6 v# t/ E( r) c! l
将改过的IPS补丁也放上来。:loveliness:
9 ?6 @) f; T1 _! q+ v% K
/ P1 s" T4 _+ @8 B: X[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~% f6 l0 i! l+ l, h) x7 ?9 |

8 e" Q; I' o) ~/ I2 l2 J% I2 D顺便解释下0 e9 p& ~5 g4 x* N8 C
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" C/ c$ R9 y" x& x5 z  _0 x00021cbc: nop : W8 L0 X& E  e: l' `+ |' k
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
# C, R! Y' p$ H0 f6 ]8 o6 z00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址7 H$ g, ?6 ]4 |7 n, _

9 a) v1 c0 Y& ~; U- _, r8 V9 M从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果1 r" U/ X) ^; _0 W$ a8 G/ C
. k: H9 R8 c- c7 y9 l5 ]7 d
以上是个人浅见,希望高手别见笑~~~' B3 j/ ?5 e: e2 c

4 h. m& h7 r  @8 n0 c  D[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1973 天

[LV.Master]伴坛终老

发表于 2009-5-1 14:26:34 | 显示全部楼层
支持一下HeavenTrain。:loveliness:

签到天数: 389 天

[LV.9]以坛为家II

发表于 2009-5-1 17:54:48 | 显示全部楼层
好东西,有空学习学习:loveliness:

签到天数: 343 天

[LV.8]以坛为家I

发表于 2009-5-1 20:25:05 | 显示全部楼层
这个是好教材呀,谢谢。

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2009-5-1 20:30:05 | 显示全部楼层
原帖由 HeavenTrain 于 2009-5-1 13:51 发表 ) w$ a) h. M1 q
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,9 h  z: n: ?) \, b9 X

8 f6 d9 R* B6 ?& m! T. N; S' H有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,8 o# e0 c: ^  v0 @) K5 O4 K+ j
有什么 ...

$ K. y" l, O" ]; P. {多谢了,终于明白了,呵呵呵:loveliness:
2 t+ q( m; z7 P" p# P0 s* @& ^5 s/ \- Z
原帖由 shinwa 于 2009-5-1 14:09 发表 3 O& c2 ~7 k5 n# s. X! P5 |
呵呵 不错 支持下~~~~3 ~- x  i7 g' C7 K6 \$ }9 i

5 @9 I2 P$ B- c$ f5 u顺便解释下
, r: ?, m! y) v00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
# i; X0 f6 b' b6 \7 ^00021cbc: nop
/ p# m$ D& @" E; D9 S2 a00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

+ h2 x: \* o& W1 ]! `+ z& y
% v  i! N2 [6 b" u/ U; f. g还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
: P$ D0 x9 l- x4 C# {
2 e: M2 x" n# a) X& K; n. ]" R多谢了,终于明白了,呵呵呵:loveliness:
: g2 X2 \' P- p- v' \. s
: Y) D1 j0 \9 x2 ?2 i( |9 d  i' F) [

3 B9 L8 w9 T& n* W' K还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
% a8 z% ?$ f, ?+ }+ h, V
" x0 R- `$ y$ x  }8 V+ m# ]
00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff . _9 }7 g' C7 Q1 h( T
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
/ R& C2 U' J9 \- K5 v3 b% [$ [0 TPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 05:18 , Processed in 1.080078 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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