这个游戏的字库文件保存在游戏的SYSTEM目录下。 h: z/ J, w% \
我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。
8 H( s1 c, l; g; Q, m经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。; Z' B( a6 B& t; @; X5 T
$ C1 |# c# {7 ? E# R* S2 P
经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。
% H/ o- E5 k' p6 l' P; y其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。
' N8 \* o! [5 g- ~+ FFONTE3.SPR里边只有放了单字节的英文字符。( Y3 ]* ?9 ?# U7 D- w
目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,1 A5 y& \1 \% _8 p3 l7 O0 D
当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。& j- ]# S; s; l* D
8 N3 q1 F3 E* U: y
% u! y( \, H7 |9 X: y单个字符显示到画面上的代码如下' S) v! a6 p1 T' V' O
- // Display Font
! p: B6 b4 I4 H4 x+ e - void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {/ [/ T7 r+ p* }3 t+ [$ V, B
- const byte *spriteDataP = spriteData + 3;
0 U1 O8 I* T7 j4 }' f0 y - for (int i = characterIndex; i; --i)
b" Y6 b% I6 C# L! p4 P - spriteDataP += READ_LE_UINT32(spriteDataP) + 16;
/ m6 l8 h& [- Z+ W" [3 [" @; w2 M
, A8 @) ~- t3 G( P/ R* v- int spriteWidth = 0;, K+ z4 `7 U+ G# Q) b3 \
- int spriteHeight = 0;
) [" X L6 X# v$ w - const byte *spriteSizeP = spriteDataP + 4;9 m/ X5 i" P& g
- spriteWidth = READ_LE_INT16(spriteSizeP);! F7 {7 P0 u% _8 }' t
- spriteSizeP += 2;
, ?. E( u* e0 G% S - spriteHeight = READ_LE_INT16(spriteSizeP);0 G( q/ n5 e9 c7 P
- const byte *spritePixelsP = spriteSizeP + 10;8 |- L$ H. G9 R. R" i
- byte *destP = surface + xp + _lineNbr2 * yp;
% a( |) a+ e' \ W9 j7 q7 D - _width = spriteWidth;4 i& G4 Y. W* Z) a- r0 e3 g; @6 _
- 3 }% L. j8 r: d) n, y5 `
- int yCtr;
* e% I K' ]4 m8 R# _8 G - do {
4 \3 m7 u+ @7 s - yCtr = spriteHeight;
) j; }# v% ]4 h0 V - byte *destLineP = destP;6 e2 D' z# l/ u& `# T6 a
- for (int xCtr = spriteWidth; xCtr; xCtr--) {7 A. Q* j: o* R( \
- byte destByte = *spritePixelsP;
$ W9 ^2 J9 {* J o$ H - if (*spritePixelsP) {
: T" k) X" B! F7 T! F: k4 |) C f/ b - if (destByte == 252)* g: J/ V' l1 G+ G {3 ^3 F
- destByte = color;
: K) i7 U+ R3 \: F1 T, C - *destP = destByte;
( A- `* c1 x5 `! Z4 U2 n - }5 y* F9 V3 e. B4 D
- . j+ T, d4 x* V/ i
- ++destP;( l: e0 R& n& u
- ++spritePixelsP;
. [& {4 m# Q0 h% l, E; L8 E - }! Y9 D( z2 d$ e% m8 C; D/ V
- destP = _lineNbr2 + destLineP;3 t) ?# s8 r! D& u9 s
- spriteHeight = yCtr - 1;, G0 `8 G; l' y$ U. [. W. \
- } while (yCtr != 1);
. O" |6 d( k( o: G - }
复制代码
" `0 B' P" I3 K
. b8 t# d1 Z- m: a |