|
# T* M+ y+ L/ j- v8 I游戏内部文字显示
7 U( I- m+ c7 n# s* g$ l ?5 a$ W
6 k3 M% w7 ^8 q! N! F- o7 RDiablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件.& Z% I! V& G" u
3 G$ J7 p% x5 m; }5 ~4 I, M& O
TBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂., F. \; `" T! J
$ G! G7 a J+ i5 ^3 t
tbl文件究竟是如何运作的呢,下面分2个部分来介绍.
, P. t7 v$ @' Z/ F+ ?& s, H' b$ P3 l% p
一 TBL文件的组成结构0 [/ ~' ? u* p. r( [3 F* Q
以string.tbl文件为例,它有四个主要的组成部分:
. U9 v: M& L0 N1.标题,这部分有21个字节的长度.
' @7 } f; [2 f% o/ f% N K) t2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串.* w+ C6 i$ }1 |* ^
3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可
3 P, y; X. ~1 c8 u y2 f6 n( w 以通过关键值来查找字符串.& ?: `* M9 G0 s* i
4.各自的实际字符串.
7 P& a/ b( L0 e) m' F8 I/ Z ~% A+ `1 A, U( O
二 TBL文件的调用方式8 \8 R, v7 E. j: k* h
要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:7 ^1 e" Z6 l+ F6 Q; G& R7 g
skillname### - 正如你所想的,技能的名称.
$ Z# a. H0 x9 v. O: X( D0 iskillsd### - 简短描述,被用于鼠标左右键上的技能描述.
; | u; h% Q8 F% f s7 Q* Gskillld### - 详细描述,被使用在技能栏里的较细致的描述.
, e+ N* t# Y' ^; @9 v0 rskillan### - 属性栏里显示伤害部分使用的技能名称.9 @4 u0 g7 v% |/ Q* z6 `5 `* D
strSkill### - 用来构建弹出窗口上显示的或长或短的效果描述.1 q8 S3 |' A2 `- n6 s2 f$ _
& @* A/ I0 M. X/ M4 O首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.; e6 T& S& \0 D2 C- O
% p; l5 ^0 h( o
总体来看就是字符串的索引合并到一个大表,过程如下:6 w/ G9 b0 ?6 D
1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.! g) D1 W* l6 W, H- x
0 x; u9 y" Z+ D& v5 U% u5 c. s4 c3 q
2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).: A* T; s- l' n! ^. o U" R
' A! Y! @# x. J/ s1 `9 n% l3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。
" y) V! k' | h" n+ ?( U" k8 f2 m$ b) E# [, U e
TBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|