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

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

  [复制链接]
查看: 508|回复: 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 编辑
2 H6 V" X5 l" k. w
6 K$ K  w! {6 U- X5 o本游戏使用是高度为8像素的英文字库。
: Z7 ]. N- w5 N% p! v5 c0 d9 K: ?, z! R' x
需要修改的点如下
* j' q3 y. y: p9 Z6 H《1》将显示函数中按照单字节移动的指针,变成支持双字节。: R! z. n: n5 n
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。6 v! @: S1 h9 N
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。  }4 Z( r$ X) [& B
  I; l. R: K- R/ @/ `5 u
对话显示函数
( l* C3 g$ ?7 }此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。; `, j% h- h/ y+ X) d2 @
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    0 l) ?3 r! L7 P" R) B* q8 ?
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };9 O( }7 i! u9 i2 L; X
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    ) U( `; C% D6 O' a, e) T4 S% P4 K1 q* x
  4.         const uint8 *str = (const uint8 *)text;
    $ o. }* V/ x; ]( j
  5.         uint16 xs = x;
      n# ?/ e% d: R  w
  6.         while (*str && x < SCREEN_W) {
    " R+ _; q, P* B4 ?$ `7 v* @2 w
  7.                 const uint8 ch = *str++;" N6 w4 D% F) C. f" W$ ?" q5 L% X# [7 U
  8.                 const uint8 *ftch = _font + ch * 8;
    ( I, L4 r- o2 Z8 W' q- @
  9.                 if (outlined) {
    9 q: C+ ^, h! s
  10.                         for (int i = 0; i < 8; ++i) {
    ( K* C  u9 j/ g
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);. ^" N5 N; B  p) |; C
  12.                         }
    ; `8 \+ h5 M; f% F) D
  13.                 }; o. D0 [* G5 H8 J
  14.                 drawChar(x, y, color, ftch);
    . p6 Z$ m# q9 y; v# d6 F8 p1 `
  15.                 x += _charWidth[ch];
    # [' `! g& L! P4 w( a! ]* `
  16.         }
    6 T9 ]& R- d0 [% H% E3 M7 k
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    $ E+ w- ^" H# ?) `! e
  18. }
复制代码

% G: h& O$ |; l( G* x0 v( D: e
$ o# ~$ \" F4 ]9 L7 P2 _单字符显示函数4 A" `# U8 i0 B; g  F# T
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    ' ]3 `7 \& T7 D
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    5 j+ d$ \4 I0 o3 |5 Z
  3.         for (int j = 0; j < 8; ++j) {
    2 p: }  t) e; ]: Q1 @
  4.                 uint8 *p = dstBuf;: T; P% P6 s# A( D1 v* [
  5.                 uint8 c = *chr++;
    4 E: N; n/ e  c' t- k# @7 ^
  6.                 if (c != 0) {
    9 ^% @' B. W  Q& u( s& x
  7.                         for (int i = 0; i < 8; ++i) {1 {( C- q) l0 D$ V# n
  8.                                 if (c & 0x80) {
    . Z) q8 q5 u) S5 j
  9.                                         *p = color;4 u- s7 x4 H. {, a- U3 u- r
  10.                                 }" B- o# ^/ t+ k6 A7 T4 I* z0 \
  11.                                 ++p;+ j* d" h2 [. J
  12.                                 c <<= 1;
    9 x6 T+ _8 R- d9 S; B- q  {
  13.                         }7 q3 _4 |) C0 G4 F) e
  14.                 }. s$ F6 k3 o  ]
  15.                 dstBuf += SCREEN_W;! y* h, O$ Y+ S. U" _6 Q( W$ [
  16.         }+ m2 {8 F" K5 N
  17. }
复制代码
; `8 j' q% U4 A
2 B3 ^0 I! i6 t: I6 d' M" K/ ^

4 e& k. b" S( Q- M6 Y' M- ^; W+ @# d9 g1 ]
& A1 C% }: A; H9 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

高级模式
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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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