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

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

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

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

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

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

这个游戏的字库文件保存在游戏的SYSTEM目录下。. {4 m, f) \# r1 e$ h" w
我找了共有三个FONTE.SPR,FONTE1.SPR,FONTE3.SPR。
1 k6 W8 n+ a2 k- q* f经过改名测试之后,发现游戏真正使用的字库文件只有FONTE3.SPR这一个。' ]8 j; c  x+ `* `0 I
/ S. n; ?9 Q  @$ v( e$ Y
经过用十六进制编辑器查看,FONTE3.SPR的构造大致为索引数据(每个字符16字节),以及字模数据。
& u3 G- U7 ?; h# H& R其中字模数据为0XFE和0XFC两种。其中,0XFE为阴影像素,0XFC为透明像素。1 X3 w4 ?" H+ s) v9 G
FONTE3.SPR里边只有放了单字节的英文字符。
" g  n* E$ l; S目前的思路是这个原本的字库不做任何改动,按照其像素数据格式,我再另外制作一个中文字符的点阵字库,4 y# Y0 w$ c# g% H, B. d' q
当游戏显示中文字符的时候,在这个中文字库中取出字模放到画面显示即可。& v8 `$ M; I5 L' ]1 r9 n. a
& E6 G0 O' y& Y) G

/ ]. p: j0 u6 U+ a$ d1 \4 _( c# `单个字符显示到画面上的代码如下
/ p3 }$ l$ ?* h  V. b) F* n
  1. // Display Font& C7 u- F7 o0 O( ~  `5 Q/ A
  2. void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int color) {/ v; x8 [& Y! o5 n. j. U$ D* w
  3.         const byte *spriteDataP = spriteData + 3;
    , y  f* ]2 Y- a* k0 v+ Y& v6 ?1 C
  4.         for (int i = characterIndex; i; --i)1 ]) A) w% ~8 e- P6 S8 ]
  5.                 spriteDataP += READ_LE_UINT32(spriteDataP) + 16;- [) K! q; f: f* p2 p5 A

  6. 0 |7 R' V) v+ a$ P/ L* f/ L2 ~
  7.         int spriteWidth = 0;( S( |: Z! h. a
  8.         int spriteHeight = 0;
    : m  G5 X* ?) K# m
  9.         const byte *spriteSizeP = spriteDataP + 4;
    % r! b/ O: I+ `3 b6 K
  10.         spriteWidth = READ_LE_INT16(spriteSizeP);# z5 e" v% P* y
  11.         spriteSizeP += 2;) u0 {+ t: R, D
  12.         spriteHeight = READ_LE_INT16(spriteSizeP);% Z1 I1 ]$ T9 l5 v' U( y( J9 D
  13.         const byte *spritePixelsP = spriteSizeP + 10;! @( \7 _; A* J* s0 Y
  14.         byte *destP = surface + xp + _lineNbr2 * yp;
    / \; R/ a; e; y/ ~9 o0 q+ F
  15.         _width = spriteWidth;
    + ^- H0 l6 [/ R) a+ ~
  16. & q9 C. J# @- I% H& i
  17.         int yCtr;
    , G% n2 `: P  U+ H) K
  18.         do {/ b* n: u$ \" F5 C7 D1 r- K
  19.                 yCtr = spriteHeight;
    ! P( F) y0 }: _; Q
  20.                 byte *destLineP = destP;3 S& K/ A( w$ P) s
  21.                 for (int xCtr = spriteWidth; xCtr; xCtr--) {& \, g! q8 v  |+ @5 i( S/ u5 G
  22.                         byte destByte = *spritePixelsP;& r) e5 o. q  h0 ^0 l, j! n
  23.                         if (*spritePixelsP) {
    . P/ J$ ?2 ?- R" }. U9 d4 E# r- n
  24.                                 if (destByte == 252)
    ; e& u! o  n1 b) `( g$ B
  25.                                         destByte = color;
    * z2 L2 M% D& v) e; ?  }7 X
  26.                                 *destP = destByte;/ x& L! k+ q; ^
  27.                         }4 ~& l# M' E' ]0 L$ n- [

  28. 7 J, ~: t1 G& i( ?6 C& D( y
  29.                         ++destP;
    ' P! m  D% e; g
  30.                         ++spritePixelsP;
    0 I; S) v& l+ \1 f+ }$ d8 w
  31.                 }2 F4 j! e, w' I* {& Q/ H
  32.                 destP = _lineNbr2 + destLineP;
    ! [" c) g. d4 Q; L- c7 n) {% e
  33.                 spriteHeight = yCtr - 1;
    0 _% y7 D$ X4 T7 |, U1 `' Q- r. S) b
  34.         } while (yCtr != 1);4 |4 h: u2 D& b2 B: G2 t
  35. }
复制代码

: M+ z/ m- j! Q6 |1 Z$ }( T! O, c. j) J$ q4 {
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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