Skip to main content

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

  • Ticks are deliberately tiny: roughly 10 ticks per foot on even terrain. Integer tick durations everywhere.
  • Fine granularity minimizes same-tick ties between actors (though ties still happen - see Resolution).

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.
  • Zero phases allowed: a fighter feat can zero prep/recover on light attacks to enable combos. Readability and anti-spam live in the prep window, not recover.
  • One action state machine: every entity in the sim runs the same Action state machine - PREP, then EXEC, then RECOVER. Attacks, spells, movement, cancels, and reactions are all instances of one Action type; they differ only in parameters (phase durations, exec windows, completion effects), never in code path. A cancel or a reaction is itself an action with its own PER cycle, so the same rules compose.

Movement is an action

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