《火炬之光2》各類型MOD文件修改方法

MEDIA文件夾內的文件大致有這些類型: DAT,LAYOUT,RAW,MESH,HIE,TEMPLATE,ANIMATION,SKELETON等.

除了以上這些類型外,還有圖片文件PNG和DDS,字體文件TTF和FONT,這兩類就不多做介紹了.

注意:所有文件名和後綴名都必須是大寫,否則遊戲無法識別!!!

1.DAT文件

DAT文件是當前可以MOD最主要的部分,也是最容易修改的部分,多數MOD教程都有對特點DAT文件的修改介紹,所以這里就只介紹一些基礎性的知識.

DAT文件首先需要使用dat2txt轉換成txt文件才能進行修改.新建txt文件也可以,但是要保證編碼格式為UTF-16,如果你沒有這個能力,還是修改轉換過來的txt文件來得簡單.dat2txt軟件建議使用py版本的,因為可以看到源代碼,並且有tl2_dat_strings.txt文件(exe版本不確定是否有),會很有優勢.

DAT文件的結構是一個嵌套型的結構,使用[XXX]…[/XXX]的結構來進行嵌套,其中XXX為相應嵌套關鍵字,省略號里的內容為此關鍵字下定義的數據.具體什麼時候需要進行嵌套,請自行參考相似文件.

一個DAT文件的嵌套結構可能是:

[A]

[B]

[/B]

[C]

[/C]

[/A]

這樣的多層結構,甚至更加復雜,所以在修改這樣的文件時,很可能因為嵌套對應錯誤而發生無法轉換的情況(技能修改常出現這個問題).

當你嵌套結構有誤時,其報錯方式是停留在dos窗口,並顯示類似如下的報錯情況:

《火炬之光2》各類型MOD文件修改方法

因此,只要你看見line XXX的錯誤,你直接到對應行找嵌套錯誤就可以了.

對於DAT文件內的一行數據,比如:

STRENGTH_REQUIRED:30

其中中的內容是數據類型,包括:

INTEGER:整型,也就是整數,一般來說應該是32位的,范圍為-2,147,483,648 到2,147,483,647.但是部分GUID的類型也是INTEGER,其實際為64位整型,也就是INTER64

INTEGER64:64位整型,范圍為-9,223,372,036,854,775,808 到9,223,372,036,854,775,807.所以寫GUID時千萬別超過這個范圍.

FLOAT:浮點數,也就是小數.

STRING:字符串型,也就是一組字符,比如一個路徑,一個名字等等.

BOOL:布爾型,只有兩個值,true代表真,false代表假.

TRANSLATE:翻譯型,也就是顯示在遊戲中的文字,如果是中文版的遊戲,這一項可以為中文.此外這一項還可以使用一些特定的關鍵字來調用遊戲內部參數,也可以用十六進制的顏色表示來設定顯示顏色.

和:之間的部分(例子中STRENGTH_REQUIRED)是關鍵字:

所謂關鍵字,就是定義這一項屬性是什麼,比如STRENGTH_REQUIRED就是這件裝備的力量要求.

一般關鍵字的選擇只能從同類文件中尋找,因為你所寫的關鍵字只要和系統內設定的有一點點不一致,就無法生效,並且有可能導致無法轉換回DAT文件.

但是有些時候盲目地找關鍵字會很麻煩,所以這里有一個小技巧:在tl2_dat_strings.txt中找,這個文件在py版的dat2txt中有.

tl2_dat_strings.txt中列出了所有已經解析出來的,可以轉換的可能關鍵字,如果某個關鍵字不在這個列表里,其在最後的txt文件中一定是以hash碼的形式存放的,比如0x9b4df640.

:後的部分是該屬性的具體值:

必須要滿足該值與數據類型的一致性才能進行轉換.

2.HIE文件

MEDIA文件夾內的HIE文件只有兩個:FEATURETAGS.HIE和UNITTYPES.HIE,前者可能是定義一些物件的,後者是定義物品類型的.

HIE文件也可以使用dat2txt進行轉換.

3.TEMPLATE文件

TEMPLATE文件是定義地圖類型的,完成部分地圖參數,地圖隨機性,地圖聲效,光影等方面的設定,上一級文件是DUNGEONS文件夾內的文件,下一級文件是通目錄下子文件夾內的LAYOUT文件.

TEMPLATE文件也可以使用dat2txt進行轉換.

4.ANIMATION文件

ANIMATION文件是定義模型動作參數的文件,可以使用dat2txt進行轉換.1代的模型有類似的文件,不過可以之間用記事本打開,移植時需要注意二代的ANIMATION文件會多一些參數,需要手動添加.

5.SKELETON,MESH文件

這兩個文件都是需要3D模型技術的,我並不會修改.1代模型移植時,兩者都可以直接移植.

6.RAW文件

MEIDA文件夾下的RAW文件一共7個,RAW文件可以使用raw2txt進行轉換,轉換後的文件格式與DAT文件轉換後的文件格式類似.

RAW文件是類似於注冊表的一個文件,用於將新添加的項進行注冊,有些項目如果不注冊,則添加無效.

不同的RAW文件的注冊方法不同,請根據同文件下其它項目的注冊方法進行注冊.

由於RAW文件有很多項目的含義仍不清楚(UNKNOWN項),所以當你要新加項目是,選用最接近項目的參數即可.

RAW文件還負責最底層的隨機,比如SPAWNCLASS文件夾的隨機掉落文件一般只到某類物品,比如UNIQUE WAND,這時候遊戲就會調用RAW文件中的RARITY參數進行掉落,RARITY參數與WEIGHT參數效果類似,越大掉落概率越高.

各個RAW文件注冊的內容:

AFFXIES.RAW:注冊詞綴,也就是AFFIXES文件夾下的內容,WEIGHT同樣決定了詞綴隨機到的概率.

MISSILES.RAW:注冊彈道,也就是MISSILES文件夾下的內容.

ROOMPIECES.RAW:注冊場景物品,也就是LEVELSETS文件夾下的內容.

SKILLS.RAW:注冊技能,也就是SKILLS文件夾下的內容.

TRIGGERABLES.RAW:注冊觸發器,也就是TRIGGERABLES.RAW文件夾下的內容.

UI.RAW:注冊用戶界面,是UI文件夾下的LAYOUT文件.

UNITDATA.RAW:注冊單位,是UNITS文件夾下的內容,包括物品,怪物,人物,觸發裝置.

7.LAYOUT文件

LAYOUT文件需要使用layout編輯器來進行修改,由於當前該編輯器功能很弱,所以可以修改的內容很少.當前所能做到的只有學習現有layout實現新功能.

首先介紹一下layout編輯器的界面:

《火炬之光2》各類型MOD文件修改方法

1:菜單欄:需要注意的是上面有搜索功能,初步確定想要修改的內容在哪就靠它了.

2.LAYOUT文件結構樹狀圖:定義了一個樹狀的結構,子節點可以看作是父節點的補充定義.

3.節點性質:TYPE ID為類型編號,TYPE NAME為類型名(很多都是UNKNOWN),Object GUID為此節點的GUID,Object Name為此節點名字(無關緊要),Child Count為子節點的個數,Parent Object為父節點的GUID.

4.已設置屬性:也就是在這一個項目中已經進行設置的屬性,最左邊的X可以刪除這一行屬性,然後從左到右是屬性編號,屬性名字(可以自己設定),屬性數據類型(可以自己設定,但可能引起錯誤),數據值.

5.未設置屬性:也就是在這一個項目中可以進行設置的屬性,最左邊的+可以添加這一行.

需要着重說明的兩個TYPE ID:

36: LOGIC GROUP

這個類型是定義邏輯關系的,比如一個按鈕按下後執行怎樣的操作等等,當前可以做的只有使用原有的邏輯來完成新的功能.

這一個節點中Child Count項變成了Logic Group Count.其每一個子節點為一個邏輯,每個邏輯可以完成一項或幾項功能,最簡單的為指向功能:

《火炬之光2》各類型MOD文件修改方法

右上角的Target Object GUID即為指向的單元.左上角為此邏輯在此邏輯組(Logic Group)內的編號.

下面的每一項為一個邏輯,也就是當指向單元滿足了Event項目內設定的內容時,Target Group所指向的單元執行Action內指定的操作.

35:TIMELINE

這個類型是定義時間軸的,里面的內容可能有所缺失,暫時修改起來有一定難度.

其它TYPE ID中數據類型的判斷:

當前layout編輯器非常粗糙,很多屬性都是沒有名字,沒有類型(默認為BINARY),這對我們修改layout文件很不利.

這里有一些小技巧可以判斷屬性的類型,但是在改變類型前一定要切記備份layout文件和layout編輯器下的ObjectMetadata.xml和NameMappings.xml文件.因為有些時候錯誤的數據類型會導致layout文件損壞以及layout編輯器工作不正常.

首先,當你看見XX-00-XX-00-XX-00-XX-00這樣的數據時,你可以嘗試將類型改為STRING,一般來說就能出現正常的字符串.但是有些時候並不會有效,這時候你可以嘗試刪掉最開頭的XX-00-,再進行轉換.這是因為,有些項目中會存儲這個字符串的長度(十六進制),也就是最開始的XX-00,你可以修改後,自行計算長度在轉換回BINARY後添加.

其次,當你看到XX-XX-XX-XX的數據時,你可以嘗試選擇INT32和FLOAT類型,具體選用哪種可以根據標綠的四個值來判斷,如果全為0或者全為F,一般是INT32類型,否則為FLOAT類型,當然,你轉換數據後,也可以從數據是否合理(比如特別大或者特別小的數據一般是錯誤的)得到一個大致的判斷.

記一個XX為長度1的話,如果數據長度為4的倍數,也就是4n時,你可以嘗試FLOATXY(8),FLOATXYZ(12),INT32XY(8),INT32XYZ(12).

如果數據長度為4n+2時,一般為float[]和int32[],其中最開始的兩個長度為後面的項目數(n).

更多相關內容請關註:火炬之光2專區

來源:遊民星空