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

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

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

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

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

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

这个游戏的字库文件保存在游戏的SYSTEM目录下。
* v' `5 n+ ~0 l: @, y- {( I4 y0 r% k我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。
! P: M8 C  S, r0 `; h经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。# p+ C$ Q1 G  {/ C# }( {" z% }' J

. R- b. C( T% c经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。& q; i* u: B% \( a% S. ^1 @; a
其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。0 r' a; ], ~4 p5 t! o
FONTE3.SPR里边只有放了单字节的英文字符。5 `0 y- \& c) f) F* k  U
目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,
4 d7 ^( G& p7 k1 N* R- R) ^6 z当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。( R9 i$ G/ V' N3 `5 u

; n2 J8 z+ V2 h( ?$ J: v6 w6 C: G- r
单个字符显示到画面上的代码如下6 I! c* f4 N. ~) H7 W1 Z; ?( H- k) z
  1. // Display Font
    5 O. G$ l& H8 ]
  2. void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {5 Z% _) N7 O3 }& \
  3.         const byte *spriteDataP = spriteData + 3;
    8 _* ^  V9 F8 L0 W- ?+ U& o% g, \
  4.         for (int i = characterIndex; i; --i)
    0 I+ r( ?- Y4 Y7 X( Z- ~/ w
  5.                 spriteDataP += READ_LE_UINT32(spriteDataP) + 16;
    4 I: e& v1 R8 o5 b! w! B
  6. 0 i6 t" d$ l2 t% b( h- r; O7 @
  7.         int spriteWidth = 0;* l8 N0 z# y: i0 o
  8.         int spriteHeight = 0;
    ; |- Q1 K/ S) G
  9.         const byte *spriteSizeP = spriteDataP + 4;9 b. n7 R3 z9 O9 [
  10.         spriteWidth = READ_LE_INT16(spriteSizeP);
    & K4 z( Q1 f7 K# `
  11.         spriteSizeP += 2;
    - |2 ~# R+ A; L; |4 ]
  12.         spriteHeight = READ_LE_INT16(spriteSizeP);
    / c4 ?2 l& }5 J
  13.         const byte *spritePixelsP = spriteSizeP + 10;
      p7 W2 E6 c" r
  14.         byte *destP = surface + xp + _lineNbr2 * yp;' P& n. B! Q! M& O4 r" [
  15.         _width = spriteWidth;/ z0 `/ S" s# D% a2 c0 r3 P, f
  16. 4 [7 n$ s0 C$ q  S6 z. L* ?9 K4 _
  17.         int yCtr;9 |( k, G5 q  j8 V( D. |  M: l
  18.         do {
    . Q+ D4 M7 G7 f& ?# }! s0 d9 t1 Y
  19.                 yCtr = spriteHeight;/ g1 k* H& N$ p! M2 [9 ]- o. O
  20.                 byte *destLineP = destP;2 I. i) Q# }: S' a8 X& Q) w* I- X
  21.                 for (int xCtr = spriteWidth; xCtr; xCtr--) {
    / v' K9 c, V3 S3 }# V
  22.                         byte destByte = *spritePixelsP;) R' H1 R% L+ j1 S4 \
  23.                         if (*spritePixelsP) {! v4 o+ }& a; O6 i
  24.                                 if (destByte == 252)! Q- i$ n5 [" g" G: P
  25.                                         destByte = color;# L( @8 J0 v) n2 l  [9 K/ o. f) P
  26.                                 *destP = destByte;/ e' I0 ^3 Q+ |
  27.                         }5 T( K5 f+ f3 Q' H# _* p
  28. + W  v: [. B5 e
  29.                         ++destP;
    % ~4 B5 M) }( H1 V
  30.                         ++spritePixelsP;) C" a* d, o+ E) H8 i) k
  31.                 }
    0 t7 c% f! t, M1 A3 c
  32.                 destP = _lineNbr2 + destLineP;
    . y# _8 d6 w2 O: K8 C5 o
  33.                 spriteHeight = yCtr - 1;
    . `$ G0 T  u2 h# C) A+ ~" b4 e
  34.         } while (yCtr != 1);- P7 h0 @: h. p! u  `* y
  35. }
复制代码
* O# v2 H6 {; V6 ?, t1 U' u

& P/ W$ [* [$ s. ]5 }. M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

高级模式
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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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