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

其他 【Scummvm汉化 #2】Flight of the Amazon Queen 亚马逊女王的航班 #1 字库篇

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

[其他] 【Scummvm汉化 #2】Flight of the Amazon Queen 亚马逊女王的航班 #1 字库篇

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

【Scummvm汉化 #2】Flight of the Amazon Queen 亚马逊女王的航班 #1 字库篇

本帖最后由 shane007 于 2023-8-12 12:21 编辑 . b/ c! Q3 p0 m- q0 {) u

% H  {8 Z6 w1 s4 R本游戏使用是高度为8像素的英文字库。
9 ~3 s; D4 u9 j$ u* ]( s$ N$ E1 R( P0 Y' \
需要修改的点如下
) s( E" d) X# M2 i& C- Z《1》将显示函数中按照单字节移动的指针,变成支持双字节。
4 J4 V3 k/ a$ u/ k* ]) d9 F《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。2 t4 W# L& N: O* n  C7 n
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
! i7 ~0 H& ?/ _! E  }/ |% x7 a, X2 C  M# _! T2 \" J' G
对话显示函数" a# W& N# H: e$ v
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
& H, V3 ^% L3 Z$ |* l& j# _
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {+ h! O0 Y) }$ j# M" `- n+ b
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    ' i* V' Z" j9 k5 S/ J4 C
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    : w4 y1 k" H$ R: W# s. L
  4.         const uint8 *str = (const uint8 *)text;
    8 `' f* R. C/ G3 `! I+ E: z6 z! C
  5.         uint16 xs = x;6 P4 M% U5 \6 w- n: r$ {
  6.         while (*str && x < SCREEN_W) {
    ; m- y2 {+ `" o4 R7 k
  7.                 const uint8 ch = *str++;
    4 \- H" M( V3 @, w" ~. q3 W, j
  8.                 const uint8 *ftch = _font + ch * 8;# Z. Y2 H3 \+ P- I
  9.                 if (outlined) {) I  ]$ ^- m* ?8 Y! _
  10.                         for (int i = 0; i < 8; ++i) {
    # s, H9 m/ L! K- N* Q$ L
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);* ~4 u4 b$ U* h/ M5 D+ c$ K; a9 X
  12.                         }
    7 U& U5 u6 k. \
  13.                 }
    * f! d9 o# v0 Y/ s. t
  14.                 drawChar(x, y, color, ftch);/ }% _& `' N  y# B2 |# k
  15.                 x += _charWidth[ch];
    + n) |+ i: f# Y8 e
  16.         }- n5 Q; E1 h& x" z3 B% k) u5 ]
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    0 G5 F! v# K, p! f6 G
  18. }
复制代码

  d6 j/ v, Z0 q4 p( L
4 Z$ N$ H9 p+ T9 E9 [+ C$ x5 D单字符显示函数
; V6 n  T, t4 r3 p5 q* m! m
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {' D* S: ~( D! b6 a! Y/ P; Z
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;7 Y3 J. r! A  h. f6 c( ]  i1 H' e
  3.         for (int j = 0; j < 8; ++j) {, D0 |' V- c+ U) L/ W$ v7 k$ V
  4.                 uint8 *p = dstBuf;$ ]5 P$ ?# L0 ]
  5.                 uint8 c = *chr++;8 W7 g* n. z: r
  6.                 if (c != 0) {
    ! W1 `/ P) g0 U" e' g5 R
  7.                         for (int i = 0; i < 8; ++i) {1 X  U% d, m* C! |
  8.                                 if (c & 0x80) {
    5 _! _1 {/ c8 K2 W6 D" x
  9.                                         *p = color;
    ; }9 x* O. W1 V1 w* P1 s
  10.                                 }
    ( B) O% B6 S7 a& [3 V: a, W
  11.                                 ++p;
    6 \' [/ N+ S9 I( }" e) v
  12.                                 c <<= 1;
    & R; \; H. z9 \" ?
  13.                         }
    4 G; n- f6 w7 R  v, ~$ ?
  14.                 }8 o* ~+ O2 S+ r0 Q8 h
  15.                 dstBuf += SCREEN_W;
    0 j4 t" b. f/ G# x+ T
  16.         }2 h: ~( a4 j* u: T- g5 ?
  17. }
复制代码

- u; a# c4 D9 W8 s+ t. H9 T7 n2 u# _) l# ]! P1 K! V

% c/ B# Y; f* M5 B6 g7 F$ r$ h% H, o0 G1 c0 T

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

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