这个游戏的字库文件保存在游戏的SYSTEM目录下。5 C( B: s+ ^7 k- ~
我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。* y6 @1 o5 K; h/ y0 G
经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。
: F% |3 c( c; Q1 {2 k R; k+ M" F1 V+ F* k
经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。+ r7 K7 n6 `; r% q" k4 \ h
其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。
3 L+ a$ O! J7 `( U) P1 @# bFONTE3.SPR里边只有放了单字节的英文字符。
( s3 q& b1 |0 b( W. x3 z v; F1 V目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,
- Y) _' p$ v4 S3 }当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。
* U; z h& J& a" m* N6 {, u6 }7 [9 @/ M" ^* O
1 A; n1 ^& U8 Q' Y* {
单个字符显示到画面上的代码如下5 A# F% T2 d# ]4 R! C- l& C
- // Display Font G4 a/ B% {! i6 Z) V5 `
- void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {; {' O% Q7 q+ ?" g$ @* G
- const byte *spriteDataP = spriteData + 3;
' G, p; Q* S, V, X) g+ [ - for (int i = characterIndex; i; --i)
9 G+ j! R* C" L- O F/ X) {0 p - spriteDataP += READ_LE_UINT32(spriteDataP) + 16;
$ G, S+ Q) \; A) L - / i7 l: n- Q) ^! C2 `5 c
- int spriteWidth = 0;
3 l3 b- [3 i# r2 @ - int spriteHeight = 0;5 m; k6 x4 }* o2 H
- const byte *spriteSizeP = spriteDataP + 4;* |8 K; P/ T3 z; X1 d: B3 [5 u
- spriteWidth = READ_LE_INT16(spriteSizeP);
5 |/ r( c6 a$ \- K' R; [* v - spriteSizeP += 2;# n7 K. F5 t) R& j9 B
- spriteHeight = READ_LE_INT16(spriteSizeP);6 c! C6 v: A1 u
- const byte *spritePixelsP = spriteSizeP + 10;
9 |4 F" H" C9 G' ?: C! ? - byte *destP = surface + xp + _lineNbr2 * yp;
: |1 e6 m+ j( ~& Y! u0 \! w' Q - _width = spriteWidth;1 ^7 S% Q0 U2 M- _
+ [, F5 r$ B' Q4 I: w- int yCtr;
, P' Y+ M0 V* l6 Q& t - do {
2 c; a" w4 O& }0 o - yCtr = spriteHeight;: t: I) l4 \3 b: q) Z
- byte *destLineP = destP; m S$ I( v5 r3 N0 Y. O/ t: I
- for (int xCtr = spriteWidth; xCtr; xCtr--) {
# R j* t+ P. @ I y) X: I - byte destByte = *spritePixelsP;
$ {/ S1 U: u" T& \ - if (*spritePixelsP) {" y" W! { |% j
- if (destByte == 252)
9 z6 g) H$ ]4 V3 w - destByte = color;* ]+ Y @! a* Q1 ?$ |
- *destP = destByte;
# T5 P6 A* s$ a9 M. B - }
/ r9 C4 H6 U5 `5 s
: d- f% G7 J8 V2 d8 c( x; s) d' m2 e- ++destP;% F' V. m& R- R- j
- ++spritePixelsP;
) ~+ Y4 J0 o+ U! R- p9 ^; o - }0 S1 P' G5 u2 I, {
- destP = _lineNbr2 + destLineP;/ |) m3 q: e* c! c* A
- spriteHeight = yCtr - 1;
4 s/ t( {2 n1 b/ Q* R- z4 K+ a; u - } while (yCtr != 1);9 K$ e8 u# b; ~! S/ ~
- }
复制代码 ( Y" T$ ^$ C7 ^* v# L
2 s3 }5 [4 @3 W7 u9 @
|