Custom games · The Forge · Mods
Play games made by players.
Then make your own.
Shards of Stone comes with The Forge, a free map editor. You can use it to make a completely different game on top of ours, and share it with anyone. It runs in your browser, and you don't need to write code.
Start here
What is a custom game?
A normal match of Shards of Stone is a strategy game: build a base, gather gold, raise an army, beat the other side. A custom game keeps the units, art and engine but changes the rules. Defend a tower from waves. Control one hero instead of an army. Survive until sunrise.
This is how some of the best-loved game genres began. Tower defense and hero arena games (the idea behind MOBAs) grew out of player-made maps for the strategy games of the early 2000s.
A map
.jsonA complete, playable scenario. What you publish and what players click Play on.
- Terrain
- Units & buildings
- Triggers
- Data changes
A mod
.sosmodA portable package of changes, applied on top of a map: data changes, triggers, sounds and models. Make a balance patch or a new unit once, and use it on other maps.
Export and import mods from the File menu in The Forge.
No account needed
Play one right now
These showcase maps ship with the game. Community maps are in the gallery.
- Play →
Canyon Holdout Tower Defense
Defend the Mountain Hold! Build watchtowers and runic spires to hold off waves of goblin creeps before they breach the gates.
- Play →
Castle Fight: Iron vs Scrap
Castle Fight-style lane battle (2v2, solo vs bots). Build Iron Halls, Bolt Ranges and Steam Works. Every 20 seconds each one marches a unit down the lane on its own, with rising income, kill bounties and sudden death. Break the Scrap Keep to win.
- Play →
Nightfall Hold
Vampirism / Island Defense survival (co-op, playable solo). Chop lumber and wall off four forest corridors by day. Survive six escalating night assaults and the Vampire Lord. Lose every builder or the Keep and the Hold falls.
Your first map
Rules you can read out loud
In The Forge, the rules of your game are triggers. Each one says when something happens, check this, then do that. You build them by picking from menus and filling in the highlighted words, so there is no code to learn.
- 1
Open The Forge
It runs in your browser. Drafts save in the browser, so you can start without an account.
- 2
Paint and place
Shape the ground, then drop in units, buildings, gold and each player’s start.
- 3
Add triggers
Spawn waves, count lives, show a timer, declare victory.
- 4
Test it
Press Ctrl+F9 (Test Map) to play it in the real game.
- 5
Publish
Sign in and publish, and your map appears in Custom Games for everyone.
- every 200 ticks
- wave < 20
- create 5 × goblin_brawler for 1 at centre of spawn and store them in this_wave
- order this_wave to attack_move at centre of goal
- add 1 to wave
Ideas
What you can build
Every example below is a playable map made with The Forge. If your idea can be described as “when this happens, do that”, it can probably be built too.
Tower defense
Build towers along a path while waves of enemies march toward your base. Wave timers, lives and bounties are all triggers.
Lane battles
Castle Fight style: your buildings send units down the lane on their own every 20 seconds. You choose what to build, then watch it clash.
Hero arenas
Every player controls one champion. Farm creep waves, hunt rival heroes and race to a score, with save codes to carry a hero between games.
Survival
Gather lumber and wall off your base by day, then hold out against night assaults and a boss. Playable solo or co-op.
Co-op defense
Several players hold one objective together against escalating waves, with lanes that scale to how many people joined.
Hero adventures
Level a hero, buy gear with bounty gold, and push out through tougher and tougher camps of monsters.
What a map can change
The map
Terrain, height, water and lava, trees and gold, where every player starts, which units and buildings are already placed.
The rules
Triggers react to events: a unit dies, a timer runs out, a player types in chat or presses a key. Then they spawn units, give gold, win or lose the game.
The units
Change the stats of any unit, building, item, spell, upgrade or hero for your map only, or make a new one by copying an existing one.
The screen
Show messages, counters, leaderboards, dialogs with buttons, quest trackers and custom panels. Play sounds and in-game cutscenes.
For AI-assisted creators
Build with an AI assistant
Maps, triggers and data changes are plain JSON with published schemas, which makes them a good fit for AI coding assistants. Describe the game you want, let the assistant draft the triggers, and bring the result back into The Forge.
- Give it context. File → Copy Map as AI Context copies your whole map, with the rules the format follows.
- Bring it back. File → Import from AI / JSON checks the pasted result and merges it into your map, and you can undo it.
- Check it. Assistants still make mistakes. Validate before you test, then play it: a valid map is not always a fun one.
References
- AI creators guide
- /llms.txt site index for assistants
- JSON schemas: map-format, trigger-script, def-overrides, mod-package
- Validator in the browser
- Validate from scripts:
POST /api/validate
For veteran map makers
How it compares
If you have built custom maps in a classic RTS editor, events, conditions and actions will feel familiar. Here is what is genuinely different, including where those editors are still ahead.
| Classic RTS editors | The Forge | |
|---|---|---|
| Writing logic | GUI triggers that compile to a scripting language, plus hand-written script for anything the GUI can’t express. | Sentence-style JSON triggers (250+ kinds of event, condition, value and action), plus sandboxed JavaScript and TypeScript through the public sos API with bounded memory and instruction budgets. |
| Memory leaks | Points, groups and conditions are handles; forgetting RemoveLocation or DestroyGroup leaks them and long games slow down. | Nothing to clean up. Units and groups are plain ids and lists owned by the engine, so there is no handle to forget. |
| Multiplayer sync | Lockstep. Local-only code (GetLocalPlayer) that changes game state splits players into desynced games. | Also lockstep. Triggers can only use operations built to give the same answer on every browser, and matches compare state hashes to catch a desync when one happens. |
| Sharing a map | Install the game, download the map in the lobby, and everyone must have the same version. | Publish from the editor; players open it from the browser. Maps are readable JSON files you can keep in Git. |
| Maturity | Two decades of editor features, tutorials and community tools. | New and growing. The fundamentals are here; plenty of what those editors can do is not, yet. |
Triggers and sandboxed scripting: the triggers guide.