|
8 t4 Y8 O8 T( o j3 Z8 F0 }
游戏内部文字显示
1 c x1 H5 ~. }) K, U+ ~
; o5 Q! N* B9 p$ pDiablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件.! A4 Y3 t) ~2 r
& a1 ?: g! m2 Q f N
TBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂.
3 f6 ?( V8 W# D6 f! z
. G; g$ `3 {- ^* V) r8 Dtbl文件究竟是如何运作的呢,下面分2个部分来介绍.
6 T8 B4 A0 n2 i, |) P$ S. ~: ^2 \
4 T+ i7 `9 S$ Y一 TBL文件的组成结构
% H5 L) X" i% O0 u- U% S$ h以string.tbl文件为例,它有四个主要的组成部分:6 e! X/ p% J1 q7 N) m4 w; x
1.标题,这部分有21个字节的长度.
+ i# i b6 I3 h. T2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串.
' d0 {3 u6 H- Z' o3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可: L- i! C+ L8 e+ I8 m- u
以通过关键值来查找字符串.- E: |0 y3 W: J8 v" X1 h2 E
4.各自的实际字符串.
+ Y! F/ e- c8 I1 Q) j4 H1 s" h# O0 P7 O0 ?9 S6 M7 b
二 TBL文件的调用方式% O7 ]8 k! C0 O) A }& S @5 T/ g9 y/ N
要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:
; n/ V& r5 h) h9 o' p nskillname### - 正如你所想的,技能的名称.
- J2 @9 _9 \7 b6 r9 ^; v. Pskillsd### - 简短描述,被用于鼠标左右键上的技能描述.
4 ^4 M" w0 _. P; f* ~skillld### - 详细描述,被使用在技能栏里的较细致的描述.
) M# g" @3 W& c( n7 d( R+ z& `0 jskillan### - 属性栏里显示伤害部分使用的技能名称.
# j( Z/ o1 V" V8 DstrSkill### - 用来构建弹出窗口上显示的或长或短的效果描述., J* n' C! G3 i e. {( K
1 ^" J& U9 k# B* X' h0 r- m# M首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.
; ^& R) V+ ? M5 a/ B% W) o2 ~0 u4 X3 b
总体来看就是字符串的索引合并到一个大表,过程如下:
! G0 p6 J% j- o; g+ D7 A1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.; Z% J/ ?7 N& p. M# H) Q/ q
d1 W% O1 T; i+ L$ }" u3 [+ ]
2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).) f% n: C$ y& [" o7 H7 N+ Y/ S
" g$ t j0 Z8 f. `' k% b H
3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。 , i2 b8 e0 R2 P% P7 |$ R" b) V- A
. `' V1 {8 D! J2 R& x; H1 \4 o4 C
TBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|