设为首页收藏本站

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

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

  [复制链接]

签到天数: 712 天

[LV.9]以坛为家II

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

2 Q# {# |6 B. a9 Z- O  u+ S( S5 k/ f有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,9 y1 X9 r. S7 D2 j+ M( `0 z& ]) n* p
有什么错误及不足请多提出。: j7 B5 K! X9 e* w8 ?% v% [
% e! r: h( |5 o: F3 E9 B1 s5 L  q$ Q
需要工具:HexCmp[Ultra Edit], k1 P! N6 l% ^2 O7 x  B( C% E
PSX v1.13(Ps 调试器)
* U2 k& o. ?4 O0 QEmuCheat
& `3 ~. R. Z7 w% O: qMIPS汇编指令。
4 g* h) o% V0 R' ?2 c& |# @
6 i, M9 d8 Q- r  o) V1 E洛克人X5 EC:4 M, x6 C. M4 [* f/ O- m
人数:0d311d,2.
% g+ g. ]. W0 a- p5 [/ @
. ^8 R! y6 P; y! n& T! P: v  Q7 Y. o步骤1:载入洛克人X5镜像文件。点击File,再点击Insert CD Image,选择游戏打开。. f1 N& w1 t" [3 z  e

+ b1 b7 d! \' Q2 \步骤2:设置断点。运行游戏,等到洛克人X血值快为0时,暂停游戏,点击Debug-Monitor-r3000。9 W3 \8 k2 B7 _. v
会出现调试器界面。
  B* i4 {7 Q& G# [/ ?其中有两个小的,一个是设置断点的界面(Breakpoints),另一个是观察指令的: ~0 f% `; Y# g4 L3 J( x
界面(Disassembly)。
) h0 P8 h5 M* z# d右击Breakpoints的空白地,出现了添加命令的方框,点Add。- R) A0 S9 B  S. p2 z& o* W$ v& v

/ h, J& L$ N: o  ~' K/ f5 e: O- P, ^
然后在adress处写入命数地址。先点Memory,再将read前的对勾取消,再点OK。9 J) b0 Y: w# i, e  b7 c3 L" t
然后点Edit,会发现adress处变为:0x00000000,将其改为0x000d311d。点OK。! l0 R; T" j9 P7 z
5 B( p( f. \; n* E, |) C2 E1 l8 A
按F9,运行游戏。
7 A( \9 {1 t! z6 ^% k0 H死一条人后,来到了这里,看Disassembly。5 g( w: \- |; [! q1 L4 ]
. n; P$ k, c5 g& V9 X6 W

$ R3 a. G" g& G: M" S) U步骤3:断到了00021cc8:sll>r2,r2,0x18  00021600
: z4 o! j1 m! q% b) {8 W6 j上面的一条指令00021cc4:sb r2,0x0045(r6) 04410018.这个应该是减命的指令(自己猜测的,不过对9 z: X$ |5 @- y1 ]# Q8 Y7 o7 }
. v5 f9 |/ {- B7 s2 i7 F" F
这个游戏是有效的,别的游戏一般也在断点附近,自己修改后测试)。
' Q# v+ T, _$ F7 n& ^4 J; f$ P
# N: B& X, w" o% W( L: [9 d步骤4:用HexCmp打开镜像文件(直接打开IMG,ISO,BIN等都行,总之是最大的那个,游戏的主体部分)4 a% {) X( t9 _' g% ^2 `
5 v+ n- l. f/ v! Z9 k/ [% X! k' u
搜索:ffff4224 4500C2a0  00160200 (将原来Disassembly里的数值倒着搜索). ^6 Q7 g8 f  }1 X& d8 U# u

1 _1 p# N4 l  o# R* e/ y到了这里,201afdcc.. a3 b/ Y8 ]% Y1 \
6 @. q  a, {) K5 P' @5 G4 i4 e
+ s# m3 p& y0 U. ]6 k2 u
将45 00 c2 a0的指令改为NOP(00 00 00 00)就行了,游戏运行后,死一条命,其指令却不执行,这就( R0 d* L0 k* U. `( o
达到了不减命的目的。' ~7 _4 o/ M) Q9 @1 {, V
! y, m4 p8 S. v  k( \
到此,就结束了。从头运行游戏看看,洛克人X和ZERO果然不减命了。1 n; L/ D: c" c5 o2 Q9 r
  R7 s* s4 J1 }3 P
说明一下,NOP并不是对所有游戏的修改都适用的,想真正的改好,还是得看看MIPS汇编指令。6 A0 i# x% t. E/ n/ r& e  x
另外,本人也是菜鸟一个,MIPS也看不太懂。如果有什么跟汇编指令有关的问题,还请找高手来解决。
, S) Q" h3 z1 H: ?  v. b
6 l- P# `( E  `- w; a2 h1 P注意:请将SCPH1001.bin放进调试器的BIOS文件夹里,这样才能正常运行。(一般EPSxe中就有,可以复制5 X* M( Y; X4 e# `" X" q3 X! D3 y

9 M5 g" o) F; y3 b过去)。另PS游戏较大,改之前最好先做好备份。
" ]' ~8 d4 ~+ M+ n: m+ h" M3 [将改过的IPS补丁也放上来。:loveliness: 8 ]8 E9 b% r  J& h

, C6 I" j+ z$ h2 l6 Y& g2 u[ 本帖最后由 HeavenTrain 于 2009-5-1 22:40 编辑 ]

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 14:09:10 | 显示全部楼层
呵呵 不错 支持下~~~~/ T9 y, G' j  G# q. @. |0 o' [3 L* ]

7 t, ^4 `! [) ?. ~顺便解释下
+ ^6 D9 y2 A  [" W$ R, b2 Z9 n6 W$ E00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2
7 c/ h2 s: v' B" F" _7 o5 T00021cbc: nop
! }! u/ B% ?# g) ~6 n00021cc0: addiu r2,r2,0xffff 寄存器r2里的值+0xffff后送入r2  加0xFFFF其实就是减1,因为是无符号的加法运算# C/ B8 ~1 b0 K& W9 P
00021cc4: sb r2,0x0045(r6)   把寄存器r2里的数据放回那个生命地址+ b8 q" [& R: J+ k
( e2 l6 ^9 I5 s1 p
从理论上来说,如果NOP掉 addiu 这条指令的话 效果就是从生命地址里取出这个数后放回去,应该也有不减命效果 如果取消sb这条指令的话 效果是从生命地址取出这个数后做了减法后没放回去,所以生命地址里的数没变,也有不减命效果
6 z1 x! t/ X" U7 Z& J
  ?6 K6 E3 @# O9 o2 T4 [- T( q以上是个人浅见,希望高手别见笑~~~
% q" g* p9 ^  j6 Y1 e% n4 R6 J( b- v- t+ [8 k
[ 本帖最后由 shinwa 于 2009-5-1 14:28 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

签到天数: 1913 天

[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 发表
* s6 \9 f9 Z) n应网友YZB的要求,因此写了此篇文章,我也是菜鸟一个,PS也就改了两三个游戏,只会改简单的XX不减,6 P: o! n1 [8 e7 }

6 ]7 @8 R  @! s5 b0 n有些只是经验之谈,对于MIPS汇编指令也不清楚,而且不一定每次修改都有效。旨在和大家交流下学习经验,# }6 J+ G( Y" V1 B) l9 h* g+ G7 r
有什么 ...
$ f% r' Q: j; D# c3 o8 }; G
多谢了,终于明白了,呵呵呵:loveliness:
7 L! Z& K/ T% {9 [/ u# F9 e- B0 d" ]/ F# S8 O- e
原帖由 shinwa 于 2009-5-1 14:09 发表
( P& k' k; }" s& u/ H+ f( l呵呵 不错 支持下~~~~5 ]1 B5 V: Z9 U& |# `3 b! p9 x5 P

( y$ V  a1 E  ?% r. _顺便解释下
% ^! u! }) b+ V" H0 I/ ^: G00021cb8:lbu r2,0x0045(r6)  寄存器r6里的数据+0x0045作为地址(就是生命地址),把该地址的值传送到寄存器r2 / z/ z, \, I( m7 b6 {
00021cbc: nop 7 ^8 J* Y/ z+ `! P
00021cc0: addiu r2,r2,0xffff 寄存器r2里的值 ...

5 o7 L, h- ?; [+ ~/ k2 }! l% w* N" ?4 w+ w) S7 ?; _5 ?
还想问下日文兄,如果是想加一命的话是修改哪里呢?:$
回复

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2009-5-1 21:18:10 | 显示全部楼层
原帖由 yzb 于 2009-5-1 20:30 发表
. C, Y  {  O* v% N- r+ f5 T; M& F1 Z% u! S% p2 a$ n3 H) z3 W
多谢了,终于明白了,呵呵呵:loveliness: 3 S5 }4 T9 I; S

: B' _" Q, @) {1 Y4 Z$ ^
" |: e& r9 d5 E! F' m* L
- r4 X) |& P% d8 _还想问下日文兄,如果是想加一命的话是修改哪里呢?:$

6 X2 c, s3 w  M6 W
7 p, I8 B$ H2 S; \( @$ x+ u00021cc0: addiu r2,r2,0xffff  改成 00021cc0: addiu r2,r2,0x01  就可以了
回复

使用道具 举报

签到天数: 712 天

[LV.9]以坛为家II

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

使用道具 举报

该用户从未签到

发表于 2009-5-2 00:32:31 | 显示全部楼层
1.2楼真不是盖的) e% i& I9 T% ]+ a& J
PS游戏太大了,以后再学习在学习这个教程
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-6 03:06

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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