EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
: a7 d- G3 Q( ?$ W6 k5 e
  e- Z/ Y7 O: J, e有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
7 K' {4 {) e4 @+ h/ R有什么错误及不足请多提出。
5 F) k3 u& j! O+ n7 [: ^  Q5 f7 {# R1 }" e
需要工具:HexCmp[Ultra Edit]. X! n) x3 Z/ j" E0 J5 j
PSX v1.13(Ps 调试器)$ n* Z% ]+ y7 l1 h) N6 p3 ^" H
EmuCheat
: M% P2 K' l+ a5 ]MIPS汇编指令。$ E+ Z4 e% ]1 V3 T2 r
/ b& A7 y; }2 y8 P# U. T9 h
洛克人X5 EC:
3 Q# |' X* Q% J人数:0d311d,2.
5 c( ?% ~  U" |! h  B5 x# ~8 I$ A( c& `% U4 D9 R8 h0 b" A
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
" P% T$ i& T  g3 Z# Z% X9 m2 Y0 z' I* p0 }
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
, a0 k; j* b: ?! O会出现调试器界面。
& m8 d# X: O1 I( d' b" k其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的( o- H* o" J: T, P3 |3 j. E
界面(Disassembly)。) ]0 Y( x3 a0 A
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
5 V6 f( A9 M4 J* X4 P9 \# Q. B$ y) W7 o* r9 s# ^

$ |9 H+ I! F; |5 g3 p然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
" @0 I; N6 ~7 @5 R) A然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
0 C1 }. p/ ^, t- M
. H7 ]& D/ a, D8 r6 i2 J按F9,运行游戏。/ p9 M* w# \1 R7 ~* S- p3 H
死一条人后,来到了这里,看Disassembly。9 M: z, X% O! a9 v+ V; y
) N  ?, }4 S" ^/ T6 q* Q7 [0 _

. b/ f3 f3 G6 x) N步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600# E6 n; ]+ X* n, I4 k
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对1 |4 I8 b/ ^2 b$ a2 P5 H6 u

% p2 L8 ~+ ^$ N+ `) z这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
) b) n2 J' x" K8 B0 z# r6 t7 F/ O/ g8 d
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)( k6 ^9 p  n9 S

9 t. i4 f! E5 w9 Q; b搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
  C/ d2 a- l4 |  \$ c% I+ K& R+ _+ h
& h3 h6 K. r6 z- C3 X% R6 m6 G到了这里,201afdcc.
, `5 Z( C. g1 S: t1 F  y& Z: t  G1 F! V% C& s3 V% ?3 l5 f& P

3 s3 `% ?3 d7 \$ N* r5 f将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
: i- M8 x8 f" u, g. `达到了不减命的目的。
7 n2 ]- D: i0 H, x. |& X
$ I% J# o7 |& h  U, Q( N到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
  N- {8 {, c4 b9 b0 y
7 E3 `' c) c5 p  W9 h说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
$ c- H& s' B7 N6 Z另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
2 ]4 D9 }9 c( B* J9 m  O: t8 B8 j  @: _. g( O0 n8 A& H" Y/ r8 Z
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制" [, `; M6 ^' Y/ V& @5 U( L6 k

8 X3 e2 C* w  u过去)。另PS游戏较大,改之前最好先做好备份。% i" h0 Q* x' t9 f- k
将改过的IPS补丁也放上来。:loveliness: + C5 u" ]) \* J) D3 C
: a4 X6 K4 p+ Y1 R+ M6 Q& G5 o/ }
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~. C; D: e  J) h: N* w8 L. N! F. I6 w
; P9 J/ n% W1 r+ w+ s
顺便解释下
1 K- K/ F  g+ j2 J00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ' y: U8 J7 ]: m# @3 w
00021cbc: nop ! Z7 R8 G7 V  R5 K7 I9 ~. J
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算1 S1 \; h& y/ L
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址  c- o( G- {: S4 C5 q

( q9 i' N2 o2 |. j+ D从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
- U  U$ E+ M1 v$ }4 g5 ^% k  U/ _* _5 w, z; b# z- |9 d
以上是个人浅见,希望高手别见笑~~~, q% f3 n6 R! `* N  v3 Z% [: u

6 S2 u9 [& ~/ m4 f# q- G[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2135 天

[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) f- V0 q; H; _/ l应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
7 q* z& z5 V/ K4 i& {% j4 r: f, e+ Y) F; T* W: L0 l% ?. w  ~- {
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
- A$ \- I+ f; z3 X) Q  L. [6 ~) a: A有什么 ...
4 b1 G/ u( i: C* m
多谢了,终于明白了,呵呵呵:loveliness:
8 C, a9 g9 l" \4 K) a
) H* a7 F) ^2 |/ {* q
原帖由 shinwa 于 2009-5-1 14:09 发表 1 N" A4 c9 W0 W" B) \+ B
呵呵 不错 支持下~~~~4 m  g: X! t8 E; `

  F  B/ Q' N) s' _" l4 e; A顺便解释下
) J# N6 p7 H/ ]$ L& G! F# x00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 6 Y7 s2 s. u" T4 r+ p
00021cbc: nop
' ?, p: k# ]9 ~  y4 @( A00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
# M" |+ T2 `3 C% l; S; `- E
7 E# x7 T/ M- T( v& f: k
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 5 e! s& ?4 c5 k9 t% g! \
$ T, X9 ]. `4 `  G9 J, K/ }! \
多谢了,终于明白了,呵呵呵:loveliness:
% n" k7 m5 m, H. F/ y
; z0 H6 X, ]. T+ @
# ~8 i% s8 Y# b2 L; b
/ ?7 G) J- j1 U( D还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

  z. a. A4 r. ]1 u; D3 J$ [+ G2 l" {& ?( s
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
, M: N0 g/ v; _  R& \的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的: @0 e' f. p6 f# A7 k9 H: s
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-18 11:24 , Processed in 1.066406 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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