设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,+ x8 c+ [% F& D9 y  W: f
$ A2 a+ p, V7 z1 d! @
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
# k$ b& Y4 e5 _" ^5 J# I+ X有什么错误及不足请多提出。
; Z2 L) w9 _) v( c; v# c, f9 q6 z5 i! [0 W. l2 d9 d% l
需要工具:HexCmp[Ultra Edit]' s5 L/ `3 O7 H: ^- S9 E
PSX v1.13(Ps 调试器)
+ D! P& d6 M  iEmuCheat
# h( T0 V+ j9 H: J. \MIPS汇编指令。. D& f; G* g# a. z: L8 _# H3 F3 R

3 _/ ?# g, |" C& Q洛克人X5 EC:. I9 F$ f2 }6 p) }$ t* J
人数:0d311d,2.
4 E6 \$ s& u5 ~! R/ c0 S$ X3 ]( f1 {9 l" T( ~" d
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。# ~$ k! d* W9 l; y7 X
& ]5 @6 {- z: Z1 l( W
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
* j' `0 j9 K3 O$ R$ D9 x3 r9 R9 ^会出现调试器界面。8 y$ ~6 B) d8 e4 R6 u  L" Q; m
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
# U9 e( ?5 }- B界面(Disassembly)。
5 L  \$ f  q% d1 T4 u右击Breakpoints的空白地,出现了添加命令的方框,点Add。" s& i1 F9 v+ O* q; M+ E0 e4 |

6 E* ?% m: @- O' d3 L. z1 _/ d: x3 i1 e. M
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。. T3 ~9 o2 t6 D: C9 F# [9 d
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。0 x5 _- I' B, v- h. n

/ g* n6 r3 g/ Q6 e2 Q* c按F9,运行游戏。
9 E8 F: `- Z4 B; B- `死一条人后,来到了这里,看Disassembly。
* d9 Y7 M1 b. N+ l+ S0 L, G6 P& X/ O' N/ |4 ^
* B+ R0 t3 B; y" j6 N. M
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
/ M  {% Y: y; k1 ~; l# c8 w% @+ j' T上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
3 S- a) k% |9 H& |! E/ s
" j0 s, b4 ^4 W- Y9 Z; z8 {3 y( O这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。; i4 _0 U: V3 f6 k) ?' U

) Y% }" t/ |: P+ v" R' Q, @6 h/ B步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)2 d1 w: ?8 z& g) D# b

3 f' I: L) A# p$ B, |; v5 I# _5 v8 j搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)/ e2 x. d/ S$ p! R( m

# a& G4 J  [& {$ e6 ~到了这里,201afdcc.; G& N9 v5 [' g9 s0 Z

9 v! c# r, w# ?
  k! l' R& w) N9 P9 j2 S! W. t将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
3 Z7 L8 T* d- p2 I. x0 p; H( `& m达到了不减命的目的。
0 e6 y( n  w- T4 `! R; M7 C5 Z
6 l$ N. _( [( _& ~; j: a到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
) K. b1 c" s+ I4 x" G& z/ P1 _: @# }8 E" P! q5 l- C3 e/ {
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。; @8 i' L9 U% s
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
9 k) s$ O) ~- k1 n5 g
& E' J# F0 @$ b  l/ k$ u! n3 L注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制7 A5 I. J' l0 {1 i) p

6 o7 {  R5 O2 t+ K6 S# H/ v过去)。另PS游戏较大,改之前最好先做好备份。0 S9 {! S, m( Y4 k& q" N# _+ ?
将改过的IPS补丁也放上来。:loveliness:
/ E/ |' c+ G* |- S
* L( _. t1 e! t  S7 \' t1 a[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~- C6 m1 o4 c+ e; z4 X3 V5 N$ x3 L2 V
9 f' r1 U' V7 d  R2 D( M  s; Q) w
顺便解释下
: X: I/ Y1 x; m00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 + o; v4 q# k; D5 r2 n
00021cbc: nop - k0 ]2 Z: D- c- n: x! ]
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
# R" Z0 N; G8 a, n* c00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
5 V: d7 Z8 [7 ^. ]& i( j. x4 j7 n- m2 y5 V
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果% o) e6 o* {8 q0 B) L3 ?0 u
( r. q' @* D# c, w' a2 q( W6 W: I
以上是个人浅见,希望高手别见笑~~~% ^) [% a7 m" k4 k) ?# h
/ e3 K3 n( R5 l: ~4 o" M. x6 P
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1934 天

[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 发表
- p3 J+ S4 x  x) t+ g% q应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,$ _" w! {' ~1 x3 _

& d8 |  `/ a+ m  g6 J# A有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,1 W/ T, q% X- j3 T8 y
有什么 ...
' O, f2 f2 K+ ^4 A# B3 S! s5 W
多谢了,终于明白了,呵呵呵:loveliness:
5 C& x) f$ b+ x! I3 j9 l1 e1 `' S7 ]* L$ H
原帖由 shinwa 于 2009-5-1 14:09 发表
8 Z1 |/ D3 x: ~' D" E  M& e6 B呵呵 不错 支持下~~~~& Y4 u! S. `. E) [; |
, Z5 {& F' s: b( X# [. m) u, m& D
顺便解释下/ v" v" D, _- L2 T
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" w" a# v' \. }, D: K00021cbc: nop $ I, Q  y0 O- X8 U/ W
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

& J" S! U* L0 L7 |$ s6 n( {$ l6 ]9 H4 Q1 Z9 L" @
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 / J9 s/ O/ q" b- V% d" B. q
, A5 U( h$ V8 y3 F) Q
多谢了,终于明白了,呵呵呵:loveliness:
+ v" _- H9 i4 M/ f) C: ?# K8 C! ~6 ^( x: ~2 A) f
" ?# Q! a- ]0 _1 l

! A, V: f7 u1 t0 v6 W还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

2 C* z, i' p$ t% U
/ D; ~& J) `. {& ?9 G' x, m00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了
回复

使用道具 举报

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff : H! [, }0 n2 |3 T( t
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的2 x9 a$ d& s8 \4 e
PS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-26 22:53

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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