EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
4 I* Y& w. _# O2 K2 ^$ n6 T6 y+ a3 d" l. b
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,6 z! A: A1 U9 ?  I& F
有什么错误及不足请多提出。
, ^( y, u* C: k" E0 B- }! C8 U9 u+ I& {/ H3 q
需要工具:HexCmp[Ultra Edit]5 V( f( j7 M: j. y! I7 B3 r
PSX v1.13(Ps 调试器)/ `2 T* X( o- U7 g; E
EmuCheat8 ^/ }4 c3 \, Z: p3 m0 J
MIPS汇编指令。
( j# V! Y9 F' c4 n
8 b4 O/ D0 \6 c2 Z0 l* \洛克人X5 EC:
7 b; C0 M( h8 q: I6 a: f+ ?人数:0d311d,2.* a, I# Z' V' T
+ p5 A  i7 i$ o1 |9 v2 y. |
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。8 Q; O6 L7 I' s2 G
- a: f! F0 q, ]# D9 t, g) k
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。( L( B' P9 V0 G
会出现调试器界面。# v- ~2 v# ^/ B( [" h: H, {
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的; G# I2 X4 `8 g( ^) R
界面(Disassembly)。9 r8 Z. I( ^% d" j
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
6 {5 _$ ?& h* ?+ s# J) R. i$ L) Z; F: q
1 Y% [9 ^1 J' d
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
3 d* h; K' r+ g0 x4 d' G然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
! P" J) u5 `% k* G5 o' @: Y. T% W' G
按F9,运行游戏。9 n( x! Y" ?  X: z
死一条人后,来到了这里,看Disassembly。4 C( p( s: c) t# @

+ o7 P6 G/ l' g/ g# r6 t6 ]" t+ g7 v7 y( h( W5 i
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
' s$ `" f$ \+ Y; s4 U  B3 b' d上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
: y0 k- _! d3 S& K9 s! |1 o) k, ~& X  G+ O0 b7 ~5 [
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
' i  l6 C2 `: a8 J# B/ O8 q; E; l& `* F% N- A+ f1 y/ p
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
- p4 N9 w3 ?3 N+ e+ U# d# G; H* a- o+ B9 D# U6 k& z2 j
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索); K- e$ ?1 F: F

% Z5 [+ g# P, n& q6 e2 @* N1 c) P5 L5 ^到了这里,201afdcc.
0 \4 ]" {% A3 s2 s+ N
. H& h" ~) |. j: W; {" t6 r+ L: w" B- t, ~  |$ V4 [
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
" }" V& R- m" F3 P' P- o达到了不减命的目的。
, Z% x- q1 r( c' [) I2 b6 ]3 a9 |
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
8 F. y" K- ?! }4 @; F% X' t: k6 t- O
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。! \; P& G. ?: q/ D; N! M& ~' n
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
5 @9 C; }5 C1 P- p) `7 l1 p8 m( ~, [* \
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制) ?# n/ x* L, p# m+ ]% d

8 p9 n- J! Y- o, f3 {8 H过去)。另PS游戏较大,改之前最好先做好备份。
6 m( R1 @0 j; ^* j' ^将改过的IPS补丁也放上来。:loveliness:
, M4 z: z; X5 o1 K
% m% K% q1 h# X' Q: s. }[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~! U* V# I1 B7 u

  O4 K2 T- f0 z4 m) A% g  Z顺便解释下
5 E$ ~5 y) [# D( w0 H; P# H00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ( `6 k7 a" x7 d1 N! F: n. m3 g
00021cbc: nop 1 D3 F: x+ b5 a8 F( I- X
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算+ Y$ S# B( `" ^- F1 b& a
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址4 c. ^2 H* A- C9 V8 H( f
! ?- n5 F2 ?0 }; d5 d
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果/ X2 L/ e; j1 H4 f1 Y9 P: Z3 f
# T9 T+ a, ~( t( e7 r
以上是个人浅见,希望高手别见笑~~~
+ N! u) X3 `6 `4 n. Z
2 K; ]9 X7 g5 X[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2021 天

[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 C* ]# m5 a; _  ~+ e# O
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,  u8 G) o, Q8 g& c' s9 Q. x/ @
" V  Y% f7 h  }5 ^! |
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
. W' G. E( ~9 e3 C# D6 c有什么 ...

  X$ K. I: D7 R4 a% D5 t1 Q. z4 z多谢了,终于明白了,呵呵呵:loveliness:
9 Z7 c4 Y3 f' d7 ^7 y7 B: S' |) A$ Q# H) D1 B6 {+ J. c/ P  x" {
原帖由 shinwa 于 2009-5-1 14:09 发表 / m+ X6 q$ e, o
呵呵 不错 支持下~~~~
  _/ |: H# d0 C& u5 K! _# _6 [8 r6 _" \' K  H5 f+ K5 d
顺便解释下! E2 }. f, ]) t  O- y
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
. n# M+ B  D! N6 M: B, r00021cbc: nop & e7 T/ j* i: R: r
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
3 k$ k. E. M5 p* t; w
+ D( S. y( d- c& U$ o
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
9 _+ r4 P7 a- w- k: r  W3 g  Y6 w1 Q3 E. g& |; T
多谢了,终于明白了,呵呵呵:loveliness: 1 Q  s( r. O( a8 Q  F, D5 L4 r

: p( ?! l; J( E: V3 X5 L& p) H; n2 R, f3 _: l

0 ^  x  r& M4 Q; ^1 s/ K% j/ G  l$ O还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

* e* J1 @% b6 J. O
# H. V, V- ^( S4 z9 p" ]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
" k6 f7 e9 e; t3 K, ]; A( {的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的. M& f2 z8 h2 b: b2 F
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-27 16:06 , Processed in 1.130860 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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