EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
7 |, R; E6 p/ G& t$ y# K; @9 S# v( K( H" N) S
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,' J& U* C' h- A+ b- b( E0 u
有什么错误及不足请多提出。9 N9 a, p. ^% x# h5 E  q
( I$ [  M. h  h- U1 W  r' A
需要工具:HexCmp[Ultra Edit]
, H3 y& s, X7 J2 cPSX v1.13(Ps 调试器)
( h8 C4 }3 {( \# B, J" TEmuCheat0 M3 Y3 @& B7 l& @; U0 f
MIPS汇编指令。: _. L- i( s" ]; @: q

+ y* L' f5 o% r% ~2 t4 M洛克人X5 EC:4 n  W6 v9 I7 c7 T. N$ @
人数:0d311d,2.1 q/ c: D% y7 K* x8 @

( a- \' F- z6 r步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。1 D/ Q" W" P2 s- a
4 q; s9 e! l, l% s. y# w" G
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。% {2 K' t* h# d4 Y, W, h
会出现调试器界面。* w- P8 H3 w. z# m; F$ a
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的/ A% U7 H! N6 r$ ~: h: P
界面(Disassembly)。, P) l1 V" M- w6 ?/ o7 Q& b
右击Breakpoints的空白地,出现了添加命令的方框,点Add。0 G) F6 e& y, [) q6 c$ W

. i- D, G" s/ ?9 }' K8 |$ K
, {( I7 M! i5 j3 P4 D5 q然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。/ w1 w: [2 Y5 k6 f" B4 V
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
) R% j! T' D1 d! G* `* p9 l
! r, F# Q) Y& d( I. O& l6 f$ p按F9,运行游戏。/ B- F+ Q6 V0 V" e! _+ T. q
死一条人后,来到了这里,看Disassembly。
) Y# C/ U1 q1 B, n2 M9 x
8 M1 Q) t5 s9 i" D" a6 m
! o' }$ n( K7 a步骤3:断到了00021cc8:sll>r2,r2,0x18  000216000 B# Z2 U7 V6 e" h& V! I
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
' _) _$ y5 S, L  T
9 G/ n* W1 J3 F" ~这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。) A4 X& G& h0 `. z; Q+ Z/ m
7 ~0 O9 e, `  ]- G5 f% S+ {0 q- E, y
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
) |; ^# s3 H( r% C& S' V. T) Q) E* R- ]
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)- @; I3 F! h; y4 h5 b
8 C( ?: i$ _) E# B
到了这里,201afdcc.
' Y% t: B3 [% {5 j- _1 k5 g/ o# I0 [) C% b# z

; v- T; L6 T  h! h- [% \将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
! b4 [2 Z2 v. W; c- M# A/ Z达到了不减命的目的。
$ g1 z. R* u% F# L, e+ n, s
. ]1 ?/ y1 [/ d+ X& C到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。/ G1 w" `' p- w+ K* N0 f
  V) |9 e9 W4 B) ?
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。; `$ l5 y3 `  k1 W$ T/ j) y
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
5 X2 I# P; Q& w2 W+ k5 r) w6 I& b% ?# e% c- R( }1 i
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制; T: R: K; K0 T- q! l" e" F
" A6 X! ?" l' z2 d/ Q4 Q  N4 [
过去)。另PS游戏较大,改之前最好先做好备份。
5 m, ^- t, S3 g5 P将改过的IPS补丁也放上来。:loveliness: 2 w8 |, k1 I# W5 F) N6 D: f
/ D% }) m, {- X, s: n$ a" Q/ E  F
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
4 r$ E* q5 U' X- x4 A, C! ~, R
4 T" c: z) z: h, k' {9 s: ?- U顺便解释下
! b; ]6 |8 Z6 |00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2   V8 H$ B6 L4 [% @9 G3 N  E
00021cbc: nop
3 N( R0 q: _: h00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算& K! _# I4 g* p( M6 Y+ L( K2 }" o, q
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
# d  F9 d0 E* D4 ]# n" A$ L- t1 a) Q1 r4 [& o1 D' s
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
" d9 L, u2 \4 ^/ F1 u# B( w/ z" m* S: q: G
以上是个人浅见,希望高手别见笑~~~( D; u! {2 v" c) T# q# e
! S3 v/ Y) L! I  c" H/ v0 i" m9 m
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2049 天

[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 发表
+ I) V' W/ w6 Y# A% O/ k应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,5 \8 a0 v$ b1 j+ [/ s$ b

! z! j  g' E$ W5 A9 F有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
" b6 J# a& k" M( h5 k; w) r+ @2 d有什么 ...

# |# h4 K1 |" O多谢了,终于明白了,呵呵呵:loveliness:
( J# o( T3 I- B& [/ n
  d7 H' K" F, n; d3 s+ X2 J7 ~. I. E
原帖由 shinwa 于 2009-5-1 14:09 发表 & D9 x' h0 [1 i1 A
呵呵 不错 支持下~~~~
! {, k3 n7 m; `8 a5 [4 S8 ]' e2 V+ b$ K/ X7 I& a+ R
顺便解释下
7 Y, m. B* f7 X6 w" Z+ A00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
) K+ C" B6 @5 f. W  k* i% {* H6 X00021cbc: nop , }: @9 J$ F/ Y. o& b
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
3 Z3 `/ |0 S2 Q' m+ V$ V
( @$ U7 }% s: I* |
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 ! C8 K3 s6 K. f& l5 t/ _2 |
) ^& K5 G& q# [' D3 {; @3 {
多谢了,终于明白了,呵呵呵:loveliness: ( [/ l7 w# u! q- i& X
7 T1 h  L- a9 @9 E% q
6 r5 h5 f7 a9 r( ~& }
; Z+ f; m7 y, P
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

. m, v0 P: U7 H1 Y$ y: b$ W: r9 r
; o2 J( I9 }0 v* V& |, C00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff 6 F8 j9 H5 d/ p5 n& k8 d( D
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-8-24 11:24 , Processed in 1.083984 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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