设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,' s* u& a  |8 h6 [8 u) s

7 p4 v3 O, M: A+ V5 w, R有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
% y. M% C8 ^+ P* P' F有什么错误及不足请多提出。; E# l/ R/ Y2 N, K. i
" e. |3 I" e$ x0 E
需要工具:HexCmp[Ultra Edit]* o# e  a) Y/ B+ W. V$ T* r
PSX v1.13(Ps 调试器); {4 m" r9 l! n0 P+ A5 L0 J
EmuCheat/ n) z  c$ M0 ?* I1 l
MIPS汇编指令。
" Y: w/ v, n* R' H
+ w# V% k! q" k. b  X3 n3 [洛克人X5 EC:
' [" i/ e* B/ Y人数:0d311d,2.
  k8 J. ?: X( i. O
' x+ L. [! l/ z* N: W! T5 e+ g步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。! U# g" B" c& O* v. |

# L- B* l2 ]& H: U$ `0 A- u步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。" _! J+ Q. N/ m. P8 G" b5 ^
会出现调试器界面。
" [4 a; {6 a7 a其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的+ Q7 t4 R- H, F, o5 @" ~. M
界面(Disassembly)。3 ]3 g& V* y6 h! j3 Z; e; c& W& D
右击Breakpoints的空白地,出现了添加命令的方框,点Add。. q: O4 |4 x; e
% d, H4 E4 P* W0 U  D% m3 Y7 }

7 {" U- N; w# s3 k3 u然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
2 l" i: r) i2 x" C2 K然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
4 |, y' c+ P4 E% U% |- i" V% O" s1 b8 A- |
按F9,运行游戏。# @* {9 W. T8 j
死一条人后,来到了这里,看Disassembly。
' C, L- j' t& Z8 W' V( Y* _& e/ q/ C* a" F  z

$ P$ D* K9 p4 C. v, H: a. U步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600% S  \( G$ a+ ?/ u: R  |' I
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对
4 r# I  M% n3 t% K+ G1 s- G
" Z) t- I# ?% n7 i9 z, q! K这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。# P- s! k$ E" E. [, T  n4 y% l- L

% f3 [% c  s/ o步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)2 O, y" h5 p- X+ r+ G* B

; b/ {8 q4 ~% d* |, f# W, D搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
0 Z4 Q% Z5 h' s% |# P
4 w) i' c$ V; x) k0 G+ \到了这里,201afdcc.
; `, P0 E; ~! z: I7 c3 K7 L$ V0 Y/ [. \
! ^! Z/ {5 [" ~
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就# u8 S& i2 B& a& _
达到了不减命的目的。( ?3 z& M# Y, q1 [! \
% V/ }5 I$ a; @# d/ s8 \4 @
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。; W/ ~5 o- C$ s, M! w
* Y8 \1 @# W/ R% f  i0 i
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
# h. w" ]7 o5 V( L另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
% M$ K' q6 Z8 w2 R9 o9 t0 B
4 B$ O+ e/ z4 n/ g( w! H注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
. N% [0 b" ~! |3 q
5 n  \- Z# C6 @; m) t! m5 E过去)。另PS游戏较大,改之前最好先做好备份。- }' Q) d# L% X8 N- q7 l4 I) ?
将改过的IPS补丁也放上来。:loveliness:
+ ?6 I+ M: P8 Q8 P  |! G
2 [) Q4 y; I5 e2 }5 C[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~7 J) }/ `7 W2 d# ]3 d

3 h7 |" n7 o! I+ V, ~6 r顺便解释下: d2 P( r; X6 n
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 . L% K2 X) A0 f/ r
00021cbc: nop # q' \% A1 ^9 I! i6 m) H
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算5 Y# s; h! ?4 l+ T0 R
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
+ I6 n2 X# P4 Z) m* U& F5 P7 C3 H! O9 A' H% [  i+ Z) U9 r
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
- a0 e4 ~. {: k+ k
/ W5 J1 o& Q8 q! ]5 F+ S以上是个人浅见,希望高手别见笑~~~6 {+ Q0 x5 ~: |; p

" W6 c7 [! w$ b8 O, T( |# |1 q[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1933 天

[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 发表
# t2 h; k7 s' G8 J/ o2 o应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
2 f/ }9 b! ~2 \( n7 [+ g3 S- z2 f, a; H
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
7 _% f# \5 u: b: v! {有什么 ...
% K; j, U/ }4 i  Q& }& d
多谢了,终于明白了,呵呵呵:loveliness:
( G4 z9 f6 k, y* D. a; c' i
" [4 e( J9 V1 t9 h! E. e
原帖由 shinwa 于 2009-5-1 14:09 发表 ' e4 ~; \1 Z( j. w" a) Z- H3 ]/ [
呵呵 不错 支持下~~~~
6 I- Z- ~# a8 B+ e
" [  ~  U# Q$ l) j. `顺便解释下
1 l, b) T( F1 v2 I4 D6 n  f00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
0 Q5 W0 @$ e# c# g1 {/ k00021cbc: nop 4 {! v+ p* e" I! l6 O$ k
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
, D+ w! t) X8 j9 E' x/ p

$ m4 c# U. q6 L4 e* [" s$ c: ]还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
$ K9 c! k( v6 N; M7 e+ r! k0 }
9 s# |3 x1 ]) @& @多谢了,终于明白了,呵呵呵:loveliness: + _3 Q2 ]7 M8 ]
+ K2 V' V  [# r

- @( V* c; W0 V4 W% t+ r
6 t0 Y+ d1 g$ v5 L还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
4 ^$ x  I! {$ o9 a

4 V: P$ Z2 y1 Z$ z0 M00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了
回复

使用道具 举报

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff / k6 i- K9 F4 U1 ]
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
+ S/ U+ d/ R4 V! k( ^6 YPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-26 12:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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