引语
其实字库处理很难说有一个统一的方法,不同的程序都需要不同方法来处理。
关于常见位图字库的详细信息。
下面是字库存在于ELF/ERX文件时的处理思路。
字模替换
最天真朴素、最通用的处理方式。适用于原字库大小能够塞下汉化所用的全部文字的情况。
这种情况只要对码表进行整理,完成码点的重映射即可,可以说非常的简单。
但是,如果汉化用字超出了……呢?
字库扩容
如果游戏利用的是ROM媒介,比如古早的游戏机将ROM映射到内存地址上那样的话,由于ROM本身的特性,在游戏原始ROM尾端附加字库是可能的。那么只要移动字库到尾端,然后维护字库的指针即可。
然而,PS2上,由于程序是被加载到内存中,而且各个内存都有被利用的可能性(通过堆分配等),如果真的要移动到尾端,你还需要继续维护成吨的代码,确保字库占有的内存不被利用掉。你可能需要修改malloc(甚至可能是开发商自己实现的)等一系列函数。然后才能将字库移动过去。
字库减色(有损压缩)
如果原始字库不是单色(1bpp)而是4色甚至16色的话,牺牲一些精度来保证容量是完全可以接受的。
难点在于,这次需要修改从字库取字的例程了。
而根据游戏的不同,取字例程要改到什么程度是不一定的。有的游戏可能拥有不止一个取字例程,那么也都需要改变。
以GUST的游戏为例,除了主字库之外,游戏还有一个小号的字模“缓冲区”。程序首先在缓冲区中找字,找不到的话再去字库取字,并保存到缓冲区。之后再从缓冲区中复制到其他各种地方染色、缩放等。所以,最简单的方法就是修改从字库复制字符到缓冲区的例程。将取得的1bpp字模加色到4bpp后贴回去即可。
字库压缩
将字库数据压缩,然后运行时解压到压缩时腾出的空间中,然后再令取字例程从那里取字。代价是会带来巨大的运行时开销。压缩率高时尤是。
结语
大概,就这些吧?