Mods are one of the biggest reasons games stay popular and lively for years. By opening the doors to customization, I hope to inspire enthusiastic community members to expand and improve Criminal Business in their own ways, while letting every player combine those creations to build a version of the game that feels uniquely theirs.

That approach is inspired by games that already do modding well. RimWorld keeps nearly all of its data in plain-text files anyone can edit and lets power users add DLLs that patch game logic through Harmony 2. Paradox’s grand-strategy titles work similarly: their data lives in easy-to-read text, and mods slot neatly into that structure. I’m blending those ideas into my own system fit for Criminal Business.

To make it work, the module system follows a few ground rules. Official expansions and community mods share exactly the same data loading, so anything I can ship, modders can ship too. Wherever possible, data stays human-readable—meaning a text editor is often all you need. Each module can declare its own version and list the versions of other modules it relies on, so everyone can see at a glance whether something is out of date. Finally, the loader is designed to let several modules touch the same data without stepping on each other’s toes.

“Module” is the catch-all term for any folder the game can load, whether that’s the base game, an expansion, or a mod. Inside you’ll find JSON for core definitions, CSV for localization, GLB models for 3-D assets, and—when deeper changes are required—DLLs with custom code.

My Cool Mod
├─ About
│  ├─ README.txt
│  ├─ manifest.json
│  ├─ image.png
└─ 1.0
   ├─ Assets
   ├─ Localization
   │  ├─ en.cvs
   │  └─ pt.cvs
   └─ Scenarios
      └─ Standard
         ├─ Events
	 │  └─ Long Island Flavor.events
         ├─ Gangs
	 │  └─ Long Island Gangs.json
         └─ Maps
            └─ NYC
  	       ├─ Long Island.gbl
	       └─ Long Island.json

When the game starts it scans the Modules directoy, detects each package, and builds a load list. If the player has chosen a custom order, that order wins; otherwise the loader uses its own rules to sort them. As it steps through the list it adds new data and, where IDs match, allows later modules to overwrite earlier ones.

Each record is identified by a unique ID (–think of it as the primary key for a gang, map, event, or any other game element).
When a module introduces an ID for the first time, that record is added.
If a later module uses the same ID, its data overwrites the existing record.
Load order therefore decides which version of any shared record wins.

Below is a quick walkthrough of how the loader handles add vs overwrite.

OrderModuleID A123 (e.g., a gang)ID B456 (e.g., a map)ID C789 (e.g., an event)
1Base GameA0 (add)
2Expansion 1A0B0 (add)
3Mod 1A1 (overwrite)B0
4Mod 2A2 (overwrite)B0C0 (add)

Final result after all modules load

  • ID A123 → A2 (Mod 2’s version wins).
  • ID B456 → B0 (added by Expansion 1 and never changed).
  • ID C789 → C0 (added by Mod 2).

If a module needs to go beyond data edits, it can include a compiled assembly in an Assemblies subfolder. The game loads the assembly automatically; after that, it’s up to the modder to apply their Harmony 2 patches inside the code. This keeps the core stable while still giving advanced creators full control.

All of this will run through Steam Workshop. Creators will package a module, publish it, and players will subscribe—no manual downloads required.

When Criminal Business launches, full documentation and step-by-step tutorials will be ready, covering everything from tweaking a single value to writing a complete Harmony patch. I’m excited to see where the community takes it.