EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
& b0 h+ z' ?" a! C) U4 n9 a. N, P5 _0 b% J, u! U0 ]5 D$ z/ c9 Q* v
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,: \. b, W0 v" ^/ }- V- B
有什么错误及不足请多提出。  q  J+ G- l& y) g4 g; X' N  x6 N

3 C6 G' S0 a2 `/ J# l( X  g需要工具:HexCmp[Ultra Edit]
; r) B; l! F7 I3 y7 c) I* LPSX v1.13(Ps 调试器)  i* _- [7 }& ~" i8 z# X, I
EmuCheat$ F* l( |" z9 g& m3 j. e- U$ r$ o+ F
MIPS汇编指令。8 ?; _4 m3 ^  J; j& Q2 O7 i

& s& u! i* Y7 ~洛克人X5 EC:
5 F4 v# V5 G- K  ^- U人数:0d311d,2.
4 ^; X) h, \) C: x
5 n7 ~8 n& Z* g步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。- z2 f$ M5 P/ D2 D; J1 a) _0 C
" G) J1 `# w7 h! W/ M: `( I% r
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
, v1 R4 B: p+ L# K0 K# H+ }会出现调试器界面。% K: s( x7 |" N0 a
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
( r, O' T: k& X$ a: D界面(Disassembly)。; @6 h5 Y, E; O9 W: _8 f, v( h: c& ^
右击Breakpoints的空白地,出现了添加命令的方框,点Add。; L, j4 M$ y" h5 `7 R
4 K6 [& Z1 I0 \$ Z% T( ?

9 P: h1 X5 n  G( P! \然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。( m" p9 n6 p% T+ [5 Q
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。$ ]: f( K9 b: @' [

8 g; `$ ^) Q6 I3 I按F9,运行游戏。
6 S2 W; ^# D6 T+ b; i" ?死一条人后,来到了这里,看Disassembly。' O+ v1 [4 E1 a0 `# l
2 o4 Q" I% s4 I" r; B/ |
- z& N- Z, S! Y9 Y
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
, z; E' i7 u( |: Y上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对5 V+ w4 c7 r# J

% g" b+ Y! H- _* r这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
: Q7 y: E" f) U7 p6 e
  S# M0 u  c; M步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
6 e$ L9 H; H+ R% B% d  l2 a: M7 j2 k4 v# b
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
2 [$ k+ N! @4 v' B5 \% t6 d1 K6 J6 b* U5 K
# b3 ^1 P3 U; C$ r到了这里,201afdcc.
* m( z0 L! t$ Z" r6 S/ B( k  Y+ [* P1 i! ]  J% Q( }
, ~0 C: Y3 g( P
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
  e6 J5 h: C9 P, p3 \达到了不减命的目的。
1 P. N  _" W8 M& }* X- o7 m
% k/ [' P6 Q4 u% c$ k. t. z) H到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
* D+ s& @& R7 P! y( q: g: ?# e
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。/ j) Y! T  l* o* b) L4 Q
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
: a6 H0 L0 X) l8 t& ?; Z8 @
  h! M& k/ P# p- j" |注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
" Q' i/ t7 N6 \" \; U' r  |8 B3 d+ ?7 Y2 h, k) h7 T
过去)。另PS游戏较大,改之前最好先做好备份。1 J! w. c1 D6 }8 }9 `" S$ E
将改过的IPS补丁也放上来。:loveliness:
+ Z8 G0 P! c# }; c8 w8 a/ |0 m$ j2 K  ]( |( {/ i
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
% K; B" q$ R2 W8 B; x+ l
) L8 ]7 V: [) E8 X顺便解释下
9 ]! V8 E5 J8 \4 W0 D00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
! Y0 m# O, P  D; t' k00021cbc: nop
- S* W6 X: ~% e& D+ D00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算' M6 S/ c. c& Q( y0 ?3 @
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址: q* c2 o1 t  i: }# ^

2 t& u: L' }4 q& j从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果# B& d. N/ B' o$ f& B* i
( d- t0 G' Y2 k& f8 k
以上是个人浅见,希望高手别见笑~~~) u0 r! B$ g; K" W& V7 }% p

  Y) i3 ^1 V, C7 B# q0 I[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1834 天

[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 发表 + j! t( ^0 i% V% j
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,, Z2 F- E7 m5 D# x" p/ x, X
9 m" G& g5 p% V& L
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,1 {. b. x# J6 ~. o1 r
有什么 ...
8 O# @+ d# T6 e) }3 L
多谢了,终于明白了,呵呵呵:loveliness: 6 p' d1 T! t2 D' C2 {4 w5 B
. A$ m/ B; |5 K! X+ I* M: i
原帖由 shinwa 于 2009-5-1 14:09 发表 2 u+ W3 I5 z- z$ M! H9 m
呵呵 不错 支持下~~~~
3 }% f* L8 o, j# E, U+ l% H8 A/ [* D! G
顺便解释下
" h( }( f5 p: i& u00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
( \- u  u+ U6 i( X, G* J" }00021cbc: nop
# J* I" J/ Q0 F: D00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
8 ]2 E+ P# O5 O# L; r

8 S  P( q" v/ ^& g' S; b还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
6 ^6 r/ U( J5 D  ?: R
2 O( F% F4 u& R+ I: |9 G0 A8 S: F多谢了,终于明白了,呵呵呵:loveliness:
: X! g% z# r0 M* y" R& \9 b) K9 M4 [" X2 c/ |) J1 a4 h7 B: r- r

6 @8 r0 Z/ h2 p: B
1 b" S# k. V( f# {3 K还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
9 G3 Q& {4 }2 r. d1 f6 u- \; j
+ P3 u3 s2 B: x2 h
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 * |* K+ M0 s' R: r; m+ B
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
! \3 Z9 q$ s. Z! L0 B4 l1 d$ IPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-19 21:12 , Processed in 1.083985 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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