EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
* }, N9 \  |8 x1 g
/ x6 A8 l7 n3 j, {有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,0 ]) V1 W$ `' v" g
有什么错误及不足请多提出。
5 t  ]8 b1 \% o- Z# g9 e* D
7 v6 D5 ]& _) H3 Z3 Y4 i0 n; C) {需要工具:HexCmp[Ultra Edit]
  t4 R# I& a& \/ ?PSX v1.13(Ps 调试器)
6 ]* M. E4 X+ l( `& T; q# NEmuCheat
' R& A9 ?1 T: N) pMIPS汇编指令。
# T% W2 `, n5 U5 Y. q  H# s& s4 q8 n6 J; r4 ]/ F
洛克人X5 EC:: p+ z+ S) \1 J8 R( M9 M% K! `
人数:0d311d,2.9 R  k1 ~6 `7 T7 T& ~

0 V) U& [4 x- S$ D: W步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
# K, V1 P1 \! g2 U! n
  i( w" ^3 S; V3 Q4 v步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。9 H& _7 C- }. ^4 [
会出现调试器界面。
: f8 ]7 A- k- w  v其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的8 P; E; F6 w% Z
界面(Disassembly)。2 w, ]4 h5 K4 P
右击Breakpoints的空白地,出现了添加命令的方框,点Add。! @& n5 R: Y% W, e& H5 i* e7 t

( s' L+ N$ A- l
' c! g/ b5 Z, C* O8 a- a然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
; u" n) v. c! k( f然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
' [9 v+ [' N: V. l% [  L) c+ @' Y+ w+ q5 h7 G2 @5 i. i
按F9,运行游戏。, J9 t" k3 ]* N3 I3 U  p, t
死一条人后,来到了这里,看Disassembly。0 U' ?, i3 X3 x2 `) W2 T- u
5 _! r# C( ]4 |; j, Y

, J' b$ i0 b% q* a步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600- p3 ~  j4 `5 i
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对9 D, W; V! n* ]
: F- j' G, k2 e6 u( B
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。4 i6 w" c; s2 K& C
0 g7 O# C0 I0 L/ I
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)' V3 B/ S1 r! y

5 L* [9 N7 t# ~. G! W% h6 ?搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
; ~* r3 h4 t' D: q1 T  \2 q& R* u) \- ]
到了这里,201afdcc.$ \& k6 t4 p6 K6 b# R9 Q
7 M) \) I6 R( Q, F0 G# W5 c

; N" |- M! z8 c. v将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就) T3 }( K, j: ^9 \
达到了不减命的目的。  i! o$ `1 B1 L8 o  ]3 j# H

6 _! x; Y) U( ]1 l; N9 C到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。4 q  ]9 J: \% w4 u% Q
9 K! ^( R" P. _( L
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
  [8 |, z) P, n另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
) @5 h' O2 q4 L3 D. T% M5 ?
3 u( Y& E, y1 o) v$ B& {8 V注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
6 X# ^# [; p' l* o' |
  N: `  G) ^6 Y1 X' P4 M7 L过去)。另PS游戏较大,改之前最好先做好备份。
8 j+ S5 B+ f! Z: s1 m" V! t将改过的IPS补丁也放上来。:loveliness: - x$ ]: ~; R/ o4 x7 v9 \  E

3 {' G3 H  K+ M/ K7 {) Q[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
# X8 p( t" g6 l- x! g! n9 Q7 E, h2 s; z3 Z* Y+ v+ \
顺便解释下
8 h7 f6 ?0 A* {. y4 q. Y00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
8 C  x7 U$ {; u; h- X: s00021cbc: nop 6 b9 p- M8 K" [4 p
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
! l) k1 `9 y! z1 R4 U, e# d, C00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
: |3 v/ v' m/ N* x5 }4 I
1 W( l* q  V5 I" {$ F* A# X从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果7 l! w4 T  R( k0 s% s

# q: ?8 o, }6 ^' J( N, n- H以上是个人浅见,希望高手别见笑~~~; x: M$ \8 G* y" o3 t
# A) O% b! i3 G6 a5 b4 _7 b
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1772 天

[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 发表
7 |2 b% z( c" ^+ t0 ?% m3 |$ X0 R应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,, m+ a7 k; N3 n

9 n/ d6 l0 U+ y! \5 U, d有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,, v( _* ~: ~. {+ F' f
有什么 ...
6 O. B, r$ \# @0 ~9 C1 w9 x) S
多谢了,终于明白了,呵呵呵:loveliness: 3 |: X# ?( f+ e  k& f4 S

- n8 G( Y8 U% o8 G0 m  p  H* i
原帖由 shinwa 于 2009-5-1 14:09 发表 , r# e2 O( m4 A9 c8 I
呵呵 不错 支持下~~~~
& k( m, }, D2 I* `& M0 m' s2 A( A& G* I; B4 f# |
顺便解释下
# Y( ]9 f' \8 W00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 - f9 c7 m# b& W1 f$ Y
00021cbc: nop
4 M! G! i- Y$ x6 k  q00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
( S( }# Q5 _7 z! R4 H$ o( Z
- J' K; T. I* _" Z, s9 g
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
/ z5 c4 A4 Z* @1 p5 V9 g. t
( ^+ g7 P! [6 J: f) z4 w, z% |多谢了,终于明白了,呵呵呵:loveliness:
4 @; v1 W' j: @1 s* ~* d* ~
& o/ E$ R1 I$ }8 k! p& j# k6 i* G3 e
" J; G! \4 O+ t% E
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
% a; i& g7 g2 R# I& E  w

% d3 [, u, y/ k- A4 d1 x. J00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff
& N% f  c  j$ n/ ~; X的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
- }! F' J: ~2 l( r! BPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-18 08:44 , Processed in 1.067383 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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