Skip to Content
Overview

Captain Headsman — Modding Guide

Captain Headsman is moddable through plain JSON files placed in the StreamingAssets folder. No compilation, no special tools. Open a text editor, write your JSON, drop it in the right folder, launch the game.


How the mod system works

The game loads every .json file found anywhere inside StreamingAssets/ at startup. Files are grouped by their "id" field. If two files share the same id, they are shallow-merged in alphabetical filename order — later files overwrite earlier ones at the top level. Your mod file only needs to contain the fields you want to change; everything else stays as the default.

StreamingAssets/ Default/ ← shipped defaults (do not edit these) Characters/ Nodes/ GameSettings.json Mods/ ← your mod files go here MyGameSettingsMod.json MyMaleRebelMod.json

Place your files anywhere inside StreamingAssets/. The subfolder name does not matter. Using Mods/ is the recommended convention.

Disabling a mod file: Any file whose name begins with _ (underscore) is skipped in a release build. Rename MyMod.json to _MyMod.json to temporarily disable it without deleting it.


File anatomy

Every JSON file the game loads must have at minimum:

{ "$type": "<fully qualified C# type name>", "id": "<unique identifier string>" }

The $type field tells the deserializer which data class to use. The id field identifies which data object this file belongs to (or creates).

Purpose$type value
Game settingsScripts.DataComponents.GameSettingsDataObject, Assembly-CSharp
Character definitionScripts.DataComponents.CharacterDataObject, Assembly-CSharp
Node (most types)Scripts.DataComponents.NodeDataObject, Assembly-CSharp
OptionNodeScripts.DataComponents.OptionNodeDataObject, Assembly-CSharp
ViewTrophyNodeScripts.DataComponents.ViewTrophyNodeDataObject, Assembly-CSharp

Quick-start: your first mod

  1. Create a file at StreamingAssets/Mods/ExecuteOrReleaseMod.json.
  2. Paste the following to disable the stripping options from the verdict screen:
{ "$type": "Scripts.DataComponents.OptionNodeDataObject, Assembly-CSharp", "id": "execute_or_release", "nodeType": "OptionNode", "options": [ { "text": "Execute", "nodeId": "execute_prisoner" }, { "text": "Release", "nodeId": "release_prisoner" } ] }
  1. Launch the game. The verdict screen now only shows Execute and Release.

Why this filename? The game merges files with the same id in alphabetical filename order. Your file must be named so it sorts after the default file (ExecuteOrRelease.json). ExecuteOrReleaseMod.json satisfies this because M sorts after ..


Guides

GuideWhat it covers
Game SettingsName pools, action camera pivots, GIF settings
CharactersPrisoner character definitions and hair colours
NodesNode types and how to wire them together
ExchangesWriting dialogue exchanges
Last updated on