EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
" ~: s  t1 V+ P/ B/ [' W- k! F; l3 E
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,9 c& B1 H3 V* w& }1 m% _
有什么错误及不足请多提出。
  g" ~5 G. \( B- U! ?! C7 N, L) h0 I; y$ J2 c7 r. u2 A# C4 P
需要工具:HexCmp[Ultra Edit]
; ^0 _% X4 C& s2 FPSX v1.13(Ps 调试器)
+ ^3 t, ?  a6 i! U2 z4 D7 b" P6 }EmuCheat( H! \$ q5 t  }4 o, \+ e
MIPS汇编指令。' R( R' v$ a7 e8 \! c9 ]8 ?( H; m
! N1 b; v5 z# g4 [3 C- t' K1 `( G/ _
洛克人X5 EC:
: G% H+ N' J7 d人数:0d311d,2.& ?. @8 X" J$ U" C; z% E
& p9 j' l  c; @; P- ^
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
- T. K9 i/ ?# e
5 Q5 x4 [+ d. R9 {6 Q步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
! W+ O) r; H% q) d0 S! s7 I会出现调试器界面。
, Y  V/ z) @+ J  P! F  f9 N( I; k其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
; Z; y5 m1 Q; _界面(Disassembly)。
* L# {1 w: Y8 x右击Breakpoints的空白地,出现了添加命令的方框,点Add。
: v# r% O! u) i9 P7 B: i7 I
- l2 x; s" O! X% L9 W; Y3 m% Q" P8 @$ ~) e. C+ ]
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
# p3 A& T, d) @然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。+ s3 X5 ]. ^5 P3 c7 a. j* O; w& {
& M/ `& v# F, @- n* j
按F9,运行游戏。
$ M8 z3 x% Z5 ~" W/ i3 c死一条人后,来到了这里,看Disassembly。
$ ~$ p% f  K, }! W
+ V; [5 R3 \3 e8 B$ X; x  M: {' \' n1 q& m+ x
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
- q" d0 f4 K  }5 p+ J; R上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对3 {$ |9 r5 [: X1 y# U( f! `" [! {

$ j) ~: u2 I4 ]8 w+ \- j这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。/ i/ N. W1 C5 I  e: e" u) p" T% y

7 W8 J5 w" b7 B: m& i# p8 C步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
- a: r% O- u5 [  U
$ H$ C: m& W! B# I9 y3 c搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)4 D7 _0 z' b; Y5 R# S

$ q  F* Z3 [! y2 [( w到了这里,201afdcc.9 R& P' @' t6 K0 ]1 f, O8 v7 J: ]  b
6 O* o" ~- z: N0 d

& K- D! ?6 P6 A将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就  e; {8 H- c( L& l/ L/ ]5 Y
达到了不减命的目的。
5 H9 t$ F3 _$ ^5 c4 @" \
  X2 M5 _3 g1 u0 j  }0 K/ \  Q到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
1 i, ^6 ~( M" s9 ~4 _/ D' M
- Z* P( q" G3 ]) A4 @7 ]说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。' |! @. J" o/ k6 x# {. M. g9 I
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
% ]1 O# c4 E6 X' A$ V; G' }; c
8 X- s. I. S* J% h; Z. |+ q6 z注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制. `# [: d; Y1 M* F/ f# z6 `, t
3 e: d/ C4 ^' s% i- y) P. y
过去)。另PS游戏较大,改之前最好先做好备份。
; h- A+ w6 R' f将改过的IPS补丁也放上来。:loveliness:
! t; o& A$ G$ s1 h0 N$ a- K6 t
, ^# z( P8 g8 y( R* r6 s2 V4 t[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
0 P/ C% J! ^, J
3 Z& n- f1 X/ y0 e7 Y顺便解释下
# u/ W$ l4 P/ q3 ~5 p0 K" y- ?8 s00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" l& J) S$ g; T( |* S7 l6 j00021cbc: nop
3 ^. y+ z  a6 r00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算4 L" l7 c; ?( X, u
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址% }1 q% m! M- p# n! b* A% k5 D3 T

( }" n) B) M. C  G1 @, y6 C从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果, t4 Z# s7 v/ y* r5 ]  _

9 Q  |1 U+ ^, i9 j% p# k; w以上是个人浅见,希望高手别见笑~~~+ F3 h# m5 ]( U; I5 c9 h5 F; ]
9 d3 w. H; P& v/ C0 k' Y
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1588 天

[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 发表
% K1 j1 b# k/ ^3 l2 y2 b5 d应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,0 k! {4 W/ G; e5 P* f1 A) n
$ ]* D- G  U2 L) X1 A/ q
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,7 k2 Z. Q  j9 n2 k/ L  q
有什么 ...

* Z: n5 F+ Y* Q$ ^5 u多谢了,终于明白了,呵呵呵:loveliness: 2 G6 d. R5 s7 K( ^: a9 Z, _

) o9 C, {) p4 B+ G; m
原帖由 shinwa 于 2009-5-1 14:09 发表 ( c# a5 s1 {4 L1 M
呵呵 不错 支持下~~~~
/ S# o. }1 o& F3 m0 L" @& t8 Z
/ Y" u& R$ p$ V  v/ O$ o4 Y顺便解释下4 L. V1 [0 O, b$ T# c# z: W
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 " m$ y  @% p& C5 M! L- O! S
00021cbc: nop
+ T& q5 \; N% C00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
; a1 ]( L; f- G3 D7 x5 p  ]$ p% n

5 `, [5 @0 S2 A$ L! r1 S: q还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 4 a- @2 `. J' d( W

: L2 Z% ?) h0 V: Y2 D% T( J多谢了,终于明白了,呵呵呵:loveliness: - M0 z  V9 v; L3 a3 j; F5 ~. i
1 U# i. K0 f6 Z8 p/ N, s
9 y) W! e+ m) ^' W% T
! f' k; s' c; H+ R9 A1 h
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

7 \. N, s$ I, z: f# z9 f+ s8 s9 _  j8 @3 a1 f1 U
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 " k$ a1 \' o/ s; h4 U) v
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
$ Z; r% M3 X/ a2 m, _" uPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-18 10:43 , Processed in 1.093750 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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