diff --git a/CHANGELOG.md b/CHANGELOG.md index c8e37d0..9a6d858 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +### Fixed + +- Encounter distance is now bounded by the space the encounter happens in. The 2d6 × 10' dungeon roll ignored the party's surroundings entirely, so an encounter keyed to a 20' room could open at 120' — six times the room's width — and a rolled distance routinely exceeded the whole dungeon level. The SRD rolls only "if there is uncertainty", since "the situation in which the encounter occurs often determines how far away the monster is"; the walls around the party's cell are that situation, so a rolled distance now caps at the longest unobstructed straight sight line from that cell across the four grid directions, floored at one cell (10'). A corridor still affords its full sight line and the printed 20'–120' band; a room affords no more than the room; shut and undiscovered-secret doors stop the line where they stop the party. Darkness never shortens it — light governs surprise, not distance — and a caller-supplied `distance_feet` (every referee spawn: `SpawnMonsters`, `SpawnNpcParty`) is never capped. The cap reads the rolled result and never the RNG stream, so no draw sequence changes; rolled distances in cramped spaces do change, which moved the Phase 4 and Phase 5 scenario goldens. + ## [1.3.0] - 2026-07-24 ### Added diff --git a/docs/adaptations.md b/docs/adaptations.md index 2eaeb2c..0834386 100644 --- a/docs/adaptations.md +++ b/docs/adaptations.md @@ -761,7 +761,20 @@ of the party") but the party may be. Locked by ### The encounter procedure Every encounter opens with surprise, a 2d6 × 10' distance roll, and reaction — -keyed encounters included (rooms are abstracted onto the same track). Keyed +keyed encounters included (rooms are abstracted onto the same track). The distance +roll is bounded by the space it happens in: RAW rolls 2d6 × 10' only "if there is +uncertainty", because "the situation in which the encounter occurs often determines +how far away the monster is", and the walls around the party's cell are that +situation. Pinned: a rolled distance caps at the longest unobstructed straight sight +line from the party's cell, taken across the four grid directions through the edges +sight crosses (open floor, open non-secret doors) — on a rectangular room exactly +that room's extent from the cell the party stands on, down a straight corridor the +whole passage, so the printed 20'–120' band stays fully available wherever the space +affords it. The floor is one cell, 10', so a sealed cell never yields 0'; darkness +never shortens the line, since light governs surprise and not distance (a monster +the party cannot see is still exactly as far away as it is); and a caller-supplied +distance — every referee spawn — is never capped. The cap reads the rolled result +and never the stream, so bounding consumes no randomness. Keyed awareness comes from the area's flag, a failed door forcing alerts the room, the lit-party rule skips the monsters' surprise roll entirely, and a successful listen marks party awareness. Parley re-rolls are uncapped, each a fresh roll with the @@ -782,7 +795,8 @@ one turn)`, which may itself land mid-turn when the encounter started mid-turn its end — the fiction moves on (a dead troll's pending revival is post-battle narration); an evaded keyed encounter re-triggers fresh on the next entry. Locked by `test_encounter.py`, the free rounds by -`test_encounter.py::TestSurpriseFreeRounds`. +`test_encounter.py::TestSurpriseFreeRounds`, the distance bound by +`test_encounter.py::TestEncounterDistance`. ### Evasion and pursuit diff --git a/docs/spec.md b/docs/spec.md index c19680d..4ec49c8 100644 --- a/docs/spec.md +++ b/docs/spec.md @@ -243,7 +243,7 @@ The crawl framework implements the dungeon adventuring procedures: - Searching for secret doors and traps and listening at doors (X-in-6, race/class-modified); forcing stuck doors on the STR open-doors chance; thief skills plug into the same procedures (open locks, hear noise), preserving the B/X split between room traps (anyone searches) and treasure traps (thief-only find/remove) - Trap triggering: 2-in-6 chance when the triggering action occurs, damage automatic (no attack roll) - NPC adventuring parties as encounter-table entries (Basic/Expert Adventurers): generated by the SRD procedure — composition dice, class/level and alignment tables, treasure types U+V shared among the group, and (Expert parties only) a 5%-per-NPC-level chance per suitable magic-item sub-table with unusable rolls discarded — from the same character model as PCs, then handled as an encounter side like any monster group. High-Level party types appear only on wilderness tables and defer with wilderness; employing NPCs (retainers) remains out of scope -- Wandering monster checks with noise, light, and resting modifiers, rolled on the encounter tables keyed by dungeon level; encounter procedure (surprise — denied to a party carrying light in darkness or after a failed door forcing; 2d6×10' encounter distance = 2d6 cells; reaction; parley) +- Wandering monster checks with noise, light, and resting modifiers, rolled on the encounter tables keyed by dungeon level; encounter procedure (surprise — denied to a party carrying light in darkness or after a failed door forcing; 2d6×10' encounter distance = 2d6 cells, capped at the party cell's longest straight sight line since RAW rolls only "if there is uncertainty"; reaction; parley) - Combat space as an abstract per-group range track (the Bard's Tale convention) built on the kernel's range bands; party combat ranks derive from marching order, and corridor width caps combatants fighting abreast (2–3 in a 10' passage) — documented adaptations behind `Ruleset` knobs - Area-of-effect resolution against that combat space: geometric shapes map deterministically to groups and party ranks (how many of a group a 20'-radius *fire ball* catches, which ranks a breath weapon reaches), including friendly fire when an area overlaps a melee — a documented adaptation with `Ruleset` knobs - Monster actions resolve through a pluggable action policy: the default follows scripted patterns where the SRD defines them (a dragon opens with breath, then breath or melee with equal chance, three breaths per day) and otherwise picks attacks by range; games and LLM referees can substitute a policy per encounter side diff --git a/src/osrlib/crawl/encounter.py b/src/osrlib/crawl/encounter.py index edfc435..6cfd8b7 100644 --- a/src/osrlib/crawl/encounter.py +++ b/src/osrlib/crawl/encounter.py @@ -13,6 +13,13 @@ parley, or withdraw freely; 12+ friendly. Only the attacks/hostile stances pursue an evading party, as a documented adaptation (see the adaptations register) — RAW leaves pursuit itself to the referee too, keyed here to low reactions. + +The distance roll is bounded by the space it happens in: RAW rolls 2d6 × 10' only +"if there is uncertainty", and the walls around the party's cell resolve that +uncertainty, so the rolled distance caps at the longest straight sight line the +cell affords — the room's own span in a room, the whole passage down a corridor, +never shortened by darkness. A caller that supplies `distance_feet` is never +capped: the referee places what the referee spawns. """ from pydantic import BaseModel, ConfigDict, Field @@ -137,7 +144,7 @@ def start_encounter( kind: `"wandering"`, `"keyed"`, or `"spawned"`. area_ref: The keyed area's state reference, when keyed. distance_feet: A fixed distance; `None` rolls 2d6 × 10 on the encounter - stream. + stream and caps the result at the party cell's sight line. monsters_roll_surprise: False when the monsters can never be surprised. monsters_aware: True when the monsters expect intruders. party_aware: True when the party heard the room. @@ -146,6 +153,7 @@ def start_encounter( Returns: The encounter-opening events. """ + from osrlib.crawl import exploration from osrlib.crawl.session import ENCOUNTER_STREAM stream = session.streams.get(ENCOUNTER_STREAM) @@ -178,6 +186,16 @@ def start_encounter( if distance_feet is None: rolled_tens: int = stream.randbelow(6) + 1 + stream.randbelow(6) + 1 distance_feet = rolled_tens * 10 + # RAW rolls 2d6 × 10' only "if there is uncertainty"; otherwise "the + # situation in which the encounter occurs" fixes the distance — and the + # walls the party is standing between are that situation. The roll is + # therefore capped at the cell's longest straight sight line: a corridor + # keeps the full hundred and twenty feet, while a twenty-foot room cannot + # open at eighty. The cap reads the result, never the stream, so the draw + # sequence is the same bounded or not. + ceiling = exploration._sight_line_feet(session) + if ceiling is not None: + distance_feet = min(distance_feet, ceiling) group_models = [ EncounterGroup( diff --git a/src/osrlib/crawl/exploration.py b/src/osrlib/crawl/exploration.py index b453e68..9cad8bc 100644 --- a/src/osrlib/crawl/exploration.py +++ b/src/osrlib/crawl/exploration.py @@ -252,6 +252,83 @@ def _known_door(session, direction: Direction): return edge, state +# ---------------------------------------------------------------------- sight lines + +# The dungeon grid is authored at the classic ten-foot square, so a torch's +# thirty-foot radius reaches three cells of open floor and a straight run of +# three cells is thirty feet of sight. +_CELL_FEET = 10 + + +def _sight_passes(session, level, location, cell: Position, direction: Direction) -> bool: + """Whether sight (and torchlight) crosses one cell edge. + + Open floor and an open, non-secret door let light through; walls, blocked + edges, and shut or undiscovered-secret doors stop it — the same passability + the mover and the edge projection already agree on. + + Args: + session (osrlib.crawl.session.GameSession): The running session. + level (osrlib.crawl.dungeon.LevelSpec): The level holding the cell. + location: The party's dungeon location, for the door overlay's refs. + cell: The cell sight leaves. + direction: Which of the cell's four edges sight crosses. + + Returns: + True when sight crosses the edge. + """ + edge = level.edge(cell, direction) + if edge.kind is EdgeKind.OPEN: + return True + if edge.kind is EdgeKind.DOOR: + ref = edge_ref(location.dungeon_id, location.level_number, cell, direction) + state = session.dungeon_state.doors.get(ref) + if edge.door.kind == "secret" and (state is None or not state.discovered): + return False + return bool(state.open) if state is not None else edge.door.starts_open + return False + + +def _sight_line_feet(session) -> int | None: + """The longest unobstructed straight sight line from the party's cell, in feet. + + Sight runs cell by cell along each of the four grid directions, crossing only + the edges `_sight_passes` allows, and the longest of the four runs is how far + the space lets the party see from where it stands: a chamber's own span inside + a chamber, the whole passage down a straight corridor. On a rectangular room + this equals the room's extent from the party's cell, since the farthest corner + is exactly the longer of the two runs away in grid (Chebyshev) distance. + + This is geometry, never illumination: darkness never shortens the line, + because a monster the party cannot see is still exactly as far away as it is. + Light governs surprise, not distance. + + Args: + session (osrlib.crawl.session.GameSession): The running session. + + Returns: + The sight line in feet — never shorter than one cell — or `None` when the + party is not standing on a dungeon cell. + """ + location = _location(session) + if location.kind != "dungeon": + return None + try: + level = _level(session) + except ValueError: + return None + origin = _position(session) + longest = 0 + for direction in Direction: + cell = origin + run = 0 + while _sight_passes(session, level, location, cell, direction): + cell = step(cell, direction) + run += 1 + longest = max(longest, run) + return max(1, longest) * _CELL_FEET + + # ---------------------------------------------------------------------- light gates diff --git a/src/osrlib/crawl/views.py b/src/osrlib/crawl/views.py index d1dabcc..423f991 100644 --- a/src/osrlib/crawl/views.py +++ b/src/osrlib/crawl/views.py @@ -26,7 +26,7 @@ from osrlib.core.effects import Condition, has_condition from osrlib.core.items import MagicItemCategory, MagicItemInstance, magic_item_template from osrlib.crawl.dungeon import Direction, EdgeKind, PartyLocation, Position, cell_ref, edge_ref, step -from osrlib.crawl.exploration import EXHAUSTED_KIND, FATIGUE_KIND +from osrlib.crawl.exploration import _CELL_FEET, EXHAUSTED_KIND, FATIGUE_KIND, _sight_passes __all__ = [ "EdgeView", @@ -331,9 +331,6 @@ def _visible_cell_refs(session) -> set[str]: return refs -# The dungeon grid is authored at the classic ten-foot square, so a torch's -# thirty-foot radius reaches three cells of open floor. -_CELL_FEET = 10 _DEFAULT_LIGHT_FEET = 30 @@ -348,25 +345,6 @@ def _light_radius_feet(params) -> int: return int(raw) if raw is not None else _DEFAULT_LIGHT_FEET -def _sight_passes(session, level, location, cell: Position, direction: Direction) -> bool: - """Whether torchlight (and sight) crosses one cell edge. - - Open floor and an open, non-secret door let light through; walls, blocked - edges, and shut or undiscovered-secret doors stop it — the same passability - the mover and the edge projection already agree on. - """ - edge = level.edge(cell, direction) - if edge.kind is EdgeKind.OPEN: - return True - if edge.kind is EdgeKind.DOOR: - ref = edge_ref(location.dungeon_id, location.level_number, cell, direction) - state = session.dungeon_state.doors.get(ref) - if edge.door.kind == "secret" and (state is None or not state.discovered): - return False - return bool(state.open) if state is not None else edge.door.starts_open - return False - - def _light_reveal(session) -> tuple[str | None, set[Position]]: """Cells the party sees *right now* by its own light, keyed to their level. diff --git a/tests/crawl_fixtures.py b/tests/crawl_fixtures.py index 2c6c716..ed84e20 100644 --- a/tests/crawl_fixtures.py +++ b/tests/crawl_fixtures.py @@ -46,6 +46,7 @@ __all__ = [ "build_adventure", "build_party", + "build_sightline_adventure", ] @@ -166,6 +167,40 @@ def build_adventure(wandering_chance: int = 1) -> Adventure: ) +def build_sightline_adventure() -> Adventure: + """Build the one-level sight-line dungeon: four cells with four different views. + + Level 1 (15 × 5), four unconnected pieces the referee places the party into: + + ```text + x0 x1 x2 ... x14 + y0 [chamber———————] (0,0)–(2,0): a sealed 30' chamber + y2 clo|door|corr———————————— (0,2) closet, door east, then (1,2)–(14,2) + y4 seal (0,4): a sealed cell with no edges at all + ``` + + The sight lines, in feet: the corridor cell (1,2) sees 130' east (past the + printed 2d6 × 10' maximum, so nothing there is ever clamped); the chamber's + west end (0,0) sees 20'; the sealed cell (0,4) sees nothing, and the closet + (0,2) sees nothing either until its door opens onto the corridor. + """ + edges: dict[str, Edge] = {} + _open(edges, (0, 0), Direction.EAST) + _open(edges, (1, 0), Direction.EAST) + _door(edges, (0, 2), Direction.EAST) # the closet's door onto the corridor + for x in range(1, 14): + _open(edges, (x, 2), Direction.EAST) + level = LevelSpec( + number=1, width=15, height=5, edges=edges, entrance=(1, 2), wandering=WanderingSpec(chance_in_six=0) + ) + return Adventure( + name="The Sight Lines", + description="A level built to measure what the party can see.", + town=TownSpec(name="Threshold", travel_turns={"sightlines": 1}), + dungeons=(DungeonSpec(id="sightlines", name="Sight Lines", levels=(level,)),), + ) + + def _member(name: str, class_id: str) -> Character: definition = load_classes().get(class_id) scores = {ability: 11 for ability in AbilityScore} diff --git a/tests/generate_phase5_goldens.py b/tests/generate_phase5_goldens.py index c68a7e9..8693b38 100644 --- a/tests/generate_phase5_goldens.py +++ b/tests/generate_phase5_goldens.py @@ -46,7 +46,7 @@ HOARD_SEED = 20_260_705 NPC_SEED = 20_260_706 -MILESTONE_SEED = 203 # pinned with test_example_crawler.py: one seed, one script, two drivers +MILESTONE_SEED = 21 # pinned with test_example_crawler.py: one seed, one script, two drivers TREASURE_TYPES = tuple(string.ascii_uppercase[:22]) # A through V diff --git a/tests/goldens/phase4_delve.json b/tests/goldens/phase4_delve.json index d223804..5bb2a23 100644 --- a/tests/goldens/phase4_delve.json +++ b/tests/goldens/phase4_delve.json @@ -1,8 +1,8 @@ { "checkpoints": { - "end": 138, - "mid_battle": 40, - "mid_exploration": 32 + "end": 166, + "mid_battle": 41, + "mid_exploration": 31 }, "command_log": [ { @@ -204,11 +204,6 @@ "command_type": "light_source", "item_id": "torch" }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch" - }, { "command_type": "move_party", "direction": "east" @@ -239,6 +234,16 @@ "command_type": "force_door", "direction": "south" }, + { + "character_id": "character-0001", + "command_type": "force_door", + "direction": "south" + }, + { + "character_id": "character-0001", + "command_type": "force_door", + "direction": "south" + }, { "command_type": "wedge_door", "direction": "south" @@ -319,40 +324,40 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0003", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", @@ -367,15 +372,17 @@ "weapon_id": null }, { - "action": "hold", + "action": "cast", "character_id": "character-0005", "item_id": null, "move": null, "reversed": false, - "spell_id": null, - "spell_mode": null, + "spell_id": "magic_missile", + "spell_mode": "missiles", "target_group_id": null, - "targets": [], + "targets": [ + "monster-0001" + ], "weapon_id": null } ] @@ -441,7 +448,7 @@ "spell_mode": "missiles", "target_group_id": null, "targets": [ - "monster-0001" + "monster-0002" ], "weapon_id": null } @@ -451,40 +458,40 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0003", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", @@ -516,40 +523,40 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0003", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", @@ -577,78 +584,24 @@ } ] }, - { - "command_type": "move_party", - "direction": "east" - }, - { - "command_type": "take_treasure", - "feature_id": "coffer" - }, - { - "character_id": "character-0002", - "command_type": "search", - "kind": "secret_doors" - }, - { - "command_type": "reorder_party", - "order": [ - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" - ] - }, - { - "command_type": "open_door", - "direction": "east" - }, - { - "command_type": "wedge_door", - "direction": "east" - }, - { - "command_type": "move_party", - "direction": "east" - }, - { - "command_type": "move_party", - "direction": "east" - }, - { - "command_type": "use_stairs" - }, - { - "command_type": "move_party", - "direction": "east" - }, - { - "command_type": "open_door", - "direction": "south" - }, - { - "command_type": "move_party", - "direction": "south" - }, { "command_type": "resolve_battle_round", "declarations": [ { "action": "move", - "character_id": "character-0005", + "character_id": "character-0001", "item_id": null, "move": "close", "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { "action": "hold", - "character_id": "character-0001", + "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, @@ -660,7 +613,7 @@ }, { "action": "hold", - "character_id": "character-0002", + "character_id": "character-0003", "item_id": null, "move": null, "reversed": false, @@ -672,7 +625,7 @@ }, { "action": "hold", - "character_id": "character-0003", + "character_id": "character-0004", "item_id": null, "move": null, "reversed": false, @@ -683,8 +636,8 @@ "weapon_id": null }, { - "action": "turn_undead", - "character_id": "character-0004", + "action": "hold", + "character_id": "character-0005", "item_id": null, "move": null, "reversed": false, @@ -696,48 +649,61 @@ } ] }, + { + "command_type": "move_party", + "direction": "east" + }, + { + "command_type": "take_treasure", + "feature_id": "coffer" + }, + { + "character_id": "character-0002", + "command_type": "search", + "kind": "secret_doors" + }, { "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", - "character_id": "character-0005", + "action": "attack", + "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", - "character_id": "character-0001", + "action": "attack", + "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", - "character_id": "character-0002", + "action": "attack", + "character_id": "character-0003", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", - "character_id": "character-0003", + "character_id": "character-0004", "item_id": null, "move": null, "reversed": false, @@ -749,7 +715,7 @@ }, { "action": "hold", - "character_id": "character-0004", + "character_id": "character-0005", "item_id": null, "move": null, "reversed": false, @@ -761,64 +727,48 @@ } ] }, - { - "command_type": "move_party", - "direction": "north" - }, - { - "command_type": "move_party", - "direction": "east" - }, - { - "command_type": "move_party", - "direction": "east" - }, - { - "command_type": "move_party", - "direction": "south" - }, { "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", - "character_id": "character-0005", + "action": "attack", + "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0003", + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", - "character_id": "character-0001", + "action": "attack", + "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", - "character_id": "character-0002", + "action": "attack", + "character_id": "character-0003", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", - "character_id": "character-0003", + "character_id": "character-0004", "item_id": null, "move": null, "reversed": false, @@ -830,7 +780,7 @@ }, { "action": "hold", - "character_id": "character-0004", + "character_id": "character-0005", "item_id": null, "move": null, "reversed": false, @@ -846,38 +796,91 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", - "character_id": "character-0005", - "item_id": null, - "move": "close", - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - }, - { - "action": "hold", + "action": "attack", "character_id": "character-0001", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", "character_id": "character-0002", "item_id": null, "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", + "targets": [], + "weapon_id": "sword" + }, + { + "action": "attack", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0002", + "targets": [], + "weapon_id": "sword" + }, + { + "action": "hold", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0005", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + } + ] + }, + { + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "move", + "character_id": "character-0001", + "item_id": null, + "move": "close", + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0002", + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0002", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, "targets": [], "weapon_id": null }, @@ -904,25 +907,81 @@ "target_group_id": null, "targets": [], "weapon_id": null + }, + { + "action": "cast", + "character_id": "character-0005", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": "fire_ball", + "spell_mode": "damage", + "target_group_id": "group-0002", + "targets": [], + "weapon_id": null } ] }, + { + "character_id": "character-0005", + "command_type": "search", + "kind": "secret_doors" + }, + { + "command_type": "reorder_party", + "order": [ + "character-0005", + "character-0001", + "character-0002", + "character-0003", + "character-0004" + ] + }, + { + "command_type": "open_door", + "direction": "east" + }, + { + "command_type": "wedge_door", + "direction": "east" + }, + { + "command_type": "move_party", + "direction": "east" + }, + { + "command_type": "move_party", + "direction": "east" + }, + { + "command_type": "use_stairs" + }, + { + "command_type": "move_party", + "direction": "east" + }, + { + "command_type": "open_door", + "direction": "south" + }, + { + "command_type": "move_party", + "direction": "south" + }, { "command_type": "resolve_battle_round", "declarations": [ { - "action": "cast", + "action": "attack", "character_id": "character-0005", "item_id": null, "move": null, "reversed": false, - "spell_id": "magic_missile", - "spell_mode": "missiles", - "target_group_id": null, - "targets": [ - "monster-0011" - ], - "weapon_id": null + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0003", + "targets": [], + "weapon_id": "dagger" }, { "action": "attack", @@ -961,7 +1020,7 @@ "weapon_id": null }, { - "action": "hold", + "action": "turn_undead", "character_id": "character-0004", "item_id": null, "move": null, @@ -1039,6 +1098,71 @@ } ] }, + { + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "move", + "character_id": "character-0005", + "item_id": null, + "move": "close", + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0003", + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0002", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + } + ] + }, { "command_type": "move_party", "direction": "north" @@ -1083,6 +1207,16 @@ "command_type": "drop_items", "item_ids": [] }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch" + }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch" + }, { "command_type": "move_party", "direction": "north" @@ -1091,6 +1225,10 @@ "command_type": "move_party", "direction": "east" }, + { + "command_type": "move_party", + "direction": "east" + }, { "command_type": "move_party", "direction": "south" @@ -1186,16 +1324,6 @@ { "command_type": "wait" }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch" - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch" - }, { "command_type": "move_party", "direction": "north" @@ -1270,10 +1398,6 @@ "command_type": "move_party", "direction": "west" }, - { - "command_type": "move_party", - "direction": "west" - }, { "command_type": "use_stairs" }, @@ -1330,30 +1454,92 @@ "kind": "turn" }, { - "command_type": "engage_battle" + "command_type": "rest", + "kind": "turn" }, { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "cast", - "character_id": "character-0005", - "item_id": null, - "move": null, - "reversed": false, - "spell_id": "fire_ball", - "spell_mode": "damage", - "target_group_id": "group-0006", - "targets": [], - "weapon_id": null - }, - { - "action": "hold", - "character_id": "character-0001", - "item_id": null, - "move": null, - "reversed": false, - "spell_id": null, + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "rest", + "kind": "turn" + }, + { + "command_type": "engage_battle" + }, + { + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "cast", + "character_id": "character-0005", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": "fire_ball", + "spell_mode": "damage", + "target_group_id": "group-0006", + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, "spell_mode": null, "target_group_id": null, "targets": [], @@ -1397,321 +1583,2549 @@ } ] }, - { - "command_type": "travel_to_town" - } - ], - "defeated_monsters": [], - "event_log": [ { "character_id": "character-0001", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "visibility": "player" + "command_type": "light_source", + "item_id": "torch" }, { "character_id": "character-0001", - "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "sword", - "chainmail", - "torch", - "torch", - "torch", - "torch", - "tinder_box", - "iron_spikes", - "rations_standard", - "waterskin" - ], - "visibility": "player" + "command_type": "light_source", + "item_id": "torch" }, { - "character_id": "character-0002", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "visibility": "player" + "command_type": "rest", + "kind": "turn" }, { - "character_id": "character-0002", - "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "sword", - "chainmail", - "rations_standard", - "waterskin" - ], - "visibility": "player" + "command_type": "rest", + "kind": "turn" }, { - "character_id": "character-0003", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "visibility": "player" + "command_type": "rest", + "kind": "turn" }, { - "character_id": "character-0003", - "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "sword", - "leather", - "rations_standard", - "waterskin" - ], - "visibility": "player" + "command_type": "rest", + "kind": "turn" }, { - "character_id": "character-0004", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "visibility": "player" + "command_type": "rest", + "kind": "turn" }, { - "character_id": "character-0004", - "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "mace", - "chainmail", - "rations_standard", - "waterskin" - ], - "visibility": "player" + "command_type": "rest", + "kind": "turn" }, { - "character_id": "character-0005", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "visibility": "player" + "command_type": "engage_battle" }, { - "character_id": "character-0005", - "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "dagger", - "rations_standard", - "waterskin" - ], - "visibility": "player" + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "move", + "character_id": "character-0005", + "item_id": null, + "move": "close", + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0007", + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0002", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + } + ] }, { - "code": "exploration.location.entered", + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "cast", + "character_id": "character-0005", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": "magic_missile", + "spell_mode": "missiles", + "target_group_id": null, + "targets": [ + "monster-0028" + ], + "weapon_id": null + }, + { + "action": "attack", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0007", + "targets": [], + "weapon_id": "sword" + }, + { + "action": "hold", + "character_id": "character-0002", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + } + ] + }, + { + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "cast", + "character_id": "character-0005", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": "magic_missile", + "spell_mode": "missiles", + "target_group_id": null, + "targets": [ + "monster-0029" + ], + "weapon_id": null + }, + { + "action": "attack", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0007", + "targets": [], + "weapon_id": "sword" + }, + { + "action": "hold", + "character_id": "character-0002", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "cast", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": "cure_light_wounds", + "spell_mode": "heal", + "target_group_id": null, + "targets": [ + "character-0001" + ], + "weapon_id": null + } + ] + }, + { + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "attack", + "character_id": "character-0005", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0007", + "targets": [], + "weapon_id": "dagger" + }, + { + "action": "attack", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0007", + "targets": [], + "weapon_id": "sword" + }, + { + "action": "hold", + "character_id": "character-0002", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + } + ] + }, + { + "command_type": "travel_to_town" + } + ], + "defeated_monsters": [], + "event_log": [ + { + "character_id": "character-0001", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "sword", + "chainmail", + "torch", + "torch", + "torch", + "torch", + "tinder_box", + "iron_spikes", + "rations_standard", + "waterskin" + ], + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "sword", + "chainmail", + "rations_standard", + "waterskin" + ], + "visibility": "player" + }, + { + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "visibility": "player" + }, + { + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "sword", + "leather", + "rations_standard", + "waterskin" + ], + "visibility": "player" + }, + { + "character_id": "character-0004", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "visibility": "player" + }, + { + "character_id": "character-0004", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "mace", + "chainmail", + "rations_standard", + "waterskin" + ], + "visibility": "player" + }, + { + "character_id": "character-0005", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "visibility": "player" + }, + { + "character_id": "character-0005", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "dagger", + "rations_standard", + "waterskin" + ], + "visibility": "player" + }, + { + "code": "exploration.location.entered", + "event_type": "location_entered", + "level_number": 1, + "location_id": "halls", + "location_kind": "dungeon", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "code": "effects.effect.attached", + "effect_id": "effect-0001", + "event_type": "effect_attached", + "expires_round": 727, + "kind": "light", + "target_ref": "character-0001", + "visibility": "referee" + }, + { + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", + "visibility": "player" + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "visibility": "player", + "x": 1, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "south", + "visibility": "player", + "x": 1, + "y": 1 + }, + { + "code": "exploration.location.entered", + "event_type": "location_entered", + "level_number": 1, + "location_id": "pit_hall", + "location_kind": "area", + "visibility": "player" + }, + { + "chance": 2, + "character_id": null, + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "trap_spring", + "passed": true, + "roll": 1, + "visibility": "referee" + }, + { + "character_id": "character-0001", + "code": "exploration.trap.sprung", + "event_type": "trap", + "trap_ref": "halls:1:pit_hall", + "visibility": "player" + }, + { + "amount": 3, + "attacker_id": null, + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 3 + ], + "target_id": "character-0001", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 10, + "event_type": "hit_points_reported", + "max_hp": 13, + "target_id": "character-0001", + "visibility": "referee" + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", + "visibility": "player", + "x": 1, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "visibility": "player", + "x": 2, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "chance": 3, + "character_id": "character-0003", + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "listening", + "passed": true, + "roll": 2, + "visibility": "referee" + }, + { + "character_id": "character-0003", + "code": "exploration.listen.heard", + "direction": "south", + "event_type": "listened", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.door.stuck", + "direction": "south", + "event_type": "door", + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "character_id": "character-0001", + "code": "exploration.door.stuck", + "direction": "south", + "event_type": "door", + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "character_id": "character-0001", + "code": "exploration.door.forced", + "direction": "south", + "event_type": "door", + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "character_id": null, + "code": "exploration.door.wedged", + "direction": "south", + "event_type": "door", + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "south", + "visibility": "player", + "x": 3, + "y": 1 + }, + { + "code": "exploration.location.entered", "event_type": "location_entered", "level_number": 1, - "location_id": "halls", - "location_kind": "dungeon", + "location_id": "guard_room", + "location_kind": "area", + "visibility": "player" + }, + { + "cache_ref": "cache-0001", + "code": "treasure.hoard.generated", + "coins_gp_value": 170, + "event_type": "hoard_generated", + "magic_item_ids": [], + "treasure_types": [ + "C" + ], + "valuable_ids": [ + "valuable-0001", + "valuable-0002", + "valuable-0003", + "valuable-0004" + ], + "visibility": "referee" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, + "visibility": "referee" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "party", + "surprised": false, + "threshold": 2, + "visibility": "referee" + }, + { + "code": "encounter.started", + "count": 6, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Goblin", + "monsters_surprised": false, + "party_surprised": false, + "visibility": "player" + }, + { + "code": "encounter.reaction.rolled", + "event_type": "reaction_rolled", + "modifier": 0, + "result": "hostile", + "roll": 4, + "total": 4, + "visibility": "referee" + }, + { + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", + "visibility": "player" + }, + { + "code": "battle.started", + "event_type": "battle_started", + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 1, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 5 + ], + "total": 5 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0001", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005" + ], + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0001", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0001", + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 2, + "visibility": "player" + }, + { + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "magic_missile", + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 1 + ], + "total": 1 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 3 + ], + "total": 3 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0001", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005" + ], + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0001", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 1, + "total": 1, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0002", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 4, + "total": 4, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0003", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 2, + "total": 2, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0004", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 2, + "total": 2, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0005", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 7, + "total": 7, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0006", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 14, + "total": 14, + "visibility": "player" + }, + { + "caster_id": "character-0005", + "code": "magic.cast.cast", + "event_type": "spell_cast", + "manual": false, + "mode": "missiles", + "reversed": false, + "spell_id": "magic_missile", + "target_ids": [ + "monster-0001" + ], + "visibility": "player" + }, + { + "amount": 3, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic" + ], + "non_regenerable": false, + "rolls": [ + 2 + ], + "target_id": "monster-0001", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 4, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0001", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 3, + "total": 4, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 13, + "roll": 4, + "total": 2, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 14, + "total": 14, + "visibility": "player" + }, + { + "amount": 6, + "attacker_id": "character-0003", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 6 + ], + "target_id": "monster-0001", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0001", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0001", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0001", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0001", + "visibility": "referee" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 3, + "visibility": "player" + }, + { + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "magic_missile", + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 5 + ], + "total": 5 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 3 + ], + "total": 3 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005", + "group-0001" + ], + "visibility": "player" + }, + { + "caster_id": "character-0005", + "code": "magic.cast.cast", + "event_type": "spell_cast", + "manual": false, + "mode": "missiles", + "reversed": false, + "spell_id": "magic_missile", + "target_ids": [ + "monster-0002" + ], + "visibility": "player" + }, + { + "amount": 5, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic" + ], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "monster-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 1, + "target_id": "monster-0002", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0002", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 1, + "target_id": "monster-0002", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0003", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 10, + "total": 11, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0003", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 13, + "roll": 10, + "total": 8, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 2, + "total": 2, + "visibility": "player" + }, + { + "code": "combat.morale.held", + "event_type": "morale_checked", + "modifier": 0, + "roll": 6, + "score": 7, + "subject": "group-0001", + "visibility": "referee" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0003", + "code": "combat.attack.hit", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 16, + "total": 16, + "visibility": "player" + }, + { + "amount": 2, + "attacker_id": "monster-0003", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 2 + ], + "target_id": "character-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 16, + "event_type": "hit_points_reported", + "max_hp": 18, + "target_id": "character-0002", + "visibility": "referee" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0004", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 19, + "total": 19, + "visibility": "player" + }, + { + "amount": 1, + "attacker_id": "monster-0004", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "character-0003", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 13, + "event_type": "hit_points_reported", + "max_hp": 14, + "target_id": "character-0003", + "visibility": "referee" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0005", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 8, + "total": 8, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0006", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 9, + "total": 9, + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 4, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 1 + ], + "total": 1 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0001", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005" + ], + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0003", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 4, + "total": 4, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0004", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 14, + "total": 14, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0005", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 6, + "total": 6, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0006", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 13, + "total": 13, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "monster-0003", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 12, + "total": 13, + "visibility": "player" + }, + { + "amount": 5, + "attacker_id": "character-0001", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "monster-0003", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0003", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0003", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0003", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0003", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0004", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 13, + "roll": 12, + "total": 10, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0004", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 10, + "total": 10, + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 5, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 2 + ], + "total": 2 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0001", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005" + ], + "visibility": "player" + }, + { + "code": "combat.morale.broke", + "event_type": "morale_checked", + "modifier": 0, + "roll": 8, + "score": 7, + "subject": "group-0001", + "visibility": "referee" + }, + { + "code": "battle.side.fled", + "event_type": "monster_fled", + "group_id": "group-0001", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 65, + "event_type": "group_moved", + "group_id": "group-0001", + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0004", + "event_type": "attack_rolled", + "modifier": 3, + "natural": null, + "required": 13, + "roll": 6, + "total": 9, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0004", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 9, + "total": 9, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0004", + "event_type": "attack_rolled", + "modifier": 2, + "natural": null, + "required": 13, + "roll": 2, + "total": 4, + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 6, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 1 + ], + "total": 1 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 6 + ], + "total": 6 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0001", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005" + ], + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 125, + "event_type": "group_moved", + "group_id": "group-0001", + "visibility": "player" + }, + { + "code": "battle.ended.victory", + "event_type": "battle_ended", + "visibility": "player" + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0001", + "outcome": "slain", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0002", + "outcome": "slain", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0003", + "outcome": "slain", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0004", + "outcome": "routed", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0005", + "outcome": "routed", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0006", + "outcome": "routed", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "victory", + "visibility": "player" + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "visibility": "player", + "x": 4, + "y": 1 + }, + { + "character_id": "character-0001", + "code": "exploration.item.acquired", + "coins_gp_value": 400, + "event_type": "item_acquired", + "item_ids": [], + "visibility": "player" + }, + { + "chance": 2, + "character_id": "character-0002", + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "secret_doors", + "passed": false, + "roll": 5, + "visibility": "referee" + }, + { + "character_id": "character-0002", + "code": "exploration.search.nothing", + "event_type": "search_completed", + "found": [], + "kind": "secret_doors", + "visibility": "player" + }, + { + "chance": 3, + "code": "exploration.wandering.checked", + "encounter": true, + "event_type": "wandering_check", + "roll": 3, + "visibility": "referee" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, + "visibility": "referee" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 1, + "side": "party", + "surprised": true, + "threshold": 2, + "visibility": "referee" + }, + { + "code": "encounter.started", + "count": 4, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Snake, Cobra", + "monsters_surprised": false, + "party_surprised": true, + "visibility": "player" + }, + { + "code": "encounter.reaction.rolled", + "event_type": "reaction_rolled", + "modifier": 0, + "result": "hostile", + "roll": 5, + "total": 5, + "visibility": "referee" + }, + { + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", + "visibility": "player" + }, + { + "code": "battle.started", + "event_type": "battle_started", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0002", + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 2, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 5 + ], + "total": 5 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0002", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005" + ], + "visibility": "player" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0007", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 10, + "total": 10, + "visibility": "player" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0008", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 11, + "total": 11, + "visibility": "player" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0009", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 10, + "total": 10, + "visibility": "player" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0010", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 7, + "total": 7, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0007", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, + "roll": 1, + "total": 2, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0007", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 12, + "roll": 2, + "total": 0, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0007", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 15, + "total": 15, + "visibility": "player" + }, + { + "amount": 7, + "attacker_id": "character-0003", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 7 + ], + "target_id": "monster-0007", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0007", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0007", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0007", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0007", + "visibility": "referee" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 3, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 1 + ], + "total": 1 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005", + "group-0002" + ], + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0008", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, + "roll": 8, + "total": 9, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0008", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 12, + "roll": 17, + "total": 15, + "visibility": "player" + }, + { + "amount": 2, + "attacker_id": "character-0002", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "monster-0008", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 3, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0008", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0008", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 11, + "total": 11, + "visibility": "player" + }, + { + "code": "combat.morale.held", + "event_type": "morale_checked", + "modifier": 0, + "roll": 5, + "score": 7, + "subject": "group-0002", + "visibility": "referee" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0008", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 14, + "total": 14, + "visibility": "player" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0009", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 15, + "total": 15, + "visibility": "player" + }, + { + "attack_name": "spit", + "attacker_id": "monster-0010", + "code": "combat.attack.hit", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 17, + "total": 17, + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 4, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 5 + ], + "total": 5 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005", + "group-0002" + ], + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0008", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, + "roll": 2, + "total": 3, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0008", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 12, + "roll": 13, + "total": 11, + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0003", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0008", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 14, + "total": 14, + "visibility": "player" + }, + { + "amount": 8, + "attacker_id": "character-0003", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 8 + ], + "target_id": "monster-0008", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0008", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0008", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0008", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0008", + "visibility": "referee" + }, + { + "code": "combat.morale.broke", + "event_type": "morale_checked", + "modifier": 0, + "roll": 8, + "score": 7, + "subject": "group-0002", + "visibility": "referee" + }, + { + "code": "battle.side.fled", + "event_type": "monster_fled", + "group_id": "group-0002", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 95, + "event_type": "group_moved", + "group_id": "group-0002", + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 5, + "visibility": "player" + }, + { + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "fire_ball", + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 6 + ], + "total": 6 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "character-0005", + "group-0002" + ], "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "battle.group.moved", + "distance_feet": 75, + "event_type": "group_moved", + "group_id": "group-0002", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "caster_id": "character-0005", + "code": "magic.cast.cast", + "event_type": "spell_cast", + "manual": false, + "mode": "damage", + "reversed": false, + "spell_id": "fire_ball", + "target_ids": [ + "monster-0009", + "monster-0010" + ], "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 3, + "target_id": "monster-0009", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "amount": 24, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 5, + 6, + 6, + 4, + 3 + ], + "target_id": "monster-0009", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 2, + "target_id": "monster-0009", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0009", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0009", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 2, + "target_id": "monster-0009", + "visibility": "referee" + }, + { + "category": "spells", + "code": "combat.save.passed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 18, + "target_id": "monster-0010", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "amount": 7, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 3, + 6, + 2, + 1, + 2 + ], + "target_id": "monster-0010", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0001", - "event_type": "effect_attached", - "expires_round": 728, - "kind": "light", - "target_ref": "character-0001", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0010", "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.lit", - "event_type": "light", - "source": "torch", + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0010", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0010", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0010", + "visibility": "referee" + }, + { + "code": "battle.ended.victory", + "event_type": "battle_ended", + "visibility": "player" + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0007", + "outcome": "slain", + "template_id": "spitting_cobra", "visibility": "player", - "x": 1, - "y": 0 + "xp": 13 }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0008", + "outcome": "slain", + "template_id": "spitting_cobra", "visibility": "player", - "x": 1, - "y": 1 + "xp": 13 }, { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 1, - "location_id": "pit_hall", - "location_kind": "area", + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0009", + "outcome": "slain", + "template_id": "spitting_cobra", + "visibility": "player", + "xp": 13 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0010", + "outcome": "slain", + "template_id": "spitting_cobra", + "visibility": "player", + "xp": 13 + }, + { + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "victory", "visibility": "player" }, { - "chance": 2, - "character_id": null, + "chance": 1, + "character_id": "character-0005", "code": "exploration.detection.rolled", "event_type": "detection_rolled", - "kind": "trap_spring", + "kind": "secret_doors", "passed": true, "roll": 1, "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.trap.sprung", - "event_type": "trap", - "trap_ref": "halls:1:pit_hall", - "visibility": "player" - }, - { - "amount": 2, - "attacker_id": null, - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 2 + "character_id": "character-0005", + "code": "exploration.search.found", + "event_type": "search_completed", + "found": [ + "secret_door:east" ], - "target_id": "character-0001", + "kind": "secret_doors", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 17, - "event_type": "hit_points_reported", - "max_hp": 19, - "target_id": "character-0001", - "visibility": "referee" + "character_id": null, + "code": "exploration.door.opened", + "direction": "east", + "event_type": "door", + "visibility": "player", + "x": 4, + "y": 1 }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", + { + "character_id": null, + "code": "exploration.door.wedged", + "direction": "east", + "event_type": "door", "visibility": "player", - "x": 1, - "y": 0 + "x": 4, + "y": 1 }, { "code": "exploration.party.moved", "event_type": "party_moved", "facing": "east", "visibility": "player", - "x": 2, - "y": 0 + "x": 5, + "y": 1 }, { "code": "exploration.party.moved", "event_type": "party_moved", "facing": "east", "visibility": "player", - "x": 3, - "y": 0 - }, - { - "chance": 3, - "character_id": "character-0003", - "code": "exploration.detection.rolled", - "event_type": "detection_rolled", - "kind": "listening", - "passed": true, - "roll": 1, - "visibility": "referee" + "x": 6, + "y": 1 }, { - "character_id": "character-0003", - "code": "exploration.listen.heard", - "direction": "south", - "event_type": "listened", + "code": "exploration.location.entered", + "event_type": "location_entered", + "level_number": 2, + "location_id": "halls", + "location_kind": "level", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.door.forced", - "direction": "south", - "event_type": "door", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", "visibility": "player", - "x": 3, + "x": 1, "y": 0 }, { "character_id": null, - "code": "exploration.door.wedged", + "code": "exploration.door.opened", "direction": "south", "event_type": "door", "visibility": "player", - "x": 3, + "x": 1, "y": 0 }, { @@ -1719,32 +4133,17 @@ "event_type": "party_moved", "facing": "south", "visibility": "player", - "x": 3, + "x": 1, "y": 1 }, { "code": "exploration.location.entered", "event_type": "location_entered", - "level_number": 1, - "location_id": "guard_room", + "level_number": 2, + "location_id": "crypt", "location_kind": "area", "visibility": "player" }, - { - "cache_ref": "cache-0001", - "code": "treasure.hoard.generated", - "coins_gp_value": 2000, - "event_type": "hoard_generated", - "magic_item_ids": [], - "treasure_types": [ - "C" - ], - "valuable_ids": [ - "valuable-0001", - "valuable-0002" - ], - "visibility": "referee" - }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", @@ -1757,31 +4156,22 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": null, + "roll": 2, "side": "party", - "surprised": false, + "surprised": true, "threshold": 2, "visibility": "referee" }, { "code": "encounter.started", - "count": 6, - "distance_feet": 70, + "count": 4, + "distance_feet": 10, "event_type": "encounter_started", - "monster_name": "Goblin", + "monster_name": "Skeleton", "monsters_surprised": false, - "party_surprised": false, + "party_surprised": true, "visibility": "player" }, - { - "code": "encounter.reaction.rolled", - "event_type": "reaction_rolled", - "modifier": 0, - "result": "hostile", - "roll": 5, - "total": 5, - "visibility": "referee" - }, { "code": "encounter.stance.changed", "event_type": "stance_changed", @@ -1793,108 +4183,268 @@ "event_type": "battle_started", "visibility": "player" }, + { + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0003", + "visibility": "player" + }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 1, + "round": 2, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 4, + 3, + 5, + 2, + 6, + 3 + ], + "total": 3 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 4, + 3, + 5, + 2, + 6, + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0003", + "character-0005", + "character-0001", + "character-0002", + "character-0003", + "character-0004" + ], + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0011", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 9, + "total": 9, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0012", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 10, + "total": 10, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0013", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 14, + "total": 14, + "visibility": "player" + }, + { + "amount": 3, + "attacker_id": "monster-0013", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 3 + ], + "target_id": "character-0001", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 7, + "event_type": "hit_points_reported", + "max_hp": 13, + "target_id": "character-0001", + "visibility": "referee" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0014", + "code": "combat.attack.missed", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 7, + "total": 7, + "visibility": "player" + }, + { + "affected_ids": [ + "monster-0011", + "monster-0012", + "monster-0013", + "monster-0014" + ], + "caster_id": "character-0004", + "code": "magic.turning.turned", + "event_type": "undead_turned", + "hd_pool": 11, + "roll": 11, + "types": [ + { + "column": "1", + "outcome": "turn", + "template_id": "skeleton", + "threshold": null + } + ], + "visibility": "player" + }, + { + "code": "effects.effect.attached", + "effect_id": "effect-0002", + "event_type": "effect_attached", + "expires_round": null, + "kind": "turned", + "target_ref": "monster-0011", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "turned", + "effect_id": "effect-0002", + "event_type": "condition_gained", + "target_id": "monster-0011", + "visibility": "player" + }, + { + "code": "effects.effect.attached", + "effect_id": "effect-0003", + "event_type": "effect_attached", + "expires_round": null, + "kind": "turned", + "target_ref": "monster-0012", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "turned", + "effect_id": "effect-0003", + "event_type": "condition_gained", + "target_id": "monster-0012", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 1 - ], - "total": 1 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0001", - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "character-0005" - ], - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0004", + "event_type": "effect_attached", + "expires_round": null, + "kind": "turned", + "target_ref": "monster-0013", + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 50, - "event_type": "group_moved", - "group_id": "group-0001", + "code": "effects.condition.gained", + "condition": "turned", + "effect_id": "effect-0004", + "event_type": "condition_gained", + "target_id": "monster-0013", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 30, - "event_type": "group_moved", - "group_id": "group-0001", - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0005", + "event_type": "effect_attached", + "expires_round": null, + "kind": "turned", + "target_ref": "monster-0014", + "visibility": "referee" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 2, + "code": "effects.condition.gained", + "condition": "turned", + "effect_id": "effect-0005", + "event_type": "condition_gained", + "target_id": "monster-0014", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 4 - ], - "total": 4 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 5 - ], - "total": 5 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0001", - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "character-0005" - ], + "attack_name": "Dagger", + "attacker_id": "character-0005", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0011", + "event_type": "attack_rolled", + "modifier": -1, + "natural": null, + "required": 12, + "roll": 11, + "total": 10, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 10, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0011", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, + "roll": 7, + "total": 8, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0011", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 12, + "roll": 8, + "total": 6, "visibility": "player" }, { @@ -1903,14 +4453,6 @@ "round": 3, "visibility": "player" }, - { - "caster_id": "character-0005", - "code": "battle.spell.declared", - "event_type": "spell_declared", - "reversed": false, - "spell_id": "magic_missile", - "visibility": "player" - }, { "code": "combat.initiative.rolled", "entries": [ @@ -1918,7 +4460,6 @@ "key": "party", "modifier": 0, "rolls": [ - 2, 4 ], "total": 4 @@ -1927,148 +4468,54 @@ "key": "monsters", "modifier": 0, "rolls": [ - 2, - 2 + 3 ], - "total": 2 + "total": 3 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "character-0005", "character-0001", "character-0002", "character-0003", "character-0004", - "character-0005", - "group-0001" - ], - "visibility": "player" - }, - { - "caster_id": "character-0005", - "code": "magic.cast.cast", - "event_type": "spell_cast", - "manual": false, - "mode": "missiles", - "reversed": false, - "spell_id": "magic_missile", - "target_ids": [ - "monster-0001" + "group-0003" ], "visibility": "player" }, { - "amount": 6, + "attack_name": "Dagger", "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic" - ], - "non_regenerable": false, - "rolls": [ - 5 - ], - "target_id": "monster-0001", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 1, - "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0001", - "visibility": "referee" - }, - { - "attack_name": "Sword", - "attacker_id": "character-0001", - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0001", - "event_type": "attack_rolled", - "modifier": 1, - "natural": null, - "required": 13, - "roll": 12, - "total": 13, - "visibility": "player" - }, - { - "amount": 4, - "attacker_id": "character-0001", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 3 - ], - "target_id": "monster-0001", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0001", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0001", - "visibility": "player" - }, - { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0001", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0001", - "visibility": "referee" - }, - { - "attack_name": "Sword", - "attacker_id": "character-0002", "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0002", + "defender_ac": 7, + "defender_id": "monster-0011", "event_type": "attack_rolled", - "modifier": 0, + "modifier": -1, "natural": null, - "required": 13, - "roll": 8, - "total": 8, + "required": 12, + "roll": 4, + "total": 3, "visibility": "player" }, { "attack_name": "Sword", - "attacker_id": "character-0003", + "attacker_id": "character-0001", "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0002", + "defender_ac": 7, + "defender_id": "monster-0011", "event_type": "attack_rolled", - "modifier": -2, + "modifier": 1, "natural": null, - "required": 13, - "roll": 17, + "required": 12, + "roll": 14, "total": 15, "visibility": "player" }, { - "amount": 5, - "attacker_id": "character-0003", + "amount": 8, + "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], @@ -2076,15 +4523,15 @@ "rolls": [ 7 ], - "target_id": "monster-0002", + "target_id": "monster-0011", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0002", + "max_hp": 8, + "target_id": "monster-0011", "visibility": "referee" }, { @@ -2092,43 +4539,51 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0002", + "target_id": "monster-0011", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0002", + "target_id": "monster-0011", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0002", + "max_hp": 8, + "target_id": "monster-0011", "visibility": "referee" }, { - "code": "combat.morale.broke", + "attack_name": "Sword", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0012", + "event_type": "attack_rolled", + "modifier": -2, + "natural": null, + "required": 12, + "roll": 1, + "total": -1, + "visibility": "player" + }, + { + "code": "combat.morale.exempt", "event_type": "morale_checked", "modifier": 0, - "roll": 8, - "score": 7, - "subject": "group-0001", + "roll": null, + "score": 12, + "subject": "group-0003", "visibility": "referee" }, - { - "code": "battle.side.fled", - "event_type": "monster_fled", - "group_id": "group-0001", - "visibility": "player" - }, { "code": "battle.group.moved", "distance_feet": 65, "event_type": "group_moved", - "group_id": "group-0001", + "group_id": "group-0003", "visibility": "player" }, { @@ -2144,263 +4599,341 @@ "key": "party", "modifier": 0, "rolls": [ - 5 + 2 ], - "total": 5 + "total": 2 }, { "key": "monsters", "modifier": 0, "rolls": [ - 1 + 5 ], - "total": 1 + "total": 5 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0003", + "character-0005", "character-0001", "character-0002", "character-0003", - "character-0004", - "character-0005", - "group-0001" + "character-0004" ], "visibility": "player" }, { "code": "battle.group.moved", - "distance_feet": 45, + "distance_feet": 125, "event_type": "group_moved", - "group_id": "group-0001", + "group_id": "group-0003", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 105, - "event_type": "group_moved", - "group_id": "group-0001", + "code": "battle.ended.victory", + "event_type": "battle_ended", "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 5, + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0011", + "outcome": "slain", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0012", + "outcome": "routed", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0013", + "outcome": "routed", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0014", + "outcome": "routed", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 + }, + { + "code": "effects.effect.released", + "effect_id": "effect-0002", + "event_type": "effect_released", + "kind": "turned", + "target_ref": "monster-0011", + "visibility": "referee" + }, + { + "code": "effects.condition.removed", + "condition": "turned", + "effect_id": "effect-0002", + "event_type": "condition_removed", + "target_id": "monster-0011", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 5 - ], - "total": 5 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "character-0005", - "group-0001" - ], + "code": "effects.effect.released", + "effect_id": "effect-0003", + "event_type": "effect_released", + "kind": "turned", + "target_ref": "monster-0012", + "visibility": "referee" + }, + { + "code": "effects.condition.removed", + "condition": "turned", + "effect_id": "effect-0003", + "event_type": "condition_removed", + "target_id": "monster-0012", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 85, - "event_type": "group_moved", - "group_id": "group-0001", + "code": "effects.effect.released", + "effect_id": "effect-0004", + "event_type": "effect_released", + "kind": "turned", + "target_ref": "monster-0013", + "visibility": "referee" + }, + { + "code": "effects.condition.removed", + "condition": "turned", + "effect_id": "effect-0004", + "event_type": "condition_removed", + "target_id": "monster-0013", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 145, - "event_type": "group_moved", - "group_id": "group-0001", + "code": "effects.effect.released", + "effect_id": "effect-0005", + "event_type": "effect_released", + "kind": "turned", + "target_ref": "monster-0014", + "visibility": "referee" + }, + { + "code": "effects.condition.removed", + "condition": "turned", + "effect_id": "effect-0005", + "event_type": "condition_removed", + "target_id": "monster-0014", + "visibility": "player" + }, + { + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "victory", + "visibility": "player" + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", + "visibility": "player", + "x": 1, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "visibility": "player", + "x": 2, + "y": 0 + }, + { + "character_id": null, + "code": "exploration.door.swung_shut", + "direction": "north", + "event_type": "door", + "visibility": "player", + "x": 1, + "y": 1 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "south", + "visibility": "player", + "x": 3, + "y": 1 + }, + { + "code": "exploration.location.entered", + "event_type": "location_entered", + "level_number": 2, + "location_id": "kennel_a", + "location_kind": "area", + "visibility": "player" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, + "visibility": "referee" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 4, + "side": "party", + "surprised": false, + "threshold": 2, + "visibility": "referee" + }, + { + "code": "encounter.started", + "count": 3, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Goblin", + "monsters_surprised": false, + "party_surprised": false, "visibility": "player" }, { - "code": "battle.ended.victory", - "event_type": "battle_ended", + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0001", - "outcome": "slain", - "template_id": "goblin", - "visibility": "player", - "xp": 5 + "code": "encounter.evasion.pursuit", + "event_type": "evasion", + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0002", - "outcome": "slain", - "template_id": "goblin", - "visibility": "player", - "xp": 5 + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 1, + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0003", - "outcome": "routed", - "template_id": "goblin", - "visibility": "player", - "xp": 5 + "character_id": "character-0001", + "code": "exploration.item.dropped", + "coins_gp_value": 10, + "event_type": "items_dropped", + "item_ids": [], + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0004", - "outcome": "routed", - "template_id": "goblin", - "visibility": "player", - "xp": 5 + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 2, + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0005", - "outcome": "routed", - "template_id": "goblin", - "visibility": "player", - "xp": 5 + "character_id": "character-0001", + "code": "exploration.item.dropped", + "coins_gp_value": 10, + "event_type": "items_dropped", + "item_ids": [], + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0006", - "outcome": "routed", - "template_id": "goblin", - "visibility": "player", - "xp": 5 + "code": "encounter.pursuit.distracted", + "event_type": "pursuit", + "gap_feet": 10, + "round": 3, + "visibility": "player" }, { "code": "encounter.ended", "event_type": "encounter_ended", - "outcome": "victory", + "outcome": "escaped", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "visibility": "player", - "x": 4, - "y": 1 + "code": "effects.effect.expired", + "effect_id": "effect-0001", + "event_type": "effect_expired", + "kind": "light", + "round": 727, + "target_ref": "character-0001", + "visibility": "referee" }, { "character_id": "character-0001", - "code": "exploration.item.acquired", - "coins_gp_value": 400, - "event_type": "item_acquired", - "item_ids": [], + "code": "exploration.light.expired", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "chance": 2, - "character_id": "character-0002", - "code": "exploration.detection.rolled", - "event_type": "detection_rolled", - "kind": "secret_doors", - "passed": true, - "roll": 2, - "visibility": "referee" - }, - { - "character_id": "character-0002", - "code": "exploration.search.found", - "event_type": "search_completed", - "found": [ - "secret_door:east" - ], - "kind": "secret_doors", + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "chance": 3, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 6, + "code": "effects.effect.attached", + "effect_id": "effect-0006", + "event_type": "effect_attached", + "expires_round": 1141, + "kind": "light", + "target_ref": "character-0001", "visibility": "referee" }, { - "character_id": null, - "code": "exploration.door.opened", - "direction": "east", - "event_type": "door", - "visibility": "player", - "x": 4, - "y": 1 - }, - { - "character_id": null, - "code": "exploration.door.wedged", - "direction": "east", - "event_type": "door", - "visibility": "player", - "x": 4, - "y": 1 + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", + "visibility": "player" }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "east", + "facing": "north", "visibility": "player", - "x": 5, - "y": 1 + "x": 3, + "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", "facing": "east", "visibility": "player", - "x": 6, - "y": 1 - }, - { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 2, - "location_id": "halls", - "location_kind": "level", - "visibility": "player" + "x": 4, + "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", "facing": "east", "visibility": "player", - "x": 1, - "y": 0 - }, - { - "character_id": null, - "code": "exploration.door.opened", - "direction": "south", - "event_type": "door", - "visibility": "player", - "x": 1, + "x": 5, "y": 0 }, { @@ -2408,17 +4941,33 @@ "event_type": "party_moved", "facing": "south", "visibility": "player", - "x": 1, + "x": 5, "y": 1 }, { "code": "exploration.location.entered", "event_type": "location_entered", "level_number": 2, - "location_id": "crypt", + "location_id": "kennel_b", "location_kind": "area", "visibility": "player" }, + { + "cache_ref": "cache-0002", + "code": "treasure.hoard.generated", + "coins_gp_value": 0, + "event_type": "hoard_generated", + "magic_item_ids": [], + "treasure_types": [ + "C" + ], + "valuable_ids": [ + "valuable-0005", + "valuable-0006", + "valuable-0007" + ], + "visibility": "referee" + }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", @@ -2431,349 +4980,337 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 2, + "roll": 5, "side": "party", - "surprised": true, + "surprised": false, "threshold": 2, "visibility": "referee" }, { - "code": "encounter.started", - "count": 4, - "distance_feet": 90, - "event_type": "encounter_started", - "monster_name": "Skeleton", - "monsters_surprised": false, - "party_surprised": true, + "code": "encounter.started", + "count": 3, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Goblin", + "monsters_surprised": false, + "party_surprised": false, + "visibility": "player" + }, + { + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", + "visibility": "player" + }, + { + "code": "encounter.evasion.pursuit", + "event_type": "evasion", + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 1, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 2, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 3, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 4, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 5, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 6, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 7, "visibility": "player" }, { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 8, "visibility": "player" }, { - "code": "battle.started", - "event_type": "battle_started", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 9, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 70, - "event_type": "group_moved", - "group_id": "group-0002", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 10, "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 2, + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 11, "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 2, - 3, - 1, - 6 - ], - "total": 6 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 2, - 3, - 1, - 5 - ], - "total": 5 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "group-0002" - ], + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 12, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 50, - "event_type": "group_moved", - "group_id": "group-0002", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 13, "visibility": "player" }, { - "affected_ids": [ - "monster-0007", - "monster-0008", - "monster-0009", - "monster-0010" - ], - "caster_id": "character-0004", - "code": "magic.turning.turned", - "event_type": "undead_turned", - "hd_pool": 7, - "roll": 7, - "types": [ - { - "column": "1", - "outcome": "turn", - "template_id": "skeleton", - "threshold": null - } - ], + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 14, "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0002", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0007", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 15, + "visibility": "player" }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0002", - "event_type": "condition_gained", - "target_id": "monster-0007", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 16, "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0003", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0008", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 17, + "visibility": "player" }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0003", - "event_type": "condition_gained", - "target_id": "monster-0008", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 18, "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0004", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0009", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 19, + "visibility": "player" }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0004", - "event_type": "condition_gained", - "target_id": "monster-0009", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 20, "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0005", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0010", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 21, + "visibility": "player" }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0005", - "event_type": "condition_gained", - "target_id": "monster-0010", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 22, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 110, - "event_type": "group_moved", - "group_id": "group-0002", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 23, "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 3, + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 24, "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 4 - ], - "total": 4 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 3 - ], - "total": 3 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "group-0002" - ], + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 25, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 90, - "event_type": "group_moved", - "group_id": "group-0002", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 26, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 150, - "event_type": "group_moved", - "group_id": "group-0002", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 27, "visibility": "player" }, { - "code": "battle.ended.victory", - "event_type": "battle_ended", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 28, "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0007", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 29, + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0008", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "code": "effects.effect.attached", + "effect_id": "effect-0007", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0005", + "visibility": "referee" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0009", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0007", + "event_type": "condition_gained", + "target_id": "character-0005", + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0010", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "code": "effects.effect.attached", + "effect_id": "effect-0008", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0001", + "visibility": "referee" }, { - "code": "effects.effect.released", - "effect_id": "effect-0002", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0007", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0008", + "event_type": "condition_gained", + "target_id": "character-0001", + "visibility": "player" + }, + { + "code": "effects.effect.attached", + "effect_id": "effect-0009", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0002", "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0002", - "event_type": "condition_removed", - "target_id": "monster-0007", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0009", + "event_type": "condition_gained", + "target_id": "character-0002", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0003", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0008", + "code": "effects.effect.attached", + "effect_id": "effect-0010", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0003", "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0003", - "event_type": "condition_removed", - "target_id": "monster-0008", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0010", + "event_type": "condition_gained", + "target_id": "character-0003", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0004", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0009", + "code": "effects.effect.attached", + "effect_id": "effect-0011", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0004", "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0004", - "event_type": "condition_removed", - "target_id": "monster-0009", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0011", + "event_type": "condition_gained", + "target_id": "character-0004", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0005", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0010", - "visibility": "referee" + "code": "encounter.exhaustion.gained", + "event_type": "exhaustion", + "visibility": "player" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0005", - "event_type": "condition_removed", - "target_id": "monster-0010", + "code": "encounter.pursuit.escaped", + "event_type": "pursuit", + "gap_feet": 10, + "round": 30, "visibility": "player" }, { "code": "encounter.ended", "event_type": "encounter_ended", - "outcome": "victory", + "outcome": "escaped", "visibility": "player" }, { @@ -2781,905 +5318,854 @@ "event_type": "party_moved", "facing": "north", "visibility": "player", - "x": 1, + "x": 5, "y": 0 }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "visibility": "player", - "x": 2, - "y": 0 + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "character_id": null, - "code": "exploration.door.swung_shut", - "direction": "north", - "event_type": "door", - "visibility": "player", - "x": 1, - "y": 1 + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "visibility": "player", - "x": 3, - "y": 0 + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "visibility": "player", - "x": 3, - "y": 1 + "code": "effects.effect.expired", + "effect_id": "effect-0006", + "event_type": "effect_expired", + "kind": "light", + "round": 1141, + "target_ref": "character-0001", + "visibility": "referee" }, { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 2, - "location_id": "kennel_a", - "location_kind": "area", + "character_id": "character-0001", + "code": "exploration.light.expired", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "cache_ref": "cache-0002", - "code": "treasure.hoard.generated", - "coins_gp_value": 0, - "event_type": "hoard_generated", - "magic_item_ids": [], - "treasure_types": [ - "C" - ], - "valuable_ids": [ - "valuable-0003", - "valuable-0004" - ], + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" + }, + { + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", "roll": null, - "side": "monsters", - "surprised": false, - "threshold": 2, "visibility": "referee" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": 2, - "side": "party", - "surprised": true, - "threshold": 2, + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "code": "encounter.started", - "count": 3, - "distance_feet": 90, - "event_type": "encounter_started", - "monster_name": "Goblin", - "monsters_surprised": false, - "party_surprised": true, - "visibility": "player" - }, - { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.started", - "event_type": "battle_started", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 70, - "event_type": "group_moved", - "group_id": "group-0003", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 2, - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 5 - ], - "total": 5 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "group-0003" - ], - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 50, - "event_type": "group_moved", - "group_id": "group-0003", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 30, - "event_type": "group_moved", - "group_id": "group-0003", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 3, - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 4 - ], - "total": 4 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 6 - ], - "total": 6 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0003", - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" - ], - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 10, - "event_type": "group_moved", - "group_id": "group-0003", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0003", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 4, - "visibility": "player" + "code": "effects.effect.released", + "effect_id": "effect-0007", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0005", + "visibility": "referee" }, { - "caster_id": "character-0005", - "code": "battle.spell.declared", - "event_type": "spell_declared", - "reversed": false, - "spell_id": "magic_missile", + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0007", + "event_type": "condition_removed", + "target_id": "character-0005", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 4 - ], - "total": 4 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 5 - ], - "total": 5 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0003", - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" - ], - "visibility": "player" + "code": "effects.effect.released", + "effect_id": "effect-0008", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0001", + "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0011", - "code": "combat.attack.hit", - "defender_ac": 9, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 10, - "roll": 11, - "total": 11, + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0008", + "event_type": "condition_removed", + "target_id": "character-0001", "visibility": "player" }, { - "amount": 1, - "attacker_id": "monster-0011", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "character-0005", + "code": "effects.effect.released", + "effect_id": "effect-0009", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0002", + "visibility": "referee" + }, + { + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0009", + "event_type": "condition_removed", + "target_id": "character-0002", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 8, - "event_type": "hit_points_reported", - "max_hp": 9, - "target_id": "character-0005", + "code": "effects.effect.released", + "effect_id": "effect-0010", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0003", "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0012", - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "character-0001", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 13, - "roll": 10, - "total": 10, + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0010", + "event_type": "condition_removed", + "target_id": "character-0003", "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0013", - "code": "combat.attack.missed", - "defender_ac": 5, - "defender_id": "character-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 14, - "roll": 7, - "total": 7, - "visibility": "player" + "code": "effects.effect.released", + "effect_id": "effect-0011", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0004", + "visibility": "referee" }, { - "caster_id": "character-0005", - "code": "magic.cast.disrupted", - "event_type": "spell_disrupted", - "reversed": false, - "spell_id": "magic_missile", + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0011", + "event_type": "condition_removed", + "target_id": "character-0004", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0011", - "event_type": "attack_rolled", - "modifier": 1, - "natural": null, - "required": 13, - "roll": 1, - "total": 2, + "code": "encounter.exhaustion.recovered", + "event_type": "exhaustion", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "character-0002", - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0011", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 13, - "roll": 15, - "total": 15, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "night", "visibility": "player" }, { - "amount": 5, - "attacker_id": "character-0002", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 5 + "caster_id": "character-0005", + "code": "magic.memorize.prepared", + "event_type": "spells_memorized", + "prepared": [ + { + "reversed": false, + "spell_id": "magic_missile" + }, + { + "reversed": false, + "spell_id": "magic_missile" + }, + { + "reversed": false, + "spell_id": "web" + }, + { + "reversed": false, + "spell_id": "web" + }, + { + "reversed": false, + "spell_id": "fire_ball" + } ], - "target_id": "monster-0011", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "monster-0011", + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0011", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0011", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "monster-0011", + "code": "effects.effect.attached", + "effect_id": "effect-0012", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0005", "visibility": "referee" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 5, - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0013", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0001", + "visibility": "referee" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 6 - ], - "total": 6 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0003", - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" - ], - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0014", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0002", + "visibility": "referee" }, { - "code": "combat.morale.broke", - "event_type": "morale_checked", - "modifier": 0, - "roll": 8, - "score": 7, - "subject": "group-0003", + "code": "effects.effect.attached", + "effect_id": "effect-0015", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0003", "visibility": "referee" }, { - "code": "battle.side.fled", - "event_type": "monster_fled", - "group_id": "group-0003", - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0016", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0004", + "visibility": "referee" }, - { - "code": "battle.group.moved", - "distance_feet": 65, - "event_type": "group_moved", - "group_id": "group-0003", + { + "code": "exploration.fatigue.gained", + "event_type": "fatigue", "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "character-0005", - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0012", - "event_type": "attack_rolled", - "modifier": 2, - "natural": null, - "required": 13, - "roll": 8, - "total": 10, + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0012", - "event_type": "attack_rolled", - "modifier": 3, - "natural": null, - "required": 13, - "roll": 16, - "total": 19, + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "amount": 8, - "attacker_id": "character-0001", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 7 - ], - "target_id": "monster-0012", + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0012", + "code": "effects.effect.attached", + "effect_id": "effect-0017", + "event_type": "effect_attached", + "expires_round": 4443, + "kind": "light", + "target_ref": "character-0001", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0012", + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0012", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 4, + "y": 0 }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0012", - "visibility": "referee" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 3, + "y": 0 }, { - "attack_name": "Sword", - "attacker_id": "character-0002", - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0013", - "event_type": "attack_rolled", - "modifier": 2, - "natural": null, - "required": 13, - "roll": 20, - "total": 22, - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 2, + "y": 0 }, { - "amount": 1, - "attacker_id": "character-0002", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "monster-0013", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 1, + "y": 0 }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0013", - "visibility": "referee" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 0, + "y": 0 }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0013", + "code": "exploration.location.entered", + "event_type": "location_entered", + "level_number": 1, + "location_id": "halls", + "location_kind": "level", "visibility": "player" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0013", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 5, + "y": 1 }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0013", - "visibility": "referee" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "visibility": "player", + "x": 4, + "y": 1 }, { - "code": "battle.ended.victory", - "event_type": "battle_ended", + "code": "exploration.location.entered", + "event_type": "location_entered", + "level_number": 1, + "location_id": "guard_room", + "location_kind": "area", "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0011", - "outcome": "slain", - "template_id": "goblin", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", "visibility": "player", - "xp": 5 + "x": 3, + "y": 1 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0012", - "outcome": "slain", - "template_id": "goblin", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", "visibility": "player", - "xp": 5 + "x": 3, + "y": 0 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0013", - "outcome": "slain", - "template_id": "goblin", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", "visibility": "player", - "xp": 5 - }, - { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "victory", - "visibility": "player" + "x": 2, + "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "north", + "facing": "west", "visibility": "player", - "x": 3, + "x": 1, "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "east", + "facing": "west", "visibility": "player", - "x": 4, + "x": 0, "y": 0 }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "visibility": "player", - "x": 5, - "y": 0 + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 5, + "visibility": "referee" + }, + { + "code": "effects.effect.released", + "effect_id": "effect-0012", + "event_type": "effect_released", + "kind": "fatigue", + "target_ref": "character-0005", + "visibility": "referee" + }, + { + "code": "effects.effect.released", + "effect_id": "effect-0013", + "event_type": "effect_released", + "kind": "fatigue", + "target_ref": "character-0001", + "visibility": "referee" + }, + { + "code": "effects.effect.released", + "effect_id": "effect-0014", + "event_type": "effect_released", + "kind": "fatigue", + "target_ref": "character-0002", + "visibility": "referee" + }, + { + "code": "effects.effect.released", + "effect_id": "effect-0015", + "event_type": "effect_released", + "kind": "fatigue", + "target_ref": "character-0003", + "visibility": "referee" + }, + { + "code": "effects.effect.released", + "effect_id": "effect-0016", + "event_type": "effect_released", + "kind": "fatigue", + "target_ref": "character-0004", + "visibility": "referee" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "visibility": "player", - "x": 5, - "y": 1 + "code": "exploration.fatigue.recovered", + "event_type": "fatigue", + "visibility": "player" }, { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 2, - "location_id": "kennel_b", - "location_kind": "area", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "cache_ref": "cache-0003", - "code": "treasure.hoard.generated", - "coins_gp_value": 2010, - "event_type": "hoard_generated", - "magic_item_ids": [], - "treasure_types": [ - "C" - ], - "valuable_ids": [ - "valuable-0005", - "valuable-0006", - "valuable-0007" - ], - "visibility": "referee" + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", + "visibility": "player" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": null, - "side": "monsters", - "surprised": false, - "threshold": 2, + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 3, "visibility": "referee" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": 6, - "side": "party", - "surprised": false, - "threshold": 2, - "visibility": "referee" + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", + "visibility": "player" }, { - "code": "encounter.started", - "count": 3, - "distance_feet": 50, - "event_type": "encounter_started", - "monster_name": "Goblin", - "monsters_surprised": false, - "party_surprised": false, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", - "visibility": "player" + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 3, + "visibility": "referee" }, { - "code": "encounter.evasion.pursuit", - "event_type": "evasion", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 50, - "round": 1, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, + { + "code": "effects.effect.expired", + "effect_id": "effect-0017", + "event_type": "effect_expired", + "kind": "light", + "round": 4443, + "target_ref": "character-0001", + "visibility": "referee" + }, { "character_id": "character-0001", - "code": "exploration.item.dropped", - "coins_gp_value": 10, - "event_type": "items_dropped", - "item_ids": [], + "code": "exploration.light.expired", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 50, - "round": 2, + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 4, + "visibility": "referee" + }, + { + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, + { + "code": "effects.effect.attached", + "effect_id": "effect-0018", + "event_type": "effect_attached", + "expires_round": 4860, + "kind": "light", + "target_ref": "character-0001", + "visibility": "referee" + }, { "character_id": "character-0001", - "code": "exploration.item.dropped", - "coins_gp_value": 10, - "event_type": "items_dropped", - "item_ids": [], + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "encounter.pursuit.distracted", - "event_type": "pursuit", - "gap_feet": 50, - "round": 3, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "escaped", + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 5, + "visibility": "referee" + }, + { + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "visibility": "player", - "x": 5, - "y": 0 + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", + "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "visibility": "player", - "x": 6, - "y": 0 + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 2, + "visibility": "referee" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "visibility": "player", - "x": 6, - "y": 1 + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", + "visibility": "player" }, { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 2, - "location_id": "kennel_c", - "location_kind": "area", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "cache_ref": "cache-0004", - "code": "treasure.hoard.generated", - "coins_gp_value": 100, - "event_type": "hoard_generated", - "magic_item_ids": [], - "treasure_types": [ - "C" - ], - "valuable_ids": [], + "code": "effects.effect.expired", + "effect_id": "effect-0018", + "event_type": "effect_expired", + "kind": "light", + "round": 4860, + "target_ref": "character-0001", "visibility": "referee" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": null, - "side": "monsters", - "surprised": false, - "threshold": 2, - "visibility": "referee" + "character_id": "character-0001", + "code": "exploration.light.expired", + "event_type": "light", + "source": "torch", + "visibility": "player" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": 3, - "side": "party", - "surprised": false, - "threshold": 2, + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 6, "visibility": "referee" }, { - "code": "encounter.started", - "count": 3, - "distance_feet": 70, - "event_type": "encounter_started", - "monster_name": "Goblin", - "monsters_surprised": false, - "party_surprised": false, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0019", + "event_type": "effect_attached", + "expires_round": 5220, + "kind": "light", + "target_ref": "character-0001", + "visibility": "referee" }, { - "code": "encounter.evasion.pursuit", - "event_type": "evasion", + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 1, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 2, - "visibility": "player" + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 3, + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 3, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 4, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 5, - "visibility": "player" + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 4, + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 6, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 7, + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { "code": "effects.effect.expired", - "effect_id": "effect-0001", + "effect_id": "effect-0019", "event_type": "effect_expired", "kind": "light", - "round": 728, + "round": 5220, "target_ref": "character-0001", "visibility": "referee" }, @@ -3691,1008 +6177,1121 @@ "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 8, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 9, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 10, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 11, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 12, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 13, - "visibility": "player" + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": true, + "event_type": "wandering_check", + "roll": 1, + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 14, - "visibility": "player" + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 15, - "visibility": "player" + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 4, + "side": "party", + "surprised": false, + "threshold": 3, + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 16, + "code": "encounter.started", + "count": 7, + "distance_feet": 30, + "event_type": "encounter_started", + "monster_name": "Beetle, Fire", + "monsters_surprised": false, + "party_surprised": false, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 17, - "visibility": "player" + "code": "encounter.reaction.rolled", + "event_type": "reaction_rolled", + "modifier": 0, + "result": "uncertain", + "roll": 7, + "total": 7, + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 18, + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "uncertain", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 19, + "code": "exploration.rest.interrupted", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 20, + "code": "battle.started", + "event_type": "battle_started", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 21, + "code": "battle.round.started", + "event_type": "battle_round", + "round": 1, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 22, + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "fire_ball", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 23, + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 6 + ], + "total": 6 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 1 + ], + "total": 1 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0005", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "group-0006" + ], "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 24, + "caster_id": "character-0005", + "code": "magic.cast.cast", + "event_type": "spell_cast", + "manual": false, + "mode": "damage", + "reversed": false, + "spell_id": "fire_ball", + "target_ids": [ + "monster-0021", + "monster-0022", + "monster-0023", + "monster-0024", + "monster-0025", + "monster-0026", + "monster-0027" + ], "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 25, + "category": "spells", + "code": "combat.save.passed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 18, + "target_id": "monster-0021", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 26, + "amount": 8, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 1, + 2, + 6, + 3, + 4 + ], + "target_id": "monster-0021", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 27, - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0021", + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 28, + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0021", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 70, - "round": 29, + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0021", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0006", - "event_type": "effect_attached", - "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0005", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0021", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0006", - "event_type": "condition_gained", - "target_id": "character-0005", + "category": "spells", + "code": "combat.save.passed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 16, + "target_id": "monster-0022", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0007", - "event_type": "effect_attached", - "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0001", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0007", - "event_type": "condition_gained", - "target_id": "character-0001", + "amount": 5, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 2, + 2, + 2, + 2, + 2 + ], + "target_id": "monster-0022", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0008", - "event_type": "effect_attached", - "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0002", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "monster-0022", "visibility": "referee" }, { "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0008", + "condition": "dead", + "effect_id": null, "event_type": "condition_gained", - "target_id": "character-0002", + "target_id": "monster-0022", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0009", - "event_type": "effect_attached", - "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0003", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0022", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "monster-0022", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0009", - "event_type": "condition_gained", - "target_id": "character-0003", + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 14, + "target_id": "monster-0023", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0010", - "event_type": "effect_attached", - "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0004", + "amount": 20, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 4, + 3, + 3, + 4, + 6 + ], + "target_id": "monster-0023", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 6, + "target_id": "monster-0023", "visibility": "referee" }, { "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0010", + "condition": "dead", + "effect_id": null, "event_type": "condition_gained", - "target_id": "character-0004", + "target_id": "monster-0023", "visibility": "player" }, { - "code": "encounter.exhaustion.gained", - "event_type": "exhaustion", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0023", "visibility": "player" }, { - "code": "encounter.pursuit.escaped", - "event_type": "pursuit", - "gap_feet": 70, - "round": 30, - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 6, + "target_id": "monster-0023", + "visibility": "referee" }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "escaped", + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 12, + "target_id": "monster-0024", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "amount": 17, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 4, + 5, + 1, + 1, + 6 + ], + "target_id": "monster-0024", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0011", - "event_type": "effect_attached", - "expires_round": 1141, - "kind": "light", - "target_ref": "character-0001", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "monster-0024", "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.lit", - "event_type": "light", - "source": "torch", + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0024", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "visibility": "player", - "x": 6, - "y": 0 + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0024", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "monster-0024", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 13, + "target_id": "monster-0025", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "amount": 17, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 1, + 5, + 5, + 3, + 3 + ], + "target_id": "monster-0025", + "visibility": "player" }, { - "code": "effects.effect.expired", - "effect_id": "effect-0011", - "event_type": "effect_expired", - "kind": "light", - "round": 1141, - "target_ref": "character-0001", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0025", "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.expired", - "event_type": "light", - "source": "torch", + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0025", "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0025", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0025", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 13, + "target_id": "monster-0026", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "amount": 13, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 2, + 1, + 5, + 1, + 4 + ], + "target_id": "monster-0026", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "monster-0026", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0026", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0026", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "monster-0026", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 8, + "target_id": "monster-0027", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "amount": 14, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 4, + 1, + 4, + 4, + 1 + ], + "target_id": "monster-0027", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0027", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0027", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0027", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0027", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.ended.victory", + "event_type": "battle_ended", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0021", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0022", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0023", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0024", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0025", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0026", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "code": "effects.effect.released", - "effect_id": "effect-0006", - "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0005", - "visibility": "referee" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0027", + "outcome": "slain", + "template_id": "fire_beetle", + "visibility": "player", + "xp": 15 }, { - "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0006", - "event_type": "condition_removed", - "target_id": "character-0005", + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "victory", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0007", - "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0001", - "visibility": "referee" - }, - { - "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0007", - "event_type": "condition_removed", - "target_id": "character-0001", + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0008", - "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0002", + "code": "effects.effect.attached", + "effect_id": "effect-0020", + "event_type": "effect_attached", + "expires_round": 5641, + "kind": "light", + "target_ref": "character-0001", "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0008", - "event_type": "condition_removed", - "target_id": "character-0002", + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0009", - "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0003", - "visibility": "referee" - }, - { - "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0009", - "event_type": "condition_removed", - "target_id": "character-0003", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0010", - "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0004", + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 3, "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0010", - "event_type": "condition_removed", - "target_id": "character-0004", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "code": "encounter.exhaustion.recovered", - "event_type": "exhaustion", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, + { + "chance": 1, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": 6, + "visibility": "referee" + }, { "code": "exploration.rest.rested", "event_type": "rested", - "kind": "night", + "kind": "turn", "visibility": "player" }, { - "caster_id": "character-0005", - "code": "magic.memorize.prepared", - "event_type": "spells_memorized", - "prepared": [ - { - "reversed": false, - "spell_id": "magic_missile" - }, - { - "reversed": false, - "spell_id": "magic_missile" - }, - { - "reversed": false, - "spell_id": "web" - }, - { - "reversed": false, - "spell_id": "web" - }, - { - "reversed": false, - "spell_id": "fire_ball" - } - ], + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "turn", "visibility": "player" }, { - "chance": 0, + "chance": 1, "code": "exploration.wandering.checked", - "encounter": false, + "encounter": true, "event_type": "wandering_check", - "roll": null, + "roll": 1, "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, "visibility": "referee" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0012", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0005", + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 5, + "side": "party", + "surprised": false, + "threshold": 2, "visibility": "referee" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0013", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0001", - "visibility": "referee" + "code": "encounter.started", + "count": 8, + "distance_feet": 30, + "event_type": "encounter_started", + "monster_name": "Killer Bee", + "monsters_surprised": false, + "party_surprised": false, + "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0014", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0002", + "code": "encounter.reaction.rolled", + "event_type": "reaction_rolled", + "modifier": 0, + "result": "uncertain", + "roll": 7, + "total": 7, "visibility": "referee" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0015", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0003", - "visibility": "referee" + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "uncertain", + "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0016", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0004", - "visibility": "referee" + "code": "exploration.rest.interrupted", + "event_type": "rested", + "kind": "turn", + "visibility": "player" }, { - "code": "exploration.fatigue.gained", - "event_type": "fatigue", + "code": "battle.started", + "event_type": "battle_started", "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "code": "battle.round.started", + "event_type": "battle_round", + "round": 1, + "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 2, + 6 + ], + "total": 6 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 2, + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0005", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "group-0007" + ], "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "battle.group.moved", + "distance_feet": 10, + "event_type": "group_moved", + "group_id": "group-0007", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0007", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0017", - "event_type": "effect_attached", - "expires_round": 4383, + "code": "effects.effect.expired", + "effect_id": "effect-0020", + "event_type": "effect_expired", "kind": "light", + "round": 5641, "target_ref": "character-0001", "visibility": "referee" }, { "character_id": "character-0001", - "code": "exploration.light.lit", + "code": "exploration.light.expired", "event_type": "light", "source": "torch", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 5, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 4, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 3, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 2, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 0, - "y": 0 - }, - { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 1, - "location_id": "halls", - "location_kind": "level", + "code": "battle.round.started", + "event_type": "battle_round", + "round": 2, "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 5, - "y": 1 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 4, - "y": 1 - }, - { - "code": "exploration.location.entered", - "event_type": "location_entered", - "level_number": 1, - "location_id": "guard_room", - "location_kind": "area", + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "magic_missile", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 3, - "y": 1 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "visibility": "player", - "x": 3, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 2, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 1, - "y": 0 + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 2, + 1, + 1 + ], + "total": 1 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 2, + 1, + 2 + ], + "total": 2 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "group-0007", + "character-0005", + "character-0001", + "character-0002", + "character-0003", + "character-0004" + ], + "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "visibility": "player", - "x": 0, - "y": 0 + "attack_name": "sting", + "attacker_id": "monster-0028", + "code": "combat.attack.hit", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 12, + "total": 12, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0012", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0005", - "visibility": "referee" + "amount": 1, + "attacker_id": "monster-0028", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "character-0005", + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0013", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0001", + "code": "combat.state.hit_points", + "current_hp": 13, + "event_type": "hit_points_reported", + "max_hp": 14, + "target_id": "character-0005", "visibility": "referee" }, { - "code": "effects.effect.released", - "effect_id": "effect-0014", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0002", - "visibility": "referee" + "attack_name": "sting", + "attacker_id": "monster-0029", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 15, + "total": 15, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0015", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0003", - "visibility": "referee" + "amount": 3, + "attacker_id": "monster-0029", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 3 + ], + "target_id": "character-0001", + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0016", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0004", + "code": "combat.state.hit_points", + "current_hp": 4, + "event_type": "hit_points_reported", + "max_hp": 13, + "target_id": "character-0001", "visibility": "referee" }, { - "code": "exploration.fatigue.recovered", - "event_type": "fatigue", + "attack_name": "sting", + "attacker_id": "monster-0030", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 3, + "total": 3, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "attack_name": "sting", + "attacker_id": "monster-0031", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 8, + "total": 8, "visibility": "player" }, { - "chance": 1, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 5, - "visibility": "referee" + "attack_name": "sting", + "attacker_id": "monster-0032", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 13, + "total": 13, + "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "attack_name": "sting", + "attacker_id": "monster-0033", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 18, + "total": 18, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "amount": 1, + "attacker_id": "monster-0033", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "character-0001", "visibility": "player" }, { - "chance": 1, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 3, + "code": "combat.state.hit_points", + "current_hp": 3, + "event_type": "hit_points_reported", + "max_hp": 13, + "target_id": "character-0001", "visibility": "referee" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "attack_name": "sting", + "attacker_id": "monster-0034", + "code": "combat.attack.missed", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 9, + "total": 9, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "attack_name": "sting", + "attacker_id": "monster-0035", + "code": "combat.attack.missed", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 3, + "total": 3, "visibility": "player" }, { - "chance": 1, - "code": "exploration.wandering.checked", - "encounter": true, - "event_type": "wandering_check", - "roll": 1, - "visibility": "referee" - }, - { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": null, - "side": "monsters", - "surprised": false, - "threshold": 2, - "visibility": "referee" + "caster_id": "character-0005", + "code": "magic.cast.disrupted", + "event_type": "spell_disrupted", + "reversed": false, + "spell_id": "magic_missile", + "visibility": "player" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": 3, - "side": "party", - "surprised": false, - "threshold": 2, - "visibility": "referee" + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0028", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, + "roll": 18, + "total": 19, + "visibility": "player" }, { - "code": "encounter.started", - "count": 7, - "distance_feet": 60, - "event_type": "encounter_started", - "monster_name": "Wolf", - "monsters_surprised": false, - "party_surprised": false, + "amount": 5, + "attacker_id": "character-0001", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "monster-0028", "visibility": "player" }, { - "code": "encounter.reaction.rolled", - "event_type": "reaction_rolled", - "modifier": 0, - "result": "hostile", - "roll": 4, - "total": 4, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "monster-0028", "visibility": "referee" }, { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0028", "visibility": "player" }, { - "code": "exploration.rest.interrupted", - "event_type": "rested", - "kind": "turn", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0028", "visibility": "player" }, { - "code": "battle.started", - "event_type": "battle_started", - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "monster-0028", + "visibility": "referee" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 1, + "round": 3, "visibility": "player" }, { @@ -4700,7 +7299,15 @@ "code": "battle.spell.declared", "event_type": "spell_declared", "reversed": false, - "spell_id": "fire_ball", + "spell_id": "magic_missile", + "visibility": "player" + }, + { + "caster_id": "character-0004", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "cure_light_wounds", "visibility": "player" }, { @@ -4710,19 +7317,17 @@ "key": "party", "modifier": 0, "rolls": [ - 6, - 4 + 6 ], - "total": 4 + "total": 6 }, { "key": "monsters", "modifier": 0, "rolls": [ - 6, - 3 + 4 ], - "total": 3 + "total": 4 } ], "event_type": "initiative_rolled", @@ -4730,128 +7335,47 @@ "order": [ "character-0005", "character-0001", - "character-0002", - "character-0003", - "character-0004", - "group-0006" - ], - "visibility": "player" - }, - { - "caster_id": "character-0005", - "code": "magic.cast.cast", - "event_type": "spell_cast", - "manual": false, - "mode": "damage", - "reversed": false, - "spell_id": "fire_ball", - "target_ids": [ - "monster-0020", - "monster-0021", - "monster-0022", - "monster-0023", - "monster-0024", - "monster-0025", - "monster-0026" - ], - "visibility": "player" - }, - { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 16, - "roll": 15, - "target_id": "monster-0020", - "visibility": "player" - }, - { - "amount": 13, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 3, - 2, - 2, - 3, - 3 - ], - "target_id": "monster-0020", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 13, - "target_id": "monster-0020", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0020", - "visibility": "player" - }, - { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0020", + "character-0002", + "character-0003", + "character-0004", + "group-0007" + ], "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 13, - "target_id": "monster-0020", - "visibility": "referee" - }, - { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 16, - "roll": 1, - "target_id": "monster-0021", + "caster_id": "character-0005", + "code": "magic.cast.cast", + "event_type": "spell_cast", + "manual": false, + "mode": "missiles", + "reversed": false, + "spell_id": "magic_missile", + "target_ids": [ + "monster-0029" + ], "visibility": "player" }, { - "amount": 20, + "amount": 7, "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [ - "magic", - "fire" + "magic" ], "non_regenerable": false, "rolls": [ - 3, - 1, - 5, - 6, - 5 + 6 ], - "target_id": "monster-0021", + "target_id": "monster-0029", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 6, - "target_id": "monster-0021", + "max_hp": 2, + "target_id": "monster-0029", "visibility": "referee" }, { @@ -4859,119 +7383,85 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0021", + "target_id": "monster-0029", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0021", + "target_id": "monster-0029", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 6, - "target_id": "monster-0021", + "max_hp": 2, + "target_id": "monster-0029", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 16, - "roll": 3, - "target_id": "monster-0022", - "visibility": "player" - }, - { - "amount": 10, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 3, - 2, - 1, - 3, - 1 + "caster_id": "character-0004", + "code": "magic.cast.cast", + "event_type": "spell_cast", + "manual": false, + "mode": "heal", + "reversed": false, + "spell_id": "cure_light_wounds", + "target_ids": [ + "character-0001" ], - "target_id": "monster-0022", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "monster-0022", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0022", "visibility": "player" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0022", + "amount": 7, + "code": "combat.healing.applied", + "event_type": "healing_applied", + "source": "magical", + "target_id": "character-0001", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 0, + "current_hp": 10, "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "monster-0022", + "max_hp": 13, + "target_id": "character-0001", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 16, + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0030", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, "roll": 13, - "target_id": "monster-0023", + "total": 14, "visibility": "player" }, { - "amount": 18, - "attacker_id": "character-0005", + "amount": 7, + "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], + "keys": [], "non_regenerable": false, "rolls": [ - 5, - 2, - 3, - 4, - 4 + 6 ], - "target_id": "monster-0023", + "target_id": "monster-0030", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 9, - "target_id": "monster-0023", + "max_hp": 1, + "target_id": "monster-0030", "visibility": "referee" }, { @@ -4979,119 +7469,196 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0023", + "target_id": "monster-0030", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0023", + "target_id": "monster-0030", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 9, - "target_id": "monster-0023", + "max_hp": 1, + "target_id": "monster-0030", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", + "code": "combat.morale.held", + "event_type": "morale_checked", "modifier": 0, - "required": 16, - "roll": 9, - "target_id": "monster-0024", + "roll": 6, + "score": 9, + "subject": "group-0007", + "visibility": "referee" + }, + { + "attack_name": "sting", + "attacker_id": "monster-0031", + "code": "combat.attack.missed", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 5, + "total": 5, "visibility": "player" }, { - "amount": 21, - "attacker_id": "character-0005", + "attack_name": "sting", + "attacker_id": "monster-0032", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 7, + "total": 7, + "visibility": "player" + }, + { + "attack_name": "sting", + "attacker_id": "monster-0033", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 7, + "total": 7, + "visibility": "player" + }, + { + "attack_name": "sting", + "attacker_id": "monster-0034", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 15, + "total": 15, + "visibility": "player" + }, + { + "amount": 3, + "attacker_id": "monster-0034", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], + "keys": [], "non_regenerable": false, "rolls": [ - 5, - 4, - 3, - 5, - 4 + 3 ], - "target_id": "monster-0024", + "target_id": "character-0001", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 0, + "current_hp": 7, "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0024", + "max_hp": 13, + "target_id": "character-0001", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0024", + "attack_name": "sting", + "attacker_id": "monster-0035", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 1, + "total": 1, "visibility": "player" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0024", + "code": "battle.round.started", + "event_type": "battle_round", + "round": 4, "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0024", - "visibility": "referee" + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 4, + 5 + ], + "total": 5 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 4, + 4 + ], + "total": 4 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0005", + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "group-0007" + ], + "visibility": "player" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 16, - "roll": 2, - "target_id": "monster-0025", + "attack_name": "Dagger", + "attacker_id": "character-0005", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0031", + "event_type": "attack_rolled", + "modifier": -1, + "natural": null, + "required": 12, + "roll": 19, + "total": 18, "visibility": "player" }, { - "amount": 23, + "amount": 3, "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], + "keys": [], "non_regenerable": false, "rolls": [ - 5, - 5, - 6, - 6, - 1 + 4 ], - "target_id": "monster-0025", + "target_id": "monster-0031", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0025", + "max_hp": 3, + "target_id": "monster-0031", "visibility": "referee" }, { @@ -5099,59 +7666,56 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0025", + "target_id": "monster-0031", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0025", + "target_id": "monster-0031", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 7, - "target_id": "monster-0025", + "max_hp": 3, + "target_id": "monster-0031", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 16, - "roll": 14, - "target_id": "monster-0026", + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0032", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 12, + "roll": 18, + "total": 19, "visibility": "player" }, { - "amount": 22, - "attacker_id": "character-0005", + "amount": 5, + "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], + "keys": [], "non_regenerable": false, "rolls": [ - 2, - 4, - 4, - 6, - 6 + 4 ], - "target_id": "monster-0026", + "target_id": "monster-0032", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 13, - "target_id": "monster-0026", + "max_hp": 1, + "target_id": "monster-0032", "visibility": "referee" }, { @@ -5159,23 +7723,45 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0026", + "target_id": "monster-0032", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0026", + "target_id": "monster-0032", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 13, - "target_id": "monster-0026", + "max_hp": 1, + "target_id": "monster-0032", + "visibility": "referee" + }, + { + "code": "combat.morale.broke", + "event_type": "morale_checked", + "modifier": 0, + "roll": 10, + "score": 9, + "subject": "group-0007", "visibility": "referee" }, + { + "code": "battle.side.fled", + "event_type": "monster_fled", + "group_id": "group-0007", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 155, + "event_type": "group_moved", + "group_id": "group-0007", + "visibility": "player" + }, { "code": "battle.ended.victory", "event_type": "battle_ended", @@ -5184,65 +7770,74 @@ { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0020", + "monster_id": "monster-0028", "outcome": "slain", - "template_id": "normal_wolf", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0021", + "monster_id": "monster-0029", "outcome": "slain", - "template_id": "normal_wolf", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0022", + "monster_id": "monster-0030", "outcome": "slain", - "template_id": "normal_wolf", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0023", + "monster_id": "monster-0031", "outcome": "slain", - "template_id": "normal_wolf", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0024", + "monster_id": "monster-0032", "outcome": "slain", - "template_id": "normal_wolf", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0025", - "outcome": "slain", - "template_id": "normal_wolf", + "monster_id": "monster-0033", + "outcome": "routed", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0026", - "outcome": "slain", - "template_id": "normal_wolf", + "monster_id": "monster-0034", + "outcome": "routed", + "template_id": "killer_bee", + "visibility": "player", + "xp": 6 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0035", + "outcome": "routed", + "template_id": "killer_bee", "visibility": "player", - "xp": 25 + "xp": 6 }, { "code": "encounter.ended", @@ -5250,22 +7845,6 @@ "outcome": "victory", "visibility": "player" }, - { - "code": "effects.effect.expired", - "effect_id": "effect-0017", - "event_type": "effect_expired", - "kind": "light", - "round": 4383, - "target_ref": "character-0001", - "visibility": "referee" - }, - { - "character_id": "character-0001", - "code": "exploration.light.expired", - "event_type": "light", - "source": "torch", - "visibility": "player" - }, { "code": "exploration.location.entered", "event_type": "location_entered", @@ -5277,8 +7856,8 @@ { "code": "session.xp.adventure_award", "event_type": "adventure_xp_award", - "monster_xp": 260, - "share": 128, + "monster_xp": 275, + "share": 131, "survivors": [ "character-0005", "character-0001", @@ -5290,97 +7869,97 @@ "visibility": "player" }, { - "award": 128, + "award": 131, "character_id": "character-0005", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 5, - "modified_award": 128, + "modified_award": 131, "visibility": "player" }, { - "award": 128, + "award": 131, "character_id": "character-0001", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 134, + "modified_award": 137, "visibility": "player" }, { - "award": 128, + "award": 131, "character_id": "character-0002", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 128, + "modified_award": 131, "visibility": "player" }, { - "award": 128, + "award": 131, "character_id": "character-0003", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 128, + "modified_award": 131, "visibility": "player" }, { - "award": 128, + "award": 131, "character_id": "character-0004", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 128, + "modified_award": 131, "visibility": "player" } ], - "final_clock_rounds": 4800, + "final_clock_rounds": 6060, "final_stream_states": { "advancement": { - "inc": 86900093583733674921711004983579340669, - "state": 314979156681265795024256626365255291800 + "inc": 264343220069690662338610596290832278013, + "state": 83122625369679985417795037023270724183 }, "combat": { - "inc": 121608830979365594321457036395390673307, - "state": 93225619516251987891226741673370087680 + "inc": 74656175200956986795187238452715273941, + "state": 265229131969075333924619425634139794599 }, "effects": { - "inc": 78026752195180967380468474139571973697, - "state": 257662166542747827713434410963217696300 + "inc": 210874836303421737699506503092742195143, + "state": 191044357328922411084545076394701287499 }, "encounter": { - "inc": 77736647642072142188081118770777588975, - "state": 206666989408936519760943041252998928536 + "inc": 49078044101173778147218027424276573469, + "state": 241821533996642598358081714321609774746 }, "exploration": { - "inc": 241144381656787260098905845804466819123, - "state": 98187615710761783648434872164242016767 + "inc": 225187457065521569998691640814821863869, + "state": 118085802161514333959296157404085466770 }, "magic": { - "inc": 150965548772649944294708337656841820111, - "state": 327277669820903556210008037442409689436 + "inc": 242220188352767006422894463256266174679, + "state": 13305497608598042702056188073443020978 }, "monster_action": { - "inc": 191702539695680288942490407770127920559, - "state": 334871176721911122842439993433071886231 + "inc": 274437653884495711244993217182224554807, + "state": 170036019753061074176013813296729892470 }, "monster_spawn": { - "inc": 123643957193368879014590998056361979995, - "state": 41034052424107000566539050429462451641 + "inc": 105200493713022081547686023772084520667, + "state": 193806527731696515688868063721799037486 }, "treasure": { - "inc": 287780612102537662614319942825370588277, - "state": 323442542037818985208647256098094542287 + "inc": 81146047320019598539605071800352401109, + "state": 27710791378131377907589509420474254181 }, "wandering": { - "inc": 65919459233863451073673651863941616007, - "state": 119897328061694705786070434384340144505 + "inc": 58143059152188125084475732421059380273, + "state": 168695052088914556660118697924538939725 } }, - "master_seed": 20260707, + "master_seed": 20260793, "party_document": { - "engine_version": "0.1.0", + "engine_version": "1.3.0", "kind": "party", "payload": { "characters": [ @@ -5389,7 +7968,7 @@ "carrying_treasure": false, "class_id": "fighter", "conditions": [], - "current_hp": 19, + "current_hp": 13, "extra_languages": [], "id": null, "inventory": { @@ -5397,7 +7976,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 90, + "gp": 150, "pp": 0, "sp": 0 }, @@ -5408,17 +7987,17 @@ "worn_armour": null }, "level": 3, - "max_hp": 19, + "max_hp": 13, "memorized_spells": [], "name": "Brakk", "race": "human", "scores": { - "cha": 8, - "con": 11, - "dex": 7, - "int": 11, - "str": 14, - "wis": 11 + "cha": 12, + "con": 10, + "dex": 9, + "int": 12, + "str": 13, + "wis": 18 }, "spell_book": [], "stat_modifiers": [], @@ -5429,7 +8008,7 @@ "carrying_treasure": false, "class_id": "elf", "conditions": [], - "current_hp": 16, + "current_hp": 18, "extra_languages": [], "id": null, "inventory": { @@ -5437,7 +8016,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 100, + "gp": 160, "pp": 0, "sp": 0 }, @@ -5448,7 +8027,7 @@ "worn_armour": null }, "level": 3, - "max_hp": 16, + "max_hp": 18, "memorized_spells": [ { "reversed": false, @@ -5458,12 +8037,12 @@ "name": "Faelwen", "race": "elf", "scores": { - "cha": 12, - "con": 17, - "dex": 10, + "cha": 8, + "con": 16, + "dex": 13, "int": 10, - "str": 11, - "wis": 10 + "str": 5, + "wis": 8 }, "spell_book": [ "sleep" @@ -5476,7 +8055,7 @@ "carrying_treasure": false, "class_id": "thief", "conditions": [], - "current_hp": 7, + "current_hp": 14, "extra_languages": [], "id": null, "inventory": { @@ -5484,7 +8063,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 90, + "gp": 150, "pp": 0, "sp": 0 }, @@ -5495,17 +8074,17 @@ "worn_armour": null }, "level": 3, - "max_hp": 7, + "max_hp": 14, "memorized_spells": [], "name": "Sable", "race": "human", "scores": { - "cha": 13, - "con": 7, - "dex": 10, - "int": 5, - "str": 4, - "wis": 9 + "cha": 5, + "con": 15, + "dex": 11, + "int": 12, + "str": 11, + "wis": 7 }, "spell_book": [], "stat_modifiers": [], @@ -5516,7 +8095,7 @@ "carrying_treasure": false, "class_id": "cleric", "conditions": [], - "current_hp": 9, + "current_hp": 8, "extra_languages": [], "id": null, "inventory": { @@ -5524,7 +8103,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 100, + "gp": 90, "pp": 0, "sp": 0 }, @@ -5535,7 +8114,7 @@ "worn_armour": null }, "level": 3, - "max_hp": 9, + "max_hp": 8, "memorized_spells": [ { "reversed": false, @@ -5549,12 +8128,12 @@ "name": "Wynn", "race": "human", "scores": { - "cha": 12, - "con": 11, - "dex": 13, - "int": 12, - "str": 9, - "wis": 12 + "cha": 10, + "con": 10, + "dex": 11, + "int": 8, + "str": 10, + "wis": 10 }, "spell_book": [], "stat_modifiers": [], @@ -5565,7 +8144,7 @@ "carrying_treasure": false, "class_id": "magic_user", "conditions": [], - "current_hp": 9, + "current_hp": 14, "extra_languages": [], "id": null, "inventory": { @@ -5573,7 +8152,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 140, + "gp": 70, "pp": 0, "sp": 0 }, @@ -5584,7 +8163,7 @@ "worn_armour": null }, "level": 5, - "max_hp": 9, + "max_hp": 14, "memorized_spells": [ { "reversed": false, @@ -5610,12 +8189,12 @@ "name": "Elara", "race": "human", "scores": { - "cha": 8, - "con": 8, - "dex": 10, - "int": 9, - "str": 12, - "wis": 8 + "cha": 11, + "con": 12, + "dex": 9, + "int": 11, + "str": 8, + "wis": 17 }, "spell_book": [ "magic_missile", @@ -5649,7 +8228,6 @@ "character-0001 fumbles with the tinder box — no flame.", "character-0001 fumbles with the tinder box — no flame.", "character-0001 fumbles with the tinder box — no flame.", - "character-0001 fumbles with the tinder box — no flame.", "Effect effect-0001 (light) attached to character-0001.", "character-0001 lights a torch.", "The party moves to (1, 0), facing east.", @@ -5657,75 +8235,179 @@ "The party enters area pit_hall (level 1).", "Detection roll (trap_spring): 1 vs 2-in-6 — success.", "A trap springs (halls:1:pit_hall) on character-0001!", - "character-0001 takes 2 damage.", - "character-0001 is at 17/19 hit points.", + "character-0001 takes 3 damage.", + "character-0001 is at 10/13 hit points.", "The party moves to (1, 0), facing north.", "The party moves to (2, 0), facing east.", "The party moves to (3, 0), facing east.", - "Detection roll (listening, character-0003): 1 vs 3-in-6 — success.", + "Detection roll (listening, character-0003): 2 vs 3-in-6 — success.", "character-0003 hears something beyond the south door.", + "The door south of (3, 0) won't budge — character-0001 strains in vain.", + "The door south of (3, 0) won't budge — character-0001 strains in vain.", "character-0001 forces the door south of (3, 0) open.", "An iron spike wedges the door south of (3, 0).", "The party moves to (3, 1), facing south.", "The party enters area guard_room (level 1).", - "Treasure generated at cache-0001 (C): 2000 gp in coin, 2 valuable(s), 0 magic item(s).", + "Treasure generated at cache-0001 (C): 170 gp in coin, 4 valuable(s), 0 magic item(s).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", "Surprise (party): no roll, surprised on 1-2 — not surprised.", - "Encounter: 6 × Goblin at 70'.", - "Reaction roll: 5+0 = 5 — hostile.", + "Encounter: 6 × Goblin at 10'.", + "Reaction roll: 4+0 = 4 — hostile.", "The monsters' bearing: hostile.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 1, monsters 2. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", - "group-0001 is now 50' away.", - "group-0001 is now 30' away.", - "Battle round 2 begins.", "Initiative (side): party 4, monsters 5. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", - "group-0001 is now 10' away.", "group-0001 is now 5' away.", - "Battle round 3 begins.", + "group-0001 is now 5' away.", + "Battle round 2 begins.", "character-0005 begins casting magic_missile.", - "Initiative (side): party 4, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", + "Initiative (side): party 1, monsters 3. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", + "monster-0001 misses character-0003 with weapon: rolled 1+0 = 1, needing 12.", + "monster-0002 misses character-0003 with weapon: rolled 4+0 = 4, needing 12.", + "monster-0003 misses character-0001 with weapon: rolled 2+0 = 2, needing 14.", + "monster-0004 misses character-0001 with weapon: rolled 2+0 = 2, needing 14.", + "monster-0005 misses character-0002 with weapon: rolled 7+0 = 7, needing 15.", + "monster-0006 misses character-0002 with weapon: rolled 14+0 = 14, needing 15.", "character-0005 casts magic_missile [missiles] at monster-0001.", - "monster-0001 takes 6 damage from character-0005.", - "monster-0001 is at 1/7 hit points.", - "character-0001 hits monster-0001 with Sword: rolled 12+1 = 13, needing 13.", - "monster-0001 takes 4 damage from character-0001.", + "monster-0001 takes 3 damage from character-0005.", + "monster-0001 is at 4/7 hit points.", + "character-0001 misses monster-0001 with Sword: rolled 3+1 = 4, needing 13.", + "character-0002 misses monster-0001 with Sword: rolled 4-2 = 2, needing 13.", + "character-0003 hits monster-0001 with Sword: rolled 14+0 = 14, needing 13.", + "monster-0001 takes 6 damage from character-0003.", "monster-0001 is at 0/7 hit points.", "monster-0001 is dead.", "monster-0001 is killed.", "monster-0001 is at 0/7 hit points.", - "character-0002 misses monster-0002 with Sword: rolled 8+0 = 8, needing 13.", - "character-0003 hits monster-0002 with Sword: rolled 17-2 = 15, needing 13.", - "monster-0002 takes 5 damage from character-0003.", + "Battle round 3 begins.", + "character-0005 begins casting magic_missile.", + "Initiative (side): party 5, monsters 3. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", + "character-0005 casts magic_missile [missiles] at monster-0002.", + "monster-0002 takes 5 damage from character-0005.", "monster-0002 is at 0/1 hit points.", "monster-0002 is dead.", "monster-0002 is killed.", "monster-0002 is at 0/1 hit points.", + "character-0001 misses monster-0003 with Sword: rolled 10+1 = 11, needing 13.", + "character-0002 misses monster-0003 with Sword: rolled 10-2 = 8, needing 13.", + "character-0003 misses monster-0003 with Sword: rolled 2+0 = 2, needing 13.", + "Morale check for group-0001 (ML 7): rolled 6+0 — they fight on.", + "monster-0003 hits character-0002 with weapon: rolled 16+0 = 16, needing 15.", + "character-0002 takes 2 damage from monster-0003.", + "character-0002 is at 16/18 hit points.", + "monster-0004 hits character-0003 with weapon: rolled 19+0 = 19, needing 12.", + "character-0003 takes 1 damage from monster-0004.", + "character-0003 is at 13/14 hit points.", + "monster-0005 misses character-0001 with weapon: rolled 8+0 = 8, needing 14.", + "monster-0006 misses character-0001 with weapon: rolled 9+0 = 9, needing 14.", + "Battle round 4 begins.", + "Initiative (side): party 1, monsters 4. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", + "monster-0003 misses character-0003 with weapon: rolled 4+0 = 4, needing 12.", + "monster-0004 misses character-0002 with weapon: rolled 14+0 = 14, needing 15.", + "monster-0005 misses character-0002 with weapon: rolled 6+0 = 6, needing 15.", + "monster-0006 misses character-0001 with weapon: rolled 13+0 = 13, needing 14.", + "character-0001 hits monster-0003 with Sword: rolled 12+1 = 13, needing 13.", + "monster-0003 takes 5 damage from character-0001.", + "monster-0003 is at 0/5 hit points.", + "monster-0003 is dead.", + "monster-0003 is killed.", + "monster-0003 is at 0/5 hit points.", + "character-0002 misses monster-0004 with Sword: rolled 12-2 = 10, needing 13.", + "character-0003 misses monster-0004 with Sword: rolled 10+0 = 10, needing 13.", + "Battle round 5 begins.", + "Initiative (side): party 2, monsters 4. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", "Morale check for group-0001 (ML 7): rolled 8+0 — they flee or surrender.", "group-0001 flees the battle!", "group-0001 is now 65' away.", - "Battle round 4 begins.", - "Initiative (side): party 5, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", - "group-0001 is now 45' away.", - "group-0001 is now 105' away.", - "Battle round 5 begins.", - "Initiative (side): party 5, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", - "group-0001 is now 85' away.", - "group-0001 is now 145' away.", + "character-0001 misses monster-0004 with Sword: rolled 6+3 = 9, needing 13.", + "character-0002 misses monster-0004 with Sword: rolled 9+0 = 9, needing 13.", + "character-0003 misses monster-0004 with Sword: rolled 2+2 = 4, needing 13.", + "Battle round 6 begins.", + "Initiative (side): party 1, monsters 6. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", + "group-0001 is now 125' away.", "The battle is won.", "monster-0001 (goblin) is slain.", "monster-0002 (goblin) is slain.", - "monster-0003 (goblin) is routed.", + "monster-0003 (goblin) is slain.", "monster-0004 (goblin) is routed.", "monster-0005 (goblin) is routed.", "monster-0006 (goblin) is routed.", "The encounter ends (victory).", "The party moves to (4, 1), facing east.", "character-0001 acquires 400 gp in coin.", - "Detection roll (secret_doors, character-0002): 2 vs 2-in-6 — success.", - "character-0002 searches (secret_doors) and finds: secret_door:east.", - "Wandering check: 6 vs 3-in-6 — nothing comes.", + "Detection roll (secret_doors, character-0002): 5 vs 2-in-6 — failure.", + "character-0002 searches (secret_doors) and finds nothing.", + "Wandering check: 3 vs 3-in-6 — an encounter!", + "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 1, surprised on 1-2 — surprised.", + "Encounter: 4 × Snake, Cobra at 10' — the party is surprised.", + "Reaction roll: 5+0 = 5 — hostile.", + "The monsters' bearing: hostile.", + "Battle is joined!", + "group-0002 is now 5' away.", + "Battle round 2 begins.", + "Initiative (side): party 4, monsters 5. Order: group-0002, character-0001, character-0002, character-0003, character-0004, character-0005.", + "monster-0007 misses character-0001 with spit: rolled 10+0 = 10, needing 14.", + "monster-0008 misses character-0001 with spit: rolled 11+0 = 11, needing 14.", + "monster-0009 misses character-0003 with spit: rolled 10+0 = 10, needing 12.", + "monster-0010 misses character-0001 with spit: rolled 7+0 = 7, needing 14.", + "character-0001 misses monster-0007 with Sword: rolled 1+1 = 2, needing 12.", + "character-0002 misses monster-0007 with Sword: rolled 2-2 = 0, needing 12.", + "character-0003 hits monster-0007 with Sword: rolled 15+0 = 15, needing 12.", + "monster-0007 takes 7 damage from character-0003.", + "monster-0007 is at 0/7 hit points.", + "monster-0007 is dead.", + "monster-0007 is killed.", + "monster-0007 is at 0/7 hit points.", + "Battle round 3 begins.", + "Initiative (side): party 4, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0002.", + "character-0001 misses monster-0008 with Sword: rolled 8+1 = 9, needing 12.", + "character-0002 hits monster-0008 with Sword: rolled 17-2 = 15, needing 12.", + "monster-0008 takes 2 damage from character-0002.", + "monster-0008 is at 3/5 hit points.", + "character-0003 misses monster-0008 with Sword: rolled 11+0 = 11, needing 12.", + "Morale check for group-0002 (ML 7): rolled 5+0 — they fight on.", + "monster-0008 hits character-0001 with spit: rolled 14+0 = 14, needing 14.", + "monster-0009 hits character-0001 with spit: rolled 15+0 = 15, needing 14.", + "monster-0010 hits character-0002 with spit: rolled 17+0 = 17, needing 15.", + "Battle round 4 begins.", + "Initiative (side): party 5, monsters 4. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0002.", + "character-0001 misses monster-0008 with Sword: rolled 2+1 = 3, needing 12.", + "character-0002 misses monster-0008 with Sword: rolled 13-2 = 11, needing 12.", + "character-0003 hits monster-0008 with Sword: rolled 14+0 = 14, needing 12.", + "monster-0008 takes 8 damage from character-0003.", + "monster-0008 is at 0/5 hit points.", + "monster-0008 is dead.", + "monster-0008 is killed.", + "monster-0008 is at 0/5 hit points.", + "Morale check for group-0002 (ML 7): rolled 8+0 — they flee or surrender.", + "group-0002 flees the battle!", + "group-0002 is now 95' away.", + "Battle round 5 begins.", + "character-0005 begins casting fire_ball.", + "Initiative (side): party 6, monsters 4. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0002.", + "group-0002 is now 75' away.", + "character-0005 casts fire_ball [damage] at monster-0009, monster-0010.", + "monster-0009 fails a save versus spells: rolled 3+0, needing 16.", + "monster-0009 takes 24 damage from character-0005.", + "monster-0009 is at 0/2 hit points.", + "monster-0009 is dead.", + "monster-0009 is killed.", + "monster-0009 is at 0/2 hit points.", + "monster-0010 passes a save versus spells: rolled 18+0, needing 16.", + "monster-0010 takes 7 damage from character-0005.", + "monster-0010 is at 0/4 hit points.", + "monster-0010 is dead.", + "monster-0010 is killed.", + "monster-0010 is at 0/4 hit points.", + "The battle is won.", + "monster-0007 (spitting_cobra) is slain.", + "monster-0008 (spitting_cobra) is slain.", + "monster-0009 (spitting_cobra) is slain.", + "monster-0010 (spitting_cobra) is slain.", + "The encounter ends (victory).", + "Detection roll (secret_doors, character-0005): 1 vs 1-in-6 — success.", + "character-0005 searches (secret_doors) and finds: secret_door:east.", "The door east of (4, 1) opens.", "An iron spike wedges the door east of (4, 1).", "The party moves to (5, 1), facing east.", @@ -5737,40 +8419,58 @@ "The party enters area crypt (level 2).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", "Surprise (party): rolled 2, surprised on 1-2 — surprised.", - "Encounter: 4 × Skeleton at 90' — the party is surprised.", + "Encounter: 4 × Skeleton at 10' — the party is surprised.", "The monsters' bearing: hostile.", "Battle is joined!", - "group-0002 is now 70' away.", + "group-0003 is now 5' away.", "Battle round 2 begins.", - "Initiative (side): party 6, monsters 5. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0002.", - "group-0002 is now 50' away.", - "character-0004 presents the holy symbol (rolled 7, 7 HD affected) — the undead are turned.", - "Effect effect-0002 (turned) attached to monster-0007.", - "monster-0007 is turned.", - "Effect effect-0003 (turned) attached to monster-0008.", - "monster-0008 is turned.", - "Effect effect-0004 (turned) attached to monster-0009.", - "monster-0009 is turned.", - "Effect effect-0005 (turned) attached to monster-0010.", - "monster-0010 is turned.", - "group-0002 is now 110' away.", + "Initiative (side): party 3, monsters 4. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", + "monster-0011 misses character-0001 with weapon: rolled 9+0 = 9, needing 14.", + "monster-0012 misses character-0001 with weapon: rolled 10+0 = 10, needing 14.", + "monster-0013 hits character-0001 with weapon: rolled 14+0 = 14, needing 14.", + "character-0001 takes 3 damage from monster-0013.", + "character-0001 is at 7/13 hit points.", + "monster-0014 misses character-0005 with weapon: rolled 7+0 = 7, needing 10.", + "character-0004 presents the holy symbol (rolled 11, 11 HD affected) — the undead are turned.", + "Effect effect-0002 (turned) attached to monster-0011.", + "monster-0011 is turned.", + "Effect effect-0003 (turned) attached to monster-0012.", + "monster-0012 is turned.", + "Effect effect-0004 (turned) attached to monster-0013.", + "monster-0013 is turned.", + "Effect effect-0005 (turned) attached to monster-0014.", + "monster-0014 is turned.", + "character-0005 misses monster-0011 with Dagger: rolled 11-1 = 10, needing 12.", + "character-0001 misses monster-0011 with Sword: rolled 7+1 = 8, needing 12.", + "character-0002 misses monster-0011 with Sword: rolled 8-2 = 6, needing 12.", "Battle round 3 begins.", - "Initiative (side): party 4, monsters 3. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0002.", - "group-0002 is now 90' away.", - "group-0002 is now 150' away.", + "Initiative (side): party 4, monsters 3. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0003.", + "character-0005 misses monster-0011 with Dagger: rolled 4-1 = 3, needing 12.", + "character-0001 hits monster-0011 with Sword: rolled 14+1 = 15, needing 12.", + "monster-0011 takes 8 damage from character-0001.", + "monster-0011 is at 0/8 hit points.", + "monster-0011 is dead.", + "monster-0011 is killed.", + "monster-0011 is at 0/8 hit points.", + "character-0002 misses monster-0012 with Sword: rolled 1-2 = -1, needing 12.", + "Morale check for group-0003 (ML 12): no roll — they never check morale.", + "group-0003 is now 65' away.", + "Battle round 4 begins.", + "Initiative (side): party 2, monsters 5. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", + "group-0003 is now 125' away.", "The battle is won.", - "monster-0007 (skeleton) is routed.", - "monster-0008 (skeleton) is routed.", - "monster-0009 (skeleton) is routed.", - "monster-0010 (skeleton) is routed.", - "Effect effect-0002 (turned) on monster-0007 is released.", - "monster-0007 is no longer turned.", - "Effect effect-0003 (turned) on monster-0008 is released.", - "monster-0008 is no longer turned.", - "Effect effect-0004 (turned) on monster-0009 is released.", - "monster-0009 is no longer turned.", - "Effect effect-0005 (turned) on monster-0010 is released.", - "monster-0010 is no longer turned.", + "monster-0011 (skeleton) is slain.", + "monster-0012 (skeleton) is routed.", + "monster-0013 (skeleton) is routed.", + "monster-0014 (skeleton) is routed.", + "Effect effect-0002 (turned) on monster-0011 is released.", + "monster-0011 is no longer turned.", + "Effect effect-0003 (turned) on monster-0012 is released.", + "monster-0012 is no longer turned.", + "Effect effect-0004 (turned) on monster-0013 is released.", + "monster-0013 is no longer turned.", + "Effect effect-0005 (turned) on monster-0014 is released.", + "monster-0014 is no longer turned.", "The encounter ends (victory).", "The party moves to (1, 0), facing north.", "The party moves to (2, 0), facing east.", @@ -5778,139 +8478,80 @@ "The party moves to (3, 0), facing east.", "The party moves to (3, 1), facing south.", "The party enters area kennel_a (level 2).", - "Treasure generated at cache-0002 (C): 0 gp in coin, 2 valuable(s), 0 magic item(s).", - "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 2, surprised on 1-2 — surprised.", - "Encounter: 3 × Goblin at 90' — the party is surprised.", - "The monsters' bearing: hostile.", - "Battle is joined!", - "group-0003 is now 70' away.", - "Battle round 2 begins.", - "Initiative (side): party 5, monsters 2. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0003.", - "group-0003 is now 50' away.", - "group-0003 is now 30' away.", - "Battle round 3 begins.", - "Initiative (side): party 4, monsters 6. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", - "group-0003 is now 10' away.", - "group-0003 is now 5' away.", - "Battle round 4 begins.", - "character-0005 begins casting magic_missile.", - "Initiative (side): party 4, monsters 5. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", - "monster-0011 hits character-0005 with weapon: rolled 11+0 = 11, needing 10.", - "character-0005 takes 1 damage from monster-0011.", - "character-0005 is at 8/9 hit points.", - "monster-0012 misses character-0001 with weapon: rolled 10+0 = 10, needing 13.", - "monster-0013 misses character-0002 with weapon: rolled 7+0 = 7, needing 14.", - "character-0005's casting of magic_missile is disrupted — the spell is lost.", - "character-0001 misses monster-0011 with Sword: rolled 1+1 = 2, needing 13.", - "character-0002 hits monster-0011 with Sword: rolled 15+0 = 15, needing 13.", - "monster-0011 takes 5 damage from character-0002.", - "monster-0011 is at 0/5 hit points.", - "monster-0011 is dead.", - "monster-0011 is killed.", - "monster-0011 is at 0/5 hit points.", - "Battle round 5 begins.", - "Initiative (side): party 2, monsters 6. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", - "Morale check for group-0003 (ML 7): rolled 8+0 — they flee or surrender.", - "group-0003 flees the battle!", - "group-0003 is now 65' away.", - "character-0005 misses monster-0012 with Dagger: rolled 8+2 = 10, needing 13.", - "character-0001 hits monster-0012 with Sword: rolled 16+3 = 19, needing 13.", - "monster-0012 takes 8 damage from character-0001.", - "monster-0012 is at 0/1 hit points.", - "monster-0012 is dead.", - "monster-0012 is killed.", - "monster-0012 is at 0/1 hit points.", - "character-0002 hits monster-0013 with Sword: rolled 20+2 = 22, needing 13.", - "monster-0013 takes 1 damage from character-0002.", - "monster-0013 is at 0/1 hit points.", - "monster-0013 is dead.", - "monster-0013 is killed.", - "monster-0013 is at 0/1 hit points.", - "The battle is won.", - "monster-0011 (goblin) is slain.", - "monster-0012 (goblin) is slain.", - "monster-0013 (goblin) is slain.", - "The encounter ends (victory).", - "The party moves to (3, 0), facing north.", - "The party moves to (4, 0), facing east.", - "The party moves to (5, 0), facing east.", - "The party moves to (5, 1), facing south.", - "The party enters area kennel_b (level 2).", - "Treasure generated at cache-0003 (C): 2010 gp in coin, 3 valuable(s), 0 magic item(s).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 6, surprised on 1-2 — not surprised.", - "Encounter: 3 × Goblin at 50'.", + "Surprise (party): rolled 4, surprised on 1-2 — not surprised.", + "Encounter: 3 × Goblin at 10'.", "The monsters' bearing: hostile.", "The monsters give chase!", - "Pursuit round 1: the gap is 50'.", + "Pursuit round 1: the gap is 10'.", "character-0001 drops 10 gp in coin.", - "Pursuit round 2: the gap is 50'.", + "Pursuit round 2: the gap is 10'.", "character-0001 drops 10 gp in coin.", "Pursuit round 3: the monsters stop for the dropped bait.", "The encounter ends (escaped).", - "The party moves to (5, 0), facing north.", - "The party moves to (6, 0), facing east.", - "The party moves to (6, 1), facing south.", - "The party enters area kennel_c (level 2).", - "Treasure generated at cache-0004 (C): 100 gp in coin, 0 valuable(s), 0 magic item(s).", + "Effect effect-0001 (light) on character-0001 expires.", + "The torch carried by character-0001 gutters out.", + "character-0001 fumbles with the tinder box — no flame.", + "Effect effect-0006 (light) attached to character-0001.", + "character-0001 lights a torch.", + "The party moves to (3, 0), facing north.", + "The party moves to (4, 0), facing east.", + "The party moves to (5, 0), facing east.", + "The party moves to (5, 1), facing south.", + "The party enters area kennel_b (level 2).", + "Treasure generated at cache-0002 (C): 0 gp in coin, 3 valuable(s), 0 magic item(s).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 3, surprised on 1-2 — not surprised.", - "Encounter: 3 × Goblin at 70'.", + "Surprise (party): rolled 5, surprised on 1-2 — not surprised.", + "Encounter: 3 × Goblin at 10'.", "The monsters' bearing: hostile.", "The monsters give chase!", - "Pursuit round 1: the gap is 70'.", - "Pursuit round 2: the gap is 70'.", - "Pursuit round 3: the gap is 70'.", - "Pursuit round 4: the gap is 70'.", - "Pursuit round 5: the gap is 70'.", - "Pursuit round 6: the gap is 70'.", - "Pursuit round 7: the gap is 70'.", - "Effect effect-0001 (light) on character-0001 expires.", - "The torch carried by character-0001 gutters out.", - "Pursuit round 8: the gap is 70'.", - "Pursuit round 9: the gap is 70'.", - "Pursuit round 10: the gap is 70'.", - "Pursuit round 11: the gap is 70'.", - "Pursuit round 12: the gap is 70'.", - "Pursuit round 13: the gap is 70'.", - "Pursuit round 14: the gap is 70'.", - "Pursuit round 15: the gap is 70'.", - "Pursuit round 16: the gap is 70'.", - "Pursuit round 17: the gap is 70'.", - "Pursuit round 18: the gap is 70'.", - "Pursuit round 19: the gap is 70'.", - "Pursuit round 20: the gap is 70'.", - "Pursuit round 21: the gap is 70'.", - "Pursuit round 22: the gap is 70'.", - "Pursuit round 23: the gap is 70'.", - "Pursuit round 24: the gap is 70'.", - "Pursuit round 25: the gap is 70'.", - "Pursuit round 26: the gap is 70'.", - "Pursuit round 27: the gap is 70'.", - "Pursuit round 28: the gap is 70'.", - "Pursuit round 29: the gap is 70'.", - "Effect effect-0006 (exhausted) attached to character-0005.", + "Pursuit round 1: the gap is 10'.", + "Pursuit round 2: the gap is 10'.", + "Pursuit round 3: the gap is 10'.", + "Pursuit round 4: the gap is 10'.", + "Pursuit round 5: the gap is 10'.", + "Pursuit round 6: the gap is 10'.", + "Pursuit round 7: the gap is 10'.", + "Pursuit round 8: the gap is 10'.", + "Pursuit round 9: the gap is 10'.", + "Pursuit round 10: the gap is 10'.", + "Pursuit round 11: the gap is 10'.", + "Pursuit round 12: the gap is 10'.", + "Pursuit round 13: the gap is 10'.", + "Pursuit round 14: the gap is 10'.", + "Pursuit round 15: the gap is 10'.", + "Pursuit round 16: the gap is 10'.", + "Pursuit round 17: the gap is 10'.", + "Pursuit round 18: the gap is 10'.", + "Pursuit round 19: the gap is 10'.", + "Pursuit round 20: the gap is 10'.", + "Pursuit round 21: the gap is 10'.", + "Pursuit round 22: the gap is 10'.", + "Pursuit round 23: the gap is 10'.", + "Pursuit round 24: the gap is 10'.", + "Pursuit round 25: the gap is 10'.", + "Pursuit round 26: the gap is 10'.", + "Pursuit round 27: the gap is 10'.", + "Pursuit round 28: the gap is 10'.", + "Pursuit round 29: the gap is 10'.", + "Effect effect-0007 (exhausted) attached to character-0005.", "character-0005 is exhausted.", - "Effect effect-0007 (exhausted) attached to character-0001.", + "Effect effect-0008 (exhausted) attached to character-0001.", "character-0001 is exhausted.", - "Effect effect-0008 (exhausted) attached to character-0002.", + "Effect effect-0009 (exhausted) attached to character-0002.", "character-0002 is exhausted.", - "Effect effect-0009 (exhausted) attached to character-0003.", + "Effect effect-0010 (exhausted) attached to character-0003.", "character-0003 is exhausted.", - "Effect effect-0010 (exhausted) attached to character-0004.", + "Effect effect-0011 (exhausted) attached to character-0004.", "character-0004 is exhausted.", "The party is exhausted from running: -2 to attacks, damage, and AC.", "Pursuit round 30: the party escapes.", "The encounter ends (escaped).", - "character-0001 fumbles with the tinder box — no flame.", - "Effect effect-0011 (light) attached to character-0001.", - "character-0001 lights a torch.", - "The party moves to (6, 0), facing north.", + "The party moves to (5, 0), facing north.", "Wandering check: skipped vs 0-in-6 — nothing comes.", "Wandering check: skipped vs 0-in-6 — nothing comes.", "Wandering check: skipped vs 0-in-6 — nothing comes.", - "Effect effect-0011 (light) on character-0001 expires.", + "Effect effect-0006 (light) on character-0001 expires.", "The torch carried by character-0001 gutters out.", "Wandering check: skipped vs 0-in-6 — nothing comes.", "Wandering check: skipped vs 0-in-6 — nothing comes.", @@ -5933,34 +8574,33 @@ "Wandering check: skipped vs 0-in-6 — nothing comes.", "Wandering check: skipped vs 0-in-6 — nothing comes.", "Wandering check: skipped vs 0-in-6 — nothing comes.", - "Effect effect-0006 (exhausted) on character-0005 is released.", + "Effect effect-0007 (exhausted) on character-0005 is released.", "character-0005 is no longer exhausted.", - "Effect effect-0007 (exhausted) on character-0001 is released.", + "Effect effect-0008 (exhausted) on character-0001 is released.", "character-0001 is no longer exhausted.", - "Effect effect-0008 (exhausted) on character-0002 is released.", + "Effect effect-0009 (exhausted) on character-0002 is released.", "character-0002 is no longer exhausted.", - "Effect effect-0009 (exhausted) on character-0003 is released.", + "Effect effect-0010 (exhausted) on character-0003 is released.", "character-0003 is no longer exhausted.", - "Effect effect-0010 (exhausted) on character-0004 is released.", + "Effect effect-0011 (exhausted) on character-0004 is released.", "character-0004 is no longer exhausted.", "The party catches its breath — exhaustion fades.", "The party rests (night).", "character-0005 memorizes: magic_missile, magic_missile, web, web, fire_ball.", "Wandering check: skipped vs 0-in-6 — nothing comes.", "Wandering check: skipped vs 0-in-6 — nothing comes.", + "Wandering check: skipped vs 0-in-6 — nothing comes.", "Effect effect-0012 (fatigue) attached to character-0005.", "Effect effect-0013 (fatigue) attached to character-0001.", "Effect effect-0014 (fatigue) attached to character-0002.", "Effect effect-0015 (fatigue) attached to character-0003.", "Effect effect-0016 (fatigue) attached to character-0004.", "The party is fatigued: -1 to attack and damage until they rest.", - "Wandering check: skipped vs 0-in-6 — nothing comes.", "character-0001 fumbles with the tinder box — no flame.", "character-0001 fumbles with the tinder box — no flame.", "character-0001 fumbles with the tinder box — no flame.", "Effect effect-0017 (light) attached to character-0001.", "character-0001 lights a torch.", - "The party moves to (5, 0), facing west.", "The party moves to (4, 0), facing west.", "The party moves to (3, 0), facing west.", "The party moves to (2, 0), facing west.", @@ -5975,6 +8615,7 @@ "The party moves to (2, 0), facing west.", "The party moves to (1, 0), facing west.", "The party moves to (0, 0), facing west.", + "Wandering check: 5 vs 1-in-6 — nothing comes.", "Effect effect-0012 (fatigue) on character-0005 is released.", "Effect effect-0013 (fatigue) on character-0001 is released.", "Effect effect-0014 (fatigue) on character-0002 is released.", @@ -5982,83 +8623,212 @@ "Effect effect-0016 (fatigue) on character-0004 is released.", "The party recovers from fatigue.", "The party rests (turn).", + "The party rests (turn).", + "Wandering check: 3 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "The party rests (turn).", + "Wandering check: 3 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "The party rests (turn).", + "Effect effect-0017 (light) on character-0001 expires.", + "The torch carried by character-0001 gutters out.", + "Wandering check: 4 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "Effect effect-0018 (light) attached to character-0001.", + "character-0001 lights a torch.", + "The party rests (turn).", "Wandering check: 5 vs 1-in-6 — nothing comes.", "The party rests (turn).", "The party rests (turn).", + "Wandering check: 2 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "The party rests (turn).", + "Effect effect-0018 (light) on character-0001 expires.", + "The torch carried by character-0001 gutters out.", + "Wandering check: 6 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "Effect effect-0019 (light) attached to character-0001.", + "character-0001 lights a torch.", + "The party rests (turn).", "Wandering check: 3 vs 1-in-6 — nothing comes.", "The party rests (turn).", "The party rests (turn).", + "Wandering check: 4 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "The party rests (turn).", + "Effect effect-0019 (light) on character-0001 expires.", + "The torch carried by character-0001 gutters out.", "Wandering check: 1 vs 1-in-6 — an encounter!", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 3, surprised on 1-2 — not surprised.", - "Encounter: 7 × Wolf at 60'.", - "Reaction roll: 4+0 = 4 — hostile.", - "The monsters' bearing: hostile.", + "Surprise (party): rolled 4, surprised on 1-3 — not surprised.", + "Encounter: 7 × Beetle, Fire at 30'.", + "Reaction roll: 7+0 = 7 — uncertain.", + "The monsters' bearing: uncertain.", "The party's turn rest is interrupted!", "Battle is joined!", "Battle round 1 begins.", "character-0005 begins casting fire_ball.", - "Initiative (side): party 4, monsters 3. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0006.", - "character-0005 casts fire_ball [damage] at monster-0020, monster-0021, monster-0022, monster-0023, monster-0024, monster-0025, monster-0026.", - "monster-0020 fails a save versus spells: rolled 15+0, needing 16.", - "monster-0020 takes 13 damage from character-0005.", - "monster-0020 is at 0/13 hit points.", - "monster-0020 is dead.", - "monster-0020 is killed.", - "monster-0020 is at 0/13 hit points.", - "monster-0021 fails a save versus spells: rolled 1+0, needing 16.", - "monster-0021 takes 20 damage from character-0005.", - "monster-0021 is at 0/6 hit points.", + "Initiative (side): party 6, monsters 1. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0006.", + "character-0005 casts fire_ball [damage] at monster-0021, monster-0022, monster-0023, monster-0024, monster-0025, monster-0026, monster-0027.", + "monster-0021 passes a save versus spells: rolled 18+0, needing 16.", + "monster-0021 takes 8 damage from character-0005.", + "monster-0021 is at 0/4 hit points.", "monster-0021 is dead.", "monster-0021 is killed.", - "monster-0021 is at 0/6 hit points.", - "monster-0022 fails a save versus spells: rolled 3+0, needing 16.", - "monster-0022 takes 10 damage from character-0005.", - "monster-0022 is at 0/5 hit points.", + "monster-0021 is at 0/4 hit points.", + "monster-0022 passes a save versus spells: rolled 16+0, needing 16.", + "monster-0022 takes 5 damage from character-0005.", + "monster-0022 is at 0/3 hit points.", "monster-0022 is dead.", "monster-0022 is killed.", - "monster-0022 is at 0/5 hit points.", - "monster-0023 fails a save versus spells: rolled 13+0, needing 16.", - "monster-0023 takes 18 damage from character-0005.", - "monster-0023 is at 0/9 hit points.", + "monster-0022 is at 0/3 hit points.", + "monster-0023 fails a save versus spells: rolled 14+0, needing 16.", + "monster-0023 takes 20 damage from character-0005.", + "monster-0023 is at 0/6 hit points.", "monster-0023 is dead.", "monster-0023 is killed.", - "monster-0023 is at 0/9 hit points.", - "monster-0024 fails a save versus spells: rolled 9+0, needing 16.", - "monster-0024 takes 21 damage from character-0005.", - "monster-0024 is at 0/7 hit points.", + "monster-0023 is at 0/6 hit points.", + "monster-0024 fails a save versus spells: rolled 12+0, needing 16.", + "monster-0024 takes 17 damage from character-0005.", + "monster-0024 is at 0/3 hit points.", "monster-0024 is dead.", "monster-0024 is killed.", - "monster-0024 is at 0/7 hit points.", - "monster-0025 fails a save versus spells: rolled 2+0, needing 16.", - "monster-0025 takes 23 damage from character-0005.", + "monster-0024 is at 0/3 hit points.", + "monster-0025 fails a save versus spells: rolled 13+0, needing 16.", + "monster-0025 takes 17 damage from character-0005.", "monster-0025 is at 0/7 hit points.", "monster-0025 is dead.", "monster-0025 is killed.", "monster-0025 is at 0/7 hit points.", - "monster-0026 fails a save versus spells: rolled 14+0, needing 16.", - "monster-0026 takes 22 damage from character-0005.", - "monster-0026 is at 0/13 hit points.", + "monster-0026 fails a save versus spells: rolled 13+0, needing 16.", + "monster-0026 takes 13 damage from character-0005.", + "monster-0026 is at 0/9 hit points.", "monster-0026 is dead.", "monster-0026 is killed.", - "monster-0026 is at 0/13 hit points.", + "monster-0026 is at 0/9 hit points.", + "monster-0027 fails a save versus spells: rolled 8+0, needing 16.", + "monster-0027 takes 14 damage from character-0005.", + "monster-0027 is at 0/4 hit points.", + "monster-0027 is dead.", + "monster-0027 is killed.", + "monster-0027 is at 0/4 hit points.", "The battle is won.", - "monster-0020 (normal_wolf) is slain.", - "monster-0021 (normal_wolf) is slain.", - "monster-0022 (normal_wolf) is slain.", - "monster-0023 (normal_wolf) is slain.", - "monster-0024 (normal_wolf) is slain.", - "monster-0025 (normal_wolf) is slain.", - "monster-0026 (normal_wolf) is slain.", + "monster-0021 (fire_beetle) is slain.", + "monster-0022 (fire_beetle) is slain.", + "monster-0023 (fire_beetle) is slain.", + "monster-0024 (fire_beetle) is slain.", + "monster-0025 (fire_beetle) is slain.", + "monster-0026 (fire_beetle) is slain.", + "monster-0027 (fire_beetle) is slain.", "The encounter ends (victory).", - "Effect effect-0017 (light) on character-0001 expires.", + "character-0001 fumbles with the tinder box — no flame.", + "Effect effect-0020 (light) attached to character-0001.", + "character-0001 lights a torch.", + "The party rests (turn).", + "Wandering check: 3 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "The party rests (turn).", + "Wandering check: 6 vs 1-in-6 — nothing comes.", + "The party rests (turn).", + "The party rests (turn).", + "Wandering check: 1 vs 1-in-6 — an encounter!", + "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 5, surprised on 1-2 — not surprised.", + "Encounter: 8 × Killer Bee at 30'.", + "Reaction roll: 7+0 = 7 — uncertain.", + "The monsters' bearing: uncertain.", + "The party's turn rest is interrupted!", + "Battle is joined!", + "Battle round 1 begins.", + "Initiative (side): party 6, monsters 4. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0007.", + "group-0007 is now 10' away.", + "group-0007 is now 5' away.", + "Effect effect-0020 (light) on character-0001 expires.", "The torch carried by character-0001 gutters out.", + "Battle round 2 begins.", + "character-0005 begins casting magic_missile.", + "Initiative (side): party 1, monsters 2. Order: group-0007, character-0005, character-0001, character-0002, character-0003, character-0004.", + "monster-0028 hits character-0005 with sting: rolled 12+0 = 12, needing 10.", + "character-0005 takes 1 damage from monster-0028.", + "character-0005 is at 13/14 hit points.", + "monster-0029 hits character-0001 with sting: rolled 15+0 = 15, needing 14.", + "character-0001 takes 3 damage from monster-0029.", + "character-0001 is at 4/13 hit points.", + "monster-0030 misses character-0001 with sting: rolled 3+0 = 3, needing 14.", + "monster-0031 misses character-0001 with sting: rolled 8+0 = 8, needing 14.", + "monster-0032 misses character-0001 with sting: rolled 13+0 = 13, needing 14.", + "monster-0033 hits character-0001 with sting: rolled 18+0 = 18, needing 14.", + "character-0001 takes 1 damage from monster-0033.", + "character-0001 is at 3/13 hit points.", + "monster-0034 misses character-0005 with sting: rolled 9+0 = 9, needing 10.", + "monster-0035 misses character-0005 with sting: rolled 3+0 = 3, needing 10.", + "character-0005's casting of magic_missile is disrupted — the spell is lost.", + "character-0001 hits monster-0028 with Sword: rolled 18+1 = 19, needing 12.", + "monster-0028 takes 5 damage from character-0001.", + "monster-0028 is at 0/3 hit points.", + "monster-0028 is dead.", + "monster-0028 is killed.", + "monster-0028 is at 0/3 hit points.", + "Battle round 3 begins.", + "character-0005 begins casting magic_missile.", + "character-0004 begins casting cure_light_wounds.", + "Initiative (side): party 6, monsters 4. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0007.", + "character-0005 casts magic_missile [missiles] at monster-0029.", + "monster-0029 takes 7 damage from character-0005.", + "monster-0029 is at 0/2 hit points.", + "monster-0029 is dead.", + "monster-0029 is killed.", + "monster-0029 is at 0/2 hit points.", + "character-0004 casts cure_light_wounds [heal] at character-0001.", + "character-0001 regains 7 hit points (magical).", + "character-0001 is at 10/13 hit points.", + "character-0001 hits monster-0030 with Sword: rolled 13+1 = 14, needing 12.", + "monster-0030 takes 7 damage from character-0001.", + "monster-0030 is at 0/1 hit points.", + "monster-0030 is dead.", + "monster-0030 is killed.", + "monster-0030 is at 0/1 hit points.", + "Morale check for group-0007 (ML 9): rolled 6+0 — they fight on.", + "monster-0031 misses character-0005 with sting: rolled 5+0 = 5, needing 10.", + "monster-0032 misses character-0001 with sting: rolled 7+0 = 7, needing 14.", + "monster-0033 misses character-0001 with sting: rolled 7+0 = 7, needing 14.", + "monster-0034 hits character-0001 with sting: rolled 15+0 = 15, needing 14.", + "character-0001 takes 3 damage from monster-0034.", + "character-0001 is at 7/13 hit points.", + "monster-0035 misses character-0001 with sting: rolled 1+0 = 1, needing 14.", + "Battle round 4 begins.", + "Initiative (side): party 5, monsters 4. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0007.", + "character-0005 hits monster-0031 with Dagger: rolled 19-1 = 18, needing 12.", + "monster-0031 takes 3 damage from character-0005.", + "monster-0031 is at 0/3 hit points.", + "monster-0031 is dead.", + "monster-0031 is killed.", + "monster-0031 is at 0/3 hit points.", + "character-0001 hits monster-0032 with Sword: rolled 18+1 = 19, needing 12.", + "monster-0032 takes 5 damage from character-0001.", + "monster-0032 is at 0/1 hit points.", + "monster-0032 is dead.", + "monster-0032 is killed.", + "monster-0032 is at 0/1 hit points.", + "Morale check for group-0007 (ML 9): rolled 10+0 — they flee or surrender.", + "group-0007 flees the battle!", + "group-0007 is now 155' away.", + "The battle is won.", + "monster-0028 (killer_bee) is slain.", + "monster-0029 (killer_bee) is slain.", + "monster-0030 (killer_bee) is slain.", + "monster-0031 (killer_bee) is slain.", + "monster-0032 (killer_bee) is slain.", + "monster-0033 (killer_bee) is routed.", + "monster-0034 (killer_bee) is routed.", + "monster-0035 (killer_bee) is routed.", + "The encounter ends (victory).", "The party enters town town.", - "The adventure ends: 260 XP from monsters and 380 XP from treasure — 128 XP to each of 5 survivor(s).", - "character-0005 gains 128 XP (base 128), now level 5.", - "character-0001 gains 134 XP (base 128), now level 3.", - "character-0002 gains 128 XP (base 128), now level 3.", - "character-0003 gains 128 XP (base 128), now level 3.", - "character-0004 gains 128 XP (base 128), now level 3." + "The adventure ends: 275 XP from monsters and 380 XP from treasure — 131 XP to each of 5 survivor(s).", + "character-0005 gains 131 XP (base 131), now level 5.", + "character-0001 gains 137 XP (base 131), now level 3.", + "character-0002 gains 131 XP (base 131), now level 3.", + "character-0003 gains 131 XP (base 131), now level 3.", + "character-0004 gains 131 XP (base 131), now level 3." ] } diff --git a/tests/goldens/phase5_milestone.json b/tests/goldens/phase5_milestone.json index c36fd60..62f66a3 100644 --- a/tests/goldens/phase5_milestone.json +++ b/tests/goldens/phase5_milestone.json @@ -1,6 +1,6 @@ { "checkpoints": { - "mid_delve": 10, + "mid_delve": 11, "post_award": 43 }, "command_log": [ @@ -76,51 +76,104 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "character_id": "character-0002", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { - "action": "move", + "action": "hold", "character_id": "character-0003", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": null, "targets": [], "weapon_id": null }, { - "action": "move", + "action": "hold", "character_id": "character-0004", "item_id": null, - "move": "close", + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + } + ] + }, + { + "command_type": "resolve_battle_round", + "declarations": [ + { + "action": "attack", + "character_id": "character-0001", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0001", + "targets": [], + "weapon_id": "sword" + }, + { + "action": "attack", + "character_id": "character-0002", + "item_id": null, + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], + "weapon_id": "mace" + }, + { + "action": "hold", + "character_id": "character-0003", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], + "weapon_id": null + }, + { + "action": "hold", + "character_id": "character-0004", + "item_id": null, + "move": null, + "reversed": false, + "spell_id": null, + "spell_mode": null, + "target_group_id": null, + "targets": [], "weapon_id": null } ] @@ -386,50 +439,50 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "character_id": "character-0002", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { - "action": "move", + "action": "hold", "character_id": "character-0003", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": null, "targets": [], "weapon_id": null }, { - "action": "move", + "action": "hold", "character_id": "character-0004", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": null, "targets": [], "weapon_id": null } @@ -492,50 +545,50 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "character_id": "character-0001", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "character_id": "character-0002", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { - "action": "move", + "action": "hold", "character_id": "character-0003", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": null, "targets": [], "weapon_id": null }, { - "action": "move", + "action": "hold", "character_id": "character-0004", "item_id": null, - "move": "close", + "move": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": null, "targets": [], "weapon_id": null } @@ -545,9 +598,6 @@ "command_type": "take_treasure", "feature_id": "pile" }, - { - "command_type": "engage_battle" - }, { "command_type": "resolve_battle_round", "declarations": [ @@ -764,50 +814,50 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "attack", + "action": "move", "character_id": "character-0001", "item_id": null, - "move": null, + "move": "close", "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0003", "targets": [], - "weapon_id": "sword" + "weapon_id": null }, { - "action": "attack", + "action": "move", "character_id": "character-0002", "item_id": null, - "move": null, + "move": "close", "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0003", "targets": [], - "weapon_id": "mace" + "weapon_id": null }, { - "action": "hold", + "action": "move", "character_id": "character-0003", "item_id": null, - "move": null, + "move": "close", "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0003", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", "character_id": "character-0004", "item_id": null, - "move": null, + "move": "close", "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0003", "targets": [], "weapon_id": null } @@ -872,10 +922,7 @@ "command_type": "sell_treasure", "item_ids": [ "valuable-0001", - "valuable-0002", - "valuable-0003", - "valuable-0004", - "valuable-0005" + "valuable-0002" ] }, { @@ -928,17 +975,14 @@ "C" ], "valuable_ids": [ - "valuable-0001", - "valuable-0002", - "valuable-0003", - "valuable-0004" + "valuable-0001" ], "visibility": "referee" }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 5, + "roll": 3, "side": "monsters", "surprised": false, "threshold": 2, @@ -947,7 +991,7 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 2, + "roll": 1, "side": "party", "surprised": true, "threshold": 3, @@ -956,7 +1000,7 @@ { "code": "encounter.started", "count": 2, - "distance_feet": 50, + "distance_feet": 20, "event_type": "encounter_started", "monster_name": "Goblin", "monsters_surprised": false, @@ -982,17 +1026,11 @@ "code": "encounter.reaction.rolled", "event_type": "reaction_rolled", "modifier": 0, - "result": "hostile", - "roll": 5, - "total": 5, + "result": "uncertain", + "roll": 7, + "total": 7, "visibility": "referee" }, - { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", - "visibility": "player" - }, { "code": "battle.started", "event_type": "battle_started", @@ -1011,17 +1049,17 @@ "key": "party", "modifier": 0, "rolls": [ - 3 + 4 ], - "total": 3 + "total": 4 }, { "key": "monsters", "modifier": 0, "rolls": [ - 1 + 2 ], - "total": 1 + "total": 2 } ], "event_type": "initiative_rolled", @@ -1037,16 +1075,37 @@ }, { "code": "battle.group.moved", - "distance_feet": 30, + "distance_feet": 5, "event_type": "group_moved", "group_id": "group-0001", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 10, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "weapon", + "attacker_id": "monster-0001", + "code": "combat.attack.missed", + "defender_ac": 5, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 1, + "total": 1, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0002", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 9, + "total": 9, "visibility": "player" }, { @@ -1062,17 +1121,17 @@ "key": "party", "modifier": 0, "rolls": [ - 1 + 2 ], - "total": 1 + "total": 2 }, { "key": "monsters", "modifier": 0, "rolls": [ - 6 + 4 ], - "total": 6 + "total": 4 } ], "event_type": "initiative_rolled", @@ -1087,61 +1146,185 @@ "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "weapon", + "attacker_id": "monster-0001", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 5, + "total": 5, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "weapon", + "attacker_id": "monster-0002", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 17, + "total": 17, "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 3, + "amount": 1, + "attacker_id": "monster-0002", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "character-0003", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 1, - 2 - ], - "total": 2 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 1, - 1 + "code": "combat.state.hit_points", + "current_hp": 2, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "character-0003", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 1, + "total": 2, + "visibility": "player" + }, + { + "attack_name": "Mace", + "attacker_id": "character-0002", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 9, + "total": 9, + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 3, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 2 ], - "total": 1 + "total": 2 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 6 + ], + "total": 6 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0001", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0001" + "character-0004" + ], + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0001", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 3, + "total": 3, + "visibility": "player" + }, + { + "attack_name": "weapon", + "attacker_id": "monster-0002", + "code": "combat.attack.hit", + "defender_ac": 5, + "defender_id": "character-0003", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 14, + "roll": 17, + "total": 17, + "visibility": "player" + }, + { + "amount": 1, + "attacker_id": "monster-0002", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 ], + "target_id": "character-0003", "visibility": "player" }, + { + "code": "combat.state.hit_points", + "current_hp": 1, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "character-0003", + "visibility": "referee" + }, { "attack_name": "Sword", "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 4, + "total": 5, + "visibility": "player" + }, + { + "attack_name": "Mace", + "attacker_id": "character-0002", "code": "combat.attack.hit", "defender_ac": 6, "defender_id": "monster-0001", @@ -1149,19 +1332,19 @@ "modifier": 0, "natural": null, "required": 13, - "roll": 20, - "total": 20, + "roll": 19, + "total": 19, "visibility": "player" }, { - "amount": 4, - "attacker_id": "character-0001", + "amount": 3, + "attacker_id": "character-0002", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 4 + 3 ], "target_id": "monster-0001", "visibility": "player" @@ -1196,6 +1379,57 @@ "target_id": "monster-0001", "visibility": "referee" }, + { + "code": "battle.round.started", + "event_type": "battle_round", + "round": 4, + "visibility": "player" + }, + { + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 4 + ], + "total": 4 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 2 + ], + "total": 2 + } + ], + "event_type": "initiative_rolled", + "mode": "side", + "order": [ + "character-0001", + "character-0002", + "character-0003", + "character-0004", + "group-0001" + ], + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0002", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 2, + "total": 3, + "visibility": "player" + }, { "attack_name": "Mace", "attacker_id": "character-0002", @@ -1206,8 +1440,8 @@ "modifier": 0, "natural": null, "required": 13, - "roll": 7, - "total": 7, + "roll": 2, + "total": 2, "visibility": "player" }, { @@ -1244,7 +1478,7 @@ { "code": "battle.round.started", "event_type": "battle_round", - "round": 4, + "round": 5, "visibility": "player" }, { @@ -1254,9 +1488,9 @@ "key": "party", "modifier": 0, "rolls": [ - 4 + 5 ], - "total": 4 + "total": 5 }, { "key": "monsters", @@ -1295,7 +1529,7 @@ { "code": "battle.round.started", "event_type": "battle_round", - "round": 5, + "round": 6, "visibility": "player" }, { @@ -1305,35 +1539,40 @@ "key": "party", "modifier": 0, "rolls": [ - 4, - 2 + 3 ], - "total": 2 + "total": 3 }, { "key": "monsters", "modifier": 0, "rolls": [ - 4, - 3 + 1 ], - "total": 3 + "total": 1 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ - "group-0001", "character-0001", "character-0002", "character-0003", - "character-0004" + "character-0004", + "group-0001" ], "visibility": "player" }, { "code": "battle.group.moved", - "distance_feet": 165, + "distance_feet": 85, + "event_type": "group_moved", + "group_id": "group-0001", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 145, "event_type": "group_moved", "group_id": "group-0001", "visibility": "player" @@ -1373,10 +1612,7 @@ "coins_gp_value": 0, "event_type": "item_acquired", "item_ids": [ - "valuable-0001", - "valuable-0002", - "valuable-0003", - "valuable-0004" + "valuable-0001" ], "visibility": "player" }, @@ -1410,7 +1646,7 @@ "coins_gp_value": 50, "event_type": "item_acquired", "item_ids": [ - "valuable-0005" + "valuable-0002" ], "visibility": "player" }, @@ -1465,7 +1701,7 @@ { "cache_ref": "cache-0002", "code": "treasure.hoard.generated", - "coins_gp_value": 110, + "coins_gp_value": 210, "event_type": "hoard_generated", "magic_item_ids": [], "treasure_types": [ @@ -1477,7 +1713,7 @@ { "character_id": "character-0001", "code": "exploration.item.acquired", - "coins_gp_value": 110, + "coins_gp_value": 210, "event_type": "item_acquired", "item_ids": [], "visibility": "player" @@ -1487,20 +1723,20 @@ "code": "exploration.wandering.checked", "encounter": true, "event_type": "wandering_check", - "roll": 1, + "roll": 2, "visibility": "referee" }, { - "alignment": "lawful", + "alignment": "neutral", "class_ids": [ - "thief", - "halfling" + "dwarf", + "magic_user" ], "code": "encounter.npc_party.spawned", "event_type": "npc_party_spawned", "levels": [ - 2, - 1 + 1, + 2 ], "npc_ids": [ "npc-0001", @@ -1521,35 +1757,35 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 1, + "roll": 6, "side": "party", - "surprised": true, + "surprised": false, "threshold": 3, "visibility": "referee" }, { "code": "encounter.started", "count": 2, - "distance_feet": 90, + "distance_feet": 20, "event_type": "encounter_started", "monster_name": "Basic Adventurers", "monsters_surprised": false, - "party_surprised": true, + "party_surprised": false, "visibility": "player" }, { "code": "encounter.reaction.rolled", "event_type": "reaction_rolled", "modifier": 0, - "result": "indifferent", - "roll": 9, - "total": 9, + "result": "uncertain", + "roll": 6, + "total": 6, "visibility": "referee" }, { "code": "encounter.stance.changed", "event_type": "stance_changed", - "stance": "indifferent", + "stance": "uncertain", "visibility": "player" }, { @@ -1578,53 +1814,53 @@ "key": "monsters", "modifier": 0, "rolls": [ - 1 + 5 ], - "total": 1 + "total": 5 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0002", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0002" + "character-0004" ], "visibility": "player" }, { "code": "battle.group.moved", - "distance_feet": 70, - "event_type": "group_moved", - "group_id": "group-0002", - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 40, + "distance_feet": 5, "event_type": "group_moved", "group_id": "group-0002", "visibility": "player" }, { - "attack_name": "Sling", + "attack_name": "Dagger", "attacker_id": "npc-0002", "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0001", + "defender_ac": 5, + "defender_id": "character-0003", "event_type": "attack_rolled", - "modifier": 1, + "modifier": 0, "natural": null, - "required": 15, - "roll": 10, - "total": 11, + "required": 14, + "roll": 9, + "total": 9, "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0002", + "visibility": "player" + }, + { + "code": "battle.round.started", + "event_type": "battle_round", "round": 2, "visibility": "player" }, @@ -1635,17 +1871,17 @@ "key": "party", "modifier": 0, "rolls": [ - 5 + 4 ], - "total": 5 + "total": 4 }, { "key": "monsters", "modifier": 0, "rolls": [ - 6 + 5 ], - "total": 6 + "total": 5 } ], "event_type": "initiative_rolled", @@ -1660,54 +1896,104 @@ "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 10, - "event_type": "group_moved", - "group_id": "group-0002", + "attack_name": "Battle axe", + "attacker_id": "npc-0001", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 13, + "total": 13, "visibility": "player" }, { - "attack_name": "Sling", + "attack_name": "Dagger", "attacker_id": "npc-0002", - "code": "combat.attack.hit", + "code": "combat.attack.missed", "defender_ac": 4, "defender_id": "character-0002", "event_type": "attack_rolled", - "modifier": 1, + "modifier": 0, "natural": null, "required": 15, - "roll": 14, - "total": 15, + "roll": 12, + "total": 12, "visibility": "player" }, { - "amount": 1, - "attacker_id": "npc-0002", + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "npc-0001", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 10, + "total": 11, + "visibility": "player" + }, + { + "attack_name": "Mace", + "attacker_id": "character-0002", + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "npc-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 19, + "total": 19, + "visibility": "player" + }, + { + "amount": 6, + "attacker_id": "character-0002", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 1 + 6 ], - "target_id": "character-0002", + "target_id": "npc-0001", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 2, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "character-0002", + "max_hp": 6, + "target_id": "npc-0001", "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0002", + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "npc-0001", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "npc-0001", "visibility": "player" }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 6, + "target_id": "npc-0001", + "visibility": "referee" + }, { "code": "battle.round.started", "event_type": "battle_round", @@ -1721,9 +2007,9 @@ "key": "party", "modifier": 0, "rolls": [ - 4 + 5 ], - "total": 4 + "total": 5 }, { "key": "monsters", @@ -1748,94 +2034,61 @@ { "attack_name": "Sword", "attacker_id": "character-0001", - "code": "combat.attack.hit", - "defender_ac": 7, - "defender_id": "npc-0001", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "npc-0002", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 12, - "roll": 16, - "total": 16, - "visibility": "player" - }, - { - "amount": 6, - "attacker_id": "character-0001", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 6 - ], - "target_id": "npc-0001", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "npc-0001", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "npc-0001", - "visibility": "player" - }, - { - "code": "combat.death.died", - "event_type": "death", - "target_id": "npc-0001", + "required": 13, + "roll": 3, + "total": 4, "visibility": "player" }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "npc-0001", - "visibility": "referee" - }, { "attack_name": "Mace", "attacker_id": "character-0002", "code": "combat.attack.missed", - "defender_ac": 7, + "defender_ac": 6, "defender_id": "npc-0002", "event_type": "attack_rolled", "modifier": 0, "natural": null, - "required": 12, + "required": 13, "roll": 9, "total": 9, "visibility": "player" }, { - "code": "combat.morale.broke", + "code": "combat.morale.held", "event_type": "morale_checked", "modifier": 0, - "roll": 12, + "roll": 6, "score": 9, "subject": "group-0002", "visibility": "referee" }, { - "code": "battle.side.fled", - "event_type": "monster_fled", - "group_id": "group-0002", - "visibility": "player" + "code": "combat.morale.held", + "event_type": "morale_checked", + "modifier": 0, + "roll": 7, + "score": 9, + "subject": "group-0002", + "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 95, - "event_type": "group_moved", - "group_id": "group-0002", + "attack_name": "Dagger", + "attacker_id": "npc-0002", + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 14, + "total": 14, "visibility": "player" }, { @@ -1851,37 +2104,87 @@ "key": "party", "modifier": 0, "rolls": [ - 1 + 2 ], - "total": 1 + "total": 2 }, { "key": "monsters", "modifier": 0, "rolls": [ - 5 + 1 ], - "total": 5 + "total": 1 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ - "group-0002", "character-0001", "character-0002", "character-0003", - "character-0004" + "character-0004", + "group-0002" ], "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 185, - "event_type": "group_moved", - "group_id": "group-0002", + "attack_name": "Sword", + "attacker_id": "character-0001", + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "npc-0002", + "event_type": "attack_rolled", + "modifier": 1, + "natural": null, + "required": 13, + "roll": 19, + "total": 20, + "visibility": "player" + }, + { + "amount": 3, + "attacker_id": "character-0001", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 2 + ], + "target_id": "npc-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "npc-0002", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "npc-0002", "visibility": "player" }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "npc-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 3, + "target_id": "npc-0002", + "visibility": "referee" + }, { "code": "battle.ended.victory", "event_type": "battle_ended", @@ -1892,18 +2195,18 @@ "event_type": "monster_defeated", "monster_id": "npc-0001", "outcome": "slain", - "template_id": "npc:thief", + "template_id": "npc:dwarf", "visibility": "player", - "xp": 20 + "xp": 10 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", "monster_id": "npc-0002", - "outcome": "routed", - "template_id": "npc:halfling", + "outcome": "slain", + "template_id": "npc:magic_user", "visibility": "player", - "xp": 10 + "xp": 20 }, { "code": "encounter.ended", @@ -1917,7 +2220,8 @@ "coins_gp_value": 0, "event_type": "item_acquired", "item_ids": [ - "thieves_tools", + "shield", + "rations_standard", "rations_standard", "rations_standard", "rations_standard", @@ -1925,6 +2229,13 @@ "rations_standard", "rations_standard", "rations_standard", + "rations_standard", + "rations_standard", + "rations_standard", + "rations_standard", + "rations_standard", + "rations_standard", + "waterskin", "waterskin", "torch", "torch", @@ -1932,8 +2243,15 @@ "torch", "torch", "torch", - "leather", - "sword" + "torch", + "torch", + "torch", + "torch", + "torch", + "torch", + "chainmail", + "battle_axe", + "dagger" ], "visibility": "player" }, @@ -1942,19 +2260,19 @@ "code": "exploration.wandering.checked", "encounter": true, "event_type": "wandering_check", - "roll": 5, + "roll": 2, "visibility": "referee" }, { - "alignment": "neutral", + "alignment": "lawful", "class_ids": [ - "thief", - "magic_user" + "halfling", + "fighter" ], "code": "encounter.npc_party.spawned", "event_type": "npc_party_spawned", "levels": [ - 1, + 3, 3 ], "npc_ids": [ @@ -1967,7 +2285,7 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 4, + "roll": 6, "side": "monsters", "surprised": false, "threshold": 2, @@ -1976,7 +2294,7 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 6, + "roll": 5, "side": "party", "surprised": false, "threshold": 3, @@ -1996,15 +2314,15 @@ "code": "encounter.reaction.rolled", "event_type": "reaction_rolled", "modifier": 0, - "result": "hostile", - "roll": 3, - "total": 3, + "result": "attacks", + "roll": 2, + "total": 2, "visibility": "referee" }, { "code": "encounter.stance.changed", "event_type": "stance_changed", - "stance": "hostile", + "stance": "attacks", "visibility": "player" }, { @@ -2025,30 +2343,65 @@ "key": "party", "modifier": 0, "rolls": [ - 4 + 1 ], - "total": 4 + "total": 1 }, { "key": "monsters", "modifier": 0, "rolls": [ - 1 + 6 ], - "total": 1 + "total": 6 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0003", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0003" + "character-0004" + ], + "visibility": "player" + }, + { + "attack_name": "Sling", + "attacker_id": "npc-0003", + "code": "combat.attack.hit", + "defender_ac": 4, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 2, + "natural": null, + "required": 15, + "roll": 17, + "total": 19, + "visibility": "player" + }, + { + "amount": 2, + "attacker_id": "npc-0003", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 2 ], + "target_id": "character-0001", "visibility": "player" }, + { + "code": "combat.state.hit_points", + "current_hp": 4, + "event_type": "hit_points_reported", + "max_hp": 6, + "target_id": "character-0001", + "visibility": "referee" + }, { "code": "battle.group.moved", "distance_feet": 5, @@ -2063,20 +2416,6 @@ "group_id": "group-0003", "visibility": "player" }, - { - "attack_name": "Dagger", - "attacker_id": "npc-0004", - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "character-0003", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 13, - "roll": 7, - "total": 7, - "visibility": "player" - }, { "code": "battle.round.started", "event_type": "battle_round", @@ -2090,18 +2429,14 @@ "key": "party", "modifier": 0, "rolls": [ - 5, - 1, - 6 + 1 ], - "total": 6 + "total": 1 }, { "key": "monsters", "modifier": 0, "rolls": [ - 5, - 1, 2 ], "total": 2 @@ -2110,68 +2445,89 @@ "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0003", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0003" + "character-0004" ], "visibility": "player" }, { "attack_name": "Sword", - "attacker_id": "character-0001", + "attacker_id": "npc-0003", "code": "combat.attack.missed", - "defender_ac": 7, - "defender_id": "npc-0003", + "defender_ac": 4, + "defender_id": "character-0001", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 12, + "required": 15, "roll": 9, - "total": 9, + "total": 10, "visibility": "player" }, { - "attack_name": "Mace", - "attacker_id": "character-0002", + "attack_name": "Sword", + "attacker_id": "npc-0004", "code": "combat.attack.missed", - "defender_ac": 7, - "defender_id": "npc-0003", + "defender_ac": 4, + "defender_id": "character-0002", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 12, - "roll": 6, - "total": 6, + "required": 15, + "roll": 8, + "total": 9, "visibility": "player" }, { "attack_name": "Sword", - "attacker_id": "npc-0003", - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0001", + "attacker_id": "character-0001", + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "npc-0003", "event_type": "attack_rolled", - "modifier": -1, + "modifier": 1, "natural": null, - "required": 15, - "roll": 15, - "total": 14, + "required": 13, + "roll": 18, + "total": 19, "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "npc-0004", + "amount": 2, + "attacker_id": "character-0001", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "npc-0003", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 11, + "event_type": "hit_points_reported", + "max_hp": 13, + "target_id": "npc-0003", + "visibility": "referee" + }, + { + "attack_name": "Mace", + "attacker_id": "character-0002", "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0002", + "defender_ac": 6, + "defender_id": "npc-0003", "event_type": "attack_rolled", "modifier": 0, "natural": null, - "required": 15, - "roll": 5, - "total": 5, + "required": 13, + "roll": 6, + "total": 6, "visibility": "player" }, { @@ -2187,17 +2543,17 @@ "key": "party", "modifier": 0, "rolls": [ - 2 + 1 ], - "total": 2 + "total": 1 }, { "key": "monsters", "modifier": 0, "rolls": [ - 6 + 3 ], - "total": 6 + "total": 3 } ], "event_type": "initiative_rolled", @@ -2215,143 +2571,79 @@ "attack_name": "Sword", "attacker_id": "npc-0003", "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0001", + "defender_ac": 5, + "defender_id": "character-0003", "event_type": "attack_rolled", - "modifier": -1, + "modifier": 1, "natural": null, - "required": 15, - "roll": 3, + "required": 14, + "roll": 1, "total": 2, "visibility": "player" }, { - "attack_name": "Dagger", + "attack_name": "Sword", "attacker_id": "npc-0004", - "code": "combat.attack.hit", - "defender_ac": 6, + "code": "combat.attack.missed", + "defender_ac": 5, "defender_id": "character-0003", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 13, - "roll": 14, - "total": 14, - "visibility": "player" - }, - { - "amount": 1, - "attacker_id": "npc-0004", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "character-0003", + "required": 14, + "roll": 1, + "total": 2, "visibility": "player" }, - { - "code": "combat.state.hit_points", - "current_hp": 2, - "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "character-0003", - "visibility": "referee" - }, { "attack_name": "Sword", "attacker_id": "character-0001", "code": "combat.attack.hit", - "defender_ac": 7, + "defender_ac": 6, "defender_id": "npc-0003", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 12, - "roll": 19, - "total": 19, + "required": 13, + "roll": 13, + "total": 14, "visibility": "player" }, { - "amount": 4, + "amount": 9, "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 4 + 8 ], "target_id": "npc-0003", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "npc-0003", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "npc-0003", - "visibility": "player" - }, - { - "code": "combat.death.died", - "event_type": "death", - "target_id": "npc-0003", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, + "current_hp": 2, "event_type": "hit_points_reported", - "max_hp": 1, + "max_hp": 13, "target_id": "npc-0003", "visibility": "referee" }, { "attack_name": "Mace", "attacker_id": "character-0002", - "code": "combat.attack.hit", - "defender_ac": 9, - "defender_id": "npc-0004", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "npc-0003", "event_type": "attack_rolled", "modifier": 0, "natural": null, - "required": 10, - "roll": 16, - "total": 16, - "visibility": "player" - }, - { - "amount": 3, - "attacker_id": "character-0002", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 3 - ], - "target_id": "npc-0004", + "required": 13, + "roll": 12, + "total": 12, "visibility": "player" }, - { - "code": "combat.state.hit_points", - "current_hp": 5, - "event_type": "hit_points_reported", - "max_hp": 8, - "target_id": "npc-0004", - "visibility": "referee" - }, { "code": "battle.round.started", "event_type": "battle_round", @@ -2365,17 +2657,17 @@ "key": "party", "modifier": 0, "rolls": [ - 3 + 6 ], - "total": 3 + "total": 6 }, { "key": "monsters", "modifier": 0, "rolls": [ - 1 + 5 ], - "total": 1 + "total": 5 } ], "event_type": "initiative_rolled", @@ -2393,81 +2685,102 @@ "attack_name": "Sword", "attacker_id": "character-0001", "code": "combat.attack.hit", - "defender_ac": 9, - "defender_id": "npc-0004", + "defender_ac": 6, + "defender_id": "npc-0003", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 10, - "roll": 17, + "required": 13, + "roll": 16, "total": 17, "visibility": "player" }, { - "amount": 4, + "amount": 3, "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 4 + 2 ], - "target_id": "npc-0004", + "target_id": "npc-0003", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 1, + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 13, + "target_id": "npc-0003", + "visibility": "referee" + }, + { + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "npc-0003", + "visibility": "player" + }, + { + "code": "combat.death.died", + "event_type": "death", + "target_id": "npc-0003", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 8, - "target_id": "npc-0004", + "max_hp": 13, + "target_id": "npc-0003", "visibility": "referee" }, { "attack_name": "Mace", "attacker_id": "character-0002", "code": "combat.attack.missed", - "defender_ac": 9, + "defender_ac": 5, "defender_id": "npc-0004", "event_type": "attack_rolled", "modifier": 0, "natural": null, - "required": 10, - "roll": 1, - "total": 1, + "required": 14, + "roll": 7, + "total": 7, "visibility": "player" }, { "code": "combat.morale.held", "event_type": "morale_checked", "modifier": 0, - "roll": 4, + "roll": 9, "score": 9, "subject": "group-0003", "visibility": "referee" }, { - "code": "combat.morale.held", + "code": "combat.morale.broke", "event_type": "morale_checked", "modifier": 0, - "roll": 3, + "roll": 12, "score": 9, "subject": "group-0003", "visibility": "referee" }, { - "attack_name": "Dagger", - "attacker_id": "npc-0004", - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 15, - "roll": 3, - "total": 3, + "code": "battle.side.fled", + "event_type": "monster_fled", + "group_id": "group-0003", + "visibility": "player" + }, + { + "code": "battle.group.moved", + "distance_feet": 65, + "event_type": "group_moved", + "group_id": "group-0003", "visibility": "player" }, { @@ -2483,87 +2796,39 @@ "key": "party", "modifier": 0, "rolls": [ - 6 + 6, + 2 ], - "total": 6 + "total": 2 }, { "key": "monsters", "modifier": 0, "rolls": [ - 5 + 6, + 6 ], - "total": 5 + "total": 6 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0003", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0003" - ], - "visibility": "player" - }, - { - "attack_name": "Sword", - "attacker_id": "character-0001", - "code": "combat.attack.hit", - "defender_ac": 9, - "defender_id": "npc-0004", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 10, - "roll": 16, - "total": 16, - "visibility": "player" - }, - { - "amount": 5, - "attacker_id": "character-0001", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 5 + "character-0004" ], - "target_id": "npc-0004", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 8, - "target_id": "npc-0004", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "npc-0004", "visibility": "player" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "npc-0004", + "code": "battle.group.moved", + "distance_feet": 125, + "event_type": "group_moved", + "group_id": "group-0003", "visibility": "player" }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 8, - "target_id": "npc-0004", - "visibility": "referee" - }, { "code": "battle.ended.victory", "event_type": "battle_ended", @@ -2574,16 +2839,16 @@ "event_type": "monster_defeated", "monster_id": "npc-0003", "outcome": "slain", - "template_id": "npc:thief", + "template_id": "npc:halfling", "visibility": "player", - "xp": 10 + "xp": 35 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", "monster_id": "npc-0004", - "outcome": "slain", - "template_id": "npc:magic_user", + "outcome": "routed", + "template_id": "npc:fighter", "visibility": "player", "xp": 35 }, @@ -2676,51 +2941,51 @@ { "code": "session.xp.adventure_award", "event_type": "adventure_xp_award", - "monster_xp": 85, - "share": 948, + "monster_xp": 110, + "share": 1092, "survivors": [ "character-0001", "character-0002", "character-0003", "character-0004" ], - "treasure_xp": 3710, + "treasure_xp": 4260, "visibility": "player" }, { - "award": 948, + "award": 1092, "character_id": "character-0001", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 948, + "modified_award": 1146, "visibility": "player" }, { - "award": 948, + "award": 1092, "character_id": "character-0002", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 995, + "modified_award": 873, "visibility": "player" }, { - "award": 948, + "award": 1092, "character_id": "character-0003", "code": "session.xp.awarded", "event_type": "xp_awarded", - "level_after": 1, - "modified_award": 995, + "level_after": 2, + "modified_award": 1201, "visibility": "player" }, { - "award": 948, + "award": 1092, "character_id": "character-0004", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 853, + "modified_award": 1201, "visibility": "player" }, { @@ -2736,7 +3001,7 @@ "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 600, + "modified_award": 630, "visibility": "player" }, { @@ -2744,8 +3009,8 @@ "character_id": "character-0002", "code": "session.xp.awarded", "event_type": "xp_awarded", - "level_after": 2, - "modified_award": 630, + "level_after": 1, + "modified_award": 480, "visibility": "player" }, { @@ -2754,7 +3019,7 @@ "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 2, - "modified_award": 630, + "modified_award": 660, "visibility": "player" }, { @@ -2763,20 +3028,17 @@ "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 540, + "modified_award": 660, "visibility": "player" }, { "character_id": "character-0001", "code": "town.treasure.sold", "event_type": "treasure_sold", - "gp_value": 3350, + "gp_value": 3800, "instance_ids": [ "valuable-0001", - "valuable-0002", - "valuable-0003", - "valuable-0004", - "valuable-0005" + "valuable-0002" ], "visibility": "player" }, @@ -2802,7 +3064,7 @@ "visibility": "player" }, { - "amount": 0, + "amount": 2, "code": "combat.healing.applied", "event_type": "healing_applied", "source": "magical", @@ -2811,9 +3073,9 @@ }, { "code": "combat.state.hit_points", - "current_hp": 1, + "current_hp": 6, "event_type": "hit_points_reported", - "max_hp": 1, + "max_hp": 6, "target_id": "character-0001", "visibility": "referee" } @@ -2821,48 +3083,48 @@ "final_clock_rounds": 660, "final_stream_states": { "advancement": { - "inc": 163327069044486051126947995364136888865, - "state": 89225424686712656729351129721013339932 + "inc": 43677341557666270100197892308947072293, + "state": 285515126583297193856346502382424624579 }, "character_creation": { - "inc": 94431089517224497494304078021773842643, - "state": 255311065768015683930914758750720901715 + "inc": 17946088532174565015500210655121870187, + "state": 185814011503179506883659008717516732608 }, "combat": { - "inc": 87636027427402742962096061141378126603, - "state": 32816957575117351425971913236529165944 + "inc": 88285706471182240999796996985449864699, + "state": 250947283381509579396439480784507074708 }, "effects": { - "inc": 308942190192160579022829090612273209535, - "state": 86030692777420592780540089031303460884 + "inc": 315281498630863548472442499383581199711, + "state": 212305229760147444865682963842332160668 }, "encounter": { - "inc": 120019676226528556510771707116371722883, - "state": 132893182880489414988391285345543474432 + "inc": 171819386744888340974805007273236693017, + "state": 275192088164284261660820693828679692415 }, "magic": { - "inc": 160442154227920798667277430739742122171, - "state": 133959655595319358044990640540889698334 + "inc": 235258215081449899357873969667663115735, + "state": 329614968649946639003684095794010180216 }, "monster_action": { - "inc": 233343978251689304690324373377683524175, - "state": 32131405905825068462548867677379179019 + "inc": 46342144612551853195774728794526618795, + "state": 171183477169863727975987935011308910408 }, "monster_spawn": { - "inc": 339298395037013819211810257736225570239, - "state": 13385916051847779239867111469601938257 + "inc": 90076630143872539436531717779739965705, + "state": 230843584225483508681358559969826006728 }, "npc_party": { - "inc": 205815493099550782539001145560605658829, - "state": 16308921375393944333716404517814820909 + "inc": 288339856986629267962509867455118458403, + "state": 128021695504321842526871152362638138911 }, "treasure": { - "inc": 155257621948183087870270638851793006091, - "state": 278694954170424485550223934877764104212 + "inc": 71902289779642106543069209520632252559, + "state": 171781426282240890362948698447536326448 }, "wandering": { - "inc": 178717010947302389065957094864863840729, - "state": 193321734216052235020284798125793870663 + "inc": 307241066519008890573396945446872461937, + "state": 255571344490792913375602188943715079090 } }, "flags": { @@ -2874,9 +3136,9 @@ "reward_granted": true } }, - "master_seed": 203, + "master_seed": 21, "party_document": { - "engine_version": "0.1.0", + "engine_version": "1.3.0", "kind": "party", "payload": { "characters": [ @@ -2885,7 +3147,7 @@ "carrying_treasure": false, "class_id": "fighter", "conditions": [], - "current_hp": 1, + "current_hp": 6, "extra_languages": [], "id": null, "inventory": { @@ -2953,17 +3215,17 @@ } }, "level": 1, - "max_hp": 1, + "max_hp": 6, "memorized_spells": [], "name": "Brakka", "race": "human", "scores": { - "cha": 9, - "con": 4, - "dex": 12, - "int": 4, - "str": 12, - "wis": 10 + "cha": 13, + "con": 10, + "dex": 9, + "int": 11, + "str": 15, + "wis": 13 }, "spell_book": [], "stat_modifiers": [], @@ -2982,7 +3244,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 5, + "gp": 25, "pp": 0, "sp": 0 }, @@ -3033,12 +3295,12 @@ "name": "Wynn", "race": "human", "scores": { - "cha": 9, + "cha": 11, "con": 9, "dex": 13, - "int": 4, + "int": 9, "str": 10, - "wis": 13 + "wis": 5 }, "spell_book": [], "stat_modifiers": [], @@ -3057,7 +3319,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 120, + "gp": 80, "pp": 0, "sp": 0 }, @@ -3107,12 +3369,12 @@ "name": "Sable", "race": "human", "scores": { - "cha": 13, - "con": 14, - "dex": 13, - "int": 12, - "str": 11, - "wis": 10 + "cha": 16, + "con": 11, + "dex": 17, + "int": 10, + "str": 10, + "wis": 12 }, "spell_book": [], "stat_modifiers": [], @@ -3123,7 +3385,7 @@ "carrying_treasure": false, "class_id": "magic_user", "conditions": [], - "current_hp": 5, + "current_hp": 1, "extra_languages": [], "id": null, "inventory": { @@ -3131,7 +3393,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 117, + "gp": 97, "pp": 0, "sp": 0 }, @@ -3175,17 +3437,17 @@ "worn_armour": null }, "level": 1, - "max_hp": 5, + "max_hp": 1, "memorized_spells": [], "name": "Elandril", "race": "human", "scores": { - "cha": 10, - "con": 14, - "dex": 12, - "int": 7, - "str": 13, - "wis": 7 + "cha": 11, + "con": 9, + "dex": 15, + "int": 16, + "str": 10, + "wis": 8 }, "spell_book": [ "sleep" @@ -3203,28 +3465,28 @@ "id": "character-0001", "level": 1, "name": "Brakka", - "xp": 1548 + "xp": 1776 }, { "class_id": "cleric", "id": "character-0002", - "level": 2, + "level": 1, "name": "Wynn", - "xp": 1625 + "xp": 1353 }, { "class_id": "thief", "id": "character-0003", "level": 2, "name": "Sable", - "xp": 1625 + "xp": 1861 }, { "class_id": "magic_user", "id": "character-0004", "level": 1, "name": "Elandril", - "xp": 1393 + "xp": 1861 } ], "transcript": [ @@ -3232,154 +3494,167 @@ "The party moves to (1, 0), facing east.", "The party moves to (2, 0), facing east.", "The party enters area guard_room (level 1).", - "Treasure generated at cache-0001 (C): 0 gp in coin, 4 valuable(s), 0 magic item(s).", - "Surprise (monsters): rolled 5, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 2, surprised on 1-3 — surprised.", - "Encounter: 2 × Goblin at 50' — the party is surprised.", + "Treasure generated at cache-0001 (C): 0 gp in coin, 1 valuable(s), 0 magic item(s).", + "Surprise (monsters): rolled 3, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 1, surprised on 1-3 — surprised.", + "Encounter: 2 × Goblin at 20' — the party is surprised.", "Reaction roll: 6+0 = 6 — uncertain.", "The monsters' bearing: uncertain.", - "Reaction roll: 5+0 = 5 — hostile.", - "The monsters' bearing: hostile.", + "Reaction roll: 7+0 = 7 — uncertain.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 3, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", - "group-0001 is now 30' away.", - "group-0001 is now 10' away.", - "Battle round 2 begins.", - "Initiative (side): party 1, monsters 6. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", - "group-0001 is now 5' away.", + "Initiative (side): party 4, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", "group-0001 is now 5' away.", + "monster-0001 misses character-0003 with weapon: rolled 1+0 = 1, needing 14.", + "monster-0002 misses character-0001 with weapon: rolled 9+0 = 9, needing 15.", + "Battle round 2 begins.", + "Initiative (side): party 2, monsters 4. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", + "monster-0001 misses character-0002 with weapon: rolled 5+0 = 5, needing 15.", + "monster-0002 hits character-0003 with weapon: rolled 17+0 = 17, needing 14.", + "character-0003 takes 1 damage from monster-0002.", + "character-0003 is at 2/3 hit points.", + "character-0001 misses monster-0001 with Sword: rolled 1+1 = 2, needing 13.", + "character-0002 misses monster-0001 with Mace: rolled 9+0 = 9, needing 13.", "Battle round 3 begins.", - "Initiative (side): party 2, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", - "character-0001 hits monster-0001 with Sword: rolled 20+0 = 20, needing 13.", - "monster-0001 takes 4 damage from character-0001.", + "Initiative (side): party 2, monsters 6. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", + "monster-0001 misses character-0001 with weapon: rolled 3+0 = 3, needing 15.", + "monster-0002 hits character-0003 with weapon: rolled 17+0 = 17, needing 14.", + "character-0003 takes 1 damage from monster-0002.", + "character-0003 is at 1/3 hit points.", + "character-0001 misses monster-0001 with Sword: rolled 4+1 = 5, needing 13.", + "character-0002 hits monster-0001 with Mace: rolled 19+0 = 19, needing 13.", + "monster-0001 takes 3 damage from character-0002.", "monster-0001 is at 0/1 hit points.", "monster-0001 is dead.", "monster-0001 is killed.", "monster-0001 is at 0/1 hit points.", - "character-0002 misses monster-0002 with Mace: rolled 7+0 = 7, needing 13.", + "Battle round 4 begins.", + "Initiative (side): party 4, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", + "character-0001 misses monster-0002 with Sword: rolled 2+1 = 3, needing 13.", + "character-0002 misses monster-0002 with Mace: rolled 2+0 = 2, needing 13.", "Morale check for group-0001 (ML 7): rolled 7+0 — they fight on.", "Morale check for group-0001 (ML 7): rolled 9+0 — they flee or surrender.", "group-0001 flees the battle!", "group-0001 is now 65' away.", - "Battle round 4 begins.", - "Initiative (side): party 4, monsters 3. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", + "Battle round 5 begins.", + "Initiative (side): party 5, monsters 3. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", "group-0001 is now 45' away.", "group-0001 is now 105' away.", - "Battle round 5 begins.", - "Initiative (side): party 2, monsters 3. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", - "group-0001 is now 165' away.", + "Battle round 6 begins.", + "Initiative (side): party 3, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0001.", + "group-0001 is now 85' away.", + "group-0001 is now 145' away.", "The battle is won.", "monster-0001 (goblin) is slain.", "monster-0002 (goblin) is routed.", "The encounter ends (victory).", - "character-0001 acquires valuable-0001, valuable-0002, valuable-0003, valuable-0004.", + "character-0001 acquires valuable-0001.", "The party moves to (3, 0), facing east.", "The party moves to (4, 0), facing east.", "The party enters area shrine (level 1).", - "character-0001 acquires valuable-0005 and 50 gp in coin.", + "character-0001 acquires valuable-0002 and 50 gp in coin.", "Wandering check: skipped vs 0-in-6 — nothing comes.", "character-0001 acquires 200 gp in coin.", "The party enters level barrow (level 2).", "The party moves to (1, 0), facing east.", "The party moves to (2, 0), facing east.", "The party enters area vault (level 2).", - "Treasure generated at cache-0002 (unguarded): 110 gp in coin, 0 valuable(s), 0 magic item(s).", - "character-0001 acquires 110 gp in coin.", - "Wandering check: 1 vs 6-in-6 — an encounter!", - "An NPC party (basic, lawful) takes the field: npc-0001 (thief 2), npc-0002 (halfling 1).", + "Treasure generated at cache-0002 (unguarded): 210 gp in coin, 0 valuable(s), 0 magic item(s).", + "character-0001 acquires 210 gp in coin.", + "Wandering check: 2 vs 6-in-6 — an encounter!", + "An NPC party (basic, neutral) takes the field: npc-0001 (dwarf 1), npc-0002 (magic_user 2).", "Surprise (monsters): rolled 6, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 1, surprised on 1-3 — surprised.", - "Encounter: 2 × Basic Adventurers at 90' — the party is surprised.", - "Reaction roll: 9+0 = 9 — indifferent.", - "The monsters' bearing: indifferent.", + "Surprise (party): rolled 6, surprised on 1-3 — not surprised.", + "Encounter: 2 × Basic Adventurers at 20'.", + "Reaction roll: 6+0 = 6 — uncertain.", + "The monsters' bearing: uncertain.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 4, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0002.", - "group-0002 is now 70' away.", - "group-0002 is now 40' away.", - "npc-0002 misses character-0001 with Sling: rolled 10+1 = 11, needing 15.", - "Battle round 2 begins.", - "Initiative (side): party 5, monsters 6. Order: group-0002, character-0001, character-0002, character-0003, character-0004.", - "group-0002 is now 10' away.", - "npc-0002 hits character-0002 with Sling: rolled 14+1 = 15, needing 15.", - "character-0002 takes 1 damage from npc-0002.", - "character-0002 is at 2/3 hit points.", + "Initiative (side): party 4, monsters 5. Order: group-0002, character-0001, character-0002, character-0003, character-0004.", "group-0002 is now 5' away.", - "Battle round 3 begins.", - "Initiative (side): party 4, monsters 3. Order: character-0001, character-0002, character-0003, character-0004, group-0002.", - "character-0001 hits npc-0001 with Sword: rolled 16+0 = 16, needing 12.", - "npc-0001 takes 6 damage from character-0001.", - "npc-0001 is at 0/5 hit points.", + "npc-0002 misses character-0003 with Dagger: rolled 9+0 = 9, needing 14.", + "group-0002 is now 5' away.", + "Battle round 2 begins.", + "Initiative (side): party 4, monsters 5. Order: group-0002, character-0001, character-0002, character-0003, character-0004.", + "npc-0001 misses character-0002 with Battle axe: rolled 13+0 = 13, needing 15.", + "npc-0002 misses character-0002 with Dagger: rolled 12+0 = 12, needing 15.", + "character-0001 misses npc-0001 with Sword: rolled 10+1 = 11, needing 13.", + "character-0002 hits npc-0001 with Mace: rolled 19+0 = 19, needing 13.", + "npc-0001 takes 6 damage from character-0002.", + "npc-0001 is at 0/6 hit points.", "npc-0001 is dead.", "npc-0001 is killed.", - "npc-0001 is at 0/5 hit points.", - "character-0002 misses npc-0002 with Mace: rolled 9+0 = 9, needing 12.", - "Morale check for group-0002 (ML 9): rolled 12+0 — they flee or surrender.", - "group-0002 flees the battle!", - "group-0002 is now 95' away.", + "npc-0001 is at 0/6 hit points.", + "Battle round 3 begins.", + "Initiative (side): party 5, monsters 3. Order: character-0001, character-0002, character-0003, character-0004, group-0002.", + "character-0001 misses npc-0002 with Sword: rolled 3+1 = 4, needing 13.", + "character-0002 misses npc-0002 with Mace: rolled 9+0 = 9, needing 13.", + "Morale check for group-0002 (ML 9): rolled 6+0 — they fight on.", + "Morale check for group-0002 (ML 9): rolled 7+0 — they fight on.", + "npc-0002 misses character-0002 with Dagger: rolled 14+0 = 14, needing 15.", "Battle round 4 begins.", - "Initiative (side): party 1, monsters 5. Order: group-0002, character-0001, character-0002, character-0003, character-0004.", - "group-0002 is now 185' away.", + "Initiative (side): party 2, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0002.", + "character-0001 hits npc-0002 with Sword: rolled 19+1 = 20, needing 13.", + "npc-0002 takes 3 damage from character-0001.", + "npc-0002 is at 0/3 hit points.", + "npc-0002 is dead.", + "npc-0002 is killed.", + "npc-0002 is at 0/3 hit points.", "The battle is won.", - "npc-0001 (npc:thief) is slain.", - "npc-0002 (npc:halfling) is routed.", + "npc-0001 (npc:dwarf) is slain.", + "npc-0002 (npc:magic_user) is slain.", "The encounter ends (victory).", - "character-0001 acquires thieves_tools, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, waterskin, torch, torch, torch, torch, torch, torch, leather, sword.", - "Wandering check: 5 vs 6-in-6 — an encounter!", - "An NPC party (basic, neutral) takes the field: npc-0003 (thief 1), npc-0004 (magic_user 3).", - "Surprise (monsters): rolled 4, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 6, surprised on 1-3 — not surprised.", + "character-0001 acquires shield, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, rations_standard, waterskin, waterskin, torch, torch, torch, torch, torch, torch, torch, torch, torch, torch, torch, torch, chainmail, battle_axe, dagger.", + "Wandering check: 2 vs 6-in-6 — an encounter!", + "An NPC party (basic, lawful) takes the field: npc-0003 (halfling 3), npc-0004 (fighter 3).", + "Surprise (monsters): rolled 6, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 5, surprised on 1-3 — not surprised.", "Encounter: 2 × Basic Adventurers at 20'.", - "Reaction roll: 3+0 = 3 — hostile.", - "The monsters' bearing: hostile.", + "Reaction roll: 2+0 = 2 — attacks.", + "The monsters' bearing: attacks.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 4, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0003.", + "Initiative (side): party 1, monsters 6. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", + "npc-0003 hits character-0001 with Sling: rolled 17+2 = 19, needing 15.", + "character-0001 takes 2 damage from npc-0003.", + "character-0001 is at 4/6 hit points.", "group-0003 is now 5' away.", "group-0003 is now 5' away.", - "npc-0004 misses character-0003 with Dagger: rolled 7+0 = 7, needing 13.", "Battle round 2 begins.", - "Initiative (side): party 6, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, group-0003.", - "character-0001 misses npc-0003 with Sword: rolled 9+0 = 9, needing 12.", - "character-0002 misses npc-0003 with Mace: rolled 6+0 = 6, needing 12.", - "npc-0003 misses character-0001 with Sword: rolled 15-1 = 14, needing 15.", - "npc-0004 misses character-0002 with Dagger: rolled 5+0 = 5, needing 15.", + "Initiative (side): party 1, monsters 2. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", + "npc-0003 misses character-0001 with Sword: rolled 9+1 = 10, needing 15.", + "npc-0004 misses character-0002 with Sword: rolled 8+1 = 9, needing 15.", + "character-0001 hits npc-0003 with Sword: rolled 18+1 = 19, needing 13.", + "npc-0003 takes 2 damage from character-0001.", + "npc-0003 is at 11/13 hit points.", + "character-0002 misses npc-0003 with Mace: rolled 6+0 = 6, needing 13.", "Battle round 3 begins.", - "Initiative (side): party 2, monsters 6. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", - "npc-0003 misses character-0001 with Sword: rolled 3-1 = 2, needing 15.", - "npc-0004 hits character-0003 with Dagger: rolled 14+0 = 14, needing 13.", - "character-0003 takes 1 damage from npc-0004.", - "character-0003 is at 2/3 hit points.", - "character-0001 hits npc-0003 with Sword: rolled 19+0 = 19, needing 12.", - "npc-0003 takes 4 damage from character-0001.", - "npc-0003 is at 0/1 hit points.", + "Initiative (side): party 1, monsters 3. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", + "npc-0003 misses character-0003 with Sword: rolled 1+1 = 2, needing 14.", + "npc-0004 misses character-0003 with Sword: rolled 1+1 = 2, needing 14.", + "character-0001 hits npc-0003 with Sword: rolled 13+1 = 14, needing 13.", + "npc-0003 takes 9 damage from character-0001.", + "npc-0003 is at 2/13 hit points.", + "character-0002 misses npc-0003 with Mace: rolled 12+0 = 12, needing 13.", + "Battle round 4 begins.", + "Initiative (side): party 6, monsters 5. Order: character-0001, character-0002, character-0003, character-0004, group-0003.", + "character-0001 hits npc-0003 with Sword: rolled 16+1 = 17, needing 13.", + "npc-0003 takes 3 damage from character-0001.", + "npc-0003 is at 0/13 hit points.", "npc-0003 is dead.", "npc-0003 is killed.", - "npc-0003 is at 0/1 hit points.", - "character-0002 hits npc-0004 with Mace: rolled 16+0 = 16, needing 10.", - "npc-0004 takes 3 damage from character-0002.", - "npc-0004 is at 5/8 hit points.", - "Battle round 4 begins.", - "Initiative (side): party 3, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0003.", - "character-0001 hits npc-0004 with Sword: rolled 17+0 = 17, needing 10.", - "npc-0004 takes 4 damage from character-0001.", - "npc-0004 is at 1/8 hit points.", - "character-0002 misses npc-0004 with Mace: rolled 1+0 = 1, needing 10.", - "Morale check for group-0003 (ML 9): rolled 4+0 — they fight on.", - "Morale check for group-0003 (ML 9): rolled 3+0 — they fight on.", - "npc-0004 misses character-0002 with Dagger: rolled 3+0 = 3, needing 15.", + "npc-0003 is at 0/13 hit points.", + "character-0002 misses npc-0004 with Mace: rolled 7+0 = 7, needing 14.", + "Morale check for group-0003 (ML 9): rolled 9+0 — they fight on.", + "Morale check for group-0003 (ML 9): rolled 12+0 — they flee or surrender.", + "group-0003 flees the battle!", + "group-0003 is now 65' away.", "Battle round 5 begins.", - "Initiative (side): party 6, monsters 5. Order: character-0001, character-0002, character-0003, character-0004, group-0003.", - "character-0001 hits npc-0004 with Sword: rolled 16+0 = 16, needing 10.", - "npc-0004 takes 5 damage from character-0001.", - "npc-0004 is at 0/8 hit points.", - "npc-0004 is dead.", - "npc-0004 is killed.", - "npc-0004 is at 0/8 hit points.", + "Initiative (side): party 2, monsters 6. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", + "group-0003 is now 125' away.", "The battle is won.", - "npc-0003 (npc:thief) is slain.", - "npc-0004 (npc:magic_user) is slain.", + "npc-0003 (npc:halfling) is slain.", + "npc-0004 (npc:fighter) is routed.", "The encounter ends (victory).", "The party moves to (1, 0), facing west.", "The party moves to (0, 0), facing west.", @@ -3391,20 +3666,20 @@ "The party moves to (1, 0), facing west.", "The party moves to (0, 0), facing west.", "The party enters town town.", - "The adventure ends: 85 XP from monsters and 3710 XP from treasure — 948 XP to each of 4 survivor(s).", - "character-0001 gains 948 XP (base 948), now level 1.", - "character-0002 gains 995 XP (base 948), now level 1.", - "character-0003 gains 995 XP (base 948), now level 1.", - "character-0004 gains 853 XP (base 948), now level 1.", + "The adventure ends: 110 XP from monsters and 4260 XP from treasure — 1092 XP to each of 4 survivor(s).", + "character-0001 gains 1146 XP (base 1092), now level 1.", + "character-0002 gains 873 XP (base 1092), now level 1.", + "character-0003 gains 1201 XP (base 1092), now level 2.", + "character-0004 gains 1201 XP (base 1092), now level 1.", "Flag quest.idol = 'recovered'.", - "character-0001 gains 600 XP (base 600), now level 1.", - "character-0002 gains 630 XP (base 600), now level 2.", - "character-0003 gains 630 XP (base 600), now level 2.", - "character-0004 gains 540 XP (base 600), now level 1.", - "character-0001 sells 5 valuable(s) for 3350 gp.", + "character-0001 gains 630 XP (base 600), now level 1.", + "character-0002 gains 480 XP (base 600), now level 1.", + "character-0003 gains 660 XP (base 600), now level 2.", + "character-0004 gains 660 XP (base 600), now level 1.", + "character-0001 sells 2 valuable(s) for 3800 gp.", "character-0001 purchases cure_light_wounds at the temple for 25 gp.", "town-cleric casts cure_light_wounds [heal] at character-0001.", - "character-0001 regains 0 hit points (magical).", - "character-0001 is at 1/1 hit points." + "character-0001 regains 2 hit points (magical).", + "character-0001 is at 6/6 hit points." ] } diff --git a/tests/test_encounter.py b/tests/test_encounter.py index 8d6e59d..84cf1ba 100644 --- a/tests/test_encounter.py +++ b/tests/test_encounter.py @@ -1,6 +1,6 @@ """Encounter procedure tests: surprise, stances, parley, evasion, pursuit, conclusion.""" -from crawl_fixtures import build_adventure, build_party +from crawl_fixtures import build_adventure, build_party, build_sightline_adventure from osrlib.core.clock import ROUNDS_PER_TURN from osrlib.core.effects import Condition, has_condition from osrlib.core.items import Coins @@ -46,6 +46,13 @@ def start(session, template_id="goblin", count=2, distance=40, **kwargs): ) +# The sight-line level's four vantage points (see `build_sightline_adventure`). +CHAMBER_CELL = (0, 0) +CLOSET_CELL = (0, 2) +CORRIDOR_CELL = (1, 2) +SEALED_CELL = (0, 4) + + class TestSurprise: def test_lit_party_skips_the_monsters_roll(self): session = quiet_session() @@ -338,6 +345,118 @@ def test_keyed_encounter_resolution_marks_the_area(self): assert session.mode.value == "battle" +class TestEncounterDistance: + """The rolled distance is bounded by the space: RAW rolls only "if there is uncertainty".""" + + def test_a_long_corridor_keeps_the_full_2d6_range(self): + # The corridor affords 130' of straight sight, so no roll is ever cut and + # the distances span the printed 20'–120'. + distances = {self.rolled(seed, CORRIDOR_CELL) for seed in range(60)} + assert distances <= set(range(20, 130, 10)) + assert max(distances) > 100 # nothing clipped the top of the range + assert len(distances) > 5 # the roll still varies + + def test_a_small_chamber_clamps_to_its_own_span(self): + # A three-cell chamber, sealed: 20' from the west end to the east end. + assert {self.rolled(seed, CHAMBER_CELL) for seed in range(60)} == {20} + + def test_a_sealed_cell_falls_back_to_the_one_cell_floor(self): + # Nothing to see in any direction; the clamp never produces 0'. + assert {self.rolled(seed, SEALED_CELL) for seed in range(60)} == {10} + + def test_a_keyed_encounter_opens_within_the_room_it_is_keyed_to(self): + # The reported bug's shape: goblins keyed to a 20' room, entered through + # its door, can no longer greet the party from eighty feet away. + for seed in range(20): + session = quiet_session(seed=seed) + session.execute( + PlaceParty( + location=PartyLocation( + kind="dungeon", dungeon_id="delve", level_number=1, position=(2, 0), facing=Direction.SOUTH + ) + ) + ) + session.dungeon_state.door("delve:1:2,1:north").open = True + result = session.execute(MoveParty(direction=Direction.SOUTH)) + assert session.encounter is not None and session.encounter.kind == "keyed" + opened = next(event for event in result.events if event.code == "encounter.started") + assert opened.distance_feet == 10 + + def test_a_shut_door_shortens_the_line_and_opening_it_restores_the_roll(self): + # One cell, one door: shut, the closet is all there is; open, the roll + # runs the full corridor beyond it — the same roll, off the same draws. + for seed in range(30): + assert self.rolled(seed, CLOSET_CELL) == 10 + assert self.rolled(seed, CLOSET_CELL, open_closet=True) == self.rolled(seed, CORRIDOR_CELL) + + def test_darkness_never_shortens_the_line(self): + # Light governs surprise, not distance: an unseen monster down a dark + # corridor is still exactly as far away as it is. + dark = self.sighting_session(seed=3, cell=CORRIDOR_CELL) + assert dark.party_light()[0] is False + assert exploration._sight_line_feet(dark) == 130 + assert max(self.rolled(seed, CORRIDOR_CELL) for seed in range(60)) > 30 # past a torch's radius + + def test_an_explicit_distance_is_never_bounded(self): + # The referee places what the referee spawns. + session = self.sighting_session(seed=3, cell=SEALED_CELL) + instances = session.spawn("goblin", 2) + encounter_module.start_encounter( + session, + groups=[("goblin", instances)], + kind="spawned", + distance_feet=90, + pinned_stance=ReactionResult.INDIFFERENT, + ) + assert session.encounter.groups[0].distance_feet == 90 + + def test_the_bound_consumes_no_randomness(self): + # Same seed, same draws: the clamp reads the rolled result and never the + # stream, so a bounded encounter leaves the stream exactly where an + # unbounded one does. + states = [] + for cell in (SEALED_CELL, CORRIDOR_CELL): + session = self.sighting_session(seed=17, cell=cell) + instances = session.spawn("goblin", 2) + encounter_module.start_encounter( + session, groups=[("goblin", instances)], kind="wandering", pinned_stance=ReactionResult.INDIFFERENT + ) + states.append(session.streams.export_states()[ENCOUNTER_STREAM].model_dump(mode="json")) + assert states[0] == states[1] + + def test_the_bounded_roll_is_deterministic(self): + assert self.rolled(11, CHAMBER_CELL) == self.rolled(11, CHAMBER_CELL) + assert self.rolled(11, CORRIDOR_CELL) == self.rolled(11, CORRIDOR_CELL) + + # ------------------------------------------------------------------ helpers + + @staticmethod + def sighting_session(seed: int, cell) -> GameSession: + """A session on the sight-line level, party unlit and standing on `cell`.""" + session = GameSession.new(build_party(), build_sightline_adventure(), seed=seed) + session.execute(EnterDungeon(dungeon_id="sightlines")) + session.execute( + PlaceParty( + location=PartyLocation( + kind="dungeon", dungeon_id="sightlines", level_number=1, position=cell, facing=Direction.EAST + ) + ) + ) + return session + + @classmethod + def rolled(cls, seed: int, cell, *, open_closet: bool = False) -> int: + """The distance an unpinned encounter opens at, from `cell`, on `seed`.""" + session = cls.sighting_session(seed, cell) + if open_closet: + session.dungeon_state.door("sightlines:1:1,2:west").open = True + instances = session.spawn("goblin", 2) + encounter_module.start_encounter( + session, groups=[("goblin", instances)], kind="wandering", pinned_stance=ReactionResult.INDIFFERENT + ) + return session.encounter.groups[0].distance_feet + + class TestSurpriseFreeRounds: def test_surprised_monsters_grant_the_party_a_free_battle_round(self): # Scan for a seed where the monsters roll surprised while the party diff --git a/tests/test_example_crawler.py b/tests/test_example_crawler.py index e74da9e..50e439c 100644 --- a/tests/test_example_crawler.py +++ b/tests/test_example_crawler.py @@ -14,7 +14,7 @@ REPO_ROOT = Path(__file__).resolve().parent.parent SCRIPT = REPO_ROOT / "examples" / "tui_crawler" / "scripts" / "milestone.txt" -MILESTONE_SEED = 203 +MILESTONE_SEED = 21 def run_crawler(*arguments: str) -> subprocess.CompletedProcess: