Workshop author handbook

Make the world yours

Build data-driven Godwright mods with a text editor and PNG art, test them locally, then publish the same folder to Steam Workshop.

No scripting required.

Godwright mods are plain INI files and PNG sprites. The game does not load Lua, DLLs, executables, or native plugins from mods.

01

Quick start

Open Godwright's install directory from Steam using Manage, then Browse local files. Create mods/my_first_mod/ beside the game executable and add this required file:

[mod]
name = My First Mod
author = Your Name
version = 1.0.0
enabled = true
  1. Create the folder. The folder name controls local load order.
  2. Add content. Start with a power, stat override, or sprite.
  3. Restart Godwright. Mods are loaded once during startup.
  4. Check Mods. Your name and version should say Active this launch.

Use any plain-text editor. For pixel art, Aseprite, LibreSprite, GIMP, and similar PNG editors all work. Keep filenames lowercase and use forward slashes in INI paths.

02

Package layout

Only mod.ini is required. A local mod and a Workshop upload use the exact same content-root layout. Do not put the files inside an extra nested folder.

my_first_mod/
├── mod.ini
├── entities.ini              optional stat overrides
├── simulation.ini            optional world tuning
├── buildings/                optional building definitions
│   └── crystal_spire.ini
├── powers/                   optional power definitions
│   └── verdant_pulse.ini
└── sprites/                  optional PNG replacements
    ├── buildings/
    │   └── crystal_spire.png
    └── icons/tools/
        └── verdant_pulse.png

Local orderAlphabetical by folder name

Workshop orderNumeric Published File ID

Conflict ruleLater definitions and assets win

INI sections, keys, and enum values are case-insensitive. Use # or; for comments. Unknown keys and malformed lines are skipped, so watch the startup log when testing.

03

Custom powers

Add one lowercase .ini file per power under powers/. IDs are stored as bytes; use stable IDs from 200 through 255 and never renumber a published power. Check other required mods for collisions.

[power]
id = 200
name = Verdant Pulse
group = Nature
icon = assets/icons/tools/verdant_pulse.png
builtin =
radius = 12
ent_damage = -50
fire_add = 0
tile_set =
elevation_add = 0
moisture_add = 0.30
spawn_entity =
spawn_count = 0
spawn_on_water = false
shake = 2
particles = sparkle
sound = heal
Power field reference
FieldAccepted value
idRequired integer, 1–255; use 200–255 for mods
nameUp to 47 characters
groupToolbar sorting label, up to 31 characters
iconRelative asset path; 24×24 PNG recommended
builtinEngine effect token, or empty for parametric effects
radius0–64 tiles
ent_damage-1000–1000; negative values heal
fire_add0–255 ignition strength
tile_setTerrain token, or empty
elevation_add-1 through 1
moisture_add-1 through 1
spawn_entityEntity name, or empty
spawn_count0–32
spawn_on_watertrue or false
shake0–10
particlesnone, explosion, smoke, sparkle, debris
soundSupported sound token, or empty
Builtins, terrain, and sound tokens

Builtins

bomb nuke meteor earthquake tornado lightning plague acid_rain tsar_bomba black_hole volcano flood blizzard divine_smite firestorm maelstrom petrify soul_storm raise_ridge sink_land part_sea

Terrain

deep_water shallow_water water ice sand desert grass savanna forest jungle swamp tundra dirt stone mountain snow lava

Sounds

click place spawn combat_hit death build disaster event_chime chop hammer wolf_howl musket cannon jet_pass age_fanfare save_chime ship_bell explosion fire ice storm earth water bio holy summon chaos heal

04

Pixel art and asset overrides

Mirror a game asset's path beneath your mod's sprites/ directory. In definitions, always reference the portable assets/... path. This works both locally and after Steam installs the Workshop item under its numeric ID.

Definition path:
icon = assets/icons/tools/verdant_pulse.png

File in your mod:
sprites/icons/tools/verdant_pulse.png

Other examples:
sprites/buildings/house.png
sprites/sprites/human/walk_down_0.png
sprites/menu/logo_godwright.png
  • Use transparent PNGs for isolated icons and sprites.
  • Power icons should be 24×24 pixels for a direct 1:1 toolbar fit.
  • Match the original canvas and frame dimensions when replacing animation art.
  • Animated buildings use equal-width frames in one horizontal strip.
  • Keep artwork pixel-aligned and disable antialiasing.
  • Never use absolute paths or .. segments inside definitions.
05

Entity overrides

Add entities.ini at the mod root. Each section changes one entity type; omitted fields keep their normal values.

[Dragon]
max_health = 2800
attack_damage = 65
color_r = 166
color_g = 104
color_b = 255
Entity fields and valid sections

Fields

max_health speed attack_damage attack_range attack_cooldown size color_r color_g color_b aggressive hunt_radius hunts_humanlike

Sections

Human Elf Orc Dwarf Cow Chicken Sheep Wolf Bear Deer Bandit Dragon Kraken Tank Jet Car Fishing Boat Trade Ship Warship Settler Ship Zombie Skeleton Necromancer Horse Fish School Griffon Troll Giant Spider Sea Serpent Boar Fox Rabbit Shark Dolphin

Saved entities preserve health, maximum health, damage, and size. Test changed combat stats with newly spawned entities or a fresh world.

06

Simulation tuning

Add simulation.ini at the mod root to tune global world behavior. Later mods replace earlier values.

[simulation]
day_length = 180
veg_growth_mult = 1.20
tree_spread_mult = 1.10
disaster_damage_mult = 1.10
KeyRangeVanilla
day_length5–36000120
veg_growth_mult0–101.0
tree_spread_mult0–101.0
fire_spread_mult0–101.0
fire_burn_intensity1–255120
water_evap_chance0–1002.0
water_flow_pct0–10015
lava_cool_mult0.1–101.0
erosion_mult0–101.0
disaster_damage_mult0–101.0
07

Building definitions

Add one lowercase .ini file per definition under buildings/. Reusing a base-game ID changes that building. A new stable ID should use the 200–255 range.

[building]
id = 200
name = Crystal Spire
category = civic
sprite = assets/buildings/crystal_spire.png
anim_frames = 1
anim_fps = 6
cost_wood = 5
cost_stone = 20
cost_metal = 0
tier = 0
race = any
light_radius = 6
walkable = false
min_age = 0
race_variants = false

A new building ID can render and survive saves, but it does not automatically appear in the fixed Build tab or gain custom AI behavior. Override an existing building ID when you need its established placement and simulation behavior.

Building field reference
FieldAccepted value
idRequired integer, 1–255
nameUp to 47 characters
categorymisc, house, well, civic, infra, node, hall, nature
spritePortable relative asset path
anim_frames1–32 horizontal frames
anim_fps0.1–60
cost_wood/stone/metal0–100000
tier0–9
raceany, human, elf, orc, dwarf
light_radius0–32 tiles
walkabletrue or false
min_age0–7, Stone through Future
race_variantstrue or false
08

Test locally

  1. Set enabled = true in mod.ini.
  2. Place the folder under the installed game's mods/ directory.
  3. Launch Godwright and open Mods from the main menu.
  4. Confirm the mod says Active this launch.
  5. Start a fresh world and test every changed power, entity, building, and sprite.
  6. Quit completely before changing files; restart to reload them.

On Windows, the default install is usually under C:\Program Files (x86)\Steam\steamapps\common\Godwright\. On Linux, it is usually under ~/.local/share/Steam/steamapps/common/Godwright/. Use Steam's Browse local files action if your library is elsewhere.

09

Publish to Steam Workshop

Install Valve's SteamCMD, then create an upload VDF outside your mod's content folder. Use absolute paths. The contentfolder must point directly to the folder containing mod.ini.

"workshopitem"
{
    "appid"            "4884560"
    "publishedfileid"  "0"
    "contentfolder"    "C:\GodwrightMods\my_first_mod"
    "previewfile"      "C:\GodwrightMods\preview.png"
    "visibility"       "0"
    "title"            "My First Mod"
    "description"      "A short, clear description of the mod."
    "changenote"       "Initial release."
}

Run SteamCMD from a terminal:

steamcmd +login "YOUR_STEAM_USERNAME" +workshop_build_item "C:\GodwrightMods\item.vdf" +quit
  1. Approve the Steam Guard sign-in when prompted.
  2. Wait for Success. SteamCMD writes a Published File ID into the VDF.
  3. Never reset that ID to zero after the first successful creation.
  4. Open the new item page and accept the Workshop legal agreement if requested.
  5. Add screenshots, compatibility notes, and clear usage instructions.
  6. Subscribe, restart Godwright, and test the Steam-installed copy before announcing it.

Visibility values are 0 public, 1 friends-only, 2 private, and 3 unlisted. Start private while testing if you do not want an unfinished item visible.

10

Update a published mod

  1. Change your files and increment version in mod.ini.
  2. Test the updated folder locally, including an existing save.
  3. Update changenote in the VDF.
  4. Run the same SteamCMD command with the existing Published File ID.
  5. Wait for Steam to download the update, then restart Godwright and verify it.

Never reuse a published building or power ID for unrelated content. IDs are stable identities and may be stored in player saves.

11

Troubleshooting

The mod does not appear

Confirm mod.ini is directly at the mod root, enabled = true, and the game was fully restarted.

The icon or sprite is missing

Use an assets/... path in the definition and mirror it beneath sprites/. Check spelling and filename case.

My Workshop item has an extra folder

Point contentfolder at the directory containing mod.ini, not its parent.

SteamCMD created an item, then failed

Keep the Published File ID SteamCMD wrote into your VDF. Fix the reported issue and retry, or you may create a duplicate item.

Two mods change the same content

Later mods win. Local folders load alphabetically; Workshop items load afterward by numeric Published File ID.

Need a hand?

Build boldly. Test carefully.

Include your mod folder structure, relevant INI file, and startup log when asking for help. We can diagnose most issues quickly.

Contact support