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

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

[复制链接]
查看: 287|回复: 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 编辑
) a  u1 m: E& i$ p( F
- C( j- Y$ p: P( W* r! s, q/ R7 m本游戏使用是高度为8像素的英文字库。
- x$ L" J( k, s3 O
! L( ~$ N  z: L' `5 T" i需要修改的点如下4 {; {' f6 K; q5 t4 W0 [# X5 @
《1》将显示函数中按照单字节移动的指针,变成支持双字节。  w5 P& f% j  u& d6 J
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。9 ]4 R/ p2 h% W: b: {
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
" p) |9 W: L4 [) G2 a
2 b( _6 U7 C' t- J1 i8 Z" w对话显示函数
7 i5 D9 ~! x7 d5 \; ]此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
4 ^4 Y" {4 u0 \! Y, c, Z! M
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {5 d0 H: D: I' L) C
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };2 g" E1 M  t& Q7 t: E1 D" A* m/ i
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
      i4 o: w, d; F' B
  4.         const uint8 *str = (const uint8 *)text;! F5 D. ^0 M$ i' z; v0 j
  5.         uint16 xs = x;+ f9 Y' H0 [2 S% F' @9 U
  6.         while (*str && x < SCREEN_W) {: m7 K# y2 n5 `+ Q: T5 Q+ m6 `
  7.                 const uint8 ch = *str++;- T$ M* j" S. M5 n
  8.                 const uint8 *ftch = _font + ch * 8;
    . o+ j3 Q% P3 i+ h
  9.                 if (outlined) {. u% S* M; X' c, T9 K! T' T* p+ M- K
  10.                         for (int i = 0; i < 8; ++i) {
    ! c' y# |0 s; K% ?* b
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    ) X* h. n/ v6 k9 _
  12.                         }
    - y0 i# P& W* ~( d
  13.                 }
    6 ]1 P$ U# X" `# d
  14.                 drawChar(x, y, color, ftch);: \& U7 t/ v( n, T( B4 i
  15.                 x += _charWidth[ch];( M# x6 ?5 ~9 m
  16.         }
    ; E$ Z% g2 P, T- z5 Y2 l
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    0 [1 Y6 k& m. K4 Q
  18. }
复制代码

9 |& b' r/ Z& K  t6 y7 A- L" h% G& u) N) c; e# T
单字符显示函数. r7 W4 F  U; w: }% B
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    3 Z, F. A! n" T2 J% m/ g
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;" b9 P. }0 w9 v: _
  3.         for (int j = 0; j < 8; ++j) {7 u& k" l. |% {5 Y) G( V" z
  4.                 uint8 *p = dstBuf;* p6 Q2 F) o* l2 F$ w
  5.                 uint8 c = *chr++;
      s3 _+ u1 o0 f) _- x( O
  6.                 if (c != 0) {
    4 {: i' E( P' L7 n* u# G0 h$ m9 p
  7.                         for (int i = 0; i < 8; ++i) {
    # m9 Y% n7 L& r5 z& T
  8.                                 if (c & 0x80) {0 q& g3 u- P5 n/ L6 o
  9.                                         *p = color;
    ' [7 N4 @! K$ J0 m
  10.                                 }
    7 U8 S& H. `; e: i, T2 X
  11.                                 ++p;8 R! _' E! C: K5 m' E+ \+ U
  12.                                 c <<= 1;
    1 u* k5 H# f  P+ K5 x1 \) D. Z% s
  13.                         }
    ; C9 ~9 R! D( D4 ~# ^
  14.                 }
    % H3 s' ?- m! P0 {. w* q
  15.                 dstBuf += SCREEN_W;
    * c! k0 U8 N/ h1 B8 b
  16.         }
    ; B: @0 X. N! ]" I
  17. }
复制代码

" S0 L' ?- i4 n: B  F
  n8 Z' B; L/ n6 w; ~6 z% R" c* @& u  N5 K

, U" n$ c/ r' ?& }! W8 Y7 f0 t* U
3 ?5 n% K) _" \+ M) g6 G
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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