# 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).