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

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

[复制链接]
查看: 434|回复: 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 编辑 9 ^& Z$ [( g5 _5 t& Q; [
! D  L$ K/ [& N7 V% G/ A
本游戏使用是高度为8像素的英文字库。5 a( a( q' e2 x9 k- v) s) W
: q' P7 @, b; I# V- J
需要修改的点如下2 H9 j; S! |5 a4 h7 O$ j8 _4 _9 x* `
《1》将显示函数中按照单字节移动的指针,变成支持双字节。3 M% W0 p5 F4 @/ s7 h. r9 f
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。3 Z, H1 a$ k$ S
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
6 c4 h; M2 G) e- Y( Z9 K+ [* r( f1 n  ?4 m
对话显示函数
# M2 _) o1 g9 t% t此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
% D  `, i4 t3 k+ _: @$ H" H
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    6 W+ \+ P% j+ @
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };2 |( i  d4 c/ }4 p6 S
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };7 Y, y" [- `; L" X. i' o
  4.         const uint8 *str = (const uint8 *)text;) m3 `8 T& j% X' r' C
  5.         uint16 xs = x;
    ! R& }- z, A' B
  6.         while (*str && x < SCREEN_W) {
    ( Y- T1 A0 s6 R4 ?
  7.                 const uint8 ch = *str++;, t* W4 g3 E0 r6 B% ?+ o2 X
  8.                 const uint8 *ftch = _font + ch * 8;
    9 Z9 Y6 M) a% \3 ~6 U5 e
  9.                 if (outlined) {, ]" M; b- L& G, y& C
  10.                         for (int i = 0; i < 8; ++i) {
    $ h5 a2 ^9 t0 R/ }3 E! F) C8 c
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);- `* X+ G! k- N1 L3 ^" f
  12.                         }
    ; H4 Q& W4 M* M) q- p( J
  13.                 }  v' C# b% V2 k! M
  14.                 drawChar(x, y, color, ftch);
    ' @; k3 i. S9 z3 n& I' {
  15.                 x += _charWidth[ch];
    % B; V. U/ C% I. D0 H! q$ E
  16.         }( B, U" V/ p+ P  Y6 ~' a. d; Y
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    , A$ d  T' J( K$ F( j( q3 o
  18. }
复制代码

/ A$ o. r5 K# G8 J* c  U) n0 f, @1 a& t# I& \9 O: u
单字符显示函数
9 w( ?, |+ {+ P9 c" F1 s
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
      B! D* R2 K  g1 d( {7 l% A$ B
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;4 {# L, \) H  i) W
  3.         for (int j = 0; j < 8; ++j) {
    : R$ ?- {; k6 q) t) m
  4.                 uint8 *p = dstBuf;
    ! i6 g7 Q7 |8 m
  5.                 uint8 c = *chr++;. f% \, Y  i& X
  6.                 if (c != 0) {0 v, Z5 Y* |5 E$ j
  7.                         for (int i = 0; i < 8; ++i) {) [7 p% w- A, @) l+ [
  8.                                 if (c & 0x80) {" x; y  c6 T0 H6 H6 J- B  M6 w- Q
  9.                                         *p = color;0 w8 [$ w9 t+ m5 a& o7 k
  10.                                 }
    5 i* n* W  B% N: y: W. Z
  11.                                 ++p;
    % J  A7 A6 I' C3 f" ~
  12.                                 c <<= 1;
    9 V' r! \2 J6 p4 x( n1 ]) K
  13.                         }, p+ o9 Z3 r9 B& T* S+ H& @  @
  14.                 }
    % `/ u  A- Z8 ?$ P1 P: \
  15.                 dstBuf += SCREEN_W;  g/ r& z8 k! k" g) H+ R
  16.         }
    8 p4 l/ f. j/ L2 s( g. V' G
  17. }
复制代码
' |0 x* V" _' M0 }) u" e
$ ~: U. E+ q# A+ A
$ s" M) }  T& x2 f0 E

) y+ T; _) B( d: H- J5 R: w; X  r$ z
. ?; H" c% x0 h5 B0 [. e: K
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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