设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
+ Y7 D& ~) E0 M& N. N
- D- a# `9 Y% b7 W7 A- C" m有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
7 n4 g: [1 w: M9 h* w' U' |0 I( p) Y有什么错误及不足请多提出。
3 t4 z4 o9 |1 E6 q  n
6 W) [0 s3 X; N4 l- X; |需要工具:HexCmp[Ultra Edit]
) w, e% L% I% D3 g( {PSX v1.13(Ps 调试器)
# q4 W9 A* h) a3 T+ {/ {0 OEmuCheat
7 F0 d# @8 v( A( r+ q6 SMIPS汇编指令。
6 H! ]8 e! y7 |! q
8 }! S5 [5 G" B洛克人X5 EC:
6 I+ G/ f/ f: }人数:0d311d,2.
# c5 m, n4 C" x7 L& a
, Y/ G1 \5 K  g# a* |4 P1 m步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。0 A& h9 _$ R0 H! @3 y5 y7 P

) P- N. v  P( D, l; I& E8 I! p步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。2 h+ [: N: N3 g5 P3 X1 }6 j
会出现调试器界面。
. U$ J$ P) ?  e  D' L  @+ F其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
) J# G$ j9 e9 j; s$ a, e界面(Disassembly)。0 n8 l3 j! H1 @  r- W& {
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
8 k- g+ z8 m# S
$ m) Y1 l1 p- }0 ~7 D5 h
! e3 t1 @1 j. l: V然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
5 ]+ O0 `% f1 [0 S# Q* L4 b然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。% u: [' R) G  X5 Z. E, z6 ]
, d+ F4 _$ d/ a2 }
按F9,运行游戏。
) I/ w7 ^3 [1 v$ D$ m( y( p死一条人后,来到了这里,看Disassembly。# U  g" |( _8 V) ]. ?8 V! b8 ]6 ~4 j
2 Y, ^/ I" z5 L# [/ L

' e5 o# x; x+ o- k' t0 y步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
( h  x( _3 q' m/ \上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对- t+ x; b" G# z4 r

% [+ @4 S7 r& P. a. O  F这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
; Z% F* S1 P! \. m2 x/ z2 Q3 \3 E4 z3 h' u3 b/ V* O
步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
2 d8 \! T; S& ?5 Z) |% \+ S% M$ i0 a7 J  A' I5 M! [
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
) Z, C0 E* ^% m1 Z4 w  Q" \$ H* b1 ?
到了这里,201afdcc.
  d9 r  h1 P8 Q; n7 k6 h5 n* W; k' b* j5 H) {
4 u. r) o$ h8 O9 m: Q$ e# z
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
: A* s$ x8 [; ^达到了不减命的目的。7 }3 q; O5 z+ ^( [5 L9 t5 \9 _

" d& r# Z: ]4 X到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。9 X  S7 ~2 i8 V4 {6 U
# \( F4 B. C6 G9 e- U
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。% l* k+ W$ W, f
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
8 k& g9 h) B+ {5 |  A, @& ~1 Y* B$ E) C5 ]4 I4 Z) A* \+ g7 z
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制# B% V1 w' ]' Q
7 S# N" ?) |$ c3 l. a2 ]0 F
过去)。另PS游戏较大,改之前最好先做好备份。% w* F; P, J7 R1 U
将改过的IPS补丁也放上来。:loveliness: ! w  r: A0 @2 w7 {  x+ V& w

1 b8 D0 N! d, q1 a9 O1 i) K[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~) x0 j( g- H/ D3 J& o) p7 b
& k6 t, {: {  ]3 T; |) ^( ~
顺便解释下* _5 w/ `8 x1 R: O
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 / y+ d. H3 F% T7 y' ?. g
00021cbc: nop
" ?$ ^! S7 C" m+ o- W2 [- _00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算( _7 b/ M% n. `
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
- q. Z1 G, S; @' p( ]# z9 D1 {1 y3 V) r( _$ ^8 p$ t- F% z  [* T
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
# ^4 q2 U& E' h6 G" m$ y; N" K; {: t
以上是个人浅见,希望高手别见笑~~~
/ F& K& q/ N) W9 R. B, l0 d7 E3 e% A/ o0 Y- f+ g7 f) p, h" a% b' |
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 2012 天

[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& ~2 L6 i# `% A. m2 q3 y
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
7 D7 l; g0 D. f3 i# `) G) j0 a2 e' \) c7 W3 p
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
& _4 C! p8 y6 \( L+ V有什么 ...
; c7 j, i- x% p& K
多谢了,终于明白了,呵呵呵:loveliness: - B5 P3 O/ @5 h- Q

2 N$ U5 X: E  ^* G4 [
原帖由 shinwa 于 2009-5-1 14:09 发表
8 L' K; }( @' n7 }2 r7 P1 v呵呵 不错 支持下~~~~
# j/ |9 q0 O( ]
4 t, v  u: s/ m! Z: U# z顺便解释下# O  q) ~3 u% B1 F' h; x/ G1 B) Y
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ! G5 d$ B- P( P  B" k: Q
00021cbc: nop 5 v7 T! E* `8 d+ V6 Z5 D+ l
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

( C7 c; I  j9 L; `& [, l0 n2 T/ b7 y/ g5 ^& Z/ n
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 * x* ?% }/ k/ x; B4 M! W7 a; H
/ V# W) W7 k6 x# g2 ]0 L, k$ D
多谢了,终于明白了,呵呵呵:loveliness: / k2 t- o1 y& }5 `2 C8 i

- h0 r8 ?# p9 X& y, [: U. d3 E: z) u7 u7 P; C# ?0 J3 X+ E: ~

) q# l$ g8 L& Z8 F, e还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

2 S& ]" S, `1 e* v
. ]: @$ R! R( N00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了
回复

使用道具 举报

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff
% Z" R, z% r% E# z% v6 D, J的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。
回复

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
$ {6 B& J- [( \3 E; M2 jPS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-15 23:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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