遊戲規則MOD (GAME RULE MODS) |
|||||||||||||||||||||||||||||||||||||||
簡介 |
|||||||||||||||||||||||||||||||||||||||
簡介 | |||||||||||||||||||||||||||||||||||||||
這份文件解釋如何為萬艦二的引擎建立新的遊戲規則(Game Rule).遊戲規則 Mod 是一種定義了多人遊戲規則的 Mod .不要將遊戲規則 Mod 和指令列 Mod (command-line mod)搞混了.指令列 Mod 會在另外一份文件中提到. 這一份文件附帶了一個用來當作範例的遊戲規則 Mod "Resource Race",你可以從http://www.relic.com/rdn/取得.這個遊戲模式非常單純,第一個採集到足夠數量資源的人得到勝利.我們會利用這個Mod來說明:
|
|||||||||||||||||||||||||||||||||||||||
需求 | |||||||||||||||||||||||||||||||||||||||
要建立一個遊戲模式Mod,你會需要下列這些工具和文件.這些檔案都可以在http://www.relic.com/rdn/取得. Archive.exe — 用來建立.big檔的工具.遊戲模式 Mod 要以這種格式來工作. (譯註:你可以透過下列的連結直接取得這些資源:SCAR文件 , ResourceRace的原始內容 , ResourceRace.big) |
|||||||||||||||||||||||||||||||||||||||
實作概觀 | |||||||||||||||||||||||||||||||||||||||
遊戲模式Mod會製作成 big 檔案,也就是一個壓縮檔(副檔名是 .big),並存放在 bin\GAMERULES 資料夾下.在萬艦二啟動的時候,會去掃描這個目錄,並且從任何找到的big檔案中載入有關的敘述資訊.當建立一個多人遊戲或是和CPU對戰的遊戲時,使用者可以選擇可用的遊戲模式.最基本的遊戲方式-死鬥模式-總是會顯示出來.而任何在這台電腦上找到的遊戲模式也會加入到可用遊戲模式的列表中. 不論是透過Gamespy或者是區域網路LAN連線,在多人連線大廳中會顯示遊戲規則的名稱.如果要連線的電腦沒有對應的.big檔,那就不能加入使用那些規則的遊戲. 當遊戲開始的時候,big檔會被載入,存在於遊戲的主要big檔案(像是Homeworld2.big)中的檔案若是和這裡的檔案有所重複,那麼遊戲本身的資料將會被忽略,會以所載入的遊戲模式Mod的檔案為主. |
|||||||||||||||||||||||||||||||||||||||
BIG檔案格式 | |||||||||||||||||||||||||||||||||||||||
Big 檔案格式是一種用來把一堆檔案打包成一個大檔案的方法.這樣會讓讀取的速度比較快,並且也會讓遊戲的配給比較容易.在 big 檔案中,有很多的檔案被編排成不同的 TOC (Table of Content,這裡意指排列成表的資料內容).遊戲規則 Mod 最少需要一個 TOC : data.在 data 中至少需要一個檔案:LevelData\Multiplayer\<遊戲規則>.lua.其中<遊戲規則>就和你要新增的遊戲規則名字相同.這個檔案為你的Mod定義了多人遊戲的遊戲規則,指定需要的選項,以及其他項目. 在表格中可以有任何數量的關卡(level)檔案,方言化資訊,甚至是其他一般性的資料,像是新的船隻. |
|||||||||||||||||||||||||||||||||||||||
<遊戲規則>.LUA | |||||||||||||||||||||||||||||||||||||||
要定義一個新的遊戲模式,你需要建立一個<遊戲規則>.lua檔案,並且把他放在 Data/LevelData/Multiplayer 目錄下.這個檔案可以被放在打包成 big 檔的mod裡面,或者是直接放在硬碟上.不管怎樣都必須放在 LevelData/Multiplayer 內.在啟動的時候遊戲會建立這個檔案的 MD5 checksum,可以用來作為辨認檔案用,確保在多人遊戲中每個玩家的這個檔案都會相同. <遊戲規則>.lua 的格式如下:
表格"GameSetupOptions"的格式如下
這個檔案後面的部分(包括 OnInit 函式)是標準的 SCAR 碼.請參考 SCAR 文件以瞭解有哪些函數可以使用. |
|||||||||||||||||||||||||||||||||||||||
MOD的方言化(Localization) | |||||||||||||||||||||||||||||||||||||||
對於遊戲規則 Mod 來說,你可以藉由建立一個內有許多 TOC 的壓縮檔來加入方言化的內容.如果這些TOC中有一個被 alias 到 "locale"去,那麼他就會改變 locale 內的資料(譯註,遊戲內預設 locale 是對應到 "萬艦二安裝資料夾\data\Locale\English" 這個資料夾下).你也可以在 Mod 中加入不同的語言,方法是將數個 TOC 的 alias 都定義成 "locale".而 TOC 的名稱代表了對應的語言.要注意的是,由於在所有載入的檔案中的 TOC 的名稱都必須不同,所以你應該確保你將語言的名字以及 Mod 的名稱/版本包含在 TOC 的名稱中. 當一個壓縮檔中有許多的 TOC 時,只有萬艦二目前所使用的語言會被對應到檔案系統的 "Locale" 這個位置.如果沒有指定目前的語言的話,會自動指定為 "English".如此一來就可以讓使用不同語言的玩家使用同樣的 Mod 互相對戰.使用不同語言的玩家在畫面上會看到不同的文字,並且不會發生不同步的狀況. 請參考未壓縮的 Resource Race 資料裡面的 script來當作建立內含數個 TOC 的範例. 要注意的是,保留給遊戲規則 Mod 的方言化 ID 範圍是 8000-8999,因此你所使用的方言化 ID 應該要在此範圍內,以避免發生問題. |
|||||||||||||||||||||||||||||||||||||||
建立遊戲規則 | |||||||||||||||||||||||||||||||||||||||
在 <遊戲規則>.lua 裡面的 OnInit() 函式中,你應該去執行需要的起始化動作,並且建立至少一個監視函式(watch function).監視函式會在每個 simulation step 被呼叫,用來確認遊戲的結束條件.你也可以隨著遊戲的進展增加或是移除額外的規則. | |||||||||||||||||||||||||||||||||||||||
顯示特定的螢幕介面 | |||||||||||||||||||||||||||||||||||||||
在你的 <遊戲規則>.lua 中,你可以藉著由 watch function 去呼叫 ATI_xxx() 函式,以顯示特定的介面.達成的方法是去呼叫 ATI (Advanced Tactical Interface,進階戰術介面)的 SCAR 函式.請參考 SCAR 文件以瞭解有關於這些函數的更多資訊.並參考 Resource Race 來當作其用處的範例. 簡單的說,你需要載入一個檔案,這個檔案裡面描述了一個或數個內含要顯示的項目的 ATI 樣本(template).你的 script 可以在螢幕上指定的 2D 位置顯示這些樣本,並且有一些選項可供調整.s |
|||||||||||||||||||||||||||||||||||||||
聲明 | |||||||||||||||||||||||||||||||||||||||
本文件主要是翻譯自Relic Developers Network所釋出的"HW2_GameRuleMods.pdf". 翻譯者為西加拉宇宙載具改裝中心的CQD.原始文件版權為Relic所有. |