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

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

[复制链接]
查看: 289|回复: 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 编辑
& r# p  j4 M" Y' u  G+ z$ n. t  V) M" t3 X+ q" p
本游戏使用是高度为8像素的英文字库。% y! e0 f) ?0 K5 ?- @0 R

" h/ L. s$ ]  y8 q! Y1 V) s8 ]  i需要修改的点如下
( c/ \9 H5 f" C1 y) E( V& ?《1》将显示函数中按照单字节移动的指针,变成支持双字节。
9 o$ ~6 i# D7 H《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。  h; h8 B, g$ ?1 q. N% z# {  U
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
% s8 a8 N2 i$ ?; I/ ]# @% }" ]3 b& m" m# e
对话显示函数
5 G0 x0 `; }- O, F# F. a此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
6 ^2 F  V- I/ ~8 W4 e
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    * I8 q, ]2 Q0 Q+ E) U  R& m
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    " H& l$ t, \) w1 |9 x9 L
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    / b1 ^" q+ I( s3 r- m" j8 V/ F
  4.         const uint8 *str = (const uint8 *)text;
    % l! a$ U: r* f
  5.         uint16 xs = x;6 j& `) P7 n6 u% N, {% s
  6.         while (*str && x < SCREEN_W) {7 j4 s& f4 U" D5 C; j+ H' A: M' _
  7.                 const uint8 ch = *str++;" v+ _$ G9 t: _" ~% ?
  8.                 const uint8 *ftch = _font + ch * 8;
    - m9 m" A% Q2 }8 R
  9.                 if (outlined) {
    / w- a( {0 ?- a& S
  10.                         for (int i = 0; i < 8; ++i) {
    ! f9 \) k" x( T# t# G( d- `# \+ S
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);- J7 b6 X& Y4 V: G
  12.                         }
    % u. J+ H: M9 I
  13.                 }
    - A6 P3 b- H' d3 @: r0 ]5 q$ l0 E
  14.                 drawChar(x, y, color, ftch);
    + @$ i, E* J7 m, K& h" a
  15.                 x += _charWidth[ch];
    2 U/ F! }# F& M5 P; l/ u* F! e) I: ^
  16.         }) v: g( ^& v8 R5 a$ a" V
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    & P/ }$ ^- a& m
  18. }
复制代码
& u5 }, b% }9 F9 f2 p
4 b- ~0 n/ K2 O7 B( g
单字符显示函数
" S: U) T/ P8 j. b: {4 u) q
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    ' @. `5 d% R9 f
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    # U( S( s# d2 Y# d/ R1 B
  3.         for (int j = 0; j < 8; ++j) {
    & W- r" z' {' W$ F, O
  4.                 uint8 *p = dstBuf;6 l* E2 T/ X1 t6 }/ i
  5.                 uint8 c = *chr++;8 T0 ?$ i% N! z: c
  6.                 if (c != 0) {
    : y$ J, X4 e2 H
  7.                         for (int i = 0; i < 8; ++i) {
    # T) _+ k$ ], z  i
  8.                                 if (c & 0x80) {( X5 g, y5 M4 o' M: |
  9.                                         *p = color;
    7 G/ x4 M; |5 v" p* p
  10.                                 }
    2 N/ h" H* `; X) ~
  11.                                 ++p;: G2 g/ b  K6 ]& h. d- W# S
  12.                                 c <<= 1;
    7 p) o" h3 |8 N# }1 ]
  13.                         }2 |/ S7 X5 |$ p
  14.                 }
    , |! o; M7 d+ w) `2 H
  15.                 dstBuf += SCREEN_W;( `% _- b' v! W( i
  16.         }- `+ |$ X6 s9 k: x" g
  17. }
复制代码
4 [1 [, i  e- R- e

4 n% W3 [. ?# K' i$ s3 k5 P) E. i7 |) b
& ]) v+ B9 _6 T6 p3 w" C% f- O
' b: Q' ~& }) v, 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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