EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,: E3 G: w5 [/ T* k; Z

8 f3 `1 S, |  u( i8 H有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,/ l8 `; c8 k( F  A7 t
有什么错误及不足请多提出。- d, b# f2 G0 J! @
  P/ y' p$ G3 w
需要工具:HexCmp[Ultra Edit]' a) |4 ^/ l$ T( W0 \+ i9 ?( M
PSX v1.13(Ps 调试器)/ ~' S& Q3 f+ n1 X
EmuCheat
( {. R% N9 m. ?# `  j6 dMIPS汇编指令。
# X, X4 I/ q' h' N2 W0 l. _- U' q/ Y. e  w8 _
洛克人X5 EC:+ n6 ?- M+ M. X4 e% W
人数:0d311d,2.0 g# s/ v7 ^/ _* G6 U) x

: h/ ], z' n6 m  U2 C步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。" d- p: Q+ _( h) x
7 h2 O8 K% D8 w8 `% i
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
# s+ T2 `2 [. w; u5 Z* w( Z会出现调试器界面。8 J( A3 o0 ?1 p
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
& `9 u# }! o7 s' A: n/ U界面(Disassembly)。. _2 p, d7 K& d! z, l" B
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
; O0 b9 F# O7 D1 Z! ?: ?" i. Z6 r" v
7 Y7 E+ G4 _: b5 ]5 C: }% [  L4 Z  w1 b7 n9 ]
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。7 o& y- Q6 p  g/ s% |6 z' D2 a
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
# _9 z9 c9 B) l0 P4 F) R, c( X& U' P, x! b8 k. k# q
按F9,运行游戏。
/ d4 [/ r6 p0 H2 V$ l死一条人后,来到了这里,看Disassembly。
- C) {. d9 o. ^5 D8 J9 x
( n! n1 R. T/ ~0 n" L
( B8 R* W. V1 s7 w- p( R5 A步骤3:断到了00021cc8:sll>r2,r2,0x18  000216001 _4 M# c: @# J2 c8 A! i
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对/ n# r. v7 }" H% i% B& g! Z

; a' ~& q. A! k/ ~! }2 K这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。2 }4 B+ b4 E# n2 I& ^' Q
5 l8 [! v0 ^* E5 }0 _" w. d& n
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
/ O, h; V+ g/ W. {1 l+ T# H9 M
) y. b& n: O& ~* `* t- [搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)6 h- h! t/ i, n7 C; w* y9 T: e

$ \. R8 b; y$ k. Z, B到了这里,201afdcc.+ ]: E# B- e1 Z& U* A$ R$ M

, m9 {' g" H! h; ^7 f7 U( b2 b* O7 [- Y5 V  P  I. S5 \7 x* g
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就0 K% r$ |* v6 g! c- L6 q9 G, ?
达到了不减命的目的。0 i: y- J/ V& ]5 r3 }" _6 m
& T: I! e" L7 B: z, \
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
7 ]% g  R4 n# q5 j. {
5 \* G; L0 j  G) [. r) @4 X: p5 Q说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。3 h' `, N1 d1 i$ ]. g+ o; g
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
7 `! I2 e0 b9 S; {' ~5 p+ L& D  I
& ^" f% H- v5 t) u- @1 O注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制# R& a* o' o6 s4 a) k
& L' l2 R- t1 x9 k" H
过去)。另PS游戏较大,改之前最好先做好备份。
4 H4 ?. @- R6 q( g/ j" _: a将改过的IPS补丁也放上来。:loveliness:
6 m' `" ~" T7 a* ?3 {( g+ c1 ^" h7 Q9 n
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~9 Q' s; ^' J, {- s7 ?; A
- S8 H1 o% \/ k9 U) o+ n% O
顺便解释下
, U" Y' h6 j0 j- u1 ~1 k00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ; g! m6 T9 G5 Q" U0 S/ R. @' A
00021cbc: nop 7 k, q1 `0 D0 w' Y( B7 B
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
6 W' d9 ~( T. a  h00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
' L2 Y$ T* @1 Y+ w" M0 u5 B0 U; I' |/ E+ }3 \" I2 \
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
% ]) O+ F$ C  J) A% G; h& L1 G( n  D; T
以上是个人浅见,希望高手别见笑~~~
( {% {4 ]2 }3 s; W9 X) _# [* q; F4 C' z( D6 `- s
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1953 天

[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 发表 . w4 |, p; f9 J- V
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,1 j" F; }0 i" S* [6 v7 s

% u  C5 I& Y: ]- t: X" r+ }0 C- n有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
* n# Y: T( \3 _" J* @. }3 O有什么 ...

, b2 A& g/ J: K- S% l1 r多谢了,终于明白了,呵呵呵:loveliness: ! [' [% ~; B& n

( e! X+ C% J& @8 e1 n
原帖由 shinwa 于 2009-5-1 14:09 发表 " ~8 n5 r- s, W! v8 ?4 X
呵呵 不错 支持下~~~~! T8 A% P7 N( W9 \0 F. K: a
4 u" ~5 R/ ^9 `% t, @3 j
顺便解释下; C5 W/ K) t/ D1 N" i
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
% y+ p9 F* i$ Z* J0 y00021cbc: nop 9 e8 d% u& o6 j  a8 A1 R. c$ t
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

- A9 v1 L0 S! Z2 ^0 f7 w  ^% X: B% _: {$ p, ~+ T  m, p9 W# y1 q+ c
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 * z  A* x4 v% P- T% x/ P) P

2 P9 f$ h% [" I+ W5 C% |多谢了,终于明白了,呵呵呵:loveliness:
. G! v# E: w! m! T/ L* B, d8 V
$ X! u7 r6 K" g# k3 r6 X  r5 z8 z
5 X. S6 f3 C0 h! g9 A6 g5 F7 n% m7 N" F3 \% L( _5 e
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

0 H% C' C2 o9 T' W% c
4 u% V7 z3 j+ D" [! J00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff ) w! m( g9 Z& U4 v' g
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的& @$ M- r  `! ]* q8 B' N
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-19 22:47 , Processed in 1.089844 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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