EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
. F# Q6 y$ @6 a% a- h, A' X# s* _: m0 ?7 b' s
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,% D# {0 \  L2 W* [0 q: w) a6 b* k
有什么错误及不足请多提出。$ d; R% n$ `8 e* m/ u4 b
- J2 R* R4 t1 O( l* e  z/ l
需要工具:HexCmp[Ultra Edit]
9 c& s5 [0 P$ ~9 ^& @7 mPSX v1.13(Ps 调试器)
( R9 e- M3 A8 Z3 ?EmuCheat
/ Y$ J. H# _- I  HMIPS汇编指令。
* q; q8 B0 V# t1 N8 m, d- ]' K" r. ^6 B, a: i2 u" z
洛克人X5 EC:1 ?  a) {2 P+ u0 Y8 T- ~
人数:0d311d,2.
, e- d1 @2 g( G2 U6 ?  k/ L0 I, b' |3 M# P% K9 T
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
+ A& x$ P/ `( b! a' @; ]3 z& N* U9 o9 |; u
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。, G. N4 L# ?8 ?& E2 d& T
会出现调试器界面。) \! l2 K9 \+ `- J" D. y/ N' O
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的0 l9 {7 ?! m* B
界面(Disassembly)。
7 ~9 }- {6 B* Y/ I右击Breakpoints的空白地,出现了添加命令的方框,点Add。
5 c% ^. W7 c3 ]5 T' [
+ w9 B; y: m/ t: Y. |
! J3 {/ h+ R  D4 @- O) e然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
" C1 T+ h4 j% t+ h$ e* {3 B然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
4 C$ q! \8 _1 ]2 f
8 D! r8 V4 I! A! ]2 h  {按F9,运行游戏。
! m$ ~; Y9 ~5 m( U0 Q! h死一条人后,来到了这里,看Disassembly。
4 X9 S1 s2 n- _* F; @' r
$ b: U% a- m+ f3 D* u/ g' k- R
& ^- }0 x8 G1 z步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
# H; z" d( Y, M* Y* B上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对$ i. P5 c- a  O+ k
4 V3 O" b6 s. ]
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
. }4 _2 a: ^/ G+ }: Y
; L  W6 z$ [9 o步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)! a# w$ v; M- {: r4 D& M1 ^! Q5 x
* R7 z/ [  ~! ^. l; K( a$ B
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
3 k2 c' Z2 p9 r6 G6 |! u3 S* D- F: T+ ~
到了这里,201afdcc.
) M) }! y5 d5 [; u/ n4 P" W- q' g
4 a& T* D) v" b7 R$ B5 O2 P4 P# d+ Y6 k
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就6 y; m3 V0 B' ^, s  y) x9 p# I
达到了不减命的目的。0 J* Z. q2 m5 I" T: E2 ^
6 T5 `7 S$ ~. m9 u) h1 ?! C& i
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
8 N9 Q% P; Z+ S# t7 l. s
: m* k; g1 a3 G$ o说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
: F: J& X3 m8 p另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
' @5 J' P6 c- S. M% X) c' ~. {2 o9 z, N1 U
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制7 n6 N$ Y4 _/ q+ @4 V/ B

4 S" n4 @" @# S6 b' ^过去)。另PS游戏较大,改之前最好先做好备份。
- B3 s8 P3 K, u: p# A. z将改过的IPS补丁也放上来。:loveliness: ; E0 J7 n: A) l" }7 u3 \
' {! q/ [4 D/ h2 M* `- r5 G
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
/ h7 ]+ o7 `0 |2 Z5 b$ }9 ~. E* J" \
顺便解释下
) Y0 ]) }5 t( L! p. p: A00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 5 c4 Q8 C% s2 V4 T# Y6 e  T: a
00021cbc: nop " ]* e, T2 n! \8 h; G9 A' K6 \
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
5 q* q( L; I. E  O0 @  G6 I9 W00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
! P4 y+ S4 o, }8 V+ L% N3 H7 ~) E! P* A5 h- m% C
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果* c: T7 h, {9 q
3 N6 ]% [5 C8 b0 }* k) d* Z6 P
以上是个人浅见,希望高手别见笑~~~
9 H; J4 O1 E2 _. u* \9 Y- C1 @6 o
) P! W: i' l2 c) B3 S- G% z! s[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1719 天

[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 y4 w; N5 p& \: w2 Q4 j应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,9 Z- C; e' A/ B$ h9 Q" {

5 y& }' `) s3 v  z. ?9 d有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
" l4 c! r; q. E有什么 ...
4 Y' |( w4 H- N: j
多谢了,终于明白了,呵呵呵:loveliness:
* z$ r3 ^: c1 g% o. l4 ]# `$ J: z/ y" h
原帖由 shinwa 于 2009-5-1 14:09 发表 / G9 t9 ?: {! d) V; X) ^
呵呵 不错 支持下~~~~' Z2 c, _2 `* M* c
  t) P) s, m3 r8 U5 f. \8 H
顺便解释下
0 @' A( a7 B2 S. N: U" `00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 " L7 _' l, H- m# ~. a! r6 R# v
00021cbc: nop
8 {# p7 k4 }5 x00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
' [5 ]1 y* ~$ z# Z/ |4 n

- K/ ]; g# a7 g1 e/ ~1 c! N还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 # g8 S9 }8 e% l" o4 y# |

  R( B. d  U3 _% _9 y7 W多谢了,终于明白了,呵呵呵:loveliness: ( w1 K) z+ J* P* @8 d: r" H
& I9 j/ O5 r% s/ g: G1 `" K$ [

; P) P2 i, a8 X$ G0 g  U2 I/ }$ z) |! m( a6 f$ M5 t
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

' I7 N5 D% Q7 U& S, h$ H6 ^& j; l7 G4 P
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 2 P% }1 T5 |" }" @7 B" j
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的( _4 M* t+ @, ?$ J: z1 t# @" N
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-26 02:19 , Processed in 1.070313 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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