EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
) Q- g# {2 G8 t- [7 E, u  \5 d, P8 V2 W% X. y
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
4 ~2 S) }( S; V2 c有什么错误及不足请多提出。
6 B, r& O% C1 c* k+ \, k# l& ^* @: S; f- O* |' m
需要工具:HexCmp[Ultra Edit]
- k! Y& c) g# P# h3 u0 q- S" mPSX v1.13(Ps 调试器)* D* s' }, [5 E
EmuCheat
4 D5 E7 s& W" Y! R9 _, NMIPS汇编指令。5 q" g. R* t- Q& F) r8 {4 P

! L6 d4 S" y2 l+ R; a* r, L4 Y2 n洛克人X5 EC:" B2 _5 i) Y6 I$ W
人数:0d311d,2.9 z1 u  ^. T- z6 ^+ C

9 a' p: V% r+ D2 V步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。: d* D, E/ c" r3 Y% L4 k

: u& d4 S: Q7 z$ o) x2 E步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
: A6 _3 d" [" B+ E+ L& \会出现调试器界面。
' n' s$ J2 q/ w; G2 q其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的  e; h7 E% G! O, o6 h
界面(Disassembly)。
8 O3 u; B5 i0 F. G右击Breakpoints的空白地,出现了添加命令的方框,点Add。
6 r( O  q! U! Q3 m: i
  m7 o5 z& M3 h3 j  @, K3 y& ?$ s+ \! y
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。5 C  J& w: ~; w( Q  f
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。2 H5 x4 w; p1 o# ?9 @- J$ }8 z

8 ?  G. H8 P3 w, }按F9,运行游戏。: P) \5 p6 V/ o& t. S$ s9 g
死一条人后,来到了这里,看Disassembly。; t9 h' U0 |% R
0 P' G3 E- @0 T5 K% W  h- u& ]

) x+ G! G! v; U+ c# z& M步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
2 M) [: k5 v/ E) e+ S+ b上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对) I. W9 m2 A3 |3 q- S/ V0 ^* w3 F/ P& x
$ q1 n3 w' J1 c0 S: K
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。; @3 S8 I: \( B7 r. h! B! t* R
- p1 C: K- O7 T) e5 K7 o! ~$ l
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
: D6 J3 ?; p+ H; t1 ?8 p7 p
, ?$ y3 [, P( A: T1 @7 L# ^" v搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)0 @8 C  J  [! e2 X8 A$ Q& x6 o. `4 Y
7 u# e6 J" ]8 m8 Q5 K
到了这里,201afdcc.  R' q9 n8 b4 c! r& W1 T5 `
7 s: h* ^: W1 Z2 n
6 _2 e% W2 |7 u2 B/ t
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就- G3 z. a8 d% N+ k$ [. N. I
达到了不减命的目的。) N  r. n9 [9 z

& ?. O9 j# ]; j, w$ [到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
: R* ^9 q: q/ ?6 i1 j  u( c1 ]5 y' `4 A( N1 y
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
9 a/ w- S  C: F% \另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。" N( R6 T( g$ D/ |+ r
: Z$ \( Q0 h8 D5 s1 p9 D
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制2 k' u) _& f8 t; b$ U4 o7 w4 h9 }
# u) D. @; q. D. O2 ?
过去)。另PS游戏较大,改之前最好先做好备份。- M  @" ?; j' i7 b" m) G) h7 A; J
将改过的IPS补丁也放上来。:loveliness: ; C/ `, e# Q4 u5 I' j% Z) s9 P' P5 d

3 Y7 q3 v. x! _/ e' I4 D6 `[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
. k& _" R9 r& |- j3 z4 z/ c8 I+ r; _& ?' o  c' @
顺便解释下
5 @$ ^% b( N3 Y- h% f00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 % p" ^3 d& A; c  j+ r- f
00021cbc: nop
; q6 {, @; u" z00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算9 ~& L$ i  x. d) r
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址; z' y0 r1 [5 l, r0 g

% k2 Q1 E+ Z/ M  O5 c从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果1 t9 H" s, l- n
" g9 M; B- z6 O' b
以上是个人浅见,希望高手别见笑~~~
5 v( }$ y8 i! C$ j) v* ~5 C( E6 h1 f9 M! C2 I/ M
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2135 天

[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 发表 2 B1 N# F6 j: f4 F( f: Z3 G; q
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,* p4 x7 e- S8 v" W) N
5 i2 u5 T2 \9 h
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
2 ~: ~( f+ m8 _有什么 ...

- R$ j/ f, q; f' G2 V' m多谢了,终于明白了,呵呵呵:loveliness:
5 R8 B6 u" r/ \4 _$ m
* c2 E7 ^& F$ |& W3 ~1 k
原帖由 shinwa 于 2009-5-1 14:09 发表
4 x/ W; W* D2 L1 c8 R! l呵呵 不错 支持下~~~~
: X/ a2 I& [2 G/ }& ~% Q* J, `# w  Y/ [; e; j8 a! e& b
顺便解释下
3 t4 j3 f/ L8 J  `+ N0 ?00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
' T1 p- q$ d7 s. z# N7 T00021cbc: nop ' L$ x) x% r/ ^6 z, I( @- @
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

8 d  r3 [+ ~& O$ [; E9 |% U% i5 k& w7 R
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
0 u& a4 ?3 `5 {* D2 {: v
0 d5 [+ {% v; n% N多谢了,终于明白了,呵呵呵:loveliness: 9 g2 h0 `7 o4 Y, }" R

2 F& Z% y4 U8 d9 i+ _2 z
2 `$ e! j1 G% ]1 p' E( G! I, E! g) W
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
9 C  z8 b2 ?* H
3 L3 F- M* N( v- S/ E( q+ K
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
3 c& ^# A$ Y! Q! q" J" P的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的; S3 f  s# }- q: {+ {9 t
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-18 06:28 , Processed in 1.068359 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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