EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,1 w. K# R% O7 w) P' I3 M

. R  N0 V& A4 Z# R& c, p% l有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,, ~, M# D) K$ y% G! }
有什么错误及不足请多提出。  i( f, ], S' X8 ?4 i

1 G' \+ Z; B) p) _: Z( \- v需要工具:HexCmp[Ultra Edit]7 U- _; g5 l2 Y& D
PSX v1.13(Ps 调试器)
7 V; Z1 p0 g8 U$ v6 AEmuCheat; R3 K0 z  C- K! N1 l! G  G9 A
MIPS汇编指令。
) `' ]* N/ D9 M& P+ p9 \; j/ ~
# W5 B4 f1 R$ }3 q; G! z洛克人X5 EC:8 o& d6 x, H4 C! B
人数:0d311d,2.9 i8 o! s" g0 L# K- n
% f) s( h# R: H* Y7 n* t4 {
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。& R9 e" I! ~- _2 `% l( T. V7 I

+ R, v6 J8 o6 |9 b5 l步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
! ^: T& E, q' W' W+ b5 ?会出现调试器界面。
. g! X% b% i. Q其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的/ q  d4 z5 S; p/ I5 n
界面(Disassembly)。
/ }9 z$ X) \# v+ D' }右击Breakpoints的空白地,出现了添加命令的方框,点Add。* \/ ^3 N  e9 u& Q. g  Q9 g* D
) r' H6 J6 c. ?# x

5 H( q- a6 `" G, ^然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。  t5 Q* ?, K* B! M2 R! ]8 h6 i
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
8 s( W7 f" b* s4 B8 b. G
4 F. T% p; e3 Q" `1 A按F9,运行游戏。8 X/ W9 D1 Y( \( k
死一条人后,来到了这里,看Disassembly。' P$ Y/ C0 @6 M$ v9 I' \

3 I7 _1 v' Y- `: W) l7 V) L. P5 c" b$ P' I) F% h
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
. H$ U  O0 l" G- y& Q1 O% Z上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
7 o$ l6 m- M/ ~$ K. I
2 c; m2 I' y* b' q这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
7 n! e7 g% m8 Z5 \9 m' \( I- N$ x6 E( m$ d
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分), V+ `$ V8 P# I1 B' s( F

& t, j, ~% X* {% d搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
8 ]# p0 t! s; D4 f( \: Y" `" Z2 u( R5 R- I- k7 Q7 Q: j
到了这里,201afdcc.$ }9 P* H% W- r3 U

- s- O+ C, E) S. e0 h$ r1 ]: Y3 b$ ?: E% ]/ M
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就* l& y! w9 ^$ {$ W) v
达到了不减命的目的。
$ }4 m( `/ t) l
( f0 k% |9 E  V' A3 X  T# c0 T到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
3 g& |) v+ s+ J3 o/ g* P+ Q# J( I' [! _
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。" Y/ c& h" O) {5 ~
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
2 A* G, y4 f. ?, W: f. x9 g$ M" _3 s# b0 o( Z$ j& h0 r$ e
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
# y/ ^6 ?9 ?, T) S  {# c" H9 Q# s  ~
过去)。另PS游戏较大,改之前最好先做好备份。
; s5 a" \3 j' v8 ~) D6 }, T" A将改过的IPS补丁也放上来。:loveliness: 3 k6 a; w; _) t* L( Q, r

1 u4 o, t5 o3 j* q0 h7 Z0 E[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~4 F5 @5 |+ g) A9 l: o, s  {4 G
; @6 d7 W% r- w7 g
顺便解释下
4 N( P8 }5 l* J- S00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" U; ^" h# ?) I! w; C00021cbc: nop
: y: F) a/ ?: r8 ~# i. m00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
3 x8 \; u8 y# P4 G% E( Q% F00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址; `) g. G2 P0 Q& U0 M4 _. ^0 K
1 B+ _0 U% W+ n% D2 z9 h
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果6 P9 Q( b: z2 M/ A% w
2 N2 l1 [5 r) s3 l* P" i& h/ T
以上是个人浅见,希望高手别见笑~~~5 O; m' I( N3 u  M
. y2 y% u' n7 Y/ N  A; o& E
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2018 天

[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 发表 " O, W2 j+ Y( j5 Y& W% H) V$ k1 @
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,# y7 l) K( G$ T
' N) \1 p' b! u7 I+ B8 @
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
" h- t+ D) r' H& O8 G* L8 }4 i. n9 [8 e有什么 ...
6 a  j$ {! V- i2 I# T
多谢了,终于明白了,呵呵呵:loveliness:
& m) n/ M1 _3 H- w8 a( q' y7 ~. }; Y) b- S
原帖由 shinwa 于 2009-5-1 14:09 发表 8 O: R1 I( z6 ^. p) g
呵呵 不错 支持下~~~~7 A- ^( f- R+ }+ q
! l9 B) i2 @0 `, g6 b1 X+ ^
顺便解释下
. ^7 M* L: p0 q  `3 g% ~9 h00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ! h" D8 u7 {5 I! C
00021cbc: nop 1 a6 J* f& `- C' n- C$ x" E
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
/ y3 A- H8 F' s6 X6 q
) t8 ^- O3 a0 p- i$ d# m# [
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表   u0 S  M6 ~. P' W

- v7 }( x! z& G6 H6 g7 a多谢了,终于明白了,呵呵呵:loveliness: 6 P1 n  S8 R# S: B  i2 l
/ S* t, B, X2 Q

6 B, h6 m* z/ p2 ]. Q/ E7 v: R
+ b& I) b5 e! B还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
- C  B3 \% f/ l

: M' e6 B2 z- s4 G' u00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff / ?- y" L; A* S5 L8 Q, W3 Y
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的# H  y8 G$ u1 _' C# p) S* C" r
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-24 04:01 , Processed in 1.089843 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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