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

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

[复制链接]
查看: 422|回复: 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 编辑
" z6 o& i% n  U+ |* s9 \. _
6 ~8 k/ O$ `! {3 |本游戏使用是高度为8像素的英文字库。
- B' d9 b' [( L5 T. q3 r( s7 ?7 D$ k
" d9 n' ]: F( e需要修改的点如下
6 v5 c" z* d& h! R8 L: j《1》将显示函数中按照单字节移动的指针,变成支持双字节。1 J; R% _* z& K; C
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。; y6 T) F9 [$ t6 l( Z3 C+ H
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
2 F1 q) ]9 U/ ~' i8 C8 ?  F1 z% e; ~: c0 {5 M$ ?5 O
对话显示函数( M4 c% b$ d' j& s9 [
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
# e4 G* w* Z* D6 `8 g1 {
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    2 ]# f8 M0 H4 g: @" o
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    & s2 y* V, O: ^* r3 C
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    - S( `" s" `! `1 v) v
  4.         const uint8 *str = (const uint8 *)text;
    * ^# }. i0 J) U, T3 X( q. D6 s, h7 D  X
  5.         uint16 xs = x;
    5 C$ p' N7 N4 @8 v- D1 V, O7 V
  6.         while (*str && x < SCREEN_W) {% `  N6 r/ v5 }0 }" E
  7.                 const uint8 ch = *str++;
    ; ~+ w* V* ^/ |* X0 ?
  8.                 const uint8 *ftch = _font + ch * 8;3 Y' I2 ^3 a  X3 Y; F
  9.                 if (outlined) {
    5 c0 n  `" A4 K- X/ h9 K0 I* e
  10.                         for (int i = 0; i < 8; ++i) {$ d0 @- d4 L7 x! a" x3 w% U
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);+ f: M7 H# ^2 J* j6 f3 Q
  12.                         }
    $ d. M" f' U0 K& N0 t  `7 v8 l5 c5 A
  13.                 }
    6 M) `$ y. s+ @/ s
  14.                 drawChar(x, y, color, ftch);
    ) [" D/ |* T7 q3 s6 O% a
  15.                 x += _charWidth[ch];) u% r$ w' s" s2 X! [
  16.         }
    ( U/ C$ S& ?3 d7 f% P2 R2 D
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    0 V% m# z5 c$ Z1 d
  18. }
复制代码
6 J1 x0 k5 ?2 V3 g9 S

& P6 V5 h6 p1 w2 L$ I8 s$ C  l单字符显示函数
+ B3 K; q( w. j8 k( Z( I0 y0 |) U
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    8 c3 F2 Z3 T4 ~0 Q
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    : Y" w/ M( l* {- X7 n! U/ t8 _; q
  3.         for (int j = 0; j < 8; ++j) {/ Q! h8 G! z+ g" v2 N
  4.                 uint8 *p = dstBuf;' u! q. D  i. L; S0 I: d6 {
  5.                 uint8 c = *chr++;
    ! `+ k1 h2 B# ?4 O7 i7 x: }8 O
  6.                 if (c != 0) {& ]( T% A8 {+ j" B" n$ e; ~$ ^
  7.                         for (int i = 0; i < 8; ++i) {7 S. Y; f8 B0 W0 R- x. O
  8.                                 if (c & 0x80) {# |0 ^$ _" A) c. j& ~: n
  9.                                         *p = color;) u8 U. H5 L7 r1 }
  10.                                 }
    4 }1 @: h# ~, i; m; o3 {
  11.                                 ++p;$ i: G$ [3 o3 }8 s: t9 \
  12.                                 c <<= 1;
    " J8 u$ T7 ~% O/ G- R" |  j
  13.                         }! F# B4 W1 L) ?0 B- r: R7 C% d
  14.                 }# w$ @/ A  F) B0 p; @
  15.                 dstBuf += SCREEN_W;
    + D: I# X$ n" [
  16.         }
    9 R2 L, W& N( E! S
  17. }
复制代码

2 k5 q; w4 U$ I+ x( G& o( L
2 t& n/ a7 s5 W2 t) |& O. x7 F
  G' ?( }+ |3 j$ W5 o* P2 L# x* V2 R8 I. a
- A1 s, R& ?. q, E1 B
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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