移至主內容
DarkRanger's Secret Area

主導覽

  • 首頁
  • 關於本站
  • Linux
  • 程式開發
  • N900
  • 譯文
  • 資訊技術辭典

文章分類

  • 影劇
  • 遊戲
  • 筆記
  • 雜文
  • 資訊技術
  • 站務訊息

最新內容

  • 早期 Unreal Engine 在 Linux 下的開發環境建置
  • 【自製】CrankMode
  • How-To:Linux 安裝 KFMod
  • 20 years of Intel Macs
  • rsync and outrage
  • Email is crazy
  • How-To:Linux 安裝 Arma: Cold War Assault
  • How-To:Linux 安裝 Torchlight II
  • RPM Fusion 手動找尋及安裝舊版套件
  • USB for Software Developers: An introduction to writing userspace USB drivers

導航連結

  • 首頁
  • 程式開發專區
  • 遊戲休閒類
  • 早期 Unreal Engine 在 Linux 下的開發環境建置

早期 Unreal Engine 在 Linux 下的開發環境建置

發表日期:星期四, 09/03/2026 - 23:03

前一陣子因為玩遊戲時遇到的某些需求,覺得恐怕還是得靠自己寫程式的方式處理,於是就初步栽進了 Unreal Engine 早期版本的世界裡。也就是如今都已採免費發佈的《浴血戰場》(Unreal Tournament,1999)及《浴血戰場 2004》(Unreal Tournament 2004,2004)這兩款遊戲,分別是使用第一代及第二代的 Unreal Engine 開發而成。

 

由於遊戲本身一直以來都有部份的原始碼開放(UnrealScript),可讓人進行修改及延伸。再加上這兩款遊戲已經免費化,並且交由經過特許的社群團隊繼續維護遊戲引擎,使其依然能夠在現代的系統環境上運作。所以倘若可以接受在這樣的框架下做延伸開發,那麼這兩款遊戲其實就代表著兩款免費的跨平台遊戲引擎,開發者可以用來建構出自己想要的東西。

 

 

只是雖然遊戲本身是跨平台的,無論是早期官方、或者後來社群接手維護的版本,都有為 Linux 平台提供原生支援。然而在開發這一塊,比方說遊戲隨附的 UnrealEd 編輯器,卻始終只有 Windows 版,所以看似 Linux 不太像是一個可行的開發環境。不過嘗試了一陣,覺得大致上其實是可行的,DR 沒有在研究及編寫 UnrealScript 的過程中,遇到無法在 Linux 系統上實現的事情,於是本文便是一些學習歷程的簡約筆記。

 

1. 安裝遊戲

獲取遊戲程式就是獲取了遊戲引擎,所以遊戲要先安裝起來,並且確認為可運作的狀態。取決於具體想要使用的的是哪一款遊戲(以及其引擎版本),《浴血戰場》(以下簡稱 UT99)的 Linux How-To 在此,以及《浴血戰場 2004》(以下簡稱 UT2004)的 Linux How-To 在此。

 

2. 程式碼編輯器

雖然實際上是任何的文字編輯器都可以使用,不過如果想要看得賞心悅目一點,則可以使用例如 Visual Studio Code 搭配第三方的 UnrealScript 支援套件。

 

3. 使用 UCC 編譯 UnrealScript

UCC 是遊戲隨附的命令行工具,而且有 Linux 版本。而它的眾多功能之一,便是能夠將 UnrealScript 的 *.uc 原始碼編譯至 *.u,所以這是開發環境得以在 Linux 上運作起來的重要基礎。

 

舉例來說,若要將名為 Foobar 的套件編譯起來,便將該套件的所有 *.uc 原始碼放置到遊戲安裝目錄下的 Foorbar/Classes 子目錄中。然後針對 UT99 的流程,首先是編輯遊戲隱藏目錄內的 *.ini(~/.utpg/System/UnrealTournament.ini),找尋到其中的 [Editor.EditorEngine] 區段,新增以下設定值:

EditPackages=Foobar

 

接著便執行 UCC make:

  • ~/ut/System64/ucc-bin make Foobar

 

若執行無誤,編譯出來的 Foobar.u 會位於遊戲隱藏目錄「~/.utpg/System」內。至於若出現錯誤,則進一步的錯誤細節,可能會列於 UCC 的日誌檔(~/.utpg/System/ucc.log)內。

 

重新編譯時,原有已編譯的 Foobar.u 必須要先刪除,否則 UCC make 不會有動作。所以整個過程有可能寫成 Bash 腳本會比較好,然後執行過程中先明確地刪除現有的已編譯檔案:

  • rm ~/.utpg/System/Foobar.u
  • rm ~/ut/System/Foobar.u

 

UT2004 的編譯流程則基本上與 UT99 一致,需要編輯的設定檔為「~/.ut2004/System/UT2004.ini」,編輯內容相同,以及執行 UCC make 的指令如下:

  • ~/ut2004/System/UCC make Foobar

 

編譯出來的 Foobar.u,以及一併產出的 Foobar.ucl,皆位於隱藏的「~/.ut2004/System」下。同樣地,UCC 日誌檔(~/.ut2004/System/ucc.log)內會記錄更多執行細節,包含可能更進一步的錯誤資訊。以及重新編譯前,同樣會需要先清除現有的已編譯檔案:

  • rm ~/.ut2004/System/Foobar.u
  • rm ~/ut2004/System/Foobar.u

 

除此之外,如果想僅僅從 *.u 產出 *.ucl、而非 *.uc 重新編譯的需求,則使用 UCC exportcache 的指令範例如下:

  • ~/ut2004/System/UCC exportcache ~/ut2004/System/Foorbar.u

 

4. 獲取官方的 UnrealScript 原始碼

如本文前面曾提及的,UT99 及 UT2004 都有將遊戲中使用 UnrealScript 編寫的部份開放出來,作為其 SDK(software development kit,軟體開發套件)的一部份。雖然年代久遠,不過網路上仍可以找到許多複本,上傳至各種不同的地方,可以自行找尋看看。例如以下位址:

  • https://github.com/Slipyx/UT99
  • https://github.com/Deaod/UT2004

 

5. 反編譯 UnrealScript

除了官方的 UnrealScript 原始碼外,網路上也有許多的擴充模組(mod)或變異器(mutator)程式,只是它們往往並未提供原始碼可供研究。所以一個直接的手段,就是找尋 UnrealScript 的反編譯工具,例如 UE Explorer。儘管這個使用 .NET 開發的工具程式,並未提供 Linux 版本,不過透過 Wine 相容層則是可以運作的。只是前提是得在 Wine 執行環境裡安裝所依賴的 .NET Framework 版本,而無法單純使用 Wine Mono 來執行。

 

可以透過 winetricks 腳本程式來便利地進行 .NET Framework 的安裝步驟,完成安裝後,再前往 UE Explorer 所在目錄,執行以下指令:

  • wine UEExplorer.exe

 

雖然還是會有一些錯誤訊息顯示出來,不過諸如 *.u 載入及匯出 *.uc 等功能,則確實是能夠運作的。此外可能無法保證,反編譯出來的原始碼,都能夠正常無誤地再編譯回去,或許會再需要經過部份的人工修正。

 

6. 編寫 UnrealScript 的注意事項

首先或許蠻容易發覺出來的,是 UnrealScript 的程式碼是不區分大小寫的。所以倘若開發者平常是熟練於其它更加嚴謹的程式語言,那麼顯然是需要適應一下。以及開發者若是偏好在 Linux 下使用 grep 去對整個程式碼目錄做內文搜尋,那麼也就需要留意 UnrealScript 是有如此特性。於是可能要用對參數,才好抓出更多想找的東西。

 

接著另一個需要留意之處,是儘管似乎能夠從多種不同的類別(class)來源呼叫出相同的功能,但其實某些類別及方法是僅有伺服器端能夠存取。這在單人遊戲裡也許不會注意到,然而倘若有多人遊戲的需求,則編寫的程式碼需要留意能否確切在客戶端上執行出想要的結果,否則就必須找尋正確的類別來使用。

 

UnrealScript 有內建一個 Log() 函式,能夠用來寫入指定的文字訊息到遊戲執行的日誌檔中,以便進行程式碼執行狀況的判讀。UT99 的日誌檔位置為「~/.utpg/System/UnrealTournament.log」;UT2004 則為「~/.ut2004/System/UT2004.log」。

 

儘管本文並未包含任何的程式碼範例,不過或許可以稍微參考 DR 自製的兩個變異器(CrankMode 及 KFNewbieMode),其內都附有原始碼可做參照。

 

7. 檢視 *.utx 材質檔

有些時候可能會想要瞭解,程式碼中所載入的材質(texture)究竟長什麼樣子,以及能否在無須開啟遊戲的情況下進行檢視?所幸有一個跨平台的第三方工具程式能夠做到:UE Viewer。下載並解開其 Linux 版本後,可以使用例如以下指令來檢視材質檔內容:

  • ./umodel -list ~/ut2004/Textures/WeaponSkins.utx
  • ./umodel ~/ut2004/Textures/WeaponSkins.utx AssaultTex0

 

8. 將 *.ut2 地圖檔匯出至純文字格式

雖然由於遊戲隨附的 UnrealEd 編輯器並未移植到 Linux 平台上,所以並無原生的 Linux 程式可用於檢視地圖檔。不過倘若僅是要查找地圖上的部份資訊,則一個替代方案是將地圖檔匯出至純文字格式。使用 UT2004 的 UCC 執行範例如下:

  • ~/ut2004/System/UCC batchexport DM-Deck17.ut2 Level t3d output/

 

其中需要留意,在前述指令裡,檔案位置是自動從遊戲目錄的 Maps 子目錄裡做搜尋。所以並不是輸入相對路徑或絕對路徑,而是只要輸入檔名本身即可。以及最終輸出的文字檔案(*.t3d),以前述範例來說,則會位於「~/.ut2004/System/output」目錄內。

 

9. 擴充模組相關之操作方式

以 UT2004 為例,假設要為 KFMod253 模組重新編譯 KFMod 套件(如果有該套件的原始碼位於 ~/ut2004/KFMod253/KFMod/Classes 目錄下),則 UCC make 指令為:

  • ~/ut2004/System/UCC make KFMod -mod=KFMod253

 

以及匯出模組地圖至純文字格式的指令範例如下:

  • ~/ut2004/System/UCC batchexport KF-WestLondon.ut2 Level t3d output/ -mod=KFMod253

 

10. 其它參考資料

  • https://beyondunrealwiki.github.io/
  • https://unrealarchive.org/
  • http://www.koehler-homepage.de/Wormbo/