EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,3 b; v: }3 D, V  i2 O
4 X  g8 e4 A* q, l
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,3 G$ R: F5 W6 @/ A' o9 n; J
有什么错误及不足请多提出。$ P& e3 R5 a- P* w% \

. [4 L2 w; C) _1 |7 u需要工具:HexCmp[Ultra Edit]
- B0 b- X8 l5 P+ I# }PSX v1.13(Ps 调试器)
4 D9 t5 O# m7 |4 M$ X+ G3 y. ^EmuCheat
  G' {% d, L5 ?$ nMIPS汇编指令。
5 Q- B+ v- d; S5 H8 L- l" D5 }+ B, S" _% `. d1 I
洛克人X5 EC:
# m& F1 X  T2 s/ w8 F人数:0d311d,2.
- N7 {; \) b0 d/ F  I# R4 r1 s* C7 z
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。$ w; J' g' k5 r# W$ f7 Q
0 e$ w, e* c2 u% f8 Q
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
0 {# a. S8 p' [+ O/ _会出现调试器界面。
; M* L( |; I  U0 e, M/ o其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
. M  \" d5 W1 ~2 n8 |+ G# p# W界面(Disassembly)。- Q& q' ^( S- {: p
右击Breakpoints的空白地,出现了添加命令的方框,点Add。7 l6 V: M) I  x+ K

) o8 E# u# V9 o* `. a5 n5 v! l5 a
5 q& e: e5 Y6 f4 C8 u然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。8 ^8 ^" K: R  J3 a. t* ]
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。4 e: d' f# E0 e  v* z

. j4 p, a0 p+ ^' ]: D5 {按F9,运行游戏。% d4 g5 m& l1 k7 [& z3 B
死一条人后,来到了这里,看Disassembly。. i! L1 p( ]; Q7 ?0 p% y. W
( u2 x( S; G9 ~1 L5 y
: m, n' f1 ?% v+ A4 Z/ L
步骤3:断到了00021cc8:sll>r2,r2,0x18  000216007 i1 @" C( f! ^- W( `
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
  f3 f  r! _, `( D3 z( K* R9 Q$ b% h8 \6 W+ d8 Y& J
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
' W8 q( `% H. E; {
* |" y2 r- ~- n2 Z) y! t步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
# o8 K9 n; {& _( R/ `8 M6 _9 ?/ a! J2 M
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
9 f) r; ?6 ?' [# y1 Q) p) E9 A# L$ @; b( q( x4 M! `1 f
到了这里,201afdcc.
# T% s" o6 S( X' N* x9 u* O: Q$ V# {( q) W
5 X- i* X. O: Q* Q3 N7 `+ H
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
+ ?$ S( p! Q+ H# ~达到了不减命的目的。8 C8 k# l" g6 V3 N) ^! F: J
8 H5 Z  H: s9 X9 C( h! N
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
, e; p6 A" h  P0 x8 I  i, h! X% d" c
$ ^+ B2 @/ B" N0 w) C说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
# l0 ]7 y% B$ l. a- B0 ~% s4 j另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
: J6 ^2 a* w3 R1 V6 K: a! h( [5 L+ P& ]
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
7 O! _" G8 y; }. D, ?; ^- p! c" @' f5 t6 L3 f9 b. u% G8 m
过去)。另PS游戏较大,改之前最好先做好备份。* f( d' i- v5 s, I# \, Y' Y! X
将改过的IPS补丁也放上来。:loveliness:
5 i# E7 r% z' `1 L& T$ S. b: H- ^6 n* I- b: h( I$ S
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~1 w! f) N0 r* j, h/ K% T. o" ^# C
8 X* [. e4 e+ w$ L( T8 s
顺便解释下( n% c9 Y- N5 q* q7 j* }8 D
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
3 u5 ?5 O2 |% z00021cbc: nop
9 F% O3 h7 E: L" O3 ^' e# C00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算* l% L' k+ Z6 o% X0 ?% C
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址& F" k1 t- O" O# {, v9 L+ K/ U( s

% e. ]; H- s0 e0 B, J从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
# r  L7 O- |  N# I) W1 y, F7 k7 k
以上是个人浅见,希望高手别见笑~~~
* }# e% K7 ]$ S" }4 m3 F7 ]
! X- [* C! j: j+ L[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1772 天

[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 发表 & [. z% E' M! p8 ?0 q" M0 k5 {
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
$ e( Q1 X) Q6 p; c: ^
) Q" ]6 _; ^" t: q有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,7 ^% D9 B/ v0 P0 C( e& j" q( M. B9 g
有什么 ...
$ ]' l3 Q% _! J+ |2 X6 j
多谢了,终于明白了,呵呵呵:loveliness: / w6 h* D) o/ a: o. C3 Q! T( a" o; g

. s+ {" N/ c: P  }& w* B; u
原帖由 shinwa 于 2009-5-1 14:09 发表 6 y& X; }, ], {
呵呵 不错 支持下~~~~# i- f7 Y/ O. ~3 d& g

- Y, f& _6 L% ?2 X顺便解释下
  W, n) x  {' q7 K& e! K# x0 |00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ! ~) a+ B: A9 }
00021cbc: nop 0 e, ?, e/ J) j
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
0 W$ |; x6 z. b' g2 C* z

, Z/ s8 w) w2 s6 {还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 / s& e) K9 t3 C( W- Q+ Y: G6 o
7 [2 U! X9 m# n( J; a* I
多谢了,终于明白了,呵呵呵:loveliness: 8 H: {( z0 _! _' \1 h& c/ v+ m
7 N9 ~, Y( R5 p* i0 B4 H* e

% l2 g- q5 j# S3 u6 i/ B. e: T5 [$ y( a
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
5 h9 q3 ~4 X: U# X, b

3 |' D' ~6 q/ {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 4 O( X  @+ ~5 [  ?) A0 S
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的, L' K8 L% \9 j
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-18 08:44 , Processed in 1.094726 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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