设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,4 h% r, V; U$ n5 L" `
6 S) L2 G( f; n9 _) V" w& d
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,( G6 Y3 ]/ l( j/ B! @. u
有什么错误及不足请多提出。+ p6 E3 n9 ~2 ^. q  [8 k# \
$ p0 D5 ~( E6 M8 l
需要工具:HexCmp[Ultra Edit]: P$ e. F! f/ h9 W* h% v. T8 k
PSX v1.13(Ps 调试器)9 r. p+ ~, @% }' l
EmuCheat
0 w3 H9 h* a) n1 f# j% MMIPS汇编指令。
3 c+ S) N# N7 D) Z* B  C2 d- H# O1 @4 L8 |4 ?
洛克人X5 EC:
' \0 {: Y8 ^1 V, B  D) k人数:0d311d,2.
9 _( }. x( Y  k( g4 }
4 Y7 i7 @3 p! ?% t, E步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
' A, U7 g0 d7 c4 O- u1 }  A9 T2 r" L4 G# p- B
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。+ K; B2 O  L) D2 o' s
会出现调试器界面。
1 f% \8 \! W2 R; \其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
2 i- u4 ]4 p' q! \4 R界面(Disassembly)。1 d8 o# R2 j$ G+ W$ v
右击Breakpoints的空白地,出现了添加命令的方框,点Add。: F. @; t1 _3 ^1 v% w5 `& i, s
& ]  }+ d  A' j$ a% D* ^

* L4 k! o+ O8 {' V然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。; c" O( @7 [1 ]% B
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。+ n* g" v9 R1 b" V) w  x) \, W
. J2 m8 j7 G2 `7 Z+ _8 B
按F9,运行游戏。
) K& n7 j: X- Y! Z死一条人后,来到了这里,看Disassembly。
+ W9 q- H7 {* X* `) Z/ D$ _. s8 f( ]% ]
) M0 m5 ]- O7 I9 p
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
: c8 l0 D' h4 e/ k4 E5 V& g上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对8 J  ?9 G3 ^5 y- C7 m; X
2 v4 Z, b0 _8 U
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
; e" K8 P& V0 B, u; Q
: `) F8 A/ s; s% J步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)  a: }+ K. W* m, x' l0 [6 Z1 R( u

, \, M- o$ q5 a$ o9 c. v搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)( I, H- `; m- G2 Y1 j

( z* D) b! T+ a! d, e$ k到了这里,201afdcc.
( i4 [5 e) O: B/ S& B% h% M' [) S3 w- |! Z" n

+ J* R  a- _- h! P8 R; [) a: g3 S将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
) S/ Y7 q' o# r/ \: v  A" p' r达到了不减命的目的。
7 m. X& C4 _" w+ F1 O+ s3 C- T. a: X& F
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
- o* U" b! L# ?' N+ p3 _9 x  b( L
; m& g, j, t! J( Z; i, D' W! f! P说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
7 c4 Z4 m; ]/ n: O# i, N另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
( y) C4 R. a4 P) o- U" r
3 z. x+ j4 [& Q9 W  Q6 l注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制9 a( l- |. A- ], J" f) X
" Q$ v7 y' g2 h$ P8 y# \1 j
过去)。另PS游戏较大,改之前最好先做好备份。
( v5 B: X, ?+ L! D  b" U! x! k将改过的IPS补丁也放上来。:loveliness:
& l7 Z6 V6 ^6 {& m! k
6 z1 m( p9 Y$ H[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~6 G5 W3 Y2 `; d. t
+ C+ h. v  |, g0 ]) K" t) y6 T
顺便解释下
% [( M, u9 f+ o' B: G# q) ?9 i00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 - n! Q- w3 z  K2 Y6 N$ e! ^3 ]
00021cbc: nop
# C+ L, T5 v. e0 w00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
( \3 X2 K9 G) o6 D3 S00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址" b$ C5 s0 t/ `# {

  a7 s! g0 v$ m+ F从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果. G+ x$ V: z( d/ q' D  y7 K( P* t

# P- e% a7 a' R, S5 i- _4 O以上是个人浅见,希望高手别见笑~~~
; ^( Z2 y8 w; a/ h1 l/ k3 ^% B( |6 ]1 W, l
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 2032 天

[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 发表
- Q& b+ u0 @( P5 j+ s  h" t) G# z0 l应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
' j! ?- n6 I2 x' F1 L
9 V5 Z: n( M0 j# D有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
, Q, v# l- ]# G/ s. g' b有什么 ...

+ l$ _/ d( ~% D0 I/ j' g3 J- N' K多谢了,终于明白了,呵呵呵:loveliness: 2 B4 C6 L  ^, U8 y
6 W" T3 K- b! |! `  i
原帖由 shinwa 于 2009-5-1 14:09 发表
1 Q7 e9 |( ~) p/ x0 \9 p呵呵 不错 支持下~~~~4 K, U2 O9 K' L6 S; t5 \

- a4 ^; V- w  P2 @顺便解释下
2 k1 m* P3 P. C0 h$ Q00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" G* |0 D) I; H* q# f00021cbc: nop
& ^( ~6 L+ k6 l: V00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
0 z+ w0 X' e6 N- o% `
! c5 \2 l0 z0 H) ?1 f9 z* ?, R, |
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 " y; D/ ^  ]' u* \

  w! o; h! F0 E7 S' L" i多谢了,终于明白了,呵呵呵:loveliness: * b$ `1 U# ?  G* X; G9 o! H% s9 @% W
7 P3 N7 g' ~3 J, Z6 @
! M* e# Q' u( m7 l: i

' T! Q$ ]; B5 w/ e! n还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

# L- y7 t# ^/ @5 M( q1 q/ P0 ?$ Y8 A) R# h
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   R* w0 g% o0 T, k
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的1 x, X, w: E$ W% K8 p8 W
PS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-5 01:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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