天天看點

PS2漢化執行個體-《魔塔大陸》寫些《魔塔大陸》以及一些引擎相關的吧

寫些《魔塔大陸》以及一些引擎相關的吧

在整個PS2時代,GUST一直保留着往ELF裡塞資料的做法。是以不管是字庫還是戰鬥資料什麼的都可以在ELF裡面找到。

到PS3後字型倒是改成了TTF,然而賣身之後又是萬惡的圖檔拼接……(霧)

字庫

24*24,4bpp沒什麼好說的。有意思的是,GUST的引擎是支援至多10種字型的。

字庫由兩部分組成:字型描述字元串和字模。字型描述字元串由2位元組的、SJIS編碼的字元組成,排列順序與字模順序等同。

而指向這兩部分的指針位于一個大小為10的數組裡。雖然目前沒有見到幾個利用了多字型的程式。但是AT2裡确實有兩個字型存在(然而AT1,A6等中都無有發現)。

程式要顯示文字時,就從字型描述字元串中找到文字所對應的編碼的索引,并以此得出字模的位置。

然後把字模整體複制到一個緩沖區裡:這裡就是可以做文章的地方了。既然程式實際上是用緩沖區取字顯示,字庫是緩沖區未命中時取字的方案,那麼隻要修改取字例程就可以随意改動字庫。

我選擇了減色,将4bpp減為1bpp。于是,容量就從約2000字擴充到了約7000字——翻譯絕對夠用了。

繪制邏輯

對于任意的字元串顯示,都是在每次渲染循環時繪制上去的。是以諸如控制符的解析原始字元串的掃描(确認自動換行點)等一直在進行。并且占用了為數不小的CPU時間:當有文字繪制時,中斷程式十有五六能中斷在文字解析例程裡。

另外,美版的自動換行點在空格處,而日版則是非符号前。漢化美版(和歐版)時,還需要修改對應例程,否則程式會永無止境地尋找換行點。(AT2漢化的部分BUG原因)

QvMap

俯瞰視角地圖(不就是二等軸測地圖嘛,叫這麼高端)。

其資料分作多個部分。

碰撞資料存于RPK中的gmd裡。

卷軸滾動資料存于RPK中的qvb裡。而卷軸的紋理位置資料存在ELF裡。而紋理本身存于RPK中的fp中(讀取優化用)且隻接受奇葩的LZR壓縮(LZ算法的一個變體,針對重複的資料給出額外的優化。)過的檔案。

卷軸繪制起始坐标、錄影機起始坐标、BGM、腳步聲效、NPC等資料則依然在ELF中。

Event(事件/劇情)

在早期(A6及之前),Event資料一律存在于ELF中。

自AT1開始,Event資料被獨立到evd檔案中。

EVD檔案的較長的描述不再贅述。它包含了對話資料和腳本。

不過要是想要修複一些BUG就必須動到EVD裡的腳本。(比如在亂逛時觸發阻止前行的劇情,角色向後跳躍卡進牆裡的神奇問題(需要修複腳本指定的跳越終點坐标))

漢化本身

首先EVD是獨立檔案,分析完檔案結構重新生成就好。

麻煩的是ELF裡的文本。隻能将指針表挑出來,然後做好對應。(再次恬不知恥地推銷自己的EIS。(啊,好像還沒寫完,欸嘿= ̄ω ̄=))

另一個麻煩的是美版的字庫太小,即使擴容也不到2000字。目前依然沒有什麼好辦法(之前的一個構想是将字庫移動到RPK中,運作時加載;但随後留意到了記憶體不足的問題(垃圾GUST把ELF做太大了啊啊啊))目前的想法是移動到host:中。不過這就會令普通玩家非常尴尬……

(另:有一個小聰明想法是用日版ELF直接蓋掉美版的,一勞永逸……畢竟已經發現日美版存檔資料一緻)

其他

其實随着研究的深入有點想順便做個Mod制作工具了……不過現在還太遙遠了就是……

先寫這些吧。ヾ(•ω•`)o

PS2