壓縮工具文件
文件版本1.01

0.簡介
1.命令列參數
2.壓縮工具功能
3.建立壓縮檔
 3.1 建立Script語法
4.附錄A-範例Script
5.附錄B
 5.1 遊戲規則
 5.2 Total Conversion
6.補充
7.聲明

0.簡介

"壓縮工具(Archive Tool)"是幹什麼用的? Archive Tool讓 modder 能夠把他們的資料打包起來,好配給到一般使用者的手上.他也讓 modder 能夠去建立劇情包和外加功能. Archive Tool 是一個命令列(command line)的工具程式.

這份文件敘述了如何去使用 Archive Tool

(譯註:萬艦齊發二所使用的 .big檔案和Relic所開發的另外一款遊戲"Impossible Creature"所用來儲存資料的 .sga 檔案格式是一樣的,唯一的差別只是副檔名不同而已.所以下面的介紹雖然會使用 .sga 來作為範例之用,但是對於 .big 來說也是一樣合用的.所需要的工具 archive.exe 可以在 Relic Developers Network 的萬艦二工具頁上下載,下載需要在RDN做免費的註冊.

另外,萬艦一代的 .big 檔案和二代的 .big 檔案格式並不相同,無法用 archive.exe 來做處理)

1.命令列參數

下面的表格列出了這個工具可用的參數,並且解釋各個參數的用途.加上< >的部分在實際使用時要換成對應的輸入參數.

參數 描述
-a <archive file>

開啟所指定的壓縮檔,<archive file>是壓縮檔的檔案名稱和路徑

-c <buildfile> -r <rootpath>

這兩個選項是用來建立壓縮檔. 所建立的檔案就是利用 -a 參數所指定的檔案.<buildfile>的部分是建立壓縮檔時所會參考的 build script 的檔案名稱和路徑. <rootpath>則應該設定成要打包進壓縮檔的檔案所在的資料夾路徑.關於 build script 的語法請參考第四節.

-l

列出利用 -a 參數所指定的檔案的內容

-e <extract location>

將 -a 參數所指定的檔案的全部內容(包括內含的資料夾)解壓縮到<extract location>所指定的位置

-t

測試 -a 參數所指定的檔案.這會計算儲存的檔案的CRC是否正確.

-hash 輸出壓縮檔的 hash.這可以用來作為辨認壓縮檔的依據
-v

可以和上面的任何參數合用.當使用時會顯示執行時所發生的所有可能的警告/錯誤.

2.壓縮工具功能

利用上面的命令列參數,可以達成壓縮工具的四個主要功能.這四個功能如下表所示:

功能 描述
建立壓縮檔

-a c:\archives\archive.sga -c c:\archives\buildarchive.txt -r c:\IC\Data

上面的範例會建立壓縮檔 c:\archives\archive.sga.建立檔案時所使用的 build script 是 c:\archives\buildarchive.txt .在 build script 中的檔案的所在的根目錄是 c:\IC\Data.其他有關於建立壓縮檔的細節可以在本文的第四節找到.

解開壓縮檔

-a c:\archives\archive.sga -e c:\archives\archivecontents

這個範例會將 c:\archives\archive.sga 這個壓縮檔的內容解壓縮到 c:\archives\archivecontents 資料夾中.除了全部的檔案都會被解壓縮開來以外,原本的目錄結構也會被重新建立起來

列出壓縮檔的內容

-a c:\archives\archive.sga -l

這個範例會頁出壓縮檔 c:\archives\archive.sga 的全部內容.他會列出資料夾和檔案的名稱,以及壓縮前壓縮後的大小.儲存的方法也會被列出.在參數後面增加" <destext> "的話,會把輸出寫入到 <destext> 這個檔案裡面,方便用Excel來做檢查.

測試壓縮檔

-a c:\archives\archive.sga -t

這會對壓縮檔進行測試.如果檔案的CRC和儲存的的版本不同,測試就不會通過.可以用來在傳檔案以後檢查檔案的完整性

3.建立壓縮檔

建立壓縮檔是相當複雜的工作, archive 工具會去檢查 build script的內容,以決定要在壓縮檔中加入哪些檔案以及加入的方式.這一節會解釋 build script 的語法以及其用途

3.1Build Script語法
Build script 是由四個部分組成的:壓縮檔資訊,TOC資訊,檔案設定,以及檔案列表.在 Build script裡面可以加入註解,方法是在該行的前面加上兩個斜線 // .在辨識檔案的時候,空行會被忽略掉.

語法:
Archive name="<archive name>"
告訴程式去建立一個壓縮檔.壓縮檔的名稱<archive name> 會被存放在檔案的標頭中.這個名字只是用來辨識檔案用.

TOCStart name="<name>" alias="<alias>" relativeroot="<relative folder>"
告訴工具要建立一個新的內容表(Table of Contents, TOC).TOC可以讓遊戲用來快速的得到壓縮檔裡面有哪些檔案,以及這些檔案的一些基本資訊,例如檔案大小. <name> 是用來辨識 TOC 用. <alias>則用來讓遊戲把壓縮檔裡面的檔案對應到遊戲的檔案系統;應該永遠都要設成 data. <relative folder>是和命令列參數 -r 一樣用來指定檔案的位置.如果 -r 參數已經指定了根目錄的話,這一項就可以留空.

FileSettingsStart defcompression="<default storage>"
開始檔案設定的區段.這個區段的設定包含了不同的檔案要如何被儲存在壓縮檔裡面,以及哪些檔案不會被存到壓縮檔裡面. <default storage> 參數應該設成你所希望的預設檔案儲存方式.這個參數的值如下表:

Ordinal 儲存方法
0

將檔案直接儲存不壓縮

1

將檔案壓縮,當讀取時同時進行解壓縮.使用在大檔案上.

2

將檔案壓縮,檔案會一口氣解壓縮後讀從記憶體讀回.適合用在小檔案上.尤其是 .lua 檔案

Override wildcard="<wildcard>" minsize="<minbytes>" maxsize="<maxbytes>" ct="<storage>"
用來設定某些特定檔案的儲存方式.這個指令可以執行好幾次,以代表你所希望的各種非預設儲存方式.第一項的 <wildcard> 設定要覆蓋過的檔案名稱,可以使用 * 和 ? (例: *.* 代表所有檔案, *.ucs 代表所有副檔名為 ucs 的檔案). <minbytes> 則是要設定的檔案的最小大小.不指定的話則設為 -1.<maxbytes> 則是要設定的檔案的最大大小.不指定的話則一樣設為 -1.<storage>參數則用來指定前三項參數所指定的檔案的儲存方式.

SkipFile wildcard="<wildcard>" minsize="<minbytes>" maxsize="<maxbytes>"
這個指令用來指定哪些檔案不會被加入壓縮檔中,也可以執行好幾次以代表不同的檔案.第一項的 <wildcard> 設定要跳過不儲存的檔案名稱,可以使用 * 和 ? (例: *.* 代表所有檔案, *.ucs 代表所有副檔名為 ucs 的檔案). <minbytes> 則是要設定的檔案的最小大小.不指定的話則設為 -1.<maxbytes> 則是要設定的檔案的最大大小.不指定的話則一樣設為 -1.

FileSettingsEnd
告訴壓縮工具檔案設定部份已經結束,接下來是檔案列表.

< file listing ...>
檔案列表可以包含任意數量的檔案.這些檔案可以用兩種方式被列出:
1) 相對於利用 -r 參數以及 TOCStart 指令 <relative folder> 所指定的根資料夾的相對路徑
2) 完整的檔案路徑.路徑必須包括在利用 -r 參數以及 TOCStart 指令 <relative folder> 所指定的根資料夾裡面

在你想要增加檔案進入壓縮檔的資料夾中,下這個 Dos 指令 "dir /s /a-d /b *.* > <filelist>".這會產生一個檔案列表,可以用來放到 build script 中. This can be used to generate a complete file listing since we don't support file additions using wildcards.

TOCEnd
這一行表示檔案以經全部列出,要開始建立壓縮檔.參考附錄A作為用來建立壓縮檔的 Script 的範例

4.附錄A-範例Script

在下列的目錄裡面有這些檔案:

這裡是用來建立壓縮檔用的 build script 檔案的內容
c:\temp\ Test.build.lst 的內容:

Archive name="ICTestArchive"

TOCStart name="ICTestData" alias="Data" relativeroot=""

FileSettingsStart defcompression="1"

// Anything less than 100 bytes, just store, don't compress
Override wildcard="*.*" minsize="-1" maxsize="100" ct="0"
// Any of these file types we just store, don't compress
Override wildcard="*.mp3" minsize="-1" maxsize="-1" ct="0"
Override wildcard="*.wav" minsize="-1" maxsize="-1" ct="0"
Override wildcard="*.jpg" minsize="-1" maxsize="-1" ct="0"
// Lua files we always compress, and then decompress in one shot
Override wildcard="*.lua" minsize="-1" maxsize="-1" ct="2"
// Skip all files that meet this criteria
SkipFile wildcard="*emptyfile.txt" minsize="-1" maxsize="-1"

FileSettingsEnd

// File specified relative to the root location passed in using the -r option
TextFiles\TestFile.txt
// File specified as a fully qualified path name
C:\Temp\test\SampleData.test

TOCEnd

下面是 archive tool 執行這個script 後畫面上輸出的訊息文字.
[c:\icpc\bin]Archive.exe -a c:\temp\test.sga -c "c:\temp\Test.build.lst" -r c:\temp\test
Parsing Build File 'c:\Temp\Test.build.lst'
Creating TOC Entry Name:'ictestdata' Alias:'data'
Parsing Compression Overrides
Adding All files to TOC
Writing Archive Header
Writing Archive Root Info
Writing TOC Entries
Writing Folder Entries
Writing File Entries
Writing String Data Base
Writing File Data
FileName
Compression Type
testfile.txt
Store
sampledata.test
Compress Stream
Calculating Hash
Build Operation took 0.80 seconds.

5.附錄B

萬艦齊發2的遊戲規則Mod(Game Rules mod)和 Total Conversion mod並不屬於自動下載的項目.所有的要加入遊戲的玩家都必須在啟動遊戲之前就將他們安裝好才行.

5.1 Game Rules
放在 bin\ GAMERULES 資料夾裡面的遊戲規則 Mod 會自動的被遊戲載入

5.2 Total Conversion
至於 total conversion mod, 你需要在萬艦二的執行捷徑加上下面的命令列參數(譯註:增加命令列參數的方法請看這裡的附註一)

-mod <你的第一個mod> ,;<你的第二個mod>

範例:
-mod modifiedUI.big ,;modifiedAI.big

你也可以把你全部的的Mod一行一行的列在一個文字檔案中,像下面這樣:

nameofyourmod
nameofyoursecondmod

範例:
假設mylistofmod.txt的內容如下:

modifiedUI.Big
modifiedAI.Big

你可以利用下面的命令列參數將這兩個Mod同時載入
-mod @mylistofmod.txt

6.補充
在RDN釋出的工具包中,並沒有包含執行 Archive.exe 必要的.dll檔案.到萬艦二安裝資料夾下的"Bin\Release"資料夾中尋找 msvcp70.dll 以及 msvcr70.dll 這兩個檔案,把他們複製到 archive.exe 所在的資料夾,這樣就他就可以正確的執行了.
7.聲明
本文件主要是翻譯自Relic Developers Network所釋出的"HW2_ArchiveTool.pdf".
翻譯者為西加拉宇宙載具改裝中心的CQD.原始文件版權為Relic所有.