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

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

[复制链接]
查看: 320|回复: 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 编辑 : @7 U9 p* M4 I% {+ Z) P

! z# J& s. U' {" R3 k# u7 a6 A本游戏使用是高度为8像素的英文字库。
4 p) S8 i3 }3 t1 K/ y. O1 ~5 b" N4 j9 }7 W3 v
需要修改的点如下9 H/ ]* a% Y) ~- B; z" u, T' `
《1》将显示函数中按照单字节移动的指针,变成支持双字节。
- K" [; c* }0 Y- s& F% L1 X《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。' G: b1 |) J/ Z/ d( o
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
+ A& b! F3 ^( m. o9 m' m4 F$ B9 F% c0 o9 N
对话显示函数
) a6 m! j8 Y0 ^% r( e0 s. e+ A: h此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
6 n3 j$ }/ G# e& T! R
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {! K, J+ q1 t/ e1 q2 q4 G9 j! ^0 b
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };1 z. E1 t" W0 S6 V
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    . z0 a  C  L) |# y
  4.         const uint8 *str = (const uint8 *)text;5 e, ]* Z. Y3 h5 g
  5.         uint16 xs = x;  _  S. l* X/ y
  6.         while (*str && x < SCREEN_W) {" S" ?+ k: p2 r4 [/ b) u
  7.                 const uint8 ch = *str++;: m; p  [( N1 G  J0 K6 d$ H
  8.                 const uint8 *ftch = _font + ch * 8;$ b0 E+ G! P" P* s' s5 t  }
  9.                 if (outlined) {
    # O; k& J% z' U( d3 B% x/ t
  10.                         for (int i = 0; i < 8; ++i) {6 x" ?2 t4 U8 W5 M' e% Q
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);- b0 Y9 X4 T: @/ A
  12.                         }
    ! z  n" d* X4 F) w8 N: n9 l/ {( v
  13.                 }6 L$ `4 M8 N! d: c- S- h
  14.                 drawChar(x, y, color, ftch);
    9 m! e+ N* J4 j: }7 h( v0 T; K
  15.                 x += _charWidth[ch];
    ' l# z% w. V" ?7 a2 H6 w2 {% e2 }
  16.         }
    . t9 Z5 @: D$ x2 w/ C1 |
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);* p- z5 V5 W: U) P$ }6 `  w
  18. }
复制代码
0 k$ S5 L6 U) ^& |0 N8 v
% S$ X- I& Z  V9 n$ B4 ~* p  J+ K+ y
单字符显示函数
$ \, A2 v2 m) r8 |6 }$ Q& Z
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {* T7 J! c/ d7 T& J
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;$ Y, l* Y2 R  q+ o% h: r; K! Z
  3.         for (int j = 0; j < 8; ++j) {7 X3 H7 a. ]& P. v' u
  4.                 uint8 *p = dstBuf;- u, x6 f7 X6 V, f. R
  5.                 uint8 c = *chr++;- @% G" j3 f2 \- q5 }
  6.                 if (c != 0) {8 @9 J8 E5 L+ E% E( u7 e
  7.                         for (int i = 0; i < 8; ++i) {
    8 g) j1 S! q1 m: ?" |
  8.                                 if (c & 0x80) {) H' O( V' L! x8 T3 o2 N
  9.                                         *p = color;' h7 b" N$ r. @+ F6 ?  n
  10.                                 }
    : s# v5 l5 y$ C6 T5 Q
  11.                                 ++p;
    / _  ~7 |; w: M2 s
  12.                                 c <<= 1;
    $ T0 G7 D$ f: L( ^* j
  13.                         }
    " p" Y% j5 V6 N( a! L
  14.                 }
    & {/ G8 g! X$ L. l. }
  15.                 dstBuf += SCREEN_W;/ C9 }. U6 o( P( Z
  16.         }
    1 f0 M3 l, h6 Y
  17. }
复制代码

/ S; _" }2 w" E, V! B
; G8 h5 ]- L* g3 u, S6 c5 U# D/ t. g5 b! {$ j
1 r% l! V' r4 l
* M$ C4 |% L: n
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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