EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
- Q3 l# a; P* q0 ?" W5 v
& v+ w7 l7 k) h1 b! X3 P" B有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
  |( W( Q% h9 b: w有什么错误及不足请多提出。
, s' g' ^9 K  `8 z8 g9 K: Z/ B. v/ N0 r/ i! q3 y5 H' G
需要工具:HexCmp[Ultra Edit]
* S# F7 V$ m" s% t" oPSX v1.13(Ps 调试器)8 O0 _, W& Z2 J. V
EmuCheat0 P+ X( \. M! y$ i& @; O
MIPS汇编指令。/ D- P' h& z# D

' J* h2 g# ?+ J6 y: B0 F洛克人X5 EC:' [& s# r/ }& x8 i
人数:0d311d,2.0 V* P4 o+ ^8 F1 S" Y  M
( V. {2 A3 U/ i1 h2 B+ z  D
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
( f# a7 O( c6 ?, C& O
7 b, }  H1 z& _. q8 L' N( W- ?步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
  s) h- }7 |* t2 r( K会出现调试器界面。- c4 V+ M0 F. m8 Z3 i, r
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
9 w1 i9 d: O0 j, X+ c! ~界面(Disassembly)。
& R" f; Q5 z! f右击Breakpoints的空白地,出现了添加命令的方框,点Add。
2 o( x" O* W; F1 k3 S. b* Q; b4 m% v+ o0 N7 @6 y6 ~3 R8 a7 \

. P4 N* r* s1 z$ V! d/ N5 k! f然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
0 A5 K/ C; a1 _7 p2 _0 h7 q7 I然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。7 X0 j8 E( o  I  E" {
8 i3 l7 _; H3 w- d$ }; m  F
按F9,运行游戏。. u. \" b# k( I
死一条人后,来到了这里,看Disassembly。, I  q; r1 [8 ^$ k
& H, a& _& @  i/ R: h% `* Q* ?

# _9 o/ e8 k" O) N3 I$ ~' ?步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
$ @& h! o. @/ l' ^上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
0 E% U$ G$ Y# p- A. u8 }$ c& @8 f$ Z' V
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。( t6 D% y2 p! e

. y/ V8 q# C* ?) x% e8 t( Q步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)# X! S6 [- `- Z

, e' ^8 N9 `8 \* I$ C5 D. E0 D' L6 q搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
- ^# r. h! I# u4 f7 Y7 G
) [. E% S1 J0 ^, ^到了这里,201afdcc.
+ ~6 F0 E& y& [& K7 t8 V
4 l2 u" Z/ a1 F! x  @+ m" s( m) Q/ [0 `: C" x- l
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
" R6 s* M1 |8 x7 A! m. I! O5 Z达到了不减命的目的。) n+ a& j, r9 a% O& [
( ]) x9 n% V& e) B  Z
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。$ E8 C, o* S/ C" W8 H/ H- O
2 y+ ?. }8 J1 Q5 i8 Q
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。; |% y' u4 g, V1 V& q; q
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
6 B) L5 c* y- E; @9 C( D8 c
5 y8 S! B8 G" F& R: f注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
/ N+ g$ Q: F5 U: W, e8 Z3 d; z% x7 }0 Q  k, Y$ p7 _6 G
过去)。另PS游戏较大,改之前最好先做好备份。) f8 K1 Y5 `1 A+ o3 G& f0 `
将改过的IPS补丁也放上来。:loveliness: / Z" |% c9 Q$ V# V3 w4 S8 {; v# a

/ a5 a. G6 h% a; A4 l' E+ W/ s[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~8 u/ s) {$ @8 Y
( a1 _; K. A: m; @5 O6 V% Y& r
顺便解释下
: y5 B. p" G( j, y00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ' f9 t+ j0 q% S& T; x7 N
00021cbc: nop $ Q3 I, h2 T7 K0 @3 `( I
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
1 U! o, M8 y3 Q+ p, F00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址, Y9 u; f) O) L; J+ X

( ?% g+ \8 I! `/ }$ {7 ?) J$ \从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果; C3 W3 q  v# Y" X" o1 m8 R

- h; B5 ?# _! h$ m! s以上是个人浅见,希望高手别见笑~~~
# v/ S( u. L) p2 W4 }, ~* R
$ E4 ]* H. `* J9 ~& y9 V' D[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1803 天

[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 发表
. m8 D! v+ Y) m  g应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,3 \7 k0 x6 E" x8 I4 X
8 {* U5 A) c3 Q3 B
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
1 ]+ T2 h" a& `* J" ~有什么 ...

( P% Y( x9 Z, _. _3 x0 r多谢了,终于明白了,呵呵呵:loveliness:
; _' P/ s; g" C
5 k5 i" X0 i5 D$ t+ H2 Q
原帖由 shinwa 于 2009-5-1 14:09 发表
; C9 k6 M# q0 H  P5 g) r6 _呵呵 不错 支持下~~~~, Q3 Q( Y1 \5 ?- ]

+ ^! z% v9 S2 D7 G' }& c9 n1 X; q8 W顺便解释下7 ]0 G2 _; a# T$ f0 i' ~8 f
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 % }6 s5 U$ n+ J3 ~2 K& F
00021cbc: nop
$ i; D) \5 X) k6 `2 B00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

! k3 C- h) l  W- ^9 m0 a" G4 g3 G
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 / F. q, }' ]2 p7 k- t

* k9 q* m) b) G* U多谢了,终于明白了,呵呵呵:loveliness:
# \; P6 o1 a8 s! H* _5 n4 e4 V# M: V2 _' B

, D) k5 N; ^- G/ ~; K
4 t. m- O8 m/ x& z0 i! a9 [还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

/ p) Z8 e' ~+ p: A0 K; p/ o6 v3 [1 h% M
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
9 L- ^. l5 b. t5 X( N8 c的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的# \( Y2 s6 h7 g" L( C
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-19 04:14 , Processed in 1.112305 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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