EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
/ \- _/ x  t4 D  n% S! z& S
/ P' N" e/ ~% ^: D' I! T有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,1 u2 P+ E  O( ?* N) h3 F/ ?$ P
有什么错误及不足请多提出。
6 \; U, f  p2 o7 K( r  o% y" B8 W  e- [4 h3 P( p' |
需要工具:HexCmp[Ultra Edit]
1 R- i) S) c/ I/ YPSX v1.13(Ps 调试器)
' X, [9 t& {& r* d- J2 VEmuCheat' S5 A$ Q4 q$ ^9 t! I
MIPS汇编指令。
# y; |8 u' f& O5 s( C7 ~' O1 V6 M/ d# F' b4 r' O
洛克人X5 EC:, N" j) V0 k: h9 B8 u
人数:0d311d,2.
9 E! E! B/ q# z9 e0 u
8 ]- Q" R0 |4 [, I7 ?5 R2 k步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
  c9 F3 N8 ^8 {5 A
7 D7 O5 ^7 g/ `( J步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。% P" W8 e4 r; g6 V
会出现调试器界面。' _0 T, Q9 [: {1 O7 W
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
0 d  v4 ?7 V' h; ~7 k0 B/ k3 [界面(Disassembly)。! V- d+ @, R* X6 y/ y) N
右击Breakpoints的空白地,出现了添加命令的方框,点Add。8 c6 y  v+ I! C' h5 q) z9 w
+ i. }+ k, n7 x2 X
9 }  n8 N/ s+ F
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。( ^+ _) l4 k$ P( e* d9 V4 z! M
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。, n  `- [0 |8 Z0 _) U" y" _
9 g6 ^4 m& R$ J5 e4 a% H# c6 c
按F9,运行游戏。
0 k8 ?' w# R  y死一条人后,来到了这里,看Disassembly。
3 v* x, K0 d7 V0 ]. j4 M* K+ u9 U% J' B
5 g* C# v; h% A5 p
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
# x# Y- |8 B$ g7 [( d' G& N上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对* T- b7 M) R+ x& s3 `+ C
$ U' T/ a" M. g+ T3 W
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
( {$ j0 i; ?4 g% M* v% H1 J  H) v% V6 J
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
/ I6 F3 q7 d. y: _6 W$ T2 ~7 {- e8 ~5 V9 N! r; o
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
( W) `: m5 x9 W3 y1 V; S9 G
  I1 J4 i3 i( E" l8 J  V/ T到了这里,201afdcc.
2 m! z2 [" C# s' u, V- P0 ^7 M% o: b% b( O

1 b/ u: G8 _& v* l0 C: W将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
1 x. V7 H# ]1 D5 r) U达到了不减命的目的。! \- w" [9 E0 L
! P/ h  E. ]" l& I# F& c9 D# D
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
+ d- A3 K! m$ b6 I% G9 ?
) g- F# \% X3 h0 V- }说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。% L! a: L; f+ q( k9 c' @
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
8 X" N# r- a+ L1 }, k" `, d4 p" M! ^' Q
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制+ K6 D3 e8 M8 L4 A, [- ^) t

0 @: i0 o& A2 |0 y+ i- j过去)。另PS游戏较大,改之前最好先做好备份。
" H& v4 e4 J/ w- V将改过的IPS补丁也放上来。:loveliness:
% {9 x; q5 P( y2 S% T
' S1 ~+ o5 a- J$ M; `) K[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
7 w+ [) }/ T0 P% u# s2 n( A0 A5 y
顺便解释下; M" j! o+ {5 J" \6 B9 `
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
+ U" C: J  i4 B& [00021cbc: nop
) }& f! [% N/ n, C# s, i, z00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算4 n2 [, C9 k0 r: w. m
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址  m' m. k3 W1 D! z( D* m

& y; x) |: e0 n1 n; g# w从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果9 v; {2 F8 J9 D+ i* l5 S; x# }

9 B/ }, f6 D1 p1 `以上是个人浅见,希望高手别见笑~~~
' O* G( L3 p+ v2 p9 y) {4 U: Y& m) ~, f3 O9 U
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1972 天

[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 发表 0 ?; M) F3 A% K: b! m
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
! Y' u4 G$ ~3 q( H; o* U' i+ v* P% Q' s9 N* y" d& h
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
. K' R0 n4 Q* J, b$ ?有什么 ...
( |4 `6 m5 J2 T( o1 Z* |; K* j
多谢了,终于明白了,呵呵呵:loveliness:
) W4 E2 c- V3 z( V5 `& Q5 s3 U5 L* o6 o6 J0 C7 G7 q4 U
原帖由 shinwa 于 2009-5-1 14:09 发表 3 |# g2 l0 H  `' u- L) I
呵呵 不错 支持下~~~~
/ y" v! F* F8 b5 K- T# n3 N- t9 V$ O. l. g6 j; r
顺便解释下0 x6 n. v. s0 q" d" h) M, H
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
0 v. g* v+ W" \00021cbc: nop
& B4 b& f1 h5 y. r00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
" p8 _& x( e$ F* u

+ p( I5 s1 b7 g+ h还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
& [4 n' O4 q* p; I/ `* o
6 z0 \6 j1 ^" B, J! ]6 k多谢了,终于明白了,呵呵呵:loveliness: , X5 D" J6 U! D! J' V3 Z. B

2 U/ N  m" L. s: O8 N$ h% E" h2 Q- O+ o. w2 [
! X8 L8 P) a& j  N; L' f& e% @
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
. k9 P% M( E  o; P8 r( A

0 w9 l3 z" ~2 X6 i8 x! 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 6 l% y, M0 J6 t# X" }! Y0 N
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
7 ^( U! D2 A. [( tPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 16:59 , Processed in 1.090820 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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