Halo Wars Modding
Getting Started
Build your first loose mod from files extracted with PhxGUI, then load it in game with ModManifest.txt.
This guide walks through the safe beginner loop for Halo Wars: Definitive Edition modding:
- expand the game archives with PhxGUI;
- use the per-archive folders PhxGUI creates, such as
root; - add those archive folders to
ModManifest.txt; - copy one XML file into the matching archive folder;
- make a tiny edit and test it in game.
The important part is the folder layout. Do not point ModManifest.txt at a random parent folder and hope the game finds everything. The normal, predictable layout is per-archive: root, root_update, sound, sharedscenario, and map-specific folders when you need them.
What You Need
Halo Wars: Definitive Edition
Install the game and launch it at least once. This creates the local app data folder where ModManifest.txt lives.
PhxGUI
PhxGUI is the beginner tool for Halo Wars archive and data files.
Temporary workflow
This PhxGUI-based workflow will be deprecated once Forge is released. Deeper custom map work should be done through Cutter.
You will use it to:
- expand
.eraarchives into folders; - convert
.xmbfiles into editable.xml; - edit
ModManifest.txt.
The current PhxGUI expands each .era into its own subfolder automatically. That is the layout this guide uses.
XML Editor
Most early Halo Wars modding is XML editing. Use Visual Studio Code as your main editor, then install an XML extension so you get clear highlighting, formatting, and error markers.
Useful editor features:
- line numbers, so you can tell people exactly where an error is;
- search across folders, so you can find a unit, leader, tech, or resource name;
- XML formatting, so nested tags stay readable;
- matching tag highlights, so you can see whether
<Leader>and</Leader>still line up.
Notepad++ is fine for quick edits, but VS Code is better once you are searching through extracted folders. Do not use Word, WordPad, rich text editors, or spreadsheet tools for XML files.
The Folder Rule
Think of each .era as its own folder.
If the original archive is:
root.erathen your loose mod folder for files from that archive should be:
first_mod\rootFiles inside that archive folder mirror the paths inside the .era:
first_mod
root
data
leaders.xmlFor a bigger mod, the parent can hold several archive folders:
first_mod
root
data
root_update
data
sound
English(US)
sharedscenario
my_custom_mapEach archive folder that should load gets its own line in ModManifest.txt.
Create A Workspace
Create a place for extracted game files and a separate place for your mod. For example:
C:\Users\YourName\Documents\Halo Wars Work\extracted
C:\Users\YourName\Documents\Halo Wars Mods\first_modThe extracted folder is your reference copy. The mod folder is the only place you edit for this guide.
Steam can load loose mod folders from almost anywhere on disk.
The Windows Store version is stricter. Keep loose mods under the game's local package state folder:
C:\Users\YourName\AppData\Local\Packages\Microsoft.BulldogThreshold_8wekyb3d8bbwe\LocalStateSteam Deck
Loose mods only work reliably on Steam Deck when Halo Wars is installed on the main drive, not an SD card.
Expand root.era
- Open PhxGUI.
- Set
ERA Expand Pathto your extracted folder. - Find
root.erain your Halo Wars install directory. - Drag
root.erainto PhxGUI.
PhxGUI should create a folder for the archive:
C:\Users\YourName\Documents\Halo Wars Work\extracted\rootInside that folder, look for the leader data:
root\data\leaders.xmbIf you do not already have an editable leaders.xml, drag leaders.xmb into PhxGUI to convert it.
Copy One File Into Your Mod
Make the same archive path in your mod folder:
C:\Users\YourName\Documents\Halo Wars Mods\first_mod\root\dataCopy the converted leaders.xml into it:
first_mod
root
data
leaders.xmlThis is the key path. Because leaders.xml came from root.era, it belongs under your mod's root folder.
Point ModManifest.txt At root
ModManifest.txt is a plain text file. Each enabled line is one folder the game should search.
For this first mod, add the root archive folder, not the parent first_mod folder:
C:\Users\YourName\Documents\Halo Wars Mods\first_mod\rootThis is wrong for the per-archive layout:
C:\Users\YourName\Documents\Halo Wars Mods\first_modPhxGUI can edit the right file for you with Edit ModManifest.txt for Steam or Edit ModManifest.txt for WindowsStore. In the editor, each row is a directory. Rows higher in the list are searched first.
To disable a folder without deleting it, put a semicolon at the start of the line:
;C:\Users\YourName\Documents\Halo Wars Mods\first_mod\rootCommon manifest locations:
| Version | Path |
|---|---|
| Steam | C:\Users\YourName\AppData\Local\Halo Wars\ModManifest.txt |
| Windows Store | C:\Users\YourName\AppData\Local\Packages\Microsoft.BulldogThreshold_8wekyb3d8bbwe\LocalState\ModManifest.txt |
| Steam Deck | /home/deck/.local/share/Steam/steamapps/compatdata/459220/pfx/drive_c/users/steamuser/AppData/Local/Halo Wars/ModManifest.txt |
For a larger mod, the manifest can list multiple archive folders:
C:\Users\YourName\Documents\Halo Wars Mods\first_mod\root_update
C:\Users\YourName\Documents\Halo Wars Mods\first_mod\root
C:\Users\YourName\Documents\Halo Wars Mods\first_mod\sharedscenarioIf two listed folders contain the same file path, put the one you want to win higher in the list.
Make A Simple XML Edit
Open your mod copy:
first_mod\root\data\leaders.xmlSearch for Cutter:
<Leader Name="Cutter"Inside Cutter's leader block, find his starting supplies:
You are looking for a starting resource value similar to this:
<Resource Type="Supplies">800</Resource>Change only the number. For a visible test, use:
<Resource Type="Supplies">1500</Resource>Save the file.
This edit is intentionally boring. That is good for a first test: it proves the mod loads without asking you to learn squad IDs, unit tags, art files, or balance tables yet.
Test In Game
Start Halo Wars and begin a skirmish as Captain Cutter.
If the mod is loading, Cutter should start with the supplies value you set.
That confirms the three basics:
ModManifest.txtpoints atfirst_mod\root;leaders.xmlis underfirst_mod\root\data;- the game is reading your edited XML from the correct archive folder.
If It Does Not Work
Check these first:
ModManifest.txtpoints atfirst_mod\root, not justfirst_mod.- The edited file is
first_mod\root\data\leaders.xml. - You edited the mod copy, not the extracted reference copy.
- The XML still has matching opening and closing tags.
- The folder listed in
ModManifest.txtexists and is not disabled with;. - If another mod folder is listed above yours, temporarily disable it.
Small XML mistakes can stop the file from loading. If you get stuck, bring the ModManifest.txt lines, the edited file path, and your last change to the New Arcadia Discord.
Next Steps
Once this works, keep the same per-archive folder pattern:
- files from
root.erago underfirst_mod\root; - files from
root_update.erago underfirst_mod\root_update; - files from
sharedscenario.erago underfirst_mod\sharedscenario; - scenario files go under their matching scenario archive folder.
Change one value at a time and test often. When you are ready for audio or loose scenario work, read Serina.