EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减," j4 {6 _& ?' ~+ k5 \

8 a( Y! ?: q% J有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,, _+ D, i( e2 O, o3 r' \" r0 u4 A
有什么错误及不足请多提出。0 \' Q) x. i- a* O: I) C% l: s

' i' O7 `% t2 _9 Y  o需要工具:HexCmp[Ultra Edit]& |0 U1 S" p8 n. }. }
PSX v1.13(Ps 调试器)6 m5 ~7 u. u/ t# T( p3 A  r* X: T
EmuCheat& j, j, x5 x( n8 y# J7 m6 ]
MIPS汇编指令。
) W( j9 Z( e6 G& X+ W# E
! {3 S. T/ a% [7 ?洛克人X5 EC:
+ R% Y' O1 w7 \4 U6 H) u人数:0d311d,2.
8 @# a: R( l0 \  u% H, d( o
1 [0 d, ?! ]- E& k1 z) I  Z步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。# V1 z6 u( s- S) g7 f  _) m
4 s4 p& E9 Y; _$ s, \2 Z
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。. W' [4 x0 G! h/ }" S5 t6 B
会出现调试器界面。: R3 c" A- V: R4 Z! c- Z
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
: ?4 p- N5 s" P1 \) Z  I界面(Disassembly)。
1 k9 ?' d3 |. R: g8 Z' I' u右击Breakpoints的空白地,出现了添加命令的方框,点Add。
8 D4 f! U# B) u9 P& p4 `3 \1 y/ Y0 t; j4 N
: t1 T. ]! O. m: H1 X' T3 T
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。, k0 B! d2 X9 O2 s% _
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
, g7 \$ w' Z/ ^" ~
; ~. j: s7 j" e" ]按F9,运行游戏。
; A  @) X6 m! b: m5 e' c  v死一条人后,来到了这里,看Disassembly。/ G2 c" [" \6 ]7 f* b9 P

+ x9 W* b4 o9 p# P: d9 E
" |6 L( I3 e2 `3 O/ e; ]步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600& }" D" k+ H% i% g9 n7 q
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
% d) l, e9 w$ }, j
  i* P; J5 `( t* a& ~这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。: X" Z( G9 x0 ^4 g5 o

7 f( Y+ f% ?' g( \; s, `3 t步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)4 j& k4 ~, P% i. I. m$ c) H

# I/ e" P9 F( }  x3 j; p& J2 d搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
' {3 v, X& u" o& v* k- `$ e5 |1 A! n# @% a+ n. m
到了这里,201afdcc.
, w; t& Q7 I& ]7 P+ x# C* x- _+ I& m5 T7 l7 ?' l* i

) X* K+ G& o+ a5 ~# g. z. v' E将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就. P) C% h/ r6 R+ s: f* z5 x( ^; S& ~
达到了不减命的目的。
. z2 \1 G% R. q/ V- k# \
! b0 X8 R+ |: m% M; _8 G到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
8 @" h# Y: N# J5 G  h  n
) B8 O6 h9 l6 A4 d  B+ Y说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。2 N" d# v3 t3 Z5 p  v
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
3 o8 i; M+ D1 t2 Y7 Z, h: d1 I# S! }8 @+ i
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制0 o0 L2 y) P" v) l

  q# }- M1 s) Z9 O: d$ u5 N过去)。另PS游戏较大,改之前最好先做好备份。
3 `7 ~7 ?6 z/ R/ q将改过的IPS补丁也放上来。:loveliness: ! @. p% F$ T3 |8 e9 I& @
1 H! s( [4 }; C# j4 Z3 E* _
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
$ @1 z3 h0 c4 e0 B" ^9 Q- t5 V; E5 L2 L
顺便解释下/ j- p+ h  E9 f: N3 s4 S% E1 m
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 * K- \6 ?* h& d2 r7 t4 M6 A$ L7 n
00021cbc: nop $ y" k6 J4 k4 X8 R
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
. d- a+ G$ [; F7 j* G1 ?- i00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址7 m  |/ a1 E+ ~0 P/ T0 c
+ a' t! Z9 J3 \7 W3 U
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果: E6 u6 D3 y4 R& T
& `8 e& q2 G0 c) Y
以上是个人浅见,希望高手别见笑~~~4 W6 Y# g* y* s) s5 [6 N9 P
9 l2 ^5 G4 X: Z  V
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2112 天

[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 发表
+ h9 ?( m- T1 h0 P应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,8 ?3 V: z9 a' j6 k
+ S- v7 R$ |7 S
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,) Y5 U6 H4 I, n' X. O- W+ X7 t
有什么 ...
( m& {, W& r/ |" b  ^) D
多谢了,终于明白了,呵呵呵:loveliness:
0 z. b0 Y* }  D; Q/ h5 K1 d% k) E4 o: z8 j
原帖由 shinwa 于 2009-5-1 14:09 发表
( I- V- w) X, \. R呵呵 不错 支持下~~~~
( S1 k% S: J1 `4 P5 U1 ]- T& G3 X4 N8 d+ k7 c+ N
顺便解释下; r4 I& O8 g- R. {/ h0 q! I
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 , r& X# ~! o% m" Q
00021cbc: nop
) b' H8 X# _# b4 `8 J( N00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
) Z6 t; O" f" L! @1 z
, Y/ ]. x6 |4 R, Q7 z! r
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 % d6 H1 m1 ?% s+ q# s, E' p
/ J5 h, J# T. ?2 g( }; @  q
多谢了,终于明白了,呵呵呵:loveliness:
9 X% ~- w" Y3 N9 H, m& R
! C1 w; ~  l5 s' J4 n7 ?; K2 b5 Y% ]/ V
, q$ |2 z& O. V
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

: X; X+ t# y$ @) {" j6 X3 i) E* B9 L7 `& l+ x. U
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 Z2 L( @' ~  ~7 j5 e1 }" y& A, M
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
5 Q0 r; c4 F. ^* ?) ]5 y, ~% ^PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-26 20:46 , Processed in 1.072266 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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