EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,, Y" a0 ~& \- x/ u

  Z( e+ u, J) C* S' i有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,) x9 G- c+ u! L0 v
有什么错误及不足请多提出。
6 P+ e! `( [: d2 x1 L1 w1 |) ]4 Q- @. j% G1 \
需要工具:HexCmp[Ultra Edit], V) _1 c1 r. }% u5 o
PSX v1.13(Ps 调试器)
$ L' g7 r1 j+ v& X! `EmuCheat
" p& P9 [( D3 x1 M4 z) m  fMIPS汇编指令。
% E& r& l. p6 E& Y6 b# z) e! \- F( Y8 h' P. j# q* @- X
洛克人X5 EC:, \' D0 t; G$ H2 C7 t
人数:0d311d,2.
8 k" `; s9 L. v# G6 A( [& [! K; K6 G( S/ e
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。) N$ p- X( q) v7 m

( {9 L4 G9 C/ \, d步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。+ v4 h& v. D! y
会出现调试器界面。' `& Q- ?! N; k/ d
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的2 g, ?+ M% |( S2 o5 O! n7 M
界面(Disassembly)。
- h' ~" m" `5 i& A  l右击Breakpoints的空白地,出现了添加命令的方框,点Add。% }8 g' k% P# Y* `/ g. x3 r
( `/ [! J, ]7 O: i4 t0 b& X

/ V3 V" t9 t8 f( N9 O然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。, p' _) F! l0 A6 [
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
0 h' L! w8 T" N; N% p
+ V  t4 w1 R% W- P( V5 _按F9,运行游戏。
" p2 B' n$ J, d5 G+ I3 S* S死一条人后,来到了这里,看Disassembly。3 k5 z* `) h6 |% q8 G+ b6 b# z' C

9 R" t! B9 F$ V6 S
& M# g6 F/ P3 A9 R2 P步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
) b" E' ]2 U9 I; n. M上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对( C4 O" G* E7 h  f& I: F' y
$ o+ b8 e# p6 `) S# V" Y8 D4 M0 `8 j
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。- z# N- Z+ m2 W9 a1 \

. ?  ^5 b* S+ S6 l# ~; F$ ]; N9 _步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
2 t7 Z/ j/ v; C  j( R4 z/ z
( d2 [6 b% K% d, W$ s  y- {搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
" S# ?0 b% h3 M: D
: M. p4 Q7 _( e  o# w. G到了这里,201afdcc.5 h* K% t0 y1 [8 E1 r" z$ ~
1 Z7 [1 v3 w$ g1 q+ T) _  b
6 y* }: p7 o8 Y$ _! E/ R
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
. J6 R# i/ u7 F9 K3 L达到了不减命的目的。' Q+ m3 Z: j: j7 X% f' O

$ f3 _9 s$ y( s, z  A到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。  U& D! s0 b8 |! k7 p

* X" g# j$ V' }2 Y$ c说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
8 Y( {$ ?# |+ L0 K1 o6 W0 f: G另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
( k- \6 Z* d6 d* z" l6 r* j0 S
1 q2 i0 W7 z4 R$ ^; e  M1 ]' g1 ]注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
& z3 q, y3 Z. D9 i
4 C0 ~* F( ~8 a& Y3 d9 L过去)。另PS游戏较大,改之前最好先做好备份。
% G* R  O' p  t0 Z! ~0 _6 V将改过的IPS补丁也放上来。:loveliness:
0 H: n2 A, M: D/ j" i" z7 ^; R6 S0 w/ W. _' t8 E
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
/ [( N8 \) l  V0 R- @1 s+ s0 X0 k! |* u# [+ h( i9 \" t" Y; |' p6 f  h
顺便解释下8 J  w- p7 K$ U0 k4 e& h$ }
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 4 }6 u* v  g3 A" t1 B8 X6 n; E
00021cbc: nop : @' X- `7 l& Y% ^
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算0 m" K5 r7 p* v# m8 F# _
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
# p. ^$ \0 z9 Z! i" f
+ B# d& ^- m, c从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
( a& G9 Y+ A6 @8 M0 o
8 f) k; ~# M- J) x6 h以上是个人浅见,希望高手别见笑~~~, H/ k' _+ z/ A/ N
$ ~3 s/ U. [: l$ x% [+ a
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2073 天

[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 发表
, J, J' A3 o+ _& Y3 Y) _' B8 j, ]+ \应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
% N* U% l1 P# j5 H. D* g, ?! A
8 t9 {; v/ a/ E有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,* A. M+ p" e7 s1 [" [
有什么 ...
9 R/ z1 r% ~3 U0 B& {
多谢了,终于明白了,呵呵呵:loveliness: + Z( B; \% j' c
# D" R) L: R( I8 _! w
原帖由 shinwa 于 2009-5-1 14:09 发表 7 n. ~3 Q- J9 d  b
呵呵 不错 支持下~~~~
( O8 M) K2 u, C  y1 `1 Y$ e9 f/ O
顺便解释下
# t. F. [: A$ x- s  K00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
: {$ H( k9 h+ V9 Z) \% o00021cbc: nop
1 X6 F) f0 T# j$ K/ d! N' o00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

9 D1 Y* D7 o+ o" u; Y) C1 H: ]2 ~! Q
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 3 \8 _; i' J1 f6 e0 C9 b
% X: ^( D) p; `* b- P2 ~
多谢了,终于明白了,呵呵呵:loveliness:
5 a& a" H3 l  {" h
+ s) N5 m$ m9 K  T, R  V6 f) \, K' `, j: w. z* L- {  v

0 l0 g: L; i) u, F还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
/ p1 o+ @- W& O. m: J1 T4 H
! i' T6 U9 p( m( A/ ~4 w3 w8 {  W
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
: I' m  G8 ~& h+ S, m+ y1 X! r3 ~的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的  e6 G' Y3 u' {, ?  i% ^. f1 [7 F. D
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-17 04:49 , Processed in 1.083008 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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