{
  "$defs": {
    "AdventureXpAwardEvent": {
      "description": "The end-of-adventure XP award: the totals and the per-head share.",
      "properties": {
        "code": {
          "default": "session.xp.adventure_award",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "adventure_xp_award",
          "default": "adventure_xp_award",
          "title": "Event Type",
          "type": "string"
        },
        "monster_xp": {
          "title": "Monster Xp",
          "type": "integer"
        },
        "treasure_xp": {
          "title": "Treasure Xp",
          "type": "integer"
        },
        "share": {
          "title": "Share",
          "type": "integer"
        },
        "survivors": {
          "items": {
            "type": "string"
          },
          "title": "Survivors",
          "type": "array"
        }
      },
      "required": [
        "monster_xp",
        "treasure_xp",
        "share",
        "survivors"
      ],
      "title": "AdventureXpAwardEvent",
      "type": "object"
    },
    "AttackRolledEvent": {
      "description": "An attack roll resolved: the die, the modifiers, and what it needed.\n\nEmitted by [`attack_roll`][osrlib.core.combat.attack_roll]. `code` is\n`combat.attack.hit` or `combat.attack.missed` for a rolled attack, or\n`combat.attack.auto_hit` for a helpless target (no roll required); `roll`,\n`total`, and `required` are `None` in the auto-hit case. `natural` carries 1 or\n20 when the natural roll overrode the modified total.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "attack_rolled",
          "default": "attack_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "attacker_id": {
          "title": "Attacker Id",
          "type": "string"
        },
        "defender_id": {
          "title": "Defender Id",
          "type": "string"
        },
        "attack_name": {
          "title": "Attack Name",
          "type": "string"
        },
        "roll": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Roll"
        },
        "modifier": {
          "default": 0,
          "title": "Modifier",
          "type": "integer"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Total"
        },
        "required": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Required"
        },
        "defender_ac": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Defender Ac"
        },
        "natural": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Natural"
        }
      },
      "required": [
        "code",
        "attacker_id",
        "defender_id",
        "attack_name"
      ],
      "title": "AttackRolledEvent",
      "type": "object"
    },
    "BattleEndedEvent": {
      "description": "The battle ended: victory, the party fled, or defeat.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "battle_ended",
          "default": "battle_ended",
          "title": "Event Type",
          "type": "string"
        }
      },
      "required": [
        "code"
      ],
      "title": "BattleEndedEvent",
      "type": "object"
    },
    "BattleRoundEvent": {
      "description": "A battle round began.",
      "properties": {
        "code": {
          "default": "battle.round.started",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "battle_round",
          "default": "battle_round",
          "title": "Event Type",
          "type": "string"
        },
        "round": {
          "title": "Round",
          "type": "integer"
        }
      },
      "required": [
        "round"
      ],
      "title": "BattleRoundEvent",
      "type": "object"
    },
    "BattleStartedEvent": {
      "description": "Battle began: the range-track machine takes over.",
      "properties": {
        "code": {
          "default": "battle.started",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "battle_started",
          "default": "battle_started",
          "title": "Event Type",
          "type": "string"
        }
      },
      "title": "BattleStartedEvent",
      "type": "object"
    },
    "ConditionGainedEvent": {
      "description": "A creature gained a condition.\n\nEmitted by [`grant_condition`][osrlib.core.effects.grant_condition] \u2014 directly, or\nthrough [`EffectsLedger.attach`][osrlib.core.effects.EffectsLedger.attach]\nattaching an effect that carries one.",
      "properties": {
        "code": {
          "default": "effects.condition.gained",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "condition_gained",
          "default": "condition_gained",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "condition": {
          "title": "Condition",
          "type": "string"
        },
        "effect_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Effect Id"
        }
      },
      "required": [
        "target_id",
        "condition"
      ],
      "title": "ConditionGainedEvent",
      "type": "object"
    },
    "ConditionRemovedEvent": {
      "description": "A creature lost a condition.\n\nEmitted by [`remove_condition`][osrlib.core.effects.remove_condition] \u2014 directly,\nor through [`EffectsLedger.release`][osrlib.core.effects.EffectsLedger.release]\nor expiry removing the effect that granted it.",
      "properties": {
        "code": {
          "default": "effects.condition.removed",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "condition_removed",
          "default": "condition_removed",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "condition": {
          "title": "Condition",
          "type": "string"
        },
        "effect_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Effect Id"
        }
      },
      "required": [
        "target_id",
        "condition"
      ],
      "title": "ConditionRemovedEvent",
      "type": "object"
    },
    "CurseRevealedEvent": {
      "description": "A cursed item revealed its true nature \u2014 and pins itself to its bearer.",
      "properties": {
        "code": {
          "default": "items.curse.revealed",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "curse_revealed",
          "default": "curse_revealed",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "instance_id": {
          "title": "Instance Id",
          "type": "string"
        },
        "template_id": {
          "title": "Template Id",
          "type": "string"
        }
      },
      "required": [
        "character_id",
        "instance_id",
        "template_id"
      ],
      "title": "CurseRevealedEvent",
      "type": "object"
    },
    "DamageAbsorbedEvent": {
      "description": "A hit absorbed by an immunity gate: no damage was rolled.\n\nEmitted in place of\n[`DamageDealtEvent`][osrlib.core.events.DamageDealtEvent] when a\n`harmed_only_by` or energy defense excludes the source.",
      "properties": {
        "code": {
          "default": "combat.damage.absorbed",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "damage_absorbed",
          "default": "damage_absorbed",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "attacker_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Attacker Id"
        },
        "keys": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Keys",
          "type": "array"
        }
      },
      "required": [
        "target_id"
      ],
      "title": "DamageAbsorbedEvent",
      "type": "object"
    },
    "DamageDealtEvent": {
      "description": "Damage applied to a creature.\n\nEmitted by [`deal_damage`][osrlib.core.combat.deal_damage], from a weapon attack, a\nspell, or an effect such as splash damage. Carries the amount only \u2014 never the\ntarget's remaining hit points: monster HP is hidden by design, and the\nreferee-visibility\n[`HitPointsReportedEvent`][osrlib.core.events.HitPointsReportedEvent] carries it.",
      "properties": {
        "code": {
          "default": "combat.damage.dealt",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "damage_dealt",
          "default": "damage_dealt",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "attacker_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Attacker Id"
        },
        "amount": {
          "title": "Amount",
          "type": "integer"
        },
        "rolls": {
          "default": [],
          "items": {
            "type": "integer"
          },
          "title": "Rolls",
          "type": "array"
        },
        "keys": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Keys",
          "type": "array"
        },
        "non_regenerable": {
          "default": false,
          "title": "Non Regenerable",
          "type": "boolean"
        }
      },
      "required": [
        "target_id",
        "amount"
      ],
      "title": "DamageDealtEvent",
      "type": "object"
    },
    "DeathEvent": {
      "description": "A creature reduced to 0 hit points or less is killed.\n\nEmitted by [`kill`][osrlib.core.effects.kill]. `code` is `combat.death.died` for an\nordinary death, or `combat.death.permanent` when a regenerating creature's\nnon-regenerable damage ledger reaches max hit points, ending any chance of\nrevival (the troll).",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "death",
          "default": "death",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        }
      },
      "required": [
        "code",
        "target_id"
      ],
      "title": "DeathEvent",
      "type": "object"
    },
    "DetectionRolledEvent": {
      "description": "A referee-rolled detection die: search, listen, and trap-spring checks.\n\nRolled whether or not anything is there (the no-leak convention); `roll` is\n`None` when a zero chance consumed no die.",
      "properties": {
        "code": {
          "default": "exploration.detection.rolled",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "detection_rolled",
          "default": "detection_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Character Id"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        },
        "chance": {
          "title": "Chance",
          "type": "integer"
        },
        "roll": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Roll"
        },
        "passed": {
          "title": "Passed",
          "type": "boolean"
        }
      },
      "required": [
        "kind",
        "chance",
        "passed"
      ],
      "title": "DetectionRolledEvent",
      "type": "object"
    },
    "DiceRolledEvent": {
      "description": "An authorial dice roll resolved (referee \u2014 the referee's hidden adjudication rolls).\n\nEmitted by [`RollDice`][osrlib.crawl.commands.RollDice] when a referee resolves a\nfreeform *chance* outcome by rolling through the seeded session. Carries the\nexpression that was rolled, the `total`, and each individual die result in\n`rolls`.",
      "properties": {
        "code": {
          "default": "adjudication.dice_rolled",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "dice_rolled",
          "default": "dice_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "expression": {
          "title": "Expression",
          "type": "string"
        },
        "total": {
          "title": "Total",
          "type": "integer"
        },
        "rolls": {
          "items": {
            "type": "integer"
          },
          "title": "Rolls",
          "type": "array"
        }
      },
      "required": [
        "expression",
        "total",
        "rolls"
      ],
      "title": "DiceRolledEvent",
      "type": "object"
    },
    "DoorEvent": {
      "description": "A door changed state; the edge is named by its cell and direction.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "door",
          "default": "door",
          "title": "Event Type",
          "type": "string"
        },
        "x": {
          "title": "X",
          "type": "integer"
        },
        "y": {
          "title": "Y",
          "type": "integer"
        },
        "direction": {
          "title": "Direction",
          "type": "string"
        },
        "character_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Character Id"
        }
      },
      "required": [
        "code",
        "x",
        "y",
        "direction"
      ],
      "title": "DoorEvent",
      "type": "object"
    },
    "EffectAttachedEvent": {
      "description": "An effect attached to a creature, item, or location (referee bookkeeping).\n\nEmitted by [`EffectsLedger.attach`][osrlib.core.effects.EffectsLedger.attach].",
      "properties": {
        "code": {
          "default": "effects.effect.attached",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "effect_attached",
          "default": "effect_attached",
          "title": "Event Type",
          "type": "string"
        },
        "effect_id": {
          "title": "Effect Id",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        },
        "target_ref": {
          "title": "Target Ref",
          "type": "string"
        },
        "expires_round": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Expires Round"
        }
      },
      "required": [
        "effect_id",
        "kind",
        "target_ref"
      ],
      "title": "EffectAttachedEvent",
      "type": "object"
    },
    "EffectExpiredEvent": {
      "description": "An effect's duration ran out (referee bookkeeping).\n\nEmitted by [`EffectsLedger.advance`][osrlib.core.effects.EffectsLedger.advance].",
      "properties": {
        "code": {
          "default": "effects.effect.expired",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "effect_expired",
          "default": "effect_expired",
          "title": "Event Type",
          "type": "string"
        },
        "effect_id": {
          "title": "Effect Id",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        },
        "target_ref": {
          "title": "Target Ref",
          "type": "string"
        },
        "round": {
          "title": "Round",
          "type": "integer"
        }
      },
      "required": [
        "effect_id",
        "kind",
        "target_ref",
        "round"
      ],
      "title": "EffectExpiredEvent",
      "type": "object"
    },
    "EffectReleasedEvent": {
      "description": "An effect explicitly released before expiry (referee bookkeeping).\n\nEmitted by [`EffectsLedger.release`][osrlib.core.effects.EffectsLedger.release] \u2014 a\n*dispel magic* or a charm's passed re-save, for example.",
      "properties": {
        "code": {
          "default": "effects.effect.released",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "effect_released",
          "default": "effect_released",
          "title": "Event Type",
          "type": "string"
        },
        "effect_id": {
          "title": "Effect Id",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        },
        "target_ref": {
          "title": "Target Ref",
          "type": "string"
        }
      },
      "required": [
        "effect_id",
        "kind",
        "target_ref"
      ],
      "title": "EffectReleasedEvent",
      "type": "object"
    },
    "EffectTickedEvent": {
      "description": "An effect's periodic tick resolved (referee bookkeeping).\n\nEmitted by [`EffectsLedger.advance`][osrlib.core.effects.EffectsLedger.advance]\n(regeneration, a charm's re-save) or\n[`pop_mirror_image`][osrlib.core.spells.pop_mirror_image] popping one figment.",
      "properties": {
        "code": {
          "default": "effects.effect.ticked",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "effect_ticked",
          "default": "effect_ticked",
          "title": "Event Type",
          "type": "string"
        },
        "effect_id": {
          "title": "Effect Id",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        },
        "target_ref": {
          "title": "Target Ref",
          "type": "string"
        },
        "round": {
          "title": "Round",
          "type": "integer"
        }
      },
      "required": [
        "effect_id",
        "kind",
        "target_ref",
        "round"
      ],
      "title": "EffectTickedEvent",
      "type": "object"
    },
    "EncounterEndedEvent": {
      "description": "The encounter concluded; the clock owes at least one full turn.",
      "properties": {
        "code": {
          "default": "encounter.ended",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "encounter_ended",
          "default": "encounter_ended",
          "title": "Event Type",
          "type": "string"
        },
        "outcome": {
          "title": "Outcome",
          "type": "string"
        }
      },
      "required": [
        "outcome"
      ],
      "title": "EncounterEndedEvent",
      "type": "object"
    },
    "EncounterStartedEvent": {
      "description": "An encounter opened: visible monster names and counts only.\n\nThe surprise *rolls* are referee events; the outcomes ride here \u2014 being\nsurprised is felt in the fiction.",
      "properties": {
        "code": {
          "default": "encounter.started",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "encounter_started",
          "default": "encounter_started",
          "title": "Event Type",
          "type": "string"
        },
        "monster_name": {
          "title": "Monster Name",
          "type": "string"
        },
        "count": {
          "title": "Count",
          "type": "integer"
        },
        "distance_feet": {
          "title": "Distance Feet",
          "type": "integer"
        },
        "party_surprised": {
          "default": false,
          "title": "Party Surprised",
          "type": "boolean"
        },
        "monsters_surprised": {
          "default": false,
          "title": "Monsters Surprised",
          "type": "boolean"
        }
      },
      "required": [
        "monster_name",
        "count",
        "distance_feet"
      ],
      "title": "EncounterStartedEvent",
      "type": "object"
    },
    "EquipmentDestroyedEvent": {
      "description": "A victim's equipment destroyed by a destructive death (dragon breath).\n\nEmitted by [`destroy_equipment`][osrlib.core.combat.destroy_equipment].\n\n`item_names` are the destroyed items; `saved_items` (additive) are the instance\nids of magic items that passed the `magic_item_death_save` roll \u2014 the crawl\nlands them in a drop pile at the victim's cell.",
      "properties": {
        "code": {
          "default": "combat.equipment.destroyed",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "equipment_destroyed",
          "default": "equipment_destroyed",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "item_names": {
          "items": {
            "type": "string"
          },
          "title": "Item Names",
          "type": "array"
        },
        "saved_items": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Saved Items",
          "type": "array"
        }
      },
      "required": [
        "target_id",
        "item_names"
      ],
      "title": "EquipmentDestroyedEvent",
      "type": "object"
    },
    "EvasionEvent": {
      "description": "An evasion attempt resolved: immediate success, or a pursuit begins.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "evasion",
          "default": "evasion",
          "title": "Event Type",
          "type": "string"
        }
      },
      "required": [
        "code"
      ],
      "title": "EvasionEvent",
      "type": "object"
    },
    "ExhaustionEvent": {
      "description": "The party gained or recovered from running exhaustion (30 rounds, \u22122s).",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "exhaustion",
          "default": "exhaustion",
          "title": "Event Type",
          "type": "string"
        }
      },
      "required": [
        "code"
      ],
      "title": "ExhaustionEvent",
      "type": "object"
    },
    "FatigueEvent": {
      "description": "The party gained or recovered from the unrested-fatigue penalty.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "fatigue",
          "default": "fatigue",
          "title": "Event Type",
          "type": "string"
        }
      },
      "required": [
        "code"
      ],
      "title": "FatigueEvent",
      "type": "object"
    },
    "FlagSetEvent": {
      "description": "A session flag changed (referee \u2014 content wiring is the game's secret).",
      "properties": {
        "code": {
          "default": "session.flag.set",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "flag_set",
          "default": "flag_set",
          "title": "Event Type",
          "type": "string"
        },
        "key": {
          "title": "Key",
          "type": "string"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "integer"
            },
            {
              "type": "boolean"
            }
          ],
          "title": "Value"
        }
      },
      "required": [
        "key",
        "value"
      ],
      "title": "FlagSetEvent",
      "type": "object"
    },
    "GameOverEvent": {
      "description": "The session reached its terminal state (TPK).",
      "properties": {
        "code": {
          "default": "session.game_over",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "game_over",
          "default": "game_over",
          "title": "Event Type",
          "type": "string"
        },
        "reason": {
          "title": "Reason",
          "type": "string"
        }
      },
      "required": [
        "reason"
      ],
      "title": "GameOverEvent",
      "type": "object"
    },
    "GroupMovedEvent": {
      "description": "A group's range-track distance changed.",
      "properties": {
        "code": {
          "default": "battle.group.moved",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "group_moved",
          "default": "group_moved",
          "title": "Event Type",
          "type": "string"
        },
        "group_id": {
          "title": "Group Id",
          "type": "string"
        },
        "distance_feet": {
          "title": "Distance Feet",
          "type": "integer"
        }
      },
      "required": [
        "group_id",
        "distance_feet"
      ],
      "title": "GroupMovedEvent",
      "type": "object"
    },
    "HealingAppliedEvent": {
      "description": "Healing applied \u2014 or blocked (mummy rot renders magical healing ineffective).\n\nEmitted by [`apply_healing`][osrlib.core.combat.apply_healing] or a regeneration\ntick. `code` is `combat.healing.applied` normally, or `combat.healing.blocked`\nwhen a condition blocks it.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "healing_applied",
          "default": "healing_applied",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "amount": {
          "title": "Amount",
          "type": "integer"
        },
        "source": {
          "title": "Source",
          "type": "string"
        }
      },
      "required": [
        "code",
        "target_id",
        "amount",
        "source"
      ],
      "title": "HealingAppliedEvent",
      "type": "object"
    },
    "HealingPurchasedEvent": {
      "description": "A temple healing service purchased and cast.",
      "properties": {
        "code": {
          "default": "town.healing.purchased",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "healing_purchased",
          "default": "healing_purchased",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "service": {
          "title": "Service",
          "type": "string"
        },
        "cost_gp": {
          "title": "Cost Gp",
          "type": "integer"
        }
      },
      "required": [
        "character_id",
        "service",
        "cost_gp"
      ],
      "title": "HealingPurchasedEvent",
      "type": "object"
    },
    "HitPointsReportedEvent": {
      "description": "A creature's hit point state \u2014 referee visibility: monster HP is hidden by design.\n\nEmitted alongside damage, healing, death, energy drain, and regeneration \u2014 any\nchange to a creature's current or maximum hit points \u2014 so the referee's view\nstays in sync.",
      "properties": {
        "code": {
          "default": "combat.state.hit_points",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "hit_points_reported",
          "default": "hit_points_reported",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "current_hp": {
          "title": "Current Hp",
          "type": "integer"
        },
        "max_hp": {
          "title": "Max Hp",
          "type": "integer"
        }
      },
      "required": [
        "target_id",
        "current_hp",
        "max_hp"
      ],
      "title": "HitPointsReportedEvent",
      "type": "object"
    },
    "HoardGeneratedEvent": {
      "description": "A lair hoard, carried bundle, or area treasure generated (referee).\n\nReferee visibility \u2014 contents are itemized here and players learn by finding.\n`cache_ref` is the engine-created cache's state reference (or the group id for\ncarried bundles); value and counts summarize the generation.",
      "properties": {
        "code": {
          "default": "treasure.hoard.generated",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "hoard_generated",
          "default": "hoard_generated",
          "title": "Event Type",
          "type": "string"
        },
        "cache_ref": {
          "title": "Cache Ref",
          "type": "string"
        },
        "treasure_types": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Treasure Types",
          "type": "array"
        },
        "coins_gp_value": {
          "default": 0,
          "title": "Coins Gp Value",
          "type": "integer"
        },
        "valuable_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Valuable Ids",
          "type": "array"
        },
        "magic_item_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Magic Item Ids",
          "type": "array"
        }
      },
      "required": [
        "cache_ref"
      ],
      "title": "HoardGeneratedEvent",
      "type": "object"
    },
    "InitiativeRoll": {
      "description": "One participant's (or side's) initiative rolls: re-rolls included, ties re-roll.",
      "properties": {
        "key": {
          "title": "Key",
          "type": "string"
        },
        "rolls": {
          "items": {
            "type": "integer"
          },
          "title": "Rolls",
          "type": "array"
        },
        "modifier": {
          "default": 0,
          "title": "Modifier",
          "type": "integer"
        },
        "total": {
          "title": "Total",
          "type": "integer"
        }
      },
      "required": [
        "key",
        "rolls",
        "total"
      ],
      "title": "InitiativeRoll",
      "type": "object"
    },
    "InitiativeRolledEvent": {
      "description": "Initiative rolled for a round: every roll (re-rolls included) and the acting order.\n\nEmitted once per round by\n[`roll_initiative`][osrlib.core.combat.roll_initiative]. `mode` is `\"side\"` when\none roll sets the order for an entire side, or `\"individual\"` when each\ncombatant rolls separately.",
      "properties": {
        "code": {
          "default": "combat.initiative.rolled",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "initiative_rolled",
          "default": "initiative_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "mode": {
          "enum": [
            "side",
            "individual"
          ],
          "title": "Mode",
          "type": "string"
        },
        "entries": {
          "items": {
            "$ref": "#/$defs/InitiativeRoll"
          },
          "title": "Entries",
          "type": "array"
        },
        "order": {
          "items": {
            "type": "string"
          },
          "title": "Order",
          "type": "array"
        }
      },
      "required": [
        "mode",
        "entries",
        "order"
      ],
      "title": "InitiativeRolledEvent",
      "type": "object"
    },
    "ItemAcquiredEvent": {
      "description": "Items or coins entered a character's inventory.",
      "properties": {
        "code": {
          "default": "exploration.item.acquired",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "item_acquired",
          "default": "item_acquired",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "item_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Item Ids",
          "type": "array"
        },
        "coins_gp_value": {
          "default": 0,
          "title": "Coins Gp Value",
          "type": "integer"
        }
      },
      "required": [
        "character_id"
      ],
      "title": "ItemAcquiredEvent",
      "type": "object"
    },
    "ItemIdentifiedEvent": {
      "description": "A magic item identified \u2014 a first meaningful use of it is the trigger.",
      "properties": {
        "code": {
          "default": "items.item.identified",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "item_identified",
          "default": "item_identified",
          "title": "Event Type",
          "type": "string"
        },
        "instance_id": {
          "title": "Instance Id",
          "type": "string"
        },
        "template_id": {
          "title": "Template Id",
          "type": "string"
        }
      },
      "required": [
        "instance_id",
        "template_id"
      ],
      "title": "ItemIdentifiedEvent",
      "type": "object"
    },
    "ItemUsedEvent": {
      "description": "A magic item used: a potion drunk (or mixed), a scroll read, a device activated.\n\n`items.device.inert` is a rejection code, not an event \u2014 activating an\nexhausted device costs nothing, the same as a blocked move. Charges\nnever appear here: they are referee-only forever (RAW, undiscoverable).",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "item_used",
          "default": "item_used",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "instance_id": {
          "title": "Instance Id",
          "type": "string"
        },
        "manual": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Manual",
          "type": "array"
        }
      },
      "required": [
        "code",
        "character_id",
        "instance_id"
      ],
      "title": "ItemUsedEvent",
      "type": "object"
    },
    "ItemsDroppedEvent": {
      "description": "Items or coins dropped onto the party's cell (or the pursuit trail).",
      "properties": {
        "code": {
          "default": "exploration.item.dropped",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "items_dropped",
          "default": "items_dropped",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "item_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Item Ids",
          "type": "array"
        },
        "coins_gp_value": {
          "default": 0,
          "title": "Coins Gp Value",
          "type": "integer"
        }
      },
      "required": [
        "character_id"
      ],
      "title": "ItemsDroppedEvent",
      "type": "object"
    },
    "LevelDrainedEvent": {
      "description": "Energy drain resolved: levels lost, with the terminal case as its own code.\n\nEmitted by [`drain_monster_hd`][osrlib.core.combat.drain_monster_hd] or\n[`drain_levels`][osrlib.core.classes.drain_levels]. `code` is\n`combat.drain.drained` for levels lost, or `combat.drain.slain` for the terminal\ncase \u2014 the victim is already at level 1 (or 1 Hit Die or fewer) with nowhere\nleft to drain, so the drain kills it outright.\n\n`spawn_consequence` is the structured-but-manual field carrying the SRD's spawn\nprose (\"becomes a wight in 1d4 days, under the control of the wight that killed\nthem\") \u2014 the kernel kills, the game narrates.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "level_drained",
          "default": "level_drained",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "levels_lost": {
          "title": "Levels Lost",
          "type": "integer"
        },
        "new_level": {
          "title": "New Level",
          "type": "integer"
        },
        "hp_lost": {
          "title": "Hp Lost",
          "type": "integer"
        },
        "xp_after": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Xp After"
        },
        "spawn_consequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Spawn Consequence"
        }
      },
      "required": [
        "code",
        "target_id",
        "levels_lost",
        "new_level",
        "hp_lost"
      ],
      "title": "LevelDrainedEvent",
      "type": "object"
    },
    "LightEvent": {
      "description": "A light source changed state.\n\n`source` is the item or effect kind (`torch`, `lantern`, `light`); `.failed`\nis a failed tinder-box attempt; `.expired` is the session's player-facing\ntranslation of the ledger's referee-visibility expiry.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "light",
          "default": "light",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Character Id"
        },
        "source": {
          "title": "Source",
          "type": "string"
        }
      },
      "required": [
        "code",
        "source"
      ],
      "title": "LightEvent",
      "type": "object"
    },
    "ListenedEvent": {
      "description": "What the listener heard \u2014 heard-something or silence, genuinely ambiguous.\n\nUndead make no noise, so the referee-side roll (which rides\n[`DetectionRolledEvent`][osrlib.crawl.events.DetectionRolledEvent]) happens\nwhether or not anything is there; silence never says which.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "listened",
          "default": "listened",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "direction": {
          "title": "Direction",
          "type": "string"
        }
      },
      "required": [
        "code",
        "character_id",
        "direction"
      ],
      "title": "ListenedEvent",
      "type": "object"
    },
    "LocationEnteredEvent": {
      "description": "The party crossed a location boundary.\n\n`location_kind` is `area`, `level`, `dungeon`, or `town`; `location_id` is the\narea or dungeon id (`\"town\"` for town). `level_number` rides level and dungeon\nentries.",
      "properties": {
        "code": {
          "default": "exploration.location.entered",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "location_entered",
          "default": "location_entered",
          "title": "Event Type",
          "type": "string"
        },
        "location_kind": {
          "title": "Location Kind",
          "type": "string"
        },
        "location_id": {
          "title": "Location Id",
          "type": "string"
        },
        "level_number": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Level Number"
        }
      },
      "required": [
        "location_kind",
        "location_id"
      ],
      "title": "LocationEnteredEvent",
      "type": "object"
    },
    "MagicDispelledEvent": {
      "description": "A *dispel magic* resolved: which effects were released and which survived.\n\nEmitted by [`cast_spell`][osrlib.core.spells.cast_spell] when a *dispel\nmagic*-kind spell resolves.",
      "properties": {
        "code": {
          "default": "magic.dispel.resolved",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "magic_dispelled",
          "default": "magic_dispelled",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "released_effect_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Released Effect Ids",
          "type": "array"
        },
        "surviving_effect_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Surviving Effect Ids",
          "type": "array"
        }
      },
      "required": [
        "caster_id"
      ],
      "title": "MagicDispelledEvent",
      "type": "object"
    },
    "MonsterDefeatedEvent": {
      "description": "One monster defeated \u2014 feeds the adventure's XP award.\n\nEmitted per monster at battle end with `outcome` `slain`, `routed`, or\n`surrendered`; `xp` is the template's printed award.",
      "properties": {
        "code": {
          "default": "battle.monster.defeated",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "monster_defeated",
          "default": "monster_defeated",
          "title": "Event Type",
          "type": "string"
        },
        "monster_id": {
          "title": "Monster Id",
          "type": "string"
        },
        "template_id": {
          "title": "Template Id",
          "type": "string"
        },
        "outcome": {
          "title": "Outcome",
          "type": "string"
        },
        "xp": {
          "title": "Xp",
          "type": "integer"
        }
      },
      "required": [
        "monster_id",
        "template_id",
        "outcome",
        "xp"
      ],
      "title": "MonsterDefeatedEvent",
      "type": "object"
    },
    "MonsterFledEvent": {
      "description": "A monster group broke: fled the battle or surrendered.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "monster_fled",
          "default": "monster_fled",
          "title": "Event Type",
          "type": "string"
        },
        "group_id": {
          "title": "Group Id",
          "type": "string"
        }
      },
      "required": [
        "code",
        "group_id"
      ],
      "title": "MonsterFledEvent",
      "type": "object"
    },
    "MonsterRevivedEvent": {
      "description": "A regenerating monster returned from death (the troll's 2d6-round revival).\n\nEmitted by a regeneration tick inside\n[`EffectsLedger.advance`][osrlib.core.effects.EffectsLedger.advance].",
      "properties": {
        "code": {
          "default": "effects.regeneration.revived",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "monster_revived",
          "default": "monster_revived",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        }
      },
      "required": [
        "target_id"
      ],
      "title": "MonsterRevivedEvent",
      "type": "object"
    },
    "MonstersSpawnedEvent": {
      "description": "Monsters spawned into the session registry (referee bookkeeping).",
      "properties": {
        "code": {
          "default": "session.monsters.spawned",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "monsters_spawned",
          "default": "monsters_spawned",
          "title": "Event Type",
          "type": "string"
        },
        "template_id": {
          "title": "Template Id",
          "type": "string"
        },
        "monster_ids": {
          "items": {
            "type": "string"
          },
          "title": "Monster Ids",
          "type": "array"
        }
      },
      "required": [
        "template_id",
        "monster_ids"
      ],
      "title": "MonstersSpawnedEvent",
      "type": "object"
    },
    "MoraleCheckedEvent": {
      "description": "A morale check: referee visibility \u2014 players learn the outcome from behavior.\n\nEmitted by [`check_morale`][osrlib.core.combat.check_morale]. `code` is\n`combat.morale.held` or `combat.morale.broke` for a rolled check, or\n`combat.morale.exempt` when the score is 2 (never fights) or 12 (never checks)\nand no roll is made.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "morale_checked",
          "default": "morale_checked",
          "title": "Event Type",
          "type": "string"
        },
        "subject": {
          "title": "Subject",
          "type": "string"
        },
        "score": {
          "title": "Score",
          "type": "integer"
        },
        "roll": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Roll"
        },
        "modifier": {
          "default": 0,
          "title": "Modifier",
          "type": "integer"
        }
      },
      "required": [
        "code",
        "subject",
        "score"
      ],
      "title": "MoraleCheckedEvent",
      "type": "object"
    },
    "NpcPartySpawnedEvent": {
      "description": "An NPC adventuring party generated and fielded (referee \u2014 the full roster).\n\nThe player-facing `EncounterStartedEvent` names \"adventurers\" and the count;\nthe roster, classes, and levels are the referee's.",
      "properties": {
        "code": {
          "default": "encounter.npc_party.spawned",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "npc_party_spawned",
          "default": "npc_party_spawned",
          "title": "Event Type",
          "type": "string"
        },
        "party_kind": {
          "title": "Party Kind",
          "type": "string"
        },
        "npc_ids": {
          "items": {
            "type": "string"
          },
          "title": "Npc Ids",
          "type": "array"
        },
        "class_ids": {
          "items": {
            "type": "string"
          },
          "title": "Class Ids",
          "type": "array"
        },
        "levels": {
          "items": {
            "type": "integer"
          },
          "title": "Levels",
          "type": "array"
        },
        "alignment": {
          "title": "Alignment",
          "type": "string"
        }
      },
      "required": [
        "party_kind",
        "npc_ids",
        "class_ids",
        "levels",
        "alignment"
      ],
      "title": "NpcPartySpawnedEvent",
      "type": "object"
    },
    "PartyMovedEvent": {
      "description": "The party moved or turned; `x`/`y`/`facing` are the resulting pose.\n\nA blocked move is a rejection (`exploration.move.blocked`), never an event:\nmoving into a wall is an in-fiction invalid command, not a game state change.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "party_moved",
          "default": "party_moved",
          "title": "Event Type",
          "type": "string"
        },
        "x": {
          "title": "X",
          "type": "integer"
        },
        "y": {
          "title": "Y",
          "type": "integer"
        },
        "facing": {
          "title": "Facing",
          "type": "string"
        }
      },
      "required": [
        "code",
        "x",
        "y",
        "facing"
      ],
      "title": "PartyMovedEvent",
      "type": "object"
    },
    "PreparedSpell": {
      "description": "One prepared copy in a memorization event: the spell and its fixed form.",
      "properties": {
        "spell_id": {
          "title": "Spell Id",
          "type": "string"
        },
        "reversed": {
          "default": false,
          "title": "Reversed",
          "type": "boolean"
        }
      },
      "required": [
        "spell_id"
      ],
      "title": "PreparedSpell",
      "type": "object"
    },
    "ProvisionsEvent": {
      "description": "A day-boundary provision outcome: consumed, or short (food or water).",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "provisions",
          "default": "provisions",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        }
      },
      "required": [
        "code",
        "character_id",
        "kind"
      ],
      "title": "ProvisionsEvent",
      "type": "object"
    },
    "PursuitEvent": {
      "description": "One pursuit beat: the round's gap, a distraction, escape, or capture.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "pursuit",
          "default": "pursuit",
          "title": "Event Type",
          "type": "string"
        },
        "round": {
          "title": "Round",
          "type": "integer"
        },
        "gap_feet": {
          "title": "Gap Feet",
          "type": "integer"
        }
      },
      "required": [
        "code",
        "round",
        "gap_feet"
      ],
      "title": "PursuitEvent",
      "type": "object"
    },
    "ReactionRolledEvent": {
      "description": "A monster reaction roll: referee visibility \u2014 players learn reactions from behavior.\n\nEmitted by [`roll_reaction`][osrlib.core.combat.roll_reaction].",
      "properties": {
        "code": {
          "default": "encounter.reaction.rolled",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "reaction_rolled",
          "default": "reaction_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "roll": {
          "title": "Roll",
          "type": "integer"
        },
        "modifier": {
          "default": 0,
          "title": "Modifier",
          "type": "integer"
        },
        "total": {
          "title": "Total",
          "type": "integer"
        },
        "result": {
          "title": "Result",
          "type": "string"
        }
      },
      "required": [
        "roll",
        "total",
        "result"
      ],
      "title": "ReactionRolledEvent",
      "type": "object"
    },
    "RestedEvent": {
      "description": "A rest completed or was interrupted; `kind` is `turn`, `night`, or `day`.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "rested",
          "default": "rested",
          "title": "Event Type",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        }
      },
      "required": [
        "code",
        "kind"
      ],
      "title": "RestedEvent",
      "type": "object"
    },
    "SavingThrowRolledEvent": {
      "description": "A saving throw resolved; `roll` and `required` are `None` for auto-save defenses.\n\nEmitted by [`saving_throw`][osrlib.core.combat.saving_throw]. `code` is\n`combat.save.passed` or `combat.save.failed` for a rolled save, or\n`combat.save.auto` when a defense auto-passes it.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "saving_throw_rolled",
          "default": "saving_throw_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "target_id": {
          "title": "Target Id",
          "type": "string"
        },
        "category": {
          "title": "Category",
          "type": "string"
        },
        "roll": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Roll"
        },
        "modifier": {
          "default": 0,
          "title": "Modifier",
          "type": "integer"
        },
        "required": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Required"
        }
      },
      "required": [
        "code",
        "target_id",
        "category"
      ],
      "title": "SavingThrowRolledEvent",
      "type": "object"
    },
    "SearchCompletedEvent": {
      "description": "A search finished: what it revealed, or nothing (which is ambiguous).",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "search_completed",
          "default": "search_completed",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "kind": {
          "title": "Kind",
          "type": "string"
        },
        "found": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Found",
          "type": "array"
        }
      },
      "required": [
        "code",
        "character_id",
        "kind"
      ],
      "title": "SearchCompletedEvent",
      "type": "object"
    },
    "SpellBookUpdatedEvent": {
      "description": "A spell added to an arcane caster's spell book.\n\nEmitted by [`add_spell_to_book`][osrlib.core.spells.add_spell_to_book].",
      "properties": {
        "code": {
          "default": "magic.book.added",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "spell_book_updated",
          "default": "spell_book_updated",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "spell_id": {
          "title": "Spell Id",
          "type": "string"
        }
      },
      "required": [
        "caster_id",
        "spell_id"
      ],
      "title": "SpellBookUpdatedEvent",
      "type": "object"
    },
    "SpellCastEvent": {
      "description": "A spell cast: the memorized copy was consumed.\n\nEmitted by [`cast_spell`][osrlib.core.spells.cast_spell] or\n[`cast_from_scroll`][osrlib.core.spells.cast_from_scroll]. `code` is\n`magic.cast.cast` for an ordinary cast, or `magic.cast.no_effect` when every\ntarget was ineligible or unaffected \u2014 the copy is still spent, since rejections\nare free and would leak hidden state about which targets were eligible.\n\n`manual=True` marks modes the kernel doesn't execute \u2014 the game narrates the\neffect from the spell's prose. Resolution consequences ride the existing event\ntypes (saves, damage, conditions, effects, healing, deaths), exactly as breath\nweapons do.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "spell_cast",
          "default": "spell_cast",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "spell_id": {
          "title": "Spell Id",
          "type": "string"
        },
        "mode": {
          "title": "Mode",
          "type": "string"
        },
        "reversed": {
          "default": false,
          "title": "Reversed",
          "type": "boolean"
        },
        "target_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Target Ids",
          "type": "array"
        },
        "manual": {
          "default": false,
          "title": "Manual",
          "type": "boolean"
        }
      },
      "required": [
        "code",
        "caster_id",
        "spell_id",
        "mode"
      ],
      "title": "SpellCastEvent",
      "type": "object"
    },
    "SpellDeclaredEvent": {
      "description": "A spell declaration posted \u2014 table-visible per RAW.",
      "properties": {
        "code": {
          "default": "battle.spell.declared",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "spell_declared",
          "default": "spell_declared",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "spell_id": {
          "title": "Spell Id",
          "type": "string"
        },
        "reversed": {
          "default": false,
          "title": "Reversed",
          "type": "boolean"
        }
      },
      "required": [
        "caster_id",
        "spell_id"
      ],
      "title": "SpellDeclaredEvent",
      "type": "object"
    },
    "SpellDisruptedEvent": {
      "description": "A declared casting disrupted: the copy is lost as if it had been cast.\n\nEmitted by [`disrupt_casting`][osrlib.core.spells.disrupt_casting].",
      "properties": {
        "code": {
          "default": "magic.cast.disrupted",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "spell_disrupted",
          "default": "spell_disrupted",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "spell_id": {
          "title": "Spell Id",
          "type": "string"
        },
        "reversed": {
          "default": false,
          "title": "Reversed",
          "type": "boolean"
        }
      },
      "required": [
        "caster_id",
        "spell_id"
      ],
      "title": "SpellDisruptedEvent",
      "type": "object"
    },
    "SpellForgottenEvent": {
      "description": "A memorized copy forgotten because level drain shrank the caster's slots.\n\nEmitted by\n[`forget_excess_memorized`][osrlib.core.spells.forget_excess_memorized].",
      "properties": {
        "code": {
          "default": "magic.memory.forgotten",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "spell_forgotten",
          "default": "spell_forgotten",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "spell_id": {
          "title": "Spell Id",
          "type": "string"
        },
        "reversed": {
          "default": false,
          "title": "Reversed",
          "type": "boolean"
        }
      },
      "required": [
        "caster_id",
        "spell_id"
      ],
      "title": "SpellForgottenEvent",
      "type": "object"
    },
    "SpellsMemorizedEvent": {
      "description": "A caster's daily preparation resolved: the full prepared list.\n\nEmitted by [`memorize_spells`][osrlib.core.spells.memorize_spells]. One event per\npreparation \u2014 memorization is a full replacement, so the list is the caster's\ncomplete new memory.",
      "properties": {
        "code": {
          "default": "magic.memorize.prepared",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "spells_memorized",
          "default": "spells_memorized",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "prepared": {
          "items": {
            "$ref": "#/$defs/PreparedSpell"
          },
          "title": "Prepared",
          "type": "array"
        }
      },
      "required": [
        "caster_id",
        "prepared"
      ],
      "title": "SpellsMemorizedEvent",
      "type": "object"
    },
    "StanceChangedEvent": {
      "description": "The monsters' stance, as behavior \u2014 the reaction roll itself is referee.",
      "properties": {
        "code": {
          "default": "encounter.stance.changed",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "stance_changed",
          "default": "stance_changed",
          "title": "Event Type",
          "type": "string"
        },
        "stance": {
          "title": "Stance",
          "type": "string"
        }
      },
      "required": [
        "stance"
      ],
      "title": "StanceChangedEvent",
      "type": "object"
    },
    "SurpriseRolledEvent": {
      "description": "One side's surprise die (referee); `roll` is `None` when the side never rolls.",
      "properties": {
        "code": {
          "default": "encounter.surprise.rolled",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "surprise_rolled",
          "default": "surprise_rolled",
          "title": "Event Type",
          "type": "string"
        },
        "side": {
          "title": "Side",
          "type": "string"
        },
        "threshold": {
          "title": "Threshold",
          "type": "integer"
        },
        "roll": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Roll"
        },
        "surprised": {
          "title": "Surprised",
          "type": "boolean"
        }
      },
      "required": [
        "side",
        "threshold",
        "surprised"
      ],
      "title": "SurpriseRolledEvent",
      "type": "object"
    },
    "TargetsSelectedEvent": {
      "description": "The targeting model's resolution: which candidates an effect selected.\n\nEmitted by [`select_targets`][osrlib.core.combat.select_targets].",
      "properties": {
        "code": {
          "default": "combat.targeting.selected",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "targets_selected",
          "default": "targets_selected",
          "title": "Event Type",
          "type": "string"
        },
        "mode": {
          "title": "Mode",
          "type": "string"
        },
        "target_ids": {
          "items": {
            "type": "string"
          },
          "title": "Target Ids",
          "type": "array"
        }
      },
      "required": [
        "mode",
        "target_ids"
      ],
      "title": "TargetsSelectedEvent",
      "type": "object"
    },
    "TimeAdvancedEvent": {
      "description": "The clock advanced (referee bookkeeping); `rounds_total` is the new position.",
      "properties": {
        "code": {
          "default": "session.time.advanced",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "time_advanced",
          "default": "time_advanced",
          "title": "Event Type",
          "type": "string"
        },
        "n": {
          "title": "N",
          "type": "integer"
        },
        "unit": {
          "title": "Unit",
          "type": "string"
        },
        "rounds_total": {
          "title": "Rounds Total",
          "type": "integer"
        }
      },
      "required": [
        "n",
        "unit",
        "rounds_total"
      ],
      "title": "TimeAdvancedEvent",
      "type": "object"
    },
    "TrapEvent": {
      "description": "A trap outcome the party perceives.\n\n`.sprung` when a trap goes off, `.found` when a search or inspection reveals\none, `.removed` on a successful removal, `.safe` when a *known* trap's trigger\nresolved without springing \u2014 never emitted for unknown traps (the spring die\nrides the referee-visibility\n[`DetectionRolledEvent`][osrlib.crawl.events.DetectionRolledEvent], no-leak).",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "trap",
          "default": "trap",
          "title": "Event Type",
          "type": "string"
        },
        "trap_ref": {
          "title": "Trap Ref",
          "type": "string"
        },
        "character_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Character Id"
        }
      },
      "required": [
        "code",
        "trap_ref"
      ],
      "title": "TrapEvent",
      "type": "object"
    },
    "TreasureSoldEvent": {
      "description": "Valuables sold in town at full value (the 1-gp-1-XP identity kept clean).",
      "properties": {
        "code": {
          "default": "town.treasure.sold",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "treasure_sold",
          "default": "treasure_sold",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "instance_ids": {
          "items": {
            "type": "string"
          },
          "title": "Instance Ids",
          "type": "array"
        },
        "gp_value": {
          "title": "Gp Value",
          "type": "integer"
        }
      },
      "required": [
        "character_id",
        "instance_ids",
        "gp_value"
      ],
      "title": "TreasureSoldEvent",
      "type": "object"
    },
    "TurningTypeOutcome": {
      "description": "One undead type's turning verdict: its column, the cell, and the threshold.",
      "properties": {
        "template_id": {
          "title": "Template Id",
          "type": "string"
        },
        "column": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Column"
        },
        "outcome": {
          "title": "Outcome",
          "type": "string"
        },
        "threshold": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Threshold"
        }
      },
      "required": [
        "template_id",
        "outcome"
      ],
      "title": "TurningTypeOutcome",
      "type": "object"
    },
    "UndeadTurnedEvent": {
      "description": "A turning attempt resolved \u2014 player visibility: the player rolls turning dice.\n\nEmitted by [`turn_undead`][osrlib.core.spells.turn_undead].\n\nCarries the 2d6 turn roll, the 2d6 HD pool when one was rolled (some type\nsucceeded), the per-type verdicts, and the affected monsters. Per-monster\nconsequences ride `ConditionGainedEvent`/`DeathEvent`. The code is `failed` when\nno type succeeded, `destroyed` when any affected monster was destroyed, and\n`turned` otherwise.",
      "properties": {
        "code": {
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "undead_turned",
          "default": "undead_turned",
          "title": "Event Type",
          "type": "string"
        },
        "caster_id": {
          "title": "Caster Id",
          "type": "string"
        },
        "roll": {
          "title": "Roll",
          "type": "integer"
        },
        "hd_pool": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Hd Pool"
        },
        "types": {
          "default": [],
          "items": {
            "$ref": "#/$defs/TurningTypeOutcome"
          },
          "title": "Types",
          "type": "array"
        },
        "affected_ids": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Affected Ids",
          "type": "array"
        }
      },
      "required": [
        "code",
        "caster_id",
        "roll"
      ],
      "title": "UndeadTurnedEvent",
      "type": "object"
    },
    "Visibility": {
      "description": "Who may see an event.\n\nThe wire values are `\"player\"` and `\"referee\"` \u2014 lowercase, serialized into every\nevent; changing them is a `schema_version` bump.",
      "enum": [
        "player",
        "referee"
      ],
      "title": "Visibility",
      "type": "string"
    },
    "WanderingCheckEvent": {
      "description": "A wandering-monster check fired (referee bookkeeping).\n\n`roll` is `None` when the clamped chance was 0 and the roll was skipped.",
      "properties": {
        "code": {
          "default": "exploration.wandering.checked",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "referee"
        },
        "event_type": {
          "const": "wandering_check",
          "default": "wandering_check",
          "title": "Event Type",
          "type": "string"
        },
        "chance": {
          "title": "Chance",
          "type": "integer"
        },
        "roll": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Roll"
        },
        "encounter": {
          "title": "Encounter",
          "type": "boolean"
        }
      },
      "required": [
        "chance",
        "encounter"
      ],
      "title": "WanderingCheckEvent",
      "type": "object"
    },
    "XpAwardedEvent": {
      "description": "An XP award applied to one character.",
      "properties": {
        "code": {
          "default": "session.xp.awarded",
          "title": "Code",
          "type": "string"
        },
        "visibility": {
          "$ref": "#/$defs/Visibility",
          "default": "player"
        },
        "event_type": {
          "const": "xp_awarded",
          "default": "xp_awarded",
          "title": "Event Type",
          "type": "string"
        },
        "character_id": {
          "title": "Character Id",
          "type": "string"
        },
        "award": {
          "title": "Award",
          "type": "integer"
        },
        "modified_award": {
          "title": "Modified Award",
          "type": "integer"
        },
        "level_after": {
          "title": "Level After",
          "type": "integer"
        }
      },
      "required": [
        "character_id",
        "award",
        "modified_award",
        "level_after"
      ],
      "title": "XpAwardedEvent",
      "type": "object"
    }
  },
  "discriminator": {
    "mapping": {
      "adventure_xp_award": "#/$defs/AdventureXpAwardEvent",
      "attack_rolled": "#/$defs/AttackRolledEvent",
      "battle_ended": "#/$defs/BattleEndedEvent",
      "battle_round": "#/$defs/BattleRoundEvent",
      "battle_started": "#/$defs/BattleStartedEvent",
      "condition_gained": "#/$defs/ConditionGainedEvent",
      "condition_removed": "#/$defs/ConditionRemovedEvent",
      "curse_revealed": "#/$defs/CurseRevealedEvent",
      "damage_absorbed": "#/$defs/DamageAbsorbedEvent",
      "damage_dealt": "#/$defs/DamageDealtEvent",
      "death": "#/$defs/DeathEvent",
      "detection_rolled": "#/$defs/DetectionRolledEvent",
      "dice_rolled": "#/$defs/DiceRolledEvent",
      "door": "#/$defs/DoorEvent",
      "effect_attached": "#/$defs/EffectAttachedEvent",
      "effect_expired": "#/$defs/EffectExpiredEvent",
      "effect_released": "#/$defs/EffectReleasedEvent",
      "effect_ticked": "#/$defs/EffectTickedEvent",
      "encounter_ended": "#/$defs/EncounterEndedEvent",
      "encounter_started": "#/$defs/EncounterStartedEvent",
      "equipment_destroyed": "#/$defs/EquipmentDestroyedEvent",
      "evasion": "#/$defs/EvasionEvent",
      "exhaustion": "#/$defs/ExhaustionEvent",
      "fatigue": "#/$defs/FatigueEvent",
      "flag_set": "#/$defs/FlagSetEvent",
      "game_over": "#/$defs/GameOverEvent",
      "group_moved": "#/$defs/GroupMovedEvent",
      "healing_applied": "#/$defs/HealingAppliedEvent",
      "healing_purchased": "#/$defs/HealingPurchasedEvent",
      "hit_points_reported": "#/$defs/HitPointsReportedEvent",
      "hoard_generated": "#/$defs/HoardGeneratedEvent",
      "initiative_rolled": "#/$defs/InitiativeRolledEvent",
      "item_acquired": "#/$defs/ItemAcquiredEvent",
      "item_identified": "#/$defs/ItemIdentifiedEvent",
      "item_used": "#/$defs/ItemUsedEvent",
      "items_dropped": "#/$defs/ItemsDroppedEvent",
      "level_drained": "#/$defs/LevelDrainedEvent",
      "light": "#/$defs/LightEvent",
      "listened": "#/$defs/ListenedEvent",
      "location_entered": "#/$defs/LocationEnteredEvent",
      "magic_dispelled": "#/$defs/MagicDispelledEvent",
      "monster_defeated": "#/$defs/MonsterDefeatedEvent",
      "monster_fled": "#/$defs/MonsterFledEvent",
      "monster_revived": "#/$defs/MonsterRevivedEvent",
      "monsters_spawned": "#/$defs/MonstersSpawnedEvent",
      "morale_checked": "#/$defs/MoraleCheckedEvent",
      "npc_party_spawned": "#/$defs/NpcPartySpawnedEvent",
      "party_moved": "#/$defs/PartyMovedEvent",
      "provisions": "#/$defs/ProvisionsEvent",
      "pursuit": "#/$defs/PursuitEvent",
      "reaction_rolled": "#/$defs/ReactionRolledEvent",
      "rested": "#/$defs/RestedEvent",
      "saving_throw_rolled": "#/$defs/SavingThrowRolledEvent",
      "search_completed": "#/$defs/SearchCompletedEvent",
      "spell_book_updated": "#/$defs/SpellBookUpdatedEvent",
      "spell_cast": "#/$defs/SpellCastEvent",
      "spell_declared": "#/$defs/SpellDeclaredEvent",
      "spell_disrupted": "#/$defs/SpellDisruptedEvent",
      "spell_forgotten": "#/$defs/SpellForgottenEvent",
      "spells_memorized": "#/$defs/SpellsMemorizedEvent",
      "stance_changed": "#/$defs/StanceChangedEvent",
      "surprise_rolled": "#/$defs/SurpriseRolledEvent",
      "targets_selected": "#/$defs/TargetsSelectedEvent",
      "time_advanced": "#/$defs/TimeAdvancedEvent",
      "trap": "#/$defs/TrapEvent",
      "treasure_sold": "#/$defs/TreasureSoldEvent",
      "undead_turned": "#/$defs/UndeadTurnedEvent",
      "wandering_check": "#/$defs/WanderingCheckEvent",
      "xp_awarded": "#/$defs/XpAwardedEvent"
    },
    "propertyName": "event_type"
  },
  "oneOf": [
    {
      "$ref": "#/$defs/InitiativeRolledEvent"
    },
    {
      "$ref": "#/$defs/AttackRolledEvent"
    },
    {
      "$ref": "#/$defs/DamageDealtEvent"
    },
    {
      "$ref": "#/$defs/DamageAbsorbedEvent"
    },
    {
      "$ref": "#/$defs/SavingThrowRolledEvent"
    },
    {
      "$ref": "#/$defs/MoraleCheckedEvent"
    },
    {
      "$ref": "#/$defs/ReactionRolledEvent"
    },
    {
      "$ref": "#/$defs/ConditionGainedEvent"
    },
    {
      "$ref": "#/$defs/ConditionRemovedEvent"
    },
    {
      "$ref": "#/$defs/EffectAttachedEvent"
    },
    {
      "$ref": "#/$defs/EffectTickedEvent"
    },
    {
      "$ref": "#/$defs/EffectExpiredEvent"
    },
    {
      "$ref": "#/$defs/EffectReleasedEvent"
    },
    {
      "$ref": "#/$defs/HealingAppliedEvent"
    },
    {
      "$ref": "#/$defs/DeathEvent"
    },
    {
      "$ref": "#/$defs/EquipmentDestroyedEvent"
    },
    {
      "$ref": "#/$defs/LevelDrainedEvent"
    },
    {
      "$ref": "#/$defs/MonsterRevivedEvent"
    },
    {
      "$ref": "#/$defs/HitPointsReportedEvent"
    },
    {
      "$ref": "#/$defs/TargetsSelectedEvent"
    },
    {
      "$ref": "#/$defs/SpellsMemorizedEvent"
    },
    {
      "$ref": "#/$defs/SpellCastEvent"
    },
    {
      "$ref": "#/$defs/SpellDisruptedEvent"
    },
    {
      "$ref": "#/$defs/SpellForgottenEvent"
    },
    {
      "$ref": "#/$defs/SpellBookUpdatedEvent"
    },
    {
      "$ref": "#/$defs/UndeadTurnedEvent"
    },
    {
      "$ref": "#/$defs/MagicDispelledEvent"
    },
    {
      "$ref": "#/$defs/PartyMovedEvent"
    },
    {
      "$ref": "#/$defs/LocationEnteredEvent"
    },
    {
      "$ref": "#/$defs/DoorEvent"
    },
    {
      "$ref": "#/$defs/ListenedEvent"
    },
    {
      "$ref": "#/$defs/DetectionRolledEvent"
    },
    {
      "$ref": "#/$defs/SearchCompletedEvent"
    },
    {
      "$ref": "#/$defs/TrapEvent"
    },
    {
      "$ref": "#/$defs/ItemAcquiredEvent"
    },
    {
      "$ref": "#/$defs/ItemsDroppedEvent"
    },
    {
      "$ref": "#/$defs/LightEvent"
    },
    {
      "$ref": "#/$defs/RestedEvent"
    },
    {
      "$ref": "#/$defs/FatigueEvent"
    },
    {
      "$ref": "#/$defs/ProvisionsEvent"
    },
    {
      "$ref": "#/$defs/WanderingCheckEvent"
    },
    {
      "$ref": "#/$defs/EncounterStartedEvent"
    },
    {
      "$ref": "#/$defs/SurpriseRolledEvent"
    },
    {
      "$ref": "#/$defs/StanceChangedEvent"
    },
    {
      "$ref": "#/$defs/EvasionEvent"
    },
    {
      "$ref": "#/$defs/PursuitEvent"
    },
    {
      "$ref": "#/$defs/ExhaustionEvent"
    },
    {
      "$ref": "#/$defs/EncounterEndedEvent"
    },
    {
      "$ref": "#/$defs/BattleStartedEvent"
    },
    {
      "$ref": "#/$defs/BattleRoundEvent"
    },
    {
      "$ref": "#/$defs/SpellDeclaredEvent"
    },
    {
      "$ref": "#/$defs/GroupMovedEvent"
    },
    {
      "$ref": "#/$defs/MonsterFledEvent"
    },
    {
      "$ref": "#/$defs/MonsterDefeatedEvent"
    },
    {
      "$ref": "#/$defs/BattleEndedEvent"
    },
    {
      "$ref": "#/$defs/HoardGeneratedEvent"
    },
    {
      "$ref": "#/$defs/ItemUsedEvent"
    },
    {
      "$ref": "#/$defs/ItemIdentifiedEvent"
    },
    {
      "$ref": "#/$defs/CurseRevealedEvent"
    },
    {
      "$ref": "#/$defs/NpcPartySpawnedEvent"
    },
    {
      "$ref": "#/$defs/AdventureXpAwardEvent"
    },
    {
      "$ref": "#/$defs/TreasureSoldEvent"
    },
    {
      "$ref": "#/$defs/HealingPurchasedEvent"
    },
    {
      "$ref": "#/$defs/FlagSetEvent"
    },
    {
      "$ref": "#/$defs/MonstersSpawnedEvent"
    },
    {
      "$ref": "#/$defs/XpAwardedEvent"
    },
    {
      "$ref": "#/$defs/TimeAdvancedEvent"
    },
    {
      "$ref": "#/$defs/GameOverEvent"
    },
    {
      "$ref": "#/$defs/DiceRolledEvent"
    }
  ]
}
