How a delivery and an effect make a spell
Every spell is two runes. The delivery decides how the spell travels: a projectile, a burst around a point, a beam, a chain that jumps between targets, a mine, a shotgun spread, or a cast on yourself. The effect decides what it does when it lands: fire, frost, force, void, mend, poison, or lightning.
You carry five rune slots into a run, chosen at the workbench in your house, so no build has everything. A build with two deliveries and three effects can cast six different spells. One with three deliveries and two effects can also cast six, but with a different feel. Choosing what to leave behind is half the game.
The whole grid
Here are all 49, straight from the game's source. Rows are deliveries, columns are effects.
| Fire | Frost | Force | Void | Mend | Poison | Lightning | |
|---|---|---|---|---|---|---|---|
| Projectile | Fireball | Ice Shard | Force Bolt | Void Arrow | Mending Shot | Venom Bolt | Thunder Bolt |
| Burst | Flame Burst | Frost Nova | Shockwave | Null Zone | Healing Pulse | Toxic Cloud | Storm Burst |
| Beam | Fire Ray | Frost Beam | Force Lance | Disintegrate | Healing Ray | Acid Stream | Volt Beam |
| Chain | Chain Fire | Ice Chain | Magnetic Pull | Null Chain | Mend Chain | Plague Chain | Arc Chain |
| Mine | Fire Trap | Frost Trap | Knockback Mine | Silence Trap | Healing Well | Venom Trap | Shock Trap |
| Shotgun | Scatter Flame | Ice Scatter | Buckshot Blast | Void Scatter | Mend Scatter | Toxic Spray | Shock Burst |
| Self | Ember Cloak | Frost Skin | Countershell | Null Shell | Rejuvenate | Venom Skin | Static Shield |
Mana is just addition
Each rune has a mana cost, and a spell costs the sum of its two runes. There's no per-spell pricing to balance, and you can work out the cost of anything in your head.
| Delivery | Mana | Effect | Mana |
|---|---|---|---|
| Self | 8 | Force | 8 |
| Projectile | 10 | Frost | 10 |
| Mine | 12 | Poison | 11 |
| Beam | 15 | Fire | 12 |
| Chain | 18 | Lightning | 13 |
| Shotgun | 18 | Void | 14 |
| Burst | 20 | Mend | 16 |
So a Fireball is 10 + 12 = 22 mana, and the battle screen shows exactly that. The cheapest spell in the game is Countershell (Self + Force, 16 mana). The most expensive is Healing Pulse (Burst + Mend, 36).
What each effect leaves behind
Five of the seven effects can leave a status on whatever they hit. The roll happens on a hit, crits included, never on a miss. Hitting something that already has the status refreshes its duration instead of stacking it, so there's no gain in spamming one effect.
| Effect | Status | Chance | Lasts |
|---|---|---|---|
| Fire | Burning: damage over time | 30% | 2 turns |
| Frost | Chilled | 40% | 3 turns |
| Void | Silenced | 25% | 2 turns |
| Poison | Poisoned: 3 damage per turn | 45% | 4 turns |
| Lightning | Stunned | 20% | 1 turn |
Force and Mend don't proc: Force pushes and pulls, and Mend heals. Poison spells deliberately hit for about half as much up front, because the poison does most of their work. Those 45% odds and four turns of ticking make it the patient player's effect.
The odd ones out
Self
Self spells don't travel at all. They wrap the caster in a reactive aura for a few turns. Countershell cuts incoming damage in half and has a 30% chance to reflect a whole hit back at the attacker. Frost Skin absorbs part of each hit and can chill whoever made it. Static Shield has an even chance to send half of each hit back. Rejuvenate is a plain heal over time: 14 health a turn for three turns.
Mine
Mines don't fire when cast. They arm on a cell you pick and go off three turns later, hitting a 3×3 area, so they damage whoever is standing there when the fuse runs out, not whoever was there when you cast. Cards can shorten the fuse, or let you arm several mines in one turn, and each extra mine adds 10% to your mine damage for the rest of the fight.
Luck
Every attack has about an 8% chance to miss and a 12% chance to crit for 1.5×, and damage rolls vary by 15% either way. That's enough that a plan which almost works will sometimes work, and a plan that should work will sometimes not. Most of the stories people tell about a run start there.
The whole system is one table
In code, a spell is a pure function of its two runes. The same pair always produces the same spell, and the game's entire spellbook is one table keyed by delivery and effect:
'projectile+fire': { name: 'Fireball', damage: 20, speed: 240, duration: 3 },
'burst+frost': { name: 'Frost Nova', damage: 10, radius: 90, duration: 3 },
'beam+void': { name: 'Disintegrate', damage: 21, speed: 400 },
...
Adding a spell means adding a row, not touching combat, rendering, or the interface. A pair with no row still works, falling back to sensible defaults, so a new rune can't break a fight. The game asks for the current spell every frame (the battle screen previews it as you pick runes), so results are cached and frozen. Each pair is built once and shared, and nothing can change it by accident.
That small, closed design is why the grid above could be copied straight out of the source for this post. When the magic system is one table, the documentation and the game can't disagree.