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

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

  [复制链接]
查看: 646|回复: 1
打印 上一主题 下一主题

[其他] 【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 编辑
+ J  e' a3 X5 s
9 M' Z' B2 S* s1 o8 F本游戏使用是高度为8像素的英文字库。
' ?- ~& }6 ?2 b* Z% S8 `
' O" x& K9 {+ K* [5 `% x4 T0 J, D需要修改的点如下
3 `; t  }; U( A* |- s8 C5 R《1》将显示函数中按照单字节移动的指针,变成支持双字节。
* r  T' d( ~, l% T$ A( Z" c《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。. i9 S( E- h) w/ W4 x
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
: k' d# d8 Q& q5 [% Y6 b! E( i) T( z6 [) W, l. b0 V
对话显示函数
; M2 }& T3 I1 V: Q此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。5 W% x" r8 S! {
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {' l9 }. k! y2 ~7 Z0 r
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    % A) l' ?7 c% N4 h4 E
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };3 p0 B. `* a0 t! L
  4.         const uint8 *str = (const uint8 *)text;/ [& ~$ z7 i6 W/ f5 J7 e
  5.         uint16 xs = x;
    : c- B1 e3 a6 u! s5 Q) [: z
  6.         while (*str && x < SCREEN_W) {
    8 p: I' U0 L) l# V/ R4 g% q9 R
  7.                 const uint8 ch = *str++;
    * Q: [  i% A$ H. G2 c$ L
  8.                 const uint8 *ftch = _font + ch * 8;5 m' m7 x3 _( V. H2 u. e
  9.                 if (outlined) {
    7 m% F4 n+ k( _3 n
  10.                         for (int i = 0; i < 8; ++i) {/ v, j; P, d6 P! u5 d: f
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    - E' ~6 x& ^) u; b1 i
  12.                         }/ A/ f5 K7 z7 n6 f6 ]. y
  13.                 }
    $ Y4 @% H  W' K
  14.                 drawChar(x, y, color, ftch);
    " i. f) M! b. t/ Y! j
  15.                 x += _charWidth[ch];
    3 O5 r# \7 y) [) B
  16.         }
      P: t) C  e1 M: L
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    1 |! V$ Y* B0 h% _
  18. }
复制代码

% n* v6 U  O- V7 n5 Q$ I3 q4 h8 f
- x! I4 m+ `0 Z9 n" U: o单字符显示函数8 }  f% a1 a1 x( u9 y8 ^
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    # I- I, Q6 p. p% V9 v' Z
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;( V' y  D  \4 `5 P9 z3 q+ a, p
  3.         for (int j = 0; j < 8; ++j) {6 Q! a$ m. T* n( K4 T; |9 W
  4.                 uint8 *p = dstBuf;0 c+ B$ I1 ?& g  V6 T. ?
  5.                 uint8 c = *chr++;) u. F( h4 Z8 s
  6.                 if (c != 0) {2 _3 C# c9 I. ~
  7.                         for (int i = 0; i < 8; ++i) {
    $ ]/ J6 A, O( _4 }8 H9 ~
  8.                                 if (c & 0x80) {) B$ I! p0 N' u
  9.                                         *p = color;) G; k. Z+ s: f1 i) h2 S6 ^: {
  10.                                 }
    / u) k1 @/ }& j( o
  11.                                 ++p;3 O# y) |' @7 E& W/ D7 b" I
  12.                                 c <<= 1;, T* L& U' H* g5 \
  13.                         }
    & l7 N. g: x# y4 N0 S
  14.                 }
    - z3 V8 y8 s4 J4 n  G
  15.                 dstBuf += SCREEN_W;
    ; V# C: j$ r2 N5 |+ g9 K% A
  16.         }8 B5 |8 P  L" @9 F9 h3 p! I
  17. }
复制代码

5 a9 E9 n! p& r% D/ O1 j+ _: P: b" C! D- J8 B$ S$ a0 \4 `

! `& z8 T; N$ F2 |4 d/ }- c
& F4 v% O  c2 `4 D$ i# ^" l
9 r, r) Y& e+ ]* r" S5 y% v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2025-4-13 11:28 | 只看该作者
学习学习一下
回复 支持 反对

使用道具 举报

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

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