|
6 Y$ ` n0 [/ L. Q9 B
游戏内部文字显示4 T9 D; a" T C" o% h
8 G( r# r, k2 Z& L8 P) K$ ?) zDiablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件.
: f- N4 i' o+ g& o
& H9 E( B* f; g* pTBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂.0 f* C. O; s3 L0 `: y
+ ?+ B# P+ |4 g& @3 E8 E+ J
tbl文件究竟是如何运作的呢,下面分2个部分来介绍.
" |5 K. z1 j I( m$ L! s, K8 D& I$ s r/ g
一 TBL文件的组成结构. S# o" z0 `1 I5 {0 M1 \+ r
以string.tbl文件为例,它有四个主要的组成部分:
; P3 O) f- p3 Q" c1.标题,这部分有21个字节的长度.( r }' _% Z, w3 n) }8 r* y+ ~
2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串.
) s. o4 V; i1 s* Q3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可7 q$ K% ^0 w3 w3 D9 I/ p) ^
以通过关键值来查找字符串.
$ x' W* c% P5 m9 Q4.各自的实际字符串.& | F! |# `( F% q
% J; m' G$ k+ J
二 TBL文件的调用方式
% f& Y& g4 ?: O2 [4 {' ~. k( O1 I要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:
- j" r, [, q: c) N3 Hskillname### - 正如你所想的,技能的名称.1 C M$ U/ E8 K- ?, y, f$ |* a- b
skillsd### - 简短描述,被用于鼠标左右键上的技能描述.* R' d; T; g9 O7 H+ i7 D8 d$ m) v
skillld### - 详细描述,被使用在技能栏里的较细致的描述.' t" ~* G. m, ?+ U
skillan### - 属性栏里显示伤害部分使用的技能名称.% L- @9 s- C& T, ^. W- ? d. D
strSkill### - 用来构建弹出窗口上显示的或长或短的效果描述." s; r r$ H3 r7 ?8 [
8 l$ Z% G/ D. Q6 A; i首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.
) U5 A& p: l: ~9 E# F! v h- U* v
6 F, D$ e8 ~" f% V! ]总体来看就是字符串的索引合并到一个大表,过程如下:; o& H8 L/ z2 m; Z
1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.' W M) F4 p: s
* g/ V* J' J: t' N& {9 s: D2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).2 p7 |+ b) \" t% ~# P
, T& h' x" F9 `' f3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。 8 P4 d4 N! d! u9 D( s9 i- ?
2 m8 I7 f2 i. P' ~0 y- R5 U
TBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|