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

先想好怎麼驗收
解開一個未知格式,最難的是判斷解對了沒有。這幾個專案反覆用同一招:先找一個已知答案。
- IV 代拿圖塊當錨點。256 格的順序是固定的,第 0 格是海,應該以藍色為主;第 4 格是草,應該是綠色。
- V 代的 DOS 圖塊有壓縮,FM Towns 版有未壓縮的同一份資料,可以逐位元組對答案。
- I 代的 Apple IIgs 版沒有對照檔,就拿實機截圖反推圖塊位置。
有了答案再看症狀。形狀對、顏色錯,多半是色彩格式的問題。連形狀都是雜訊,就是空間排列的問題。這個判斷能省下很多盲目嘗試。
Apple IIgs:一路逆向到壓縮演算法(I 代)
1994 年的 Apple IIgs 版是畫面最強的版本,但發行商不久後倒閉,版本稀有,圖檔格式也沒有公開文件。解開它的過程:
- 磁碟映像是 WOZ 格式。不必自己寫解碼器,MAME 的
floptool就能轉成 ProDOS 取出檔案。 - 解析 GS/OS 的 resource fork,得到 110 個資源,其中 79 個是目標圖檔。
- 靜態分析解不開,模擬器卡在滑鼠對話框,截圖的色盤也不精確。三條路都不通。
- 反組譯 65816 機器碼,直接在程式裡讀到解壓函式,原來是 LZSS。
- 地形圖塊的位置靠和實機截圖做結構比對推出來,最後 52 格全部是 IIgs 的原始像素。
Amiga 和 FM Towns:形狀對、顏色錯(IV 代)
Amiga 版的錯在一行程式。解碼器把每列 8 個位元組當成「每個平面 2 個位元組相鄰」,實際上是兩半交錯:每半 4 個位元組,各平面各佔 1 個。排錯時只有第一個平面生效,水變成紅色。之前暴力嘗試各種平面順序都不對,因為錯的是分組方式。把海水圖塊的位元組印成二進位,用眼睛找規律才看出來。
FM Towns 版的 ULTIMA4.TIL 是 16 位元直色,但試遍 RGB565、RGB555 和 BGR 的各種位元組序,水都不是藍色。文件記錄時這個私有格式還沒解開。手邊剛好有一張已知正確的圖塊圖,專案改從它取格,直接解碼留待日後。有可靠的參考時,不必硬解。

Sega Master System:卡帶裡沒有現成的圖塊(IV 代)
這一版的卡帶沒有排好的圖塊表,不能靠切圖取得。專案讓模擬器無頭執行,一路走完建角進到世界地圖,傾印顯示記憶體和色盤記憶體,再依畫面的名稱表逐格上色。
FM Towns 的怪脾氣(II 代)
II 代的 FM Towns 素材要連續修正好幾個假設才解得開。
.TIF是 FillOrder=2 的 TIFF,每個位元組的位元順序相反,檔頭寫的尺寸也不對,資料從第 512 位元組開始。.SND是 sign-magnitude 的 8 位元 PCM,一般的 two's complement 解法會得到雜音。- CD 上 7 條音軌由 I 到 III 代共用,反組譯執行檔加上比對影片,才確認 II 代只用第 5 軌和第 7 軌。

音樂:序列檔要找回晶片才有聲音
這些音樂多半不是錄音,是一串「第幾拍、哪個聲部、用什麼音色、彈哪個音」的指令,要有對應的音源才發得出聲。I 代的原則是不錄模擬器:找到音樂資料、確認格式、理解發聲機制,再用自己寫的合成器算成 ogg。
| 代 | 平台 | 格式 | 做法 |
|---|---|---|---|
| I | MSX | MCP 序列 | 自寫 FM 合成 |
| I | PC-98 | SCORE 序列,YM2608 | 自寫 FM 合成 |
| I | FM Towns | EUPHONY 序列 | 自寫 FM 合成 |
| III | Mac | QuickTime Music,類似 MIDI | 解析後轉 MIDI,經 SoundFont 算成 ogg |
| IV | X68000 | 自家 MGD 序列 | 餵進 YM2151 晶片模擬 |
| IV | Amiga | 私有序列 | 已解開旋律與低音,保真度還在校正 |
| V | FM Towns | 15 首 EUPHONY 序列 | 離線轉成 ogg |
| V | Upgrade 包 | 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。