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

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

[复制链接]
查看: 302|回复: 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 编辑 ! H4 ?; }9 Z, e+ \. I

( k& U& {5 e6 r- k; h! r本游戏使用是高度为8像素的英文字库。6 J3 J1 u/ m3 I" S4 G

  `! q+ ~4 a5 U$ V  \0 J需要修改的点如下
2 S+ X% b5 I1 s8 `  `3 F: Q7 b  y7 E' i《1》将显示函数中按照单字节移动的指针,变成支持双字节。
4 p0 R! B+ ?  I: u* e* M《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。4 ?) B* G. q4 `# W+ y
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。& ~% L+ k/ [5 L" l& @' @

! Z1 g& z$ z% ^, D对话显示函数& c  d; ^# z1 V' z$ j5 i$ e
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。  z9 v" r( v5 y0 N) k8 \, A# j9 l
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    1 q7 _. A$ |1 e& N  Q
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    - A: q  F7 n' u( E/ A! D( b
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };6 m3 J9 M: U+ O9 Y9 ~; b; s6 ~! e$ i
  4.         const uint8 *str = (const uint8 *)text;7 W  f8 I& O* h) A0 |
  5.         uint16 xs = x;
    ( t6 o6 x+ F1 s" p2 ~
  6.         while (*str && x < SCREEN_W) {+ T+ @; X/ g4 x' F: R
  7.                 const uint8 ch = *str++;0 x! I4 Q5 }9 M- u4 r# d9 v& U2 r
  8.                 const uint8 *ftch = _font + ch * 8;6 s9 |* m! ^! h8 {3 l6 V
  9.                 if (outlined) {3 Q/ X1 R* q" Q  a; L
  10.                         for (int i = 0; i < 8; ++i) {4 N  [+ R/ @! j
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);6 N$ L6 w- _8 H
  12.                         }
    # n+ A0 p6 K  l  [4 D# g; O8 \
  13.                 }! Q4 c' j" r$ \5 S- z
  14.                 drawChar(x, y, color, ftch);
    / C4 w( M4 W2 w  f6 z: G
  15.                 x += _charWidth[ch];
    # S& q4 \  \+ W4 q2 n, h6 N$ g$ R
  16.         }
    8 L: w3 g! I0 @# k* `+ \0 D: m6 T
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);+ j. c2 C. @: O
  18. }
复制代码
% ]( w0 t- ]* `9 I& j! p% h
4 F  z  z/ U1 W( c
单字符显示函数) v. d% h, ?4 d, L# D1 Q8 n3 H
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    1 b1 T/ T" E" }) W9 `
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    ) f5 E& K# Q# ]
  3.         for (int j = 0; j < 8; ++j) {
    2 ]+ p2 Q5 Z4 Q0 w; |
  4.                 uint8 *p = dstBuf;
    : H, `! O, n& I
  5.                 uint8 c = *chr++;# g' ^: f: @7 L6 {5 g
  6.                 if (c != 0) {
    - I( Z$ R7 k6 r* W2 l' C
  7.                         for (int i = 0; i < 8; ++i) {
    : m/ p7 I3 X  z$ P3 U9 X6 O5 T3 ]- |0 x
  8.                                 if (c & 0x80) {& h% t3 _8 i. d5 ]0 }5 |* {+ f. X
  9.                                         *p = color;
    / ~4 i6 K  C; x' r' c/ O
  10.                                 }
    0 Z, R# d: d0 ~. n# R: z) ?
  11.                                 ++p;$ r4 Y2 p+ m0 S1 B+ R8 z( I
  12.                                 c <<= 1;
    # J8 F# `$ D( L* N6 \$ [3 _: a
  13.                         }
    , m0 B5 C& u) ^- _1 c6 Y2 M
  14.                 }
    + B3 F# {' Q8 p, I( W& t
  15.                 dstBuf += SCREEN_W;
    4 q! Z3 X5 H4 l2 x: W
  16.         }8 v& W0 J( s8 v. L3 a, K! o& j
  17. }
复制代码

( Q' _- A. @2 Z! J$ d' ?4 o* F+ c  l  |) q1 V/ ?

; q* |' q0 o2 p+ `* z" E1 z( r6 N1 }. ]4 T: @7 D% H) S; O. X; U
% k" T, O; n6 i3 m* v* h( d
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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