|
6 o. Z" i5 D. Y2 Q8 [+ e' m
游戏内部文字显示: a- V8 n+ @# [
/ ~/ J" J. @* m/ j1 F @
Diablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件.
9 O y6 n: h! T: f1 a( G' w) i/ {7 {+ G: i e
TBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂.- y+ k* L' E% F$ S5 z8 C# J5 {
6 d" G/ m! [# W2 f$ s6 j8 L
tbl文件究竟是如何运作的呢,下面分2个部分来介绍." ? n6 f/ C5 s0 y1 p: o
* X2 \: ?3 q8 P U8 I! ~7 n8 F一 TBL文件的组成结构0 e( E: h2 t* W4 O
以string.tbl文件为例,它有四个主要的组成部分:
$ W3 L n# ~6 i1.标题,这部分有21个字节的长度.
0 Q5 A, {9 t5 T8 p) d% l2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串./ T+ C, M4 k: X$ E# O2 P
3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可& e7 T5 @1 G ^# E1 z' H
以通过关键值来查找字符串.0 M( |( Y, X& s1 U" N
4.各自的实际字符串.
& c8 g3 o* B: t3 |
! ^2 x% K4 ~& v6 |0 h6 a- D( ?二 TBL文件的调用方式
$ K' [* _$ o6 ^7 t要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:
) d" p/ C- {4 ^6 {skillname### - 正如你所想的,技能的名称.% W8 e5 ?- E3 D0 R# e% ^( N
skillsd### - 简短描述,被用于鼠标左右键上的技能描述.
+ e/ Z. ~! O3 Q' g: sskillld### - 详细描述,被使用在技能栏里的较细致的描述.2 k; V- Q- n: _3 D5 M
skillan### - 属性栏里显示伤害部分使用的技能名称.+ u' P! V. I( C4 `0 P+ V5 A4 g
strSkill### - 用来构建弹出窗口上显示的或长或短的效果描述.7 G6 Y8 g2 r% ?/ d! O
6 c4 k8 ?2 _7 T* A9 Y9 [$ ?
首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.
& S; D: v" U6 A$ l+ V% K) T4 t9 L9 [& H7 t/ r" e) m
总体来看就是字符串的索引合并到一个大表,过程如下:- K/ y6 `5 J) p! T$ P0 t
1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.. a7 v2 t9 L+ A+ l a
5 b9 q9 A; `; S5 ?% L- t! |7 I9 L
2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).9 K% l" @' w& `! U4 E
: Y# [- n' k8 s' `$ k3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。
) b8 f1 \+ a( q) k/ i
. j- u; N, m9 U) [# _: K* yTBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|