創世紀繁體中文化

把各平台的美術和音樂找回來

技術篇

《創世紀》移植過很多機器,每一台的美術和音樂都不同,大多數台灣玩家當年沒看過。I、II、III、IV 代都能在遊戲中切換不同平台的畫面。這些資料大多沒有公開文件,要一種一種解開。素材屬原權利人,專案只收工具和方法,不散布檔案。

創世紀一代七個平台版本的世界地圖對照
I 代七個平台的同一張地圖。

先想好怎麼驗收

解開一個未知格式,最難的是判斷解對了沒有。這幾個專案反覆用同一招:先找一個已知答案。

有了答案再看症狀。形狀對、顏色錯,多半是色彩格式的問題。連形狀都是雜訊,就是空間排列的問題。這個判斷能省下很多盲目嘗試。

Apple IIgs:一路逆向到壓縮演算法(I 代)

1994 年的 Apple IIgs 版是畫面最強的版本,但發行商不久後倒閉,版本稀有,圖檔格式也沒有公開文件。解開它的過程:

  1. 磁碟映像是 WOZ 格式。不必自己寫解碼器,MAME 的 floptool 就能轉成 ProDOS 取出檔案。
  2. 解析 GS/OS 的 resource fork,得到 110 個資源,其中 79 個是目標圖檔。
  3. 靜態分析解不開,模擬器卡在滑鼠對話框,截圖的色盤也不精確。三條路都不通。
  4. 反組譯 65816 機器碼,直接在程式裡讀到解壓函式,原來是 LZSS。
  5. 地形圖塊的位置靠和實機截圖做結構比對推出來,最後 52 格全部是 IIgs 的原始像素。

Amiga 和 FM Towns:形狀對、顏色錯(IV 代)

Amiga 版的錯在一行程式。解碼器把每列 8 個位元組當成「每個平面 2 個位元組相鄰」,實際上是兩半交錯:每半 4 個位元組,各平面各佔 1 個。排錯時只有第一個平面生效,水變成紅色。之前暴力嘗試各種平面順序都不對,因為錯的是分組方式。把海水圖塊的位元組印成二進位,用眼睛找規律才看出來。

FM Towns 版的 ULTIMA4.TIL 是 16 位元直色,但試遍 RGB565、RGB555 和 BGR 的各種位元組序,水都不是藍色。文件記錄時這個私有格式還沒解開。手邊剛好有一張已知正確的圖塊圖,專案改從它取格,直接解碼留待日後。有可靠的參考時,不必硬解。

創世紀四代 VGA 版 256 格圖塊表
IV 代 VGA 版的 256 格圖塊,順序固定,可以拿來當錨點。

Sega Master System:卡帶裡沒有現成的圖塊(IV 代)

這一版的卡帶沒有排好的圖塊表,不能靠切圖取得。專案讓模擬器無頭執行,一路走完建角進到世界地圖,傾印顯示記憶體和色盤記憶體,再依畫面的名稱表逐格上色。

FM Towns 的怪脾氣(II 代)

II 代的 FM Towns 素材要連續修正好幾個假設才解得開。

創世紀二代在引擎內使用 FM Towns 版彩色圖塊
FM Towns 彩色圖塊接進 II 代的引擎。

音樂:序列檔要找回晶片才有聲音

這些音樂多半不是錄音,是一串「第幾拍、哪個聲部、用什麼音色、彈哪個音」的指令,要有對應的音源才發得出聲。I 代的原則是不錄模擬器:找到音樂資料、確認格式、理解發聲機制,再用自己寫的合成器算成 ogg。

代平台格式做法
IMSXMCP 序列自寫 FM 合成
IPC-98SCORE 序列,YM2608自寫 FM 合成
IFM TownsEUPHONY 序列自寫 FM 合成
IIIMacQuickTime Music,類似 MIDI解析後轉 MIDI,經 SoundFont 算成 ogg
IVX68000自家 MGD 序列餵進 YM2151 晶片模擬
IVAmiga私有序列已解開旋律與低音,保真度還在校正
VFM Towns15 首 EUPHONY 序列離線轉成 ogg
VUpgrade 包16 首 XMI轉 MIDI,再經 Roland MT-32 算成 ogg

考證也會得出「沒有」的結論。Atari 版和 DOS 版的《創世紀 I》原版沒有地圖音樂;Apple IIgs 版的 18 個音訊資源都只有零點幾秒到兩秒多,是音效。這些結論一樣要有反組譯或檔案分析的證據。

在沒有喇叭的容器裡驗收聲音

建置全在 Docker 內,聽不到解出來的是音效還是雜訊。IV 代的做法是把波形畫成圖,用眼睛驗收:馬蹄聲看得到規律的爆發,數得出蹄拍;嗶聲是教科書般的方波。這些形狀湊不出來,看到了就知道取樣率、格式和起點都對。

V 代還用了旋律比對。MT-32 那批音樂的曲號沒有對照表,就比對音高差分的最長共同子串,把曲子對回場景。

來源:u1-cht Apple IIgs 逆向紀錄、u1-cht 音樂還原、u2-cht 工程文件、u3-cht QuickTime Music 轉檔、u4-cht 圖塊解碼、u4-cht Sega 圖塊、u4-cht X68000 音樂、u4-cht 音效抽取、u5-cht README。