Mod files and folders¶
A mod is a folder (or a zip of that folder). The game looks for mods in your local Mods folder, in Steam Workshop installs, and in packages you staged for upload.
Required identity¶
Every mod needs a modinfo.json at the folder root. A Lua file alone is not
enough.
| Field | Purpose |
|---|---|
UniqueModName |
Stable prefix for all ids (modname.thing). Never use sol. |
DisplayName |
Name in the Mods list and on Workshop |
Description |
Listing text |
Typical layout¶
MyMod/
modinfo.json
item_my_sword.json
structure_my_box.json
creature_my_critter.json
worldprofile_my_world.json # optional extra Sandbox world type
WorldGenerator/… # optional terrain files for that world
Spawning/… # optional spawn lists for that world
Parallax/… # optional sky for that world
recipes.xml # optional crafting recipes
preview.png # optional Workshop preview (Mod Prep)
JSON files the game should load as content need a known filename prefix:
item_, structure_, flora_, floratype_, projectile_, creature_,
fluid_, status_, spfx_, or worldprofile_.
Other .json files are ignored as content. Spriter's atlas.json next to a
.scml file is a normal exception.
Start with Mod Prep's one-item project. Copy patterns from Example Mod when you need weapons, armor, creatures, recipes, or custom worlds.
Sprites and art¶
Point inventory pictures at PNG files inside the mod, relative to the mod folder. Keep those files in the folder you ship. Older mods that still use a sprite sheet plus a frame name continue to work.
Recipes¶
Optional root files recipes.xml and grindRecipes.xml are checked by Mod
Prep. Put smelting, cooking, and chemistry recipes in recipes.xml with
processType="smelt" (or cook / chemistry). Grind recipes stay in
grindRecipes.xml. Do not ship smeltingrecipes.xml — the game does not
load it.
Lua¶
You do not need Lua for a simple item. When you do, set LuaScriptPath on
content that actually runs scripts: held items, melee weapons, throwables,
consumables, armor, structures, plants, projectiles, status effects, and
creatures. Other item types ignore that field; Mod Prep reports it as an error.
See the Lua programming reference and Lua safety and limits.
Locale packs¶
A language pack is also a mod: modinfo.json plus overlay JSON under
Config/. You do not need Mod Prep or Lua to contribute translations. See
Community translations.
Custom worlds¶
Mods can add extra Sandbox world types with worldprofile_*.json plus files
under WorldGenerator/, Spawning/, and optionally Parallax/. See
Custom worlds and
Detailed world building.
Publishing¶
- Validate in Mod Prep.
- Stage for in-game. That writes a folder under
Documents/My Games/Signs of Life/WorkshopUpload/. - In the game, open Mods → Staged Mods and Upload New Mod or Update Existing Mod. Mod Prep does not talk to Steam itself.
After Steam creates the item, the source project remembers it in
.solmodproject.json next to modinfo.json. Keep that file with the project:
it is not included in the downloadable mod, and it prevents a cleaned staging
folder from becoming a second Workshop
item on the next publish.
Load Now and Disable¶
- Load Now adds a local or newly downloaded mod to a running single-player session when it can.
- A newly subscribed, enabled Workshop mod does the same after Steam finishes installing it.
- Disable turns a mod off for the next launch. Turning one off while you are in a world reloads game content.
- Multiplayer does not offer Load Now.
Example Mod¶
The installed game includes a complete sample in its top-level ExampleMod/
directory. Copy that folder into Documents/My Games/Signs of Life/Mods/
before loading it; the shipped copy does not enable itself.
Example Mod is a cookbook for established projects: weapons, Lua, animations, sounds, armor, clothing, recipes, a creature, and sandbox world types. Start with Mod Prep's one-item project first, then copy individual pieces from Example Mod as you need them.