EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
7 l7 D9 G' S+ P1 g9 N. r: A2 q: i+ _& _7 v. t" B$ m
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
' g7 G7 e# M  U) _/ M% u有什么错误及不足请多提出。1 W' }, h3 x, o) v

2 ?7 O; _; P7 n; a& Q4 I/ F: S- Q需要工具:HexCmp[Ultra Edit]  [* l3 Z- Y: \) @) o
PSX v1.13(Ps 调试器)
/ w! X+ C% K  W+ u7 v; y3 n( ?EmuCheat
3 K+ @4 l5 L! Z  ?0 C& t3 NMIPS汇编指令。3 ]: K0 {* D2 O' z" U& d! w3 `/ A

0 z' n; [# x* B洛克人X5 EC:
1 O6 f8 z- d3 V4 s& u) ?* M& g. Y6 P人数:0d311d,2.& D# L2 f2 I, Z! e+ M
! l  N+ q" m; @* k# {* d0 s
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。3 t5 o) ]7 M% R! `% V7 A

4 W# ?9 ?- y% ~/ L; x步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。, e) X/ J8 S) \
会出现调试器界面。
) m* f' R' \( K# x+ E  a其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
, A9 @( k. A- T) U界面(Disassembly)。6 f5 g8 \! q; J4 f  V! j
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
( N' l+ ~* U2 ]. P5 L. h1 ^6 U% y& L) t! E8 q7 Q

# n+ G( v/ O, b6 Y然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
0 p) h. V0 p8 u8 q然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
. t3 B6 @+ a, j
( A3 w: O* k$ t$ d# C  n: D% C按F9,运行游戏。
0 |, j4 ~5 F+ m( _' t死一条人后,来到了这里,看Disassembly。# K/ I8 J, L# ~+ @1 [3 k+ |/ n

% Q, s, S2 ~* [& C4 s/ u( r+ S/ y  b, p
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
! e$ M% h* E3 _. q% t/ m上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对6 u3 L& ~- J4 s+ g: |1 C* x7 T
! }7 H, @0 j. \/ j8 I, L
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。: ?0 T. m: N- Q3 H/ C" R9 }* P% R

% H1 ?1 }5 j$ f+ ^; u& z步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
- n$ S3 |1 {( Q/ ]# a; q6 j
5 Z1 ^. b7 _  }) t8 Q9 W搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)9 D6 F5 x' U: q+ J+ p
, Q  _/ Q# x2 u  l' C3 T
到了这里,201afdcc.
$ S) k) M' A' Z6 M' M# }
2 d9 s) u( `. {% `2 `& X8 }7 k
5 r* \2 k- N. ~7 F, f# N/ B将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
6 _' {# p/ \6 A) F达到了不减命的目的。5 H0 e1 J0 D. P! r

* Q! Y! K% g" {到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。6 J' e% z$ z; \0 j! d. r
& b, y8 p: ?" }9 P) J  ]& t$ [
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。7 y3 H" j* y  S. Y* `, |
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
3 I: ~8 ]- p" c0 m8 U- }0 L. q3 L% q: L& |% g* z% t
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制0 e3 b+ P+ Z- q) P* p: b4 J

) S& l" G  E% B& V: R8 \* B( C2 ]过去)。另PS游戏较大,改之前最好先做好备份。
& ]( U7 d  \9 ^& M将改过的IPS补丁也放上来。:loveliness: 7 p) S1 s- F% i2 i( c, x5 a
0 i% X8 l, Z2 ]7 j! Y
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
1 A1 L/ K9 E1 ~2 V
, ?8 H0 H9 r+ H顺便解释下
$ k! z. z( D# k1 o& p$ \+ @2 x1 F00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 6 ^, m: ]' l0 Y! l
00021cbc: nop
+ P" A! Z) ~7 d& s: c5 Q" G! k2 j00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
7 k; B; W" O( W! |00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
; r; @, c; Q$ u& F7 @/ h* R: H, {% k& A8 D$ a# f  H; I3 @. ^+ a% l
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
: h: N  {% e! @8 J+ f* e
! l  F* q' L% t- k& @- ^2 x2 C5 |# D以上是个人浅见,希望高手别见笑~~~
/ i" g/ T' t% G1 s& v" L- {' |* v4 _! A2 d/ G! R) ]
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2091 天

[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 发表 4 z' P) t0 x# O4 H1 i
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,0 m7 i' s0 W2 c6 a0 z) w8 ]

" L) q- ~$ a! S* k7 H) h有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,: U; `2 ]8 ]8 A, e7 ?8 x
有什么 ...
. F0 ~, D) l8 E2 n$ G  J  A  s
多谢了,终于明白了,呵呵呵:loveliness: 7 }; O% I' ]% g. H( w0 J

( ~" c$ \( C) h0 m
原帖由 shinwa 于 2009-5-1 14:09 发表 + {2 X( |4 j3 {( H
呵呵 不错 支持下~~~~
4 R% t# K, X+ L/ r  y
/ x9 n& d0 o/ B  Q7 p顺便解释下
* D' L; j; V* ?- h00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 7 K0 @! D, s  L' ^. G
00021cbc: nop
; s, |5 N7 W& b5 l& Y00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

5 g  q1 H' y1 w% W2 L- {5 S3 t% N1 _2 e) V
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 * V7 @1 [/ s+ O' Z, y& a/ X
, X& v% d8 n# Z/ ?# p6 _1 ?
多谢了,终于明白了,呵呵呵:loveliness: 4 s5 V0 z# F1 t6 H
& Q8 ^: W) k( E) H: D
" z# {! Y! W2 m# B$ P# [, [/ \8 c
3 b, U+ y5 W/ [  D9 Y1 }9 j+ E
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
. t9 H& \+ N- ?7 u2 S

# s: v7 \' f( w! [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 1 N, q+ S; U0 v1 I- o* p
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的& _- c7 y+ ~! E3 n: R& ~
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-5 09:52 , Processed in 1.066406 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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