做法
三個專案有同一個限制:原版遊戲、手冊、美術和音樂的權利都不在專案手上,也不能改動原版的規則。所以譯文、HD 與配樂都放在原版之外,玩家自備原版,專案只散布自己寫的部分。在這個限制下,三款走了兩條不同的路。
重寫引擎:魔法門 II
《魔法門 II》沒有官方中文版,也沒有公開的引擎原始碼,所以從反組譯開始。DOS 版的 14 個 overlay 全部反組譯,622 個函式符號有可查的索引;壓縮、圖形、字型、文字、地圖、事件腳本、物品、怪物與法術的檔案格式全部解開。之後用 Go 和 Ebitengine 依規格重寫可以跨平台執行的引擎。
原版 DOS 執行檔是唯一的規則裁決者,手冊與攻略只當佐證,因為它們可能描述的是其他平台。每個斷言標上推論等級:已證實、強推論、假設、未知。「已證實」要附得出位址、位元組範圍與可以重跑的實驗。
中文走獨立的高解析點陣層,疊在原版 320×200 的畫面上。中文 24×24 全形、英數字 12×24 半形,用同一個字族,兩層畫在同一張畫布再一起縮放,拉動視窗時文字不會和原版像素錯位。
Amiga、MSX2 與 Mega Drive 三個版本也各自逆向。三個平台都走過同一條冤枉路:先猜編碼參數,猜了幾百組都錯;改讀機器碼後,第一次就對。
執行原版:魔法門 III 與魔法門 IV+V
這兩款都有過中文版,難處在讓舊的中文版在現代電腦上清楚、穩定地執行。做法是用 dosgolem 執行原版 DOS 程式。dosgolem 是專案自寫的 DOS 執行器,執行時攔截遊戲要畫的字和圖,換成高解析的中文字形與 HD 圖,再交給視窗顯示。遊戲規則、事件與存檔都是原版自己的程式碼在跑,磁碟上的遊戲檔案不改。
執行器先用 Go 寫,後來兩款各自改用 Rust 重寫,也都有 Android 版。《魔法門 IV+V》的 Rust 執行器核心只用標準函式庫,桌面視窗用 winit、wgpu 與 egui。
| 項目 | 魔法門 III | 魔法門 IV+V |
|---|---|---|
| 中文基底 | 當年的中文版,保留祕密區的傳送功能,補上祕密區沒譯完的文字 | 智冠中文版,名詞對照英文原版修正 215 列 |
| 字形 | 一般介面用 Noto Sans CJK Medium | Noto Sans CJK Bold,3 倍畫布重畫,筆畫端點削圓 |
| HD | 沿原版版面、人物與動畫重繪 | 線稿上色,涵蓋遊戲內、片頭、結局與過場 |
| 聲音 | 改善音色與混音,加上臺灣國語配音 | 原版驅動程式擷取 52 份曲目,加上立體聲與殘響 |
| 其他語言 | 簡體、英文、日文、韓文 | 簡體 |
換字換圖的時機是個難題。中文字或 HD 圖還沒準備好時,原版的字會先露出幾格再被蓋掉。《魔法門 III》在新畫面還沒準備好時暫留上一張畫面;《魔法門 IV+V》用命令畫布統一管理圖源、遮擋與保存還原。
怎麼確認和原版一致
- 原版當作對照組(oracle)。DOSBox 與 Mega Drive 模擬器 BlastEm 都容器化,可以送鍵、截圖、傾印記憶體、下中斷點。
- 《魔法門 II》的第一人稱畫面拿原版截圖逐像素比對,14 個對照座標裡 13 個完全相同,剩下一個是原版招牌對上重製版的中文。
- 《魔法門 III》的原版與 HD 對照取自同一個凍結的遊戲狀態,繪製前後的 DOS 與機器狀態相同。
- 封包驗收要起真的完整包,從正常冷開機用普通操作截圖,看框裡有沒有字。測試全綠只證明內部自洽,不證明和原版一致。
- 被推翻過的斷言集中記錄,寫明當初憑什麼相信、後來憑什麼推翻。《魔法門 II》的這張表有 87 條。
還沒驗過的部分寫在各頁的「目前狀態」。三款的 Windows 與 macOS 都還沒在真機上驗收,Android 的手機真機也還待驗。