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

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

  [复制链接]
查看: 507|回复: 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 编辑 + P) b# M0 ^, p' R% G
3 V7 C! r$ g3 p2 ]7 N2 K! B6 i
本游戏使用是高度为8像素的英文字库。0 H& D% B1 }. z5 f- S+ s
' G" D" N8 \: a9 n7 B% E
需要修改的点如下
, }; Q/ w/ d! w《1》将显示函数中按照单字节移动的指针,变成支持双字节。8 X1 l2 V& l- \/ ^0 P4 `' E
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。- t! G6 m8 H2 P8 \" Y
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。) p! v. X# ?3 M. c) c* v
4 }$ U6 b+ u; F2 m7 k5 F: D
对话显示函数
# D% N! P4 U* n0 a. @& }5 |此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。1 P! k  S+ {+ Z) o3 r' A3 u
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {: Q1 |2 J' W2 B0 Y0 u
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };% }7 o; D6 j% e8 z8 b. @4 {
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    ) b+ l: d6 Z5 p. r
  4.         const uint8 *str = (const uint8 *)text;: p. t, t) M  f1 Q9 e
  5.         uint16 xs = x;  \6 B/ n4 N+ |8 h9 j9 F; @* ^2 \9 {1 X
  6.         while (*str && x < SCREEN_W) {! A9 j# Q1 {- [) K6 e& A
  7.                 const uint8 ch = *str++;" y. y: y4 \  K- [8 G
  8.                 const uint8 *ftch = _font + ch * 8;
    4 W2 I1 }+ o( L" y* p7 T7 `0 ^$ e
  9.                 if (outlined) {
    " D/ X7 a; j* d: m. a6 A
  10.                         for (int i = 0; i < 8; ++i) {) ?4 p) ?: R6 e1 I9 D! l' B5 J( F
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    3 q% D1 t2 D, r5 p4 N4 B  I8 o" x+ p/ c
  12.                         }
    2 p6 f; I  s; |1 v5 C
  13.                 }
    ( W1 o% ^+ ~! p
  14.                 drawChar(x, y, color, ftch);
    ( [" n* g$ x7 P! ?! Z# ^' n- a
  15.                 x += _charWidth[ch];* o4 \$ _  F, o( Z  Q: ]
  16.         }
    ( I* E4 }# {" `* N
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    " V7 n2 p% J3 d
  18. }
复制代码
( h! i4 c) q/ n

6 I" ]6 y" _# g) ]8 {/ {/ h& Y单字符显示函数
, _" I# E0 }0 `
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    * F6 z; J* S( m& t- r6 `
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;9 S+ f% k. @" S8 T% F6 I
  3.         for (int j = 0; j < 8; ++j) {
    5 x& l- n7 N9 b; d% U2 T6 L) k9 v
  4.                 uint8 *p = dstBuf;4 A/ d4 v$ ~9 D: J# l9 a# Z
  5.                 uint8 c = *chr++;8 v7 s7 K8 i3 o. R* l4 F
  6.                 if (c != 0) {& z0 ]% B  c4 R/ M
  7.                         for (int i = 0; i < 8; ++i) {
    / c, b8 m' j, O. N/ I+ k3 h, q
  8.                                 if (c & 0x80) {
    9 i5 d& e& W' H) A& ]( p0 z4 A7 ?
  9.                                         *p = color;
    5 [1 R! x! ?+ l
  10.                                 }
    & r+ i2 l0 V+ B6 D) I: [- W4 e" y) G
  11.                                 ++p;5 L* O# k1 f* a( @
  12.                                 c <<= 1;! B  @, R9 M% m) \: n/ `& k& l# h3 ?, y
  13.                         }# T4 ~' V6 v8 x* j  L: L4 p5 `
  14.                 }( d8 b0 l0 ^, |5 J) U% v3 f+ _
  15.                 dstBuf += SCREEN_W;4 I: t, x7 F. ?0 Q$ F2 ?
  16.         }
    3 q" \- y7 S9 A6 E2 v; m  s
  17. }
复制代码
! L$ B/ b' }# v+ ^; A) w

% F2 d- _. P) w( A# u! y: C3 m/ g: K8 K! ]+ E+ j' N7 F

* D) A* v* x+ }% v2 O4 i2 Z7 q/ g7 V) z2 S2 X
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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