EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
' G: F! U" E- O) T4 s; i3 t0 \* p0 W8 U8 l4 A
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
* ~6 X- Y4 q# Y8 s# K9 s有什么错误及不足请多提出。0 {9 [4 X  l& @, L- L% \9 ^( l- M
  F# n( |" Q$ M" {! k+ l  i  I
需要工具:HexCmp[Ultra Edit]
* ]4 \/ e0 p$ w% m7 O0 M1 D* b+ ZPSX v1.13(Ps 调试器)$ }/ {5 T4 a' E3 G3 N
EmuCheat
9 b" f2 @  E% k3 E" RMIPS汇编指令。5 [, Y/ W, n0 l: E9 @

$ U2 x! N) D& \" T6 y6 P2 n+ K. \洛克人X5 EC:- q1 S5 z, I0 m) C2 @
人数:0d311d,2.
/ c: D4 N0 f" i- _1 \% O
* U4 l  y/ P- j" r' H; l: I步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
  b  r+ C3 X, A1 E
. F+ t8 l! v& l( Z# }1 E步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。- v# P, b4 u( F' Z6 E% J
会出现调试器界面。
0 @) n  G2 ~# {  p$ u其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
% E$ @6 r2 x6 H6 s+ D界面(Disassembly)。; F9 b/ P) x3 [. S: r; h4 q! [
右击Breakpoints的空白地,出现了添加命令的方框,点Add。2 B6 z3 Q/ A  i+ u% ^
) W' X3 L0 f/ Q; j4 p' B

+ r* T/ w: W* ?, V, q然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。5 ^, |3 T. z- G2 |, r" o5 d; D  q
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
7 |2 B0 m& p' E( F" \6 m
7 R/ d2 c$ e0 l7 c! S. c$ R按F9,运行游戏。
9 e, ?# Z9 B: u死一条人后,来到了这里,看Disassembly。( t' W! T4 r; H# u" H! L! u8 X: H+ F: N

+ y, a: [, P1 @3 q
$ M  g0 |) w* I' E: A步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600( W2 }1 P* D$ H  a0 r( e
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对0 Q4 G& P- B! k: Q* O

! t+ |! e& ]7 f" I$ [这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。7 W% J! q9 W0 F+ z* S/ _  @% Q

3 t0 n% K7 ]: u% e, p( s3 R步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
7 @: G3 @% a  f7 y4 E
( H' ]' @  r& R' u搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
. z( ]! F; d( N
* G7 H: j4 t% R$ }9 y到了这里,201afdcc.
! f7 P9 \, \* r& z% P
2 b9 c# @0 c5 Q% w. h% h# ]! y8 g/ {1 a; W7 h6 q0 H
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
; s# Y. b4 @1 s2 {% D& C达到了不减命的目的。
( F5 U8 e4 K6 D1 N
6 ~8 H/ `, F# W6 f到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。3 n7 A6 q$ b0 p

& Y$ @  A2 D9 \& j. i说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
# \1 M" C0 g" n7 Q( y! G另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
& I" x2 Z5 r- V& N8 d
2 T; @" b1 h1 |& l注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
4 ?2 c4 z3 z3 W" g: u# K9 Q& C  c  L/ K2 ^6 O
过去)。另PS游戏较大,改之前最好先做好备份。* O1 I) i* s! }1 M/ b* y
将改过的IPS补丁也放上来。:loveliness: . ?" W, e  G3 Z  R
4 b  Z  v! j! g( w( C; X, A
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
. Z: M/ }$ w7 U( j! _9 v. t" l& P: C) P1 l6 C* z' o4 q
顺便解释下; G, r1 @. N1 q. p- ^
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
0 v. X6 K* g/ A8 r( J& K* ~00021cbc: nop 0 F: h4 u. `- p
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算, @6 h0 g! g4 R9 O
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址+ Y, ^$ U( n. m
+ `* d) r2 H7 R6 e
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果+ H# q, |, `8 ~3 }& V/ P% J0 ]
. n/ T: L8 K/ T
以上是个人浅见,希望高手别见笑~~~
  J/ g3 p7 i0 f3 M; u9 N% i% q) ~2 x% G
& G: ?; b) ?# w# f# E% x$ q[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2183 天

[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 发表
6 o1 D  H/ {' h2 w应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,5 |; g4 d" R6 Q" `4 P% v- g
( c7 f5 ]& c- r# Q0 k! j
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
7 v8 u! a7 E$ O# ~有什么 ...

2 q% u. m2 s' D+ K" l2 w多谢了,终于明白了,呵呵呵:loveliness: 8 v9 M' @& C3 d0 E; i7 y. O

' p% a) G: X8 q) Z
原帖由 shinwa 于 2009-5-1 14:09 发表 - A! }$ e6 \  u
呵呵 不错 支持下~~~~' k8 g. U1 h, T' H* C7 m
2 j- p9 x# \3 h3 t5 w& ?+ N
顺便解释下
# t$ h2 l) }2 ?. R5 y00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
; a$ H) Q, K9 [7 I. M00021cbc: nop
4 f; a1 O" ]2 i. P4 V! j00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
' V8 V: B$ S( C, N( K
0 T  ^3 Q+ `7 S: w6 E* t2 q- k% I
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 # j+ H& N: b2 i% t, ^
9 Q$ U# q$ N0 f5 `! D& W9 Q
多谢了,终于明白了,呵呵呵:loveliness:   `8 @" E3 n0 a
! J: q) V9 j: ^, X9 ?
: H2 s" C1 u$ s7 P" e

# K$ r% {6 m: U( G1 P6 ]还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

4 \; F5 I2 b. Y& H: l0 a2 Z. I! U
* x( C: `- Y& V0 c" r00021cc0: 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 c- y4 H& n1 K的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
$ W1 W8 L" C5 jPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-7 08:06 , Processed in 1.075195 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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