邮购的《红楼梦 :林黛玉与北静王》终于到了,可是游戏前却出现了种种问题,从最开始的将游戏从盒子中取出就费了我不少心思。其实这种包括很精致、简洁,只是最外层纸皮卡得太死,我只开了一边塑封,很难将内层塑料盒推出。好不容易将光盘取出了光驱却罢工了,死活不肯弹出。费了不少劲才将光驱弹出,游戏顺利安装激活。可是加密却限制了只能在英文帐户下使用,包括只能使用英文路径安装,其实只是字符集的问题了,Sony却迟迟不肯改进。一切准备就绪后,进入游戏,默认情况是800×600窗口,而我玩游戏一般都是全屏,进入设置程序,这时却出现错误无法运行了。与娱乐通沟通没有结果后,无奈只能自己做一个设置程序,好在游戏的设置文件比较简易,比较容易分析。设置程序是用C++ Builder制作的,很容易提取,我用Delphi伪造做了一个一模一样的。
下面来说重点了,配置文件的格式。
配置文件为Save\Config.TDF,这是一个类似于INI格式的文件,将文件转换为INI格式为:
[Key]
Mouse Right = 0
Enter = 0
Space = 1
[Audio]
Auto Continue = 0
Continue Voice = 0
Software = 0
Voice = 1000
SE = 20
BGM = 20
[Graphics]
Disable ScreenSave = 0
movie_quantity = 0
AutoSave = 1
Play Movie = 1
Top Most = 0
Wait Active = 1
Back Not Draw = 1
End Wait Time = 1000
speed = 1
Text Speed = 40
Not 4:3 ProcMode = 0
Msg Eng Font = Tahoma
Msg Chs Font = 黑体
Menu Eng Font = Tahoma
Menu Chs Font = 黑体
Alpha = 0x3F800000
Color = ...
Freq = 85
Bit = 32
FSAA = 1
FullScreen = 0
Option Top = 384
Option Left = 341
Screen Height = 600
Screen Width = 800
由于古月引擎是使用Unicode编码的,因而这个配置程序中的文字很自然也以Unicode编码。在INI文件中[AUDIO]称作小节,Menu Chs Font称作关键字。
将这个INI文件改写成为红楼梦的CFG文件,按照行来读写。首先用4字节(int)存储接下来的关键字的长度,若此行是小节,则是小节名称的长度。接下来则是以Unicode编码存储关键字/小节名称。再则用4字节(int)存储值的长度,若值为int类型,则长度为4;若值为bool类型,则长度为1,还有string类型和color类型。特别说明的是string类型,这种存储方式非常类型Delphi中的字符串,先用4字节(int)存储字符串的长度,再顺序以Unicode编码存储string的值。如果此行是小节,则长度为0,再接着用4个字节(int)存储该小节中总共的项目数。再则继续存储该关键字的值(int,bool,string,color)。最后,如果此行不是小节名称,则再以4字节(int=0)作为分隔。如此循环。