这个游戏的字库文件保存在游戏的SYSTEM目录下。5 z& ?& y! o2 r4 E0 |* o2 J
我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。" ?, Z8 m/ x, k- @: f7 Y4 V+ Y
经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。 f7 r0 f/ M5 @
# C/ ?! v* @3 D) x2 p* {# O) u经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。
: p; o, S& V/ E& N. p其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。
2 W5 {, c+ e! NFONTE3.SPR里边只有放了单字节的英文字符。
+ b9 K3 O5 ^9 Y$ M0 `! }( u目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,
8 G Y M. T/ `# \3 J$ K当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。 }. a( T2 [- C
" K- J! E; y+ f1 ]+ g8 ]. r
' s% ]$ {" ~0 |单个字符显示到画面上的代码如下1 r: F# n% P7 |
- // Display Font5 A# J9 o9 b! B
- void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {
0 p6 N+ {. \% ^/ N7 y% e9 n - const byte *spriteDataP = spriteData + 3;
: V" J6 m! X4 b# p4 Q; U' p - for (int i = characterIndex; i; --i)
3 Q0 Y! F1 S9 F9 T, E9 }2 z - spriteDataP += READ_LE_UINT32(spriteDataP) + 16;. s3 U) o3 U+ y% A9 B
- & s8 I9 p# J0 u* @- W9 Q! K( d
- int spriteWidth = 0;
. o, f) z# T! V- J: L @ - int spriteHeight = 0;. b. q6 F; l# _
- const byte *spriteSizeP = spriteDataP + 4;
: y1 S0 D3 J% Z - spriteWidth = READ_LE_INT16(spriteSizeP);7 [. q6 q* k* l! W1 z$ r, t
- spriteSizeP += 2;" W* Q. a* e! t7 r) N
- spriteHeight = READ_LE_INT16(spriteSizeP);
# }- v7 a" z& b7 b3 q; b - const byte *spritePixelsP = spriteSizeP + 10;
2 H s6 W3 h* w( s( q E9 w - byte *destP = surface + xp + _lineNbr2 * yp;) c: N0 G2 L6 s9 l
- _width = spriteWidth;- V: M& g* q0 G
- % y2 b! K7 c# G: i1 I7 e0 v% r
- int yCtr;0 W4 Z1 i. o5 G/ w7 I4 ^ s
- do { Q8 f5 w4 B6 E
- yCtr = spriteHeight;
; F8 F# V+ u0 o4 U, y/ B+ R7 A - byte *destLineP = destP;
6 R4 \0 X9 V/ d; K - for (int xCtr = spriteWidth; xCtr; xCtr--) {
7 K- q8 H, B6 K* Q7 u - byte destByte = *spritePixelsP; r5 @% a8 z, R" Y: p
- if (*spritePixelsP) {
: |: ]3 p$ M6 \* x - if (destByte == 252)
) H# Z. |% n6 ~2 B - destByte = color;
9 g, S4 ]% c. e4 g- \ - *destP = destByte;
) i$ R* |1 _ U5 m* M - }, J; E* }0 H! F1 }: M: ~. k% h Y( }
L( e3 k/ B1 h/ {" q0 g- ++destP;$ d9 v# s Q% c4 g
- ++spritePixelsP;
7 Z# ~+ l: q5 b - }# m0 g g) Q) P9 o
- destP = _lineNbr2 + destLineP;
/ `/ B- q7 A( n3 g" k& c - spriteHeight = yCtr - 1;* @6 Z" u* Z0 p" C
- } while (yCtr != 1);: k0 d; X" U/ I0 I
- }
复制代码 7 v; m, n7 U( M$ Z, v
2 S0 Z! e, K* p- ~5 V
|