设为首页收藏本站官方微博

其他 【Scummvm汉化 #1】Hopkins 国际刑警 #2 字库结构篇

[复制链接]
查看: 180|回复: 0
打印 上一主题 下一主题

[其他] 【Scummvm汉化 #1】Hopkins 国际刑警 #2 字库结构篇

跳转到指定楼层
楼主
发表于 2023-8-12 08:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【Scummvm汉化 #1】Hopkins 国际刑警 #2 字库结构篇

这个游戏的字库文件保存在游戏的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
  1. // Display Font  G4 a/ B% {! i6 Z) V5 `
  2. void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {; {' O% Q7 q+ ?" g$ @* G
  3.         const byte *spriteDataP = spriteData + 3;
    ' G, p; Q* S, V, X) g+ [
  4.         for (int i = characterIndex; i; --i)
    9 G+ j! R* C" L- O  F/ X) {0 p
  5.                 spriteDataP += READ_LE_UINT32(spriteDataP) + 16;
    $ G, S+ Q) \; A) L
  6. / i7 l: n- Q) ^! C2 `5 c
  7.         int spriteWidth = 0;
    3 l3 b- [3 i# r2 @
  8.         int spriteHeight = 0;5 m; k6 x4 }* o2 H
  9.         const byte *spriteSizeP = spriteDataP + 4;* |8 K; P/ T3 z; X1 d: B3 [5 u
  10.         spriteWidth = READ_LE_INT16(spriteSizeP);
    5 |/ r( c6 a$ \- K' R; [* v
  11.         spriteSizeP += 2;# n7 K. F5 t) R& j9 B
  12.         spriteHeight = READ_LE_INT16(spriteSizeP);6 c! C6 v: A1 u
  13.         const byte *spritePixelsP = spriteSizeP + 10;
    9 |4 F" H" C9 G' ?: C! ?
  14.         byte *destP = surface + xp + _lineNbr2 * yp;
    : |1 e6 m+ j( ~& Y! u0 \! w' Q
  15.         _width = spriteWidth;1 ^7 S% Q0 U2 M- _

  16. + [, F5 r$ B' Q4 I: w
  17.         int yCtr;
    , P' Y+ M0 V* l6 Q& t
  18.         do {
    2 c; a" w4 O& }0 o
  19.                 yCtr = spriteHeight;: t: I) l4 \3 b: q) Z
  20.                 byte *destLineP = destP;  m  S$ I( v5 r3 N0 Y. O/ t: I
  21.                 for (int xCtr = spriteWidth; xCtr; xCtr--) {
    # R  j* t+ P. @  I  y) X: I
  22.                         byte destByte = *spritePixelsP;
    $ {/ S1 U: u" T& \
  23.                         if (*spritePixelsP) {" y" W! {  |% j
  24.                                 if (destByte == 252)
    9 z6 g) H$ ]4 V3 w
  25.                                         destByte = color;* ]+ Y  @! a* Q1 ?$ |
  26.                                 *destP = destByte;
    # T5 P6 A* s$ a9 M. B
  27.                         }
    / r9 C4 H6 U5 `5 s

  28. : d- f% G7 J8 V2 d8 c( x; s) d' m2 e
  29.                         ++destP;% F' V. m& R- R- j
  30.                         ++spritePixelsP;
    ) ~+ Y4 J0 o+ U! R- p9 ^; o
  31.                 }0 S1 P' G5 u2 I, {
  32.                 destP = _lineNbr2 + destLineP;/ |) m3 q: e* c! c* A
  33.                 spriteHeight = yCtr - 1;
    4 s/ t( {2 n1 b/ Q* R- z4 K+ a; u
  34.         } while (yCtr != 1);9 K$ e8 u# b; ~! S/ ~
  35. }
复制代码
( Y" T$ ^$ C7 ^* v# L
2 s3 }5 [4 @3 W7 u9 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表