創世紀繁體中文化

中文字怎麼畫上去

技術篇

原版的字是 8×8 像素,畫在 320×200 的畫面上。英文夠用,中文放不下。解法是讓遊戲美術和中文字用不同的解析度:美術放大兩倍以上,中文直接畫在放大後的畫面。

為什麼不能把中文縮小

I 代實際試過:把 12 像素的中文畫在 320×200 裡,再整張放大三倍。結果筆畫糊掉,行距還重疊,完全讀不了。像素畫放大後看起來是方塊,中文字放大後還是只有 12 格的資訊量,再放大也不會多出筆畫。

所以要反過來。內部畫布拉到 640×400,正好是原版的兩倍。底圖用最近鄰放大(每個像素直接變成 2×2 的方塊),維持銳利。中文在 640×400 的座標上畫,一個字就有 16 格的資訊量。

六代的選擇

代內部畫布字型類型
I640×400Noto Serif CJK TC,16 像素TrueType,抗鋸齒
II320×200 的 N 倍,建議 960×600文泉驛正黑,24×24TrueType
III640×480Noto Sans CJKTrueType,透過 SDL_ttf
IV640×400Noto Sans CJK TC,可換宋體、楷體灰階字庫,設定畫面另用 SDF 紋理字
V640×400倚天 3.53 的 16×15 點陣點陣,手工調整過
VI640×400文泉驛 Zen Hei Sharp 16×16內嵌點陣,Big5 排列

TrueType 或點陣字

TrueType 字型來源乾淨、可以任意尺寸,III 代就靠它一次換掉全遊戲的文字。

V 代選了另一條路:1990 年代 DOS 中文遊戲用的倚天字型。它的 16×15 點陣是為這個尺寸手工調的,TrueType 縮到這麼小會糊,筆畫比例也不對。代價是字庫衍生自 1993 年的商業字型,不能隨專案散布,要玩家自備。另外還要處理幾個細節:

創世紀五代武具店,訊息欄用倚天點陣字
V 代的倚天 16×15 點陣字。

VI 代:一個「杜」字換來的改版

VI 代原本用 12×12 點陣。有朋友把「杜普雷」看成「壯普雷」,因為「木」被擠成一條連續橫筆。問題出在格子不夠,調字型救不回來。

v2.0 參考 1991 年 PC-98 日文版的做法,把畫面拆成三層:遊戲照舊畫在 320×200,放大兩倍後,再疊一層 640×400 的中文。遊戲既有的繪圖程式一行都不用改。

舊版 12×12 點陣的隊員名字
v1.5,12×12。
新版 16×16 點陣的隊員名字
v2.0,16×16。

幾個經典亂碼

下面這些錯誤看起來都像「字型壞了」,根因都在編碼。

Big5 第二個位元組撞到反斜線(VI 代)

「許、功、年、橋」等 88 個常用字的第二個位元組是 0x5C,也就是 \。文字檔的載入程式把它當跳脫字元,後面整段錯位。最後改用帶長度前綴的二進位格式。

英文解碼程式砍掉中文高位元(III 代)

底部訊息區的中文全變成控制碼。上游有一行 gString[pos] & 0x7F,只留低七位,對英文沒影響,對 UTF-8 中文就是破壞。

16 位元字串被當 UTF-8 讀(IV 代)

商店對白整段亂碼夾空白。腳本引擎把含中文的字串存成 UCS2,輸出時卻當 UTF-8 讀,高位的 0x00 還把字串截斷。修法是依字串的實際編碼逐字轉換。

斷行靠空格(VI 代)

引擎用空格找斷點,中文沒有空格,整句變成一個單字,直接超出面板。修法是把每個中文字當成獨立的單字。

量的和畫的不一致(V 代)

計算寬度和實際繪製只要判斷條件不同,算出來的斷行就和畫面不符,症狀卻很像譯文太長。V 代把度量和斷行抽成獨立模組,繪圖只用它的結果。

玩家要輸入的字不能翻(IV、V 代)

咒語、Yes、No 和對話關鍵字會拿來和玩家打的字比對。翻成中文就再也比對不到,所以這些字維持英文,只換顯示的部分。

來源:u1-cht 中文化筆記、u2-cht 工程文件、u3-cht 字元修正、u4-cht 商店文字、u5-cht 中文化筆記、u6-cht v2.0 發行說明。