设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,5 e" {* d. t, S

" \" B# N; I6 _* M: ^有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,% i( c6 ]2 ^1 t" o$ B
有什么错误及不足请多提出。4 a1 n  `4 l9 v2 p% }9 c
4 j4 n1 _. Z# `$ M) ]3 l5 g
需要工具:HexCmp[Ultra Edit]; {, w4 L( d  B
PSX v1.13(Ps 调试器)1 l( [5 X7 Z1 _/ ]% i& e
EmuCheat
& {2 q- o8 H: Z. N' M# C: A+ \0 ZMIPS汇编指令。0 Z% B$ N- \% i

1 K' _; ^8 J; F洛克人X5 EC:. I1 ^( k- c" {6 X6 [
人数:0d311d,2.# h6 O% h2 T1 |

3 P, E1 @; S5 f& G3 d步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。  G( ]. T; N$ ^( u2 D7 r
, l8 t* f, O! a* t, C. Q
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。! S9 U0 x  V5 L: p) W8 _
会出现调试器界面。
& T/ q/ Z. J  H- {; U1 _2 S9 B其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的; d2 p8 q& z; X( a& t, Y
界面(Disassembly)。
! _" V7 x( d5 R右击Breakpoints的空白地,出现了添加命令的方框,点Add。( U1 }8 w  B: g
. e& p9 R% y: _2 J8 Q
) }8 Y7 v( q% n  X3 G
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。, k" r7 j3 I( `, Q
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
. s& c% `5 ?$ x) l4 A( i2 I
  p" R7 \: g3 `按F9,运行游戏。
# m' v4 }; m- m8 t) V! i  B8 v* r3 \死一条人后,来到了这里,看Disassembly。
0 v7 g4 p" E, A) T8 Z4 W8 T
3 b) |. h" O% ^" T* A% W" b! F3 E1 ]
" x7 C7 s) J/ A# ]) q步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600$ \$ B& U0 |: c" B/ G' y4 O8 I
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对8 A4 Y: [6 V3 u4 c9 k+ c

' R. v! z3 \; c& v  h3 W9 e6 y这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。8 P& m6 B5 ]+ `1 n7 x* P
  g8 b: z! u; s3 O4 y, V' j' u
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
6 K  {' N& T- Q! B, c) K( U: m- W4 L
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)2 c5 x' F5 o  ~& k1 j
1 \, J7 w8 `( ]
到了这里,201afdcc.
# }& i$ g6 I2 `) q1 K+ y9 a, o5 q7 m6 r9 N  F+ h& D
/ Q; F( O8 A3 O( v
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就" w; [9 g9 N0 y! {/ A- G4 P
达到了不减命的目的。
7 l& W6 B" s; T
% K; y* n7 n% ^' b到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。6 r) G* j7 z1 [  _! N

- z" r/ W1 X8 N# c4 k( r! i/ K- F1 m说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。" c- w8 Z& D+ d: S/ M5 _
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
3 g: m3 g5 a+ `8 Y! L: M, E( \8 T
2 X( P$ a& B2 C) o5 \2 G注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
5 Q  w$ L" ^- o/ z$ X
- x" P9 P$ O# d7 p过去)。另PS游戏较大,改之前最好先做好备份。
2 a2 Z; H0 y4 m6 a. x将改过的IPS补丁也放上来。:loveliness: $ _% l- b& `. q; F1 }6 i

/ F4 r& h* ?1 p5 C& G[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~3 e+ \2 C$ o* [  G

- G. f" H* J3 v5 @) }顺便解释下
. u% f; Q+ G9 F$ v3 W' Q- P  q00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 3 `5 [4 a; V) A( }8 L! J
00021cbc: nop 7 B) K! W9 w3 c* D- ]' C
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
' |0 L# l! w' i) x- u00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
* r7 w) G8 ?  D2 G3 J: A0 ^* M# ?+ {" q  s2 x
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果: y& c" i$ g( t% z
! Y, O" A& Q& d1 F0 O
以上是个人浅见,希望高手别见笑~~~
! m3 e6 M/ K4 }+ C9 y+ c  J% U% b* M
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 2052 天

[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 发表 9 i9 P7 Q  u) C9 f8 `* l5 i
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,1 s* y3 K  m. n% ?
) B. {( ?' E; c8 y: {9 }
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
5 z* M5 p" U& P0 U7 g2 C( e有什么 ...
) C8 h/ T. c; g8 b6 H8 y- v* l
多谢了,终于明白了,呵呵呵:loveliness: 5 i, m; L. X7 d# q# a5 V7 }

" z2 \2 B% [4 |$ \* l, T! z
原帖由 shinwa 于 2009-5-1 14:09 发表
# L* E" y7 s' E呵呵 不错 支持下~~~~/ _1 k- O& A+ T) [" ^2 U* Z6 h

) L" n" w4 J# l% N/ l* f  H顺便解释下
, V7 S. E# F& ~. n: E' X00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 - _0 I1 W, _! }1 o7 T0 Y
00021cbc: nop " C& t! Z: M; {( [( ?3 V
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
! _# @# T; G# W  k

" K/ m. h* ^/ j9 |. [6 w还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
7 O; [' `& v4 r9 S8 B: G! y- t5 w* Z6 h! x3 Q# T& j: U' {
多谢了,终于明白了,呵呵呵:loveliness: - G# O  N  Q( M4 r' l9 z

& k8 ]. X) N6 s, m" Z
9 m5 i  z5 L( i& T. ]) z' V2 O+ ]0 K8 m) \* f$ v0 Y6 F# i: |  z
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
- G, h* z9 F0 A3 {2 V2 b
' A1 O) P+ Z; v( d+ p# }  W! y
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
" l, V, R7 i0 j+ W  K4 F. A! M的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
+ d: V8 C6 C; yPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-25 04:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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