EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,' O. m$ U8 Y5 R$ V+ d  _. F

. V8 y1 d* d1 v: ~7 \- X, ~有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
6 A2 F! K" I2 a: F有什么错误及不足请多提出。3 {" x5 Y0 Q0 p* E$ s2 B5 w; B
1 m: u5 U7 R# L$ E& ^
需要工具:HexCmp[Ultra Edit]
' ?! E) R' `# b; i# q% N2 \PSX v1.13(Ps 调试器)2 m" I6 g* F% y, W
EmuCheat+ Y2 Z0 y0 {! _0 \: P, s/ q# D
MIPS汇编指令。
% P0 f/ u5 Z' v! Q( ]+ [7 m
# v, d/ r8 t& K+ ?2 l! a' d( I9 Z洛克人X5 EC:
$ F! J2 D! x6 N2 X$ [( w  I- @人数:0d311d,2.$ g9 a4 ~! C) J5 l

% H( L0 e* a0 S( L4 [- s步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
! M( R& j5 B8 r/ j
' a( ~$ Z1 z6 e0 t4 t步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。3 o1 s6 J. |' l- g  Q
会出现调试器界面。
0 b! j  o* e; d6 D) L) s5 Q6 y3 b其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的4 Z2 ^; |6 g' M7 r; f
界面(Disassembly)。( w0 u' I# A# n4 I$ h
右击Breakpoints的空白地,出现了添加命令的方框,点Add。  [: w# `7 w8 L7 L* j1 y

" g; Q* q) G8 _# A) A- q" d& Y' U+ r6 G/ K- N
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
( V3 S% g. Y' e- o% n! |8 W然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
4 O  H( U- C3 l2 D3 @& G% O5 L9 u3 A
# N7 k5 _& b5 S0 S按F9,运行游戏。
, O, J  S4 J, f) d0 Q$ @死一条人后,来到了这里,看Disassembly。8 h' ?! L) W0 z; ]( t- \# P
* Y7 y. P( p* [3 l

( [9 z8 c5 k+ N2 V2 N( e步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
8 o5 Q# s% Z, H# M" Z9 u; q上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对8 v6 w& N+ Y4 l, x* O8 C
( U" N* I' q+ i- W
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。' u% C# n7 F7 l; p4 h
& J/ [- m4 e' d8 F2 R1 T8 u
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
- p! e& k7 A. F2 y2 |% Z3 I. J0 c; n3 v0 j
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
: i9 m* B- F& _+ M# G! U5 x( `- T. }* v2 G4 W3 w
到了这里,201afdcc.5 G+ w% k1 ~- U/ ^; M! S% P: G7 q
) U( }' F+ k. k8 `
) k, h$ |$ q; L
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就" J- r# I3 L: U$ P) E7 a5 V1 |) {9 e( G
达到了不减命的目的。% m* |8 w2 l5 }! d- M5 ^

3 V' }9 r; B8 H2 Y. G, p. ?到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
& X$ R: W% `4 C% _$ F- ]1 g
+ T6 b  P$ P- D7 z& Q2 Z说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
$ s0 m. D8 A! C, u. Y) s- |另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。9 n# G8 n& p+ f9 B- C

% [. Y% l+ j9 @1 e" t4 e' A' V注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制' ]( z8 R; E- M  v$ q4 Z
+ i- y& G- P) D
过去)。另PS游戏较大,改之前最好先做好备份。* U: n: U3 e1 _
将改过的IPS补丁也放上来。:loveliness:
' C; p, X# q- p# V5 z6 ~1 ?7 Y4 C0 g& Y( a# C
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
; A, r; M' {3 @+ B" z8 T) u- f5 Y8 U" O; {& r' I
顺便解释下
* K. w  z8 ^& U' T: ?% ]00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
( r9 h+ R% _8 @3 M* h00021cbc: nop
' c4 ^1 f" X) v" Z4 y! t6 t00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算9 D; \: |, ^1 K7 p! I8 s
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址1 k' g; w+ {; j4 {7 ~% q

  l) p- s, I% ?6 s4 X从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
; R" U- {9 d2 t/ P4 {
* T4 g6 Y* U, s  @以上是个人浅见,希望高手别见笑~~~
# R$ i, W3 n/ C0 L9 ?: h( D$ ~- C5 v: M. \. i9 u, A
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2180 天

[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 发表 * ?% t/ x8 d! O( A2 S( m- T
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,1 s; N$ J; `- l2 m$ M4 d: A
7 i/ B5 G- u: A* H
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,0 V# s8 O- y2 \) C; G8 a
有什么 ...

8 a, H7 P" X& G6 i3 {3 m" ~多谢了,终于明白了,呵呵呵:loveliness: ; f$ W; ]0 b5 A& b

" ^1 Z2 \" t9 o1 B* t4 |+ W
原帖由 shinwa 于 2009-5-1 14:09 发表 " `' h* k; W: M- B3 W2 e& o
呵呵 不错 支持下~~~~9 S" I9 Z! u2 |
2 O4 K. L0 J* O! X8 g
顺便解释下
! w4 I5 m) V3 c, D00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
% u2 W, `/ {7 v) x00021cbc: nop
( L9 o* r4 Y" d+ w2 {& M$ e00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

/ a7 j. Z9 M( V* T$ i6 [8 I) x6 t' a( Z- }$ `, i( ?% m: m) {2 N
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
2 Y" _6 P* ~0 b4 g' _8 A5 ?+ r* }" z, r# F: F% s8 z  g- z7 e
多谢了,终于明白了,呵呵呵:loveliness:
4 c) o" y2 @5 G0 I. ]
1 d/ z/ a- O3 e0 I+ e' q% z# m2 ?6 e6 b" X
3 b9 Q6 e0 {2 J' `/ k; Q7 P$ L) S
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
+ q/ H, [4 P' j+ M" U1 j5 r+ k
+ a8 i/ C( J6 d$ k* N9 K
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
1 ~$ X6 B0 I6 {' R" J: L/ E7 v8 v' b7 y的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的. V1 \* D0 v" [) Y9 \
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-3 09:07 , Processed in 1.082032 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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