EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
* o) r+ k& G1 @6 |* i4 G4 s2 j- b
% v: c# x3 d  N0 C& w' ^有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
* n1 J. K* {6 G/ [- [$ Q有什么错误及不足请多提出。
" P! A8 n! ~$ M+ R' d& n! K7 E/ x* ?7 R) }4 O  g% S5 h
需要工具:HexCmp[Ultra Edit]* Z6 h3 q9 Y4 N% d
PSX v1.13(Ps 调试器)5 l5 f# _- D$ ^- S. D1 D. Z& q
EmuCheat0 J5 P: R5 Z$ n) Z
MIPS汇编指令。7 ?* n# G; U# |) r( C% t

: `. B3 e! x( U! I洛克人X5 EC:" h# u# o  Q. @/ D3 e
人数:0d311d,2.
' }$ A0 h8 d- d; p
8 w: v/ _4 z, k2 B" D+ T( K步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。2 p* y  o# I8 E% ?& v) d1 i& R- U

) M' M( y- z# o7 T' d- S+ P( w步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。- @% z5 R) K2 ?- a
会出现调试器界面。" F- g+ x0 R# R% ]+ d/ `. X% o
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的7 e" e6 D' n9 W! Z. F0 h
界面(Disassembly)。* t& l: Q. Z; I: k9 f
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
# W( R6 n' K, }( y, @" ^: y# h, a2 z- i/ |1 f$ K7 o+ F
4 ]  M) V; M/ U% F: v
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。( M& X. v* K) V8 l, N7 T
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
/ A& \$ ^6 ?: q3 ~$ R" z7 \( o. ~* x0 i0 a7 X! L
按F9,运行游戏。
' N7 q" f6 d8 T% g/ ~0 I2 d4 b死一条人后,来到了这里,看Disassembly。
+ o2 z8 j( {, B! v) D5 Y
9 J# I8 i  s+ B% D% [* Q$ d# M4 @( e( L  k
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600- s% q& s$ I! m, z
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对  k& H2 R4 l0 W. s

7 K# W0 i% r$ K. L$ P1 D这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
7 X! Q9 `& M: [7 `+ n. @7 L+ v* L4 x- v; C0 [2 F9 X
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)# ^3 _7 u) j) M2 V' T6 d( u
5 f3 {# C0 \8 B3 o. Z
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
) e! _3 D) m8 o& I
  v( Z1 X9 |/ B( D到了这里,201afdcc.& g- J3 |; a! ]% ^/ s0 [; H

7 U/ T% B: K: O) n; ?$ l7 |' d" }* Y, @5 H
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就1 Z9 u, w" K. R" {. f8 W5 Z
达到了不减命的目的。
% i+ q. E% I0 h8 }  E" d) ]) l8 J: \- d) n
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
1 D# g3 B/ F& h0 @( h4 T! e
$ ?) u6 j6 _  E% ~4 [6 ~* x4 P  P说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
3 z! u2 U5 E/ @9 }另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。/ H# m% z3 D' L

: c8 L" F! Y& {$ M5 K/ p注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制1 c, ~; S& l, C  f' e
6 U, |6 d+ o$ Q% W% r
过去)。另PS游戏较大,改之前最好先做好备份。7 U6 Q3 {. g! r3 |7 t
将改过的IPS补丁也放上来。:loveliness:
+ K, K( j& q& n9 M/ h
6 O1 v6 V' u: {& r[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~1 X$ `" M/ t1 o8 m4 J, d

: q3 V$ A7 d1 f: i0 _% P4 V顺便解释下
, e2 g% o$ Z- g. X$ }  s& s00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
6 f6 q1 D7 |& a- r3 N, q00021cbc: nop
: h5 x" q; }; n6 j( E- }00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算; ^% ?6 D7 O) _
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址/ p6 ]; a6 O9 p/ B! v: Q/ @8 `! g
5 S) m. q0 N# K4 h. w* l& v
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果  Q* [3 @' g$ n/ t# F) d
0 F' Q" B: e! k: A6 q
以上是个人浅见,希望高手别见笑~~~
( u2 ?! _2 n: U. s( N# Y1 F4 k- q
7 s/ v$ d! f' M" C[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2021 天

[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 发表 9 J9 |) M8 N, Q
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,+ n1 W0 N& j$ v: D
: |/ W% q, I9 P: p
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
$ M& I; a' l+ \9 t, B# l有什么 ...
( S3 R& ~3 z; q! \  s+ z
多谢了,终于明白了,呵呵呵:loveliness: & W2 q, @% b  H$ j4 Z
, [# P- y; J. p& Q9 T* y
原帖由 shinwa 于 2009-5-1 14:09 发表 8 A* I+ O% m! W; t( v; T
呵呵 不错 支持下~~~~6 F1 G) W7 L( w, F5 C, k

) X( G2 q8 {7 n' B( O顺便解释下
$ I% f8 w0 e/ t! Q00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
. n/ C, g8 G% h00021cbc: nop
' ]" c$ i. H/ Q5 H00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

1 W0 B- c* x* |2 I, }3 T% o- `; u* _; O8 d
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 ' J9 p+ G4 G! x" Q

& [% ]& J0 B# K+ e多谢了,终于明白了,呵呵呵:loveliness:
6 k' H, s! M5 K; I3 B" P* T
- w& ~3 Z) j0 Q! ^/ ^' C$ n7 Z
9 E$ o* V1 X! d9 r) T$ I3 z4 j8 t- C5 u
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

" ^7 A* c- s0 K2 {! b: f, S7 D6 ~
5 I& g1 B9 J5 s8 s2 K7 X00021cc0: 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 g+ B& L: z- p+ u6 ~3 d. A* m2 {
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
' z6 `5 O8 E9 U" R- Z( N* }PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-27 12:01 , Processed in 1.110352 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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