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

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

[复制链接]
查看: 423|回复: 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 编辑 , f0 z: @% i3 ]
9 s+ Y( `' R! H) i% I
本游戏使用是高度为8像素的英文字库。
6 z) K) }  S% u& W' B, m, g8 C' I+ z  r
需要修改的点如下
" m# F4 @# U+ @. D3 I& Q, ?《1》将显示函数中按照单字节移动的指针,变成支持双字节。- a; J1 o: \* v# e7 {- U9 Y
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。
. h& v% x2 i5 Q0 I     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。, R$ o; G4 k/ K. g# N$ _9 G2 M; m1 [

! b; H1 |# b: W" Y7 X. e5 v  j对话显示函数
% h: }3 [, b" p9 V1 z4 S此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
) C3 g9 p$ V1 L/ @; K
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {( P' C0 o$ f( X5 W/ m
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    : ?" }2 m; O9 [# L2 `: j$ o
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };( D4 O8 y1 U' O2 \( R$ C, b
  4.         const uint8 *str = (const uint8 *)text;- h- F  |0 o0 b$ ?. L
  5.         uint16 xs = x;8 [+ }- ~& ]' G% {# \: R% H
  6.         while (*str && x < SCREEN_W) {  S$ a" E* a, u  x' m: r' S5 R
  7.                 const uint8 ch = *str++;. h% g6 `4 h+ c. n1 W
  8.                 const uint8 *ftch = _font + ch * 8;: d1 l2 O1 r( T$ `# s; S: A
  9.                 if (outlined) {& c: j% ~: z  i2 M0 u
  10.                         for (int i = 0; i < 8; ++i) {
    - {6 u7 ]( Q  a7 `, N% Z' E
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
    ( [0 {9 k6 n( r* ?& x4 [% k! n
  12.                         }$ a/ _; J5 W: Y9 M
  13.                 }$ {4 J! b! x# p9 [
  14.                 drawChar(x, y, color, ftch);* V) h9 y! q/ L7 Q7 h% G# l. i
  15.                 x += _charWidth[ch];" L. z4 e6 f2 Y
  16.         }
    4 I$ t. k0 J, r* U; N! I! U
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);) o/ `: @) ?) B# n" X
  18. }
复制代码

$ l$ n/ i( _- e* J3 f5 Y% k3 l" k" V& h0 W" q, n
单字符显示函数3 t" q- H, ]; Z% H4 _+ K, Q
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {% t9 J( k" B  b$ J: C
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;* Q8 k( Q6 j! R  b# r" N& r# `6 {
  3.         for (int j = 0; j < 8; ++j) {
    % Q3 T9 X" k' `, }
  4.                 uint8 *p = dstBuf;
    9 C4 ~- \) M8 S6 Y6 X. W. I( X8 ]
  5.                 uint8 c = *chr++;
    1 L$ ]5 M8 {1 W$ K# w6 F" d7 j
  6.                 if (c != 0) {0 S, L; y. @' J/ m+ K3 s; I6 S
  7.                         for (int i = 0; i < 8; ++i) {& B$ T: J: T  r0 l; C' L
  8.                                 if (c & 0x80) {) s5 z: H' N7 v% u9 G2 b5 O: t
  9.                                         *p = color;! x& U. r( z- I8 [8 o4 z7 C
  10.                                 }- g9 g1 ~8 j3 ~0 t/ x" g; I7 E
  11.                                 ++p;
    ; W, f3 P/ ^6 m; X
  12.                                 c <<= 1;
    ; I. G& S% Y; ~
  13.                         }8 q+ f2 a$ _2 ~5 g/ R% x+ S
  14.                 }7 a, W/ h( |  S' n2 w, ^
  15.                 dstBuf += SCREEN_W;
    4 K3 ]- G( z: ~/ x
  16.         }: t$ i: n( W7 h0 f9 Q
  17. }
复制代码

& t" u, s5 R$ g3 I) O, G5 t0 ^4 v! m- S9 D# y
1 L+ \, B* [, p2 t) i1 H

0 S) [% x& H' `- ^& s% x
4 c0 ^, x3 S4 n- @, v
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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