EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
8 P$ q2 s$ v% J( \1 S! \
, i, a: h$ o8 k有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,/ t( D/ d6 s2 m8 L' ^* y8 }
有什么错误及不足请多提出。' p5 D9 B$ `0 ^9 B6 K

" S; h, L7 |. V/ ]' D: b: R% G需要工具:HexCmp[Ultra Edit]
. i0 ?3 d5 d; j  z2 l9 RPSX v1.13(Ps 调试器)
0 |7 B2 _6 M& _; ZEmuCheat3 q& P; p- S9 U  H7 z' Q) Z1 x. |
MIPS汇编指令。' v" Y' G9 l& }7 o- a

% U9 L9 j9 w- P4 u: N; y5 m( }洛克人X5 EC:
" W0 L. x: m4 ^人数:0d311d,2.
/ x3 o! g' z$ h+ T7 t
" W' M. v3 o0 f步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。$ P8 q1 B, J# j, k

- m# i$ }% {( F3 |" H步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。+ E" s* M& y* n# H; |/ F, Z
会出现调试器界面。* X0 Z+ D# J) F' g
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
6 W2 K, j. E* B8 z界面(Disassembly)。
' M* N0 I' D! O% {1 l右击Breakpoints的空白地,出现了添加命令的方框,点Add。& |# b: m2 n1 t2 G

' C  }' m+ j1 {, @4 D# m; x- S0 j) J# c! O3 x; J
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。. k5 y! O2 o& M% C9 S
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。/ Y0 d+ }8 {% }* h, A+ D
8 n5 [+ N1 U! B, X
按F9,运行游戏。
3 O3 k6 U5 ^: f/ W: g6 {; f死一条人后,来到了这里,看Disassembly。  t" q% e) s) A
& W" m! b) d9 }3 L1 A/ X! x6 H9 ~
  b5 ~4 I8 _- G0 r
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
0 j$ H# N% o2 ~0 b上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
) z$ Y% m; p- I% Q
( R8 U" s* u; a' q* o这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
6 |" u( w) ~/ p7 N7 V& X
" r6 a& g. q/ U# l7 w! H/ J: N( ]步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)1 x( N0 ?5 z  G3 f7 k0 Y& q

& N* l1 W( Z2 D% W, {% ?$ [6 ]搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)  G. k: @# z0 F
6 Q. q; L+ K1 G$ I; P! o
到了这里,201afdcc./ D0 d& E6 N! o2 b2 z
1 E: D1 F- n4 j3 }! q% L5 v8 v1 a
! w) E" q6 C, q1 v# i
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
& z9 Z/ t! n* g6 Q$ @2 ~6 ?达到了不减命的目的。) A: i8 Y: u" ^9 [1 T
1 t, y* e0 R: C
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。, Z. I, J0 {! g3 B; r5 R& \

8 s& g! C9 ?. q) s说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。2 {. j8 A* l. u
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
) ?& O! J* ~. B$ H
) e1 X4 q) O0 U$ b! f( |注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
+ a* x+ i1 C) t9 S& {1 V, M( K% e: G8 p7 A5 ^1 S
过去)。另PS游戏较大,改之前最好先做好备份。4 [5 K( R. r$ ^6 X: G4 o
将改过的IPS补丁也放上来。:loveliness:
+ N5 ]" N% k  |$ P1 T- \
( K8 j$ L- V1 x% k' q% E0 E[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~- k: U: A' d* D2 j5 ~2 a; u
6 F' P1 K3 f6 g0 i
顺便解释下
4 u+ ~: d5 `  i8 o; q: E9 x# R00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 # m8 `( I0 L  b+ v5 L/ t3 n
00021cbc: nop 7 W' Y* n5 U' w4 ~  R% w: e
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算$ u0 ?. ]! O8 {4 f8 q
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
& P& @7 A" h" Z0 x- Q: f0 r; ]& M/ U2 D: h4 W
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
# C  U  Q( A8 v' g( E3 ?$ o* O- T5 R# z; Z# z
以上是个人浅见,希望高手别见笑~~~. h0 h" I7 Y/ `6 R
, m: A7 N3 K" [6 x
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2172 天

[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 发表
% n' d9 h6 v1 L0 N; ~9 x应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减," M1 a; _2 |2 Z+ x) z

/ P1 X1 u0 {- s5 \& R; M1 o+ l5 h" n有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
4 u3 K$ v; t4 G1 K6 S# k0 v; W有什么 ...
# Z# ?) I2 g' F6 y9 O
多谢了,终于明白了,呵呵呵:loveliness: ( h2 G8 d2 O( H! E

! c# X5 h8 [. V1 ~: s8 ]1 c+ |
原帖由 shinwa 于 2009-5-1 14:09 发表 & L+ X8 S. O7 \8 m- U
呵呵 不错 支持下~~~~
9 \% Y, E, J6 R4 m: g  D" y
* M% n& |6 E- b- N" k! L顺便解释下
; z* G5 \7 e- x- Q00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 # W2 n7 m& F# L" C1 U
00021cbc: nop - ^$ ?) j9 ^4 s
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
" W* _, C5 i8 N
1 A$ t$ U( @* F; ^5 w! ~5 l
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 ; L+ D0 b, V0 y2 h% y- j. O3 u% J
9 |( D7 m4 z5 \7 M/ I2 v
多谢了,终于明白了,呵呵呵:loveliness: " R% `" c# Z5 K- p
+ m* @9 d  N0 H7 X4 B

7 L3 b& G4 t4 f: t! g; t2 M4 ]8 ^
9 d3 m- c( G5 o0 R' ?5 ]# \5 @  x& ]  h还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

8 ^, V* h% h- N; @3 B0 {. t7 y2 w$ E7 W; V+ X3 R7 x3 l
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
7 K: W- O1 J7 e4 u4 I的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
7 `' Z* c- H! uPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 02:04 , Processed in 1.105469 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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