EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
4 ~; Y" l1 r  w- f4 r1 \/ q
( P5 }+ _( h& _有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,! v& `" S/ ~, M9 O- u& t3 ?
有什么错误及不足请多提出。
) T. w5 F' T3 b& k; \* g  X) Q5 A) B6 t5 X1 S% v2 q0 ~
需要工具:HexCmp[Ultra Edit]- h0 ^1 f# _" g4 b
PSX v1.13(Ps 调试器)9 a% l& B3 q- W4 R$ S: s; g
EmuCheat' d0 d8 r8 ^7 F: W
MIPS汇编指令。
5 r, i; S; g# A4 I" R8 S5 B9 ~( M- m( f! r) i
洛克人X5 EC:
7 V% g; ?  ?! \& o6 `人数:0d311d,2.
$ x( l* p! u2 w4 y
8 U% u' N3 y/ g0 z+ _/ j步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
1 Q0 `) O) s9 y( f+ ?# I. g: ~" x: r+ B- i9 P
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。" f5 i! b4 x6 x( ^4 H4 I
会出现调试器界面。; Y1 I3 h+ m+ J% o* D
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的& o9 ]/ f8 O. O7 m; X+ g' `
界面(Disassembly)。
/ N& X; z; g# H3 N; u$ Q右击Breakpoints的空白地,出现了添加命令的方框,点Add。
/ P' S3 |- ?- I! \- g! f8 Q" g4 j
; C* Q- q  o  H* D
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
2 W" L7 D3 K7 B7 u* q然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
( B. i+ B* E" {2 G0 a1 x
% t1 M2 d% T+ T$ o按F9,运行游戏。
( T  `* W8 w# W. |! n; C. n! b3 M死一条人后,来到了这里,看Disassembly。8 ]& t( k7 ~3 \$ {+ g5 s% P

! E& w& R+ {; h. {& ?9 c  ~* W9 a) S2 E2 i, I
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
4 Z5 Q# f/ V7 [# q6 [4 W上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对; t. _- [, G- X' g" @0 I

+ j" f8 b# N5 }( {- {! i1 X8 |这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。# |' @3 m: J+ C3 d- t" f

0 X7 L0 I! B# M% N: b* }步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分); Z  G7 b& w1 M2 u; u9 O5 \. z& E

  z9 }/ S$ V2 T" h6 z7 O搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索). l" F$ m3 u3 `

/ [2 m, {1 F% R* K( z3 \到了这里,201afdcc.
* e' G+ O7 S+ T9 k
# w9 R( `6 `8 u# A' o3 @  Y4 E6 X$ Z" M4 J5 B2 D$ h: s" s
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
" Y2 C4 J/ G+ i* h9 V# s达到了不减命的目的。
; J( ]- G1 Z, m& O
, o8 _+ i& b6 t2 |到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。  y+ a+ h. ~3 W4 V5 j7 B
* K! f: I' n# k
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
& O2 ~& t8 e8 F* y另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。9 L3 k5 i' S3 k7 h3 [9 ~' O  z
8 S2 q; l" R1 W
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制& ]$ ?" v+ r0 u) ~3 |% s, `. e: t
# k2 L3 C8 Q8 d0 S9 n8 h
过去)。另PS游戏较大,改之前最好先做好备份。
  k# }& V/ S# l1 b6 M7 ~) g将改过的IPS补丁也放上来。:loveliness: + b" k# d5 X, j. H" w5 i- S1 Y) r: `

8 s  n& s% ^6 D# k[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~! c6 i5 h6 W' |

# N2 N: m% p6 j( |顺便解释下
% ^+ Q2 p8 {/ E$ T. L00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 , P+ S8 d9 V& y) O+ W% h# w
00021cbc: nop / E" {" \; h' R5 F' u4 Y) U: d2 k
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
# r& v$ c  F/ a6 ?00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
) _% C4 Y; Q1 K4 L" L( ]' V1 e% f
: w$ ]! S4 T# i5 q# J) |( ]从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
8 x6 a  J) y; p& t
' y3 d" ^7 b+ B  Z$ U1 C以上是个人浅见,希望高手别见笑~~~
/ h4 e, p+ G2 U( L3 k" |/ O6 z. Q5 R% w9 q; z7 z6 o# \/ q. U1 ?% h; {
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1976 天

[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 发表 ! L" ]; H8 C+ |1 l( e2 C
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
2 o4 M) @. a* v0 I! t  \: q. u) {- d5 T% y% `
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,8 \: }* N0 j6 H7 I+ }/ ~
有什么 ...
1 c0 m, [. S3 w! t: m+ H9 ]
多谢了,终于明白了,呵呵呵:loveliness:
. b0 r4 e* L' H" ]8 d' B7 N) w) U3 D
原帖由 shinwa 于 2009-5-1 14:09 发表
; m/ e. X2 D9 v1 {% H5 ]呵呵 不错 支持下~~~~
  M9 m/ I5 h" Q: m" C+ p3 D7 P. K( n/ C5 }9 P+ s; w
顺便解释下, y% s, K2 o8 y; E# }
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 3 L' C9 G, p2 I5 n# X& ?
00021cbc: nop
# P7 L  e) w% q1 ^5 r( p00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

" e4 {( X: D9 S% }, M: e, l2 S0 E0 y! |: Q9 b$ u, [7 e
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
+ w8 A* p% a  v( J7 W, Z" @1 W; Z5 r
3 M8 v, i* A& Z多谢了,终于明白了,呵呵呵:loveliness:
" u/ H, i/ i& @+ ~7 U( I# H$ |" t0 V  ~( b, D) l" ]( M! L
) E! S! Y- @+ }+ p3 \, P1 o- a2 v
6 C3 _2 G3 O0 |
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

  u8 L. I3 x/ g* T4 N1 f  U8 U! O0 i+ a1 Q5 `9 w
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 1 M8 u3 {( y" ]2 p- ^: m+ k
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的9 Z. D2 s* X4 c+ P+ P
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-12 13:19 , Processed in 1.091797 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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