concepts packs and ids - cheaterbob/CR-Guide GitHub Wiki
Pack structure and IDs
Every pack has one root manifest.json, one or more content roots, and optional assets. The loader treats the entire pack as one dependency, validation, enable-state, and update unit.
Recommended layout
manifest.json
content/
enemies/
clothing/
items/
stages/
rules/
patches/
assets/
sprites/
audio/
Content files may be organized into subdirectories below a declared content root. Asset paths are resolved from the pack root. Use / in JSON paths and keep every referenced file inside the pack.
Manifest
A small manifest looks like this:
{
"schemaVersion": 1,
"id": "example.my-mod",
"displayName": "My Mod",
"version": "1.0.0",
"modApiVersion": 1,
"authors": ["Example Author"],
"description": "Adds an example enemy.",
"dependencies": [
{ "id": "core", "version": ">=0.1.0" }
],
"contentRoots": ["content"]
}
version is the pack's semantic version. modApiVersion is the content-contract version supported by the game. They are independent.
Optional manifest sections declare preview PNGs, dependencies, soft ordering, conflicts, exact override slots, and priority. assetBundles is generated by the Unity packager and must not be authored manually.
Pack IDs
Pack IDs use lowercase letters, numbers, ., _, and -. Choose an owner-qualified name such as author.project-name; display names are not identifiers.
The pack ID normally owns the namespace before : in every content ID:
example.my-mod:enemy/acid-zombie
example.my-mod:weapon/acid-launcher
example.my-mod:patch/player-art
The category path after : uses the pattern defined by that content schema. References always use full IDs, including when two files are in the same pack.
Stability rules
Once a stable ID is released, treat it as permanent. Saves and other mods may refer to it.
- Change
displayNameto rename something for players; do not rename its ID. - Never reuse an old ID for unrelated content.
- Keep removed content IDs reserved when old saves or dependencies may retain them.
- Declare dependencies for IDs owned by another pack.
- Target Core through published IDs and slots, not Unity filenames or numeric database IDs.
See Dependencies and load order, Defaults and compatibility, and manifest.schema.json in the schema index.