The Mod Assistant is an application that ships with Warhammer 40,000: Dawn of War - Definitive Edition. It can be used to create a new mod, launch the modding tools to edit an existing mod, play a mod, and to archive a mod for distribution. For more information about using mods with Dawn of War - Definitive Edition, please refer to this article.
Launching the Mod Assistant
The Mod Assistant is included with the game install (e.g. from Steam or GoG).
You'll find the Mod Assistant application in the "Dawn of War Definitive Edition" folder.
Configuring the Mod Assistant
The Mod Assistant needs to know where to find the modding tools in order to launch them. Additionally, once launched these tools need to know where to find the game's resources in order to make them available to your MOD.
At the top of the Mod Assistant is an input labelled Game Install.
This field shows the location from which the Mod Assistant should resolve the game executables (e.g. "W40k.exe" (Steam) or "W40k_gog.exe" (GoG)) and the modding tools (e.g. "W40kME.exe" and "ObjectEditor.exe").
By default this path will show the folder from which the Mod Assistant was launched. If the Mod Assistant is launched from the game install, this default folder will also resolve the game and modding tools. If you have launched the Mod Assistant from a different folder, you'll need to configure the Game Install so the Mod Assistant can find the game and modding tools.
You can drop a folder from Windows Explorer into the Game Install field to set the path, or enter it manually.
⚠️The Game Install path does not set the location for mods. The path used for mods does not need to be configured. Mods are stored below your user profile folder.
Creating a New Mod
To create a new mod, choose New Mod from the File menu.
This will open the Create a New Mod dialog.
Name
This is the name of the MOD as it is identified in the mod's configuration files. This name will be used for the mod's folder, as well as in the 'pipeline.ini.'
For example:
Choosing the name "MyMod" will create a named folder for your MOD.
%APPDATA%\Relic Entertainment\Dawn of War\mods
└ MyMod
├ MyMod.module
└ pipeline.ini
In the 'pipeline.ini' the mod will be similarly identified:
[project:MyMod]
Follow these guidelines when choosing the MOD name:
- Do not use the name of another MOD which already exists.
- Do not use whitespace.
- Use only ANSI characters (i.e. no Unicode).
- You may use a mix of upper- and lower-case; e.g. as "camelCase" or "PascalCase."
- Maximum of 64 characters.
Display Name
This is the name for the MOD as it appears in the game menus.
For example:
Choosing a display name of "Imperium of Man" will show this in the game's Mods menu.
Follow these guidelines when choosing the MOD's display name:
- You may use whitespace.
- Use only ANSI characters (i.e. no Unicode). To show Unicode for your MOD's display name you must use a localized string.
- Maximum of 64 characters.
Description
Follow these guidelines when choosing the MOD's description:
- You may use whitespace.
- Use only ANSI characters (i.e. no Unicode). To show Unicode for your MOD's description you must use a localized string.
- Maximum of 256 characters.
Parent MOD
The parent MOD dictates the resources which are available to your MOD. Choose the MOD which best serves your needs.
Choosing a mod from the Definitive Edition gives you access to all resources of that mod's parent, and its parent's parent, and so on. The hierarchy of the Definitive Edition is as follows:
Dawn of War: Definitive Edition
↥ Dawn of War: Soulstorm
↥ Dawn of War: Dark Crusade
↥ Dawn of War: Winter Assault
↥ Warhammer 40,000 Dawn of War
Thus, choosing "Dawn of War: Definitive Edition" as the parent gives your MOD access to all resources from the Definitive Edition.
Choosing "Dawn of War: Winter Assault" as the parent gives your MOD access to resources from "Dawn of War: Winter Assault" and "Warhammer 40,000 Dawn of War," but not from "Dawn of War: Dark Crusade" nor "Dawn of War: Soulstorm."
Selecting a Mod
The MOD drop-down shows all of the MODs available to the Warhammer® 40,000: Dawn of War® Definitive Edition.
Installed MODs, including those created using Create a New Mod, will appear in this list, as well.
The MOD you have selected will be that which is used when launching any of the modding tools or the game.
⚠️The selected MOD influences which files and resources are available to the tools when launched. For example, if you launch the Object Editor from one mod and attempt to load an EBP from a different mod, the Object Editor will display the error "Model is not in any known projects."
Modding Tools
In the middle of the Mod Assistant is a palette of modding tools.
Each of these will become active when they are available for the selected mod.
For each modding tool, Mod Assistant builds the appropriate command-line parameters that allow the editor to manage assets for the selected mod.
Click the button to launch the respective tool.
Why is a Modding Tool Button Disabled?
Depending on the selected mod, one or more of the modding tool buttons may become disabled.
A disabled modding tool appears dimmed and shaded as gray.
Each tool has specific requirements in order to run successfully.
Firstly, the tool's executable must be present. The Object Editor, F/X Editor and Audio Editor all need a 'pipeline.ini' to be available with the selected MOD, as well as the Burner executable.
For each tool, the Mod Assistant checks that all required files are available and disables the tool's button if these dependencies are not met.
Modding Tools Parameters
As you hover over each of the tool icons in the tools palette, Mod Assistant displays the command-line parameters that will be used to launch the tool.
The text in these fields is for display only. This is provided to help you understand the structure of the command-line for each tool.
Command
Command shows the full path to the tool's executable, as resolved from the Game Install.
Parameters
Parameters shows the command-line arguments passed with the Command when launching the tool.
Copy to Clipboard
Right-clicking on each tool will show a context menu that allows you to copy the parameters or the tool's full command-line to the clipboard.
Copy Parameters to Clipboard
This copies only the Parameters, as shown for the hovered tool, to the clipboard.
Copy Command to Clipboard
This copies the full command-line, including both the Command and Parameters as shown for the hovered tool, to the clipboard.
Launching the Game to Play a Mod
The Game tool button launches Warhammer® 40,000: Dawn of War® Definitive Edition so as to automatically load the selected mod.
Use this to play the game with your mod.
✅ You can also use this to launch directly into one of the legacy games (e.g. Dawn of War: Winter Assault) and play their campaigns or skirmishes.
Archiving a Mod
When you are finished your mod, use Archive to package the mod into a game archive.
An archive bundles all of your mod files into a single '.sga' file for distribution along with your '.module' file.
The archive ('.sga') file is created alongside the archive configuration ('.sgaconfig') file.
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
└ Mod\
├ Data.sga
└ Data.sgaconfig
⚠️You can also create an archive of your mod from the File → Archive Mod menu.
Why is the Archive Button Disabled?
The Archive tool needs an archive configuration file in order to run. If the archive configuration is not available for the selected mod, the Archive button will appear dimmed and shaded in gray.
Mod Configuration
MOD .module
This page outlines the format of the '.module' file. This file is used by the game to identify a folder that represents a MOD.
✅The '.module' file is created automatically by the Mod Assistant when you use Create a New Mod.
Location
The Relic game engine will automatically find mods that are authored in the following folder:
%APPDATA%\Relic Entertainment\Dawn of War\mods
A module is defined by a file named with the extension '.module'.
Each module (and its accompanying '.module' file) must be in its own sub-directory. The game will not find '.module' files in the "mods" folder itself.
Example
For this exercise we'll create a new mod named "Sample." Add a directory named 'Sample' to the "mods" folder.
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
Create a file named 'SampleMod.module' in the "Sample" folder.
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
└ SampleMod.module
The .module file is essentially an INI file with a [global] section defining the module.
Edit "Sample.module" with:
[global]
UIName = Sample Mod
Description = Dawn of War sample module
DllName = DXP3Mod
Playable = 1
ModFolder = Mod
ModVersion = 1.0
TextureFE =
TextureIcon =
RuntimeMode = 3
- UIName: The name of the mod as it appears in the game. Eventually, this will be defined using a localization ID. For now, we'll just give it a name.
- Description: A succinct description for the mod. Again, eventually this may be a localization ID.
- DllName: Use DXP3Mod.
- Playable: Use 1 for a playable mod, or 0 if this is a dependent mod you reference from a playable mod (using the RequiredMod list, described below). Mods marked Playable appear in the game's Mod list.
- ModFolder: The folder containing the shippable files for the mod.
- TextureFE: (unknown)
- TextureIcon: (unknown)
- RuntimeMode: Use 3.
Continuing the [global] section there's a list of numbered DataFolder entries. The list the folders from which the game will be able to load this mod's data files. For simplicity, we'll start with one: "Data."
DataFolder.1 = Data
The MOD will be distributed using archive (SGA) files. These are described here as a list of numbered ArchiveFile entries. Again, we'll start with the archive for "Data."
ArchiveFile.1 = Data
Finally, there's a list of numbered RequiredMod entries. Since this mod is based on Soulstorm, we'll inherit for all four of the base games.
RequiredMod.1 = DXP3
RequiredMod.2 = DXP2
RequiredMod.3 = WXP
RequiredMod.4 = W40k
This results in a module directory layout that looks like this:
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
├ Mod\
│ └ Data\
└ SampleMod.module
MOD pipeline.ini
This page outlines the format of the 'pipeline.ini' file. This file defines the pipeline configuration for the modding tools.
✅The 'pipeline.ini' file is created automatically by the Mod Assistant when you use Create a New Mod.
Location
Each MOD gets its own 'pipeline.ini' file:
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod
└ pipeline.ini
Example
In the following example we'll walk through the contents of a '.module' file for a sample mod, named "SampleMod."
As its '.ini' extension suggests, the 'pipeline.ini' is formatted as an INI file, with a series of sections each listing one or more 'option = value' pairs.
The [global] section contains options that specify the paths to the game's Steam install.
[global]
WkDir = %app%
EngineLocale = %app%\Engine\Locale\English
ToolsData = %app%\Tools\ToolsData
We've used the '%app%' token here to indicate where the pipeline initialization should insert the folder to the base game. This will be specified from the command line using the '-appdir' parameter when launching tools.
The [attrib] section tells the Attribute Editor where to find and save attribute files.
[attrib]
lua = \attrib\
rgd = \attrib\
The [burner] section contains options that specify the path containing the BurnerTool.exe in the Steam install. Again we'll use the '%app%' token here.
[burner]
burnerPath = %app%
The [p4] section disables revision control.
[p4]
RevControlPort =
A [project] section contains options that configure the paths to the mod.
The format of the section header is [project:{name}] where {name} is the name of the project.
[project:SampleMod]
Description = Sample Mod for Dawn of War 40,000: Definitive Edition
DataSource = DataSrc
DataIntermediate = DataIntermediate
DataGeneric = DataGeneric
DataBurn = Mod
DataFinal = Mod\Data
LocaleFolder = Mod\Locale\English
DataExtra =
Parent = DXP3
DataSourceShared =
DataPreview =
AttrLoc =
Some of these paths may not be used by the mod, but must be specified nonetheless, even if left empty.
We'll also need all of the parent projects configured in the 'pipeline.ini' as well. The inheritance follows SampleMod → DXP3 → DXP2 → WXP → W40K → Engine. These all follow a similar pattern.
[project:DXP3]
description = DXP3
datasource =
dataintermediate =
datageneric = %app%\DXP3\DataGeneric
databurn = %app%\DXP3
datafinal = %app%\DXP3\Data
localefolder = %app%\DXP3\Locale\English
dataextra =
parent = DXP2
datasourceshared =
datapreview =
attrloc =
[project:DXP2]
description = DXP2
datasource =
dataintermediate =
datageneric = %app%\DXP2\DataGeneric
databurn = %app%\DXP2
datafinal = %app%\DXP2\Data
localefolder = %app%\DXP2\Locale\English
dataextra =
parent = WXP
datasourceshared =
datapreview =
attrloc =
[project:WXP]
description = WXP
datasource =
dataintermediate =
datageneric = %app%\WXP\DataGeneric
databurn = %app%\WXP
datafinal = %app%\WXP\Data
localefolder = %app%\WXP\Locale\English
dataextra =
parent = W40K
datasourceshared =
datapreview =
attrloc =
[project:W40K]
description = W40K
datasource =
dataintermediate =
datageneric = %app%\W40K\DataGeneric
databurn = %app%\W40K
datafinal = %app%\W40K\Data
localefolder = %app%\W40K\Locale\English
dataextra =
parent = Engine
datasourceshared =
datapreview =
attrloc =
[project:Engine]
description = Engine
datasource =
dataintermediate =
datageneric = %app%\Engine\DataGeneric
databurn = %app%\Engine
datafinal = %app%\Engine\Data
localefolder = %app%\Engine\Locale\English
dataextra =
parent =
datasourceshared =
datapreview =
attrloc =
Save the 'pipeline.ini' in the same folder as your MOD's '.module' file.
This produces a module directory layout as follows:
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
├ DataGeneric
├ DataIntermediate\
├ DataSrc\
├ Mod\
│ ├ Data\
│ └ Locale\
│ └ English\
├ SampleMod.module
└ pipeline.ini
MOD Burn Rules
This page outlines the format of the mod burn rules. These burn rules provide instruction to the Burner for how source assets are added to the game.
✅A set of default burn rules is created automatically by the Mod Assistant when you use Create a New Mod.
Location
Burn rules are stored in files named "_default.burn". The top-level burn rules are stored immediately below a MOD's "DataGeneric" folder. The location of the "DataGeneric" folder is defined in the "pipeline.ini" file and is typically a sub-folder directly below the MOD itself.
pipeline.ini
[project:SampleMod]
datageneric = DataGeneric
_default.burn
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
└ DataGeneric\
└ _default.burn
Example
The following shows an excerpt from the default burn rules created by the Mod Assistant.
To see the full burn rules, open the "_default.burn" file in your mod.
✅A ".burn" file is LUA. When loaded in an editor it can be helpful to enable LUA syntax highlighting, if available.
-- 'burn_targets' contains a list of named burn targets, each defined by a wildcard that will collect
-- the files assigned to that target. Burn targets are first-come-first-serve; once any burn target
-- claims a matching file, evaluation stops and remaining burn targets are not considered.
--
-- Burn _targets_ do not support overrides. All targets must be defined in the base _default.burn.
burn_targets =
{
{
-- Each burn target has a unique, descriptive name.
-- Every burn target must have a corresponding entry in burn_params, matched by this name.
name = "Entity Blueprints",
-- A single regular expression matches the files added to this burn target.
-- Wildcards may use '[[' and ']]' literals, which do not interpret escape sequences.
wildcard = [[.*\.ebp$]],
-- A list of targets direct each file to one or more burn plugins.
targets =
{
{
-- A unique name that matches a burn_param to this target.
target = "Data",
-- The output folder for this file, once burned.
-- This is relative to the project folder
destination = "Data",
-- The burn plugin to use for this file.
plugin = "EBP to WHE",
}
}
},
{
name = "Models",
wildcard = [[.*\.sgm$]],
targets =
{
{
target = "Data",
destination = "Data",
plugin = "SGM to WHM",
}
}
},
{
-- The Textures rule claims all remaining textures.
name = "Textures",
wildcard = [[.*\.tga$]],
targets =
{
{
target = "Data",
destination = "Data",
plugin = "Texture To RTX",
}
}
},
{
-- A final "ignore" rule catches everything not claimed by any previous rule.
-- This allows the burner to report the file as ignored, rather than as an error.
name = "ignore",
wildcard = [[.*]],
targets =
{
{
-- For an ignore rule, target and destination must be defined, but can be anything.
-- There must still be an accompanying burn_param entry that matches this target.
target = "ignore",
destination = "ignore",
-- An ignore rule uses the "ignore" burner, which does nothing.
plugin = "ignore",
}
}
}
}
-- 'burn_params' provides the parameters submitted to the burn plugin for each target.
-- Each target defined in 'burn_targets' must have a corresponding target in 'burn_params',
-- even if there are no params for that target.
--
-- Burn Rule Parameter Overrides
-- Burn rule parameters may be overridden via additional ".burn" files in child folders.
-- A "_default.burn" in a child folder overrides the base parameters for that child folder
-- (and all of its child folders).
-- A ".burn" file may also override the base parameters for an individual file. For example,
-- when burning "ornament.tga" an accompanying "ornament.tga.burn" file (in the same folder
-- as "ornament.tga") will override the base burn parameters for only that file.
burn_params =
{
{
-- The 'burn_param' name must match the name of its 'burn_target.'
name = "Entity Blueprints",
targets =
{
{
-- The target name here must match the name of a target in the
-- equivalently named burn target.
target = "Data",
-- The 'EBP to WHE' burn plugin requires no parameters.
}
}
},
{
name = "Models",
targets =
{
{
target = "Data",
params =
{
-- When required, burn plugin parameters are specified as key/value pairs.
{ "low poly percent", "100" },
{ "high poly percent", "100" },
{ "anim pos tol", "0" },
{ "anim rot tol", "0" },
}
}
}
},
{
name = "Textures",
targets =
{
{
target = "Data",
params =
{
{ "save mip-map chain", "1" },
{ "dxtc", "5" },
{ "flip texture", "false" },
}
},
}
},
{
-- Even the "ignore" burn target requires a complementary burn param entry.
name = "ignore",
targets =
{
{
target = "ignore",
}
}
}
}
MOD Archive Configuration
This page outlines the format of the archive configuration file. This file is used by the Archive tool to describe where to find all of the files that are consolidated into the archive that may be distributed as a MOD.
✅A default archive configuration file is created automatically by the Mod Assistant when you use Create a New Mod.
Location
The archive configuration is stored in a file with the extension ".sgaconfig" below a MOD's "modfolder." The location of the "modfolder" is defined in the ".module" file, and is typically a sub-folder directly below the MOD itself.
For example:
%APPDATA%\Relic Entertainment\Dawn of War\mods\
└ SampleMod\
└ Mod\
└ Data.sgaconfig
The file name of the archive configuration—e.g. "Data.sgaconfig"—typically matches the name of the mod's "datafolder," again as specified in the ".module" file. For modules created with the Mod Assistant this is "Data."
Example
A minimal archive configuration is the following:
Archive
TOCStart alias="Data" relativeroot="Data"
FileSettingsStart defcompression="1"
FileSettingsEnd
TOCEnd
This will add all files in the MOD's "Data" folder into the archive. All files in the archive will use the default compression.
relativeroot
The first important value for your mod is that specified as the "relativeroot." This is the name of the "datafolder" as specified in your ".module". For modules created with the Mod Assistant this is "Data."
defcompression
The second important value is the "defcompression." This is the default compression used for files added to the archive. It represents a numerical value and must be in the range 0-2:
| 0 (zero) | No compression. The file is simply stored. This is typically used for small files where the overhead of decompression outweighs any advantage gained. It may (and should) also be used for file types (of any size) that do not compress well. |
| 1 | Stream compression. The file is compressed. It is decompressed on-the-fly as it is streamed from the archive. |
| 2 | Buffer compression. The file is compressed. The compressed file is loaded from the archive and then decompressed in memory. |
Override
Between "FileSettingsStart" and "FileSettingsEnd" may appear zero or more "Override" entries. Each override declares a compression type used for particular file types and/or sizes.
The default archive configuration declares four overrides, as follows:
FileSettingsStart defcompression="1"
Override wildcard=".*$" minsize="-1" maxsize="100" ct="0"
Override wildcard=".*$" minsize="100" maxsize="4096" ct="2"
Override wildcard=".*(ttf)|(rgt)$" minsize="-1" maxsize="-1" ct="0"
Override wildcard=".*(lua)$" minsize="-1" maxsize="-1" ct="2"
FileSettingsEnd
"Override" entries are evaluated top-down, with the first matching rule taking precedence.
For example, using the rules shown above, all Relic SCAR (".lua") files, regardless of size, will use buffer compression (compression type = 2). All font (".ttf" or ".rgt") files, which do not compress well, are simply stored as-is.
For all other files, those larger than (or equal to) 100 bytes will use buffer compression, and those less than 100 bytes will be stored without compression.
SkipFile
Between "FileSettingStart" and "FileSettingEnd" may appear zero or more "SkipFile" entries. Each declares a naming pattern for files that will be excluded from the archive.
"SkipFile" entries are evaluated cumulatively. A match against any entry will result in a file being excluded from the archive.
FileSettingsStart defcompression="1"
SkipFile wildcard="\\[^\\]*_WIP\.[a-z]*$" minsize="-1" maxsize="-1"
FileSettingsEnd
In the example above, any file whose filename ends with "_WIP" (regardless of extension) will be skipped.
Comments
Comments may be added to an archive configuration by preceding a line with "//".
// Default allows decompression on-the-fly.
FileSettingsStart defcompression="1"
// Skip files tagged as work-in-progress.
SkipFile wildcard="\\[^\\]*_WIP\.[a-z]*$" minsize="-1" maxsize="-1"
// LUA files are fully loaded first, then decompressed.
Override wildcard=".*(lua)$" minsize="-1" maxsize="-1" ct="2"
FileSettingsEnd
Finding the Game Install Folder
Steam
In your Steam Library, right-click on Warhammer 40,000: Dawn of War - Definitive Edition and navigate to Manage → Browse local files.
The revealed folder will be that which contains the game executables (e.g. "W40k.exe"). Assign this folder as the Game Install path in the Mod Assistant.
GoG
In your GoG library, click on the Properties button for Warhammer 40,000: Dawn of War - Definitive Edition and navigate to Manage installation → Show folder.
The revealed folder will be that which contains the game executables (e.g. "W40k.exe"). Assign this folder as the Game Install path in the Mod Assistant.
Finding the MOD Folder
MODs for Warhammer 40,000: Dawn of War - Definitive Edition are stored in your user profile below the folder designated by the '%APPDATA%' Windows environment variable.
%APPDATA%\Relic Entertainment\Dawn of War\mods