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

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

[复制链接]
查看: 415|回复: 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) `/ \9 O2 U1 Z
! r- d% }' T8 S本游戏使用是高度为8像素的英文字库。
. E8 ]8 c' B& n1 ]$ M& C' [3 U- A0 ~+ w
需要修改的点如下
$ U8 u1 D3 k7 v5 q- r+ P《1》将显示函数中按照单字节移动的指针,变成支持双字节。6 O. V6 P/ o7 z. m5 u5 Z) H
《2》在对话画面中,有时候需要显示4个对话选择项,4个选择项几乎是紧贴着的。
5 ^$ E9 F8 U8 w9 r: @) K     中文字库应该会选用12像素高度的字库,因此4个对话选择项显示的y坐标要做相应的改动。
# k  h. P! V! U; G1 |; U# P8 U# Y0 h# w2 f' Q& U, e
对话显示函数' d/ U$ J" W. T- w8 f2 N
此显示函数,先用8次1像素位移的方法,画上字符串的阴影,最后再画上字符全本身。这个显示方法,和断剑1,2 非常类似。
  H  t. ]; ~+ F% T& j& }3 ?2 H% v0 o
  1. void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
    * A: U' l. f6 v* i' v+ m8 r5 \1 i, ^
  2.         static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
    . Q, ^) F5 S( G6 e2 ]6 o& y+ q
  3.         static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };/ y- P$ F9 L: D1 D
  4.         const uint8 *str = (const uint8 *)text;
    $ b- H. P( m  `5 C
  5.         uint16 xs = x;
    3 [1 Y: ~6 N% X! d
  6.         while (*str && x < SCREEN_W) {, R' B/ F0 E' R7 r; b% s1 e* L6 V
  7.                 const uint8 ch = *str++;
    3 N& f0 {# B0 ]3 u1 o8 w. D) k3 w) L3 M
  8.                 const uint8 *ftch = _font + ch * 8;5 {% N/ C' R) v% Y' F  y! @$ l
  9.                 if (outlined) {
    ' @. n& d) j9 Q1 A1 b) Y$ }5 b0 ]
  10.                         for (int i = 0; i < 8; ++i) {
    : i- H8 N3 S4 _, G+ `
  11.                                 drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);. ]& L1 q: {# r& U) @
  12.                         }( }3 u3 d& C0 R8 P
  13.                 }$ J3 T. z8 x; m. `
  14.                 drawChar(x, y, color, ftch);" M. b+ `0 z3 s9 w& B4 a
  15.                 x += _charWidth[ch];
    7 j# R. c& _5 X  k6 z/ M
  16.         }
    ) F0 K, b7 ^) x) L9 _& T' L# z" Z
  17.         setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);( K! {2 O8 Q- f' g' \
  18. }
复制代码
% `" \7 K2 k. @/ S, F3 G

" [$ }* m- E6 |, e+ O, L; V# ]单字符显示函数
- ~0 g+ H& b% X: O' y4 y* k* P, B
  1. void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {) N! ]. T1 t5 e
  2.         uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
    % j- q3 F0 x& p  A( V# i/ x
  3.         for (int j = 0; j < 8; ++j) {3 R7 c% n9 p( l- y9 G' J/ [
  4.                 uint8 *p = dstBuf;  E+ u# Y' l1 [3 ~. x+ z. W
  5.                 uint8 c = *chr++;
    0 p/ B! v6 S% Y, L: {
  6.                 if (c != 0) {# E9 X% a' }' {% }$ j
  7.                         for (int i = 0; i < 8; ++i) {! d% U* P1 Q# j! F9 m' k
  8.                                 if (c & 0x80) {
    2 \- a6 C  w) c$ H
  9.                                         *p = color;6 u  t; \, I6 s
  10.                                 }$ H+ |* v# G1 k1 ~( Y9 j' C5 p$ B' y* o
  11.                                 ++p;
    ( Q: ^8 n% n% w$ ~7 z9 |1 h7 r
  12.                                 c <<= 1;; N  {! h3 E% Z6 |7 e
  13.                         }" ?; E6 e' h- D! ?' P& Y% ^
  14.                 }% o/ o% J9 A$ C! g3 T% N
  15.                 dstBuf += SCREEN_W;& h5 j6 m/ A* f0 O2 W- p/ Z
  16.         }( ?, {; Z0 c$ ]- k& |/ b2 s7 B
  17. }
复制代码

& l3 Z3 X3 a7 b! Z6 K! ^6 v) z
6 t+ L! n( Z* d9 k3 ]* b. G
. \( A" b4 F* {6 f9 p& A. e  B% p( T0 v. O
4 x5 _- `: J: S. n; N( X+ q. ~! k+ X6 o" K8 Y
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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