EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,; H* R# {5 Y1 v6 S3 _$ `0 e& r6 m
8 F& G; y5 H$ X! B9 r
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,9 I1 {; F2 u6 |0 G+ S+ l
有什么错误及不足请多提出。
8 p2 e  i( Z0 Y8 z- V4 X/ z5 C( Q1 |5 F2 X
需要工具:HexCmp[Ultra Edit]
7 R5 k8 d" I; h; Z# ]PSX v1.13(Ps 调试器)5 _# q4 s- v( W% {8 X# m/ ]" x
EmuCheat& s/ H1 i7 f: {
MIPS汇编指令。9 T& _$ x; i0 h1 L9 s
. l* i$ x9 {; m: o! G9 d/ t
洛克人X5 EC:& o  V0 E7 ^0 C* ~5 m: y
人数:0d311d,2./ b' N. l; T% Z" d
" w! C) X8 P+ l4 d/ ]
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。$ `* u: ^6 F& ?; s0 X4 S% e$ w

% d# S% Q& v8 H2 `: c, }' p. U- C步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
7 `9 S1 r! O. V4 i- t会出现调试器界面。
4 z: t1 p3 x3 ]3 I9 \其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的* l4 Y7 u* L6 s# i  [; K+ g
界面(Disassembly)。
0 C$ C" }' \; a5 p. F& U. _右击Breakpoints的空白地,出现了添加命令的方框,点Add。4 D  R: k5 ^+ Q( [! E& j" n
4 r9 c# L4 D1 o$ `
% z6 t* p3 u$ B3 j
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
2 w! P1 L) I9 D( h6 b  ?然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。; ~# p7 h: }/ W
6 x- H5 u1 w( L  F! o! r
按F9,运行游戏。
" V' W( K, r/ c' X! [+ P死一条人后,来到了这里,看Disassembly。5 o! @+ l" l7 b% V# @+ {

8 I: x& O* {2 b  D" H0 `9 `+ ~1 h' ?
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600. f0 t2 p7 s; z1 v4 g( E
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对4 P9 K/ @# {9 [3 r/ O6 O

) D/ u) N3 R# o! y" p这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。3 A1 a) F0 E5 i% @

0 N2 x! u( |! O9 X: n步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)' y" m2 t1 ]4 J; V! f- Q

% m) m" h' m1 D- W1 f$ k4 e搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)8 l  O% `. |# P+ o

9 ~4 Z- ~2 H0 S到了这里,201afdcc.- j- s& [) G# P2 I! r0 S+ h5 x
& g5 P# P& o  B2 M, {# k
4 t  ^0 p3 Y2 n7 E2 M  v, J4 F$ t; [
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就$ r1 v/ ^5 a0 [: W2 G# G
达到了不减命的目的。
7 }. @; ~4 u* D/ P5 g4 M+ a# K5 M0 m* _% p8 Z: J* p1 g
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。. n6 t5 |4 n2 z8 D. x2 i
: l: O2 t( ?2 N! l
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。, C6 n3 t, t, c* `
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。& Y0 H" m; J9 {( E% L
7 l# `; e5 J, ]  `( ?) o
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
3 x8 t3 D- L* W* N7 T$ u* `2 v6 m& X: U7 U& Z4 A! b
过去)。另PS游戏较大,改之前最好先做好备份。% m2 I! C: r1 o% |0 D: b- m
将改过的IPS补丁也放上来。:loveliness: : ^- D( c% ?2 C* o' H$ q3 H
- N8 o9 u1 _* |
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
! z2 `* q7 e. @+ c9 @, S! _4 J, `8 G" r
顺便解释下# k5 U) P! h8 K, B, x- z& E6 Y, r3 F
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
8 Z5 F! W4 z" q. a2 F* J00021cbc: nop 4 m. a' s2 ]' V0 N
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
' ?* F; K. @/ x! _6 X00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
6 a7 X/ q6 s. [6 v9 g6 `# X5 Y( c; i9 A0 p. I* i& e& e/ Y8 Y
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果) ~  t: o2 P+ K# C
  Z1 s/ ^7 H. m+ t2 ]; @" Q2 e
以上是个人浅见,希望高手别见笑~~~
0 n; x$ C! f  C+ X
/ K- b" X2 v& T- F[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1977 天

[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 发表 4 j6 j+ k* |% w) c4 O& p. T2 A
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
0 Z! g- U! W4 p1 e+ H$ W6 z' x/ x  \" I3 t6 f: ~" L4 o, _- b
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
9 f5 V. Q  {' \6 f" o/ \3 G- S8 \$ |. d有什么 ...

9 \' Q, J9 a2 ]. `* O! {4 N1 h, g多谢了,终于明白了,呵呵呵:loveliness:
, [2 o1 L0 ?) h) @0 n  w; F- o' l- e7 I& A
原帖由 shinwa 于 2009-5-1 14:09 发表
, I) }- s. n) W9 D呵呵 不错 支持下~~~~
* W# H& I* l6 Q
; q2 }/ E! O5 ?4 q) q; A. o顺便解释下* h. S1 A/ _; O6 {
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 / O( ?4 {. o2 L) r% |: Z, \( I1 H5 k# X
00021cbc: nop 9 {, ]' S$ O/ L& W
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

  x! Q* S& J" ~+ |& K+ g2 t/ j9 F/ |& `
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 & [* m; s9 N8 m6 v
1 d* V3 u7 }& b! R. |/ O% e
多谢了,终于明白了,呵呵呵:loveliness: & g& ?- W4 k) }

; p( D4 J" H9 h7 i6 n! y1 Z0 J
; _( g- f4 \# p
& f* L. u1 e; [# V还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
3 {" e. M8 R, ?9 \/ P

" G- [& a3 j' t+ j1 z, j00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff % P* M: b& y" h/ }) l+ e1 {0 l8 d4 p; a
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
* i, r' `8 h' O* uPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-13 16:25 , Processed in 1.094726 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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