Content packs¶
A mod is a content pack folder (or a zip of that folder). The game discovers packs under local Mods, Steam Workshop installs, and staged upload candidates.
Required identity¶
| Field | Purpose |
|---|---|
UniqueModName |
Stable prefix for all ids (modname.thing) |
DisplayName |
Mods browser / Workshop title |
Description |
Listing text |
Author modinfo.json (Mod Prep does not accept modinfo.lua-only packs).
Typical layout¶
MyPack/
modinfo.json
item_my_sword.json
structure_my_box.json
Items/my_sword.lua
worldprofile_my_world.json # optional sandbox world type
WorldGenerator/… # optional world-gen details / icon
Spawning/… # optional spawn groups for world profiles
Parallax/… # optional sky definition for world profiles
recipes.xml # optional craft recipes
preview.png # optional Workshop preview (Mod Prep)
A full worked example is Example Mod (Energysabre, Shotel, Glick, Tahz, Scrap Helmet, Chickenmancer clothing, Flatlands / Moon world profiles, recipes).
Content JSON filenames must use known prefixes (item_, structure_,
flora_, projectile_, worldprofile_, …) or the game will ignore them.
Body armor and clothing use item_*.json with an "ArmorItem" root (equip +
damage reduction + EquipmentEffects, optional LuaScriptPath → Armor /
self.armor). Helmet/hat use WornSpriteMalePath / WornSpriteFemalePath.
Body slots use WornBonesMale / WornBonesFemale (role→PNG: neck,
ribcage, stomach, pelvis, thigh, lowerLeg, boot, upperArm,
forearm, glove). Padded frames pivot on the canvas center.
Sandbox world profiles¶
Packs can add Sandbox menu world types with worldprofile_*.json plus
WorldGenerator/, Spawning/, and optional Parallax/ data. See
Sandbox world profiles and
Authoring world-gen details.
Inventory sprites¶
Set InventorySpritePath to a pack-relative PNG (for example
Items/MySword/Sprites/sword.png). Optional secondary paths
(ChargeBarSpritePath, GrowingSpritePath, …) are packed with it at load time.
Older packs that still use InventorySpriteSheetPath + map + name continue to
work. Hand-authored animation sheets stay as you packed them.
Recipes and configs¶
Optional root files such as recipes.xml and known config JSON names are
validated by Mod Prep.
Publishing¶
- Validate with Mod Prep.
- Stage a
WorkshopUpload/package. - In-game Mods → Upload / Update submits to Steam (Mod Prep itself does not talk to Steam).
Hot load and disable¶
- Load Now merges a pack into a running single-player session when eligible.
- Disable marks a pack off for the next launch; unloading mid-session reloads content and recreates Lua scripts.
Multiplayer does not offer Load Now for untrusted mid-session merges.