EMU618社区

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

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

 关闭 [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

发表于 2009-5-1 13:51:24 | 显示全部楼层 |阅读模式
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,' Q: F* k. Y0 W' H! t
% S; B5 s+ G/ ?
有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
. Z- U) n2 _/ b2 s4 z% H有什么错误及不足请多提出。
8 X/ I3 g- N' T7 A" i7 T9 i6 D" H* h! |- s( c8 B
需要工具:HexCmp[Ultra Edit]6 v8 C6 ^+ f" x" t
PSX v1.13(Ps 调试器)
9 t: E3 Y+ ?  B# y) D1 fEmuCheat: U' _, Y1 h* n6 P. g
MIPS汇编指令。
6 s* ^2 s" n1 f  r5 Q
/ @5 v' m/ ~  u( o4 i. X6 p洛克人X5 EC:, F" E1 ]0 O# F$ h. f# `
人数:0d311d,2.
  `" ?. V6 {6 ~; E  ?: [% I
6 f2 i' Y0 i! U& i8 K( ]! |, L9 \步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。, T/ E; ~3 \3 e$ f, D, O
# B% }. m6 i6 Y9 m2 O
步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。
; d5 P% w* M  E* c( z0 r& Y( x会出现调试器界面。
  |( |* p$ O2 R0 J其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的
0 k. Y. U2 J7 O6 `6 K界面(Disassembly)。! R% z4 M$ |2 L( R& B8 c9 H9 P# r
右击Breakpoints的空白地,出现了添加命令的方框,点Add。
& C) q/ E% ~: N; @/ G$ M% w% |% e3 r

' X, \! N0 J' f$ \然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。
8 ]! a9 U3 X& J% O" b2 X然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。' B$ x1 f5 @$ w9 m( E
* @* [: L7 ?2 `6 k: [1 w! K0 b
按F9,运行游戏。& S, L, Z( T, R4 a
死一条人后,来到了这里,看Disassembly。2 U8 W6 e4 p% x/ W1 ~$ E8 M! Z# }$ a9 T

+ ^0 J; r9 P8 i6 o% R' ^! \- E; }, N# C# o
步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
% i* R% @; j  r! ^上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对) R4 G0 U2 J& o
  W/ m0 ^$ D( p5 X6 o
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。0 k3 l( \& {6 j- R! H

$ z9 r. {4 X1 a6 g4 \步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)
" _6 Z) J' p0 c; o: f1 r8 k! _; l  \8 [" |; E& Z- {: ], K
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索)
) B' ]$ N0 j, A0 n5 N* x+ ]1 t8 q
/ N; k/ p1 J4 _: M5 K2 p到了这里,201afdcc.
7 k. B" e' D6 i* I- C9 H) V( g; [/ Z2 ]
5 }1 {8 l1 V9 v6 ]# E& J) s" u
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就
  U( s7 V  D9 T+ a* l. S达到了不减命的目的。2 d/ Y0 x( b7 _0 }6 S
, F7 n4 z* h/ J, B
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。- c% q* n& O6 W' F

5 y" W1 l6 o1 e' E/ O0 H说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。
, ]3 G0 O& w! z- t另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。3 ?4 U; V+ y, w: i" B& {4 L9 N

# O" c' {, J, Q4 a7 B注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制# q5 N1 y8 n+ d. W! d' N5 V
! o! O: D# ]; W+ M& P, I
过去)。另PS游戏较大,改之前最好先做好备份。
' }: }8 ~0 I+ K: ]9 e6 `. T将改过的IPS补丁也放上来。:loveliness: , i7 d2 f/ M6 f+ Y; v4 ~9 U
" V. w9 M7 h5 _& }* w
[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~4 r: {1 t0 n5 C6 w0 C, }7 R" N1 l

9 J8 D/ D! p6 d2 t- z顺便解释下
" d: @. G; j0 e. r$ Z8 z" Y$ p+ p  I00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
" z- f6 R4 ]  X00021cbc: nop 2 k: Q# Q- d8 S* @  j
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算
- a- `! o7 O7 _! H6 Q00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址
# E" |4 P' a4 m& y. }. ?0 n) v. I- d3 M, o! t: |
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果+ u5 m9 x+ q) q+ I- e* m

" L* \6 f+ T% _) a. l以上是个人浅见,希望高手别见笑~~~& E  M  R& `, U' I9 ]
3 C, o  ~: x: Y8 o) t" B
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

签到天数: 1894 天

[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 发表 " k( t- n" H8 H& H; l& I, n
应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,0 Y+ F1 y4 I- c! o, a# c* `8 ~# ~' f

6 C0 t8 t8 }; n0 A0 b  [3 D( m9 H有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,
1 @* E: ^$ O% e& ]2 b2 [( u有什么 ...
; E9 V4 O; j1 V- n/ b* f2 g% F
多谢了,终于明白了,呵呵呵:loveliness:
# }  K$ @% l1 F+ ?
- Z/ {. M! G, a- k
原帖由 shinwa 于 2009-5-1 14:09 发表
8 h6 x0 q1 o9 C( V; d' ]4 i呵呵 不错 支持下~~~~
( P: y9 [& B# f5 m8 Z# ^+ Z- r2 A- K/ h% H
顺便解释下
: |8 t( b5 c9 [$ L/ V00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 9 h3 Y, U) E# ?0 h& i$ W* p! g5 k
00021cbc: nop . E1 \# Q% E3 I4 R+ s
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...
: x. l9 q" P1 x
; {! `" W: }9 m( s9 [
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
7 W9 }, x' I9 m6 \% ^
7 D" ~  G; I6 C  L3 s% @( ^多谢了,终于明白了,呵呵呵:loveliness: 5 F; t2 g1 `2 W4 R

6 r; D0 F- T% t( h0 ~& p
' p2 i5 {/ j1 v( J" U" M8 d8 r$ T, h5 H/ ~6 U
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

( Q& J) |$ n3 P; [. w! l) g" o. k8 R' b+ F3 B8 u3 ]6 k
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
* x* e1 E# T- q% t# |的ffff改为0000啊。多谢shinwa了,以前不知道ffff就是-1的意思:L ,现在知道了,谢谢。

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的
  {0 L. _5 V6 \- D+ P$ M  H- DPS游戏太大了,以后再学习在学习这个教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-2-24 19:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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