|
4 K( g( Y0 e. [% J* q8 f: y" o游戏内部文字显示
2 J& a; P; B6 A/ v) Z2 D9 d0 v% X& b* X3 [
Diablo2是面向全球玩家发行的,但是由于使用语种的不同,会导致很多玩家对于英文版的D2玩的痛苦不已并且还是一头水雾.这就造成了玩家的流失,为了使不同语种的玩家都可以享受到D2的魅力,暴雪制作了不同语言版本的D2(比如德语,葡萄牙语),而实现这一关键靠的就是TBL文件./ E! T. z2 h; S! {/ a. m( ~. {4 z
( D7 Q9 q9 b4 F, u
TBL文件的作用就是对游戏的角色,装备,怪物,技能,任务等等方面的描述和翻译.描述,就是指的各种介绍性文字了,比如技能的名称和作用;装备的需求和属性;任务的引导和奖励;以及各个NPC的开场白.至于翻译,就是靠着不同的TBL文件,将以上这些描述性文字转换成其他语言的介绍,以便各国的玩家都可以在短时间内快速熟悉和上手,消除语言上带来的隔阂.) Y6 u1 f5 m$ f6 |$ g
1 A _& V, U, N$ A$ p% Ftbl文件究竟是如何运作的呢,下面分2个部分来介绍.
0 J, l0 D3 k& s, ~: S) t+ p1 t* k0 ^, {9 z
一 TBL文件的组成结构' F' G# C! ?( A& X
以string.tbl文件为例,它有四个主要的组成部分:
9 G' [3 l a" B' u5 n. W! ]: y1.标题,这部分有21个字节的长度.3 L( w) t7 F- W* d+ s- h" }
2.每项包含2字节的数组,这是下一个表的索引,它的作用是按编号查找字符串.4 k0 C4 u- M, p4 e7 ~
3.hash值,每项包含17个字节,是关键的指针和有价值的字符串.字符串的排列顺序由hash值决定.它可4 `* u# A& i, g5 N. l. z+ V
以通过关键值来查找字符串.
$ ?: K) A/ z9 \7 f4.各自的实际字符串.
/ X* K3 H8 V$ Y- Z1 ?0 E5 q( M8 u) A" J
二 TBL文件的调用方式
/ t7 F( K) u" p4 U9 o+ ^6 p0 T要调用TBL文件的描述性文字,首先字符串的大小写要严格对应,否则显示的往往是"一股邪恶力量".调用的关键性名称存在与各个txt文件里,以skill为例来看:
4 G/ b* u) Q% p$ Oskillname### - 正如你所想的,技能的名称.
( P) W6 s+ h1 W, E& B {7 O b4 ~skillsd### - 简短描述,被用于鼠标左右键上的技能描述.
8 P) P# K) |5 w5 X" o: J) Lskillld### - 详细描述,被使用在技能栏里的较细致的描述.
3 a/ `( v) I/ D" T4 {+ zskillan### - 属性栏里显示伤害部分使用的技能名称.
5 T7 @ b( _; l9 }% m b% E/ zstrSkill### - 用来构建弹出窗口上显示的或长或短的效果描述.
6 E$ ~+ p5 S2 V! x- \# n7 h: s {& w
3 L3 V, _; F6 ^1 x首先每个TBL文件都会被分配到一个指数模块.游戏由此确定使用哪种语言,并根据该语言来查找正确的TBL描述性文件.在此之后,string.tbl被首先读取,然后是patchstring.tbl,最后是expansionstring.tbl.9 G' x6 J( E5 ^. y9 i8 Z
8 F) ~( M) S% ?& D总体来看就是字符串的索引合并到一个大表,过程如下:% t; M' Q& L0 f! e1 b
1.从string.tbl,分配索引值为0000h - 2709h(0到9999).预期不会出现重复的字符串值.
7 B% @: H; n' [0 R/ T' r
. Q9 h; J0 Y0 T2.从expansionstring.tbl,检查已经加载项的字符串值.和string.tbl中重复的字符串将改变到更优先级版本的字符串索引指针.任何不重复的字符串(这是其中的大多数)将被分配索引值4E20h - 752Fh(20,000至29999).1 D: p' [: F+ ~: @! W" T7 d
7 U8 I3 A0 [& t+ G" z3.从patchstring.tbl,继续检查前2个TBL文件已经加载项的字符串值.重复的指标将改变到更优先级版本的字符串索引指针.任何不重复的字符串将被分配索引值2710h - 4E1Fh(10,000至19,999)。 2 ]3 G6 e" _7 _7 n- G9 ]9 r
% a, ~* H9 I3 U- T+ }: L" l# sTBL文件优先级从小到大为string.tbl<expansionstring.tbl<patchstring.tbl |
|