这个游戏的字库文件保存在游戏的SYSTEM目录下。# S+ I$ c7 F, t0 `
我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。
, ]: h0 G6 U) c; G! c经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。
9 m+ |3 G: a$ u( M- \0 A/ E# N" ~- j% E8 |
经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。- O6 R6 Q/ H+ d! N- E d+ D
其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。
1 ?/ `/ O! q& q4 yFONTE3.SPR里边只有放了单字节的英文字符。% g; ?& W9 k/ a. R: N$ B3 _
目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,
+ E+ p$ D' N: T% n1 c) R* M当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。$ n7 U, T% @1 n( _8 o2 ^5 X) u2 U
1 `" D; m- {' `+ S8 }) ]( ]
, h; L" s) X9 T# b单个字符显示到画面上的代码如下
# ?$ z! ]$ E8 S ~% \* Q7 y- // Display Font
' I# D* t3 W* D8 G, I! [ - void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {
6 z5 h* |' U$ k/ Q - const byte *spriteDataP = spriteData + 3;
7 a* q7 {8 H/ \, P& P; R9 [3 u( ^. R - for (int i = characterIndex; i; --i)
- N8 K1 [: _+ N5 D9 \# @ - spriteDataP += READ_LE_UINT32(spriteDataP) + 16;
" I8 T7 p3 N8 p - ' F# u7 |# ]6 t6 J, C
- int spriteWidth = 0;) r" a5 s5 x. I/ g1 p/ I, x# w
- int spriteHeight = 0;
* A: v! W3 e+ A* b& l - const byte *spriteSizeP = spriteDataP + 4;6 I" c8 A. ^$ Y2 R
- spriteWidth = READ_LE_INT16(spriteSizeP);& W4 T8 \/ b7 q! V! T( H
- spriteSizeP += 2;9 \+ p0 [% i* ]
- spriteHeight = READ_LE_INT16(spriteSizeP);
& i# R+ D3 z% l x* U" |+ O5 y - const byte *spritePixelsP = spriteSizeP + 10;
/ ]) m# ]% R) K5 {, C - byte *destP = surface + xp + _lineNbr2 * yp;4 V+ S- N w0 e
- _width = spriteWidth;
, }0 x: s4 `% [: V: g - F- \8 M! U; k6 }, C
- int yCtr; E4 x) b, B) r8 v
- do {0 g" N: x/ }. o# z2 K
- yCtr = spriteHeight;
7 v# X0 V* T( ?1 n; J - byte *destLineP = destP;5 f! m0 z' b$ q; K2 g* N% c
- for (int xCtr = spriteWidth; xCtr; xCtr--) {
# j V- b% A* b4 u - byte destByte = *spritePixelsP;
9 j& L8 j* U! S+ z - if (*spritePixelsP) {" D6 O" L! y6 j
- if (destByte == 252)( ^7 K* N) z7 X8 J+ |; ^: D
- destByte = color;& X& L; D) R/ A, q! d
- *destP = destByte;" x3 d4 r. B O7 u$ K% I
- }
, \ H0 t$ S& r( ]2 Q- m/ |
" e4 a# z% T, |6 V7 \7 ]! ]- ++destP;+ F* P. B, \& y. j# P
- ++spritePixelsP;5 ]8 ?0 n; W+ Q$ b7 q, m
- }
$ I: Y& W( s5 C6 B$ g, o/ z1 X- f; A - destP = _lineNbr2 + destLineP;5 [/ ]3 R5 b& |% A# y' ~8 l! A
- spriteHeight = yCtr - 1;6 ]2 {! b; s) R7 v P
- } while (yCtr != 1);
J! B4 f% j" I3 `0 D - }
复制代码
% P( h/ r# C1 H( P A6 k9 ^ b* H9 \ m
|