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

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

  [复制链接]
查看: 501|回复: 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 编辑
. V3 F/ Z, a( a, w" y2 U4 M3 E! r* `. W' D' a! D/ M5 A
本游戏使用是高度为8像素的英文字库。' Y" \' D5 a' C  d8 ~8 E

5 o0 |- t6 s, @# [: y/ ]需要修改的点如下) p1 {/ M6 b' _8 c& |6 }: A
《1》将显示函数中按照单字节移动的指针,变成支持双字节。5 \+ y9 S& B. {3 b
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。
* p' c2 b3 J/ b8 v, p  D* v     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
! @5 ]0 V& ~4 ?0 A; h% J/ m! `, e0 L( y( r' E5 F  H
对话显示函数
, \, y. F9 Y( T+ u5 h此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。% p, P5 j! G0 h! |$ B* f
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {0 d( r% }1 |1 |
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    $ ~- F5 O4 y4 ~+ N2 }# w* j* K- a
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    - Q' S+ [0 G: m: Q) _) w1 n# l
  4.         const uint8 *str = (const uint8 *)text;8 X2 |1 `) o/ M: x2 `
  5.         uint16 xs = x;
    + x! p4 m/ `- \
  6.         while (*str && x < SCREEN_W) {
    ' o( e) F9 `, M" m! H8 v2 `
  7.                 const uint8 ch = *str++;
    + J8 R! E; f+ z. e  t& ^3 A2 F
  8.                 const uint8 *ftch = _font + ch * 8;7 ~; b0 T" ^$ s, n# N* p
  9.                 if (outlined) {* X1 \) U' `6 h* F7 ?+ p
  10.                         for (int i = 0; i < 8; ++i) {0 ?) o4 d6 O) M" [" n
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    + i! b" [  ~) p9 B" M+ t
  12.                         }
    7 P* Q# f* N2 P0 ~" s
  13.                 }
    * m1 B! M/ r2 ^' e. h+ i
  14.                 drawChar(x, y, color, ftch);4 u' k% N* [3 y
  15.                 x += _charWidth[ch];+ m  W' w6 F# ]8 y$ C7 ~" N( y
  16.         }" N, Q: B/ }5 ], P# ~
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);' [. a. a  S0 z* \3 \
  18. }
复制代码
) ~7 j+ U- U1 T# o) L
' e8 Z# L) d! Z& x6 ?
单字符显示函数
% Q, R1 N. P' {& y, F
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {4 j% P0 z; t; P0 H; i% U* E8 x) k
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    ! N. l) e- }5 _3 u6 R( i3 }% I2 t
  3.         for (int j = 0; j < 8; ++j) {
    5 {( w# v0 ~9 E& b" Z. a) [
  4.                 uint8 *p = dstBuf;
    2 O" w8 _, _$ V/ `1 E' j
  5.                 uint8 c = *chr++;; m0 i& Z* s3 {
  6.                 if (c != 0) {
    3 v5 f6 j/ m& j: A6 H
  7.                         for (int i = 0; i < 8; ++i) {1 s/ g! p* {$ k. E
  8.                                 if (c & 0x80) {
    1 `( C- _" ?9 B& r# Q
  9.                                         *p = color;
    ) O" C/ Y3 ^) |# E; b* U2 B+ X
  10.                                 }
    : W8 `$ S& s9 V, e6 |2 E
  11.                                 ++p;
    + V/ ]  j% p# B
  12.                                 c <<= 1;
    # l/ t+ {4 T9 j9 j
  13.                         }
      m9 z+ K) x9 d; K# k1 K; \
  14.                 }6 b  ~, I6 e- j$ q
  15.                 dstBuf += SCREEN_W;7 Z7 D5 ]: R6 W% m6 g
  16.         }4 a# {5 D! \6 {( S
  17. }
复制代码
5 k1 Y% |% D" t' H! x
- t1 R" C! B7 q. T% E
9 i) J7 R9 N9 u. b* h5 w
) c, z# D9 t' V" R5 c5 H' G

& f9 N& m- V, U
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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