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

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

[复制链接]
查看: 299|回复: 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 编辑 : d3 g- E- A7 n, y2 g* T
8 N4 a/ \9 p8 T: |4 I* N0 _
本游戏使用是高度为8像素的英文字库。. G: X* v$ @7 A' L
' S% _, q9 j0 N3 }2 t  W# c
需要修改的点如下: W# }& k1 H! o0 D8 q' P: f& n0 E3 F' H
《1》将显示函数中按照单字节移动的指针,变成支持双字节。
8 u8 M& s! s# @0 x《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。9 n- {8 t7 x9 E8 R+ i
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
, r: {6 Z2 T2 x/ a. H* F/ V& L2 q% m# U
对话显示函数# M: H( P& _  I4 V' G
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
$ _+ {* i4 S& z* Y1 V
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    ' m' S  r7 c/ @7 c$ \  m$ P8 l
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    / L5 }! |3 }# z" o1 u" X
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };! D8 _; [9 w$ |
  4.         const uint8 *str = (const uint8 *)text;
    6 g+ o* ^0 z' i: z, \
  5.         uint16 xs = x;+ j- U  B- C7 r% |+ }
  6.         while (*str && x < SCREEN_W) {5 L7 U+ S, T* }/ N! r
  7.                 const uint8 ch = *str++;
      w' a# o0 b  ]
  8.                 const uint8 *ftch = _font + ch * 8;- F2 D6 F% I4 ]0 S& n
  9.                 if (outlined) {- N; [' z. A0 Q0 s) ?6 m, B4 ^
  10.                         for (int i = 0; i < 8; ++i) {' T2 g& `& N. h; L2 F
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    / [) ]! [! p& K( ^4 S  f
  12.                         }. y- g( x$ G" @+ X* u
  13.                 }
    * `2 R6 Z5 F5 R, z
  14.                 drawChar(x, y, color, ftch);
    ( {. S/ r5 q' D. }( D0 ]  ]
  15.                 x += _charWidth[ch];
    ! J3 q8 k/ b8 ]
  16.         }
    * k5 B. H$ ~. p% @
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);  P6 v# g- c: e  F
  18. }
复制代码
- z8 @7 R  p; F" p5 V; J$ C
" f# [& H, `, x$ S, b9 w
单字符显示函数
' X. C. Y. L0 T% L
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    9 W+ T& b4 m9 C' |; S+ m
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;  ~8 L8 w$ T: U% s% l7 w
  3.         for (int j = 0; j < 8; ++j) {( B( G, L8 ]0 B' q+ E6 O' u
  4.                 uint8 *p = dstBuf;& f/ i/ T( U5 G0 e1 D
  5.                 uint8 c = *chr++;
    + d2 F7 \  h+ t; b1 u8 X. x
  6.                 if (c != 0) {% y4 a4 y, w$ W/ _8 O# h0 u
  7.                         for (int i = 0; i < 8; ++i) {
    ' _) c3 `( J9 _( K9 h0 w
  8.                                 if (c & 0x80) {6 S# }9 t! Q4 j
  9.                                         *p = color;8 s/ y8 j" G0 t% G% x/ o
  10.                                 }
    * {0 R2 _8 `$ C* v/ I2 \' f
  11.                                 ++p;" W5 O, L# n) ~
  12.                                 c <<= 1;5 t$ R: N# {  \* K
  13.                         }
    / P$ }/ @& d: W1 e1 y, ~
  14.                 }# x2 z5 a6 K* L7 R. v
  15.                 dstBuf += SCREEN_W;
    ' v/ }6 ?4 v$ p8 v
  16.         }
    7 \- t8 @$ t9 u, A+ v" l
  17. }
复制代码

( v; K2 ^6 i! _2 ~5 L
0 E! ?2 ]. ?; _+ W0 J1 H1 x7 ], G" ?  z. T- @4 r7 Z. p

% h! N, A  t# {7 c& ^: I- h, S7 \; |* f) O! m) ^4 J% j
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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