EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
0 w+ S; b$ t4 T1 d( o4 s& _0 L* J) \) [( }! b" L: l# ?4 J
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
$ \- z5 T, B# ]! i有什么错误及不足请多提出。
+ Y, F  c/ k, t3 q  P" t% i3 m! w' p% _$ c% i( S- s5 z6 ^, O8 t
需要工具:HexCmp[Ultra Edit]# z7 |, t  @! x/ |) u
PSX v1.13(Ps 调试器)
- [, Q0 \9 g( \0 r  VEmuCheat& P- y$ L9 t9 S( g- P
MIPS汇编指令。
/ V4 e& [0 {* `3 a& [4 w0 c6 i5 h9 k1 ~# k' a4 T. M
洛克人X5 EC:; A- q" y' e* w% i2 {2 f
人数:0d311d,2.4 }5 v$ z( K3 {1 }( _) ~

+ x0 w7 z4 ?0 G" A! g2 r+ H步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
# U& d2 t% M/ R: q% s- F
, p: t  L( e9 w* P* g$ t步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。1 T" U) |7 D1 r$ v* D
会出现调试器界面。( S" a% H' E# Y0 f5 \: E  R
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的) i7 r" b0 n7 k1 ]. z) Y
界面(Disassembly)。
7 d1 Y  R& t# n: R右击Breakpoints的空白地,出现了添加命令的方框,点Add。
6 I6 }# U3 t$ R4 n% q( c. c* U, }+ P% T5 Z+ w" ~

3 Q7 m" H  y1 B5 E" _8 E然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。' h5 |) f9 A, t7 F7 r
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
7 g" ~: r: @" g3 C2 }0 w3 ]+ a; V8 F6 g9 v: s5 e4 `
按F9,运行游戏。: h" f+ B7 F$ |$ L( x* ~" H$ R
死一条人后,来到了这里,看Disassembly。2 x7 I3 c1 U3 V) j
$ w: `& G2 F; I2 `2 r0 }
7 t# X' w0 ]' }/ ?# d' h
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
0 m; E8 o# C# t( f上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对9 E' ]: H0 a+ k& }! @( W6 \

  }) c2 ]2 [0 G9 H这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。5 @7 b5 s: V  G7 N, ?& g6 O

$ y$ B: ~  T" O$ G步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)1 E6 }4 \9 U; o8 Q( i! f

; o" S- w' b8 ^9 }" S+ v搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
) k# i3 v7 `0 L$ h
- I( _: E- i* u7 l3 {& h) ?  c到了这里,201afdcc.
1 p4 V9 y2 D7 J$ i3 v8 u
* Q0 h$ @' d  m, ~" N# \( q5 k0 E0 d6 D8 c8 ?' P
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
; c% _, I: O# u+ O3 `# i( N; `1 U达到了不减命的目的。
$ R' @& @3 l0 u- ^7 F4 ~1 I# t* i; N8 l0 ?- `  J" X
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。. @: B6 s: x$ P) E0 U

) \6 g9 G9 s+ ~) g% V) o3 K说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。6 E8 `1 \$ x  ^3 I( b" `. H
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
9 l  v+ W- c3 u8 ^. [3 ?
; y5 x5 k" N5 P2 U; T注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
/ X% f, {$ v( ?& j
' d& }8 ^1 _0 M8 m过去)。另PS游戏较大,改之前最好先做好备份。
6 {$ R2 U; o' I5 c1 j将改过的IPS补丁也放上来。:loveliness: 9 P- ]6 A2 A$ a1 j: w6 T: |. e4 c

+ R8 @9 R! }3 R" l/ o$ p1 m6 T[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
8 M$ W+ E) S$ d8 f0 B( b& j7 ~0 t/ Q! Y* D2 N0 x5 g
顺便解释下+ W% \( c) S) ?
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 & f* y( V. t# i7 u; t+ R7 v
00021cbc: nop
0 @3 v1 I2 L+ U: C# P00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算  {1 |- ?4 Y, `
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
6 K& x4 z3 ~5 k3 J* k" v
( B6 D8 i3 W4 Z. U  \' s9 ?1 z从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果& T# ]: c# m$ C7 F$ j6 S( f% ?+ d
# |9 j" [" b: v7 ^* M0 n" _6 J
以上是个人浅见,希望高手别见笑~~~
5 C( ^: j9 T  I
+ G  }; K0 k0 n; u' N  ?' F, z[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2181 天

[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 发表 - u& N8 o8 T5 f; t& O
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,8 o; m: o& z3 y* ~3 @

/ Q$ F3 m9 u; u* g5 ^) k! Z7 t有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,! K  C! X0 b5 X. P9 K# p( f
有什么 ...

2 f5 I& M) o& i/ y$ O: `; I! p多谢了,终于明白了,呵呵呵:loveliness:
3 M( S+ Z/ C- P- J$ F+ b1 {4 f( b
原帖由 shinwa 于 2009-5-1 14:09 发表 ! m. h! `3 }1 `! K' i1 g. i
呵呵 不错 支持下~~~~7 S) Z4 f8 a. b

! l1 k# w+ z& X- a& ?; b顺便解释下
$ h9 ]. ]6 F3 _5 M8 u* J00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
* ^% F" Q/ ?8 z5 I/ }; Z00021cbc: nop
, j9 L3 n8 K8 A) V9 J" E' ~00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
" B8 x. ^# o' ~: J
( Y2 y9 c" j& g6 ~5 X
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
; I( @' W( N& @0 D, k6 e2 q+ C/ {  t% u: e. b. Z; X! Y7 {
多谢了,终于明白了,呵呵呵:loveliness:
* e+ l. {& \7 j+ T2 {3 c& V# f: S  P: d6 \7 q7 M' {$ k

4 @9 t+ C. W* v  e5 V9 f
6 a  [* b1 J6 ~' b还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
$ T& s& A0 v/ z( g+ i3 P0 o/ w% w& F

' T  n2 B/ v/ w00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff : K  y  ^6 S4 U: M9 \
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的7 }9 A$ ^: M/ Q# ^
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-5 10:08 , Processed in 1.099609 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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