EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
. ~3 J; y  d8 s, E/ s" d. m
& V$ W" g) ^0 T9 U有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
& U: D6 g! V4 A0 ]: n有什么错误及不足请多提出。
- `9 p* P) Q# q+ N( y
% P7 |0 p% Q. H4 {% ]需要工具:HexCmp[Ultra Edit]
9 @2 |/ A* X1 r* s' t5 t+ D& Z% tPSX v1.13(Ps 调试器)' z& R& J4 t1 [0 t6 z) m- P* u
EmuCheat& m( V$ V1 w) [5 C
MIPS汇编指令。' w4 X7 E6 E# H" V6 V# f. Q
2 y0 ]' P/ U& n. t/ A4 h4 w. l) C  D
洛克人X5 EC:- K5 C' w8 ~- J9 W4 [* x
人数:0d311d,2.7 k$ ^3 J2 G0 ]; h; G9 F

' m1 |" |9 g! z' C步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
# W8 C4 z! O& O4 s% T! X* L( \& T
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。2 K5 m7 `) A) F! s
会出现调试器界面。
: b8 Z8 i; `; Q5 I+ ]  c- i- i其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的( q  `9 [; L  d' G- t/ H/ m7 X
界面(Disassembly)。/ E1 @5 H3 n" O) P, h
右击Breakpoints的空白地,出现了添加命令的方框,点Add。: [& r  h: u0 ], R- ]

) c; G3 ?: C. M
9 W: e, |3 R1 U% B然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。& p: A4 ?4 r! o7 {7 i! P
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。" \! [. P! a( t' l
; h0 D9 u1 c; s& ~
按F9,运行游戏。
: d3 @+ a; c7 o, ]  {1 L死一条人后,来到了这里,看Disassembly。
2 X2 {! T; i, m8 t8 w( r; _
1 k- V/ o) m8 v- X
3 S( P- G7 [/ }3 d  P% J. {5 s4 o* N步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600# j4 M2 c1 v" n$ T5 u7 Z, \& [' Y
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对3 U! z) h. k* k* f( g3 u
+ c% b. e) ^5 k
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。1 `) M$ g6 p0 h& \3 Y4 v) |. @

2 I8 W0 w% I/ \' W4 G5 d步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)! \. q9 r" X$ g7 G

& \# W+ s. O7 c搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)% P: q. J- T4 u; g; Q4 o5 e
$ _& {8 T* H* ^9 ^/ R1 `& Z
到了这里,201afdcc.& R9 p3 y7 o# M' g. W, w
( z. ~4 T! y* K5 L1 ~

6 w' g* }% }, G. I% z$ ]将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就: D, r- F+ G& J+ B' r) m
达到了不减命的目的。/ ~) @/ d2 g$ ~/ P* @, P

' H4 A+ }/ L' J# }+ S到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
, U4 R: U- i5 M3 B! A
, P* z1 U" V: H+ W; S* O说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
, Q  S+ a6 w. [0 C( r4 t0 ]另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
# D  }  `5 M0 N
4 T5 f2 S1 \6 D/ P& ~注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制. r- D0 X% ~$ M2 K& R2 v" I

2 J( }0 U) {9 z, t$ L2 a过去)。另PS游戏较大,改之前最好先做好备份。
# ], B. N& v9 s) B$ |* b- E; H5 J将改过的IPS补丁也放上来。:loveliness: / k: ?( @  L/ Y
! b; `) P8 ^  q: }5 h
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
( h( S! ~: x, J
+ Q; V% Y! C* |+ M+ A顺便解释下
: t- I) R& U% c1 c00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 % U2 D0 c/ W- r* J: J
00021cbc: nop 8 z% r/ a! Z" n/ ?9 [# g
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算0 S3 p$ `, {' Y/ E
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址0 E8 A# S9 D# H  [* ^+ c
) B. ?& q" T1 {
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
' u3 d3 R. T; }/ @! @. h0 [1 l  @9 J8 s  p8 @1 Q
以上是个人浅见,希望高手别见笑~~~. G/ E2 C! ]0 P6 M

; g' d2 e8 P/ a$ g' Z[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2071 天

[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 发表
  Z9 h& P, B; l8 E3 N应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,9 v+ e4 B, X2 F$ Q: @) }5 `  {# B$ H6 S

' _7 n* i+ s3 ^% l' T* K9 y1 f有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
) f# U: t! P6 g4 m: A5 d有什么 ...

( E0 R8 M4 W  r- T- Z  W/ p2 c多谢了,终于明白了,呵呵呵:loveliness:
, u+ x' w* J* J' R* W3 ]9 P5 B0 u" W* @6 g  E2 w. ]
原帖由 shinwa 于 2009-5-1 14:09 发表
3 b. p3 Z. [% K  I* [! F, L2 [呵呵 不错 支持下~~~~3 N7 y7 R- f% e
& \  O. s+ }: c3 M
顺便解释下* B5 H1 a0 i# A& Y* b- s0 @9 J
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 $ _' S7 S7 D$ \' m' K7 J
00021cbc: nop
' E  s% i( G5 @2 p00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

3 _, Z1 R+ b' x& k! S
, T( B6 F: @: h* d) s% O: t5 p还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
8 l$ O5 v$ K* J2 _) a) A1 v2 U1 M; R# l; O! B1 l( T/ h- z* O
多谢了,终于明白了,呵呵呵:loveliness:
$ R' H0 {& z& s; T( n/ t, `" r6 m0 c; s7 x5 ~4 e. |  q
( U: s+ l7 v' n- [

6 ^9 g6 e9 ?  L还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

& i4 X% @8 J5 y+ Y; _1 p& r5 V! H  T7 A- h/ V
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
4 v! {& z! {3 o+ k/ A6 O+ P# G! Y; p" W的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
7 ?" \! s) ?9 X6 oPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-15 01:22 , Processed in 1.091797 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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