A desktop modding tool for DOOM (2016) that lets players define custom starting
inventories and generates the .decl mod files the game engine reads. Python dataclasses
model the game's internal systems as a three-level inheritance hierarchy: abstract base
elements specialize into perks and items, which further specialize into eight concrete
types matching DOOM's inventory categories. A validation layer enforces the game's own
balance constraints, preventing configurations that would break progression.
Credit to @elizabethany for creating the original NewGamePlus mod, which inspired this project.
Download | NexusMods | Portfolio
Players configure a custom starting loadout — selecting equipment, weapons, weapon mods, suit upgrades, and runes with optional permanent equipping — and generate a ready-to-load mod with one click.
- Three-level dataclass hierarchy with eight concrete types modeling DOOM's full range of inventory categories
- Each inventory type implements its own serialization method, translating domain fields — upgrade levels, equipment flags, rune slot overrides — into the game engine's key-value format
- Code generation producing valid
.declmod files from user-configured loadout selections, matching the engine'sdevInvLoadoutformat - Level inheritance map reproducing DOOM's loadout propagation chain — each level inherits its starting inventory from the previous, so a single generated base definition propagates correctly through the full campaign
- Validation preventing loadout configurations that would block campaign progression
- Automated mod deployment: Steam installation path detection with common-path scanning, mod directory creation, and automatic replacement of previously generated versions
- GUI with tabbed category navigation, in-game descriptions as tooltips, and auto-detected Steam installation paths
Requires DOOMModLoader to load generated mods into the game.
For full installation instructions and detailed usage notes, see the NexusMods page.
- Language: Python
- GUI: CustomTkinter, Pillow



