[研究]GTA-VC文字资源提取

      Lab 2005-5-3 19:52
五一假期,无聊间重新玩起了GTA-VC。突发奇想能否试着将它汉化,于是便动手开始研究。在Text文件夹下,发现几个后缀名为GXT的文件,文件名是american,french,german等各种语言的名称,便用UltraEdit打开浏览。经过浏览,发现了很多游戏里的对话,于是确定这就是储存游戏中文字资源的文件。光知道这些还不行,还需要进行进一步的分析,确定文字是怎样储存的。

仔细观察后,发现有两个出现几率很大的字符串:TKEY、TDAT,并且每个文件都是以TABL开头。初步想法这是GXT文件的标识符,接着又发现在每个TKEY标识符后都跟随着类似任务名的缩写,缩写后就紧跟着游戏的对话内容。当时在想这些也许符合某一种格式,便继续观察与猜测。

进一步观察,随便找一个TKEY进行观察,发现每个缩写距下一个都是12个字节,而且缩写与对话内容之间以TDAT分隔,便确定TDAT为缩写的结束符。接下来看对话内容,都是以xx 00 xx 00的方式储存,xx为内容。凭直觉觉得,缩写应当与内容有关系。便数了数缩写的数量,Perfect!数量和对话的句子数完全符合,这样也就同时发现了00 00为句子的休止符。

找到了缩写与内容之间的关系,可是还没有发现如何确定缩写及内容在文件中的位置,理了理思路,决心从头看起,因为一般内容的位移都储存在文件的头部。果然,在文件开头发现了问题的所在,也有很多缩写,而且都是12个字节,更令人兴奋的是经过测试发现在12个字节的最后4个字节储存了上面所说的缩写以及内容在文件中的绝对位移(外国人似乎很喜欢12,暗黑II的钥匙最多也是12个 ^-^)。

知道了这些信息,就等于完全知道了如何将游戏中的文字资源提取出来,至于汉化就不可能了,因为试了一下根本无法显示汉字,应该是字库没有相关信息。不过利用这些文字和游戏中的音效做一个GTA简易版本也不错啊,而且包括了好几种语言。下面附带的是研究出的GXT格式文件结构,另外笔者自制的《GTA-VC文字资源提取器》也即将出炉! :)

--------------------------------------------------------------------------

GXT格式文件结构:

长度 | 类型 | 名称 & 描述

4 字节 String 标志符;固定为"TABL"
4 字节 Long 对话组信息长度
? 字节 ??? 对话组信息,长度为对话组信息长度

对话组信息结构:
[ 8 字节 String 对话组名称
[ 4 字节 Long 对话组内容绝对位移

对话组信息数量 = 对话组信息长度/12

... ...

对话内容,分两种情况MAIN对话组,其他对话组:

MAIN对话组:

4 字节 String 标志符;固定为"TKEY"
4 字节 Long 对话信息长度
4 字节 Long 未知
? 字节 ??? 对话信息,长度为对话信息长度

对话信息结构:
[ 8 字节 String 对话名称
[ 4 字节 Long 未知

对话信息数量 = 对话信息长度/12
注:最后一个对话信息以"TDAT"结束

... ...

4 字节 Long 对话内容长度
??? ??? 具体对话内容,储存格式为 xx 00 xx 00, xx为内容, 00 00为一个对话中止符

其他对话组:

12 字节 String 对话组名称 + "TKEY"(后四位)
4 字节 Long 对话信息长度
4 字节 Long 未知

对话信息结构:
[ 8 字节 String 对话名称
[ 4 字节 Long 未知

对话信息数量 = 对话信息长度/12
注:最后一个对话信息以"TDAT"结束

... ...

4 字节 Long 对话内容长度
??? ??? 具体对话内容,储存格式为 xx 00 xx 00, xx为内容, 00 00为一个对话中止符

--------------------------------------------------------------------------
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}