EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,. Z4 s# B% x: k, p! S

7 q( U& S& q% J( T- u有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,0 L& s3 p# X- Z& }) k0 u1 h; u, d
有什么错误及不足请多提出。( s4 K% ]" o; O- u6 [3 p# }
& V% m: E3 M. [8 p% R: R
需要工具:HexCmp[Ultra Edit]
6 k' s, x7 _3 ]" sPSX v1.13(Ps 调试器)
- C) G. A" z8 \$ n! W5 O1 R7 zEmuCheat
/ R1 y. f8 @+ S* s% A  y# r) _MIPS汇编指令。( `: v+ i7 a8 R" T- p
7 Y) G) z! a( h! ]9 \, X, l
洛克人X5 EC:+ _9 @4 ?3 y' ]; D( L
人数:0d311d,2.
/ l4 R+ B2 q& P# k! a9 x/ [' D( F
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。
2 _; m3 ?: k9 [2 O8 E  q: T, [! l0 p) P% T3 a
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。  |+ Q3 y2 p, h9 y& h
会出现调试器界面。
3 y" |* P8 k; R3 d其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的7 B- d. n9 ]7 `, c
界面(Disassembly)。  x: h+ u) x' N( ~4 J1 Z( G# T& u: y
右击Breakpoints的空白地,出现了添加命令的方框,点Add。  n6 J" b; s5 c, s7 ^

. s2 _+ I2 k1 x% U0 Y1 Z( K% X7 n4 @, K2 ^! O
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
+ s1 ], Y) ]- ?' R然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。6 H7 M5 M5 ?3 v3 V- k: @

. u0 K% ^3 c5 F" l7 N+ d按F9,运行游戏。' t" M/ O- s  d
死一条人后,来到了这里,看Disassembly。
2 L, F8 ~! q8 d( ~; e3 a# }
" \, N  R( \$ M# ^: e& A8 |8 k: V% P+ m9 D5 Y( E
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
& e$ _2 |% {7 O* ]上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
7 p7 v" r0 B3 g: I% r9 Y! H# W. ?5 D/ k% W) r2 i2 o, l% Z" J
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。3 ?1 e/ H4 G5 V. g  R

$ [5 }) _1 p4 M4 e2 J步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
! m! V! A, R8 {$ a. b4 g5 {' @& X$ G  r# r& j( P4 b* u
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)' f9 H4 y  ~: K/ a6 u

" E8 G- F( w' q+ ?( U到了这里,201afdcc.) [* R( }" R- e& J
- T4 M0 }9 O, y" N: s" q
, F% _+ b% w$ z- s- ]: Z5 i. `
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
# d# T$ |& C) T达到了不减命的目的。
) U8 `1 w1 ~3 l0 Q7 k9 q( |$ n. h7 g' e, ^. d
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。
  i( o& K; w. i* x0 y8 v  k# {' {
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
. t( I) K8 a+ D) m0 e. ^另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。  E6 h) K0 w/ a' q4 d# d/ X
1 k# e4 X  g$ W
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
( {4 a6 L5 P/ O/ p3 w* h. I/ E( U( Q
过去)。另PS游戏较大,改之前最好先做好备份。4 V0 }7 m: Z( B
将改过的IPS补丁也放上来。:loveliness: # b1 i& `$ l6 W

  p9 @, G/ @7 I  d: Y9 p- J[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
. S5 a3 z( D4 R) V1 i4 g2 C; n7 I* }* q4 i5 `
顺便解释下
  h) `, ?4 u( s9 ^- a! j+ j3 I00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 2 r8 c0 }6 ~& }6 S: K# I
00021cbc: nop
! f5 H+ K  O+ U6 p: u* R3 d00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
: G  n7 h- b! ^* m00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
' i) g& n0 V/ O
/ [# m7 J- s+ z7 k从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
  v9 B# f( @# s2 X# w8 N- v6 V
& N5 p: v( n3 N( S; v! }以上是个人浅见,希望高手别见笑~~~! Z+ S- _+ z) ]0 [1 h4 U6 D
/ a& w  U5 ^! x, I. u- q8 A
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1803 天

[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 发表
% m& y& Q# P3 J3 _应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
' P& i! ]. g! k! Z" b, |4 y! V2 Y
1 @9 m, ~0 Y" |% p8 S$ O有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
$ l* t' w; X6 \* k( {! v! @有什么 ...
% r1 m8 h3 Z6 W4 E- S7 @
多谢了,终于明白了,呵呵呵:loveliness:   C+ x7 J& E7 V. v9 l( ]" r
8 B+ ?% X' E( i
原帖由 shinwa 于 2009-5-1 14:09 发表
* f( b* o7 T, ]+ P8 A- W$ }呵呵 不错 支持下~~~~- A; e- W  {7 D; P

# M) j8 I4 W0 }/ V/ J顺便解释下
# r/ H& ?5 Y& P6 E3 S( o& _00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 3 V! Z( x  Q3 C: Q! O2 D
00021cbc: nop
; M2 v# c, J7 Y. y; A00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

0 i' B, s  \0 ^* i' o5 V7 E1 {, g8 d, e% Y
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 ; n8 P* }8 J4 y2 ^/ r$ h

4 K2 I. d1 A- Z$ r. x# n  C多谢了,终于明白了,呵呵呵:loveliness: / L% p/ q8 _* T4 H: Q
2 y# [0 @* i' B/ A6 d8 X: @- A

6 H8 j3 Q% \/ U9 S6 F$ m5 p6 U+ \' w
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
/ f1 @" c4 g3 I" [* [
" n+ k  W9 A# i6 R& |7 ?) i
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# \: n4 T; p; m
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的% [7 L3 C: c, ^
PS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-19 03:50 , Processed in 1.073243 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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