EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,$ M3 z9 b, `8 Z& o

- S0 v5 a) ~" O有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,! o/ d# v$ K0 _! Z" Y- w
有什么错误及不足请多提出。
8 n0 {0 k# O* T0 f' A6 e) u3 R8 ^+ x+ l# O3 L$ h( J0 X
需要工具:HexCmp[Ultra Edit]
- }. b2 R; g0 T) h2 a' kPSX v1.13(Ps 调试器); B% [# I% J# e: t4 c. x
EmuCheat
" l7 N7 I" o$ _% H! mMIPS汇编指令。% z& }7 q/ `7 Y, X- u0 M
4 M5 y3 x) q6 F; Y8 c! {7 {
洛克人X5 EC:
& ~2 @9 t" n: F, K$ P1 Y& G人数:0d311d,2.
( s/ s" [. G8 }4 R" O0 O1 L/ y  y) i+ @, A5 s
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。: I2 |4 Y: ^6 X& m8 b
% W8 ^0 i( K9 e& u3 X2 k! j
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。. M5 g  U! ?  a
会出现调试器界面。$ @; D0 Q% n5 v( s
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
( l& u3 i! Q8 y界面(Disassembly)。
: Y7 H$ |' s( ~: ?* {& n右击Breakpoints的空白地,出现了添加命令的方框,点Add。- D" J. Q5 @8 _* o( T
& F- p% c0 [% r  s% D
4 R, U, t$ {: S1 V
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
% o5 A7 y+ ^; K' ?. D4 K然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
' B( S7 W6 O0 A0 W2 M8 C/ ^  Y3 I. P- V$ `) K% Y+ X* b3 K
按F9,运行游戏。; E- d+ I' [) O9 }" u" |8 u& j
死一条人后,来到了这里,看Disassembly。/ Y8 B3 y2 I1 V2 w4 R$ Q0 |
! q4 e3 E- m" c/ b5 ^
% b' Q0 A' g9 b" m( s
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
, Z' m  L( ?5 s; J8 ^上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
) W* m; F8 X: n0 l( B4 v; s
8 \1 E) e$ Y3 r) T. t* x0 B* ]这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。8 K$ W! j8 {( I  I: ^

& O7 U8 |) ^  Z9 F$ a$ K/ k步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
: f0 p- `2 [/ j+ U) D6 \# p$ R2 ~; p: K% ^/ m
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
* y% e8 o$ n  k# o  `$ X/ f$ W) [, W- x2 |8 |4 \+ i4 Y' a9 w
到了这里,201afdcc.7 u' _# j3 f- ?8 W9 w* n1 C
% M  ~  u; Y! y9 h6 F3 {6 c. }

# P8 Q0 K$ m* e( ~, G' ]+ X将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就1 w  D1 ]! Q1 A- ]! P6 d2 A% I
达到了不减命的目的。
$ ]4 B& t- v& j5 N: b# e8 H9 A% n/ b5 J' [( c
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。  K; Z, w- h! K! q- `& C( b

. I3 M5 ?2 [& ~1 T说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
3 {* a, T" a" p" @; R另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
& w( J& ?+ i: K! C, B8 F8 U- v5 z; X' b& x6 u, v9 p$ A3 `
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
! H9 K/ b4 K, X+ j  r# b' w3 {
# \5 F  C. }" Q% y4 @/ O过去)。另PS游戏较大,改之前最好先做好备份。
1 Q8 w4 H6 j4 I3 r  j" s  Z将改过的IPS补丁也放上来。:loveliness:
( V- ^: l' Q9 T8 T
  n8 M& k3 Y" J[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~$ s$ L: c; ]: ]" S+ ?

- R( K& A5 J8 R) }顺便解释下+ x2 A1 m" C# `
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 " O# s* s- f" `
00021cbc: nop
( Z; b, |6 B. d. `0 G9 O. a00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算% Z' N" i5 }5 [- b8 j" t
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址; I" Y, i" q6 y9 [; H# I9 N4 A

9 t5 z0 h9 @/ h& A* i  q, S: |从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
/ }! u, Q. R2 }* Y8 l
, T. }9 U5 l. C# y; Q! X. k以上是个人浅见,希望高手别见笑~~~
/ A: O) @1 E) ]* N/ v7 x% W
" L6 q& }1 k1 p) \) U[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2072 天

[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. `% O' v' Y: h应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,) d/ U& C  Z- [4 ~4 p- C

9 W  l. z5 V0 o% r, q; e$ a. X! C9 F有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
- M3 t% S5 H8 @; `, _5 Z) Z有什么 ...
+ Y' x: u$ j7 U6 D( F
多谢了,终于明白了,呵呵呵:loveliness: & d2 W  C' _0 M6 ^9 O

/ E4 ~8 M2 [0 [8 S- r& ^
原帖由 shinwa 于 2009-5-1 14:09 发表 7 S. K6 d9 ~- j) w* Y. @$ H0 {
呵呵 不错 支持下~~~~
4 O, T; {* E/ Q6 i3 i
& p( ?. L6 o# H7 t, P/ c顺便解释下
- _; }8 j, F, ^* `! d. k00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
- v. M8 N' i( \& z, M4 S; I5 ?% u00021cbc: nop : P( U! U) @8 J  o2 Z* Z
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

" y+ }! p. i4 w+ Q
" d3 A, k9 o9 _* A% l还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
6 U! F* m  `* R( `5 P2 r9 V5 s
: Q- r6 P# r$ R5 W$ p, H5 P多谢了,终于明白了,呵呵呵:loveliness: + w/ M. K! i  D9 w1 {5 }% x
0 F  y+ H3 p4 ^

  v/ \" q2 ?- I, o& T4 y5 S. t/ y. [1 ?; M
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
+ F' s4 A" m" i: A. `3 u- W5 i( D

2 c! L# B. `( W$ [! D' d0 R- A00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff + e' k& k# w; S. M# S
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的4 A' X# h; z) M
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-17 01:30 , Processed in 1.078125 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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