这个游戏的字库文件保存在游戏的SYSTEM目录下。
) |. j1 R% D# n" x我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。. L: V3 J/ f3 p( I
经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。1 h/ K! G6 {5 V: J; `
+ D" u% z' {% u6 g& c3 s
经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。- D" y/ ?6 _; h9 |- l b
其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。# y6 W3 K/ p: l
FONTE3.SPR里边只有放了单字节的英文字符。
6 c r1 g, q) O/ U. W# o; C) m目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,
$ m, ^. q' M1 ~* D% x1 t当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。
% W f$ t( g0 f1 T, h/ q
7 X4 C4 i- g R) d4 x* O9 i i
l% r% K! I& l/ I单个字符显示到画面上的代码如下/ V' S) ^3 G0 |( F- A+ a! w
- // Display Font
" o2 l/ o% ^4 J - void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {! t3 ^- Y$ m9 |7 m/ ]
- const byte *spriteDataP = spriteData + 3;
$ Q) K+ n% c, H. N% B - for (int i = characterIndex; i; --i)( I$ Q4 o0 b3 w; o- ^
- spriteDataP += READ_LE_UINT32(spriteDataP) + 16;
+ r- L' J; j0 D
4 q" _* B2 e, s. b- int spriteWidth = 0;' Z9 _# V. @# n" k) n9 i. X
- int spriteHeight = 0;
% L# { F6 G, {6 L \' W; D - const byte *spriteSizeP = spriteDataP + 4;
* G: @) E5 b A - spriteWidth = READ_LE_INT16(spriteSizeP);/ s! o' }2 ~/ F; x+ m- e( B
- spriteSizeP += 2;+ O: k1 g, u2 z: y. v9 e) @8 l
- spriteHeight = READ_LE_INT16(spriteSizeP);1 w) g# `9 r, U( |/ t
- const byte *spritePixelsP = spriteSizeP + 10;+ G7 p2 X& e: ^
- byte *destP = surface + xp + _lineNbr2 * yp;
0 i; V& r: @! Z# G# Q5 i+ J e5 s - _width = spriteWidth;9 Y' f' k% G! ~0 I
4 V: K5 K+ P0 F# ]% r- int yCtr;
# q! ]9 x: t# H. e - do {7 \) w [1 v0 ~+ u& B
- yCtr = spriteHeight;
. R& k' R" X ~4 i - byte *destLineP = destP;: S. y! L, o+ h) |2 }$ l$ { P/ P
- for (int xCtr = spriteWidth; xCtr; xCtr--) {6 g9 w0 Q: w' p8 a: U
- byte destByte = *spritePixelsP;
9 ]& n, M; l9 E; f0 Q, o - if (*spritePixelsP) {
8 b; K' F7 u" k6 @2 D g3 ?# S' N - if (destByte == 252)
5 }, A; k( i# b. I: F' Y! o: w% L - destByte = color;
; M/ S9 g6 S( s - *destP = destByte;
1 _& i4 N# B; s+ j' x) ^! T - }
. ^2 y/ Y% \2 Q2 r4 L a C
5 K3 F( A! d: Z; R- C. Y" E( y- ++destP;+ i" Q2 V7 p- p- p1 e4 {
- ++spritePixelsP;4 ^9 j) G, K5 U- O
- }. x- e8 e8 S3 H4 Y6 X. C
- destP = _lineNbr2 + destLineP;
+ Z4 f8 S; T, Q - spriteHeight = yCtr - 1;" @4 l7 p j. D. M# x+ c3 |$ q; ?! d" z
- } while (yCtr != 1);. @: u; ?9 s2 y' x! [( ?
- }
复制代码
1 f( P! `& V2 a" O R3 n" h* a) V k
|