设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,9 ?7 s) ?! c. s. H7 e: u) x

0 s0 A) G  s% o- o* S# l- _有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
8 ?& l: x# z1 q9 f  d' G有什么错误及不足请多提出。( D- g& P" b# ?9 w- x/ x% k

* w% D7 ~. c1 i+ ]0 i# {3 }6 s需要工具:HexCmp[Ultra Edit]
( J5 ]8 ?) g* j0 R: ]PSX v1.13(Ps 调试器)9 E  p7 i( Q+ _6 M! ^
EmuCheat- {# s4 e1 x( [6 |/ O/ h* S
MIPS汇编指令。  w+ o, m* M: J' m1 a; r
5 p) g8 V& o* ?
洛克人X5 EC:
. _5 C2 V$ t+ o2 R1 o( r6 A人数:0d311d,2.
% h! Z6 \5 Q: N8 I5 y7 Q! i* W9 |4 D! y- t/ }# O- W- Q
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。: q  q, n( q" l' B* M" l' u$ a
; G4 n. L+ @, V$ R. s
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。& y# U) c& d  p( [, {1 o; |% s3 v
会出现调试器界面。
: |" {  z1 G9 \其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
  s1 z7 A6 Q5 F1 H" ]界面(Disassembly)。% j7 |: ~/ L# G# G
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
, ^  R3 ?" v$ h+ U. n
* D3 u! [7 @. f1 U/ U. \' H! R- }5 k' R3 b7 f8 h0 S* D
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。" k& M9 H. U3 e! Z" ?& ^
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
4 C9 |' \' l5 s7 B0 K: h6 K: h# z- \4 k7 z
按F9,运行游戏。
' N6 I( ?: K4 m# |7 a% |死一条人后,来到了这里,看Disassembly。
1 Q" Y" ^$ q- C, G# O9 M; ]  i* X3 t( X2 y" j0 G6 Z7 |! U) m

4 E0 n, f$ W: m8 P步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600: E* F6 y* D' ~' v- V) s0 S
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对" i9 {8 H( E% ^& x6 x2 P

0 x7 B0 @; W$ X+ U. x这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
3 f$ S$ ~/ A5 g$ D6 w/ Z( ~6 m" t4 L' C- c* i$ X
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)6 t$ m7 o1 s% v4 k5 M

0 _: F1 q8 `+ Q5 ^搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
% A9 u( O$ K! j# q9 S6 {9 x* y) k% ^0 c- I( T& V
到了这里,201afdcc.# P; N, O! s2 Z. x8 \6 O# G& I
  x0 [" J  P" u% m) L
& ^- s5 {( C6 B7 ~* J/ A; [
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
( [7 S# `8 v& V) _达到了不减命的目的。
# X- Z5 C+ ^: c- [& A1 g; p
7 R8 W3 J/ E2 m2 X到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
! b, m" t) q7 `5 k0 l% v& B- {/ F2 P8 _4 m
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。) D% C2 }6 x) z1 d- J8 k0 R
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。( S1 @; p4 @' i  F

% E% @# M+ N+ Q" R5 ?注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
2 D8 M# P8 [! l! o3 z& n  s" F' t" a0 w# z8 v, r
过去)。另PS游戏较大,改之前最好先做好备份。
9 U/ A# C4 t9 d; v. P" z# O' K将改过的IPS补丁也放上来。:loveliness:
2 a* z0 _( X7 G) B: {6 @" a; s2 A$ M
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~; r* p. {1 m4 R' [* x/ z8 T2 H
0 t1 u$ {' E5 v8 j7 X3 W- c
顺便解释下
* i; b: l9 M, n00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 0 b! j; m7 S  g3 ^0 p0 J# c- J
00021cbc: nop
/ j" X1 _6 x- _/ {2 x& ]3 q7 P00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算$ j. A5 B$ n3 B* t
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
5 p' S% {/ `: E3 [. x5 _
  ]& N5 r. ?' o9 g6 h8 S2 o从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果& v3 k% B; B- O* e

. p2 D7 c, b; G% p! T( k以上是个人浅见,希望高手别见笑~~~0 X7 j9 }9 _8 ^

7 t0 a4 k- ~4 s* J2 }: m- U8 I' n[ 本帖最后由 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 发表 ; [" s7 q4 v- s
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,/ Q, U4 C& O6 C! P8 r# u8 r* J2 O
/ r4 ?: A. u  J! Q8 n
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,3 }- A' ~& [* k+ W
有什么 ...
* S% b% G2 u# h  T# I( z
多谢了,终于明白了,呵呵呵:loveliness: 7 K7 m* X; ~- {. {! y0 v. r

7 Z' b$ {6 M- i$ ^
原帖由 shinwa 于 2009-5-1 14:09 发表
# ^" o5 A; h/ v! [1 r8 c呵呵 不错 支持下~~~~
+ F# k" r9 y& Z" K+ M- Y1 Z
, ~- ]( V9 z5 z顺便解释下
5 i# g% F2 H- P* _: R  P7 \00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
& S0 @5 t0 S  n00021cbc: nop 9 j- l: b) ?! j8 c% ~* I# r
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

+ x( v( U+ Y  c" h$ D$ f. Z$ U2 [1 n# P( I! O5 Q
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
  j0 t! d. d" E0 @3 {
( D4 E0 P1 S: Q  W: u多谢了,终于明白了,呵呵呵:loveliness:   y0 a& G4 ?0 k1 ~3 m

9 s3 j, I& G* S, o
  f: m" F! y/ V" J/ _2 y+ `1 V: s$ L6 m  H' {+ B5 a1 e1 E
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
& R- _7 j( O2 A2 r" r  @

' P8 k0 I; i' u1 k8 m' q6 N7 z00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了
回复

使用道具 举报

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff ; y' U5 k+ ^( R# F2 W& _1 g
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的) B8 A+ [; e+ q- |6 M* Q
PS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-26 00:59

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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