|
/ @" D/ u9 R1 A( Y# V# c: D8 H
游戏内部文字显示2 o' ?0 S. l' @4 P
$ I/ L, D6 [0 _4 x: {- m; fDiablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件.
) ]$ y! u- P: O7 E# ^ X
/ j% N8 ?+ T, K2 u* hTBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂.
; V' H# u) [5 V4 Z9 _8 x+ @( w2 A s/ ]5 a# T; g
tbl文件究竟是如何运作的呢,下面分2个部分来介绍.; Y$ d9 v' U& p( i8 @
0 A9 p8 w" O. a- n# T- K% A6 c一 TBL文件的组成结构
* S! z. G" Z& @* \# d3 C# K4 W以string.tbl文件为例,它有四个主要的组成部分:
0 {" @1 P2 V% {0 n' X1.标题,这部分有21个字节的长度.- G# I1 F7 I" ]0 B" O" g, O3 N
2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串./ m' I6 b% @4 x _6 p C j
3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可: I- @' I' R4 L2 E( D. M6 B, e
以通过关键值来查找字符串.; w1 G2 b- M/ q l
4.各自的实际字符串.
2 L3 J3 ^7 u4 k ^
2 P2 C' s: a0 z$ K5 g7 u0 v二 TBL文件的调用方式4 h" F/ V( }% E7 c
要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:9 f& S* B5 D, O) e1 V
skillname### - 正如你所想的,技能的名称.& j: W4 @& Z# ?& _8 J
skillsd### - 简短描述,被用于鼠标左右键上的技能描述.
- E" N2 @* ~1 H5 W/ I4 ~skillld### - 详细描述,被使用在技能栏里的较细致的描述.
# _: n4 K' v, M4 }skillan### - 属性栏里显示伤害部分使用的技能名称.0 g4 @' ~$ B8 i% @* ?( r1 `
strSkill### - 用来构建弹出窗口上显示的或长或短的效果描述.
3 g- N3 s O0 ]' n2 D+ d+ T# T
1 V) |& Z" S3 b1 j9 h9 O# J& n5 T首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.
% e1 p8 t8 \- l. i8 U9 Z4 \! s. S0 X
总体来看就是字符串的索引合并到一个大表,过程如下:# e9 e% o$ s* R1 G
1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.0 `5 B' H: N% C* Y" A1 }6 E$ ]
( e5 W6 |, p0 T! V7 |2 M! K
2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).3 H8 Q, G& e$ D# o6 c* s0 y6 V2 ^
5 j' P0 b; z6 s' N. F7 b: k3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。
0 H3 D$ Q8 N; L( \4 z- t% v) @1 k& y& p' g) a: q
TBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|