设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,! X8 X  H; W, [  X, x9 ~0 f& P
% d9 p. s  v0 c0 u+ \; R' O
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
+ F: H1 X9 A1 O; @有什么错误及不足请多提出。
+ {6 F6 D+ [: T) O) G) f' [% F2 K9 p# T! G- y& i
需要工具:HexCmp[Ultra Edit]
& q9 [' A. L1 c( T* @! RPSX v1.13(Ps 调试器)$ @* x! `! p  ]  l% g
EmuCheat
6 j8 C; q+ N- T- MMIPS汇编指令。$ v$ [7 Z/ p# E; W4 q
" S  Q; \' ?9 k7 ?6 w
洛克人X5 EC:
. x2 R3 C+ W8 H- @, |人数:0d311d,2.- H3 ^* Z9 h4 n
/ b9 E9 q  |- h% ]% o; c" C8 b
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
; V3 Q1 w5 J* i; |4 |
  |: R' s. ~! X, s步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
  {. t" j6 q! I: M会出现调试器界面。' Z# Z1 C( M& t+ q
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的6 ]& F9 o& G* W  i
界面(Disassembly)。5 F5 y& x; a5 k9 J) c6 q( |* Y4 M
右击Breakpoints的空白地,出现了添加命令的方框,点Add。8 i+ s1 {  }9 t

/ [5 F6 z, ?5 j5 n2 v' ^: H) h; n% y/ W7 [3 y) \, N" a- N
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。# q8 s- @8 F4 Y% q
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
) W  x2 M  l4 E/ {8 ~* `7 ?7 b4 J4 C0 d& k! Y4 K. A
按F9,运行游戏。
9 j- F/ y* C1 e$ {% [+ L死一条人后,来到了这里,看Disassembly。
8 s! F, V. w9 b: R$ R5 j( c) e! T5 J, G. L
5 d& f2 N8 Q; _) X( h$ J  m
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
$ x0 K5 s# A# _6 m5 Z7 x: h上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对( G. B0 ~0 z1 {3 b6 y' U/ A

- J' K) ~  d+ M4 t( s( X这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。- E4 A0 Y+ Y, n7 a+ x, D
9 t0 m9 s1 S$ t$ d" b
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)0 ]" z- ^% f/ e$ G7 i6 |' D
' _  @% I' K6 G/ v7 J# c3 C! M
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
- \7 C% e4 z& h+ I$ r! S0 Q$ E) }1 c8 }/ u1 z5 G4 N- |5 h
到了这里,201afdcc.0 R/ F* ]9 L: y, ?

$ H  e7 N, J" q' k* f0 J9 J
" @* E, n7 l( E7 {. n将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
$ g% Y8 N$ q5 F达到了不减命的目的。0 p; D! E6 e7 O& }0 E

/ M3 c2 }1 \( v8 H. e1 p( A1 i到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。* c+ D2 h/ u& V8 X2 d4 z: @+ X
* \) n! D7 t, X% D
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。0 u& f+ i7 R" q2 {- A6 m0 Y, I. K
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。, ^4 r$ g8 [! `8 `9 p9 O# d
3 b) q) ]! B4 M/ f9 y% o
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制/ H" X+ S1 q0 w9 b( N+ y

: l+ ]/ H$ s  f/ F过去)。另PS游戏较大,改之前最好先做好备份。( I' u* C6 s! ]( R5 a% g9 }4 D
将改过的IPS补丁也放上来。:loveliness:
: w. m! `+ z" m
# \: I' R1 H5 T1 L' R( O4 I[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
; J2 @" s6 K; A, s0 O, D, q8 @& `% |& F& P" d
顺便解释下
/ @+ U5 m% v6 e+ Z8 Z8 ^" C8 R! }00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 - L+ T$ Q. c- W- k+ j" o: S
00021cbc: nop
" f2 f/ j/ D& y5 ?! d00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
% H0 X" [9 {& ^" j3 o0 B+ f4 N- W00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
2 N  Z3 k, x  D4 i" h8 o8 |) Y. E4 y
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
( W! E: p- {" ^, V2 B0 ]% {% [7 I: J* S* Z
以上是个人浅见,希望高手别见笑~~~
, Y. g6 t/ g" a
. o+ [" \1 L5 Z  a. m; t6 a[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1993 天

[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 发表 1 j2 I6 z8 f! K
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
* q1 J8 D) n9 }* c7 ?9 t/ p% p$ S2 y4 Y5 @2 \
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,; U6 M! ~0 C* ~% l4 i+ a
有什么 ...
% w4 V" H3 `" O# Q4 y
多谢了,终于明白了,呵呵呵:loveliness: 5 p7 X  x( ?/ j7 z) c9 Z
9 a' D# H$ Q) W- `; d/ M! H8 }
原帖由 shinwa 于 2009-5-1 14:09 发表 $ E1 P6 f# a: u  Q
呵呵 不错 支持下~~~~& f) W& N9 G- _5 i: X
7 |. k/ ]" D2 l) G1 F4 W
顺便解释下" d; Z% D0 H- i# r( F* w1 Y
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
! f* C. a$ e, D6 [. @0 m2 G5 i00021cbc: nop
+ U2 h; h7 d5 e  u6 o" M- O00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

/ n* R3 j6 H5 Y
( P: [; y" S' |$ ^4 n. o3 C还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
. O3 R1 j, Z; N* n) J5 b0 e1 J4 a5 m( A
多谢了,终于明白了,呵呵呵:loveliness: " t+ `6 t  V$ u- `# S* g( a/ N" ^2 V
* X: J4 [! O  h
8 J2 o7 B) j' c  y% g+ t) A  `/ o

% n) b( c$ S* h! m9 Y还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
, w2 V+ a: d& T6 \. Z
- C8 z8 s3 S1 g% d4 V- z9 L
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
' ?+ L, H6 n+ S" I9 M的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
" e3 C6 n* k, o* jPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-26 01:29

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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