A strategy script is a small program that controls how an army fights. Phase 1 ships a curated preset library. Phase 2 unlocks the full editor. Either way, the script is what makes a small disciplined army able to defeat a larger one.
An army has a body (units + equipment + hero) and a mind (the strategy script). The body decides how hard it can hit; the mind decides where, when, and at whom.
A script is declarative — you describe triggers and reactions, not step-by-step moves. The combat resolver runs the script every tick.
Out of the box, players choose from preset scripts:
| Preset | Use case |
|---|---|
| Hold the Line | Defensive — hold formation, conserve morale, no aggressive flank. |
| Press the Attack | Offensive — full charge, prioritize enemy front-line. |
| Flanking Doctrine | Offensive flank — cavalry to flank, ranged focus on enemy second-line. |
| Skirmish & Withdraw | Hit-and-run — engage, deal damage, withdraw before commitment. |
| Sacred Ground Hold (Cairnveil) | Hold + omen-tilt — wait for Morrwen's tilt before committing. |
| Drum Encirclement (Red Earth) | Coordinate via drum — adjacent armies converge on signal. |
| Sea-Shock Boarding (Azure Isles, Fjordborn) | Disembark, melee shock, withdraw. |
| Tunnel Sap & Breach (Ironpeak) | Sapper-led siege approach. |
| Adoption Hold (Thunder Lodge) | Defensive engage; prefer to wound rather than kill (for Adoption events). |
Presets cover ~80% of standard battle scenarios. Phase 2 lets you blend or modify them.
The DSL is line-based, with ON / WHEN / DO blocks.
ON ...)ON enemy.engaged # entire enemy army engaged
ON enemy.cavalry.engaged_with_my.archers
ON my.morale.below(50)
ON hero.wounded
ON terrain.is(forest)
ON weather.is(fog)
ON allied_army.adjacent.intervention_ready
ON omen.tilt_received # Cairnveil-only
ON drum_signal.received # Red Earth / Thunder Lodge
WHEN ...)WHEN my.units.count > 100 AND enemy.units.count < 50
WHEN hero.attached AND hero.ability.ready("Rallying Cry")
WHEN terrain.elevation_advantage # Condor Crown
DO ...)ORDER my.front TO formation(shieldwall)
REPOSITION my.cavalry TO flank
ORDER my.archers TO focus_fire(enemy.heavy_infantry)
HOLD # do nothing this tick
WITHDRAW # break engagement, retreat
CALL ability("Rallying Cry")
SET reserve_cycle_rate = aggressive
ON enemy.cavalry.engaged_with_my.archers:
REPOSITION my.pikes TO front
ORDER my.archers TO loose_volley
END
ON my.morale.below(30) AND hero.alive:
CALL ability("Rallying Cry")
END
ON terrain.is(forest):
ORDER my.front TO formation(loose)
END
The combat resolver checks the Int stat of the army when applying triggers:
ON omen.received_tilt requires high enough average Int to recognize.This means giving an army a high-Int hero is doctrinally meaningful — it unlocks more sophisticated reactions.
| Trigger | Description |
|---|---|
enemy.feigned_retreat |
Detected only by mid+Int armies. Don't pursue. |
enemy.flank_about_to_close |
Cairnveil's mist-ambush detection. |
weather.changes_to(rain) |
Cut fire-weapon use. Jade Lotus check. |
god.witnessing_active |
Fight harder; faith-aura active. |
hero.surrounded |
Hero-rescue subroutine kicks in. |
casualty_rate > 0.6 |
Withdraw threshold. |
Phase 2 ships an in-game script editor:
A well-tuned script can multiply your effective BP by 1.5-2× against an opponent running a default preset.
You can defeat a script by:
Sources: combat_system.md §6 (trigger editor), §7 (preset library), metrics.md §12G (Int gating).