Appearance
Enemy & AI Design
Source: Extracted and expanded from
master_gdd.md§7.
Status: DRAFT — enemy stats are placeholder. Behavior scripts need prototyping.
Table of Contents
- AI Philosophy
- Behavior Archetypes
- Enemy Factions by Island
- Enemy Catalog
- Boss Designs
- Difficulty Scaling
- MVP Scope
- Open Questions
1. AI Philosophy
Enemies don't play to win. They play to create puzzles.
Every enemy's actions are:
- Fully telegraphed — move, ability, target, damage, and timing all visible on the timeline
- Deterministic — same game state always produces the same enemy decision
- Scripted, not adaptive — enemies follow behavior archetypes, not a minimax AI
The question is never "what is the enemy doing?" — it's "how do I respond to what I know is coming?"
What Enemies DO Know
- All unit positions on the grid
- Their own behavior script
- Their target's current HP and status
What Enemies DON'T Know
- Player's future moves (they react to current state only)
- Player's aspect synergies or relic effects
- Optimized tactics — they follow scripts, not strategy
2. Behavior Archetypes
2.1 Brute
| Property | Value |
|---|---|
| Target selection | Nearest enemy (shortest path distance) |
| Attack priority | Highest HP target (they're tanky, they fight tanky) |
| Movement | Direct path toward nearest enemy |
| Disruption response | If taunted: switch to taunter. If rooted: attack nearest reachable. |
| Threat level | Medium — predictable, tankable |
| Counterplay | Body-block with tank. Kite (Brutes are slow). Push into hazards. |
Behavior Script:
1. Find nearest enemy by path distance.
2. If adjacent to any enemy: Strike highest HP adjacent enemy.
3. Else: Move toward nearest enemy (max move range).
4. If enemy is 1 tile out of reach after moving: wait (don't end turn in threat range without attacking).2.2 Flanker
| Property | Value |
|---|---|
| Target selection | Furthest enemy from the main group OR lowest DEF enemy |
| Attack priority | Isolated targets (no allies adjacent) |
| Movement | Circuitous routes, avoids the "front line" |
| Disruption response | If blocked: find alternate path. If taunted: may ignore taunt (50% chance). |
| Threat level | High — can delete backline if not controlled |
| Counterplay | Don't isolate units. Body-block flank routes. Root/Slow. |
Behavior Script:
1. Find enemy with fewest adjacent allies (target isolation).
2. If adjacent to isolated target: Strike.
3. Else: Move toward isolated target, preferring routes that avoid enemy front-line units.
4. If no safe route exists: attack nearest enemy instead (fallback to Brute behavior).2.3 Artillery
| Property | Value |
|---|---|
| Target selection | Largest cluster of enemies (maximize AoE value) |
| Attack priority | Targets that JUST moved into cluster (punishes stacking) |
| Movement | Away from nearest enemy. Maintains range. |
| Disruption response | If enemy adjacent: move away (flee), then cast if possible. If can't flee: cast at adjacent enemy (desperation). |
| Threat level | High — AoE damage can swing battles. But cancelling their charge is prime counterplay. |
Behavior Script:
1. Find largest cluster of enemy units (density = units in 2-tile radius).
2. If optimal AoE target found: Cast AoE spell at cluster center. Charge time applies.
3. Else: Cast single-target spell at nearest enemy.
4. Move away from nearest enemy (maintain ≥ 3 tile gap).
5. If enemy is within 2 tiles after moving: prioritize fleeing over optimal targeting.2.4 Guardian
| Property | Value |
|---|---|
| Target selection | Nearest enemy threatening their protected target |
| Attack priority | Enemies adjacent to protected target |
| Movement | Stay between protected target and nearest enemy |
| Disruption response | Cannot be taunted (already protecting something). If displaced: move back to guard position. |
| Threat level | Low offensively, HIGH defensively — you must deal with the Guardian before the protected target. |
Behavior Script:
1. Identify protected target (specific ally or objective).
2. If enemy adjacent to protected target: Strike that enemy (or Taunt them if ability available).
3. Else: Move to tile between protected target and nearest enemy.
4. If no enemies near protected target: Fortify / Body-block for protected target.
5. Never move more than 3 tiles from protected target.2.5 Swarm
| Property | Value |
|---|---|
| Target selection | Same target as nearest other Swarm unit (focus fire) |
| Attack priority | Already-damaged enemies (finish off wounded) |
| Movement | Surround target — occupy all adjacent tiles |
| Disruption response | If one Swarm dies: others don't change behavior (they're replaceable). |
| Threat level | Low individually, HIGH in numbers — surround → dead. |
Behavior Script:
1. Find the same target as another Swarm unit (prefer already-damaged).
2. Move to adjacent tile that contributes to surround (prefer tile with no current occupant).
3. Strike.
4. If no surround target available: attack nearest enemy.2.6 Trickster
| Property | Value |
|---|---|
| Target selection | Random among top 3 "optimal" targets (appears unpredictable) |
| Attack priority | Varies. Some actions show (?) on timeline. |
| Movement | Erratic — sometimes toward, sometimes away |
| Disruption response | May teleport when threatened |
| Threat level | Variable — unpredictable, forces adaptation |
| Counterplay | Kill them first. They're fragile. Don't try to predict — just remove. |
Behavior Script:
1. Roll for action: 40% attack, 30% debuff/control, 30% reposition.
2. If attacking: choose random valid target from top 3 optimal.
3. If debuffing: target highest-stat enemy with most impactful debuff.
4. If repositioning: teleport to tile that is safe AND has LOS to future targets.
5. 25% chance any action shows (?) instead of specifics on timeline.3. Enemy Factions by Island
Island 1: The Unwoven
| Unit | Archetype | HP | ATK | MAG | DEF | SPD | Abilities |
|---|---|---|---|---|---|---|---|
| Stone Golem | Brute | 20 | 5 | 0 | 8 | 3 | Slam (AoE 1, 4 dmg), Harden (+4 DEF, 1 tick) |
| Timber Wolf | Flanker | 10 | 4 | 0 | 2 | 10 | Bite (5 dmg), Pack Howl (+2 SPD to all wolves for 2 ticks) |
| Sprite | Artillery | 8 | 1 | 5 | 1 | 6 | Arcane Bolt (5 dmg, 1 tick charge), Teleport (2 tiles) |
| Vine Horror | Guardian | 18 | 3 | 2 | 5 | 4 | Vine Whip (4 dmg, pull 1), Root (target Immobilize 2 ticks) |
| Thorn Rat | Swarm | 6 | 3 | 0 | 1 | 7 | Bite (3 dmg), Scurry (+2 move when HP < 50%) |
Island 2: The Ember Court
| Unit | Archetype | HP | ATK | MAG | DEF | SPD | Abilities |
|---|---|---|---|---|---|---|---|
| Fire Elemental | Artillery | 12 | 2 | 8 | 2 | 6 | Fireball (6 dmg, AoE 1, 1 tick), Immolate (melee attackers take 2 dmg) |
| Cultist Pyromancer | Artillery | 10 | 1 | 7 | 1 | 5 | Flame Wave (5 dmg, line 3, 1 tick), Inferno (AoE 2, 2 ticks) |
| Pyroclast | Brute | 22 | 6 | 0 | 6 | 4 | Magma Strike (7 dmg, leaves lava on tile), Eruption (3 dmg AoE 2) |
| Salamander | Flanker | 14 | 5 | 2 | 3 | 9 | Fire Fang (5 dmg + Burning), Lava Swim (move through lava unharmed) |
| Ember Wraith | Trickster | 10 | 3 | 5 | 2 | 8 | Smoke Veil (Invisible 1 tick), Fire Curse (target takes +50% fire dmg) |
| Obsidian Gargoyle | Guardian | 20 | 4 | 0 | 8 | 4 | Stone Form (immobile, +6 DEF, taunt), Wing Buffet (push 2) |
Island 3: The Timeless (v0.2 — deferred)
Full faction designed but deferred to post-MVP. Echo Knight, Paradox, Chronomancer, Phase Wraith, Void Spawn. Time manipulation and void mechanics. Boss: Time Warden.
4. Enemy Catalog (Detailed)
4.1 Stone Golem
BEHAVIOR: Brute
ISLAND: 1 (Plains)
TIER: Common (can appear as Elite with +10 HP, +2 ATK)
STATS: HP 20 | ATK 5 | MAG 0 | DEF 8 | SPD 3
MOVE: 2 tiles
ABILITIES:
Slam [Tier 0]: 4 physical damage. 2×2 AoE centered on self. Charge: 0 ticks.
Telegraph: "Slam" with 2×2 red overlay.
Harden [Tier 0]: +4 DEF for 2 ticks. Charge: 0 ticks.
Telegraph: Shield icon on golem.
ASPECT DROP: Common Defense (Shield, Stone Skin, or Parry)
TACTICAL NOTES:
- Slowest enemy in the game. Easy to outmaneuver.
- Slam AoE means don't cluster units around it.
- Excellent target for Slow/Root — it already barely moves.
- Harden makes it very tanky for 2 ticks. Either burst it before Harden or wait it out.4.2 Timber Wolf
BEHAVIOR: Flanker
ISLAND: 1 (Plains)
TIER: Common
STATS: HP 10 | ATK 4 | MAG 0 | DEF 2 | SPD 10
MOVE: 3 tiles
ABILITIES:
Bite [Tier 0]: 5 physical damage. Melee. Charge: 0 ticks.
Pack Howl [Tier 0]: All Timber Wolves in battle gain +2 SPD for 2 ticks. Charge: 0 ticks.
Telegraph: Howl icon on wolf + affected wolves highlighted.
ASPECT DROP: Common Movement (Sprint) or Common Function (Beastmaster)
TACTICAL NOTES:
- Fast. Will reach your backline turn 1 if you're not careful.
- Pack Howl makes ALL wolves on the map faster — kill them before they stack buffs.
- Low HP means any Strike kills it in 2 hits.
- Target priority: kill wolves before they surround a unit.5. Boss Designs
5.1 Golem (Island 1 Boss)
| Property | Value |
|---|---|
| Theme | Ancient stone guardian, awakened by the Unwoven |
| Arena | Ruined temple. Central platform (+1), surrounding ground (0), broken pillars (cover) |
| HP | 60 |
| ATK | 8 |
| DEF | 6 |
| SPD | 3 |
Phases:
| Phase | HP Threshold | Behavior |
|---|---|---|
| 1 (Stable) | 100% – 60% | Ground Slam (telegraphed 1 tick): 6 dmg, AoE 2 around self. Boulder Throw (telegraphed 1 tick): 8 dmg, line of 3 tiles, knockback 1. Pattern: Slam → Throw → Wait → Repeat. |
| 2 (Cracked) | 60% – 25% | Adds Roll (telegraphed 2 ticks): 10 dmg in a 4-tile line. Golem repositions to edge of arena, then rolls across. Pattern: Throw → Roll → Slam → Repeat. |
| 3 (Core Exposed) | < 25% | +2 SPD. All attacks charge 1 tick faster. Desperation Slam: AoE 3 instead of 2. Collapse: Every 3rd turn, a random arena pillar crumbles (1-tile AoE, 4 dmg). |
Arena Hazards:
- 4 pillars (HP 5, blocks LOS). Golem can destroy pillars with Roll.
- If all 4 pillars destroyed: Golem gains +2 ATK (enraged).
Aspect Drop: Rare Key Aspect (random, weighted toward Knight/Shaman).
5.2 Wyrm (Island 2 Boss)
| Property | Value |
|---|---|
| Theme | Ancient lava wyrm, lord of the caldera |
| Arena | Volcanic crater. Central lava pool (hazard), ring of solid ground (0), elevated ledges (+1,+2) |
| HP | 70 |
| ATK | 9 |
| DEF | 4 |
| SPD | 6 |
Phases:
| Phase | HP Threshold | Behavior |
|---|---|---|
| 1 (Burrowed) | 100% – 70% | Wyrm starts BURROWED (untargetable). Telegraphed eruption: marks 3×3 AoE 2 ticks in advance. Erupt (8 dmg in AoE). After erupting: emerges for 2 turns. Pattern: Burrow → Mark → Erupt → Emerge → Attack ×2 → Burrow. |
| 2 (Enraged) | 70% – 30% | Faster burrow cycle (burrow every 2 turns instead of 3). Adds Lava Breath (telegraphed 2 ticks): 5 dmg in cone (4 tiles), leaves lava tiles. Adds Tail Sweep (when emerged): 3 dmg to all adjacent, push 1. |
| 3 (Molten) | < 30% | Entire arena: lava rises 1 tile around edges. Safe zone shrinks. Wyrm heals 3 HP/tick while in lava. Eruption AoE increases to 4×4. |
Arena Hazards:
- Central lava pool (damage/tick, expanding in Phase 3).
- 3 basalt pillars (HP 5, explode on destruction: 3 dmg AoE 1).
Aspect Drop: Rare Function Aspect (random, weighted toward Warlock/Engineer).
6. Difficulty Scaling
Enemies at higher difficulty don't gain more HP. They gain behaviors and speed.
Difficulty Modifiers
| Modifier | Normal | Hard | Lethal | Breach |
|---|---|---|---|---|
| Enemy HP multiplier | 1.0× | 1.0× | 1.1× | 1.2× |
| Enemy move range | Base | +1 | +1 | +1 |
| Enemy charge speed | Base | Base | −1 tick | −1 tick |
| New behaviors | None | 1 per faction | 2 per faction | 3 per faction |
| Synergy pairs | None | None | 1 per fight | 2 per fight |
| (?) telegraphs | None | None | None | 1 per fight |
| Enemy count | Base | +1 per fight | +2 per fight | +2 per fight |
Example: Stone Golem Scaling
| Difficulty | Changes |
|---|---|
| Normal | Base (see §4.1) |
| Hard | +1 move (3 tiles). Harden also grants +2 ATK. |
| Lethal | +1 move. Harden buffs all allies in 2-tile radius. Pairs with Timber Wolf (wolf flanks while golem tanks). |
| Breach | +1 move. Harden AoE buff. Slam shows (?) for AoE size (could be 2×2 or 3×3). Golem + Sprite synergy pair. |
7. MVP Scope
Included
- [x] 2 factions (Unwoven, Ember Court) — 10 enemy types
- [x] 6 behavior archetypes (all implemented)
- [x] 3 difficulty levels: Normal, Hard, Lethal
- [x] 2 boss fights: Golem + Wyrm
- [x] Full telegraph system for all enemy actions
Deferred to Post-MVP
- [ ] Island 3 faction (The Timeless) — 5 enemy types
- [ ] Breach difficulty
- [ ] Boss Phase 3 animations/VFX polish
- [ ] Trickster (?) telegraph implementation (needs careful balance)
- [ ] Additional synergy pairs for Lethal+ difficulties
8. Open Questions
- Enemy scripting language: Behavior scripts are described in pseudocode above. Should they be data-driven (ScriptableObject + enum flags) or fully scripted (Lua/Python-style embedded scripting)? Data-driven is simpler. Scripting is more flexible for complex bosses.
- Boss respawn on retry: If the player dies to a boss, do they retry the boss fight or restart the island? (Recommend: retry boss fight. Roguelike runs should end on death, not force island replay. But this contradicts permadeath philosophy — death IS the end of the run.)
- Elite enemy markers: How does the player know an enemy is Elite vs Common? Visual: larger model, crown icon, unique name color. What distinguishes them on the timeline?
- Faction mixing: Can enemies from different factions appear in the same fight? (Recommend: no. Factions are island-locked. Exception: boss fights may summon adds from any faction.)
- Enemy aspect drops: Every enemy drops an aspect. Does this flood the player? Common enemies drop Common aspects — which convert to 25 EXP if duplicate. Is this satisfying feedback or inventory busywork?
- AI for co-op: Does enemy behavior change with 6–8 player units on the field? (Recommend: same behavior scripts, but target selection pool is larger. Swarm units may split across both players' squads.)
Next: Tone & Narrative