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

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

[复制链接]
查看: 385|回复: 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 编辑
+ q7 s4 T* r  k4 o  G- s: U
% H8 \0 l3 n/ K- O# t& E- j本游戏使用是高度为8像素的英文字库。1 V+ Z( w- _- ~  ^! }, i
. r4 i6 \9 A! c0 B
需要修改的点如下9 A7 V/ [) G* ]! T* D& o
《1》将显示函数中按照单字节移动的指针,变成支持双字节。1 S1 E0 J' {, B4 ~, `' [
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。( S0 p6 Y# a  Q2 \4 k/ g
     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。* X, M7 ]* R/ H" f8 }1 Y8 D
2 x: P, m* v0 n; |4 i, z# ?
对话显示函数- _' G* I( H& |" y  W
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。* j0 _. X- C% M& [$ ?* O
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    ' g; a+ ~& H1 N+ E
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };4 N' B3 H. W* n2 b
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
    ; A& X' u. n$ |" ?3 S9 G2 U2 x
  4.         const uint8 *str = (const uint8 *)text;7 q- H3 L+ e3 C# v; e+ N
  5.         uint16 xs = x;( w+ q$ }/ E* T# q- d5 a- ^: v
  6.         while (*str && x < SCREEN_W) {: ~, @& r+ n9 m) l0 H5 p
  7.                 const uint8 ch = *str++;  B  |( H! K: k' m1 D
  8.                 const uint8 *ftch = _font + ch * 8;8 U& }- o3 v& G$ u" |! @: u
  9.                 if (outlined) {* Q. j. f6 P% t$ N6 I2 P
  10.                         for (int i = 0; i < 8; ++i) {
    9 v$ S' D) ~* R/ v. f0 R
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);8 ^3 Y. ]- T7 w- u8 X+ M1 {
  12.                         }
    - e( h+ D# \0 j* B) ^
  13.                 }
    3 O2 w6 Y+ P9 m2 E  Z4 i' K6 p
  14.                 drawChar(x, y, color, ftch);
    6 }, c* P0 E$ [6 Y+ `' t, }
  15.                 x += _charWidth[ch];
      Z8 j1 l2 j9 F. H# b* p, G! [
  16.         }
    ' [) }" k& O+ C$ a, ^' C
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
    - Y7 g2 n0 T. c" \
  18. }
复制代码

7 H" m6 v: [  p' s4 X
' S. v, g, A8 y+ k; r+ }7 y( Z. r单字符显示函数! O' K; F! K$ f1 h9 E
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
    4 E0 o4 h$ n( t# S. x
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;( ^9 x# C1 P+ ~' Z
  3.         for (int j = 0; j < 8; ++j) {# z3 h5 w" w, P" k
  4.                 uint8 *p = dstBuf;
    ! {( u, c2 E& i% q6 g
  5.                 uint8 c = *chr++;
    - a/ P# O% e$ u' [) D6 I( W
  6.                 if (c != 0) {
    . _2 D3 w5 d4 l2 b9 T$ _
  7.                         for (int i = 0; i < 8; ++i) {
    9 }9 ~8 I: D! f) w6 j' t" J5 w' m
  8.                                 if (c & 0x80) {
    : H  i, Y2 N: A& V# O) G, K
  9.                                         *p = color;
    % u! l* }& E9 d
  10.                                 }: E; t6 J& Y# e, G- V" R) {  c
  11.                                 ++p;$ W1 x8 w. g! \3 e: D' ?$ p
  12.                                 c <<= 1;
    $ ~- ~' L5 X4 m; q9 w4 w4 A
  13.                         }/ a( W3 ^( @; C- t6 H
  14.                 }
    ( Q1 `3 |+ T( w" t: t$ T
  15.                 dstBuf += SCREEN_W;
    1 r+ ?* N3 s7 _6 x- C( e3 z( o% f% E
  16.         }
    ) w6 S! B- a5 n
  17. }
复制代码

1 @/ S# W7 O; D  S' G" N$ b  G3 v: Z( W

# }: N' ]# V4 W7 C2 b+ ]
7 h# t% }% s4 U4 [' ^# I* m, B/ z: W! Q  N6 P9 R; B% o
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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