设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,+ A4 j) W" d) j

8 H4 x  D# x. _5 q/ E( e有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
- ]( x  z8 K1 N( o& i9 w8 O有什么错误及不足请多提出。7 T: ]& o& h* F+ i4 Z0 {
4 G+ L: k( `8 c9 B$ h8 x
需要工具:HexCmp[Ultra Edit]
! H4 x6 f4 w: `+ f) }PSX v1.13(Ps 调试器)) E- ^" Q2 o) ~
EmuCheat; _3 X6 r+ R- a4 q0 N0 ^
MIPS汇编指令。, s) y( w7 v$ H) Q6 a' \* e
7 P- B3 U6 O, G* O: Z3 }# x3 E! X5 b
洛克人X5 EC:
: {* A! ?. z! p4 p& ?! P1 @) {( U7 }人数:0d311d,2.
8 V' v- q% v( M# ]: w8 T) N; u+ r2 I5 m
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。3 s2 z+ ~8 q8 g
3 y9 J: K0 G+ y+ q( }. y
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
1 x6 m: \+ {" p8 y会出现调试器界面。
* I: i! {- S/ N- h其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的  k: m+ b7 O6 I& g+ s% ?) R8 T5 z
界面(Disassembly)。
8 h8 k4 f4 s' g$ D8 d9 o+ j. \右击Breakpoints的空白地,出现了添加命令的方框,点Add。
' ?+ y8 P# j( F, L% }: [
; `) h' Y: b8 |  x- q% |8 t% d3 j5 X6 D
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
( Z" w+ f9 P) K8 |* d然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
9 p/ O& ]# R8 B- L
- ^/ k9 ~- p' H1 a: T+ [% g按F9,运行游戏。
& t" u2 |) j1 s死一条人后,来到了这里,看Disassembly。
" ^6 M* L4 z; u2 d2 \) |8 k) w  z# C% R! e5 h
, M/ w8 J! n% C9 T# `3 n
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
6 ^9 @* K% c7 E) J. B/ S' W上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对. g# l! F4 j" a! r- t9 ]

3 g1 u% V( x) ^' u: u9 V' c/ e这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
0 y4 h% I! a, l, V
, f( ~, ^9 C# z0 U步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
; \. Z, G$ s+ t) A# y
% z9 {. r) J! e- v" o搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)9 ?- B6 ~% o9 [3 ~# P

6 e7 @) i0 D6 b1 q1 M% c到了这里,201afdcc.
) W& f. q+ j: Q7 L! [$ x- i9 V! @$ G# l" O/ f/ Z2 f; Y+ E

- W* ?. m- h, s. H将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
2 ~( H( T& h  {/ T) j& C& M达到了不减命的目的。
& w9 r# X/ S- A, o+ L
+ F* m- x" E2 `; [3 Z( P- V7 J/ z0 U到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。' J2 n( x6 ?. w6 J$ I! H7 ^* T; ?
6 q- H2 V3 T0 j8 z8 i
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。- e7 J+ N3 A2 N$ N/ F7 v
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。' L' ^. [& K/ Y4 d
( W5 Q6 }0 g  Q  P! H6 r
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
& P6 H0 M; g5 A: q. `4 h( _& r1 Y2 c8 s- U" E% `6 d( y" G
过去)。另PS游戏较大,改之前最好先做好备份。6 [( k) w2 Q0 ]  k% z; B
将改过的IPS补丁也放上来。:loveliness: ( ]( ?; e" m6 w2 g3 T. P, `" p
/ z' @% N5 c8 u, o8 }2 ^7 n
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
% R  w7 k7 j  W5 k; F: m" n3 [: g' d+ d& ]
顺便解释下/ V5 B1 Z( z% W7 v* I- U0 M8 O4 `
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" p0 z- g7 s2 L1 P* T5 d! p00021cbc: nop
' N# Y9 J" t! k- F/ |% T+ L00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
: D  }. k% s4 F+ P, y5 F00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址; Q4 _$ V* y7 d! x, p9 Z
5 d9 v4 H. E4 B1 P$ }' V4 f" S$ A3 W
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果6 G$ l* Z% G4 \# z6 r

3 J) y) P- N: E以上是个人浅见,希望高手别见笑~~~* f* A+ j( K/ V( B$ J2 K

) h( N5 O$ }. g$ B+ L" J# |6 \* h[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1897 天

[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 发表
: A% U4 X6 I/ n% y* L" M* w应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
1 U+ d! y0 j6 G" O+ @3 Q7 z3 K- \, f3 M8 W
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,7 q9 Q( c  F3 o( G: H" f* p! V
有什么 ...
. D- A6 i" {- X6 ?# D4 |
多谢了,终于明白了,呵呵呵:loveliness: : U( Z: |1 L& y. F2 c- i

5 `/ ?  Y) ]/ c8 R8 K1 M
原帖由 shinwa 于 2009-5-1 14:09 发表 ' b% T: ?! m% y8 Z0 z1 \
呵呵 不错 支持下~~~~) f. t5 T% d+ W$ o  M
0 r& t, ~$ K- m- ^0 S  o
顺便解释下  Q8 _* y0 r/ J3 B( C1 E
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ' H5 Q  g0 F! Q0 e- k1 i2 g& j! E
00021cbc: nop
( k1 v  t! c6 [00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
9 d9 I) ]# i' d; l

! \& r  C' ~$ [! b3 C还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
2 F$ D- h! B8 @1 _5 G% z; n2 Y4 H0 x' E
多谢了,终于明白了,呵呵呵:loveliness:
5 I) c& U% M# c+ Y2 a+ `8 ^7 \  @: ~* v( n' h
' f% p+ }2 L$ u/ y. l
/ t" ^4 E4 X4 z9 x" i5 b
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

% p+ L( l8 W2 D9 _) M6 d
- _! _1 B+ ^/ @2 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 ! u4 @6 j& {  y+ s
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
$ r& K) w' c  qPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-16 23:36

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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