EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,* d5 ]- T. @% m
. {% n1 K* S* z, S- m/ i
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
# U5 a( q) ]" L3 _' \有什么错误及不足请多提出。0 K: T+ P! J; I6 c& R

3 @5 k0 P  v7 b/ B6 r, B% a需要工具:HexCmp[Ultra Edit]& d/ b' C! M, \, ~1 ~6 G. p
PSX v1.13(Ps 调试器): B8 ?* s) q+ _, N# y" z
EmuCheat
, r: N2 i, s) O& \2 VMIPS汇编指令。& b) T$ w7 N; Q+ l3 u5 Q1 j& a
5 Z) o5 e5 W! o/ p3 J2 q
洛克人X5 EC:& P- q. a: B1 H5 ^, j
人数:0d311d,2.
7 T8 H9 D( n; a( D& Q. V
: }& N1 F. j# R+ k' v! U4 q$ I4 P步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
1 J2 R( i  h1 a: P/ v1 ]" u# c0 e4 k: U( q- G7 H
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。0 }& X; K' s0 i5 A
会出现调试器界面。- ]/ a% x3 |3 C5 Z" F( l
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的, q* b" U2 y$ R% R
界面(Disassembly)。
; @+ z; y  Q2 B# h# T+ Z右击Breakpoints的空白地,出现了添加命令的方框,点Add。
  X( y; ?2 @2 E1 L( i5 A3 _7 w2 x4 W7 T" @
, t2 L2 ^, s' |: z/ R8 z) ^: k5 K
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
; V  s. J  S* S% j, W# A+ _8 p  ^然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
+ C& P+ r- H" z/ y1 s5 \. [' T' ^- I! j3 M# y* c
按F9,运行游戏。4 e9 C2 X/ b; O4 x
死一条人后,来到了这里,看Disassembly。
* U2 S2 \* i; Q, A; |8 a! Z5 Y  @. E/ @

3 G: P1 z6 w( @( t0 m步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600) S6 H$ Q1 p3 U- K' `. M! d
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对, B9 p$ w' {$ J! j0 O8 a8 Y' U; w

4 Q2 z9 w3 @( k. C这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。) }+ n( [( r! n5 [; G& H

2 a" x$ P; E8 x2 k- K; e1 P( b步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)# ~$ T& X1 ?; T! B$ I. o& U

+ Y' a' p( `) u: f# ?搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)1 b$ h  u' b% e4 D
1 l, `: s9 M/ U- s* q
到了这里,201afdcc.0 `" N' I( s' [8 j

9 e+ A% w# r3 v$ c+ n
; n9 y" \9 P# x2 ~将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就4 Z9 j& s7 W* o# z  {) S2 ~
达到了不减命的目的。
- H, o8 }9 M) a2 }; }9 n8 J/ e! ^* l/ s/ F; V( W( U5 R7 {! R
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。; h7 J+ U8 r. W2 J0 s

8 e1 O3 A- v% Z1 p0 ^说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。+ q$ Y3 Q# S2 ], L0 m( M. G6 t. r
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。/ W# h- ]& {. U

) V- V7 |# U7 m9 J; j* D: V* u* I2 O注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制2 T( S# D/ M" _, O- {
% D* w( p8 t. ]
过去)。另PS游戏较大,改之前最好先做好备份。( [- \# f5 g# C6 i8 ]
将改过的IPS补丁也放上来。:loveliness:
5 g, `# f/ j1 E( n
& v$ h$ ?7 W5 Y; l$ d; E' w[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
$ R5 Z' W; [( j7 [0 q% n7 V
* z) G% E. ]/ w$ y- n% ^- Q顺便解释下% y! c4 j  {7 S
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 6 A% L% U' H6 W# g9 L
00021cbc: nop
6 j" M7 w% f6 P) ~00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
4 G, h) M; `' ^6 y4 T. v7 X' }% F00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
4 f4 A+ x2 ]0 L2 j
; T" O3 l6 {: z) s9 W7 H8 N从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
; w; p- |! q  Y! `2 q. T! A- r5 {- F. [1 \" }5 Y
以上是个人浅见,希望高手别见笑~~~
& v9 a7 a+ `/ K* o- m( T) `. m. b  k' I& D+ p7 V
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1916 天

[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 发表 1 J$ a$ c7 N- M9 w6 b( h: P
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,4 N& x' J, a9 n1 b) J$ y

4 y; U. j; a3 `, G' {" m2 j有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,+ b. O; L' _. y0 p+ X/ [
有什么 ...
8 C) n( X2 N2 `# P, Y
多谢了,终于明白了,呵呵呵:loveliness:
8 b* Z/ R3 ?8 \4 N
% ~/ A  ~! R# c) ?
原帖由 shinwa 于 2009-5-1 14:09 发表 + J" [4 d- w0 T: v, Y6 t
呵呵 不错 支持下~~~~. d' |1 [: M1 S* t% T" J5 a9 s

* C3 o/ Q3 F  y0 r, l顺便解释下: H; y3 E$ z6 o8 s+ o3 B
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
& z8 n9 r- k, {7 R- g! |00021cbc: nop - ~! K. m- Q. [
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

* L, M( t, J6 P* S! P3 E3 T1 l; W& s4 B1 Y
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
/ W$ o0 N- h( `8 [; H- I
1 e5 L* }5 O- o6 i, e多谢了,终于明白了,呵呵呵:loveliness:
7 E1 A* N2 }8 h, A4 [. s# c! X

2 d5 J3 }: B7 ]5 S* T9 p: c& ]- y: E, N+ |1 g: N
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
! a- W% Y4 x  j# }) h3 d
" S' C. T& }0 M9 m3 N
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 - j! l% s8 u* O* \% \
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
! o" y$ V. C, J5 g: mPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-11 02:28 , Processed in 1.196289 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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