Skip to content

State ​

Standard gameplay loop progression (Stages -> Phases) relies on typical player priority. But tabletop games often have mechanics that operate independently of this standard priority structure.

The ATLAS State configuration manages these conditions using State-Based Effects.

State-Based Effects ​

SBEs are reactive evaluations. Rather than checking indiscriminately, the engine strictly evaluates the effects array immediately after any zone or entity changes state (e.g., when a property mutates, an entity moves, or a zone's occupant count changes).

If a condition evaluates to true, the resolution immediately fires. This is heavily used for entity deaths or limit overflows that don't belong to a specific player's action.

yaml
state:
  effects:
    - name: LethalDamage
      condition: @entity.self.health <= 0
      resolution: $Action.DestroyEntity(@entity.self)
    - name: OverdrawnHand
      condition: @zone.hand.count > 7
      resolution: $Action.RequireDiscard(@player.current, @zone.hand.count - 7)
json
{
  "state": {
    "effects": [
      {
        "name": "LethalDamage",
        "condition": "@entity.self.health <= 0",
        "resolution": "$Action.DestroyEntity(@entity.self)"
      },
      {
        "name": "OverdrawnHand",
        "condition": "@zone.hand.count > 7",
        "resolution": "$Action.RequireDiscard(@player.current, @zone.hand.count - 7)"
      }
    ]
  }
}