EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
' F8 b, f0 T  }+ t0 R. j4 [0 e/ [4 i8 o  p  B0 G0 w
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
- I3 M; R$ B+ F( L有什么错误及不足请多提出。
& ?1 O( a! G% C' f1 D
! k( b/ W  r9 V( ?9 k& d, L需要工具:HexCmp[Ultra Edit]% F' }: y4 e4 `; \% z: {  {9 J
PSX v1.13(Ps 调试器). J8 ?/ h1 y" Q0 C0 `
EmuCheat
$ D/ n0 Z1 |' @. L* I, q  PMIPS汇编指令。+ f( C6 i, N2 a$ }

) O. t1 g9 C& m$ r( X5 g' Q1 H& u洛克人X5 EC:; v" e1 Z+ z1 T+ w
人数:0d311d,2.
9 I0 G- F! R* t' _! A' X+ O( |. g, ]+ D+ w
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。5 u, U5 D0 U4 H/ X# g- V+ R( g2 s

2 e+ i7 u5 U  T5 c/ m  y. H' p/ f步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
+ K5 g' g+ D! G' X3 t会出现调试器界面。4 w) A# F! I3 k* h. N
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的) m% x3 c4 r( _2 ^+ Z
界面(Disassembly)。, x( _$ p+ I% ^& v# h0 Q) L& h, o
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
. K% @. q, e- U% C: _; A, ?0 p6 H0 S/ x3 p8 ^5 p: h2 _

1 I, G8 g' P7 X( b( T然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
( x4 K) ?! d+ _! H! T" q然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。( J  W& |" g# X1 A* S$ E$ ?

* G; B4 x0 ~/ D& Y% ~+ Y1 F按F9,运行游戏。1 ~' Z+ r& U# a5 h4 R1 T. p+ X6 U
死一条人后,来到了这里,看Disassembly。
; [; I; m( z: o6 U4 ]  @1 P3 X6 @  e  }, S3 P+ B& @
* y2 Y, M2 M' I, h4 J8 ]
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
* L$ C# C, y2 n/ I7 f上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对& q' r4 S! K8 k* u2 z! E

" }7 F# D( ~5 s+ t- _这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。( \6 T5 r$ Q; \( |$ {1 Z

) G- A9 v. G8 f步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)) _& }/ K; |' b: R$ @4 k' ~3 k

4 A- ?0 w4 I' S3 E搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)2 r0 M2 o) H/ b! _; q! _4 L
7 x. J% L0 v4 d& a, R! ]8 {
到了这里,201afdcc.
# A: H3 j4 g! t, p! n; A
5 Z" K4 \" W* W% l- h0 `2 z5 @  n( @% z0 E! J9 z1 o6 X- N* v7 w
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就" I& J4 l& v- N! E6 t
达到了不减命的目的。: s& Q0 Z9 D* f1 C' u* z8 j) g4 g

- [' e+ t- _4 R' a) j0 \% V: Q到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
: d' X% Z4 [- Q# g. S2 M# B# a2 b- T2 ?
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。1 L& N. n/ Q( a: Q
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
: e# S; H: R. ]) E# h- V, |7 }; T
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制1 J, w0 \, `3 y  c% p

. _8 R' [- h! e) k  N过去)。另PS游戏较大,改之前最好先做好备份。
( h4 _; B% x  _) h/ a将改过的IPS补丁也放上来。:loveliness:
1 s% h# w7 S8 z5 Z( a+ E! E; N; m8 M
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
9 j+ V1 {* A6 G5 Q: J& P+ u: Y/ z0 `: x8 f
顺便解释下
& P& u+ ~- P5 }. U$ \! Q00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
3 l" N1 \* S! t% a) G0 |6 @5 X00021cbc: nop 0 l7 |) o% M' H/ {7 j/ D
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
& w" o) ^6 s- L  G+ y1 H00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址! m* @* ?3 M8 b6 f4 M
- v3 ]! u7 @% v& N1 s) P8 B; }
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果3 k" a' @1 X0 H( }: y( A. F4 _* l4 D

, a" p/ S; c# x( @9 T; B: \/ L以上是个人浅见,希望高手别见笑~~~. x" F1 d3 Z/ b# |. I8 ]
$ u# x* Y" X6 @* O$ m
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1894 天

[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 发表
1 {7 r# n8 _# y0 Y" k, W, S应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
' e6 [2 q- [, f, S2 L4 Q: @- W6 G
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,- q% D7 q8 `# N7 X+ W& C* H
有什么 ...

# N: p$ C+ H, t- S+ X多谢了,终于明白了,呵呵呵:loveliness: , C0 H3 u5 z/ W4 E7 ^& ?* A
# z8 d% M" d% Q7 j+ Z
原帖由 shinwa 于 2009-5-1 14:09 发表
; i7 G( H7 b5 f9 `7 u, ^呵呵 不错 支持下~~~~. i& H$ |4 l, a. a" u! Q

: D/ E" }* F6 z3 V1 Q0 }; d顺便解释下9 g5 X) F# @0 m3 M# d' C; ?
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 / I, O' a2 F- O: d
00021cbc: nop 4 |8 J* P: ^8 u
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
5 Z+ e. `. Y$ J% J

) X2 f* ]2 l0 F; {还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
6 F9 }( L% w& n5 G) _# S: B( z5 g( _$ H
多谢了,终于明白了,呵呵呵:loveliness:
# d7 {3 A: O8 h$ e# B" \, R* h5 j  H' j& f& b! h

8 i1 u' ^/ f* A# S7 ~" d3 P* P# ^
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
8 Q, Q9 j! D$ \2 F2 k! b1 Z& E+ f

3 c  E, X7 g6 w8 {  k00021cc0: 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" }- r4 H3 z5 [% r  T1 g& |的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
& S6 e" K# m+ x, o' EPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-2-24 11:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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