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

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

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

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

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

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

这个游戏的字库文件保存在游戏的SYSTEM目录下。
9 z5 V3 J5 r: d我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。0 ]0 X7 ^$ w5 M8 N! k+ T0 h% I* E
经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。
9 \: L. y2 ~- d& p" |3 P3 @
% o4 q! B& d3 D; z# F经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。
% q, i/ u! H3 @) n其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。
; F' o. O% b* {FONTE3.SPR里边只有放了单字节的英文字符。
% U2 R8 V) m; i) H8 R7 R, t8 [9 M目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,% Z& _  `. |" [- w
当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。
+ ^3 W9 E; R* r/ K5 w7 B- G: n
( s# \1 |8 o4 N* O+ Q: P* o8 |) o6 H$ L: [% l5 ?
单个字符显示到画面上的代码如下, _8 O8 I* S( Z
  1. // Display Font& j. n" v4 f* z  b2 d3 S& G1 Z
  2. void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {
    / w8 Y9 H  E, |" v7 F, @" `
  3.         const byte *spriteDataP = spriteData + 3;
      \6 B: H# c: a8 S
  4.         for (int i = characterIndex; i; --i)
    6 L6 f* x5 J. @1 e/ c' {
  5.                 spriteDataP += READ_LE_UINT32(spriteDataP) + 16;+ l2 L" {4 Y0 S. H5 r: ~
  6. 1 ~- p( h# M  t
  7.         int spriteWidth = 0;
    . k" b9 G3 i& U6 u: ^  C
  8.         int spriteHeight = 0;
    ) v4 o; L& `+ }
  9.         const byte *spriteSizeP = spriteDataP + 4;
    " k+ d& N: M" l( Q, ?( K7 b
  10.         spriteWidth = READ_LE_INT16(spriteSizeP);6 Q0 H; @$ J) l' o" H
  11.         spriteSizeP += 2;% |7 U8 s, H# ~$ P8 x
  12.         spriteHeight = READ_LE_INT16(spriteSizeP);0 l: m8 E' }0 N6 F* ^# C3 g
  13.         const byte *spritePixelsP = spriteSizeP + 10;
    * s0 ]8 W7 ^) \& n  ]
  14.         byte *destP = surface + xp + _lineNbr2 * yp;1 Y8 T5 \: V3 p5 z
  15.         _width = spriteWidth;
    & G& i% K& h/ w  I6 }# g6 G
  16. ; j  a& @/ l( z* ^) X' q: k
  17.         int yCtr;1 T/ e+ ^+ ^. j. ]# Y# L' y' g
  18.         do {' k8 w# o  O- i  D4 c! [
  19.                 yCtr = spriteHeight;, ?- b& }7 i) C$ a$ i. Z' i
  20.                 byte *destLineP = destP;' D' M7 M+ f) ~9 S! \! n
  21.                 for (int xCtr = spriteWidth; xCtr; xCtr--) {& f, s7 N  _+ k! J* t! @5 ?
  22.                         byte destByte = *spritePixelsP;
    2 \$ x5 `9 n' B$ ]* W
  23.                         if (*spritePixelsP) {
    2 R- A2 N( T4 b
  24.                                 if (destByte == 252)
    8 d! N9 N; j0 I# t) p/ f$ n
  25.                                         destByte = color;" `. i- ~# H" f+ S0 z) |2 o
  26.                                 *destP = destByte;: i7 ]& F  H+ U4 G7 B; M& d
  27.                         }+ B2 p0 R  I0 h& c9 y3 K$ t

  28. $ q- C$ e9 `# b/ t7 R! @
  29.                         ++destP;
    : ?9 Z$ y6 m# d! C& i/ C6 [' B
  30.                         ++spritePixelsP;
      Q7 v" t# Y* q# `" Q8 g
  31.                 }/ m6 R( N0 K6 `2 S+ W; t
  32.                 destP = _lineNbr2 + destLineP;
    : E9 U) l; {: A7 V. @
  33.                 spriteHeight = yCtr - 1;
    0 I- I8 ]0 D0 @" y
  34.         } while (yCtr != 1);
    2 ~- s( X6 c+ P9 A
  35. }
复制代码

9 z% {* \8 ]2 q+ {# M. s! [2 P2 m. i! {5 W
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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