设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,' F+ w+ `+ r7 h% O( A3 q
/ q/ U  Y! f0 |
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,8 B% I$ j- _+ z3 }* r4 x
有什么错误及不足请多提出。8 b$ N+ o7 q& _  P  c  m" v
+ H, I/ M/ z0 ?5 b8 e- ]
需要工具:HexCmp[Ultra Edit]$ W; t: N6 ~  _6 x9 C/ u% t. f1 u
PSX v1.13(Ps 调试器)
! ~# K+ i( }0 @& OEmuCheat
# w  ]4 b5 O3 ?7 y; g% @! uMIPS汇编指令。
* {% ^* B) F& l+ s' l8 |* c2 g- a4 k! z- h- s
洛克人X5 EC:/ h& @9 ]6 V% j0 `% E/ o
人数:0d311d,2.3 h+ z, G2 E& U( y9 g6 U6 {

' u. e& `" c7 |& ?  k3 R0 t% J  r+ o步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
+ h) E% }) p9 i1 K& v6 n' e$ M! G1 O: C6 `; }3 B; J
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。8 p2 q, `8 z# B% W' S
会出现调试器界面。' |( c7 B. p( S5 m' e4 e) y$ D8 ?
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的$ v- i: g$ F' @' B2 Z
界面(Disassembly)。
, T) r% m/ J: {0 U/ ?右击Breakpoints的空白地,出现了添加命令的方框,点Add。# R; N1 `7 B. K; F/ ?

/ n1 d* E5 f! z
2 ?( E* V; J6 S  n然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。5 T% x6 r. U" P) s
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。" S" k5 P# X9 {" i

/ l# |3 V' O( S% h3 k' n, f按F9,运行游戏。
+ O6 k- `% {: Q# g* v; I9 n死一条人后,来到了这里,看Disassembly。3 J# T3 |- T3 M2 }; _) h. ?

* v6 j: q* s) I
) G0 n' j% I8 M, ~' ]: B' e步骤3:断到了00021cc8:sll>r2,r2,0x18  000216009 h- o0 R# T. z$ M! P: e8 ?, _
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
8 Z. H  B6 q, ~( h* M* e
+ e/ }8 O; a7 ~这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
* Z' s5 j. c- |2 Y5 ^; t6 w) V5 B- S. h
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
3 F/ P/ k' x0 i8 ]  W' a7 S. l- a5 o" n3 M
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)# h& o  \7 T2 Y: Q. a1 X- H
4 t" O8 N5 v& S$ T$ ^
到了这里,201afdcc.
. Y5 k; m9 D& \* b$ o, S
  Z/ ^: s+ v5 [, o  Q0 c! m. h( g. B* Z3 Z" b
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
" c4 \$ L$ a( O) E3 M3 ^, ^达到了不减命的目的。8 r' H1 M8 B- ^& h9 _

6 r6 U6 w9 ^* Q- S4 k% i到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
! K+ y3 _) B8 o$ E. o6 o/ T3 X2 I3 O0 m3 i
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
0 F8 ^  [8 ~$ F另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。* v. P1 D( n4 m  x& I
" \8 [6 M& l$ }: o& Y  t& y' C
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制7 r* e- ^/ l+ b; b2 N2 q6 q8 m* N

# e. w) o( v* O过去)。另PS游戏较大,改之前最好先做好备份。* }" H* i7 X% R* s7 x# y+ Z; U4 o
将改过的IPS补丁也放上来。:loveliness:
' B( m4 v( U/ {/ ~( e
" N/ E" \5 J# t4 R% P& X[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~! C0 ^+ r, {: q8 ~6 q& `

/ i  k7 v3 }% c. b( i* a2 k顺便解释下
4 T# S7 M. N* J( D& _$ h" D00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
6 n9 [3 s, b9 D* K6 Q; c$ T8 }! \: j00021cbc: nop $ \. f# m' n+ _
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
7 r+ b& @9 k/ n1 R. Q! s# z! F( ?00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
9 _* B$ j. ^4 f. L. d; `' f& Q2 F, S5 L
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
: [% M7 ^  s6 D1 V6 P
- D2 K% x) }+ T$ D+ G! ]: J以上是个人浅见,希望高手别见笑~~~
- b' Y7 z* s# m' |4 U4 G4 _$ C  h; l+ @4 w+ O7 Z5 R& k& z& Q# ?/ q: E
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1952 天

[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 发表 # M: d& n! o  `) S. b- ]: k/ X1 e
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
' R! c$ l( S  ~% L+ x5 d6 [+ A
! R1 w) ~* d" e: G2 w& }: W3 Q5 @! O* e有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,! c. k! z1 C$ R3 P- t% D; B
有什么 ...
; a% E! `- p$ h0 Y- m+ j) g
多谢了,终于明白了,呵呵呵:loveliness:
2 ~- M: p8 V: o3 D
$ w1 m6 T6 `2 \/ m. ~0 _/ {$ P% V
原帖由 shinwa 于 2009-5-1 14:09 发表
/ {8 E1 ]8 {' B) Z# ~. Y9 v" V+ F呵呵 不错 支持下~~~~& N( c' {' G9 x$ E, O0 x) B
' j1 W8 \( L" U5 I) W
顺便解释下$ x% |/ k8 m/ Z( u7 r6 s
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
5 L9 m6 E  }* X  x2 X00021cbc: nop ( i+ t5 K- @5 D( P% E+ L
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
# N$ f6 {8 g/ z7 @& ]

4 c6 }4 J% N, B还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
* X' p; t2 {# z: ?4 I% A+ [" m7 _4 W: z" K; X
多谢了,终于明白了,呵呵呵:loveliness: / d) U5 [& v4 A. R
- }  |/ U) n7 U$ N+ T/ l. W/ B( ~, p

# F9 L+ G: {5 E! k0 r4 O% {/ g& _  L% y7 U, ?2 V
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

6 I( c: v. ~) D7 `" t
( d, C* F3 S, }2 [6 T& S) ^3 ^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
7 ?: ~% m: U" k; M2 L5 y0 o; `# r的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的$ Z" c5 q$ S# T3 e- w
PS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-16 13:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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