• 2582阅读
  • 6回复

转自chinamods——Diablo II 字體製作修改,作者zdq88chm [复制链接]

上一主题 下一主题
离线花花
 
发帖
*
金钱
*
91币
*
信誉
0
资产
0 IST
在线时间
小时
注册时间
*
最后登录
*
只看楼主 倒序阅读 使用道具 楼主  发表于: 2007-09-08 19:42:59
各位Modder們,久違了!由於地府事忙,少有閑時,加之老Y太懶,論壇還是無定期掛了,故未有常來。好了,閑話少說,進入正題。
今天要說的是FONT的問題,也就是D2遊戲的字體問題。在此以前,熟悉D2MOD的朋友大概對遊戲的各個方面都改過了,但唯獨字體這塊大家恐怕從未接觸過,The Phrozen Keep那裏也少有人提及,也沒有相關的資料,而小站這裏也沒有這方面的內容。然而本小姐覺得應該將此空白填補了,經過幾番周折,終於對此有所了解了,且看下面的具體說明。

字體說明

对于现在的游戏而言,一般大都是调用特定的或系统的字体文件来显示字符文字。然而D2却别树一帜,它的字体文件非常特殊,是专用的,本来D2的英文版字体是非常另类又非常漂亮的,但对于中文版而言,暴雪并没有也不可能为汉字专门制作一套专用字体,成本太高了;而奥美的中文版所制作的字体又不堪入目,所以现今大都采用台湾松岗的字体;一直以来都有不少朋友想对这游戏的字体换换口味,这情况使得不了解情况的人很难去更改游戏的字体,原因是游戏采用帧包文件(DC6)与码表文件(TBL)结合的形式来显示文字,这会给修改带来非常大困难,下面来简单说明一下上述两种文件的数据结构:

帧包文件(DC6):
大家应该接触得比较多,它是若干幅尺寸大小各异或相同的图像帧按特定的数据结构打包在一起的压缩文件。此类文件在游戏中被广泛的使用,具体到字体来说,此种文件就是把游戏中会出现的所有各不相同的字符文字,以每字符一图像帧并按一定的顺序打包在一个文件中。文件名一般是"fontX.dc6"(X代表其它字符),英文版的所有这些文件中都包含着256幅图像帧,分别用来显示256个不同的字符或文字;而对于汉字来说,要包含多少幅图像帧,就不好说了,汉字大多了,恐怕谁也说不清汉字的具体个数,但一般常用的也还是GB2312字符集,也就是6763个汉字,其它的要用再加吧。

码表文件(TBL):
这可不是UI文件夹里的TBL文件哦,是FONT文件夹里TBL文件,虽然都是TBL的扩展名,但数据结构完全不一样,前者已有几个专用的编辑工具,而后者还没有呢。下面是码表文件的一般结构形式:

00000000→57 6F 6F 21 01 00 00 00 A0 1D 0C 00 20 00 00 03
00000010→0D 01 00 00 00 00 00 00 00 00 21 00 00 04 0D 01
00000020→00 00 01 00 00 00 00 00

byte1 - byte4 = 57 6F 6F 21
byte5 - byte8 = 01 00 00 00
以上8字节是文件头,是不变的;
byte9 - byte10 = 码表中包含的字符个总数,“A0 1D”就表示码表包含7584个字符;
byte11 = 字符的行间距;注意:行间距一定要等于或大于相应的图像帧上的显示的字体的高度,具体说,若图像帧上显示的字体的高度是12,那么行间距的取值是等于或大于12,否则到了游戏中,分行显示的文本就会变成一行叠加显示,什么效果?自己改一下该值试试吧!
byte12 = 未知作用,但通常取值为(十进制值)0、1、8、9、12、20;
接下来就是码表的具体内容信息,每14字节为一段:
byte1 - byte2 = 字符的Unicode编码,“20 00”就是半角的空格;注意:Unicode编码是指“Unicode little endian”的编码形式,就是通常说的“小尾”编码,不是“Unicode big endian”,也不是“UTF-8”。
byte3 = 00
byte4 = 字符的宽度
byte5 = 字符的高度
byte6 = 未知作用,但通常取值为(十进制值)0或1;
byte7 = 00
byte8 = 00
byte9 - byte10 = 字符的编号,与帧包文件中的图像帧排列相对应,编号从0开始;
byte11 = 00
byte12 = 00
byte13 = 00
byte14 = 00
以上14字节就是第一个字符的具体码表信息,其它字符的码表信息也如上述格式排列存储。
因此,帧包文件与码表文件就以这样的方式关联起来,字符与图像帧是按顺序一一对应的,任一文件出现错误,都无法正常进行游戏。

字體修改

通過以上簡單的說明,相信大家應該、大概、也許、猜想會有所瞭解吧。有了以上的基本資料,我們就可以對字體進行修改了。要想修改,首先當然要有工具了,但相應現成的工具恐怕只有幀包文件的編輯修改工具,而其它工具想必大家就找不到了,不要緊,本小姐都給大家搞了一點點工具,雖然是很少一點點工具,但夠用了。
相關主要工具:
DC6 Creator(幀包文件編輯修改工具,可以對圖像幀進行導入導出,創建全新的幀包文件,這裡我們主要使用它的「INI→DC6」的「批量導入圖像幀」功能。)
ExportPreviewImage(預覽圖像創建工具,用於創建一個例圖,來獲得第一手的圖像參數信息。)
ExportCharactersImage(字符圖像批量創建工具,用於批量創建所需字符圖像。)
ImportCharactersTBL(碼表文件創建工具,用於創建相應的碼表文件。)
ImportCharactersINI(圖像批量導入配置文件創建工具,用於創建一分符合用於DC6 Creator工具批量導入圖像幀的INI文件及目錄結構,以配合進行批量導入並最終生成幀包文件。)
ExportCharactersTBL(碼表信息導出工具,用於將碼表的基本資料導出到文本文件中,主要是輔助參考之用。)

其它輔助工具:
EditPlus
EmEditor
WinHex
……等等。

在主要工具中,除了DC6 Creator是鬼佬編寫的,其餘五個是本小姐編寫的,是用JAVA寫的,所以大家使用前請到SUN(昇陽)公司的主頁http://cn.sun.com/下載安裝其jre1.5.0.12(或更高版)運行環境,否則有可能無法正常運行程序;以上五個小程序都是控制台程式,想使用窗口程式的朋友請自己或找人重新用其它語言編寫吧,本小姐無能,只會一點點的JAVA,其它都不會,等有時間的話也許會將這幾個工具改寫成GUI的程式,在此之前只能說抱歉!
不管怎樣,反正有了上述六個主要工具,基本上就能實現對D2字體的創建及修改之用。下面具體的說明一下創建一種字體的操作全程:

先準定要創建那個字體文件,比如我們要創建新的「font16」字體,那麼我們只需要創建「font16.dc6」和「font16.tbl」這兩個文件就行了。
「font16」字體是遊戲中的主要調用字體,主要用於顯示人物屬性值、物品屬性、技能說明等等的窗口寫屏信息,因此用途最廣泛;
「font16」字體是黑底白字,大小一般是12,字符圖像尺寸一般是12(寬)×12(高),最好不要超過14,不然在遊戲中顯示的字符就會變得很大,畢竟遊戲的最高分辨率只有800×600,因此特別要主意;

⒈用預覽圖像創建工具生成某個字符的圖像看看,執行"預覽圖像創建工具.bat"運行工具;
按提示輸入一個字符,如字母「g」;
「字體名稱」輸入字符欲採用的顯示字體的具體名稱,如「微軟雅黑」;
「字體字形(0[常規],1[粗體],2[斜體],3[粗斜體])」輸入對應的數字,如「0」;
「字體大小」輸入具體的大小值,如「12」;
「字體顏色 - R值(0-255)」、「字體顏色 - G值(0-255)」、「字體顏色 - B值(0-255)」分別按RGB的色域輸入色值,如字體是白色的,則分別輸入「255」、「255」、「255」;
「圖像寬度」適當輸入,如「12」;
「圖像高度」適當輸入,如「12」;
「圖像背景色 - R值(0-255)」、「圖像背景色 - G值(0-255)」、「圖像背景色 - B值(0-255)」亦如前面一樣輸入,如黑色是「0」、「0」、「0」;
「圖像文件類型(JPG,PNG,BMP,GIF)」輸入括號中的四種類型名稱之一,如「bmp」;
「預覽文件輸出路徑與文件名」按實際輸入,如「d:\tmp.bmp」;
「X偏移量」是以圖像左上角為原點,取值從0開始,左偏移為負值,右偏移為正值,如「0」;
「Y偏移量」是以圖像左上角為原點,取值從0開始,從輸出字符實際尺寸:8(寬)×15(高)來看,字符的高度顯示高於圖像的高度,因此我們輸入「9」;
全部輸入數據後,字符的圖像文件就會生成了,快到其輸出目錄看看是什麼樣吧。X和Y的偏移值可能要多試幾次才可獲得適當的圖像,因此請記下這兩個重要的數值,接下來要用到的。

⒉用字符圖像批量創建工具按要求一次性生成所有需要的字符的圖像文件,執行"字符圖像批量創建工具.bat"運行工具;
「字符列表(txt)目錄與文件名」按實際路徑輸入字符列表文件的名稱,這個「字符列表」文件是一份包含了所有的需要用到的字符,是以Unicode編碼保存的文本文件,每個字符占一行,隨工具一起我提供了一份字符列表文件樣板"mb.txt",該文件包含了GB2312的6763個漢字字符及821個其它字符,共7584個字符,合7585行(注意:行數一定要比字符數多1!)。比如這裡輸入「d:\mb.txt」;
「圖像文件輸出目錄」輸入這些圖像文件的輸入文件夾路徑,如果文件夾不存在會自動新建,如輸入「d:\00」;
「圖像文件類型(JPG,PNG,BMP,GIF)」這裡雖然可以生成四種格式的圖片,但DC6Creator只支持256色的BMP、GIF、JPG、PCX、TIF五種格式,而我寫的程式雖然可輸出JPG文件,但不是256色的,所以你只有兩種格式可選了,如輸入「bmp」;
其它按實際輸入即可,完成後就能獲得所需的字符圖像文件和一份「字符列表文件名_tbl.txt」的文本文件,例如「mb_tbl.txt」,這份文件包含了所有的具體字符及其按字體大小輸出的實際的寬度值和高度值,此文件稍後也要用到。

⒊用碼表文件創建工具創建新的碼表文件,執行"碼表文件創建工具.bat"運行工具;
「標準字符表文件(txt)路徑與文件名」這裡輸入的就是上面所說的新生成的那個「字符列表文件名_tbl.txt」文件的具體路徑名稱,但在此之前要對該文件進行修改,用文本編輯工具將文件裡的第三列數值改成輸出圖片的實際高度值,這個數值一般都大於實際高度值,因此要更改後再使用。如輸入「d:\mb_tbl.txt」;
「碼表文件(tbl)輸出路徑與文件名」按實際輸入,如輸入「d:\font16.tbl」;
「字符行間距」按實際輸入,如輸入「12」;
接著隨便輸入剩餘的兩個未知數值,即可完成碼表文件的創建。

⒋用圖像批量導入配置文件創建工具創建一份INI文件,執行"圖像批量導入配置文件創建工具.bat"運行工具;
「配置設置目錄」輸入一個目錄路徑名,如輸入「d:\」;
「DC6文件名稱」輸入要具體創建的DC6文件名稱,如輸入「font16.dc6」;
「圖像文件總數」按實際輸入,如輸入「7584」;
「圖像文件類型(JPG,PNG,BMP,GIF)」按實際輸入,如輸入「bmp」;
「圖像寬度」、「圖像高度」也按實際輸入即可,全部完成後,在相應的目錄下就會創建一個「DC6文件名_圖像文件類型」這樣的文件夾,具體到這個例子,我們會在D盤下找到「font16_bmp」的文件夾,裡面有一個「font16_bmp.ini」文件和一個「00」文件夾,這樣的目錄結構與用DC6Creator工具全部導出DC6文件後的目錄及文件結構完全一樣,再把之前生成的所有字符圖像文件全部移到此目錄中的「00」文件夾裡,就萬事俱備了。

⒌用DC6 Creator工具將所有字符圖像文件導入並生成新的幀包文件,在此操作前提配CPU和Memory性能不高的朋友,最好先重啟系統再進行操作;
運行DC6Creator工具,點擊「INI->DC6」按鈕,選擇先前創建好的INI文件,之後就請大家關閉顯示器,到客廳看看電視或聽聽音樂吧,原因是這個過程要等上一段時間,高性能的計算機速度會快些;要一次性導入7584個圖像文件,對整機的運算性能有很高要求的,我的老爺機是早期的AthlonXP 2000+和768 Memory,整個過程大概耗了15分鐘左右,如果是Athlon643000+的話也要7分鐘左右,然且圖片的尺寸越大,時間也越長,我不知道這是不是程序計設上的問題,現在搞不明白,雖然作者提供了源代碼,但我對.net下的C語言不懂,看不明白,希望精通這方面編程的朋友研究一下。
總之,等全部完成導入後,程序顯示的畫面就會恢復正常,這時最重要的是趕快按下「Save」按鈕,輸入一個文件名保存文件,如「font16」,沒擴展名也沒關係;不然突然斷電你就倒霉了!

⒍最後當然是測試一下修改效果了,將新創建的幀包文件和碼表文件,如「font16.dc6」和「font16.tbl」,複製到遊戲安裝目錄下的data\local\font\chi文件夾中,替換原有的文件(請注意備份原文件!),進入遊戲看看效果如何。

OK!如果大家有興趣的話,就馬上行動吧,如果有漂亮的、另類的漢字字體的,記得做出來給大家分享哦!
以上內容和工具我已傳給老Y了,老Y經該會提供一個小站鏈接給大家的,在此可到我的FreeRom下載DiabloII_Font_Tool_Set
再加一個修補包,是對輸出的字符圖像加上抗鋸齒效果,之前寫得比較匆忙,忘了將這一效果加上了。


效果圖一


效果圖二


效果圖三

[ 此贴被sanmusoft在2008-06-28 21:25重新编辑 ]
离线crazy-boy
< OATH战队 >
发帖
2035
金钱
10096
91币
15
信誉
0
资产
0 IST
在线时间
556 小时
注册时间
2007-08-25
最后登录
2024-01-16
只看该作者 沙发  发表于: 2007-09-08 21:47:29
花花太有才了
离线风之狐
发帖
5873
金钱
36
91币
0
信誉
0
资产
0 IST
在线时间
853 小时
注册时间
2007-08-25
最后登录
2023-07-06
只看该作者 板凳  发表于: 2007-10-11 15:13:18
姐姐好强


还是习惯叫mm
离线寂寞烟灰
发帖
1174
金钱
2712
91币
0
信誉
0
资产
0 IST
在线时间
694 小时
注册时间
2007-10-25
最后登录
2020-02-26
只看该作者 3楼 发表于: 2007-10-27 12:51:45
侬太有才了
离线allenkoo
发帖
135
金钱
3
91币
0
信誉
0
资产
0 IST
在线时间
62 小时
注册时间
2008-08-19
最后登录
2012-03-20
只看该作者 4楼 发表于: 2008-08-29 16:48:37
花花。。强者啊
离线有个网友
发帖
126
金钱
32
91币
0
信誉
0
资产
0 IST
在线时间
64 小时
注册时间
2007-10-12
最后登录
2013-06-12
只看该作者 5楼 发表于: 2008-10-08 17:03:05
mm太有才了
离线alee88
发帖
1
金钱
0
91币
0
信誉
0
资产
0 IST
在线时间
0 小时
注册时间
2008-09-29
最后登录
2008-10-10
只看该作者 6楼 发表于: 2008-10-10 12:19:50
链接不好用呀!
快速回复
限100 字节
 
上一个 下一个