引語
其實字庫處理很難說有一個統一的方法,不同的程式都需要不同方法來處理。
關于常見位圖字庫的詳細資訊。
下面是字庫存在于ELF/ERX檔案時的處理思路。
字模替換
最天真樸素、最通用的處理方式。适用于原字庫大小能夠塞下漢化所用的全部文字的情況。
這種情況隻要對碼表進行整理,完成碼點的重映射即可,可以說非常的簡單。
但是,如果漢化用字超出了……呢?
字庫擴容
如果遊戲利用的是ROM媒介,比如古早的遊戲機将ROM映射到記憶體位址上那樣的話,由于ROM本身的特性,在遊戲原始ROM尾端附加字庫是可能的。那麼隻要移動字庫到尾端,然後維護字庫的指針即可。
然而,PS2上,由于程式是被加載到記憶體中,而且各個記憶體都有被利用的可能性(通過堆配置設定等),如果真的要移動到尾端,你還需要繼續維護成噸的代碼,確定字庫占有的記憶體不被利用掉。你可能需要修改malloc(甚至可能是開發商自己實作的)等一系列函數。然後才能将字庫移動過去。
字庫減色(有損壓縮)
如果原始字庫不是單色(1bpp)而是4色甚至16色的話,犧牲一些精度來保證容量是完全可以接受的。
難點在于,這次需要修改從字庫取字的例程了。
而根據遊戲的不同,取字例程要改到什麼程度是不一定的。有的遊戲可能擁有不止一個取字例程,那麼也都需要改變。
以GUST的遊戲為例,除了主字庫之外,遊戲還有一個小号的字模“緩沖區”。程式首先在緩沖區中找字,找不到的話再去字庫取字,并儲存到緩沖區。之後再從緩沖區中複制到其他各種地方染色、縮放等。是以,最簡單的方法就是修改從字庫複制字元到緩沖區的例程。将取得的1bpp字模加色到4bpp後貼回去即可。
字庫壓縮
将字庫資料壓縮,然後運作時解壓到壓縮時騰出的空間中,然後再令取字例程從那裡取字。代價是會帶來巨大的運作時開銷。壓縮率高時尤是。
結語
大概,就這些吧?