EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,5 c& g0 ?; m* ?. p; I3 \+ \

8 L& S1 E% A  I4 T: _7 }- c& |. z有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,# X5 a$ {9 E( W: q4 w$ h7 a2 @8 Q
有什么错误及不足请多提出。
' G' K  P$ M/ J! V; s& X$ A: h( q% A, h, H
需要工具:HexCmp[Ultra Edit]
3 E) O- n& Q( S; s8 X3 ]: FPSX v1.13(Ps 调试器)
) S+ k' d+ _5 K* ^. ^* e2 S/ i, uEmuCheat0 L! \1 |8 V6 r1 y2 j1 W, K
MIPS汇编指令。
0 T1 E6 b8 c5 g3 K# F9 `* G6 @) n% R5 |
洛克人X5 EC:
& U9 @8 n& O, K5 z" U  h+ B2 p人数:0d311d,2.
1 ?9 [8 X8 p  `: A9 E' V  q9 m
; f* O( w- C: O7 }8 e! k$ f步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
4 y* P8 Q9 H0 s# M6 z4 x
! l0 C7 D# C5 _2 S5 H步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。2 L1 B2 A5 L+ b. q
会出现调试器界面。
/ e% {1 ~5 l, z8 m. P( j/ F/ p其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的+ K2 h9 r) {+ J" t1 K
界面(Disassembly)。
2 X4 k9 h1 d0 y: T2 v/ G6 L右击Breakpoints的空白地,出现了添加命令的方框,点Add。/ |  U! K9 B* _' I& ?) }* p" O
% W8 Q' z) l! c" b, l* N1 h0 P

4 ], S& I% i0 i; ~7 _: Y) ]. j" ~然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。5 O9 s6 z7 ^. f" j% U$ {) M* x
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。; X1 ^& b6 S. {% q3 F& Y

! C' Z8 [  G1 v0 C- W! }1 S按F9,运行游戏。5 Q4 I; M3 ]5 Y2 k
死一条人后,来到了这里,看Disassembly。
- y+ w4 z5 w/ P9 D5 g. U. r. Z( P, `) c/ S& g1 n: ?5 T
5 Y8 A0 w- ~$ h; z  Q
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600) t8 V8 a7 a" K; Q2 n
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对: K9 q/ c% y# j; Y* a

7 T( Z- T% t4 O+ o+ I9 S3 w, g这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。) m  r& V* W2 ?3 j" \
7 Y2 ~* j5 A" F1 h! f- o
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)9 j! c) u5 ~' }  ~& {/ H: M
8 G0 L% s& g& k, b! N" {0 Y- E
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
8 H' h( G3 I* P1 M( J' v7 w
% y+ L" Z% p; o7 u  L到了这里,201afdcc.* s' N0 F2 [, g' W% r, U/ R
; K  Q7 |4 \; S6 N5 Y9 K

+ k" }4 P. b8 ]% `1 M' F- w将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
  n2 j. W- e2 a/ B. j达到了不减命的目的。; E) u; d" ~. e% O) s* |

. X. \9 D  g: h7 {到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
3 J0 d* k' U6 d) \% f. d5 R
- `1 T- O( x! o, w9 @8 f说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
% t* J" P; k/ T" E  C* ^* j另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
+ m. o9 J& A! \( I: u* \# P! s( z9 K! D' D5 Z
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制! b; o+ D, w4 y4 i1 N7 o; a3 K
* T1 K6 {4 U* m0 }/ T' }
过去)。另PS游戏较大,改之前最好先做好备份。
  C: |: {: Z& l0 ~/ h将改过的IPS补丁也放上来。:loveliness: # Y7 K0 i  b4 s  L% Z2 i* M

- h% O6 e2 g" @* ^/ I- O: K[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~4 R2 x% ?8 \3 O

4 N! N+ ]! B3 ^# _$ S. F  m3 a顺便解释下4 e; ]9 k+ r0 B$ u" p( Z
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 6 M+ W* D: g4 _* u8 x1 B/ h/ J
00021cbc: nop ! a7 r+ I$ k& J0 V$ ^
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
9 R/ i- |. K) G# K' j00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址8 e  \7 d, V9 c
$ {  Y, \0 [2 u- M& Z5 r& n# _
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果9 p5 A3 R' g- |' O

! u; S( H  G, ~2 A: O以上是个人浅见,希望高手别见笑~~~
- `! N. j/ C% ~# w! _
7 K' o. m+ a/ S8 s1 q* S[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1925 天

[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 发表
2 u7 v4 U  ^/ n  k2 A  p, g应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,1 W! |+ p1 q' E
$ @* b: t7 m8 f8 G
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,/ c! a- n+ P5 m0 d7 \7 t
有什么 ...

- _# E2 @4 e, {  [3 X多谢了,终于明白了,呵呵呵:loveliness:
4 U3 ?# ]7 W2 W& \% [  ^
( S" R2 x4 `0 d: C+ ^" \) @. Y% B
原帖由 shinwa 于 2009-5-1 14:09 发表 6 y# d4 u: a3 L, ~# n! G, P; w% a4 S
呵呵 不错 支持下~~~~
1 X. \* @4 |9 Z& k9 ^% ?: Z3 V! q2 a. P/ Y: s9 ?% ~% O
顺便解释下/ a2 H$ x6 p- V* o6 ?. |. @" o' T
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ! F. K: J) M- ]3 l% U
00021cbc: nop & ?9 R$ V4 e6 I4 s! o
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

3 m* \0 B  a7 A
' W% o, X2 }; Q5 U- u, e2 v& Y) V还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 ( {: b# }! c0 [- v
2 F( ~* D8 ~9 Z& L/ o9 d* ~4 ~
多谢了,终于明白了,呵呵呵:loveliness:
% U8 ~$ z# ]+ a0 _- \3 b' Y
; O2 B) W3 }6 Q: h
* y1 O* S' q' J
  \& O8 N8 p; F: r. a还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
* \* }' A2 s; _4 w' \
8 `5 Y3 u  t5 m% ^2 h% 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
) A$ l' h! _# s/ ~* b: _1 P的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的9 s$ j$ H* Y" T: G' {8 l
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-20 10:06 , Processed in 1.167969 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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