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

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

[复制链接]
查看: 420|回复: 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 编辑 7 {" i) y6 W- |. d2 z, _
$ l& p. d* o" t& T
本游戏使用是高度为8像素的英文字库。5 T5 O+ }( a1 y; g5 `+ C7 i  G2 u
4 G+ c9 v7 w7 ?* A. D
需要修改的点如下" W' z* o2 E% f; z
《1》将显示函数中按照单字节移动的指针,变成支持双字节。
2 z0 B# G+ A& {8 G: E/ h9 C3 \. G" f《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。- f) q3 ]; k  h5 S( [
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
( n$ ^! C, D( O+ p7 _
2 B" D' p$ f4 m, D. X% s对话显示函数
4 f1 a, @3 G( t3 n% q' H此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。4 u  O1 L. s  s# n) M
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    ( B; |- _  _; Q3 `7 H' J! [. X
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };0 \9 G* t- [9 C; {% Z; [! N; n2 E3 I
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };" O/ W: t% r" l: J; e& I3 T' i
  4.         const uint8 *str = (const uint8 *)text;
    & D, }7 j* y% u- c& j/ z3 H, h' b
  5.         uint16 xs = x;' q' \% p" H6 W5 v
  6.         while (*str && x < SCREEN_W) {: V/ r$ Z" N2 q
  7.                 const uint8 ch = *str++;
    . w& @- g( q; e" E% G+ \
  8.                 const uint8 *ftch = _font + ch * 8;
    5 F; g6 E8 g* r4 U5 _
  9.                 if (outlined) {
    ' |. ^8 ~$ D% j; \5 y5 j* e0 j: r" M! h
  10.                         for (int i = 0; i < 8; ++i) {8 v  ^* Q2 R6 c2 Y% s9 o7 c
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);* }4 Z, c4 b% }* {( V) }- L
  12.                         }
    & @% u( O1 ^! c& D' R/ L6 \+ }
  13.                 }1 M4 ?0 d) j; C
  14.                 drawChar(x, y, color, ftch);! _  |; i  X8 T
  15.                 x += _charWidth[ch];* y- q* E/ V# p" F  L& t
  16.         }
    6 |9 b9 E9 N$ ~% F5 ]; I
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    " w8 ?2 T6 N1 [- z$ s
  18. }
复制代码

( ~" a# q) l* X3 Y
. H9 L( _) N( Z! x0 s单字符显示函数* G$ [7 T; y' O2 }
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {9 W3 ~- P( d3 {: e8 _
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;3 H* |* ^0 c6 Q. ~5 Q
  3.         for (int j = 0; j < 8; ++j) {
    9 a8 s; o" p7 A* X9 S# A3 c7 Q
  4.                 uint8 *p = dstBuf;( W& ~, p- r( {, j
  5.                 uint8 c = *chr++;
    9 t- n$ i4 _, Q7 A, k
  6.                 if (c != 0) {* Y: v( e4 k9 B! Y5 y3 t0 X( q
  7.                         for (int i = 0; i < 8; ++i) {
    " x; ]& v0 U# e+ [
  8.                                 if (c & 0x80) {2 Z) \% X) F5 b$ r
  9.                                         *p = color;
    & @# s! V  b# }9 `3 ~
  10.                                 }
    $ `! i+ v/ A4 r3 Q' |0 l
  11.                                 ++p;; |7 [) C1 B2 f2 c" N- ]9 l
  12.                                 c <<= 1;
    + L  W, W/ h& u9 w4 G$ ]
  13.                         }
    ) p2 h' x2 ~4 d1 Q8 o; {; a/ i
  14.                 }
    ) Q9 l. Q( U# p4 g$ r  _- e9 J. [
  15.                 dstBuf += SCREEN_W;
      h! }; K5 ], N" x/ `! m& h
  16.         }
    9 ]2 M- ~7 k; V; E; J0 j
  17. }
复制代码
; ?4 f1 S" M' m4 R0 f# l6 f( u

8 G! w" F2 b+ `5 M' U6 t! z  y/ A2 H; S5 S4 _

3 U/ g$ }. l. C6 f+ ~
  j! G; i. F  R5 i& A6 M
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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