EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
1 T$ O% I- G& s0 ?4 L- u; I. |
: ^3 B( E! \8 F/ x8 F- t! T有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,& W) F3 h0 e% q% Z' A' ^5 _
有什么错误及不足请多提出。
% E( F4 ?- H2 o& _  ~
9 M( V- S3 L; l: a0 P5 W4 h需要工具:HexCmp[Ultra Edit]7 d! C9 ?8 u. G, s: m" o* X
PSX v1.13(Ps 调试器)
( r$ q/ K# y# P, b2 p' ^5 c! ^EmuCheat% u% ?+ I; o2 _  \+ q
MIPS汇编指令。2 B- W+ ~0 d8 m* u. z

  l. `( x- t. U3 ?+ V* f% i% k: w洛克人X5 EC:
! w" ?+ s9 s0 a8 b+ f' E人数:0d311d,2.4 S5 F# N" y8 L: _; k5 s- I1 `- D
( l9 p8 U# n% e- T
步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。/ |' v. p: Q8 G8 v: P

$ R7 Z! i! n7 Q- {" z( x9 B步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。% J0 B+ d/ R$ P% D' I6 v5 E, G
会出现调试器界面。
6 ]) L7 J4 P- Y其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的# p! L- M( r0 ]# E! `% X/ t7 m
界面(Disassembly)。
- u- t0 p1 g1 {4 W3 Q右击Breakpoints的空白地,出现了添加命令的方框,点Add。
* c- ^8 C/ Q) @9 n
% P; |! L* r% n% G# J: N4 Q8 o9 C- q, h
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
+ t" [: k$ K7 K/ l9 P然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。
/ t! R* v' M: L# O% x6 i8 ~6 g5 W/ \* z4 d
按F9,运行游戏。
9 s' Z, D3 d$ Z$ C3 H死一条人后,来到了这里,看Disassembly。
  b8 G3 N( H8 D9 H+ g# ~" J. t+ _+ L
/ |& s7 Y$ b8 G6 R! V; q1 ^, {
+ |% C1 ^4 v/ }1 w& ?  b步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600+ Z- I% i, ?' {
上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对5 K% e3 i4 Q, K

7 g  ]7 l4 C0 Q+ ^* n) `这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
+ C" p$ {1 o# W5 ^
2 [1 {8 U9 S! A* s4 d; d步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)' e5 c/ u8 r+ i7 Z7 E& R: K$ c; Y

6 @8 M! t# v& E' M( A8 f搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)! E. ^' b+ e; t
4 M5 f# S1 e2 }
到了这里,201afdcc.
# d. d2 E2 B" o6 R$ R
2 m& ^+ a3 o. a2 k, U
) m& Q8 W* {0 G2 M1 r, W! V$ H. z) P将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
/ y+ Y) v+ J* u+ c- j达到了不减命的目的。- D: V; n$ A2 V6 R# z* `& ?

# C0 ]/ t% m3 P到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。3 U& G3 M. x7 W' m
  b$ q- I* Q* N. m4 V- F6 N
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。; n4 t' h: [4 z) M3 \: F- R% o
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。/ w7 |5 M. D4 V# n
# z5 s% _' U. D- e( n6 v
注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制
7 O- ~! p) Y! v* e! p6 k
) H5 l) t  s3 f- ^7 [& Y4 \过去)。另PS游戏较大,改之前最好先做好备份。" ]* z0 Y8 c8 U$ Z0 x- Y1 x
将改过的IPS补丁也放上来。:loveliness:
1 u5 U  y6 Q1 W; F4 E1 n! u/ D: Y- S; U! }0 ]
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~6 Y( S6 a) y3 R7 K6 t! a

. M. M3 e7 y( O8 c' o5 m顺便解释下0 [# C6 q  X- u  M/ p' Z
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 ; ]* K/ Q5 g- b( J$ o/ F
00021cbc: nop   D& k8 o- }$ j3 u- O* R' r
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
3 N" Q% D8 m$ Z& H2 ^, l00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址$ G1 d  C8 g% y4 b1 @+ G5 }# S! S

0 q8 z, F; q8 o- H从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果+ H" D) _& U0 U$ s

0 x8 [# c5 U: V. @4 Y8 F2 c  G' a9 S以上是个人浅见,希望高手别见笑~~~5 C  t+ ^( a6 J2 B; X
/ J$ ^7 a: K3 E0 x
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 2192 天

[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 发表 3 Z6 t; d0 P! `- K" f8 x
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,
6 n* t/ b, q9 m, Q- D$ }0 t: N9 Q3 P$ N! ]. L
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,/ L3 |4 ~7 b3 k9 Q
有什么 ...
- J4 x' p' z" ?% v7 m8 q+ q
多谢了,终于明白了,呵呵呵:loveliness:
, Q3 D) c3 f5 ~3 Z* V  i  U% Y8 |8 l5 y! D! h
原帖由 shinwa 于 2009-5-1 14:09 发表
" f  ]# y% Q+ z呵呵 不错 支持下~~~~
; [& t! C$ n1 j/ h) K: ^# l. w) I4 g: Q% U) z, K2 f
顺便解释下( {0 o) V" x+ F$ O/ H4 \
00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
  q$ C/ K3 e, {" Z00021cbc: nop % @+ P7 g+ o: @# c/ `& E9 X
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

# g8 o6 z+ {* s3 ]" m# z) v6 Q- x! z' y( W& a# l
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表 , j7 o" b3 F5 h3 O9 L

2 o' c( A# {) ^$ [# n1 C$ S+ T  S, i多谢了,终于明白了,呵呵呵:loveliness: 2 a0 U7 a" U7 a" S/ ^& H

1 D9 s, U& [$ t% B1 a& I/ U- M3 d$ E  j% q5 |& |+ F
5 T7 n" ~& ~3 K# C
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
, d3 G5 o0 Z  [1 d7 A$ R7 n

  n- g9 g. j  {5 O9 ^$ X00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了

签到天数: 712 天

[LV.9]以坛为家II

 楼主| 发表于 2009-5-1 22:37:28 | 显示全部楼层
看来真正的合适的改法就是将00021cc0: addiu r2,r2,0xffff * f& M0 z2 l# ?. h
的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
8 s. c$ R$ s5 z) O5 R6 HPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-15 04:00 , Processed in 1.074219 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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