感觉我离卡壳越来越近了,不过在那之前,我知道了中文字的格式。
本系列已完结,以下是各章节说明,17 之前是 dos 版相关,之后是 2001 版:
我们可以轻易猜出,字体文件其实就是这几个 FON 扩展名的文件:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2013/5/4 3:45 3871 ASC16.FON
-a---- 2013/5/4 3:45 12322 ASC24.FON
-a---- 2013/5/4 3:45 1211115 CL24.FON
-a---- 2013/5/4 3:45 523743 CM16.FON
-a---- 2013/5/4 3:45 1211115 CM24.FON
-a---- 2013/5/4 3:45 6175 LCD.FON
-a---- 2013/5/4 3:45 3135 SETUP.FON
-a---- 2013/5/4 3:45 3199 SETUPCD.FON
根据文件大小也很容易确认,C 开头的是中文字体,其他大概率是英文。有两个文件大小一样大对不对, 但是其实他们是不同文件,为什么这样,我们后面再说。
解析格式,最有效的方法,我想还是用 dosbox 的调试功能,去看文件是如何读取的。读过本系列的老朋友,
应该有个大概的思路了,我也就不在这里凑字,大致就是首先 bpint 21 3d
,
找到字体文件在哪里打开,然后 bpint 21 3f
,观察程序是如何读取字体文件的。
长度 | 类型 | 说明 |
---|---|---|
4 | 字体标识 | 英文:MGEF,中文:MGCF |
1 | CM16: 0, ASC16: 1 | |
1 | 字体宽度 | CM24: 18h |
1 | 字体高度 | CM24: 18h |
2 | 字体字节大小 | CM24: 48h |
4 | 字体个数 | CM24: 3feeh |
2 | CM16: 1, ASC16: 0 | |
[1f, 7ffa] | 可能是字典 | |
[7ffb, 7fdde] | 文字数据 |
有一个比较有意思的事情,不晓得你发现了没有:
$$ 宽度 \times 高度 = 24 \times 24 = 576 \\ 字体字节大小 = 48h = 72 $$
两者正好相差 8 倍,所以每个字节其实是代表 8 个点,也就是说,字体是单色。
那其实知道这么多以后,我们直接画也画得出来了:
中文字体基本上都是这个结构,CM16 因为字体小一点,所以大小也会小一些, 而这也是为什么 CM24 和 CL24 虽然一样大,但是文件其实不同,因为字的图像会有些差异, 这里没有讲字典的部分,字典的长度是文字个数的两倍,也就是说两个字节代表一个字, 那么从那个时代开始玩游戏的朋友应该猜得到,作为一个台湾游戏,文字编码应该是 Big5, 事实它确实是 Big5,至于程序是怎么根据文字编码来画出文字的,我先按下不表,各位猜一猜。
话说这么看来,这个游戏的简中化其实我都可以做了,把几个 FON 文件中的繁体字换成简体字,结束。