EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,9 D4 Z9 |$ J5 O- z. ?% J
0 J0 ~! t+ x; ?1 I
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
% ~9 R9 i+ b# v) c8 E) Y2 R有什么错误及不足请多提出。0 H( _' d+ E2 ^1 |0 `) k

: w8 K2 h& _$ S9 D* m& [* w需要工具:HexCmp[Ultra Edit]# e/ }0 ]# [% u
PSX v1.13(Ps 调试器)
! f' Q& R5 [; B: T, kEmuCheat
- H, |: M8 D. r: s$ PMIPS汇编指令。9 {$ P0 u4 Y! h" O( ~

( _# G1 C1 O' N& H1 @% V5 T, c洛克人X5 EC:- r1 z3 p$ b/ [' I2 t
人数:0d311d,2./ t9 d, J, I0 T

9 g0 \; \% _) s' l" s步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
) a: B3 z; A* Q2 C, _' R- m: E' H0 C+ ]3 D$ i
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
, C/ a. V: F( Y7 ^: n( V  j会出现调试器界面。" |. V! _! p% Q2 o( h! \; F
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的2 [. h- I/ U$ ]9 V( o
界面(Disassembly)。
# U& z0 q& ?4 [" Z, L2 i$ [; Q右击Breakpoints的空白地,出现了添加命令的方框,点Add。8 w1 _. Z$ F/ W! o( I, {- x

. ?- j$ O: M8 Y& _. o" D/ E. h& S) H
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。+ V7 t' ~4 [2 L: L  t4 R6 T: P
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
" [- u( ~5 T8 A- Z4 f' J8 Z- j
3 Z5 s, d5 y2 W7 t按F9,运行游戏。" g+ Z" p$ O# P/ a/ h' p" l
死一条人后,来到了这里,看Disassembly。
/ }9 u0 H: |. w" o; w: Y6 `6 r+ m+ l$ I* V% }5 m  c. G9 z

2 U- z% ^+ d  z* f+ b4 E* R' r+ c步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600  c( W# Z5 O. w
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对  J  I5 k1 c  V. _( P
9 e: e) d/ x5 {6 S! b* T8 w
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。; @, o* R, X1 o

: p0 [  Q+ Y  W' z& w* z0 N$ Q步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)2 q5 T0 u: q! C" a: q  a' l8 D  \3 Q

: d9 p  k7 r# ^+ M搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
6 q1 }( F: ^8 s& t& e6 N) W& A/ D, i# {; e" L8 b0 l0 h$ n0 ~
到了这里,201afdcc.8 Q+ O# p% R/ [6 m& I- k

* m& A; j% Y2 m3 i- t
! d. ]  _  z" H  O" r7 n& A将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
+ o+ M. G$ f+ \" p1 H2 `达到了不减命的目的。+ s: x  ^  ~4 L8 q  g$ H5 s- _# \

$ s  O3 K3 X" W4 p$ {到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
, t' ^' d4 W1 m) `) U) D, S
7 t' Q  r  [. s$ X9 @1 T& y3 G说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。  W/ e2 z9 E. v: D; j3 O4 s
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
: J/ o& F5 G! L" _1 W) u) r0 d- o
2 ?" C% Q1 h  W1 s注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制) z8 X3 H3 R! c7 s' a& ~1 d+ ~+ k
) s0 }) k7 p( w, I
过去)。另PS游戏较大,改之前最好先做好备份。% v5 Y, b7 t) x' v! F; c
将改过的IPS补丁也放上来。:loveliness: $ k# K$ W- S) L" B& F' A' d
/ I( I) Z6 V! h6 C4 n
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~# _/ _  y, p& ^; u3 s
+ n; q8 K4 E9 L- v
顺便解释下, ]5 P7 n- }8 a7 l: w- a( f
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
' x" u9 R+ p1 p9 I0 u4 C) I00021cbc: nop ; T. ^0 ~8 Z2 X& g4 c' \) K1 n3 U4 ~7 e
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
2 w# f' D: e+ @3 h* f7 A00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址9 l& q7 d: ?2 X' M6 R
& V& I$ C7 U% B
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
* i* u; I( ~/ Y2 G3 Q: i/ f8 y/ y& [8 O0 I
以上是个人浅见,希望高手别见笑~~~
" [* }& M7 i& h) A. |& u$ {- w
* m0 o- O, N1 ?" r6 O[ 本帖最后由 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 发表
; ^7 B* ^8 R  m0 H应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,) n6 ^% v5 B- }
, y5 v* r( G3 O- b
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,6 Z# K4 H; C8 C- m3 G
有什么 ...

2 \+ F8 o0 y7 D9 a多谢了,终于明白了,呵呵呵:loveliness: 7 L+ s2 C( O4 ~$ @& p
9 ?, g! s' R+ L0 @7 m. K. l
原帖由 shinwa 于 2009-5-1 14:09 发表
3 D* R# G( w, h/ W呵呵 不错 支持下~~~~
) p) i6 ~; f) V: e
6 `/ U+ r9 D& k7 _" j顺便解释下& e& A0 M, V" \9 F5 a$ m
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" v, Z" U2 ]2 J; w9 e) K00021cbc: nop 3 Y; y# _3 M! _( t
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
& o) s8 j( k4 a# J& z

; s/ k8 {1 G" h* K3 i) |: z还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
7 f7 H5 V5 m+ s2 k) V$ n# Q/ @1 g% z) K, R& f
多谢了,终于明白了,呵呵呵:loveliness: ! u. s* L6 Z6 Q( b+ B
2 {& T5 {  r" {) v1 m6 q1 U9 t4 A

: T1 [1 V# Q  y1 g' [# \; Q
: Y2 d/ ?) h4 H7 ^0 D, G: }还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
2 Y9 T' v/ Y3 r

+ K( m' Z$ Q% N1 c( `! f. l00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff + f4 @0 `/ N% ], J9 E) p
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的, n( [: S3 a9 e7 ]/ r
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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