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

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

  [复制链接]
查看: 506|回复: 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 编辑
$ B* ]1 S: J9 R, e
  F6 H  ?: \) \( U$ g2 n% u9 Y: Y本游戏使用是高度为8像素的英文字库。
/ Z( ]% X/ k" w3 |& W. f: U, R* ?0 I/ g' z3 |4 d6 B3 p2 H4 D
需要修改的点如下
6 o& \2 l- q5 Y7 r4 x《1》将显示函数中按照单字节移动的指针,变成支持双字节。2 y0 U, o" A( X; c* a! n
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。
& f2 ~9 e/ L. y3 F$ S: f" z5 i     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
1 R3 w5 s8 R; f' O1 a
8 f% R$ T3 ~7 I3 K- i对话显示函数' Z% R# O" s" Y9 W2 P5 W
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。" @0 f( L' U1 y$ @" h
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    % p" H$ Q' d6 N6 ~7 t! x- I
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };9 H' Y2 [% Q3 ?) ]( z
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    1 c$ Y. e! Y) ~; e. @6 M. |
  4.         const uint8 *str = (const uint8 *)text;+ a8 {$ G4 M: p* E) q
  5.         uint16 xs = x;
    3 u9 M% E/ {7 [3 g
  6.         while (*str && x < SCREEN_W) {
    $ V! G7 B8 A( {' S  I9 V
  7.                 const uint8 ch = *str++;
    9 W; T" A; l& i, F; h  g4 _
  8.                 const uint8 *ftch = _font + ch * 8;$ M& E, H2 f4 j- F9 a# ^
  9.                 if (outlined) {) v5 U0 _; U) H0 S1 G) y. Z! X6 d' t
  10.                         for (int i = 0; i < 8; ++i) {
    2 O1 h) D  q6 B0 \! U8 z
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);8 A: j7 v: X# h  P- w; H: _! a6 G, L; O
  12.                         }( s% d: Y% x* g+ {! a; Q
  13.                 }' ]" X5 n6 x! s' f7 o
  14.                 drawChar(x, y, color, ftch);7 t" n9 T3 T6 C( G3 E, a
  15.                 x += _charWidth[ch];
    & [8 M& @$ h3 X8 G- `
  16.         }+ C4 `. b. @. _" p
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);( p+ j. u' y; X* g2 C& ?  r5 t8 W
  18. }
复制代码

9 x' R1 a3 `2 ^: D* R
) I0 R+ x  g( x8 |* W. G. {) }单字符显示函数
. J+ n8 Y; z+ A0 I+ \/ J9 F$ {7 P- Y9 D5 u
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    * j! H2 q6 a5 @
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    ' W# |# U. P/ _7 i# q
  3.         for (int j = 0; j < 8; ++j) {- S/ s. l4 t- l) s- a/ [" G
  4.                 uint8 *p = dstBuf;# f1 k/ H& [( T$ S, U$ t+ X& G
  5.                 uint8 c = *chr++;
    0 B6 ?/ X* _1 [  `+ }. s
  6.                 if (c != 0) {8 D5 l, M/ z% z, k
  7.                         for (int i = 0; i < 8; ++i) {
    4 o3 D: H0 g' E$ h" M/ S
  8.                                 if (c & 0x80) {
    ! `! i$ I; m1 l" g) r" \2 T
  9.                                         *p = color;% B0 T! W1 ?$ o, G3 b  x; o
  10.                                 }) v6 Q7 J2 y) g6 ]3 f6 p  c* l
  11.                                 ++p;: g9 d. H- [, i9 _& g; t5 s# w1 Z
  12.                                 c <<= 1;2 I" o. }7 O) J* W$ S; T
  13.                         }- K: i$ l3 B$ L1 ]6 Y- U; N
  14.                 }
    5 h. F) }5 T; |
  15.                 dstBuf += SCREEN_W;; O& `( w% Y, i
  16.         }, J1 x5 d$ X: d  @* D5 _9 m6 H2 x
  17. }
复制代码
7 {2 A# i$ A9 o+ |- ]9 I
- z7 r* u7 |9 G. w8 {
: @  C0 u% a3 R' j$ n4 h8 Y- O
2 n8 c- F1 L4 B; t$ u

, s1 s$ d. _- {2 |& W' ^
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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