|
很多朋友都有自己修改D2字体的想法。在此之前,熟悉D2MOD的朋友大概对游戏的各个方面都改过了,但唯独字体这块大家恐怕未敢接触,其主要原因就是字体的修改过于烦琐。今天我们讲一下在一些工具软件的帮助下简化修改过程,且看下面的具体说明。
/ h4 y4 s1 t1 m8 Z- w0 y) E9 x5 C8 Y/ `, ?4 D: r
字体说明! J$ o, C7 x3 A( _/ V
对于现在的游戏而言,一般大都是调用特定的或系统的字体文件来显示字符文字。然而D2却不太一样,它的字体文件非常特殊,是专用的,本来D2的英文版字体是非常另类又非常漂亮的,但字体大且发虚,屏幕显示比较乱。而奥美的中文版所制作的字体又不堪入目,所以现今大都采用台湾松岗的字体以及2years制作的字体;一直以来都有不少朋友想换换字体,但不了解的人很难去更改游戏的字体,原因是游戏采用帧包文件(DC6)与码表文件(TBL)相映射的形式来显示文字,这给修改带来很大困难,下面来简单说明一下上述两种文件的数据结构:
5 z3 H% J. ~, E2 T% t: f1 p) T2 e8 X
; \) |3 \+ b* \' S2 U帧包文件(DC6):
( F) t! }+ Z. S! P大家应该接触得比较多,它是若干幅尺寸大小各异或相同的图像帧按特定的数据结构打包在一起的压缩文件。此类文件在游戏中被广泛的使用,具体到字体来说,此种文件就是把游戏中会出现的所有各不相同的字符文字,以每字符一图像帧并按一定的顺序打包在一个文件中。文件名一般是"fontX.dc6"(X代表其它字符),英文版的所有这些文件中都包含着256幅图像帧,分别用来显示256个不同的字符或文字;而对于汉字来说,要包含多少幅图像帧,就不好说了,汉字大多了,恐怕谁也说不清汉字的具体个数,但一般常用的也还是GB2312字符集,也就是6763个汉字,其它的要用再加吧。
" H" P# f6 e2 y3 E) W
! d) s/ J$ y% N$ T2 r码表文件(TBL):
7 I) L: q$ b; }' Y4 ^. s1 G这可不是UI文件夹里的TBL文件哦,是FONT文件夹里TBL文件,虽然都是TBL的扩展名,但数据结构完全不一样,前者已有几个专用的编辑工具,而后者还没有呢。下面是码表文件的一般结构形式:
8 I9 `/ k" @" y" m6 z
1 \0 D7 U, G8 g# K( Z! v6 Q00000000→57 6F 6F 21 01 00 00 00 A0 1D 0C 00 20 00 00 03
9 P3 A1 L$ U3 A4 o0 @00000010→0D 01 00 00 00 00 00 00 00 00 21 00 00 04 0D 01 * p5 Z6 M! N8 l- w, q% O" q% v
00000020→00 00 01 00 00 00 00 009 c6 Z8 Q. t/ T
% f. K2 L# q# R% m( _) ^
byte1 - byte4 = 57 6F 6F 21
0 v0 w/ N. I/ u9 Fbyte5 - byte8 = 01 00 00 001 B. U2 F, B1 }( v! K1 R: v
以上8字节是文件头,是不变的;
, F S( |) r( v6 O& dbyte9 - byte10 = 码表中包含的字符个总数,“A0 1D”就表示码表包含7584个字符;* D* x2 w4 s( p+ w2 p- y* \
byte11 = 字符的行间距;注意:行间距一定要等于或大于相应的图像帧上的显示的字体的高度,具体说,若图像帧上显示的字体的高度是12,那么行间距的取值是等于或大于12,否则到了游戏中,分行显示的文本就会变成一行叠加显示,什么效果?自己改一下该值试试吧!
) a- \1 W2 A! J, Dbyte12 = 未知作用,但通常取值为(十进制值)0、1、8、9、12、20;
: a s! _5 |( E4 Z' v# t6 b! X3 N接下来就是码表的具体内容信息,每14字节为一段:
& W1 P. D% y% j& X0 E6 \byte1 - byte2 = 字符的Unicode编码,“20 00”就是半角的空格;注意:Unicode编码是指“Unicode little endian”的编码形式,就是通常说的“小尾”编码,不是“Unicode big endian”,也不是“UTF-8”。% ]. N) r5 u' B2 Y4 n" s( y$ h
byte3 = 00( t' g* f4 V3 ~- Q; R! u
byte4 = 字符的宽度
! y' }' |% A0 x" Fbyte5 = 字符的高度* i A6 O+ Y& w, x/ ^
byte6 = 未知作用,但通常取值为(十进制值)0或1;5 n1 i k" `) W/ ?+ M4 D
byte7 = 001 H1 G1 D* U. Z
byte8 = 00
1 G8 ~% W) W# U- zbyte9 - byte10 = 字符的编号,与帧包文件中的图像帧排列相对应,编号从0开始;
: P8 k& V7 P6 b: a* W9 Sbyte11 = 00* g3 c( ]! U5 R4 g& w* h2 q
byte12 = 00- g5 Y, ]6 Q2 i
byte13 = 00- x0 V. K! G5 W) w0 H) U' ]' X0 k
byte14 = 00& q! h6 P D7 s M
以上14字节就是第一个字符的具体码表信息,其它字符的码表信息也如上述格式排列存储。' o' r$ i6 L. e- Z/ N
因此,帧包文件与码表文件就以这样的方式关联起来,字符与图像帧是按顺序一一对应的,任一文件出现错误,都无法正常进行游戏。3 u9 p" K' r: L6 x! u+ H0 n: I
+ I. t! k! A4 X
字体修改
" u. ^ J5 f3 u! b( ?有了以上的基本资料,我们就可以对字体进行修改了。要想修改,首先当然要有工具了,但相应现成的工具恐怕只有帧包文件的编辑修改工具,而其它工具想必大家就找不到了,这里给大家提供几个花姐制作的工具,工具不多,但很受用了。
3 L' g3 C+ I0 M2 K: ^8 L$ u0 O, R2 A8 V: D1 n+ S; A- E, I
相关主要工具:
_# x' `$ y+ H4 z/ d' j# p- ^7 ZDC6 Creator(帧包文件编辑修改工具,可以对图像帧进行导入导出,创建全新的帧包文件,这里我们主要使用它的「INI→DC6」的「批量导入图像帧」功能。)- ^6 ]* B2 X- x# P) _
ExportPreviewImage(预览图像创建工具,用于创建一个例图,来获得第一手的图像参数信息。)
9 M0 R% i0 H* ~( EExportCharactersImage(字符图像批量创建工具,用于批量创建所需字符图像。) # Q8 [; o5 w6 e) k* d1 r: H. y
ImportCharactersTBL(码表文件创建工具,用于创建相应的码表文件。)
9 n D) ]: j1 T sImportCharactersINI(图像批量导入配置文件创建工具,用于创建一分符合用于DC6 Creator工具批量导入图像帧的INI文件及目录结构,以配合进行批量导入并最终生成帧包文件。)
# B; I8 Z0 h) e( b+ ]3 AExportCharactersTBL(码表信息导出工具,用于将码表的基本资料导出到文本文件中,主要是辅助参考之用。)# O# r- L7 e& R$ h4 j% d7 c
: p; w) ?7 e. O; ` r F' m
其它辅助工具:% f# h9 t$ S$ z E/ Y9 @+ [
EditPlus0 }- L0 l: F6 D3 a5 `+ Q) Q$ S
EmEditor9 ?! } ~9 i* T) }2 d! D" M( t
WinHex, B- ^1 P$ |! y+ Y) {
……等等。8 E1 v% I" v! Q7 F2 m
; F4 Z+ q" _6 V( v$ ]3 e在主要工具中,除了DC6 Creator其余五个是用java编写的,所以大家使用前请到SUN公司的主页http://www.sun.com/下载安装jre1.5.0.12(或更高版)运行环境,否则有可能无法正常运行程序。1 p. F: m* n1 ~2 d2 s7 `
' n7 D) Z, R7 F# D. d
操作说明:
2 k' H# a: m, p k9 t* z, k先确定要创建那个字体文件,比如我们要创建新的「font16」字体,那么我们只需要创建「font16.dc6」和「font16.tbl」这两个文件就行了。 - V6 n* v {8 `7 G( t
「font16」字体是游戏中的主要调用字体,主要用于显示人物属性值、物品属性、技能说明等等的窗口写屏信息,因此用途最广泛;
/ e2 T% p8 e# j! m$ `「font16」字体是黑底白字,大小一般是12,字符图像尺寸一般是12(宽)×12(高),最好不要超过14,不然在游戏中显示的字符就会变得很大,毕竟游戏的最高分辨率只有800×600,因此特别要主意; 3 P0 O" P! g* }
) W, q- k: g3 Q- x/ s3 v- F⒈用预览图像创建工具生成某个字符的图像看看,执行"预览图像创建工具.bat"运行工具;
6 S+ b, w6 E+ `6 j按提示输入一个字符,如字母「g」;
3 r5 F3 z2 ~3 ]$ @# w! N「字体名称」输入字符欲采用的显示字体的具体名称,如「微软雅黑」; # \3 Y% w# z. h9 T
「字体字形(0[常规],1[粗体],2[斜体],3[粗斜体])」输入对应的数字,如「0」; " N! L7 R1 \& L1 r; r" s
「字体大小」输入具体的大小值,如「12」;
. }, o/ L6 k- p「字体颜色- R值(0-255)」、「字体颜色- G值(0-255)」、「字体颜色- B值(0-255)」分别按RGB的色域输入色值,如字体是白色的,则分别输入「255」、「255」、「255」; $ S7 t0 @4 P8 C' U
「图像宽度」适当输入,如「12」;
8 v. r; A" q z# }& n) a「图像高度」适当输入,如「12」;
+ n5 T$ q$ k9 J0 P% v) |「图像背景色- R值(0-255)」、「图像背景色- G值(0-255)」、「图像背景色- B值(0-255)」亦如前面一样输入,如黑色是「0」、「0」、「0」; $ ?6 a/ h: C2 x3 h3 b% s+ N% O
「图像文件类型(JPG,PNG,BMP,GIF)」输入括号中的四种类型名称之一,如「bmp」; # A' |& A1 ~4 X
「预览文件输出路径与文件名」按实际输入,如「d:\tmp.bmp」;
1 q, l3 R7 p9 W c- e「X偏移量」是以图像左上角为原点,取值从0开始,左偏移为负值,右偏移为正值,如「0」;
9 A+ c# J6 R6 u, b2 Y' {「Y偏移量」是以图像左上角为原点,取值从0开始,从输出字符实际尺寸:8(宽)×15(高)来看,字符的高度显示高于图像的高度,因此我们输入「9」;
8 H R i6 \, ^全部输入数据后,字符的图像文件就会生成了,快到其输出目录看看是什么样吧。 X和Y的偏移值可能要多试几次才可获得适当的图像,因此请记下这两个重要的数值,接下来要用到的。
/ n6 ]8 b. p: v* z8 V
% F. A$ F1 W" n0 g- Q1 [, {⒉用字符图像批量创建工具按要求一次性生成所有需要的字符的图像文件,执行"字符图像批量创建工具.bat"运行工具; ; }9 _6 k) U4 n* |8 C7 u1 T1 K
「字符列表(txt)目录与文件名」按实际路径输入字符列表文件的名称,这个「字符列表」文件是一份包含了所有的需要用到的字符,是以Unicode编码保存的文本文件,每个字符占一行,随工具一起我提供了一份字符列表文件样板"mb.txt",该文件包含了GB2312的6763个汉字字符及821个其它字符,共7584个字符,合7585行(注意:行数一定要比字符数多1!)。比如这里输入「d:\mb.txt」;
# Q) F/ w* `& F9 Q「图像文件输出目录」输入这些图像文件的输入文件夹路径,如果文件夹不存在会自动新建,如输入「d:\00」; , Q/ ` ~: h7 N* j5 W
「图像文件类型(JPG,PNG,BMP,GIF)」这里虽然可以生成四种格式的图片,但DC6Creator只支持256色的BMP、GIF、JPG、PCX、TIF五种格式,而我写的程式虽然可输出JPG文件,但不是256色的,所以你只有两种格式可选了,如输入「bmp」;
% ~7 m7 u1 l0 E9 b) @, i其它按实际输入即可,完成后就能获得所需的字符图像文件和一份「字符列表文件名_tbl.txt」的文本文件,例如「mb_tbl.txt」,这份文件包含了所有的具体字符及其按字体大小输出的实际的宽度值和高度值,此文件稍后也要用到。 ! u( r7 c! d+ J9 M) D2 y
8 {( f- D$ |- }( x' @9 O$ s4 h
⒊用码表文件创建工具创建新的码表文件,执行"码表文件创建工具.bat"运行工具; O W. t& M5 @; F
「标准字符表文件(txt)路径与文件名」这里输入的就是上面所说的新生成的那个「字符列表文件名_tbl.txt」文件的具体路径名称,但在此之前要对该文件进行修改,用文本编辑工具将文件里的第三列数值改成输出图片的实际高度值,这个数值一般都大于实际高度值,因此要更改后再使用。如输入「d:\mb_tbl.txt」; * X% O; Y% F, j( E7 ^
「码表文件(tbl)输出路径与文件名」按实际输入,如输入「d:\font16.tbl」;
2 ~0 ]( y) ?; J3 @( u「字符行间距」按实际输入,如输入「12」;
& N+ h# l. e1 s* L2 b接着随便输入剩余的两个未知数值,即可完成码表文件的创建。
' F: u- D, D, }" O* j+ M
8 B& B# \9 e" l( X' s⒋用图像批量导入配置文件创建工具创建一份INI文件,执行"图像批量导入配置文件创建工具.bat"运行工具; ! m6 q9 r) |. {% s! `/ I
「配置设置目录」输入一个目录路径名,如输入「d:\」; ; A& ~, V& ]$ U; ~
「DC6文件名称」输入要具体创建的DC6文件名称,如输入「font16.dc6」;
j$ B! i7 X3 C「图像文件总数」按实际输入,如输入「7584」;
4 j1 F4 Y8 Y, E9 I4 Q「图像文件类型(JPG,PNG,BMP,GIF)」按实际输入,如输入「bmp」;
; O" R1 ?& [! V+ p% S2 E3 ^「图像宽度」、「图像高度」也按实际输入即可,全部完成后,在相应的目录下就会创建一个「DC6文件名_图像文件类型」这样的文件夹,具体到这个例子,我们会在D盘下找到「font16_bmp」的文件夹,里面有一个「font16_bmp.ini」文件和一个「00」文件夹,这样的目录结构与用DC6Creator工具全部导出DC6文件后的目录及文件结构完全一样,再把之前生成的所有字符图像文件全部移到此目录中的「00」文件夹里,就万事俱备了。 4 j/ K s' Z5 |7 {& y! b
( O& `1 S$ Q- t* j/ C% R⒌用DC6 Creator工具将所有字符图像文件导入并生成新的帧包文件,在此操作前提配CPU和Memory性能不高的朋友,最好先重启系统再进行操作;
! q' q0 p! y. B" V2 e$ g4 w) s* U运行DC6Creator工具,点击「INI->DC6」按钮,选择先前创建好的INI文件,之后就请大家关闭显示器,到客厅看看电视或听听音乐吧,原因是这个过程要等上一段时间,高性能的计算机速度会快些;要一次性导入7584个图像文件,对整机的运算性能有很高的要求。 , d! q7 t8 q5 y y2 e& I8 E7 l
总之,等全部完成导入后,程序显示的画面就会恢复正常,这时最重要的是赶快按下「Save」按钮,输入一个文件名保存文件,如「font16」,没扩展名也没关系;不然突然断电你就倒霉了!
r+ Y$ _- Q7 m9 ~; @& U9 W/ e# O$ ?5 \6 J4 M. w
⒍最后当然是测试一下修改效果了,将新创建的帧包文件和码表文件,如「font16.dc6」和「font16.tbl」,复制到游戏安装目录下的data\local\font\chi文件夹中,替换原有的文件(请注意备份原文件!),进入游戏看看效果如何。
. O! \4 q. p. A1 b3 h# N2 N& i9 u5 m: f( `5 P
附各字体文件对应的显示内容:8 _. [" n$ G, e: _. y: [
font16:部分人物浮动属性值、所有物品浮动属性、技能树信息和按钮浮动信息等;
( M& y7 M! A. Z5 sfont24:游戏界面部分的副标题;
- R/ f( X! D% M1 N7 E- m3 afont30:游戏界面部分的大标题;4 N, [+ E1 E1 Z6 I4 `* m
font42:游戏存档标题人物名称;3 [8 a0 C7 _- {# i4 x" H) E2 S& T# K
font6:部分人物属性名、雇用兵姓名、召唤物名称和地图标示名称等;1 Z7 A, C$ f, v. O% Y# k/ Y1 i
font8:部分人物属性值、部分人物属性浮动说明;
3 ?/ n0 b2 L; }2 [% c# G9 K: ffontexocet10:游戏界面大按钮;& k" Y, w) D1 h1 y, {/ t
fontformal10:游戏制作人员名单、技能树的技能等级;
6 I& D0 \! T" b: ~4 {" Kfontformal11:任务窗口的任务名称及说明;6 b( l2 ?4 E9 w* L
fontformal12:游戏版权说明;
' O: S$ |0 Z9 H, t/ Bfontingamechat:游戏的消息记录;
+ m" A" I' d$ ?/ i4 e; xfontridiculous:游戏界面小按钮。 |
|