设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
4 f- ?9 `5 K- c; ]& l7 K0 J4 Z7 D0 X8 A" ]
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,8 k4 V* U3 j. z
有什么错误及不足请多提出。% t4 {. k( ?. t  Z% R3 J" G+ m+ _5 z
* ]& S, W/ T! a+ P9 a. A
需要工具:HexCmp[Ultra Edit]
8 O8 B0 A3 O/ C/ [9 U% @/ YPSX v1.13(Ps 调试器)6 ?% |8 y7 y9 A, d! l* u, b; J+ F
EmuCheat3 d% J0 V; t/ a# d* L
MIPS汇编指令。
7 a6 a+ U. k1 p- b6 k. p6 |  ^
6 K% H  G# T) L: \洛克人X5 EC:
9 |3 Y& c0 P- I" A2 m人数:0d311d,2.
* s$ r% t/ i0 d3 c; `+ t. m6 @# X# `# e- ?- o$ e; @% K
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。8 {+ F6 d! q: J. ~8 b. R! {

+ c2 s  Y  I4 S  _/ z- c' ?; _步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
# }' U! M: Y$ p; o  k会出现调试器界面。2 ~2 h( L1 t2 _. U  I3 V+ D
其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的' y; T* F$ O1 q% L/ f2 m
界面(Disassembly)。
, l$ ?  N& s% J0 y- @: l5 ^- N/ `右击Breakpoints的空白地,出现了添加命令的方框,点Add。
$ e. }' G  y9 L  o' E; S! F
$ N! l9 ]& Z6 ?8 A8 l* H! q9 V$ C7 F/ X# b% j
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。8 ^9 K2 y+ k5 M! Z
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
# y. O& [5 Z  z5 ^
. t$ E9 a4 k4 i- g' L按F9,运行游戏。
3 M$ g8 z% |: a4 m- G* ~4 i, g2 w死一条人后,来到了这里,看Disassembly。! u7 d1 m, f+ ?3 J- X. o7 ?* w1 M

, M5 M& N, r! s# R! N) d- l8 V0 I4 u8 u& u% a; h9 b
步骤3:断到了00021cc8:sll>r2,r2,0x18  000216000 P* B! F' f3 D8 F
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对. B5 T) h) v' Z. }5 y
# x' r- C: @) D2 @- J+ d  ~
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
, z- x% Y, ]+ L' S" B1 Q5 B+ N6 ~8 H; ~: j7 s
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分); }5 d1 N4 ~# |: _
& c- V' r5 \0 a( E$ h
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)0 G& j4 m6 W, w2 R1 @2 L  w- E
! T/ L, E, H$ Q6 o+ i  G$ |. b# e
到了这里,201afdcc., O2 J" ]/ C5 R% K( {' b9 b
0 H6 `& r( |/ H  t. ?) }

& M/ @# ^+ n) ]; V7 i将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就0 N! g0 l8 i6 M7 B" n/ O
达到了不减命的目的。3 i; j: w+ Y( v! q
1 F2 _. B- ]. W- u6 K: f# `, ]
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。$ S: a' \- Y$ v  |1 \* W/ Z1 F

' n9 l: u2 L5 h说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
9 N: `$ E/ I% s1 Z9 p6 ^& n另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
8 e, r& y5 l+ l. J  z4 X' V9 x/ c( Y5 `' J, V; X
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制* T4 P- {2 g; F/ j4 S$ H* ]/ {7 V
  E  f/ u' R6 }
过去)。另PS游戏较大,改之前最好先做好备份。
1 p+ ~  c1 a' B将改过的IPS补丁也放上来。:loveliness: & h/ A7 S8 M; @

) s0 w% g& N& G8 d- R# t  v[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~
) H0 l# O( O2 i& c) T! B' n3 g& E: z. |. B9 ^& O! x7 i$ s0 K
顺便解释下7 i/ |. b3 l+ a% R: M: t9 ~2 \' B$ k
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ' {% v  |. [9 j" z
00021cbc: nop 8 A8 B  H8 t2 B4 G4 j8 t
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算: p$ v5 S9 U9 z$ h$ o( s
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
+ e# X6 Y8 w- i1 P
9 X# O2 T. A+ s$ {2 e. l9 T8 X从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果0 I6 ^7 g9 z+ J+ O4 o2 b& I

4 L- z8 ^  P, Y! M以上是个人浅见,希望高手别见笑~~~1 K: w# @* G4 I

$ C% m2 T* v2 h0 I5 q0 g( e[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1972 天

[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 发表 " d; y: b- D# U! q+ d
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
0 a, }/ B* Y$ w: Z6 J% @7 W
; y1 L( l6 }; d9 {/ l有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验," N4 e- r" ^4 L) o+ B
有什么 ...

) f0 @; b( m7 K" I多谢了,终于明白了,呵呵呵:loveliness: ! j, q% V7 o0 y( {' @
6 m1 M( u. @* E: z
原帖由 shinwa 于 2009-5-1 14:09 发表
* F8 K: s8 ~( ]7 S$ w% H  H- y呵呵 不错 支持下~~~~/ I& F  J9 S" F2 d

5 m0 U0 i3 r! d- r" W  J顺便解释下, F) i% Z4 A+ `5 W
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
/ u' Y$ B9 Q, a- j5 v  j3 t; p  d* Y00021cbc: nop
" D. {0 n) |& \00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
/ r/ D# }8 A, i* g, v! `5 E5 j

1 h2 G5 F8 _# v还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
3 i6 M, s3 e. Z* l: P0 B" G
/ y8 _" `0 t% }( G: g多谢了,终于明白了,呵呵呵:loveliness: ! C# r9 w2 n* v7 \- ^
  H; `( W* _3 z. Y- v6 u" f' y
) r! E6 Z8 M7 M2 _5 N/ s
  ~3 }% _/ @- K# q$ D0 c( X
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
& s7 }  [% i6 K- T2 b4 G
& e5 M, b7 o& l
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
3 F: c" K* v- n* v3 D  S- Z1 e的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
% M9 q) n$ Q. H) E. k# l; D! rPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-5 18:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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