EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,' j2 t% a( q) N7 F; x

+ G7 @: w- {1 J; L4 X, i, `3 d# m有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
+ ?$ G7 Y- f+ L# }# h' f# Q有什么错误及不足请多提出。
& \6 ~; Z7 g. p( e2 _
( ^( U7 O6 @) J1 N- w6 H需要工具:HexCmp[Ultra Edit]
& w2 ~* v; E2 ?+ M! @PSX v1.13(Ps 调试器)! f) l7 I7 j! A9 _& s
EmuCheat5 d2 U$ x) a$ I! W7 S' V5 S& S9 {
MIPS汇编指令。
3 h: r8 l5 [& ~7 n& [8 z/ g7 ]/ R6 C
洛克人X5 EC:9 J; T0 f3 p4 P$ V& i9 q5 L
人数:0d311d,2.
, M+ ^% @( H; w! n0 f# s2 ?: ~& Q4 f4 E% q3 X( o
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
% s) H) j  _6 R# {* ?
4 d7 ?$ e; u+ R步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
/ R6 c& l3 W- K* y" z" j' q2 ?会出现调试器界面。
6 D( D  I$ v* s其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的- B- d  s6 v5 }1 N) l
界面(Disassembly)。
; k  ]+ D1 j) V! W/ B右击Breakpoints的空白地,出现了添加命令的方框,点Add。
3 W. L# h. U* V" d4 i
! D3 P( q" ]: |; i- b) s, @& e2 G
# w6 K  |% M# l然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。9 N4 h! X/ ^# h* B4 Q9 M
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
6 C8 z3 _* K/ q- R+ H6 l. m5 b# a0 V$ _" ^( q7 E
按F9,运行游戏。2 d5 O7 o, }% C
死一条人后,来到了这里,看Disassembly。
$ z* e, C0 n$ {4 n4 ?% Q6 L
& X: `, g/ J7 f# }  c
" I: s) E( h. C2 K* g2 E, i步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600# ]0 h5 }) t% G1 x2 p# N; ^5 N3 p
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对: E7 u% e1 T( v5 P. `# ^
& ~# b% |+ r( c- Q: q+ r4 B
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。! a8 I# \* H% M) x
6 `' q) k% r1 V# ^
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)2 V6 a, v  F) `& a4 N, B
1 o0 u7 v6 n. a2 r4 x
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索): q% w* f1 S% ?$ \4 i; V

1 r9 x  E% C$ Y到了这里,201afdcc.
; P# Q3 @6 O$ T$ ?1 Z8 ~5 e$ h' V5 Q2 g

" e9 _$ z8 s7 R% e1 t# b# o9 d& K将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就, \8 V  u7 p4 ?: P' Q
达到了不减命的目的。4 Q) S( M/ l' R; x" d1 _
( d8 P! O: b  x/ R6 X4 s
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
; S7 [& `5 t# H) [- f% B6 D. J, k
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
. H( W1 D- r- S) W& W+ |另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。2 E6 i9 ?! U9 _! c
( Z7 ~; L* h- P( {5 {, E
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
2 y: d* @" G* K! W' D! R2 D5 x2 w7 ]7 e, J5 V. n4 A
过去)。另PS游戏较大,改之前最好先做好备份。: N3 w( K# I' {+ n4 t0 a8 W; ?5 T
将改过的IPS补丁也放上来。:loveliness: , \2 @2 C7 _9 u/ n5 Y$ n

: |) y5 n3 `- z/ s  u[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
' U. A1 m9 ?: K- a7 x. {5 h1 g
6 W( v% b) c/ ~% f. t顺便解释下1 ~- ]7 ~. ^; Y# X7 `
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 8 x$ P5 a: c+ U: _
00021cbc: nop
' M& f, s6 A% o/ O00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算; r9 _) K& @* p$ Z2 y0 z
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
6 L1 ?7 Y' W2 ]; a) I- ^+ h
4 |$ C7 T% A# n1 i# Z从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果5 @! t* r: f4 ]4 t3 Q  P

$ T: x1 [6 b4 ^5 @$ o/ R. {以上是个人浅见,希望高手别见笑~~~  Q; E! [! J: x0 i1 Y+ x
! R* p/ [3 k; V  E5 I6 k
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2049 天

[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 发表
+ W, I+ y, ]) I( B2 X  f5 H应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,- z# P/ m' D# l. e* U  ?/ F

$ W' R! g' x( P2 y* M1 Q/ b1 n' |3 U" s有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,: q/ H( K  j" ]) m7 B$ g
有什么 ...

1 c6 Q  o2 W& V& U/ c: c$ f多谢了,终于明白了,呵呵呵:loveliness: 6 ~9 h' {' O* W# {  d: ?" z$ R

2 d+ _  x5 b& Q8 `* |8 `
原帖由 shinwa 于 2009-5-1 14:09 发表
* a6 U0 t/ |% c& L& O呵呵 不错 支持下~~~~
8 H: P# J" @+ U# C6 r
$ y$ R$ g) Q" B, ~3 j顺便解释下& ?7 o( |/ c3 j3 @
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
0 n' j, z  Y8 Y0 O! u00021cbc: nop ! `0 u  B) c1 ~1 Z
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

3 ]1 W1 y, Y3 Z7 H7 G/ L7 g0 N( O$ O) \9 j/ o; \9 W* h) H# f
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 9 D& T8 v3 t8 x) E' X# G, }; P

0 U; z; C1 M" j+ u多谢了,终于明白了,呵呵呵:loveliness: 3 ?3 g- L4 g$ J+ B4 O7 D* [5 C

% _3 r( i! J7 k. t7 J+ b8 v' J7 A0 p6 ?1 S! [

: i& P0 \: z& D0 A# T还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

/ t2 K+ O4 X1 |* _: Z4 g5 p
% H/ t4 g9 Z- Y4 c  u00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff
; T) {; I7 t( _* ^* A" u3 G2 U的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的% D: {" D1 f/ o3 R) A. |
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-24 14:19 , Processed in 1.080078 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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