|
发表于 2024-4-5 22:29:12
|
显示全部楼层
大佬您好,晚辈这边斗胆咨询您一个关于MD Hack的问题,如有冒犯还请海涵!
, s* V. I; g' M6 H# d5 N. y# W( A5 S! G+ }, |! K& w& \/ ~2 i
有幸拜读了您的教程:
l3 _) w# E7 d! M; Y, Yhttp://2006.emu618.org:6180/thread-193604-1-1.html
, b: N1 |( X1 `2 ^7 j- r3 S( j) f( E0 J9 f8 j: k5 G7 d' g
跟着您的教程做了一遍,收获很大。* Q- x6 w& a! Y! v
* p9 N! p; B4 g7 x) ?* }; ^不过我由此想到了一个问题:7 f( {! `- k; A- U$ P; K
例如《魂斗罗:铁血军团》体力值的例子* _- G8 L# @' o' {( ^4 i: ?6 L
2 f. B$ j, d$ B3 Q3 g5 T5 p2 S
011DE8 7A01 moveq #$1,D5
& S7 m! }* ?2 Z011DEA 932A000D sub.b D1,($d,A2)3 ~ U3 F6 U+ h( t2 T% h
011DEE 1C2A000D move.b ($d,A2),D6
, N3 O( t8 g# j( B" J+ ^6 F
B4 A9 K7 c4 P P# t实测,在将932A000D改成4E714E71的前提下,再将7A01也改成4E71,不会影响无敌效果。, C$ @$ f2 {2 P6 R! T X& H9 A
! {. k7 J' g2 ~
那么我想,如果像下面这样,将011DE8和011DEA处的命令改成JMP,跳转到某个空白处,然后在空白处重新写上011DE8和011DEA处的命令,最后再跳转回011DEE,是不是就可以恢复正常的受伤功能:
% A7 N- t1 W: w& k E4 G$ Y9 f; S5 X) B8 Y0 ^: O& `3 x
011DE8 4EF9000801C0 jmp $0801C0.L _! f# ^$ B7 }8 \: d3 C
- o# U5 J* Y7 z, k' n/ }( D0801C0 7A01 moveq #$1,D5
1 K7 T* v9 b$ h8 R4 q0801C2 932A000D sub.b D1,($d,A2)
% x. ?7 W2 W, }1 U0801C6 4EF900011DEE jmp $011DEE.L: r* k( }4 _# g: \) s
, w7 t1 k; @( ^: m6 m011DEE 1C2A000D move.b ($d,A2),D6
$ P8 q* m9 x0 |9 [1 ?) ]* L1 h8 J2 F/ n9 h% |; |3 f/ \
然而修改后并未达到预期效果。相反,游戏在角色受伤后立即死机。/ F; h2 m# B) d" P6 G7 Q; H* g
: m5 `2 \" S+ c请问这是为什么?如果想实现这种操作的话,正确的方法是什么?& W9 i) r& \) J) D# X1 s; ^, [5 X
7 `6 ]- `. J3 [% N$ L3 A, @5 T$ v
之所以产生这个想法,是因为最近在汉化的一款游戏需要对字库进行扩容。汉化已经几乎完成了,然而游戏中的一些小字体区域还存在一些问题,如果不改会很难看。
2 v' x' c7 F1 E8 Y
$ [3 }& w- w! b8 b ]这些小字体由于只使用一个字节进行编码,游戏原本只能显示256个字符。我希望将编码方式改为00-EF为正常映射,F0-FF则切换VDP至相应页码。我认为这需要将原本的程序跳转至一空白处之后再进行自由发挥。/ H' ^# A" ]( e% I5 u+ }- }
2 ^ C% d7 R$ W- e E我并没有任何汇编或反汇编经验,所以打算先从最简单的进行尝试。想不到一上来就遇到了问题。
( T. B: D" r* \' ?
0 r( m( D, h# C9 @# t; r/ q0 ~期待您的回复! |
|