查看遊戲檔案有助於深入了解遊戲機制,也可以提供更高質量的貼圖以在本 wiki上使用。遊戲檔案可以透過 Steam 找到,只需在庫中右鍵的缺氧,然後點擊「屬性」、「本地檔案」、「瀏覽...」
存檔檔案[]
存檔檔案是玩家接觸最多的遊戲檔案之一。取得存檔檔案有助於備份遊戲進度以及在報告錯誤時復現問題。以下是不同作業系統下遊戲存檔檔案所在的快速導航:
- Windows:
C:\Users\%USERNAME%\Documents\Klei\OxygenNotIncluded\save_files - Mac:
~/Library/Application Support/unity.Klei.Oxygen Not Included/save_files - Linux:
~/.config/unity3d/Klei/Oxygen Not Included/save_files
代碼[]
您需要一個 C# 反編譯器來查看遊戲代碼。常用的反編譯器有 dotPeek,ILSpy 和 dnSpy (它們各有優劣,因此有人會結合使用)。它們可以被用來反編譯 OxygenNotIncluded_Data/Managed/Assembly-CSharp.dll。 這個檔案中包含大部分的遊戲代碼。一些與引擎相關的代碼在同一資料夾下的 Assembly-CSharp-firstpass.dll 檔案中。
請注意,反編譯的代碼不像普通的原始碼那樣容易閱讀,因此某些部分可能難以理解(例如,局部變數名稱是反編譯器推斷出的,並且所有註釋都會丟失)。以下是有關代碼結構的一些提示:
STRINGS是一個很確定起點。您可以先搜尋遊戲內的一個名稱,然後變數名會告訴您代碼中該物體的名稱。例如,冰息蘿蔔(Wheezewort)叫做 Coldbreather。TUNING包含很多平衡資訊。但由於編譯器優化,有時不能連結到使用它的代碼。- 大多數遊戲代碼都在根命名空間中。
- 大多數實體的代碼都有兩個對象。一個主要對象,它通常處理它們的狀態機資訊(狀態機控制它們的行為),以及一個
Config對象,它設定它們的大部分組件並分配數值。主對象有助於理解行為,而Config有助於理解數值平衡。 - 有時您會遇到以長數字形式發送的消息,它們是哈希值。您可以在
GameHashes、SimHashes、SimMessageHashes等類中查找更多資訊。 - 有時 dotPeek 不能很好地反編譯某些代碼,而將其顯示為許多編譯器自動生成的字段。dnSpy 通常可以更好地處理這些部分。
如果你想批量提取遊戲內的一些資料,可以藉助一些github上的項目,比如Oni_Extract。
- 在開始工作前,你需要對你代碼中所需要存取的一些關鍵類的私有函數(
private),使用dnSpy修改為公共函數(public),重新編譯後複製OxygenNotIncluded_Data/Managed/Assembly-CSharp.dll和Assembly-CSharp-firstpass.dll這兩個檔案到Oni_Extract項目的庫目錄lib中進行替換。 - 你需要透過寫一些C#代碼來導出你想要導出的資料。
IEntityConfig為實體類的接口,大部分在遊戲沙盒中能生成的對象,都繼承自這個接口。 - 關注用
Component和Def為關鍵字命名的資料類型,這些與定義遊戲對象實體的各類屬性有關。
配置檔案[]
遊戲的大多數配置資訊和一些簡單的平衡資料可以在 OxygenNotIncluded_Data\StreamingAssets 的子資料夾中找到。這些檔案大多數為 YAML 格式。
codex: 遊戲內右上角的資料庫dlc: DLC 專用的模板和地圖生成資訊elements: 元素的屬性。其中含有每一種元素的localizationID(對應的中文字串可以在strings中找到),比熱容,光吸收率等屬性。strings: 遊戲內出現的各種文字。在嘗試理解代碼時很有幫助,因為它可以把 context 對應到文字(比如代碼中的STRINGS.BUILDINGS.PREFABS.LADDER.DESC對應到中文就是 "(那意味著他們能在上面爬。)")。該檔案也是本 wiki 所有譯名的來源。templates: 遊戲內的結構,有些會在worldgen中被用到。worldgen: 世界生成資訊。
資產[]
OxygenNotIncluded_Data 資料夾下的一系列 .assets 檔案包含有所有的美術資源和部分的平衡資料。這些檔案可以使用 Unity Assets Bundle Extractor 或是 AssetStudio 打開。提示:在 Unity Assets Bundle Extractor 中,您可以使用游標從右側開始拖動開框選多個需要批量提取的檔案,或者使用 Ctrl 或 Shift 與游標左鍵或方向鍵搭配。
資產提取器可以將紋理提取為 png 圖像,這對於取得 Wiki 上使用的資源很有用。你也許會發現提取出的圖片每一張中都包含多個對應物體的組件(比如哈奇對應的圖片中有很多不同樣子的哈奇的腿)。與 TextAsset 中的 *_anim 和 *_build 結合使用後,這些組件可以用來重建更複雜的紋理並重播動畫。透過一個(國人大神開發的)工具[1],每三個對應的檔案(png,anim,build)可以生成一個 .scml 項目。這個項目可以在 Spriter 中打開(它的基本版(Essential Edition)可以從 steam 中的 Don't Stave Mod Tools 中免費獲得),並可以導出一系列對應的 png 檔案。專業版(Pro Edition)的 Spriter 可以直接導出 gif 動圖[2]。
*_anim 和 *_build 可能是一種 科雷的專用格式,經檢查似乎與他們在饑荒(聯機版)中使用的格式相似。在 Assembly-CSharp-firstpass.dll檔案中的KAnim 有可能含有此格式的更多資訊。這個為饑荒開發工具可能可以作為起點來開發一個供缺氧使用的工具並用它來解讀這些 anim 和 build 檔案。
注意,有些紋理的名稱可能不那麼顯而易見。比如 cuprite 代表銅礦(copper ore),CookedEgg 代表煎蛋(omelette)。使用配置檔案中的 strings 檔案可以幫助確定它們的對應關係。另外,大寫字母在排序時會排在所有小寫字母前面。ID 和資產中的對應名字的大小寫有時候不完全相同,比如煎蛋的 ID 是 CookedEgg 但是它對應的資產的檔案名是 cookedegg 。