Skip to content

Folders and paths#

Where Courage Reborn looks for mods, saves, and mod data on disk.

User data directory#

Most writable game data lives under a single user data folder:

Platform Default location
Windows %APPDATA%\Linifadomra\CourageReborn\
macOS ~/Library/Application Support/Linifadomra/CourageReborn/
Linux ~/.local/share/Linifadomra/CourageReborn/

You can override the root with data_path in config.ini (see below). When data_path is empty, the game uses the platform path above.

Modding is not supported on iOS. The paths above apply to desktop builds only.

Inside that folder you will typically find:

<user_data>/
├── config.ini
├── mods/              # mod packages
├── saves/
├── mod_saves/         # Petrichor.Storage JSON
├── cache/
└── ...

Folder names for mods, saves, and mod_saves can be renamed in config.ini under the [paths] section.

Where the game finds mods/#

Petrichor and the in-game Installed Mods screen use Paths::GetModsDir(). Resolution order:

  1. <data_path>/<mods_folder> when data_path is set and that mods folder already exists
  2. <launch_dir>/<mods_folder> when that folder exists (portable or dev layout next to the binary)
  3. <user_data>/<mods_folder> as a fallback

mods_folder defaults to mods. launch_dir is the directory that contains the game executable (and usually augment.bin).

During local development, many authors keep mods beside the build output:

pc/build/
├── tp_pc
├── augment.bin
└── mods/
    └── hello-cow/
        └── mod.json

Scripted mod packages#

One folder per mod, with a manifest at the root:

mods/
└── my-mod/
    ├── mod.json
    ├── main.luau
    └── assets/

Petrichor loads every subdirectory that contains mod.json. See Mod manifest.

Asset overrides inside a mod package#

Put replacement game files under res/, mirroring the disc path:

mods/
└── my-master-sword/
    ├── mod.json
    └── res/
        └── object/
            └── alink.arc/
                └── bmwe/
                    └── al_swm.bmd

The game file on disc is res/object/alink.arc/bmwe/al_swm.bmd. Your copy goes at mods/<mod-id>/assets/overrides/res/object/alink.arc/bmwe/al_swm.bmd.

Use "kind": "asset" in mod.json if the package only ships file overrides. See Asset modding.

Global shaders#

Drop fragment mods with no package:

mods/
└── shaders/
    └── global_fx.hlsl

See Shader mod.

config.ini paths#

Relevant [paths] keys in <user_data>/config.ini (or beside the binary for portable installs):

Key Default Purpose
data_path (empty) Override the user data root
mods_folder mods Name of the mods directory
mod_saves mod_saves Folder for Petrichor.Storage JSON files
save_folder saves Game save files
game_folder game Extracted disc assets

Petrichor.Storage writes to:

<user_data>/<mod_saves>/<mod_id>/store.json

Bundled read-only files ship inside the mod package:

mods/my-mod/assets/...

Use Storage.asset() or Storage.asset_path() to read them. See Petrichor.Storage.

In-game shortcuts#

From the main menu, open Mods, then Installed Mods:

  • Open folder opens the resolved mods directory in your file manager
  • Reload rescans the mods folder without restarting the game

See also#