Map Editor Documentation

Build a horde run

Turn the run on for your own map: heroes in the middle of a field, a horde that closes in, bosses on the clock, your own monsters and bosses, your own numbers, the heroes it offers and the zones its lobby lists. Shard Survivors is built this way.

Genres · Page 53 of 53

Shard Survivors is a set of maps. Each zone's field, what stands in it, its monsters and bosses and its lobby come from one setting in the map file, rules.survivors, and everything below works on any map that sets it. A player who opens your map gets the whole run: the lobby with its six tabs, the countdown, the horde, the level-up hands, the chests, the mini-bosses and the final boss, the results, and the rewards their account keeps between runs.

Start from a Shard Survivors zone

Download Thornwood Vale (every zone is at /maps/survivors-<zone>.play.json: thornwood, frostfang, ashen_reach, gloomfen, barrowdeep and wreckers_coast) and open it in the Forge with File → Import Map JSON…. Its run comes with it: move the copses, change the monsters or the clock, then save it as your own.

To start from a blank map instead, open the Players module in the Forge. Under Rules there is a Horde run panel. Switch it on and the map fights Thornwood Vale's monsters with the lobby open, the heroes starting at the middle. Switching the run on also turns standard victory, the starting base, the AI's armies, fog and building off, because a run has none of them; turn any back on in Rules if your map wants it.

Switch a run on: rules.survivors

{
  "rules": {
    "survivors": {
      "zone": "frostfang",
      "difficulty": "normal",
      "lobby": true,
      "cx": 48,
      "cy": 48,
      "bounds": 42,
      "obstacles": [
        { "x": 30, "y": 41, "r": 2.2 },
        { "x": 61, "y": 58, "r": 1.4 }
      ]
    },
    "standardVictory": false,
    "noStartingUnits": true,
    "disableAi": true,
    "fog": "off"
  }
}

Every seat on the map is a hero, up to four. People's seats are the players; a seat nobody takes stands empty, and a person who leaves mid-run is played by the game for the rest of it.

FieldWhat it does
zoneThe monsters, mini-bosses and final boss the run fights: one of the six zones above, or your own in zoneDef
difficultynormal, heroic or mythic: monsters' health and damage, and the rewards. In the lobby the host can change it
hourThe light the run is fought in: day, dusk or night (default: the zone's own; a map's own zone, day). The sky, sun and shade follow it; the map's terrain and props are what you painted
lobbytrue (the default): the map opens in its lobby, every person picks a hero there and the host starts the run. false: the run starts as the map loads, each seat on the hero heroes names
heroesSeat to hero, for seats whose hero the map fixes ({ "0": "vaelindra" })
rosterThe heroes the lobby offers, by id (default: all of them). A hero still opens by the player's account
cx, cyWhere the heroes start, in tiles (default: the middle of the map)
boundsHow far from the start the run may go, in tiles. The horde comes in from beyond it
obstaclesCircles (x, y, r, in tiles) that heroes and monsters walk round. Paint the trees, rocks and props they stand for: the run walks round the circles, not the paint
seedThe run's seed, for a run that plays out the same every time (default: a fresh one each match)

Your own monsters and bosses: zoneDef

A map can fight its own zone. In the Forge, press one of Start from under This map's own zone to copy a zone's monsters in, then reshape them in the text box.

{
  "zone": "drowned_quarter",
  "zoneDef": {
    "id": "drowned_quarter",
    "name": "The Drowned Quarter",
    "subtitle": "High Tide",
    "tiers": [
      [{ "unit": "creep_reef_crab", "hp": 10, "damage": 3, "speed": 2.1 }],
      [{ "unit": "creep_shellback_tidecaller", "hp": 30, "damage": 5, "speed": 1.8, "kind": "ranged" }]
    ],
    "bosses": [
      { "name": "The Bell-Ringer", "unit": "creep_brinebeard_anchorbreaker", "hp": 1400, "damage": 14, "speed": 1.9, "scale": 1.8, "moves": ["slam", "quake"] }
    ],
    "final": { "name": "Mother of Tides", "title": "She Who Floods", "unit": "creep_boss_brinebeard_captain", "hp": 7000, "damage": 20, "speed": 2, "scale": 1.6, "moves": ["volley", "summon", "nova"], "xp": 400 }
  }
}
  • tiers are the monsters, weakest first, one to eight tiers of one to eight each. The run walks up the tiers as its clock runs.
  • Each monster names the unit it is drawn as (any unit with a model), its hp and damage on Normal at the first tier, its speed in tiles a second, and optionally its radius, scale, the experience it is worth (xp) and how it fights (kind): melee walks into you, ranged keeps its distance and shoots, charger rushes when near.
  • bosses come one every bossEverySeconds (up to twelve), and final comes at the end of the clock: killing it wins the run. Each boss has a name, a title and its moves in turn: slam, charge, nova, summon, volley and quake, each with a warning on the ground first, every moveEvery seconds.

The run's numbers: tuning

{
  "tuning": { "runSeconds": 420, "bossEverySeconds": 90, "maxAlive": 180, "enemyHealth": 1.2, "xpRate": 1.5 }
}
FieldDefaultWhat it does
runSeconds600Seconds until the final boss comes (60 to 3600)
bossEverySeconds120Seconds between the mini-bosses
maxAlive240The most monsters standing at once (10 to 320)
enemyHealth, enemyDamage1Multipliers on every monster, before the difficulty's
xpRate1A multiplier on the experience every shard gives
goldRate1A multiplier on the gold a run earns
handSeconds20Seconds a level-up hand waits in a party before it picks for the slow

In the Forge these are the Horde run panel's The run's numbers.

An endless world: world

A run can have no edge at all. Set world and the land goes on whichever way the party walks: it is made in 32-tile chunks from a seed as they walk, and a chunk they walk back to is the same chunk, for every player in the party. The land wears your zone's look: its copses and rocks to walk round, its loose props, worn earth, and the stone circle where the heroes start.

{
  "world": { "seed": 2024, "density": 7, "scatter": 40, "leash": 30 }
}
FieldDefaultWhat it does
seedthe zone's ownThe same seed makes the same land
density5Copses and rocks to walk round in each chunk (0 to 12)
scatter30Loose small props in each chunk, walked through (0 to 80)
leash36In a party, how far a hero may walk from the middle of the party, in tiles (12 to 40); alone there is no leash

The map itself is the first window of the world: 224 tiles square, the heroes in its middle. Start from an endless example rather than a blank map: every zone has one at /maps/survivors-<zone>-endless.play.json. With a world, bounds only holds the lobby and obstacles is ignored, because the chunks make their own. In the Forge this is the Horde run panel's An endless world.

Your own lobby: the zones it lists

When someone presses Play on your published run, it loads your map and opens the lobby inside it, alone or online. With no menu the lobby offers your map alone. With one in rules.survivors, it can carry your title, a tagline, a logo, and up to 12 zones for the host to move the party between:

{
  "menu": {
    "title": "The Long Night",
    "tagline": "Four zones, one dawn",
    "zones": [
      { "map": "community:3f1c2e9a-1b2c-4d5e-8f90-1234567890ab", "name": "The Drowned Quarter", "blurb": "High tide, rising" },
      { "map": "/maps/survivors-gloomfen.play.json", "name": "Gloomfen", "blurb": "The bog remembers" }
    ]
  }
}

Each zone is a map with its own rules.survivors, named by community:<id> for a published map (the id is in its share link) or /maps/<file>.json for one of the game's own. Publish the zones first, then the map that lists them. Choosing a zone in the lobby loads its map, and online the whole party moves on together. The logo is an image the game ships (/assets/...) or one you uploaded; anything else shows Shard Survivors'. Set "menu": false for a map that should launch exactly as you wrote it. In the Forge it is the Horde run panel's Setup screen section. Shard Survivors itself is this lobby over its six bundled zones.

Anyone can open your run with a link: /play?survivors=setup&map=community:<id>.

How it plays

  • A hero's basic attack and every spell they hold cast themselves. The player chooses where to stand and what to take.
  • Every kill drops a shard of experience. A level-up deals a hand of three cards (a new spell, a spell's next rank, or a blessing), with rerolls, banishes and skips to spend.
  • Chests from bosses and elites give several upgrades at once. A downed hero in a party gets back up when an ally stands by them.
  • The account keeps what a run earns between runs: gold, talents, gear, perks, achievements and the heroes it opens.

The full reference, every hero, spell and zone, is in the game's own mode document, docs/modes/SHARD_SURVIVORS.md.