General Information

Start here for learning how to create mods.

Extracting Resources

In order to create mods, you will need to have the game's resources extracted into the various files that can be edited. Resources are divided by levels or general categories. They will be sorted into folders when extracted.

It is recommend that you extract assets from resources that end in .backup or uninstall all mods before extracting to avoid getting modified files.

Extraction Tools:

EternalResourceExtractor by PowerBall253 - Download
Command-line tool. Exports everything, but textures/models are exported as "headers" only - not for texture mods. You may wish to filter the extraction to .decl files only. CMD Syntax: EternalResourceExtractor.exe [path to .resources file] [out path] [options]
[Documentation & Source Code]

SAMUEL Asset Extraction Tool by SamPT - Download 
GUI tool. Exports textures, models, .decls, and .entities files in a readable format.
[Documentation & Source Code]

VEGA by DTZxPorter - Download
GUI tool. Exports textures and models. Preferred tool for texture modding.

Make sure you have enough disk space when extracting resources. As of Game Update 6.66 rev 2, EternalResourceExtractor requires 20.0 GB of free space to extract everything. SAMUEL or VEGA require even more space, since they export full-size images. If using those tools, you should only export the textures you need.

List of Resources:

gameresources contains general information that will be used for all levels.
You will be using this resource frequently.

Resource
Description
gameresources General
e1m1_intro Hell on Earth
e1m2_battle
Exultia
e1m3_cult Cultist Base
e1m4_boss Doom Hunter Base
e2m1_nest Super Gore Nest
e2m2_base ARC Complex
e2m3_core Mars Core
e2m4_boss Sentinel Prime
e3m1_slayer Taras Nabad
e3m2_hell Nekravol
e3m2_hell_b Nekravol - Part II
e3m3_maykr Urdak
e3m4_boss Final Sin
e4m1_rig UAC Atlantica Facility
e4m2_swamp The Blood Swamps
e4m3_mcity The Holt
e5m1_spear The World Spear
e5m2_earth Reclaimed Earth
e5m3_hell Immora
e5m4_boss The Dark Lord
e6m1_cult_horde Horde Mode - Cultist Base
e6m2_earth_horde Horde Mode - Reclaimed Earth
e6m3_mcity_horde
Horde Mode - The Holt
hub Fortress of DOOM
dlc_hub ARC Carrier
shell Main Menu
pvp_bronco Battlemode - Celestial
pvp_darkmetal Battlemode - Corrosion
pvp_deathvalley Battlemode - Penance
pvp_inferno Battlemode - Tundra
pvp_laser Battlemode - Forsaken
pvp_shrapnel Battlemode - Torment
pvp_sideswipe Battlemode - Stronghold
pvp_thunder Battlemode - Armageddon
pvp_zap Battlemode - Extraction
tutorial_sp Slayer Tutorial
tutorial_demons Demon Player Tutorial
tutorial_pvp_laser Battlemode - Tutorial
warehouse Skins
meta Contains "container.mask"

There are folders with "_patch_#" appended at the end and they contain overriding files for their parent folder.
The patch number does not always mean it has a high priority because DOOM Eternal often changes the priorities with each update. You can see the priorities by checking the vanilla version of base/packagemapspec.json. As of update 6.66 rev-2.2, here are the known unusual patch priorities:

File Extensions

This is a list of the most common files you'll edit when creating a mod. It is recommend that you download the tools to extract the game resources before continuing. That way, you can reference these files as you go.

.decl File Extension

.decl files (short for "declaration") are the most commonly used files in Doom Eternal modding. They are a form of script or "pseudo-code" that is interpreted by the game engine. Many of the variables and numeric values used by the game are defined in these files. They can be edited with a text editor.

Filepath:

<resource>/generated/decls
Example:
gameresources/generated/decls/weapon/weapon/player/rocket_launcher.decl
> File to edit the Rocket Launcher.

.entities File Extension

The .entities file contains all of the data in a map/level except geometry — if you want to make a level mod, you will need to learn how to edit the .entities file. These files are stored compressed, and require a tool to decompress them. After that, the file can be edited with a text editor.

Filepath:
<resource>/maps/game/<campaign>/<level_name>/<level_name>.entities
Example:
e1m1_intro_patch1/maps/game/sp/e1m1_intro/e1m1_intro.entities
> Level file path for Hell on Earth.

.tga File Extension

These are texture files. If you want to create custom skins or other artwork, you will most likely be editing these .tga files. Not everything "visual" is a .tga file. Many of the game's particle effects, lighting effects, and other visual effects are controlled by .decl files instead.

Texture editing software is required to edit .tga files.

Filepath:
<resource>/models and <resource>/art
Example:
gameresources/models/monsters/arachnotron/*
> Texture files for the Arachnotron's model.

Despite the name, the ".tga" files used in Doom Eternal are not actually .tga (targa) images. You will need to use a tool such as SAMUEL or VEGA to extract them in a usable format (.dds, .png, or .tiff).

 

Creating Mods

Getting Your Mod to Work:

Updating Your Mod:

Command Prompt Tips

There are thousands of extracted files available and sometimes it can be difficult to locate what you need.

On the Windows Operating System, you will be using the Console Command Prompt (CMD).
To access it, simply type "command prompt" or "cmd" in the search bar.
Windows PowerShell also works.

Change Directory

It will be much easier issuing commands when changing the current directory.
You should be changing the directory to the folder where you extracted all your files.

Windows and Linux | cd

The Change Directory command for Linux and Windows is the same.

Syntax:
cd [directory]

Example:
cd C:\Users\Username\Desktop\Extracted Files

On Windows:
An easy way to change directories in is to navigate to the directory in File Explorer, select the upper list that names all the folders in your directory (usually starting with "This PC"), copy what is listed, then paste it into CMD.

Create Directory

Rather than making directories one at a time graphically, you may find it easier to create an entire path in one command.

Windows and Linux | mkdir

The base command, mkdir, is the same on both Windows and Linux, however the flags are different.

Syntax:
mkdir [directory/path]

Example:
mkdir warehouse_patch1/generated/decls/material2/art/weapons/supershotgun/skins/techhell/

On Linux:
You need the -p flag to create directories recursively if their parents don't exist. If your Linux distribution does not do so automatically, add an alias to the config file for your favorite shell so that you can just type mkdir without the -p.

Find String

To find specific text strings within a file or group of files.
Useful for finding .decl files.

Windows | findstr

Syntax:
findstr /arguments "text" [filename]

Example:
findstr /si "ai/fodder/imp_stone" e5m1_spear\generated\decls\*
> This example command will list out the .decl files that define the Stone Imp as an entity to be spawned in The World Spear.
> The /si argument makes the command also search sub-directories of the file and ignore case-sensitivity.
> The * at the end is a wildcard, meaning that it will search for everything within the decls folder.

Although the Windows file structure divide their directories with the back slash ("\"), the extracted files will reference directories using the forward slash ("/"). You can see this in the example for findstr above.

Linux | grep

Syntax:
grep -arguments "text" [filepath]

Example:
grep -ir "ai/fodder/imp_stone" e5m1_spear/generated/decls/*

The -ir arguments make the command search sub-directories recursively and ignore case-sensitivity. If you intentionally want a case-sensitive search, you can leave out the -i flag and use just -r.

For Linux, the directories use the forward slash ("/") just like how the extracted files do.

Sometimes a surplus of results will print out depending on how vague the key term is.

File Compare

Compares the difference between two files line-by-line.
Useful for comparing a modded file with its original version.

Diffchecker | https://www.diffchecker.com

The Diffchecker website compares differences and similarities between 2 code syntax.
Select all syntax of the original .decl file and copy it over to one of the fields. Then do the same for the modified .decl file.

Windows | fc

Syntax:
fc /arguments [file1] [file2]

Example:
fc /n "e5m3_hell\generated\decls\aiupgrades\buffpod.decl" "test_buffpod.decl"

Linux | diff

Syntax:
diff -arguments [file1] [file2]

Example:
diff "e5m3_hell/generated/decls/aiupgrades/buffpod.decl" "test_buffpod.decl"


EternalMod.json

You can provide additional info for your mod by creating a file called "EternalMod.json" in the .zip file alongside the rest of your resource folders.

This file is not required when creating mods, but it can be helpful for users when organizing their mods.

Create the file EternalMod.json as shown:
image-1632283321579.png

Usage:

{
	"name":"", \\ Mod Name
    "author":"", \\ Mod Author
	"description":"", \\ Mod Description
	"version":"", \\ Version Number
	"loadPriority":0, \\ Injector Load Priority
	"requiredVersion":0 \\ Required Mod Loader Version
}

Example:

{
	"name":"My First Mod",
    "author":"Newbie Modder",
	"description":"This is my first Doom Eternal Mod.",
	"version":"1.0",
	"loadPriority":500,
	"requiredVersion":14
}

These contents are only visible for users if they are using the GUI-based application, EternalModManager.exe which comes packaged with the Mod Injector.

Loading Priorities:

Manually setting loading priorities can be helpful when considering file conflictions with other mods.

loadPriority has greater importance than the other fields as it determines what order the mod will be injected.
By default, the value is 0. The higher the number, the sooner the individual mod will be injected.
Load priority numbers can get to the negatives.

The Mod Injector loads its mods from highest load priority to smallest, meaning that if two mods change the same files, the mod with the smaller load priority number will override the mod with the larger load priority number.

Required Version:

requiredVersion refers to the version number of the Mod Loader, known as DEternal_loadMods.exe and not the Mod Injector itself.

To figure out what the current Mod Loader version, issue type in a command prompt:
"DEternal_loadmods.exe --version"
Be sure to be in the same directory as the .exe file before issuing the command.

See Also: