|
, t. e" L) N9 h& e
游戏内部文字显示7 R1 s- s$ d4 g' l- w" G
$ v. E" t) ^4 x: r- e
Diablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件./ O: e6 Y0 @+ J- c$ Q/ {& w
+ C) N2 g y8 A- F
TBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂.
' G" p- [5 r8 T2 `
7 i. I) T, w5 Z0 _! ntbl文件究竟是如何运作的呢,下面分2个部分来介绍.
( d$ m0 n. u0 y: Y9 ?0 n* Y% C- k( y- q3 l. I
一 TBL文件的组成结构
' a" ~, k6 k# `% G' F& u% M以string.tbl文件为例,它有四个主要的组成部分:9 \) }" t' Q1 }8 j* L; H @. t
1.标题,这部分有21个字节的长度./ B" |% U2 K- h
2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串.
- t2 B, \' |: b% _; w! O3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可% w3 O( g0 m6 l7 |# N
以通过关键值来查找字符串.
1 B4 n) C8 Z4 x$ ]6 @. V/ t4.各自的实际字符串. V {/ O/ Y2 M8 h' L5 _$ \( E
- g# ?+ O. w7 h& k% X' p二 TBL文件的调用方式
9 M0 T6 ^$ R: C1 Z! R% i- Q要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:# }4 Z" c8 f$ r, [$ |
skillname### - 正如你所想的,技能的名称.
" L# j* R% p0 p2 s/ A; ~5 {& X6 g! u0 Mskillsd### - 简短描述,被用于鼠标左右键上的技能描述.
5 k* a$ k. e8 W+ ]% q9 cskillld### - 详细描述,被使用在技能栏里的较细致的描述.4 i- B+ ]1 O; B- `" w6 M# M
skillan### - 属性栏里显示伤害部分使用的技能名称.
$ [, C4 R- b' ~ B8 E8 f# hstrSkill### - 用来构建弹出窗口上显示的或长或短的效果描述.
) j# [' K. d/ M( G$ d% O! K$ n3 y6 j3 P# j
首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.
1 l9 g/ p5 k+ H# g5 T: N- N
% N& Q1 k5 O* g( f" R总体来看就是字符串的索引合并到一个大表,过程如下:( q; I4 P/ ~: V: g, B! R% ~
1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.
: `/ G2 h3 o# U# o* T( R- E, h! R% x$ B( L% @7 Q
2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).
& w$ l) O% X! S$ e- ?& N0 N
, P. ]6 _' N- S: T3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。 + q" x7 h" w1 O+ Q! E) h1 z
+ D4 X) D6 B+ XTBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|