Dungeon-Mind

Game design docs for Chris's roguelike: AI-native monsters (Ammann-style action profiles), tick-based PER combat, Pathfinder-inspired rules. Started 2026-09-27.

Overview

Overview

Overview

Dungeon-Mind teaser key art

Dungeon-Mind teaser key art. "No monster fights alone."

Overview

dungeon-mind is Chris's roguelike (ASCII dungeon crawling, procedural generation, LLM-powered content). The current direction (Sept 2026) is a redesign of the combat and monster ecosystems around two big ideas:

  1. Monsters that know what they're doing - inspired by Keith Ammann's The Monsters Know What They're Doing: per-monster-type action profiles with ranked trigger lists.
  2. Tick-based combat (PER cycle) - every action is prep / exec / recover on a fine-grained discrete tick clock.

Both inspirations are starting points, not targets. The design is going its own direction and may end up too far from either Pathfinder or Ammann to need direct reference beyond inspiration.

Pillars

Status

Combat System

Tick engine, PER cycle, resolution, reactions, cancellation, movement

Combat System

Tick Engine and PER Cycle

Tick Engine and PER Cycle

The combat clock is a global discrete tick, not real time. Player-paced: the world advances only when the player commits an action or explicitly waits. "Whenever it's time for the user to enter something, everything stops."

Granularity

The PER Cycle

Every action - attacks, spells, movement, cancels, reactions - is modeled identically:

Phase Meaning
Prep Wind-up: gathering reagents, mental focus, shifting grip. The action has not started. This is the readable, interruptible window - only intelligent/experienced observers can read prep as an intention.
Exec The action is active: casting, swinging. You can't do anything else. May include zone windows (e.g. a whirlwind that slices anyone entering range). The action can be mitigated here, but it cannot be cancelled.
Recover The action is done; the actor is winding down - regaining footing, recovering balance. Nothing can affect the completed action at this point, but enemies can take advantage of the window while the actor is not fully recovered.

Movement is an action

Movement uses the same PER model; terrain is paid at the borders (see Movement and Terrain).

Combat System

Resolution, Initiative, and Reactions

Resolution, Initiative, and Reactions

Tick resolution

Each tick runs one loop over every actor, in initiative order:

  1. Actor action processing. Does the actor have an action in progress?
    • No - select the next action (monsters: from the profile's ranked triggers; player: input - the game stops until they commit) and process its first tick. A zero-prep action flows straight through to the next phase.
    • Yes - process the current tick of the PER cycle.
  2. Reaction collection. After the actor's processing, loop the other actors: did this tick trigger a reaction? If yes, add it to the queue - an actor may collect multiple reactions in the same tick. The reactor-side gate applies at collection: an actor in its own exec adds nothing (it is committed, not observing).
  3. Reaction pass. Loop the reaction queue in initiative order:
    • An actor with several queued reactions evaluates them and uses the best one for the current circumstances; the rest are discarded. Monsters rank by profile; the player is offered the choice.
    • If the actor executes the reaction: pause or cancel their current action (if any), per that action's interruptibility, then process the first tick of the reaction's own PER cycle. A short reaction may complete its exec within this tick and spend subsequent ticks in recover.

Movement is not a special phase - it is an action like any other and runs through the same actor loop. Within a movement action, "leaving" reaction triggers queue before "entering" triggers; initiative breaks ties within each kind.

Deterministic, seeded, logged. This is what makes fights replayable for debugging and tuning.

Initiative

Reactions

Reactions are short actions taken out of sequence, triggered by observing another actor's phase.

Can I react at all? - gated by your own phase:

My phase React? Cost
Prep Yes Pauses or cancels my prep, per the action's interruptibility
Exec No Committed - this is the point
Recover Yes The reaction's own PER handles the cost

What can my reaction do? - gated by the observed target's phase:

Observed phase What a reaction can do
Prep Can cancel the target's action (interrupt the windup). Knowledge-gated: only actors who can read prep as prep can target it.
Exec Can mitigate the action (reduce or disrupt its effect) - or do something entirely unrelated.
Recover Cannot affect the completed action at all - but the target is vulnerable, so this is an exploit window: act while they wind down.

Reactions never need to counter the triggering action. They trigger on phase events, not as restricted counters: a magehunter reacts to a mage's casting by throwing a knife; a mage under attack reacts by casting shield for extra AC.

Reactor cost - the reaction's own PER. The tax lives in the reaction's own cycle, never the parent action's. Reactions should be built with short or zero prep and short exec; the recover is the throttle - pad it to tax use. This composes with the exploit window: reaction spam leaves the actor in a long recover, where enemies can take advantage.

Interruptibility (pause vs cancel). When an actor reacts, what happens to their in-progress action is an action property: actions that demand deep concentration are cancellable on reaction; lighter actions pause and resume once the reaction fully completes (including its recover). Set per action, like any other parameter.

Baiting is a core player skill: a monster that has already spent its reaction window has no answer to a maneuver.

Combat System

Cancellation and Readability

Cancellation and Readability

Cancel actions

Cancelling is itself an action with its own PER cycle - not a special-case mechanic. There will be multiple actions that implement cancels:

Each cancel implementation is its own action with its own prep/exec/recover parameters and its own readability profile. Whether a cancel from a reaction or another action actually lands is subject to the target action's interruptibility (see Resolution). The one action state machine applies to cancels too.

Cancellation policy

Two windows, both in force:

Readability - the public/private state layer

Every actor's phase state has two layers:

Feats and abilities modify the broadcast, not the sim:

Cancelling must telegraph (the flinch): hands relax, grip shifts. Else cancel-spam has no counterplay. An experienced enemy reads the flinch and punishes it; a wolf does not.

This is also where the game's knowledge system lives: what you and the monsters can read about each other's intentions is a stat, not a given.

Combat System

Movement and Terrain

Movement and Terrain

Movement is a PER action like any other. Terrain is paid at the borders:

Phase Source of cost
Prep Departure difficulty of the tile you're on (getting off the log is hard)
Exec The transfer itself - physical or mental traits
Recover Arrival difficulty of the destination tile (landing on the log is hard)

Physical traits for exec: dex for balance, strength and encumbrance for load. Mental traits can make the same transfer harder too - fighting through an illusion, or opposing a strong will to continue.

Worked examples (log crossing)

  1. Grassy bank -> log: minimal prep (solid footing), traits-driven exec (simple step), significant recover (getting stable on the log).
  2. Log -> log: harder prep (concentrating on footing before shifting weight), same exec (physical or mental traits), same recover (log is still hard to settle on).
  3. Log -> bank: hard prep (leaving the log), same exec, easy recover.

Rules that fall out of this:

Danger tiles and 3D

Proposed direction: tiles are 3D, so there are no "open" tiles. Stepping into a space that is open in the current level means you fall until you hit a solid tile, then you're on that level. With a fly or levitate effect (equipment or spell), you stay at your current height unless you take an action to ascend or descend.

Why this stays an open question: ASCII display. Possible techniques: shading on terrain tiles to indicate space above, blank tile to indicate space below.

Open decisions

Monster AI

Ammann action profiles, knowledge state, decision models

Monster AI

Action Profiles (Ammann Framework)

Action Profiles (Ammann Framework)

Each monster type gets an action profile: a combat archetype (brawler, sniper, support, skirmisher, ...) plus a ranked list of actions with trigger conditions.

Profile structure

Evaluation model

Difficulty curve

Source material

PF2e stat blocks are almost directly convertible into profiles (combat roles, special actions, tactics are built into the monster design). Machine-readable statblock JSON may be available (FoundryVTT pf2e repo - verify license before use) or hand-authored in the game's own format.

Monster AI

Knowledge State and Decision Models

Knowledge State and Decision Models

The judgment layer

Most trigger conditions are computable in code (round/tick counts, HP fractions, allies alive, distance). A few are genuinely judgment-shaped:

Typed decision models (Jev/Kev class)

The model supplies judgment; your code owns policy. Ask typed questions over a compact state snapshot; get back probabilities/distributions, not text.

What stays in code

Rules and Licensing

ORC, Pathfinder SRD, scope decisions

Rules and Licensing

ORC and Pathfinder Licensing

Rules and Licensing (ORC / Pathfinder)

The short answer

Building a Pathfinder-2e-inspired roguelike is legal. The PF2e Remaster rules are under the ORC License (Open RPG Creative License) - perpetual, irrevocable, royalty-free, and explicitly covering video games. Game mechanics aren't copyrightable anyway; ORC grants use of the actual SRD expression (rules text, statblocks, action text).

What ORC covers

What it does NOT cover

Obligations if using SRD content

  1. ORC Notice (standard copy-paste legal block)
  2. Attribution notice (credit Paizo and upstream licensors)
  3. Reserved Material designation (declare what's yours)
  4. No endorsement claims; 60-day cure for breaches; no royalties, forever.

Chosen path

Path A: Pathfinder-inspired, own world. Own statblock format, own monster names, own setting (the game is redesigning its ecosystem anyway). If we later want specific SRD statblocks, bring them in under ORC with the notice. No Pathfinder branding in the title.

Path B: actual Pathfinder brand - contacting licensing@paizo.com for a commercial deal is not needed for this project.

Archives of Nethys status (July 2026)

Scope

Planning

Open questions and next steps

Planning

Open Questions

Open Questions

Open Questions

Open Questions

Things deliberately left undecided as of 2026-09-27 (design sessions 1-3):

  1. Damage during exec: no auto-abort by default - large spells stay viable. Design direction: significant damage triggers a concentration check; the threshold and which stats the check uses are tuning.
  2. Reaction PER values: exact phase costs for reaction actions - baseline guideline is short/zero prep, short exec, padded recover as the tax (the 0/1/N shape).
  3. Initiative as speed stat: how much prep/recover jitter should initiative shave (and does it compound with zero-phase feats)? Also worth asking whether the speed effect is necessary or even valuable - initiative already provides tick ordering and reaction priority; the jitter may be complexity without payoff.
  4. Encumbrance model: weight lands in the exec stat-side for movement (alongside dex) but the concrete numbers are open.
  5. Danger tiles and 3D: proposed approach is 3D tiles - there are no "open" tiles; stepping into an open space at your level means falling until you hit the bottom, then you're on that level; fly/levitate keeps you at height unless you take an action to rise or sink. Open because ASCII display is hard: shading on tiles could indicate space above; blank tiles could indicate space below.
  6. UI/information design: the stance is settled by Representation and Feedback Doctrine (diegetic representation, numberless player-facing UI in the target state, numbers behind a dev flag during development), so this question is now narrower than it was. Open residue: how ASCII conveys phase state, and whether the player's Lore/Int gates what the UI reveals (identification-tradition style). E.g. a first-ever encounter with a baby dragon - does it show as "d" (dragon) or as "L" (big lizard, because you've never seen one)?
  7. Exact tick basis and tile size: confirm the ~10 ticks/foot granularity and the base tile (leaning to 1 cubic foot; human footprint ~2 wide x 1 deep, matching the taller-than-wide roguelike glyph). Per-tile movement baseline at even terrain.
  8. Decision-model backend choice: hosted vs local vs fallback, when the judgment layer actually ships.
  9. Reaction timing: lean is a uniform rule - all reactions resolve on the tick after their trigger (no same-tick vs next-tick split). Consequence: single-tick execs are effectively uninterruptible by reactions; multi-tick execs have interruption windows (see 17).
  10. Reactive builds: acting almost entirely on reactions (a duelist stance that punishes anything acting nearby; reacting during your own reaction's recover to skip the tax). The exploit window makes this risky by design - a feat/stance space to explore.
  11. Interruptibility details: which actions pause vs cancel when the actor reacts (concentration-dependent on_react property); the taxonomy needs building out per action.
  12. Terrain on all prep/recover?: should terrain influence every action's prep and recover, not just movement? Casting on a mountain ledge in a thunderstorm should be harder than on steady ground. If yes, terrain applies a general prep/recover modifier, with movement-specific rules layered on top.
  13. Core resolution mechanic: direction - drop the d20; it's all probabilities on a computer. Use a uniform roll on 0-1. Displaying it as 1-100 percentages (roll*100+1) is confined to dev tooling and tuning logs: the player-facing UI carries no numbers per Representation and Feedback Doctrine. Keep the degrees of success mechanic from Pathfinder - it prevents nat-20/nat-1 -style oversized effects for events that should happen 5% of the time, and gives leveling a solid mechanism (the experienced archer is reliably better). Note: a uniform 0-1 roll is mathematically identical to a d20 (both flat) - the real questions are which thresholds define success/crit bands (PF2e uses +10/-10 over the DC) and whether to keep the distribution flat or move to a bell curve (2d10-style) to tame the tails further. The open residue: how close to Pathfinder's threshold structure vs making it our own.
  14. Tick clock scope: direction (initial) - while in the dungeon proper the clock always runs; any actor within XX tiles of activity is part of the PER loop. Open: the XX radius, rest, non-combat behavior, patrols and wandering (phased exploration).
  15. Player decision points: direction - player reactions are automated via a player-set decision policy - the first real "let the AI handle something" option for the player. It must be logged so the player can review and tweak their policy. Open: the policy UI, default policies, and this doubling as the testbed for autopilot mode.
  16. Group tactics: largely resolved - no separate squad AI. Even in a group, every monster decides independently; team tactics are built into each monster's decision policy as teammate-conditional rules: fighters "if a teammate is within x tiles, move to flank" or "if a teammate caster is present, stand between them and the enemy"; archers "move behind the meat shield / behind cover before firing". The specific rules are tuning.
  17. Interrupted or death mid-action: broader than death - what happens to actions interrupted mid-tick? With the uniform next-tick reaction rule (see 9), single-tick execs are effectively uninterruptible; multi-tick execs can be interrupted (many spells, the whirlwind). Interruption behavior is specified per action; default: nothing happens. Example: a two-tick fireball (tick 1 summon, tick 2 shoot) interrupted on tick 2 explodes in the caster's hands. Death is one cause of interruption, not the only one. Open.
  18. Senses and attraction: strong direction - alerting monsters is a full sensory model, gated by the monster's nature: noise, smell, distant lights in darkness, the sudden absence of light, a patrol not showing up when it should (which triggers very different responses from lazy goblins vs trained mercenaries). Loud environments mask sounds - near an active forge or rushing waterfall, nothing triggers. Intelligence and Perception are the key drivers. Specs open.
Planning

Roadmap and Next Steps

Roadmap and Next Steps

Spike 1 - tick engine core (first build)

The smallest thing that proves the system:

After the spike

Later

Far future

Future planning (not yet detailed)

Areas identified but still need their own planning sessions - placeholders to revisit:

Representation and Feedback Doctrine

Representation and Feedback Doctrine

Purpose

This page fixes the game's presentation stance: what game objects are allowed to look like, what the interface is allowed to tell the player, and how harm is modeled and communicated. It is a governing principle, not a tuning sheet. Tick mechanics live in the Combat System chapter; this governs how they are shown.

Three rules, then their known costs.

Rule 1: representation must be diegetic

A game object is represented by something that exists in the game's fiction. A sword is a sword. A spell is cast, not played. A character does not hold a hand of cards.

The test that separates a legitimate abstraction from an import: abstractions that evolved inside the medium are fine; objects borrowed from another medium are a tell. A health bar, a minimap, a pause menu and a level number are all non-diegetic, and all of them grew up inside computer games. A card is different in kind. It is an artifact of tabletop, and importing it means the fiction has been subordinated to a convention from a different medium. The signal the player receives is "board game in a video game suit."

The card test: strip the cards off a design and present the same multiset of options in any other form, keeping the draw rules identical. If the game plays the same, the cards were skin and should be replaced with the diegetic object.

Consequence: no literal card objects. Where a design reaches for cards, use the diegetic object instead (an ability, a weapon, a stance, a readied slot) and represent its state in the world.

Hidden information is not a defence for cards. The *bands solved diegetic hidden information decades ago: items carry a flavor appearance and stay unidentified until handled, used, or read with an identify spell; monster knowledge accumulates through fighting. Same information asymmetry, no cardboard.

Reference points where the same mechanic is expressed as an object in the world: Into the Breach (abilities always available, constrained by position and turn order), FTL (weapon charge times shown on the ship), Civ production queues, Darkest Dungeon (the constraint is position and stress, not a hand).

Rule 2: numberless is the target state, numbers are a dev aid

End state: the shipped player-facing UI carries no numeric readouts for health, damage or state. Feedback is textual and qualitative.

During development: numbers are permitted in the display behind a dev flag, for engineering and tuning. The flag is a debug affordance, not a crutch: numberless is the default and the flag is opt-in, never the reverse.

The reason for the end state: a number on screen substitutes for a mental model. The player reads the number instead of learning the system. Removing it forces the design to teach through description.

Build the text layer first, overlay the numbers on top

The ordering matters more than the flag. If the text vocabulary is deferred until "final product", it gets retrofitted under schedule pressure and then quietly dropped, and the game will have been tuned for a readout it no longer has.

So: the text channel is primary from the first playable build and is exercised in every session. Numbers are an overlay drawn on top of a system that already speaks. Every state change must emit its qualitative line before the numeric flag can be considered finished, and a build with the flag off must never be the first time anyone reads the wording.

The legibility test runs with the flag OFF

The two playtest questions at the bottom of this page only measure the text layer if the numbers are hidden. Run them with the dev flag off even mid-development, then flip the flag on afterwards to check the player's answer against the real numbers. Numbers on for engineering, numbers off for legibility testing.

Numbers stay a calibration channel

Even at the end state, numbers do real work off-screen: they let a designer verify that the model matches the game's actual state. That channel must be replaced, not merely deleted, in the player-facing UI. Every qualitative phrase must sit on a consistent, learnable, ordinal scale, globally. "A little", "a lot" and "much" must mean the same magnitudes everywhere, and the same phrasing must mean the same thing whether the source was a sword or a fireball.

Text that is decorative rather than ordinal fails this. "The goblin looks annoyed" conveys nothing the player can calibrate against, so nothing is learned. If feedback cannot be ranked, it is flavour, not information.

Precedents: Angband's textual feedback (monotonic phrasing the player learns), Brogue (deliberately playable with no numeric readouts, bars and description only), Dead Space (health on the character's spine, ammo on the weapon) for the diegetic HUD case.

Rule 3: fixed body, scaling avoidance

Health does not scale with level.

Progression therefore shows up as you get harder to hit, not you have a bigger pool. Survivability still grows. It grows as competence.

Precedents: Into the Odd (hit protection depletes first, then damage goes to attributes), Blades in the Dark (harm levels that reduce effect), Sekiro (posture and vitality as separate tracks).

Failure mode: damage must degrade verbs, not subtract quantity

If the buffer is a hit point pool with a new name, the design has rebuilt HP and bolted text onto it. The model only pays off when real damage changes capability:

These are categorical state changes. A wound system is a set of disabled or degraded verbs. A hit point pool is a subtraction.

Test: if resting restores a character completely, it is HP regardless of what it is called. Wounds have to change how the player plays.

Accepted cost: variance

Fixed body plus an avoidance buffer means an experienced character takes fewer hits, but each real hit is a larger fraction of their life. The distribution widens: most fights are comfortable, then one unlucky exchange nearly kills a veteran.

This is deliberate. It buys tension and costs computability. In a numbers game a careful player can prove they are safe; here they cannot compute survival at all. That is the trade, and it defines the audience. The min-max players lost here are lost on purpose, not by accident.

Feedback as rising action

A depletion buffer lets combat carry a narrative arc instead of a subtraction: fresh, working, winded, guard failing, exposed, wounded. Each stage is a beat with its own vocabulary. This is the main creative payoff of Rule 3, and it is only available if the feedback is ordinal (Rule 2).

Production cost: text at volume. Every ability, monster, wound and branch needs its own line, with enough variation to avoid becoming wallpaper. This is the main expense of the whole stance, and it is writing, not code.

Validation: two playtest questions

Neither requires a UI mockup.

  1. After a fight, stop the player: "How hurt are you, and what is wrong with you?" Compare their answer to actual state. If they cannot answer, the feedback vocabulary failed.
  2. "Would you fight another one of those right now?" Compare their answer to the real odds. If willingness does not track actual risk, the representation is lying to the player.

The two catch different failures. (1) catches a vocabulary that cannot describe the state. (2) catches a vocabulary that describes it inaccurately.

Where this collides with existing decisions