EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,* x) {, R  q+ ]
/ r$ L$ J( ~  t# n
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,, ]: ?6 }) [9 Q6 d
有什么错误及不足请多提出。" E# [/ S7 e( x# B+ |4 y% y( o
/ q4 x7 D1 G. H1 ~+ Z' u' ]
需要工具:HexCmp[Ultra Edit]
" f: [' w: R" |7 r# B3 APSX v1.13(Ps 调试器)* K2 C' ^# `7 M. w
EmuCheat
: K3 t6 _- F7 k2 V4 g" nMIPS汇编指令。
3 m. J! h0 M) s9 J4 \
$ q) V/ f# }& t5 b; @洛克人X5 EC:2 u. c9 \" l$ @/ a4 M  o$ e. h
人数:0d311d,2.
" }7 F  S8 q) Y8 p7 C  o8 m% I2 q  |$ l! W8 N
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
0 C7 `6 G1 W8 [. O& D$ E
3 ^1 g# m7 {9 h5 o  Y步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。( w9 t! ]. g- p& X: z
会出现调试器界面。, F" o) W; w$ S. ]3 a% J, j' i
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
" H- t  X1 k5 u' f% s界面(Disassembly)。& B" q9 t" P0 r1 I- g8 ?
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
; D7 |6 F; l, }9 j, }' g& h3 c/ i8 W# |+ c, J5 j- o) s/ y
, ]  t' D0 W) S4 j2 g- A
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。. l  J, S' W- Q8 \8 j
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
! t+ W* G' ^6 y- @# n. v$ O. t0 {$ z+ Y' \5 J! J$ `! G
按F9,运行游戏。
; R9 ?' t; y3 [) H死一条人后,来到了这里,看Disassembly。! i$ Z0 H' Q% H9 B' ~6 {
4 Q0 h- M9 e0 ~* F9 Z
; R. T* Y2 L/ W6 U! r
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600/ g( a8 c' r2 c( T" g
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
$ o+ |  X  n( G* V
1 Y6 ^! `* ?$ Z( h* j这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
7 D! u3 T) ~7 n' [) l
  \7 ]9 [/ K1 g9 }& ^步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)- t/ H8 I6 m( S7 X4 \) Q6 F5 q

; H5 h/ ]7 u1 p4 o6 K搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
8 N! T& y! ^: A. \# m
5 g& |# N$ W) R* s; ?; U到了这里,201afdcc.
5 R* P+ Q: \4 @8 v
. S3 ?$ U0 j1 ^8 s, i/ P
" R6 b- l0 g/ i# Z将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
8 a+ L1 ]' @$ h4 u达到了不减命的目的。
6 V( p# u7 j4 _1 N( p4 i
' A. T9 F8 ?: u+ x到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。: _( T' c% h" D' z% G- F9 f

6 w. F% N, s: a4 J3 y/ ^7 v说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。: x1 E( v' c3 n- ~" e7 t" Y
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
0 l: {8 t8 V" ?4 ~5 |. u
( m/ t. V' _$ @2 W* t' V注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制2 F/ y0 g6 p, b4 W8 ]2 N- |/ w
. X* t* n% h% Z, h
过去)。另PS游戏较大,改之前最好先做好备份。7 }" w' G5 s* b; U0 z$ B
将改过的IPS补丁也放上来。:loveliness: 5 W7 ?, }3 o# y9 T- |

: b; C. ]: D  H% _2 L! D5 z. m# D[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
5 z$ v, V5 G: S" Q8 D+ Q; i! o7 N, Q
顺便解释下
' c3 A% f: ?% Z2 u8 b9 b; _1 }& ~00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
8 ~  D) V& }- `# }  x00021cbc: nop
4 b. M4 l5 d; s3 Z00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算4 |; k: y: g& F2 F; S
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址" E' B7 g4 Q8 D4 B  K1 X

# ^; p3 {5 h6 Q* F3 V从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果* W( [3 u' ?3 h9 @) Y9 r) q* A

( E. w( d8 I; E6 J9 Z' D/ y/ P以上是个人浅见,希望高手别见笑~~~% y% s: W+ i0 u
, S! }; ~! _# @# ?0 w/ M
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1887 天

[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 发表 : F( t; o/ u# ~! f) i
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,6 a9 s' Q( ~5 I8 R( c$ _
" O$ Z- Q5 r/ ]3 O, P; b
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
7 L" g) D6 z# {' f有什么 ...

/ f. x2 J9 i+ S+ |9 E多谢了,终于明白了,呵呵呵:loveliness: 4 R: f& J, o. t0 _6 |1 B

# Z3 f4 K7 D8 e0 |2 s8 d8 R2 A
原帖由 shinwa 于 2009-5-1 14:09 发表
& G' `+ f' F; ?  N! t: j- R呵呵 不错 支持下~~~~
/ G# B! f, L! y. P" U. R" e* s" T- g2 I* p5 G
顺便解释下
/ v9 A' r2 C' M  @% A9 q00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" T. F4 i7 i3 v' z. ]00021cbc: nop ; i$ C2 m3 t. u9 S. w# v) k
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

) D/ k! z. A- z/ T$ M' \4 Y8 R4 c- }6 f" b( O1 u& G
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 7 s& P9 D! r* F3 \* ]! r
& N+ l: b) I8 W& G* I- D3 n
多谢了,终于明白了,呵呵呵:loveliness: , V) p# @( p; E; }, H6 H& ^
- [$ i3 H) z& P, V9 ]& E6 @
# E/ c0 a. P/ C( \9 |" P4 j/ P1 {

0 ^( z% b, n* D8 @" C, s还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

: G- y" k. ~8 \: b! S
3 u+ X* U6 O: H2 z  f6 r6 g00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff 6 w2 h  {. @0 K1 Y
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的3 @  k" ~- N5 U4 k
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-3-13 07:48 , Processed in 1.150390 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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