Design documents · The game plan

Act 1 — Enemy Roster Spec

Every enemy, elite and mini-boss in Act 1.

Stats, behaviours, and placement for every Act 1 enemy. Written 2026-09-14. Feeds development-plan.md Step 14 (enemies + spawner, Phase 1) and Step 18 (Zone B additions, Phase 2). Built on the Law of Monsters (../plan-version-1/older-plan/book/14-the-law-of-monsters.md), the bestiary (../plan-version-1/older-plan/book/15-bestiary-and-bosses.md), and the systems in ../plan-version-1/older-plan/future-game-project/combat-and-stats.md. The boss (Polydegmon) is specced separately in boss-polydegmon.md.

Numbers are relative intent (Low/Med/High), tuned in-engine against Gate 0/1 feel. What's fixed is category, role, behaviour, damage/resist profile, and placement.


Design principles (from the Law of Monsters)

  • Killing is maintenance, not punishment. Nothing here is evil. The dead are stuck and frustrated; the machinery is still doing its job. This shapes tone, barks, and death — never "malevolent."
  • Fame is difficulty (diegetic tiers): trash is anonymous, elites are locally famous (procedural names = the names locals gave them), minibosses are named in one valley, the boss is world-famous. That is the difficulty curve.
  • Category determines behaviour, placement, and respawn:
    • Unprocessed (the dead never filed) — Act 1's backbone. Resist Umbral, weak to Divine (combat-and-stats). Stuck, not cruel.
    • Unattended (divine machinery still running) — Zone B / the gate. Killing one breaks something (show it: a boundary nothing patrols now).
    • Beast (just animals, no metaphysics) — "always leave one plain thing." Neutral resists.
  • Respawn: open connective ground repopulates over time (the valley is still unattended); landmark arenas and the boss do not repopulate within a run (a bounded problem can be finished).

Roster at a glance

EnemyCategoryRoleZoneDmg typeResist profileThreat
Field RatsBeastswarmAPhysicalneutraltrash
KeresUnprocessedfast swarm meleeA, BUmbral+Umbral / −Divinetrash
Skeletal HopliteUnprocessedmelee, shielded, formationA, BPhysical+Umbral / −Divinetrash→elite
Shade / EidolonUnprocessedranged spectral boltA, BUmbral+Umbral / −Divinetrash
Dryad BlightUnattendedarea-denial, rootBPhysical (+root)neutral, −Firetrash→elite
The First FurrowUnprocessedpack-leader/raiserAUmbral+Umbral / −Divineminiboss
The Threshold WardenUnattendedanchor, toll-grabBUmbral+Umbral / −Divineminiboss
PolydegmonUnattendedsite bossB (arena)Umbralhigh Umbral / −Divineboss — see boss doc

The Umbral/Divine pattern is the act's teaching tool: most enemies resist Umbral and take extra from Divine, so the Oracle's radiance feels strong, and Umbral resist (the Warding affix) is the first resist worth chasing. Beasts and Blights break the pattern so it isn't a blanket rule.


Reusable behaviour blocks (build these once)

Every enemy is a composition of a few AI behaviours — the solo-dev efficiency move. Author these as components, then enemies are data:

  1. Melee Chaser — path to target, attack in range, on GCD.
  2. Ranged Kiter — hold distance, fire a projectile, reposition if approached.
  3. Swarm — cheap chaser with low HP, spawns/moves in numbers, loose flocking.
  4. Area-Denier — semi-stationary; creates/holds a hazard or root zone.
  5. Formation — moves and attacks as a small block; shields raise together.
  6. Pack-Leader — buffs/raises nearby allies; an aura + an occasional summon.
  7. Anchor — high Footing, holds a chokepoint, a telegraphed heavy attack + a grab.

The boss framework (boss doc) is the same idea scaled up (phases + scheduler).


The enemies

Field Rats (⬦ Beast — the plain thing)
  • Role: pure swarm trash (Swarm block). Fast, very low HP, many at once.
  • Behaviour: flock to the player, nip, die in packs. No metaphysics.
  • Attack: weak Physical bite.
  • Resists: neutral. Footing: near zero (knockback scatters them satisfyingly).
  • Where: Zone A (the drowned channel, granary edges). Teaches AoE value.
  • Bestiary line: "A pig, at scale." (roster's plain register)
Keres (⬦ Unprocessed)
  • Role: fast swarm melee spirit (Swarm + Chaser). Low HP, erratic, dangerous in numbers.
  • Behaviour: dart in, strike, drift — "they attend the moment and then have nowhere to be." Not aggressive-cruel; aimless-hostile.
  • Attack: quick Umbral claw.
  • Resists: +Umbral, −Divine. Footing: low.
  • Where: Zones A & B; the first enemy the player meets.
  • Bestiary line: "Small spirits of a violent death. They attend the moment and then have nowhere to be."
Skeletal Hoplite (⬦ Unprocessed) — the backbone
  • Role: the standard melee soldier (Chaser + Formation). Canon's "Act 1 opener, the first thing the player kills."
  • Behaviour: advances, raises shield to block a frontal attack, strikes with a spear. In groups, forms a small shield-line (a thematic echo of the player Hoplite — and a reason to flank or use AoE/Divine).
  • Attack: Physical spear thrust; shield-block reduces frontal damage (rewards positioning).
  • Resists: +Umbral, −Divine. Footing: medium (a braced soldier).
  • Where: Zones A & B; elite variants appear as pack-leaders.
  • Bestiary line: "Four centuries of local wars are buried along this road. The ground held them until it stopped."
Shade / Eidolon (⬦ Unprocessed) — the ranged threat
  • Role: ranged spectral attacker (Ranged Kiter). Gives Act 1 a reason to close or break line of sight.
  • Behaviour: drifts, keeps distance, throws a spectral bolt; phases briefly if cornered.
  • Attack: Umbral bolt (moderate, telegraphed).
  • Resists: +Umbral, −Divine. Footing: low.
  • Where: Zones A & B; more common near the Ploutonion (pushing up from the gate).
  • Bestiary line: "Filed in no register. Present at the intake for a period no one has calculated."
Dryad Blight (⬦ Unattended) — Zone B's new threat
  • Role: area-denial / control (Area-Denier). Introduced when the grove is cut.
  • Behaviour: semi-rooted; lashes and entangles (applies Root/Slow), holding the player in melee for the undead to reach. "The tree is gone. The binding was not informed." — it isn't attacking you, it's still guarding a tree that no longer exists.
  • Attack: Physical lash + a Root cast (telegraphed).
  • Resists: neutral, −Fire (dry, dead wood — rewards a Fire affix and hints at build variety). Footing: high while rooted, low when it repositions.
  • Where: Zone B (the cut grove, the deep grove).
  • Bestiary line: "Bound to a tree, a spring or a stretch of river. The tree is gone. The binding was not informed."

Elites (locally famous) — affixes as the local story

Any trash type can spawn as an elite pack-leader (Pack-Leader block): more HP, an aura, and 1–2 affixes. Per canon, an elite's affixes are the shape of the story that valley tells about it, and its procedural name is the name the locals gave it.

Act 1 elite affix pool (a subset — full pool grows in later acts):

AffixEffectLocal-name flavour
Emberburns on hit (Fire DoT)the Ember of the Low Field
Frost-touchedchills (slows + lowers Footing)the Cold that Sat in Thria
Unyieldinghigh bonus HP, slowthe One They Could Not Put Down
Fleetfast move/attackHe Who Reaches the Gate First
Wardingreflects a little damagethe Turned Blade
Raiser (undead only)periodically raises 1–2 fallenthe Sergeant of the Barrow
Drainingheals on hitting you (Umbral)the Thing in Kallias' Well

Name pattern: the <trait> of <local place> / He/She Who <does the thing> — generated, but reads as folklore. Rare/champion packs are the same one tier up (a story that reached a market town) — heavier affix combos.


Minibosses (named in one valley)

The First Furrow (⬦ Unprocessed — Zone A, Ch. 1 climax)
  • Role: pack-leader/raiser miniboss (Pack-Leader + Chaser). The risen field-hand at the barrow-line; the thing keeping the deep field unworkable.
  • Behaviour: commands the local dead — buffs nearby Skeletal Hoplites/Keres and raises 1–2 fallen periodically (teaches the player to kill the leader, not chase adds forever). Moderate melee itself.
  • Attacks: Umbral scythe-sweep (telegraphed cone) + a raise-dead cast.
  • Resists: +Umbral, −Divine. Footing: medium-high.
  • Design job: the first "kill the priority target" lesson, on gentle stakes. Clearing it completes Ch. 1 and opens the grove.
The Threshold Warden (⬦ Unattended — Zone B, deep grove)
  • Role: anchor miniboss (Anchor block) — a gate-guardian still doing its job at a door that no longer closes. A deliberate foreshadow of Polydegmon (related, not identical — a guardian, where Polydegmon is the intake).
  • Behaviour: holds a chokepoint; high Footing (barely moved by CC); a slow, telegraphed heavy overhead; and a short "toll" grab — a mini version of Polydegmon's Grasping Toll (pulls you a step, Umbral damage). Teaches the grab-dodge before the boss uses it at scale.
  • Attacks: Umbral heavy strike (big telegraph) + Toll grab (line telegraph).
  • Resists: +Umbral, −Divine. Footing: very high.
  • Killing it "breaks something" (canon): afterwards the deep grove's boundary is visibly unpatrolled — undead drift freely toward the fields. Show it; never say it.
Polydegmon (⬦ Unattended — boss)

See boss-polydegmon.md. The Warden's mechanics (Footing, the grab) are its training wheels.


Difficulty scaling (Mortal → Heroic → Divine)

Per the plan's replay model — add behaviour, not just numbers (same EnemyDefinition assets, scaled parameters):

TierWhat changes
MortalBase roster above. Long telegraphs, small packs, forgiving.
HeroicBigger packs; Keres burst on death (small Umbral pop — telegraphed); Shades fire a second bolt; more elites; resist cap lowered so Umbral resist starts to matter.
DivineElites can roll two affixes; Skeletal Hoplites hold tighter formations (flank/AoE mandatory); the First Furrow raises faster; resist cap lowest.

Respawn rules (fiction-driven, from the Law of Monsters)

  • Open connective ground (furrows, channel, cut grove) repopulates slowly over time — the valley is still unattended. Honest from Act 1: the player treats symptoms.
  • Landmark arenas (Threshing Floor after clearing, the boss arena) and the Ploutonion do not repopulate within a run — a bounded problem can be finished.
  • Practically: a "region unattended timer" on connective spawners; arenas flagged one-shot per run.

Implementation notes (dev-plan Steps 14 & 18)

  • EnemyDefinition (ScriptableObject) fields: category, behaviour block(s), stats (HP/damage/speed via the shared Stats), damage type, resist profile, Footing, loot table ref, model/anim set, ability list, elite-eligible flag.
  • Build the behaviour blocks first (Melee Chaser, Ranged Kiter, Swarm, Area-Denier, Formation, Pack-Leader, Anchor); every enemy is then a data composition — the whole roster costs a handful of scripts.
  • One spawner, parameterized (pool, density, party-size multiplier, difficulty, elite chance) — never per-zone.
  • Damage type + resist flow through the standard damage pipeline (Step 7): Umbral resist / Divine weakness are just values on Stats.
  • Elite system: roll affixes from the pool → apply modifiers + generate the local name from a template. Reusable across all acts.
  • Reuse for later acts: the same blocks cover most of the six-act bestiary; Act 1 only omits Unbound / Remembered Wrong / Dissolving (those arrive with their acts).

Open questions

  • Give Shades a light teleport/blink on being cornered, or keep them simple kiters? Lean: simple in Act 1, blink is a later-act upgrade.
  • Does the Threshold Warden drop a guaranteed Umbral-resist piece (so the player is equipped for Polydegmon)? Lean: yes — it teaches itemization right before the test.
  • Elite density on Mortal — how often a pack has a leader. Lean: ~1 in 4 packs, rising by difficulty.
  • Whether Field Rats are worth the art/anim cost for a first release, or fold their "plain swarm" role into a non-undead beast already in the packs. Lean: keep one cheap beast — the tonal relief is worth it.

All design documents