EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,$ d8 v  c/ o  G$ m" {; D$ Z
1 ^" Y! U+ E. o7 v: L& _' d% H4 [
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
, I. N# G* M7 I5 o0 q( ]' M8 P0 C* F有什么错误及不足请多提出。
: n& p% C/ b! Y9 {- u: K; L
' ~. a3 G* ?4 n7 o. I) {需要工具:HexCmp[Ultra Edit]2 h5 e4 Z# I; y2 H# i
PSX v1.13(Ps 调试器)2 j9 Z2 k/ Z: r4 S
EmuCheat0 }; ^3 t" g4 n! q1 J3 y
MIPS汇编指令。: F) [5 C, y0 O; x
$ }# E: ?( F/ e- R7 ~
洛克人X5 EC:; {# V8 B; J' q% N1 c
人数:0d311d,2.4 m$ Z) T- {8 F) u' W7 |
1 q; A! \$ t( A$ n/ P& k6 u5 Y
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
* m- P4 Q5 k4 l' o" o6 m7 m; X( V* G# U4 E& V2 d! R
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
2 \: z# N% o( X4 F+ `$ B会出现调试器界面。
' O( Q, |  d; E! F; q2 S其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的9 V/ ]  l- b1 l3 m9 ]
界面(Disassembly)。. I; \7 X4 \) Z
右击Breakpoints的空白地,出现了添加命令的方框,点Add。6 l  }* l* F) d7 t
+ W8 g8 z, ^; o9 u1 s2 p; z( v- }
  F8 T* V4 t4 U/ J
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。+ N. X+ y* y9 v! {6 R& j
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。! `/ R0 U9 d+ h: w
, F) u- j8 r+ W% ^7 D4 e# R5 X
按F9,运行游戏。
% j1 e9 {: q! m/ A死一条人后,来到了这里,看Disassembly。8 [& A8 {4 M# e7 @' ^

& C3 l. u  \. E+ [! ?3 |
9 J! P# O" A* K! W% J! i/ b步骤3:断到了00021cc8:sll>r2,r2,0x18  000216006 D4 g6 p$ m3 y7 K* w" P# D
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对7 y8 }  ?$ P  f7 F1 V7 U% A# m. E8 p

4 M0 S0 N3 `9 o* Z' E0 k( _' t  A这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。) ]8 \" s, L) w$ t( g

6 L" E! t4 N' Q' L  I8 _步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)# h" B8 I4 o1 A9 H  \# E
! T9 d: e: p8 q
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
+ j" V' w$ P/ u7 a$ e# K0 p0 l/ [' d' O4 x$ u0 X4 c9 P
到了这里,201afdcc.% v0 ]0 p, \, _1 z3 [
5 a/ a9 X8 v4 M. I) G8 j! n( G! ]

" X6 B3 h  u. V+ X. h% I; L2 \将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就* Y7 I* H: {+ Y; I* j' {  w
达到了不减命的目的。
' K8 s  Y8 G+ t  l7 W1 F6 C
3 a; F) Y/ r1 K到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
0 F; b. h" c) o% l! Z+ k" ^) j- S* F/ w( N( z9 \7 I/ K
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
7 t- s5 V1 K( J. E7 h8 ?另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
; S* Q- k% R: E) n1 ~; _
; o/ v2 s- h" `, E注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
2 D# G1 T, J: d3 @6 }! S3 r  L$ e) \
过去)。另PS游戏较大,改之前最好先做好备份。
2 n3 {4 m9 X4 O1 B/ ~: o/ U将改过的IPS补丁也放上来。:loveliness: * h2 I7 w" w" Q- A8 P4 q5 f1 J

3 n7 A" R: J0 `/ T[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~- j9 M( P2 s7 Q/ `
9 ~) |+ \; G8 f
顺便解释下
2 C; O: S* ]1 |5 f8 S, e/ @3 d" T4 k00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 - m% R7 s' e" i
00021cbc: nop
4 w5 h) f( B4 w% U00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算8 b- O; Z, B7 y4 n! ]$ v9 Q  \! @
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址! s( J! `; u5 E; y+ N8 k1 c1 f+ |
8 a' [8 j- |( ^1 d& F5 R+ M
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果4 u$ `3 S7 X8 j, C% P
9 K- ^  J: E6 s1 X$ B
以上是个人浅见,希望高手别见笑~~~% C; A: |; q- h
) v+ L& N; H8 b" a5 {( N+ t
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2181 天

[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 发表
3 A1 b$ l$ D7 F* ^$ t  W应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
( p! O( ]1 f+ I3 P7 n0 @# d$ d. N8 [) a6 D
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,8 Q+ j& H' M& C$ t4 J+ f. |
有什么 ...
$ g- Z% F! S0 d) f% }8 y, A1 }
多谢了,终于明白了,呵呵呵:loveliness:
' _( D3 T0 [7 }- k" e: j* O
5 }) q0 d% O. }3 Z
原帖由 shinwa 于 2009-5-1 14:09 发表
- E( g& ]# Y  M; n; h呵呵 不错 支持下~~~~
9 S* Z* {- A5 _1 X* {4 V+ X' V5 o: y
顺便解释下
& i9 Y% ~+ t2 L00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ; w* |6 j% P: A) Q; D! Z
00021cbc: nop : ]1 W0 W0 ^* W3 k
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
/ {1 K6 F0 W. v0 k' E$ l; A
- I5 j7 G- O1 R
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 ' T! W( J0 J& F4 m& W
5 d1 I2 P- r0 {! x! N2 J$ }) }7 E
多谢了,终于明白了,呵呵呵:loveliness:
& I; C# \4 |; \# z2 R" D) i! W2 z- V& M! z' _; p

+ v8 g% f! ~6 h4 l/ P: [7 |+ y. E; _' L# \# u, X/ o
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

3 j% G( }; w5 C% m) E% j. M9 I) E" }3 y- a. T
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
, r6 u% n+ x, |1 O3 [8 ?3 X的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的1 {3 m- ^( m" d) _2 P. K) F
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-5 14:54 , Processed in 1.087891 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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