EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
9 i( X4 _! G5 o; X1 U1 n  G
4 Y" p" ^: n1 y0 g) v$ {7 W有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,4 P  V3 h" H# f
有什么错误及不足请多提出。
0 W% b- C6 s/ a0 t: A  k& t- T# G/ U" u; a8 x* [  `2 @
需要工具:HexCmp[Ultra Edit]; @, d  ^0 s% _, O2 o
PSX v1.13(Ps 调试器)
: V2 L" }7 I" t- XEmuCheat7 @# x2 ^8 q+ Y! x! s9 ~5 h
MIPS汇编指令。
7 N* k9 \" {1 E& w2 Z
# ~% \. ^7 y4 f洛克人X5 EC:/ o  S- }6 ~7 I- Z) x
人数:0d311d,2.6 k' o) g9 n7 l% ~$ x0 S
1 V( d. u; D$ Y
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
- b6 Z  e9 D7 o0 g
& {- a+ C, P  S$ y步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
8 [% p  @, M. r8 D& h. e% O会出现调试器界面。
6 p/ B' f% i& V: h其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的* {7 d2 d, t* U4 _! Z% T$ d
界面(Disassembly)。! a3 ~& ^- J: ?5 R. \6 G
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
- B( H, h" P% g. ~* v* O: s* A7 `( y: f8 Q. _, k
0 n$ I9 D8 n- \! |$ f
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
4 \0 O( A9 B* r+ M然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
* ]3 A/ i3 B7 \- j7 J+ i
- J6 t. C1 K( T) t. |, F按F9,运行游戏。: n6 x! A4 ^/ a
死一条人后,来到了这里,看Disassembly。
+ U  Y3 g5 S9 I' D; j( R- d+ @7 k9 o1 p. {, C( B% J' b5 f
  z+ P" j8 [5 Y
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
% B' a+ @/ P3 R' q2 o+ R* l/ [  {# q上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
8 h6 s, n8 E0 I, ~4 G3 e6 f, N3 f- W2 l
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。5 I. s) m% f% ^" s/ T& b
; q7 P3 W; @) ?
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)- s7 R  Y8 O2 I* L) N

. ]; l) a' i5 Q9 j& B4 h. n搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
$ f; i: O2 a, m) d, r1 e) x
" L8 ^8 `( v7 Q9 i9 O到了这里,201afdcc.) n% `2 D8 a  d

$ a4 }5 n  E/ B/ N. v1 l# c. f# @, l
, Q. r; T; x& v! x' _7 ~, `9 h将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就# w- B4 @: `+ ^* F
达到了不减命的目的。8 L+ Q. L' D( \" s/ ^
8 w  o/ k3 p* E0 \/ S; b1 N- n
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。9 U' ?( _7 k3 D
" i2 d* U  ^. V
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。- m( Z% m8 j& j: s, ]: m7 L0 F! l
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
; H* b' v' v. c6 B, U
  E! ~3 E( r1 x+ O9 ]: S0 [注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
7 d% X! T7 e. f2 D9 t! v. o$ @  P- \# l
过去)。另PS游戏较大,改之前最好先做好备份。
; _, |2 E" U9 j6 I. s' J将改过的IPS补丁也放上来。:loveliness:
& m% M6 P/ N8 v4 d6 l; h  @1 e- T
8 W8 M$ E" h( A2 B: `( L$ _$ J) Y[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
+ O! j# v) h! M  E/ W# ?
- m+ a# h9 v+ `% B顺便解释下
3 S# \$ I/ @6 T6 i! L% a00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 , i0 ?: f1 p5 r9 x, Q
00021cbc: nop 7 ^; s* p/ [+ `  S( ~5 i) V
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算+ Y3 y& U0 {: T
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址* o$ G2 ?! S3 z. n+ E3 ^" J+ z

* g& u3 s$ P1 {( X) a从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
4 y- ^' D) L) z9 e
& [3 t$ {' m0 |/ L, f5 ?# T; y5 z以上是个人浅见,希望高手别见笑~~~* F+ s- {& J7 `1 m
. k' \( A$ t# t3 F1 u7 h* P4 s
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1769 天

[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 发表 % l7 N) N1 R5 W- @$ {+ @$ ?. U
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,3 N4 B2 P- i/ I$ r( H, Y/ k
/ d8 r+ c$ h* y% v
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
1 }7 |+ q1 n! q% r, R! `- {: M有什么 ...

1 U; A' j) _, d: X* t多谢了,终于明白了,呵呵呵:loveliness:
' u; H4 a9 v8 C. S6 f( P# U6 _+ k
原帖由 shinwa 于 2009-5-1 14:09 发表 # V+ s. k" |. Z% V4 h9 E
呵呵 不错 支持下~~~~1 K9 E# W; r1 H1 x8 E% R+ w

5 R) `; X% |7 i  w- i顺便解释下* H$ ]7 |  M  H+ ~
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
$ o& v, l$ o. `) p+ U, {- v4 a00021cbc: nop
6 A8 n- v* h6 Z8 N+ Y00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
. z, J0 `: a7 _8 L  z" B: k" n

0 I' B$ @( n1 ?) U& G/ d) L还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 6 ^, @0 m0 J, ]1 z  X1 i
  L. U% h) k. S3 c7 v1 q5 s
多谢了,终于明白了,呵呵呵:loveliness:
+ p8 \6 l$ R$ q: w0 ?% ~4 @  S8 J( v8 S2 P1 h8 h

. c% R$ @7 _" l1 T! s! N! K- B; q- _" _, c" r: ?! p
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

1 T  t6 N' ~6 e2 @9 v
7 m, P* S8 C# k! }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
* e# c$ u. z1 w) L3 l( g3 P的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
3 Y+ e" }7 Y$ j. EPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 12:12 , Processed in 1.084961 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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