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

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

[复制链接]
查看: 310|回复: 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 编辑 # d3 [, O' R6 X6 C6 W) ]; q  Y
* I: i1 p+ e2 X0 _
本游戏使用是高度为8像素的英文字库。# ^1 s4 ]' p% B( Q- E
/ K* F3 ]( Y% G3 p
需要修改的点如下: F# ]+ M' h  r- b3 j
《1》将显示函数中按照单字节移动的指针,变成支持双字节。3 s, @  q! ?3 \* j8 d
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。
- U+ p+ j- T* w7 d& p  }3 a     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。+ C- m. V, k6 x

$ }" A( G" `' p) T& n; \" T/ m对话显示函数' Y- I7 S2 h" n
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。, I, A$ u" r9 r4 w% ^0 ]
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {  ?3 r) A5 t9 }
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    4 U4 p; j; r. E. K! V- }6 J5 C4 w
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    6 f2 x/ d+ D1 d2 o9 p; n( N7 A
  4.         const uint8 *str = (const uint8 *)text;
    7 G5 r1 l- t8 O! S: v# ^. j
  5.         uint16 xs = x;4 d0 c0 m3 n* ]# t* e. g
  6.         while (*str && x < SCREEN_W) {) h3 F7 D/ r4 ]" K" G& M# \
  7.                 const uint8 ch = *str++;
    ; V3 ]( |, v* H/ j" y9 ?5 B" E% ]$ m
  8.                 const uint8 *ftch = _font + ch * 8;; r& [7 B! y* C' ~6 t
  9.                 if (outlined) {
    ; b* y. e5 V" {
  10.                         for (int i = 0; i < 8; ++i) {% U5 t6 u3 v+ x) L
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    ; o( N7 C% T' K- f* S4 b
  12.                         }$ r( [4 y8 |6 w! c( o/ x
  13.                 }
    & c. u  P* q, M
  14.                 drawChar(x, y, color, ftch);
    2 J& B9 _  j  j! P9 R
  15.                 x += _charWidth[ch];
    * `! Q/ r! m8 P7 A
  16.         }0 F0 q1 q* ?* r3 n% O9 U2 t6 N5 C
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
      m; e% S% X$ U$ c
  18. }
复制代码

; Z; p+ ?. D9 s! [+ \) V5 s% }
  D) b$ r9 c( A/ p单字符显示函数
- J0 @% F  S# E) U, E6 w3 a% Z. d
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    ! @' ~7 O9 L( a3 \5 Z3 \# o
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;7 c4 z, @  z8 X! }7 X" J! Q  c7 ?
  3.         for (int j = 0; j < 8; ++j) {
    - m* S7 g' ^2 z: Z' f3 a- K
  4.                 uint8 *p = dstBuf;
    * M0 f; |$ R% K
  5.                 uint8 c = *chr++;: z# F/ e% P$ Y0 g8 b  H- y  }5 l
  6.                 if (c != 0) {1 x3 O3 a( w) H& z/ d9 t
  7.                         for (int i = 0; i < 8; ++i) {1 X: X* E+ z5 C# G
  8.                                 if (c & 0x80) {
    % o7 o& @( E: s7 f
  9.                                         *p = color;
    ! U& Y% ^6 Z; D: a& _
  10.                                 }. z  w, r$ I" @  R0 G8 u6 X9 \
  11.                                 ++p;( t$ |  C. i/ I- b8 q  s* v$ u' Y
  12.                                 c <<= 1;/ l; \/ {4 K1 @" Y; ]/ W
  13.                         }0 ^% V  M  @6 E. ~4 `
  14.                 }5 O' w3 W) E% a2 i9 t
  15.                 dstBuf += SCREEN_W;
    - s; @' f" x1 O
  16.         }
    # u7 y- C- B! _, K, ]& _2 T- K7 q8 r
  17. }
复制代码
1 c' t4 Q  m5 s& U* I: h  \
  T, l/ g  z% M! @

/ h: G. v6 f6 I
6 Z8 d% s5 H& [% d/ ?+ t+ g# Z* |9 m6 t
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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