EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,; E# S' `* p( w& O" ]3 h
( n* _. ]2 M& |0 F
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,' G/ J# D& D! N; u  {8 E
有什么错误及不足请多提出。
% O3 K% c! p' x7 \6 w3 U/ W7 d2 e8 B: M* X7 t
需要工具:HexCmp[Ultra Edit]
" J/ @$ Q7 X' z; q  `PSX v1.13(Ps 调试器)
/ V- J/ X4 V/ U$ |- l- T" N& ?EmuCheat4 S# v. A0 n& M# }/ j: e# V, B
MIPS汇编指令。
+ r  b3 b% ?0 B! ~/ k& s# j0 R3 `7 t% F2 i2 t0 m9 M' e. r
洛克人X5 EC:) q: |3 W* w6 |; T/ L" e
人数:0d311d,2.
/ P8 V% S) |% l; B. O" c. _  A& c4 q" b1 ^4 _$ G6 z9 G- O
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。0 v" X% H) i1 t) M' ?+ N" Z

; \0 ?2 N  Q# x" `7 D3 j步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
) l5 y) g( J% {- A- v% Z- G+ G会出现调试器界面。
5 C+ D! T' L% \! t  ~' {其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
2 ]+ r9 M/ F, ^1 s; O界面(Disassembly)。; P  Q. T) X- i$ E0 h+ _
右击Breakpoints的空白地,出现了添加命令的方框,点Add。, X6 ?/ _( M, s

9 b, |2 i+ S5 J( d6 N: A  N6 X6 b; _+ g
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。$ z0 h: a1 x- d
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
& M, i. ]  ]' T% ^: j
, S% L- b( n# B9 }: e按F9,运行游戏。& k; w% R4 p$ i" a$ ^1 ~
死一条人后,来到了这里,看Disassembly。+ {  G2 Q& l! S2 S
9 ~( n3 r4 N( v$ m

8 P' n& D5 V6 c; e步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600" |3 |: W' A( G+ T
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
1 f3 M! p0 Q0 U3 B% H
4 s8 o1 F4 g/ v+ i8 X这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
$ N+ p; }  ?# r1 z
) X, q: s! N- k/ n9 Z步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)0 b$ Y. ^  I% y

9 a2 X" ^$ W% q搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
, \: D3 H% _1 Y+ v( x8 b" y1 H, H3 e  @+ r6 ?
到了这里,201afdcc.7 y# @7 C2 _; {$ I1 d2 |+ |' I

8 A: [. P1 W9 m, e. r2 M: D# D) G' N0 m! \. y
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就. P+ E) K! W+ R% A; \
达到了不减命的目的。0 t( u& W# Y" Q

' C! F1 l+ C( j3 r" c0 l, K到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
. C& P  `: P& s8 ^
3 K# L1 i" K1 V% A0 w3 p7 E) Q说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
0 x9 ^; g( u# y  D另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。: r7 ~6 {- K% u- N

! Q* ?) I- p- n9 o注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
7 B$ p) l* |* J" n3 G
+ s( n' G  U5 |4 G过去)。另PS游戏较大,改之前最好先做好备份。' o8 B: w' E# ]4 r
将改过的IPS补丁也放上来。:loveliness:
, o" F8 K; N; s* H/ A
9 r! s5 Z0 h$ c4 Z  E' Q% B+ u' }[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
2 W4 ~- v2 q; W7 Q) M+ K3 s
! ]5 ]3 N9 e- W3 j顺便解释下% f1 Z! y# g/ a5 Y/ F* U
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
/ l+ M% ^$ G5 d' U$ f5 ?. s00021cbc: nop ! ~; y1 d% c* [& u
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算8 A" y9 X$ y* r2 y! d
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
) |0 M# J; a4 G) M0 p4 e& l, z$ E/ r, Q0 F
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果. r7 C* E5 N, j$ G6 f9 k6 n

) @5 e+ s  V$ _" h& J以上是个人浅见,希望高手别见笑~~~# L$ `/ q1 {/ P1 i

% f8 m" s" O0 b3 ?- Y( O' K[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1973 天

[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 发表 9 d8 P$ v- ?; o
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,- T* q& o- W: [" f9 ^; e- V

% U0 D- C6 y4 t- `" w5 g有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
- p- V( J/ F- v; i! r& K有什么 ...

5 [1 N0 ?$ O* W) M" D5 O多谢了,终于明白了,呵呵呵:loveliness: 7 h$ ]0 b( R/ ^# T! a8 S

+ `9 ]2 \3 T9 x2 w
原帖由 shinwa 于 2009-5-1 14:09 发表 $ ~8 Y4 ]- d2 M* [6 A
呵呵 不错 支持下~~~~# p1 r# R& ]) W

* M- @: h( M; V& @. E; _顺便解释下
, N3 d5 ?& @1 R) v00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
& @- n6 p% E# _9 B7 n00021cbc: nop
: a1 |( u$ a/ y. t1 o00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
9 U! m$ Y+ T0 ?
- o+ B% X  r: K8 K6 Z8 d* U
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
; ]8 T. D$ w3 \& r: B1 P) t7 O5 T* E! ]2 v2 R. {/ X3 e% H
多谢了,终于明白了,呵呵呵:loveliness:
4 g2 A' [  l) M) ]% ]) r4 c/ O; O# w/ A7 ^7 O7 A; m& M4 K; g" ~

; K9 C- Q4 `( A' i) G- p4 v( D# s
; i0 j% Q6 g7 s- [3 |还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

: d2 b3 r3 c  ?3 q7 U3 m; s
6 |9 z& _0 C; b* v00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff 3 r8 ^& S* u1 Y& I2 O
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的. U& R1 B& G# ~/ M1 ^
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 06:21 , Processed in 1.083007 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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