设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
1 r$ `: H1 V0 l
6 z& g3 B# T' \有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,, b7 b9 {1 o( I
有什么错误及不足请多提出。& w0 I# e# I% w0 C/ x
/ O" z% c9 A; K. C. y+ ^
需要工具:HexCmp[Ultra Edit]
% O: G- z9 ?; f- ?- TPSX v1.13(Ps 调试器)
4 Q, `8 P9 C) iEmuCheat
4 C7 v) [6 {/ r; U" H" uMIPS汇编指令。0 `0 B4 p3 t& p; I

% l7 _0 S; d" @4 [+ F洛克人X5 EC:
9 D) C9 q, ?" d5 X/ X6 y  Q" p$ m人数:0d311d,2.4 Q; F: i% v3 j: K

- t3 b$ x3 W9 F, A! S步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
. f, l( z; c, r- ?  j+ L5 g& y6 _* W- ]
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。3 V" N8 G. P% W8 U" C) l
会出现调试器界面。: \7 p+ F  b0 J% p7 J2 G0 U0 T
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的4 D- A7 d1 w1 n
界面(Disassembly)。
& R: p1 a4 k2 r5 S. @9 \9 ?/ j右击Breakpoints的空白地,出现了添加命令的方框,点Add。
0 y+ E- N5 E0 z( X3 i# v5 [) [: ^& T- J4 f
, p% D1 _/ K) m* Z
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。( Y; L& N7 |& p; C4 j2 R0 O3 Y
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
8 k; G3 M% a9 Z# M9 v- Q) Q% e# f
按F9,运行游戏。
# Q1 A% r6 ~  J4 U死一条人后,来到了这里,看Disassembly。  L% K- j6 h  q- d( Z4 B

/ @: _7 ?4 T+ I( }# L
2 J4 g( h6 x3 M" {步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600# M: u9 t" f# [: W! f
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对. r: e1 ]# Y% M$ R4 R- X
7 m( k0 c3 o* i( a$ n+ Q
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
; n. J7 s2 g% q- c' A$ \) C
  B9 g/ m( [6 X5 g6 c. }步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)& ?- A$ T4 r4 S( d2 O  {9 w; r/ a
5 Y" ~! R+ z) y; `; E8 b
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)  t% b) I+ m2 P6 T' M  `2 v) E: Q6 Q% L
) r# c5 i& L' v) m% J
到了这里,201afdcc.+ D' D3 A0 v5 J" T) j

& D2 E: o' {" n$ ]. I8 ~6 C' T+ }  X1 O" P+ h1 g- b* k  _4 r
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就- V4 v' {7 @/ b( l6 ~6 }
达到了不减命的目的。8 i$ u, U, V- y# N! o) G( D' v
3 f, z3 E3 z. b9 W
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。6 d  i6 Q6 W6 v9 |
' @; w% u& @- L3 e2 ]( W$ T
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。  W$ p, ]/ n( w. d0 P; p1 P
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。( S6 w. A( X7 ~% U- W

3 D' j% ?/ s5 M$ a! o注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
, i; t& U6 m) k3 }9 |5 J
! M, d; p" D# I2 Z过去)。另PS游戏较大,改之前最好先做好备份。% k/ z; @1 Q0 n, A
将改过的IPS补丁也放上来。:loveliness: : n6 `9 x, Q) O7 ^# K  k' I

. d3 P- J) G' B" n$ e[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
5 @/ F" k3 D- u$ F8 v% l9 J8 E
1 i2 `6 m  P- g# Y- a+ y. b. c" k7 W% F顺便解释下
, j* a3 S' p: v$ x$ C8 ^00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
' |0 e6 k3 {* ?5 G* Z" r00021cbc: nop
1 `: x* `$ @  J00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算  A$ r; ]6 N6 N  E' d- W% E4 B
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址, {* r* _6 N) P1 p/ v% i2 v1 @

1 N% k% j) R' {从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
  l7 y' X& k9 O: q% [. E% ]
- H' O8 I9 u. {$ Q2 S4 L以上是个人浅见,希望高手别见笑~~~* x$ o0 M* X' f4 x0 J. R8 v

' K. D& F: V# \- n  L$ y[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1992 天

[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 发表 6 ^+ ^  t2 m' F
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
- U/ v+ W4 `, @5 |
. v5 q) `6 p) _/ r1 g. \有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
: C+ M0 U- M" J- [) B) k有什么 ...
1 y' a1 Z  Y" |4 X. ]' y
多谢了,终于明白了,呵呵呵:loveliness: 5 D% ?0 L% E' ?6 E& n( I6 K
% m: S8 [. g0 g& I* G4 @6 U
原帖由 shinwa 于 2009-5-1 14:09 发表 ( ~# Z* @7 J! _0 |
呵呵 不错 支持下~~~~
* E. h" L7 I7 m, e. Y4 O' ?+ Q( q" M2 I. t* K
顺便解释下
7 S: p4 w4 m# s4 e" S. S9 |00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 . B+ t, U" ]3 {1 s
00021cbc: nop 5 w* M8 z# G2 b. n. j( d
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

9 ]  h. s0 ?+ Y# E5 X9 n. r6 `- ~0 v0 g1 }. p/ k; a7 G8 a+ P2 \
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
0 f/ {' J" T% j, t
$ |2 |( @+ W/ }9 r9 _! ~  Z( T* x, I多谢了,终于明白了,呵呵呵:loveliness: : @% o  R0 v. ?. l6 E0 t

, u% B2 }, ?' z! I# ?. Q7 ]0 G! ?' k
! c5 B) t4 V( t0 f
  M  W: k2 m2 D) p5 B( ^1 _% Z还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
3 h) ^$ a, N/ O; Q

) o% i& [( b, w* z8 M00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了
回复

使用道具 举报

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff ( _$ O+ Q/ [9 P% j. R, |$ [
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
" c3 Y- d& H3 Z2 TPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-6-25 20:30

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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