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

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

[复制链接]
查看: 421|回复: 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 编辑 - {; G; p8 t  c" ]$ V/ L% k' d5 q

9 W$ k: d' w7 @; j; H本游戏使用是高度为8像素的英文字库。
2 j- u# l/ z+ n; ]4 |9 X, Z  _3 s8 [9 `; L# z( t  _* e' B
需要修改的点如下6 c! c* I; _+ B
《1》将显示函数中按照单字节移动的指针,变成支持双字节。4 t# Z+ U6 D5 ]9 O( m4 v0 e+ z
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。0 v7 h) J; l# j& v$ N( j
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
  R  ^; c+ |4 A9 |
0 o& j4 w( |# a, i对话显示函数- X9 A1 p% o3 l0 `1 y
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
  O0 q. w* M0 O  V9 s" O
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    $ S5 y# x7 G- B# }" _
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    6 w. n7 d" _' \
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };1 D- @* z% Y7 f9 @% `8 s  @
  4.         const uint8 *str = (const uint8 *)text;! j, z& E4 N; _/ u/ u
  5.         uint16 xs = x;5 J% h# @4 s: H5 y. a. M
  6.         while (*str && x < SCREEN_W) {3 t! b- g) J& h
  7.                 const uint8 ch = *str++;2 [- v" Z5 u" D( L
  8.                 const uint8 *ftch = _font + ch * 8;6 F! C; H3 E) R* }  ~
  9.                 if (outlined) {* ?6 h8 K9 v$ h& h5 b. d  j
  10.                         for (int i = 0; i < 8; ++i) {# Q0 X! M; w$ @' F6 a& {2 F" q
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);/ x  I% c5 K  B+ L
  12.                         }; s8 Z. ]7 S; m2 L, K
  13.                 }
    & o( a1 T' [. ~- K
  14.                 drawChar(x, y, color, ftch);" @; G/ ?5 I9 k3 O8 o7 q/ I+ G
  15.                 x += _charWidth[ch];
    $ l1 q6 ^# |9 S! U
  16.         }
    2 {7 C4 k4 `0 C
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);9 D* U" z; q3 M, M7 B+ \
  18. }
复制代码
' z; O/ z5 y2 }* M) [6 q8 ^! k/ k

/ X0 l9 D$ Z$ J+ K9 |. I单字符显示函数$ ?6 }, W/ `4 \+ ~: X$ k/ [' V; ~
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {# y6 J0 z& M2 C1 @4 ~% v
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    $ r, J+ a- Y: v4 o" s! U6 X
  3.         for (int j = 0; j < 8; ++j) {6 _8 M% C/ x- Q
  4.                 uint8 *p = dstBuf;) s% K- @$ N: P9 Q
  5.                 uint8 c = *chr++;
    " e( v# ~( s: }& l2 L) a$ r2 _! S* K
  6.                 if (c != 0) {# \/ l% {- \: K$ [/ g/ ~. h! l4 p
  7.                         for (int i = 0; i < 8; ++i) {$ \( |. s! z9 f, T
  8.                                 if (c & 0x80) {
    ( ]* E, |9 n$ m5 n
  9.                                         *p = color;( W2 x' H. K9 G: L% }  b/ E
  10.                                 }
    9 p; ~( A2 Y' }
  11.                                 ++p;
    6 v6 I6 j( q# X' \+ A
  12.                                 c <<= 1;  W% b/ }2 C  x7 _
  13.                         }
    4 X4 i! P, K1 P+ [
  14.                 }
    2 M$ L5 T2 @( U* }
  15.                 dstBuf += SCREEN_W;+ \9 N4 T5 ^. t7 \5 ]
  16.         }
    ( e5 S+ ~4 l( `, E
  17. }
复制代码
; C$ x4 a; Q0 ~" o7 p4 C
8 [3 C# e; r( g$ C* K( a

# P! q- U( k6 ~& E. p
: Q5 h: f2 Q0 M  R- j5 g" y
/ O" g5 E3 H" \
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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