diff --git a/docs/front-ends/tui-crawler.md b/docs/front-ends/tui-crawler.md index f015530..b9c5503 100644 --- a/docs/front-ends/tui-crawler.md +++ b/docs/front-ends/tui-crawler.md @@ -18,7 +18,7 @@ The crawler's loop is a `dispatch` function that turns one line of typed text in --8<-- "examples/tui_crawler/__main__.py:render-events" ``` -Every event has a [`Visibility`][osrlib.core.events.Visibility]. The crawler filters on `Visibility.PLAYER` here to keep referee-only bookkeeping out of the player's terminal. When you run the milestone script (`--seed 21 --script examples/tui_crawler/scripts/milestone.txt`), the game opens like this: +Every event has a [`Visibility`][osrlib.core.events.Visibility]. The crawler filters on `Visibility.PLAYER` here to keep referee-only bookkeeping out of the player's terminal. When you run the milestone script (`--seed 39 --script examples/tui_crawler/scripts/milestone.txt`), the game opens like this: ```text > enter @@ -29,8 +29,8 @@ Every event has a [`Visibility`][osrlib.core.events.Visibility]. The crawler fil > move e The party moves to (2, 0), facing east. The party enters area guard_room (level 1). - Encounter: 2 × Goblin at 20' — the party is surprised. - The monsters' bearing: uncertain. + Encounter: 2 × Goblin at 20' — the monsters are surprised. + The monsters' bearing: hostile. ``` The second line shows why the result envelope exists. When the party crossed the threshold, the interpreter activated the adventure's quest with a command it issued *inside* the player's `enter`, and the session added that command's events to the result of the `enter`. @@ -99,9 +99,10 @@ The interpreter is an ordinary [`Listener`][osrlib.crawl.session.Listener]: it r ```text > take idol_shrine - character-0001 acquires jade-idol and 17 gp in coin. - character-0003 acquires 17 gp in coin. - character-0004 acquires 16 gp in coin. + character-0001 acquires 13 gp in coin. + character-0002 acquires jade-idol and 13 gp in coin. + character-0003 acquires 12 gp in coin. + character-0004 acquires 12 gp in coin. Quest The Jade Idol: objective Recover the idol is done. The idol comes up out of the hollow, cold as well-water. ``` @@ -110,28 +111,32 @@ Then, four `move w` steps later, the homecoming: ```text > town The party enters town town. - The adventure ends: 0 XP from monsters and 50 XP from treasure — 16 XP to each of 3 survivor(s). - character-0001 gains 16 XP (base 16), now level 1. - character-0003 gains 17 XP (base 16), now level 1. - character-0004 gains 17 XP (base 16), now level 1. + The adventure ends: 0 XP from monsters and 50 XP from treasure — 12 XP to each of 4 survivor(s). + character-0001 gains 12 XP (base 12), now level 1. + character-0002 gains 12 XP (base 12), now level 1. + character-0003 gains 12 XP (base 12), now level 1. + character-0004 gains 10 XP (base 12), now level 1. Quest The Jade Idol: objective Bring it home is done. Threshold's gate shuts behind you with the idol inside it. Quest complete: The Jade Idol. The almoner counts out the reward without looking up. The idol is home. The adventure is over: The Jade Idol is finished. The almoner counts out the reward without looking up. The idol is home. character-0001 acquires 200 gp in coin. - character-0001 gains 1260 XP (base 1200), now level 1. - character-0003 gains 1320 XP (base 1200), now level 2. - character-0003 advances to level 2 (Footpad): +4 hp (rolled 4). - character-0004 gains 1320 XP (base 1200), now level 1. + character-0001 gains 1260 XP (base 1200), now level 2. + character-0001 advances to level 2 (Warrior): +9 hp (rolled 8). + character-0002 gains 1200 XP (base 1200), now level 2. + character-0002 advances to level 2 (Adept): +4 hp (rolled 3). + character-0003 gains 1200 XP (base 1200), now level 2. + character-0003 advances to level 2 (Footpad): +4 hp (rolled 2). + character-0004 gains 1080 XP (base 1200), now level 1. ``` -Two details of that output need explaining. The engine spreads the cache across the party by the ordinary loot rules, so which character walks home with the idol is whatever the split produced. Here it's the fighter. The cleric isn't in the list because the cleric died in the vault. The objective's `has_item` condition tests whether *the party* has the idol, not which member does. The completion beat then appears twice, on the quest's event and again on the adventure's, because each event includes the authored line and the formatter appends the beat on whatever event it's given. +Two details of that output need explaining. The engine spreads the cache across the party by the ordinary loot rules, so which character walks home with the idol is whatever the split produced. Here it's the cleric. All four members are in the list, because nobody died on the delve. The objective's `has_item` condition tests whether *the party* has the idol, not which member does. The completion beat then appears twice, on the quest's event and again on the adventure's, because each event includes the authored line and the formatter appends the beat on whatever event it's given. ### Why the milestone makes two trips The homecoming objective is a `town_entered` pattern narrowed by a `has_item` condition, so when the party walks back empty-handed, the objective doesn't fire. That condition is why `scripts/milestone.txt` makes four legs: 1. **Down**, for the goblins, their lair hoard, and the rival party prowling level 2. -2. **Home without the idol.** Returning to town resolves the end-of-adventure award, and the party sells its haul and buys a temple healing. Those town commands are legal here and nowhere later, because the adventure has not ended yet. Each coin counts as one coin of weight toward encumbrance, so the character who sold the haul uses `give` to spread the coins across the party before anyone moves again. +2. **Home without the idol.** Returning to town resolves the end-of-adventure award, and the party sells its haul and buys a temple healing. Those town commands are legal here and nowhere later, because the adventure has not ended yet. Each coin counts as one coin of weight toward encumbrance, so the characters who sold the richest pieces use `give` to spread the coins across the party before anyone moves again. 3. **Down again**, for the idol alone. 4. **Home with it**, which completes the second objective, completes the quest, and, because the quest has `concludes_adventure=True`, ends the session in `victory`. The rewards arrive *after* that transition: the 200 gp, the party's XP, and the `quest.idol` flag the crawler prints on its way out. diff --git a/examples/tui_crawler/README.md b/examples/tui_crawler/README.md index dfce233..325f2e7 100644 --- a/examples/tui_crawler/README.md +++ b/examples/tui_crawler/README.md @@ -33,7 +33,7 @@ quit Non-interactive mode replays a transcript with a fixed party and seed: ```sh -uv run python -m examples.tui_crawler --seed 21 --script examples/tui_crawler/scripts/milestone.txt +uv run python -m examples.tui_crawler --seed 39 --script examples/tui_crawler/scripts/milestone.txt ``` That transcript is the milestone playthrough, in two trips: the delve, a generated diff --git a/examples/tui_crawler/__main__.py b/examples/tui_crawler/__main__.py index 4bd8117..9447d77 100644 --- a/examples/tui_crawler/__main__.py +++ b/examples/tui_crawler/__main__.py @@ -13,6 +13,7 @@ from osrlib.core.events import Visibility from osrlib.core.items import Coins from osrlib.core.ruleset import Ruleset +from osrlib.crawl.battle import MELEE_RANGE_FEET, preview_battle_round from osrlib.crawl.commands import ( BattleDeclaration, EngageBattle, @@ -80,36 +81,64 @@ def _first_weapon_id(member) -> str | None: def _battle_round(session) -> ResolveBattleRound: - """One auto-declared battle round: front rank attacks, the rest close or hold. - - Both the roster and the rank come from the player view rather than a guess. - The round must name exactly the members able to act — a slept member named - alongside the rest bounces the whole round (`roster_mismatch`) — and how many - can fight abreast depends on the space the party stands in — two in a ten-foot - passage, more in a room — so a front end that assumed the first two would both - waste a legal attack and, in a narrow place, declare an illegal one and lose - the round. + """One auto-declared battle round: every member closes on the nearest group and fights it. + + The plan comes from the player view and the round preview, as any front end would build it. + The round must name exactly the members able to act, so the roster is the view's `declarers`. + A slept member named alongside the rest bounces the whole round (`roster_mismatch`). Each + member then gets the first of these plans that the preview accepts. + + 1. A member in the group's front rank attacks where they stand. + 2. A member who can reach the group this round attacks with `move="close"`, when the front rank + toward it still has a place. The front rank is as wide as the space the party stands in + allows: two in a ten-foot passage, more in a room. + 3. A member farther than 5' away closes without attacking. + 4. Anyone else holds. """ view = session.view(Visibility.PLAYER) - group = next(entry for entry in session.encounter.groups if not entry.fled) + encounter = view.encounter + rates = {member.id: member.encounter_rate_feet for member in view.party} members = {member.id: member for member in session.party.members} - front = view.encounter.front_rank - declarations = [] - for member in (members[member_id] for member_id in view.encounter.declarers): - weapon_id = _first_weapon_id(member) - if group.distance_feet > 5: - declarations.append( - BattleDeclaration(character_id=member.id, action="move", move="close", target_group_id=group.id) + groups = [group for group in encounter.groups if group.count and not group.fled] + if not groups: + return ResolveBattleRound( + declarations=tuple( + BattleDeclaration(character_id=member_id, action="hold") for member_id in encounter.declarers ) - elif member.id in front: - declarations.append( - BattleDeclaration( - character_id=member.id, action="attack", target_group_id=group.id, weapon_id=weapon_id + ) + group = min(groups, key=lambda entry: min(entry.member_distance_feet.values())) + planned: list[BattleDeclaration] = [] + for member_id in encounter.declarers: + distance = group.member_distance_feet[member_id] + attack = BattleDeclaration( + character_id=member_id, + action="attack", + target_group_id=group.id, + weapon_id=_first_weapon_id(members[member_id]), + ) + candidates = [] + if member_id in group.front_rank: + candidates.append(attack) + else: + taken = preview_battle_round(session, planned).front_rank[group.id] + room = encounter.formation_width is None or len(taken) < encounter.formation_width + if room and distance <= rates[member_id] + MELEE_RANGE_FEET: + candidates.append(attack.model_copy(update={"move": "close"})) + if distance > MELEE_RANGE_FEET: + candidates.append( + BattleDeclaration(character_id=member_id, action="move", move="close", target_group_id=group.id) ) + planned.append( + next( + ( + candidate + for candidate in candidates + if not preview_battle_round(session, [*planned, candidate]).rejections[member_id] + ), + BattleDeclaration(character_id=member_id, action="hold"), ) - else: - declarations.append(BattleDeclaration(character_id=member.id, action="hold")) - return ResolveBattleRound(declarations=tuple(declarations)) + ) + return ResolveBattleRound(declarations=tuple(planned)) def _fight(session) -> None: diff --git a/examples/tui_crawler/scripts/milestone.txt b/examples/tui_crawler/scripts/milestone.txt index 9bca2cf..c4cd645 100644 --- a/examples/tui_crawler/scripts/milestone.txt +++ b/examples/tui_crawler/scripts/milestone.txt @@ -29,12 +29,14 @@ town # Town, while there is still an adventure to come back from: sell the haul, buy # the healing, bank the first award. sell all -heal character-0001 cure_light_wounds +# The cleric took the worst of the rivals' blows, so the temple's healing goes +# to the cleric. +heal character-0002 cure_light_wounds # Coin weighs a coin apiece, and the party moves at its slowest member's rate, so -# the seller's purse is spread before anybody walks anywhere. The cleric fell in -# the vault and coin does a corpse no good, so the load goes to the two who walk. -give character-0001 character-0003 550 -give character-0001 character-0004 550 +# the sellers' purses are spread before anybody walks anywhere. The fighter and the +# cleric sold the richest pieces, so they hand coin to the two who carry least. +give character-0001 character-0004 400 +give character-0002 character-0003 250 status # Trip two: the idol, and the walk home that ends it. enter diff --git a/tests/generate_phase4_goldens.py b/tests/generate_phase4_goldens.py index 9f64ade..42b2869 100644 --- a/tests/generate_phase4_goldens.py +++ b/tests/generate_phase4_goldens.py @@ -24,8 +24,9 @@ from osrlib.core.character import party_to_document from osrlib.core.combat import incapacitated from osrlib.core.effects import Condition, has_condition -from osrlib.core.events import Event +from osrlib.core.events import Event, Visibility from osrlib.core.items import Coins +from osrlib.crawl.battle import MELEE_RANGE_FEET, preview_battle_round from osrlib.crawl.commands import ( BattleDeclaration, Command, @@ -200,28 +201,26 @@ def fight(self, *, wandering: bool = False, checkpoint: str | None = None) -> No self.beats.wandering_battle_won = True def build_declarations(self, round_number: int, *, allow_area: bool = False): + """Plan one round from the player view, the way a game would. + + The target is the living group nearest any member. Clerics turn undead in the first round + and heal the wounded after that, and the magic-user casts when the moment suits a spell. + Every other declarer closes on the target and fights it, as `melee_declaration` plans. + """ session = self.session - groups = [ - group - for group in session.encounter.groups - if not group.fled - and any(not has_condition(session.monsters[mid], Condition.DEAD) for mid in group.monster_ids) - ] - target = min(groups, key=lambda group: group.distance_feet) if groups else None - declarations = [] - undead = target is not None and "undead" in session.monsters[target.monster_ids[0]].template.categories - from osrlib.crawl.battle import _monster_pool, _party_front_rank - - front = _party_front_rank(session) - for member in session.party.living_members(): - if incapacitated(member): - continue + view = session.view(Visibility.PLAYER) + encounter = view.encounter + rates = {member.id: member.encounter_rate_feet for member in view.party} + groups = [group for group in encounter.groups if group.count and not group.fled] + if not groups: + return tuple(BattleDeclaration(character_id=member_id, action="hold") for member_id in encounter.declarers) + target = min(groups, key=lambda group: min(group.member_distance_feet.values())) + monsters = self.target_monsters(target.id) + undead = "undead" in getattr(getattr(monsters[0], "template", None), "categories", ()) + planned: list[BattleDeclaration] = [] + for member_id in encounter.declarers: + member = session.member(member_id) declaration = None - if target is None: - declaration = BattleDeclaration(character_id=member.id, action="hold") - declarations.append(declaration) - continue - pool = _monster_pool(session, target) if member.class_id == "cleric" and undead and round_number == 1: declaration = BattleDeclaration(character_id=member.id, action="turn_undead") elif member.class_id == "cleric": @@ -244,33 +243,56 @@ def build_declarations(self, round_number: int, *, allow_area: bool = False): targets=(wounded.id,), ) elif member.class_id == "magic_user": - declaration = self.magic_user_declaration(member, target, pool, allow_area) + declaration = self.magic_user_declaration(member, target, monsters, allow_area) if declaration is None: weapon = next( (item.template.id for item in member.inventory.wielded if item.template.item_type == "weapon"), None, ) - if member in front and target.distance_feet <= 5 and pool: - declaration = BattleDeclaration( - character_id=member.id, action="attack", target_group_id=target.id, weapon_id=weapon - ) - elif member is front[0] and target.distance_feet > 5: - declaration = BattleDeclaration( - character_id=member.id, action="move", move="close", target_group_id=target.id - ) - else: - declaration = BattleDeclaration(character_id=member.id, action="hold") - declarations.append(declaration) - return tuple(declarations) - - def magic_user_declaration(self, member, target, pool, allow_area: bool): - session = self.session + declaration = self.melee_declaration(member.id, rates[member.id], target, weapon, planned, encounter) + planned.append(declaration) + return tuple(planned) + + def target_monsters(self, group_id: str) -> list: + """The target group's living monsters the party can see, for a spell's targets.""" + group = next(group for group in self.session.encounter.groups if group.id == group_id) + living = [self.session.combatant(monster_id) for monster_id in group.monster_ids] + living = [monster for monster in living if not has_condition(monster, Condition.DEAD)] + visible = [monster for monster in living if not has_condition(monster, Condition.INVISIBLE)] + return visible or living + + def melee_declaration(self, member_id, rate, target, weapon, planned, encounter) -> BattleDeclaration: + """Close on the target and fight it, choosing the first plan the round preview accepts. + + A member in the target's front rank attacks where they stand. A member who can reach the + target this round, while its front rank has a place left, attacks with `move="close"`. A + member who can't reach it, or finds the front rank full, closes without attacking. A + member who can do none of these holds. + """ + attack = BattleDeclaration(character_id=member_id, action="attack", target_group_id=target.id, weapon_id=weapon) + close = BattleDeclaration(character_id=member_id, action="move", move="close", target_group_id=target.id) + distance = target.member_distance_feet[member_id] + candidates = [] + if member_id in target.front_rank: + candidates.append(attack) + else: + projected = preview_battle_round(self.session, planned).front_rank[target.id] + room = encounter.formation_width is None or len(projected) < encounter.formation_width + if room and distance <= rate + MELEE_RANGE_FEET: + candidates.append(attack.model_copy(update={"move": "close"})) + if distance > MELEE_RANGE_FEET: + candidates.append(close) + for candidate in candidates: + if not preview_battle_round(self.session, [*planned, candidate]).rejections[member_id]: + return candidate + return BattleDeclaration(character_id=member_id, action="hold") + + def magic_user_declaration(self, member, target, monsters, allow_area: bool): memorized = [copy.spell_id for copy in member.memorized_spells] - living = [mid for mid in target.monster_ids if not has_condition(session.monsters[mid], Condition.DEAD)] - # The area beat lands in the wandering fight — the keyed goblins must be - # fought by hand so their morale gets a chance to break. Fire ball only - # beyond melee (friendly fire would catch the front rank at 5'). - if allow_area and "fire_ball" in memorized and len(living) >= 2 and target.distance_feet > 5: + # The area beat lands in the wandering fight. The keyed goblins must be fought by hand so + # their morale gets a chance to break. Fire ball goes only while nobody stands within 5' of + # the group, because friendly fire would catch a member in melee. + if allow_area and "fire_ball" in memorized and len(monsters) >= 2 and not target.front_rank: return BattleDeclaration( character_id=member.id, action="cast", @@ -278,15 +300,15 @@ def magic_user_declaration(self, member, target, pool, allow_area: bool): spell_mode="damage", target_group_id=target.id, ) - # Missiles wait for melee range: a cast declared while blows are landing - # is the disruption window the milestone needs. - if "magic_missile" in memorized and pool and target.distance_feet <= 5: + # Missiles wait until blows are landing on the group. When the magic-user stands in its + # front rank herself, a cast declared then is the disruption window the milestone needs. + if "magic_missile" in memorized and target.front_rank: return BattleDeclaration( character_id=member.id, action="cast", spell_id="magic_missile", spell_mode="missiles", - targets=(pool[0].id,), + targets=(monsters[0].id,), ) return None diff --git a/tests/generate_phase5_goldens.py b/tests/generate_phase5_goldens.py index ed5a5d6..d391bb9 100644 --- a/tests/generate_phase5_goldens.py +++ b/tests/generate_phase5_goldens.py @@ -47,7 +47,7 @@ HOARD_SEED = 20_260_705 NPC_SEED = 20_260_706 -MILESTONE_SEED = 21 # pinned with test_example_crawler.py: one seed, one script, two drivers +MILESTONE_SEED = 39 # shared 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 9e5c945..3bc99a0 100644 --- a/tests/goldens/phase4_delve.json +++ b/tests/goldens/phase4_delve.json @@ -1,8 +1,8 @@ { "checkpoints": { - "end": 164, - "mid_battle": 39, - "mid_exploration": 31 + "end": 123, + "mid_battle": 44, + "mid_exploration": 34 }, "command_log": [ { @@ -197,18 +197,38 @@ "source": null }, { - "command_type": "move_party", - "direction": "east", + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch", "source": null }, { - "command_type": "move_party", - "direction": "south", + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch", + "source": null + }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch", + "source": null + }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch", + "source": null + }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch", "source": null }, { "command_type": "move_party", - "direction": "north", + "direction": "east", "source": null }, { @@ -257,6 +277,18 @@ "direction": "south", "source": null }, + { + "character_id": "character-0002", + "command_type": "listen_at_door", + "direction": "south", + "source": null + }, + { + "character_id": "character-0001", + "command_type": "force_door", + "direction": "south", + "source": null + }, { "character_id": "character-0001", "command_type": "force_door", @@ -281,62 +313,77 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, "move": "close", + "replacement_id": 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", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": 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": "move", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null } @@ -347,65 +394,78 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "attack", + "action": "move", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": "sword" + "weapon_id": null }, { - "action": "attack", + "action": "move", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": "sword" + "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "cast", + "action": "move", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, - "spell_id": "magic_missile", - "spell_mode": "missiles", - "target_group_id": null, - "targets": [ - "monster-0001" - ], + "spell_id": null, + "spell_mode": null, + "target_group_id": "group-0001", + "targets": [], "weapon_id": null } ], @@ -416,9 +476,12 @@ "declarations": [ { "action": "move", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, @@ -427,139 +490,170 @@ "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null } ], "source": null }, + { + "command_type": "move_party", + "direction": "east", + "source": null + }, + { + "command_type": "take_treasure", + "feature_id": "coffer", + "recipient_id": null, + "source": null + }, + { + "character_id": "character-0002", + "command_type": "search", + "kind": "secret_doors", + "source": null + }, + { + "command_type": "engage_battle", + "source": null + }, { "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "hold", + "action": "attack", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": 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": "move", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "cast", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": null, + "spell_id": "fire_ball", + "spell_mode": "damage", + "target_group_id": "group-0002", "targets": [], "weapon_id": null } ], "source": null }, - { - "command_type": "move_party", - "direction": "east", - "source": null - }, - { - "command_type": "take_treasure", - "feature_id": "coffer", - "recipient_id": null, - "source": null - }, - { - "character_id": "character-0002", - "command_type": "search", - "kind": "secret_doors", - "source": null - }, { "command_type": "reorder_party", "order": [ @@ -610,42 +704,49 @@ "direction": "south", "source": null }, - { - "command_type": "engage_battle", - "source": null - }, { "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "cast", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, + "replacement_id": null, "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0002", - "targets": [], + "spell_id": "magic_missile", + "spell_mode": "missiles", + "target_group_id": null, + "targets": [ + "monster-0015" + ], "weapon_id": null }, { - "action": "hold", + "action": "attack", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0003", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, @@ -655,9 +756,12 @@ }, { "action": "hold", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, @@ -667,9 +771,12 @@ }, { "action": "turn_undead", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, @@ -684,34 +791,45 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "cast", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, + "replacement_id": null, "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0002", - "targets": [], + "spell_id": "magic_missile", + "spell_mode": "missiles", + "target_group_id": null, + "targets": [ + "monster-0015" + ], "weapon_id": null }, { - "action": "hold", + "action": "attack", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0003", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { "action": "hold", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, @@ -721,9 +839,12 @@ }, { "action": "hold", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, @@ -732,15 +853,20 @@ "weapon_id": null }, { - "action": "hold", + "action": "cast", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, "move": null, + "replacement_id": null, "reversed": false, - "spell_id": null, - "spell_mode": null, + "spell_id": "cure_light_wounds", + "spell_mode": "heal", "target_group_id": null, - "targets": [], + "targets": [ + "character-0005" + ], "weapon_id": null } ], @@ -751,61 +877,76 @@ "declarations": [ { "action": "move", + "back_stab": false, "character_id": "character-0005", + "gaze_defense": null, "item_id": null, "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", + "back_stab": false, "character_id": "character-0001", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "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", + "back_stab": false, "character_id": "character-0002", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "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", + "back_stab": false, "character_id": "character-0003", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "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", + "back_stab": false, "character_id": "character-0004", + "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", + "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0003", "targets": [], "weapon_id": null } @@ -850,6 +991,25 @@ "item_ids": [], "source": null }, + { + "character_id": "character-0001", + "coins": { + "cp": 0, + "ep": 0, + "gp": 10, + "pp": 0, + "sp": 0 + }, + "command_type": "drop_items", + "item_ids": [], + "source": null + }, + { + "character_id": "character-0001", + "command_type": "light_source", + "item_id": "torch", + "source": null + }, { "command_type": "move_party", "direction": "north", @@ -871,2589 +1031,518 @@ "source": null }, { - "command_type": "resolve_battle_round", - "declarations": [ + "command_type": "evade", + "drop": "none", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "wait", + "source": null + }, + { + "command_type": "move_party", + "direction": "north", + "source": null + }, + { + "command_type": "rest", + "hidden": false, + "kind": "night", + "source": null + }, + { + "character_id": "character-0005", + "command_type": "prepare_spells", + "selections": [ { - "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-0014" - ], - "weapon_id": null + "spell_id": "magic_missile" }, { - "action": "attack", - "character_id": "character-0001", - "item_id": null, - "move": null, "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0004", - "targets": [], - "weapon_id": "sword" + "spell_id": "magic_missile" }, { - "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 + "spell_id": "web" }, { - "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 + "spell_id": "web" }, { - "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 + "spell_id": "fire_ball" } ], "source": 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-0004", - "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-0004", - "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 - } - ], - "source": 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-0004", - "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-0004", - "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 - } - ], - "source": 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-0004", - "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-0004", - "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 - } - ], - "source": 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-0004", - "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-0004", - "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 - } - ], - "source": 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-0004", - "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-0004", - "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-0005" - ], - "weapon_id": null - } - ], - "source": null - }, - { - "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-0004", - "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": "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-0005" - ], - "weapon_id": null - } - ], - "source": null - }, - { - "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-0004", - "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 - } - ], - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "command_type": "move_party", - "direction": "north", - "source": null - }, - { - "command_type": "move_party", - "direction": "east", - "source": null - }, - { - "command_type": "move_party", - "direction": "south", - "source": null - }, - { - "command_type": "evade", - "drop": "none", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "wait", - "source": null - }, - { - "command_type": "move_party", - "direction": "north", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "night", - "source": null - }, - { - "character_id": "character-0005", - "command_type": "prepare_spells", - "selections": [ - { - "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" - } - ], - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "use_stairs", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "north", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "move_party", - "direction": "west", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "character_id": "character-0001", - "command_type": "light_source", - "item_id": "torch", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "rest", - "hidden": false, - "kind": "turn", - "source": null - }, - { - "command_type": "engage_battle", - "source": null - }, - { - "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": [], - "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 - } - ], - "source": null - }, - { - "command_type": "travel_to_town", - "source": null - } - ], - "defeated_monsters": [], - "event_log": [ - { - "character_id": "character-0001", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "origin": "grant", - "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" - ], - "origin": "purchase", - "visibility": "player" - }, - { - "character_id": "character-0002", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "origin": "grant", - "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" - ], - "origin": "purchase", - "visibility": "player" - }, - { - "character_id": "character-0003", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "origin": "grant", - "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" - ], - "origin": "purchase", - "visibility": "player" - }, - { - "character_id": "character-0004", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "origin": "grant", - "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" - ], - "origin": "purchase", - "visibility": "player" - }, - { - "character_id": "character-0005", - "code": "exploration.item.acquired", - "coins_gp_value": 150, - "event_type": "item_acquired", - "item_ids": [], - "origin": "grant", - "visibility": "player" - }, - { - "character_id": "character-0005", - "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "dagger", - "rations_standard", - "waterskin" - ], - "origin": "purchase", - "visibility": "player" - }, - { - "code": "exploration.location.entered", - "dungeon_id": null, - "event_type": "location_entered", - "level_number": 1, - "location_id": "halls", - "location_kind": "dungeon", - "narrative": null, - "transition_ref": null, - "via": "entrance", - "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": 721, - "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", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 1, - "location_id": "pit_hall", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, - "visibility": "player" - }, - { - "chance": 2, - "character_id": null, - "code": "exploration.detection.rolled", - "event_type": "detection_rolled", - "kind": "trap_spring", - "passed": false, - "roll": 5, - "visibility": "referee" - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 1, - "location_id": "pit_hall", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, - "visibility": "player" - }, - { - "chance": 2, - "character_id": null, - "code": "exploration.detection.rolled", - "event_type": "detection_rolled", - "kind": "trap_spring", - "passed": false, - "roll": 6, - "visibility": "referee" - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 1, - "location_id": "pit_hall", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, - "visibility": "player" - }, - { - "chance": 2, - "character_id": null, - "code": "exploration.detection.rolled", - "event_type": "detection_rolled", - "kind": "trap_spring", - "passed": false, - "roll": 4, - "visibility": "referee" - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 1, - "location_id": "pit_hall", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, - "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", - "direction": null, - "event_type": "trap", - "trap_ref": "halls:1:pit_hall", - "visibility": "player" - }, - { - "amount": 5, - "attacker_id": null, - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 5 - ], - "target_id": "character-0001", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 15, - "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0001", - "visibility": "referee" - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "narrative": null, - "visibility": "player", - "x": 2, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "narrative": null, - "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" - }, - { - "character_id": "character-0003", - "code": "exploration.listen.heard", - "direction": "south", - "event_type": "listened", - "visibility": "player" - }, - { - "character_id": "character-0001", - "code": "exploration.door.forced", - "direction": "south", - "event_type": "door", - "narrative": null, - "visibility": "player", - "x": 3, - "y": 0 - }, - { - "character_id": "character-0001", - "code": "exploration.item.consumed", - "event_type": "item_consumed", - "item_id": "iron_spikes", - "visibility": "player" - }, - { - "character_id": null, - "code": "exploration.door.wedged", - "direction": "south", - "event_type": "door", - "narrative": null, - "visibility": "player", - "x": 3, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "narrative": null, - "visibility": "player", - "x": 3, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 1, - "location_id": "guard_room", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, - "visibility": "player" - }, - { - "cache_ref": "cache-0001", - "code": "treasure.hoard.generated", - "coins_gp_value": 400, - "event_type": "hoard_generated", - "magic_item_ids": [], - "treasure_types": [ - "C" - ], - "valuable_ids": [], - "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": "indifferent", - "roll": 9, - "total": 9, - "visibility": "referee" - }, - { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "indifferent", - "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": [ - 2 - ], - "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", - "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": [ - 6 - ], - "total": 6 - }, - { - "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-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" - ], - "visibility": "player" - }, - { - "amount": 2, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic" - ], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "monster-0001", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 1, - "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": 1, - "target_id": "monster-0001", - "visibility": "referee" - }, - { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0002", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 15, - "total": 14, - "visibility": "player" - }, - { - "amount": 6, - "attacker_id": "character-0001", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 7 - ], - "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-0002", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0003", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 3, - "total": 2, - "visibility": "player" - }, - { - "code": "combat.morale.broke", - "event_type": "morale_checked", - "held": false, - "modifier": 0, - "roll": 12, - "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" - }, - { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 3, - "visibility": "player" - }, - { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - }, - { - "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-0001" - ], - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 45, - "event_type": "group_moved", - "group_id": "group-0001", - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 105, - "event_type": "group_moved", - "group_id": "group-0001", - "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": [ - 1 - ], - "total": 1 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "character-0005", - "group-0001" - ], - "visibility": "player" - }, - { - "code": "battle.group.moved", - "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" - }, - { - "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": "routed", - "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", - "narrative": null, - "visibility": "player", - "x": 4, - "y": 1 - }, - { - "character_id": "character-0001", - "code": "exploration.item.acquired", - "coins_gp_value": 80, - "event_type": "item_acquired", - "item_ids": [], - "origin": "treasure", - "visibility": "player" - }, - { - "character_id": "character-0002", - "code": "exploration.item.acquired", - "coins_gp_value": 80, - "event_type": "item_acquired", - "item_ids": [], - "origin": "treasure", - "visibility": "player" - }, - { - "character_id": "character-0003", - "code": "exploration.item.acquired", - "coins_gp_value": 80, - "event_type": "item_acquired", - "item_ids": [], - "origin": "treasure", - "visibility": "player" - }, - { - "character_id": "character-0004", - "code": "exploration.item.acquired", - "coins_gp_value": 80, - "event_type": "item_acquired", - "item_ids": [], - "origin": "treasure", - "visibility": "player" - }, - { - "character_id": "character-0005", - "code": "exploration.item.acquired", - "coins_gp_value": 80, - "event_type": "item_acquired", - "item_ids": [], - "origin": "treasure", - "visibility": "player" - }, - { - "chance": 3, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 5, - "visibility": "referee" - }, - { - "chance": 2, - "character_id": "character-0002", - "code": "exploration.detection.rolled", - "event_type": "detection_rolled", - "kind": "secret_doors", - "passed": true, - "roll": 1, - "visibility": "referee" - }, - { - "character_id": "character-0002", - "code": "exploration.search.found", - "event_type": "search_completed", - "found": [ - "secret_door:east" - ], - "kind": "secret_doors", - "visibility": "player" - }, - { - "character_id": null, - "code": "exploration.door.opened", - "direction": "east", - "event_type": "door", - "narrative": null, - "visibility": "player", - "x": 4, - "y": 1 - }, { "character_id": "character-0001", - "code": "exploration.item.consumed", - "event_type": "item_consumed", - "item_id": "iron_spikes", - "visibility": "player" - }, - { - "character_id": null, - "code": "exploration.door.wedged", - "direction": "east", - "event_type": "door", - "narrative": null, - "visibility": "player", - "x": 4, - "y": 1 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "narrative": null, - "visibility": "player", - "x": 5, - "y": 1 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "narrative": null, - "visibility": "player", - "x": 6, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": null, - "event_type": "location_entered", - "level_number": 2, - "location_id": "halls", - "location_kind": "level", - "narrative": null, - "transition_ref": "cell:halls:1:6,1", - "via": "stairs_down", - "visibility": "player" - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "character_id": null, - "code": "exploration.door.opened", - "direction": "south", - "event_type": "door", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "south", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 1 - }, - { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 2, - "location_id": "crypt", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, - "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": 6, - "side": "party", - "surprised": false, - "threshold": 2, - "visibility": "referee" - }, - { - "code": "encounter.started", - "count": 4, - "distance_feet": 10, - "event_type": "encounter_started", - "monster_name": "Skeleton", - "monsters_surprised": false, - "party_surprised": false, - "visibility": "player" - }, - { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", - "visibility": "player" - }, - { - "code": "battle.started", - "event_type": "battle_started", - "visibility": "player" + "command_type": "light_source", + "item_id": "torch", + "source": null }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 1, - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - }, - { - "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-0002" - ], - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0002", - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "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": 3, - "types": [ - { - "column": "1", - "outcome": "turn", - "template_id": "skeleton", - "threshold": null - } - ], - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "effects.effect.attached", - "effect_id": "effect-0002", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0007", - "visibility": "referee" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0002", - "event_type": "condition_gained", - "target_id": "monster-0007", - "visibility": "player" + "command_type": "use_stairs", + "source": null }, { - "code": "effects.effect.attached", - "effect_id": "effect-0003", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0008", - "visibility": "referee" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0003", - "event_type": "condition_gained", - "target_id": "monster-0008", - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "effects.effect.attached", - "effect_id": "effect-0004", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0009", - "visibility": "referee" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0004", - "event_type": "condition_gained", - "target_id": "monster-0009", - "visibility": "player" + "command_type": "move_party", + "direction": "north", + "source": null }, { - "code": "effects.effect.attached", - "effect_id": "effect-0005", - "event_type": "effect_attached", - "expires_round": null, - "kind": "turned", - "target_ref": "monster-0010", - "visibility": "referee" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "effects.condition.gained", - "condition": "turned", - "effect_id": "effect-0005", - "event_type": "condition_gained", - "target_id": "monster-0010", - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "battle.group.moved", - "distance_feet": 65, - "event_type": "group_moved", - "group_id": "group-0002", - "visibility": "player" + "command_type": "move_party", + "direction": "west", + "source": null }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 2, + "command_type": "travel_to_town", + "source": null + } + ], + "defeated_monsters": [], + "event_log": [ + { + "character_id": "character-0001", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "origin": "grant", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 6 - ], - "total": 6 - }, - { - "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-0002" + "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" ], + "origin": "purchase", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 45, - "event_type": "group_moved", - "group_id": "group-0002", + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "origin": "grant", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 105, - "event_type": "group_moved", - "group_id": "group-0002", + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "sword", + "chainmail", + "rations_standard", + "waterskin" + ], + "origin": "purchase", "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 3, + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "origin": "grant", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 3 - ], - "total": 3 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 4 - ], - "total": 4 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0002", - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "sword", + "leather", + "rations_standard", + "waterskin" ], + "origin": "purchase", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 165, - "event_type": "group_moved", - "group_id": "group-0002", + "character_id": "character-0004", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "origin": "grant", "visibility": "player" }, { - "code": "battle.ended.victory", - "event_type": "battle_ended", + "character_id": "character-0004", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "mace", + "chainmail", + "rations_standard", + "waterskin" + ], + "origin": "purchase", "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0007", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 - }, - { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0008", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "character_id": "character-0005", + "code": "exploration.item.acquired", + "coins_gp_value": 150, + "event_type": "item_acquired", + "item_ids": [], + "origin": "grant", + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0009", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "character_id": "character-0005", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "dagger", + "rations_standard", + "waterskin" + ], + "origin": "purchase", + "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0010", - "outcome": "routed", - "template_id": "skeleton", - "visibility": "player", - "xp": 10 + "code": "exploration.location.entered", + "dungeon_id": null, + "event_type": "location_entered", + "level_number": 1, + "location_id": "halls", + "location_kind": "dungeon", + "narrative": null, + "transition_ref": null, + "via": "entrance", + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0002", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0007", - "visibility": "referee" + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0002", - "event_type": "condition_removed", - "target_id": "monster-0007", + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0003", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0008", - "visibility": "referee" + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0003", - "event_type": "condition_removed", - "target_id": "monster-0008", + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0004", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0009", - "visibility": "referee" + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", + "visibility": "player" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0004", - "event_type": "condition_removed", - "target_id": "monster-0009", + "character_id": "character-0001", + "code": "exploration.light.failed", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0005", - "event_type": "effect_released", - "kind": "turned", - "target_ref": "monster-0010", + "code": "effects.effect.attached", + "effect_id": "effect-0001", + "event_type": "effect_attached", + "expires_round": 726, + "kind": "light", + "target_ref": "character-0001", "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "turned", - "effect_id": "effect-0005", - "event_type": "condition_removed", - "target_id": "monster-0010", + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "victory", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 1, + "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "north", + "facing": "south", "narrative": null, "visibility": "player", "x": 1, - "y": 0 + "y": 1 + }, + { + "code": "exploration.location.entered", + "dungeon_id": "halls", + "event_type": "location_entered", + "level_number": 1, + "location_id": "pit_hall", + "location_kind": "area", + "narrative": null, + "transition_ref": null, + "via": null, + "visibility": "player" + }, + { + "chance": 2, + "character_id": null, + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "trap_spring", + "passed": false, + "roll": 3, + "visibility": "referee" }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "east", + "facing": "north", "narrative": null, "visibility": "player", - "x": 2, + "x": 1, "y": 0 }, { - "character_id": null, - "code": "exploration.door.swung_shut", - "direction": "north", - "event_type": "door", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "south", "narrative": null, "visibility": "player", "x": 1, "y": 1 }, + { + "code": "exploration.location.entered", + "dungeon_id": "halls", + "event_type": "location_entered", + "level_number": 1, + "location_id": "pit_hall", + "location_kind": "area", + "narrative": null, + "transition_ref": null, + "via": null, + "visibility": "player" + }, + { + "chance": 2, + "character_id": null, + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "trap_spring", + "passed": false, + "roll": 3, + "visibility": "referee" + }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "east", + "facing": "north", "narrative": null, "visibility": "player", - "x": 3, + "x": 1, "y": 0 }, { @@ -3462,15 +1551,15 @@ "facing": "south", "narrative": null, "visibility": "player", - "x": 3, + "x": 1, "y": 1 }, { "code": "exploration.location.entered", "dungeon_id": "halls", "event_type": "location_entered", - "level_number": 2, - "location_id": "kennel_a", + "level_number": 1, + "location_id": "pit_hall", "location_kind": "area", "narrative": null, "transition_ref": null, @@ -3478,111 +1567,140 @@ "visibility": "player" }, { - "cache_ref": "cache-0002", - "code": "treasure.hoard.generated", - "coins_gp_value": 90, - "event_type": "hoard_generated", - "magic_item_ids": [], - "treasure_types": [ - "C" - ], - "valuable_ids": [ - "valuable-0001" - ], + "chance": 2, + "character_id": null, + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "trap_spring", + "passed": true, + "roll": 1, "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.trap.sprung", + "direction": null, + "event_type": "trap", + "trap_ref": "halls:1:pit_hall", + "visibility": "player" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": 5, - "side": "party", - "surprised": false, - "threshold": 2, + "amount": 1, + "attacker_id": null, + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "character-0001", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 11, + "event_type": "hit_points_reported", + "max_hp": 12, + "target_id": "character-0001", "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": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", + "narrative": null, + "visibility": "player", + "x": 1, + "y": 0 }, { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "hostile", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 2, + "y": 0 }, { - "code": "encounter.evasion.pursuit", - "event_type": "evasion", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 3, + "y": 0 }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 1, - "visibility": "player" + "chance": 3, + "character_id": "character-0003", + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "listening", + "passed": false, + "roll": 5, + "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.item.dropped", - "coins_gp_value": 10, - "event_type": "items_dropped", - "item_ids": [], + "character_id": "character-0003", + "code": "exploration.listen.silent", + "direction": "south", + "event_type": "listened", "visibility": "player" }, { - "code": "encounter.pursuit.distracted", - "event_type": "pursuit", - "gap_feet": 10, - "round": 2, - "visibility": "player" + "chance": 2, + "character_id": "character-0002", + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "listening", + "passed": true, + "roll": 1, + "visibility": "referee" }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "escaped", + "character_id": "character-0002", + "code": "exploration.listen.heard", + "direction": "south", + "event_type": "listened", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", + "character_id": "character-0001", + "code": "exploration.door.stuck", + "direction": "south", + "event_type": "door", "narrative": null, "visibility": "player", "x": 3, "y": 0 }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", + "character_id": "character-0001", + "code": "exploration.door.forced", + "direction": "south", + "event_type": "door", "narrative": null, "visibility": "player", - "x": 4, + "x": 3, "y": 0 }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", + "character_id": "character-0001", + "code": "exploration.item.consumed", + "event_type": "item_consumed", + "item_id": "iron_spikes", + "visibility": "player" + }, + { + "character_id": null, + "code": "exploration.door.wedged", + "direction": "south", + "event_type": "door", "narrative": null, "visibility": "player", - "x": 5, + "x": 3, "y": 0 }, { @@ -3591,15 +1709,15 @@ "facing": "south", "narrative": null, "visibility": "player", - "x": 5, + "x": 3, "y": 1 }, { "code": "exploration.location.entered", "dungeon_id": "halls", "event_type": "location_entered", - "level_number": 2, - "location_id": "kennel_b", + "level_number": 1, + "location_id": "guard_room", "location_kind": "area", "narrative": null, "transition_ref": null, @@ -3607,22 +1725,15 @@ "visibility": "player" }, { - "cache_ref": "cache-0003", + "cache_ref": "cache-0001", "code": "treasure.hoard.generated", - "coins_gp_value": 100, + "coins_gp_value": 200, "event_type": "hoard_generated", - "magic_item_ids": [ - "magic-item-0001", - "magic-item-0002" - ], + "magic_item_ids": [], "treasure_types": [ "C" ], - "valuable_ids": [ - "valuable-0002", - "valuable-0003", - "valuable-0004" - ], + "valuable_ids": [], "visibility": "referee" }, { @@ -3637,42 +1748,35 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 1, + "roll": null, "side": "party", - "surprised": true, + "surprised": false, "threshold": 2, "visibility": "referee" }, { "code": "encounter.started", - "count": 3, + "count": 6, "distance_feet": 10, "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", + "party_surprised": false, "visibility": "player" }, { - "code": "effects.effect.expired", - "effect_id": "effect-0001", - "event_type": "effect_expired", - "kind": "light", - "round": 721, - "target_ref": "character-0001", + "code": "encounter.reaction.rolled", + "event_type": "reaction_rolled", + "modifier": 0, + "result": "uncertain", + "roll": 8, + "total": 8, "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.expired", - "event_type": "light", - "source": "torch", + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "uncertain", "visibility": "player" }, { @@ -3680,25 +1784,10 @@ "event_type": "battle_started", "visibility": "player" }, - { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0004", - "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", + "round": 1, "visibility": "player" }, { @@ -3716,117 +1805,173 @@ "key": "monsters", "modifier": 0, "rolls": [ - 5 + 1 ], - "total": 5 + "total": 1 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ - "group-0004", - "character-0005", "character-0001", "character-0002", "character-0003", - "character-0004" + "character-0004", + "character-0005", + "group-0001" ], "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0014", + "advance_feet": 5, + "character_id": "character-0001", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0002", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0003", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0004", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0005", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 10, - "defender_id": "character-0005", + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0001", "event_type": "attack_rolled", "modifier": 0, "natural": null, - "required": 9, - "roll": 18, - "total": 18, + "required": 13, + "roll": 7, + "total": 7, "visibility": "player" }, { - "amount": 1, - "attacker_id": "monster-0014", + "attack_name": "Sword", + "attacker_id": "character-0002", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "monster-0001", + "event_type": "attack_rolled", + "modifier": 3, + "natural": null, + "required": 13, + "roll": 12, + "total": 15, + "visibility": "player" + }, + { + "amount": 11, + "attacker_id": "character-0002", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 1 + 8 ], - "target_id": "character-0005", + "target_id": "monster-0001", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 19, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", + "max_hp": 4, + "target_id": "monster-0001", "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0015", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 6, - "total": 6, + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0001", "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0016", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 3, - "total": 3, + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0001", "visibility": "player" }, { - "caster_id": "character-0005", - "code": "magic.cast.disrupted", - "event_type": "spell_disrupted", - "reason": null, - "reversed": false, - "spell_id": "magic_missile", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 4, + "target_id": "monster-0001", + "visibility": "referee" + }, + { + "code": "combat.morale.broke", + "event_type": "morale_checked", + "held": false, + "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" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 2, - "total": 1, + "code": "battle.group.moved", + "distance_feet": 70, + "event_type": "group_moved", + "group_id": "group-0001", "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 3, + "round": 2, "visibility": "player" }, { @@ -3836,131 +1981,92 @@ "key": "party", "modifier": 0, "rolls": [ - 1 + 4 ], - "total": 1 + "total": 4 }, { "key": "monsters", "modifier": 0, "rolls": [ - 3 + 2 ], - "total": 3 + "total": 2 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ - "group-0004", - "character-0005", "character-0001", "character-0002", "character-0003", - "character-0004" + "character-0004", + "character-0005", + "group-0001" ], "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0014", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 8, - "total": 8, + "advance_feet": 25, + "character_id": "character-0001", + "code": "battle.member.moved", + "distance_feet": 45, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0015", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 5, - "defender_id": "character-0001", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 14, - "roll": 17, - "total": 17, + "advance_feet": 25, + "character_id": "character-0002", + "code": "battle.member.moved", + "distance_feet": 45, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", "visibility": "player" }, { - "amount": 3, - "attacker_id": "monster-0015", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 3 - ], - "target_id": "character-0001", + "advance_feet": 35, + "character_id": "character-0003", + "code": "battle.member.moved", + "distance_feet": 35, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 12, - "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0001", - "visibility": "referee" - }, - { - "attack_name": "weapon", - "attacker_id": "monster-0016", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 1, - "total": 1, + "advance_feet": 25, + "character_id": "character-0004", + "code": "battle.member.moved", + "distance_feet": 45, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "character-0005", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -2, - "natural": null, - "required": 13, - "roll": 11, - "total": 9, + "advance_feet": 45, + "character_id": "character-0005", + "code": "battle.member.moved", + "distance_feet": 25, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 2, - "total": 1, + "code": "battle.group.moved", + "distance_feet": 130, + "event_type": "group_moved", + "group_id": "group-0001", "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 4, + "round": 3, "visibility": "player" }, { @@ -3970,152 +2076,245 @@ "key": "party", "modifier": 0, "rolls": [ - 5 + 3 ], - "total": 5 + "total": 3 }, { "key": "monsters", "modifier": 0, "rolls": [ - 3 + 6 ], - "total": 3 + "total": 6 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ - "character-0005", + "group-0001", "character-0001", "character-0002", "character-0003", "character-0004", - "group-0004" + "character-0005" ], "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "character-0005", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -2, - "natural": null, - "required": 13, - "roll": 12, - "total": 10, + "code": "battle.group.moved", + "distance_feet": 190, + "event_type": "group_moved", + "group_id": "group-0001", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 19, - "total": 18, + "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": "routed", + "template_id": "goblin", + "visibility": "player", + "xp": 5 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0003", + "outcome": "routed", + "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", + "narrative": null, + "visibility": "player", + "x": 4, + "y": 1 + }, + { + "character_id": "character-0001", + "code": "exploration.item.acquired", + "coins_gp_value": 80, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 80, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 80, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0004", + "code": "exploration.item.acquired", + "coins_gp_value": 80, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0005", + "code": "exploration.item.acquired", + "coins_gp_value": 80, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "chance": 2, + "character_id": "character-0002", + "code": "exploration.detection.rolled", + "event_type": "detection_rolled", + "kind": "secret_doors", + "passed": true, + "roll": 1, + "visibility": "referee" + }, + { + "character_id": "character-0002", + "code": "exploration.search.found", + "event_type": "search_completed", + "found": [ + "secret_door:east" + ], + "kind": "secret_doors", "visibility": "player" }, { - "amount": 1, - "attacker_id": "character-0001", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "monster-0014", - "visibility": "player" + "chance": 3, + "code": "exploration.wandering.checked", + "encounter": true, + "event_type": "wandering_check", + "roll": 2, + "visibility": "referee" }, { - "code": "combat.state.hit_points", - "current_hp": 3, - "event_type": "hit_points_reported", - "max_hp": 4, - "target_id": "monster-0014", + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0014", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 6, - "total": 6, - "visibility": "player" + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 4, + "side": "party", + "surprised": false, + "threshold": 2, + "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0015", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 8, - "total": 8, + "code": "encounter.started", + "count": 8, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Trader", + "monsters_surprised": false, + "party_surprised": false, "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0016", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", + "code": "encounter.reaction.rolled", + "event_type": "reaction_rolled", "modifier": 0, - "natural": null, - "required": 9, - "roll": 11, - "total": 11, - "visibility": "player" + "result": "uncertain", + "roll": 7, + "total": 7, + "visibility": "referee" }, { - "amount": 2, - "attacker_id": "monster-0016", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 2 - ], - "target_id": "character-0005", + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "uncertain", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 17, - "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", - "visibility": "referee" + "code": "battle.started", + "event_type": "battle_started", + "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 5, + "round": 1, + "visibility": "player" + }, + { + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "fire_ball", "visibility": "player" }, { @@ -4125,328 +2324,307 @@ "key": "party", "modifier": 0, "rolls": [ - 4, - 2, - 5, - 2 + 4 ], - "total": 2 + "total": 4 }, { "key": "monsters", "modifier": 0, "rolls": [ - 4, - 2, - 5, - 3 + 2 ], - "total": 3 + "total": 2 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ - "group-0004", - "character-0005", "character-0001", "character-0002", "character-0003", - "character-0004" + "character-0004", + "character-0005", + "group-0002" ], "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0014", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", + "advance_feet": 5, + "character_id": "character-0001", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0002", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0002", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0002", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0003", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0002", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 5, + "character_id": "character-0004", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0002", + "move": "close", + "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-0007", + "monster-0008", + "monster-0009", + "monster-0010", + "monster-0011", + "monster-0012", + "monster-0013", + "monster-0014" + ], + "visibility": "player" + }, + { + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", "modifier": 0, - "natural": null, - "required": 9, - "roll": 15, - "total": 15, + "required": 16, + "roll": 2, + "target_id": "monster-0007", "visibility": "player" }, { - "amount": 5, - "attacker_id": "monster-0014", + "amount": 19, + "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [], + "keys": [ + "magic", + "fire" + ], "non_regenerable": false, "rolls": [ + 2, + 5, + 3, + 4, 5 ], - "target_id": "character-0005", + "target_id": "monster-0007", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 12, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", + "max_hp": 5, + "target_id": "monster-0007", "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0015", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 13, - "total": 13, + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0007", "visibility": "player" }, { - "amount": 1, - "attacker_id": "monster-0015", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "character-0005", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0007", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 11, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", + "max_hp": 5, + "target_id": "monster-0007", "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0016", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 5, - "defender_id": "character-0001", - "event_type": "attack_rolled", + "category": "spells", + "code": "combat.save.passed", + "event_type": "saving_throw_rolled", "modifier": 0, - "natural": null, - "required": 14, - "roll": 2, - "total": 2, - "visibility": "player" - }, - { - "attack_name": "Dagger", - "attacker_id": "character-0005", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -2, - "natural": null, - "required": 13, - "roll": 19, - "total": 17, + "required": 16, + "roll": 17, + "target_id": "monster-0008", "visibility": "player" }, { - "amount": 1, + "amount": 8, "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [], + "keys": [ + "magic", + "fire" + ], "non_regenerable": false, "rolls": [ - 3 + 3, + 1, + 5, + 2, + 6 ], - "target_id": "monster-0014", + "target_id": "monster-0008", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 2, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 4, - "target_id": "monster-0014", + "max_hp": 1, + "target_id": "monster-0008", "visibility": "referee" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 10, - "total": 9, - "visibility": "player" - }, - { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 6, + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0008", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 3 - ], - "total": 3 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0004", - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" - ], + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0008", "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0014", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 9, - "roll": 2, - "total": 2, - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 1, + "target_id": "monster-0008", + "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0015", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 10, - "defender_id": "character-0005", - "event_type": "attack_rolled", + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", "modifier": 0, - "natural": null, - "required": 9, - "roll": 9, - "total": 9, + "required": 16, + "roll": 11, + "target_id": "monster-0009", "visibility": "player" }, { - "amount": 6, - "attacker_id": "monster-0015", + "amount": 12, + "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [], + "keys": [ + "magic", + "fire" + ], "non_regenerable": false, "rolls": [ - 6 + 1, + 5, + 2, + 1, + 3 ], - "target_id": "character-0005", + "target_id": "monster-0009", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 5, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", + "max_hp": 5, + "target_id": "monster-0009", "visibility": "referee" }, { - "attack_name": "weapon", - "attacker_id": "monster-0016", - "back_stab": false, - "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, + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0009", "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "character-0005", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -2, - "natural": null, - "required": 13, - "roll": 6, - "total": 4, + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0009", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0014", - "event_type": "attack_rolled", - "modifier": -1, - "natural": null, - "required": 13, - "roll": 19, - "total": 18, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0009", + "visibility": "referee" + }, + { + "category": "spells", + "code": "combat.save.passed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 17, + "target_id": "monster-0010", "visibility": "player" }, { - "amount": 7, - "attacker_id": "character-0001", + "amount": 8, + "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [], + "keys": [ + "magic", + "fire" + ], "non_regenerable": false, "rolls": [ - 8 + 1, + 4, + 2, + 6, + 3 ], - "target_id": "monster-0014", + "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-0014", + "max_hp": 6, + "target_id": "monster-0010", "visibility": "referee" }, { @@ -4454,126 +2632,119 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0014", + "target_id": "monster-0010", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0014", + "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-0014", + "max_hp": 6, + "target_id": "monster-0010", "visibility": "referee" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 7, - "visibility": "player" - }, - { - "caster_id": "character-0004", - "code": "battle.spell.declared", - "event_type": "spell_declared", - "reversed": false, - "spell_id": "cure_light_wounds", + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 9, + "target_id": "monster-0011", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 1 - ], - "total": 1 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 2 - ], - "total": 2 - } + "amount": 22, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0004", - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004" + "non_regenerable": false, + "rolls": [ + 6, + 6, + 6, + 1, + 3 ], + "target_id": "monster-0011", "visibility": "player" }, { - "code": "combat.morale.broke", - "event_type": "morale_checked", - "held": false, - "modifier": 0, - "roll": 10, - "score": 7, - "subject": "group-0004", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0011", "visibility": "referee" }, { - "code": "battle.side.fled", - "event_type": "monster_fled", - "group_id": "group-0004", + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0011", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 65, - "event_type": "group_moved", - "group_id": "group-0004", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0011", "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "character-0005", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 6, - "defender_id": "monster-0015", - "event_type": "attack_rolled", - "modifier": 1, - "natural": null, - "required": 13, - "roll": 17, - "total": 18, + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0011", + "visibility": "referee" + }, + { + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 13, + "target_id": "monster-0012", "visibility": "player" }, { - "amount": 4, + "amount": 10, "attacker_id": "character-0005", "code": "combat.damage.dealt", "event_type": "damage_dealt", - "keys": [], + "keys": [ + "magic", + "fire" + ], "non_regenerable": false, "rolls": [ - 4 + 4, + 3, + 1, + 1, + 1 ], - "target_id": "monster-0015", + "target_id": "monster-0012", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0015", + "max_hp": 8, + "target_id": "monster-0012", "visibility": "referee" }, { @@ -4581,239 +2752,219 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "monster-0015", + "target_id": "monster-0012", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "monster-0015", + "target_id": "monster-0012", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 1, - "target_id": "monster-0015", + "max_hp": 8, + "target_id": "monster-0012", "visibility": "referee" }, { - "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-0005" - ], + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 2, + "target_id": "monster-0013", "visibility": "player" }, { - "amount": 3, - "code": "combat.healing.applied", - "event_type": "healing_applied", - "source": "magical", - "target_id": "character-0005", + "amount": 15, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" + ], + "non_regenerable": false, + "rolls": [ + 6, + 4, + 2, + 1, + 2 + ], + "target_id": "monster-0013", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 8, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", + "max_hp": 5, + "target_id": "monster-0013", "visibility": "referee" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0016", - "event_type": "attack_rolled", - "modifier": 1, - "natural": null, - "required": 13, - "roll": 8, - "total": 9, + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0013", "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 8, + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0013", "visibility": "player" }, { - "caster_id": "character-0004", - "code": "battle.spell.declared", - "event_type": "spell_declared", - "reversed": false, - "spell_id": "cure_light_wounds", + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 5, + "target_id": "monster-0013", + "visibility": "referee" + }, + { + "category": "spells", + "code": "combat.save.failed", + "event_type": "saving_throw_rolled", + "modifier": 0, + "required": 16, + "roll": 11, + "target_id": "monster-0014", "visibility": "player" }, { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 4 - ], - "total": 4 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 3 - ], - "total": 3 - } + "amount": 19, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic", + "fire" ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0005", - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "group-0004" + "non_regenerable": false, + "rolls": [ + 5, + 6, + 1, + 6, + 1 ], + "target_id": "monster-0014", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 45, - "event_type": "group_moved", - "group_id": "group-0004", - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 0, + "event_type": "hit_points_reported", + "max_hp": 2, + "target_id": "monster-0014", + "visibility": "referee" }, { - "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-0005" - ], + "code": "effects.condition.gained", + "condition": "dead", + "effect_id": null, + "event_type": "condition_gained", + "target_id": "monster-0014", "visibility": "player" }, { - "amount": 6, - "code": "combat.healing.applied", - "event_type": "healing_applied", - "source": "magical", - "target_id": "character-0005", + "code": "combat.death.died", + "event_type": "death", + "target_id": "monster-0014", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 14, + "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 20, - "target_id": "character-0005", + "max_hp": 2, + "target_id": "monster-0014", "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 105, - "event_type": "group_moved", - "group_id": "group-0004", - "visibility": "player" - }, - { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 9, + "code": "battle.ended.victory", + "event_type": "battle_ended", "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-0004" - ], - "visibility": "player" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0007", + "outcome": "slain", + "template_id": "trader", + "visibility": "player", + "xp": 10 }, { - "code": "battle.group.moved", - "distance_feet": 85, - "event_type": "group_moved", - "group_id": "group-0004", - "visibility": "player" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0008", + "outcome": "slain", + "template_id": "trader", + "visibility": "player", + "xp": 10 }, { - "code": "battle.group.moved", - "distance_feet": 145, - "event_type": "group_moved", - "group_id": "group-0004", - "visibility": "player" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0009", + "outcome": "slain", + "template_id": "trader", + "visibility": "player", + "xp": 10 }, { - "code": "battle.ended.victory", - "event_type": "battle_ended", - "visibility": "player" + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0010", + "outcome": "slain", + "template_id": "trader", + "visibility": "player", + "xp": 10 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0014", + "monster_id": "monster-0011", "outcome": "slain", - "template_id": "goblin", + "template_id": "trader", "visibility": "player", - "xp": 5 + "xp": 10 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0015", + "monster_id": "monster-0012", "outcome": "slain", - "template_id": "goblin", + "template_id": "trader", "visibility": "player", - "xp": 5 + "xp": 10 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", - "monster_id": "monster-0016", - "outcome": "routed", - "template_id": "goblin", + "monster_id": "monster-0013", + "outcome": "slain", + "template_id": "trader", "visibility": "player", - "xp": 5 + "xp": 10 + }, + { + "code": "battle.monster.defeated", + "event_type": "monster_defeated", + "monster_id": "monster-0014", + "outcome": "slain", + "template_id": "trader", + "visibility": "player", + "xp": 10 }, { "code": "encounter.ended", @@ -4822,58 +2973,79 @@ "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", - "visibility": "player" + "character_id": null, + "code": "exploration.door.opened", + "direction": "east", + "event_type": "door", + "narrative": null, + "visibility": "player", + "x": 4, + "y": 1 }, { "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "exploration.item.consumed", + "event_type": "item_consumed", + "item_id": "iron_spikes", "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", - "visibility": "player" + "character_id": null, + "code": "exploration.door.wedged", + "direction": "east", + "event_type": "door", + "narrative": null, + "visibility": "player", + "x": 4, + "y": 1 }, { - "code": "effects.effect.attached", - "effect_id": "effect-0006", - "event_type": "effect_attached", - "expires_round": 1143, - "kind": "light", - "target_ref": "character-0001", - "visibility": "referee" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 5, + "y": 1 }, { - "character_id": "character-0001", - "code": "exploration.light.lit", - "event_type": "light", - "source": "torch", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 6, + "y": 1 + }, + { + "code": "exploration.location.entered", + "dungeon_id": null, + "event_type": "location_entered", + "level_number": 2, + "location_id": "halls", + "location_kind": "level", + "narrative": null, + "transition_ref": "cell:halls:1:6,1", + "via": "stairs_down", "visibility": "player" }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "north", + "facing": "east", "narrative": null, "visibility": "player", - "x": 5, + "x": 1, "y": 0 }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "east", + "character_id": null, + "code": "exploration.door.opened", + "direction": "south", + "event_type": "door", "narrative": null, "visibility": "player", - "x": 6, + "x": 1, "y": 0 }, { @@ -4882,7 +3054,7 @@ "facing": "south", "narrative": null, "visibility": "player", - "x": 6, + "x": 1, "y": 1 }, { @@ -4890,25 +3062,13 @@ "dungeon_id": "halls", "event_type": "location_entered", "level_number": 2, - "location_id": "kennel_c", + "location_id": "crypt", "location_kind": "area", "narrative": null, "transition_ref": null, "via": null, "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": [], - "visibility": "referee" - }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", @@ -4921,20 +3081,20 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 5, + "roll": 2, "side": "party", - "surprised": false, + "surprised": true, "threshold": 2, "visibility": "referee" }, { "code": "encounter.started", - "count": 3, + "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" }, { @@ -4944,731 +3104,875 @@ "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.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 8, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 9, - "visibility": "player" - }, - { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 10, + "code": "battle.started", + "event_type": "battle_started", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 11, + "code": "battle.group.moved", + "distance_feet": 5, + "event_type": "group_moved", + "group_id": "group-0003", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 12, + "attack_name": "weapon", + "attacker_id": "monster-0015", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 3, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 16, + "roll": 13, + "total": 13, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 13, + "attack_name": "weapon", + "attacker_id": "monster-0016", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 3, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 16, + "roll": 8, + "total": 8, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 14, + "attack_name": "weapon", + "attacker_id": "monster-0017", + "back_stab": false, + "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" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 15, + "attack_name": "weapon", + "attacker_id": "monster-0018", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 17, + "total": 17, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 16, + "amount": 4, + "attacker_id": "monster-0018", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "character-0005", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 17, - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 5, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "character-0005", + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 18, + "code": "battle.round.started", + "event_type": "battle_round", + "round": 2, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 19, + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "magic_missile", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 20, + "code": "combat.initiative.rolled", + "entries": [ + { + "key": "party", + "modifier": 0, + "rolls": [ + 6, + 4 + ], + "total": 4 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 6, + 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": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 21, + "attack_name": "weapon", + "attacker_id": "monster-0015", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 13, + "total": 13, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 22, + "amount": 2, + "attacker_id": "monster-0015", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 2 + ], + "target_id": "character-0005", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 23, - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 3, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "character-0005", + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 24, + "attack_name": "weapon", + "attacker_id": "monster-0016", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 3, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 16, + "roll": 11, + "total": 11, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 25, + "attack_name": "weapon", + "attacker_id": "monster-0017", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 9, + "defender_id": "character-0005", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 10, + "roll": 13, + "total": 13, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 26, + "amount": 2, + "attacker_id": "monster-0017", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 2 + ], + "target_id": "character-0005", "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 27, - "visibility": "player" + "code": "combat.state.hit_points", + "current_hp": 1, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "character-0005", + "visibility": "referee" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 28, + "attack_name": "weapon", + "attacker_id": "monster-0018", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 3, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 16, + "roll": 11, + "total": 11, "visibility": "player" }, { - "code": "encounter.pursuit.round", - "event_type": "pursuit", - "gap_feet": 10, - "round": 29, + "caster_id": "character-0005", + "code": "magic.cast.disrupted", + "event_type": "spell_disrupted", + "reason": null, + "reversed": false, + "spell_id": "magic_missile", "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0007", - "event_type": "effect_attached", - "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0005", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0007", - "event_type": "condition_gained", - "target_id": "character-0005", + "affected_ids": [ + "monster-0015", + "monster-0016", + "monster-0017", + "monster-0018" + ], + "caster_id": "character-0004", + "code": "magic.turning.turned", + "event_type": "undead_turned", + "hd_pool": 7, + "roll": 12, + "types": [ + { + "column": "1", + "outcome": "turn", + "template_id": "skeleton", + "threshold": null + } + ], "visibility": "player" }, { "code": "effects.effect.attached", - "effect_id": "effect-0008", + "effect_id": "effect-0002", "event_type": "effect_attached", "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0001", + "kind": "turned", + "target_ref": "monster-0015", "visibility": "referee" }, { "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0008", + "condition": "turned", + "effect_id": "effect-0002", "event_type": "condition_gained", - "target_id": "character-0001", + "target_id": "monster-0015", "visibility": "player" }, { "code": "effects.effect.attached", - "effect_id": "effect-0009", + "effect_id": "effect-0003", "event_type": "effect_attached", "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0002", + "kind": "turned", + "target_ref": "monster-0016", "visibility": "referee" }, { "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0009", + "condition": "turned", + "effect_id": "effect-0003", "event_type": "condition_gained", - "target_id": "character-0002", + "target_id": "monster-0016", "visibility": "player" }, { "code": "effects.effect.attached", - "effect_id": "effect-0010", + "effect_id": "effect-0004", "event_type": "effect_attached", "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0003", + "kind": "turned", + "target_ref": "monster-0017", "visibility": "referee" }, { "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0010", + "condition": "turned", + "effect_id": "effect-0004", "event_type": "condition_gained", - "target_id": "character-0003", + "target_id": "monster-0017", "visibility": "player" }, { "code": "effects.effect.attached", - "effect_id": "effect-0011", + "effect_id": "effect-0005", "event_type": "effect_attached", "expires_round": null, - "kind": "exhausted", - "target_ref": "character-0004", + "kind": "turned", + "target_ref": "monster-0018", "visibility": "referee" }, { "code": "effects.condition.gained", - "condition": "exhausted", - "effect_id": "effect-0011", + "condition": "turned", + "effect_id": "effect-0005", "event_type": "condition_gained", - "target_id": "character-0004", - "visibility": "player" - }, - { - "code": "encounter.exhaustion.gained", - "event_type": "exhaustion", + "target_id": "monster-0018", "visibility": "player" }, { - "code": "encounter.pursuit.escaped", - "event_type": "pursuit", - "gap_feet": 10, - "round": 30, + "attack_name": "Sword", + "attacker_id": "character-0001", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 7, + "defender_id": "monster-0015", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 17, + "total": 17, "visibility": "player" }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "escaped", + "amount": 4, + "attacker_id": "character-0001", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "monster-0015", "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "narrative": null, - "visibility": "player", - "x": 6, - "y": 0 - }, - { - "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, + "code": "combat.state.hit_points", + "current_hp": 3, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "monster-0015", "visibility": "referee" }, { - "code": "effects.effect.expired", - "effect_id": "effect-0006", - "event_type": "effect_expired", - "kind": "light", - "round": 1143, - "target_ref": "character-0001", - "visibility": "referee" + "code": "battle.round.started", + "event_type": "battle_round", + "round": 3, + "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.expired", - "event_type": "light", - "source": "torch", + "caster_id": "character-0005", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "magic_missile", "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "caster_id": "character-0004", + "code": "battle.spell.declared", + "event_type": "spell_declared", + "reversed": false, + "spell_id": "cure_light_wounds", + "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": [ + 2 + ], + "total": 2 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 3 + ], + "total": 3 + } + ], + "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": 65, + "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" + "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-0015" + ], + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "amount": 3, + "attacker_id": "character-0005", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [ + "magic" + ], + "non_regenerable": false, + "rolls": [ + 2 + ], + "target_id": "monster-0015", + "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-0015", "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-0015", + "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-0015", + "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-0015", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "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-0005" + ], + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "amount": 4, + "code": "combat.healing.applied", + "event_type": "healing_applied", + "source": "magical", + "target_id": "character-0005", + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, + "code": "combat.state.hit_points", + "current_hp": 5, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "character-0005", "visibility": "referee" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "attack_name": "Sword", + "attacker_id": "character-0001", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 7, + "defender_id": "monster-0016", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 12, + "roll": 5, + "total": 5, + "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" }, { - "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": [ + 1 + ], + "total": 1 + }, + { + "key": "monsters", + "modifier": 0, + "rolls": [ + 3 + ], + "total": 3 + } + ], + "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": 125, + "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.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-0015", + "outcome": "slain", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 }, { - "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-0016", + "outcome": "routed", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 }, { - "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-0017", + "outcome": "routed", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 }, { - "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-0018", + "outcome": "routed", + "template_id": "skeleton", + "visibility": "player", + "xp": 10 }, { "code": "effects.effect.released", - "effect_id": "effect-0007", + "effect_id": "effect-0002", "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0005", + "kind": "turned", + "target_ref": "monster-0015", "visibility": "referee" }, { "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0007", + "condition": "turned", + "effect_id": "effect-0002", "event_type": "condition_removed", - "target_id": "character-0005", + "target_id": "monster-0015", "visibility": "player" }, { "code": "effects.effect.released", - "effect_id": "effect-0008", + "effect_id": "effect-0003", "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0001", + "kind": "turned", + "target_ref": "monster-0016", "visibility": "referee" }, { "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0008", + "condition": "turned", + "effect_id": "effect-0003", "event_type": "condition_removed", - "target_id": "character-0001", + "target_id": "monster-0016", "visibility": "player" }, { "code": "effects.effect.released", - "effect_id": "effect-0009", + "effect_id": "effect-0004", "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0002", + "kind": "turned", + "target_ref": "monster-0017", "visibility": "referee" }, { "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0009", + "condition": "turned", + "effect_id": "effect-0004", "event_type": "condition_removed", - "target_id": "character-0002", + "target_id": "monster-0017", "visibility": "player" }, { "code": "effects.effect.released", - "effect_id": "effect-0010", + "effect_id": "effect-0005", "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0003", + "kind": "turned", + "target_ref": "monster-0018", "visibility": "referee" }, { "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0010", + "condition": "turned", + "effect_id": "effect-0005", "event_type": "condition_removed", - "target_id": "character-0003", + "target_id": "monster-0018", + "visibility": "player" + }, + { + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "victory", + "visibility": "player" + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", + "narrative": null, + "visibility": "player", + "x": 1, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 2, + "y": 0 + }, + { + "character_id": null, + "code": "exploration.door.swung_shut", + "direction": "north", + "event_type": "door", + "narrative": null, + "visibility": "player", + "x": 1, + "y": 1 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "east", + "narrative": null, + "visibility": "player", + "x": 3, + "y": 0 + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "south", + "narrative": null, + "visibility": "player", + "x": 3, + "y": 1 + }, + { + "code": "exploration.location.entered", + "dungeon_id": "halls", + "event_type": "location_entered", + "level_number": 2, + "location_id": "kennel_a", + "location_kind": "area", + "narrative": null, + "transition_ref": null, + "via": null, "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0011", - "event_type": "effect_released", - "kind": "exhausted", - "target_ref": "character-0004", + "cache_ref": "cache-0002", + "code": "treasure.hoard.generated", + "coins_gp_value": 100, + "event_type": "hoard_generated", + "magic_item_ids": [], + "treasure_types": [ + "C" + ], + "valuable_ids": [], + "visibility": "referee" + }, + { + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, "visibility": "referee" }, { - "code": "effects.condition.removed", - "condition": "exhausted", - "effect_id": "effect-0011", - "event_type": "condition_removed", - "target_id": "character-0004", - "visibility": "player" + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 6, + "side": "party", + "surprised": false, + "threshold": 2, + "visibility": "referee" }, { - "code": "encounter.exhaustion.recovered", - "event_type": "exhaustion", + "code": "encounter.started", + "count": 3, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Goblin", + "monsters_surprised": false, + "party_surprised": false, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "night", + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", "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": "encounter.evasion.pursuit", + "event_type": "evasion", "visibility": "player" }, { - "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" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 1, + "visibility": "player" }, { - "chance": 0, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": null, - "visibility": "referee" + "character_id": "character-0001", + "code": "exploration.item.dropped", + "coins_gp_value": 10, + "event_type": "items_dropped", + "item_ids": [], + "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0012", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0005", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 2, + "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" + "character_id": "character-0001", + "code": "exploration.item.dropped", + "coins_gp_value": 10, + "event_type": "items_dropped", + "item_ids": [], + "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": "encounter.pursuit.distracted", + "event_type": "pursuit", + "gap_feet": 10, + "round": 3, + "visibility": "player" }, { - "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.ended", + "event_type": "encounter_ended", + "outcome": "escaped", + "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0016", - "event_type": "effect_attached", - "expires_round": null, - "kind": "fatigue", - "target_ref": "character-0004", + "code": "effects.effect.expired", + "effect_id": "effect-0001", + "event_type": "effect_expired", + "kind": "light", + "round": 726, + "target_ref": "character-0001", "visibility": "referee" }, { - "code": "exploration.fatigue.gained", - "event_type": "fatigue", + "character_id": "character-0001", + "code": "exploration.light.expired", + "event_type": "light", + "source": "torch", "visibility": "player" }, { "code": "effects.effect.attached", - "effect_id": "effect-0017", + "effect_id": "effect-0006", "event_type": "effect_attached", - "expires_round": 4440, + "expires_round": 1140, "kind": "light", "target_ref": "character-0001", "visibility": "referee" @@ -5683,25 +3987,7 @@ { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 5, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 4, - "y": 0 - }, - { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", + "facing": "north", "narrative": null, "visibility": "player", "x": 3, @@ -5710,419 +3996,418 @@ { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "west", + "facing": "east", "narrative": null, "visibility": "player", - "x": 2, + "x": 4, "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "west", + "facing": "east", "narrative": null, "visibility": "player", - "x": 1, + "x": 5, "y": 0 }, { "code": "exploration.party.moved", "event_type": "party_moved", - "facing": "west", + "facing": "south", "narrative": null, "visibility": "player", - "x": 0, - "y": 0 + "x": 5, + "y": 1 }, { "code": "exploration.location.entered", - "dungeon_id": null, + "dungeon_id": "halls", "event_type": "location_entered", - "level_number": 1, - "location_id": "halls", - "location_kind": "level", + "level_number": 2, + "location_id": "kennel_b", + "location_kind": "area", "narrative": null, - "transition_ref": "cell:halls:2:0,0", - "via": "stairs_up", + "transition_ref": null, + "via": null, "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 5, - "y": 1 + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": null, + "side": "monsters", + "surprised": false, + "threshold": 2, + "visibility": "referee" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 4, - "y": 1 + "code": "encounter.surprise.rolled", + "event_type": "surprise_rolled", + "roll": 6, + "side": "party", + "surprised": false, + "threshold": 2, + "visibility": "referee" }, { - "code": "exploration.location.entered", - "dungeon_id": "halls", - "event_type": "location_entered", - "level_number": 1, - "location_id": "guard_room", - "location_kind": "area", - "narrative": null, - "transition_ref": null, - "via": null, + "code": "encounter.started", + "count": 3, + "distance_feet": 10, + "event_type": "encounter_started", + "monster_name": "Goblin", + "monsters_surprised": false, + "party_surprised": false, "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 3, - "y": 1 + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", + "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "north", - "narrative": null, - "visibility": "player", - "x": 3, - "y": 0 + "code": "encounter.evasion.pursuit", + "event_type": "evasion", + "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 2, - "y": 0 + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 1, + "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 1, - "y": 0 + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 2, + "visibility": "player" }, { - "code": "exploration.party.moved", - "event_type": "party_moved", - "facing": "west", - "narrative": null, - "visibility": "player", - "x": 0, - "y": 0 + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 3, + "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 5, - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 4, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0012", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0005", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 5, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0013", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0001", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 6, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0014", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0002", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 7, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0015", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0003", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 8, + "visibility": "player" }, { - "code": "effects.effect.released", - "effect_id": "effect-0016", - "event_type": "effect_released", - "kind": "fatigue", - "target_ref": "character-0004", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 9, + "visibility": "player" }, { - "code": "exploration.fatigue.recovered", - "event_type": "fatigue", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 10, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 11, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 12, "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 4, - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 13, + "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 14, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 15, "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 3, - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 16, + "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 17, "visibility": "player" }, { - "code": "effects.effect.expired", - "effect_id": "effect-0017", - "event_type": "effect_expired", - "kind": "light", - "round": 4440, - "target_ref": "character-0001", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 18, + "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.expired", - "event_type": "light", - "source": "torch", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 19, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 20, "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.failed", - "event_type": "light", - "source": "torch", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 21, "visibility": "player" }, { - "code": "effects.effect.attached", - "effect_id": "effect-0018", - "event_type": "effect_attached", - "expires_round": 4801, - "kind": "light", - "target_ref": "character-0001", - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 22, + "visibility": "player" }, { - "character_id": "character-0001", - "code": "exploration.light.lit", - "event_type": "light", - "source": "torch", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 23, "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 3, - "visibility": "referee" + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 24, + "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 25, + "visibility": "player" + }, + { + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 26, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 27, "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 6, - "visibility": "referee" - }, - { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 28, "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.pursuit.round", + "event_type": "pursuit", + "gap_feet": 10, + "round": 29, "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 4, + "code": "effects.effect.attached", + "effect_id": "effect-0007", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0005", "visibility": "referee" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0007", + "event_type": "condition_gained", + "target_id": "character-0005", "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "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.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0008", + "event_type": "condition_gained", + "target_id": "character-0001", "visibility": "player" }, { - "code": "effects.effect.expired", - "effect_id": "effect-0018", - "event_type": "effect_expired", - "kind": "light", - "round": 4801, - "target_ref": "character-0001", + "code": "effects.effect.attached", + "effect_id": "effect-0009", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0002", "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.expired", - "event_type": "light", - "source": "torch", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0009", + "event_type": "condition_gained", + "target_id": "character-0002", "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 5, + "code": "effects.effect.attached", + "effect_id": "effect-0010", + "event_type": "effect_attached", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0003", "visibility": "referee" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0010", + "event_type": "condition_gained", + "target_id": "character-0003", "visibility": "player" }, { "code": "effects.effect.attached", - "effect_id": "effect-0019", + "effect_id": "effect-0011", "event_type": "effect_attached", - "expires_round": 5220, - "kind": "light", - "target_ref": "character-0001", + "expires_round": null, + "kind": "exhausted", + "target_ref": "character-0004", "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.lit", - "event_type": "light", - "source": "torch", + "code": "effects.condition.gained", + "condition": "exhausted", + "effect_id": "effect-0011", + "event_type": "condition_gained", + "target_id": "character-0004", "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.exhaustion.gained", + "event_type": "exhaustion", "visibility": "player" }, { - "chance": 2, - "code": "exploration.wandering.checked", - "encounter": false, - "event_type": "wandering_check", - "roll": 6, - "visibility": "referee" + "code": "encounter.pursuit.escaped", + "event_type": "pursuit", + "gap_feet": 10, + "round": 30, + "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "escaped", "visibility": "player" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", + "narrative": null, + "visibility": "player", + "x": 5, + "y": 0 }, { - "chance": 2, + "chance": 0, "code": "exploration.wandering.checked", "encounter": false, "event_type": "wandering_check", - "roll": 5, + "roll": null, "visibility": "referee" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "visibility": "player" - }, - { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { "code": "effects.effect.expired", - "effect_id": "effect-0019", + "effect_id": "effect-0006", "event_type": "effect_expired", "kind": "light", - "round": 5220, + "round": 1140, "target_ref": "character-0001", "visibility": "referee" }, @@ -6134,639 +4419,528 @@ "visibility": "player" }, { - "chance": 2, + "chance": 0, "code": "exploration.wandering.checked", "encounter": false, "event_type": "wandering_check", - "roll": 6, + "roll": null, "visibility": "referee" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "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-0020", - "event_type": "effect_attached", - "expires_round": 5583, - "kind": "light", - "target_ref": "character-0001", + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "character_id": "character-0001", - "code": "exploration.light.lit", - "event_type": "light", - "source": "torch", - "visibility": "player" - }, - { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "visibility": "player" - }, - { - "chance": 2, + "chance": 0, "code": "exploration.wandering.checked", "encounter": false, "event_type": "wandering_check", - "roll": 6, + "roll": null, "visibility": "referee" }, { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "visibility": "player" - }, - { - "code": "exploration.rest.rested", - "event_type": "rested", - "kind": "turn", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "chance": 2, + "chance": 0, "code": "exploration.wandering.checked", - "encounter": true, + "encounter": false, "event_type": "wandering_check", - "roll": 1, + "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, - "side": "monsters", - "surprised": false, - "threshold": 2, "visibility": "referee" }, { - "code": "encounter.surprise.rolled", - "event_type": "surprise_rolled", - "roll": 6, - "side": "party", - "surprised": false, - "threshold": 2, + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "code": "encounter.started", - "count": 6, - "distance_feet": 30, - "event_type": "encounter_started", - "monster_name": "Dwarf", - "monsters_surprised": false, - "party_surprised": false, - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "code": "encounter.reaction.rolled", - "event_type": "reaction_rolled", - "modifier": 0, - "result": "hostile", - "roll": 5, - "total": 5, + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "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": "exploration.rest.interrupted", - "event_type": "rested", - "kind": "turn", - "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.round.started", - "event_type": "battle_round", - "round": 1, - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "caster_id": "character-0005", - "code": "battle.spell.declared", - "event_type": "spell_declared", - "reversed": false, - "spell_id": "fire_ball", - "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": [ - 6 - ], - "total": 6 - }, - { - "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-0006" - ], - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "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" - ], - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.passed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 12, - "roll": 16, - "target_id": "monster-0020", - "visibility": "player" + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, + "visibility": "referee" }, { - "amount": 10, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 4, - 6, - 6, - 1, - 3 - ], - "target_id": "monster-0020", - "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": 6, - "target_id": "monster-0020", + "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-0020", - "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-0020", - "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": 6, - "target_id": "monster-0020", + "chance": 0, + "code": "exploration.wandering.checked", + "encounter": false, + "event_type": "wandering_check", + "roll": null, "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.passed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 12, - "roll": 14, - "target_id": "monster-0021", - "visibility": "player" + "code": "effects.effect.released", + "effect_id": "effect-0007", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0005", + "visibility": "referee" }, { - "amount": 8, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 4, - 4, - 2, - 3, - 3 - ], - "target_id": "monster-0021", + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0007", + "event_type": "condition_removed", + "target_id": "character-0005", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "monster-0021", + "code": "effects.effect.released", + "effect_id": "effect-0008", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0001", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0021", - "visibility": "player" - }, - { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0021", + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0008", + "event_type": "condition_removed", + "target_id": "character-0001", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "monster-0021", + "code": "effects.effect.released", + "effect_id": "effect-0009", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0002", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 12, - "roll": 5, - "target_id": "monster-0022", + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0009", + "event_type": "condition_removed", + "target_id": "character-0002", "visibility": "player" }, { - "amount": 21, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 4, - 6, - 4, - 5, - 2 - ], - "target_id": "monster-0022", + "code": "effects.effect.released", + "effect_id": "effect-0010", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0003", + "visibility": "referee" + }, + { + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0010", + "event_type": "condition_removed", + "target_id": "character-0003", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 2, - "target_id": "monster-0022", + "code": "effects.effect.released", + "effect_id": "effect-0011", + "event_type": "effect_released", + "kind": "exhausted", + "target_ref": "character-0004", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0022", + "code": "effects.condition.removed", + "condition": "exhausted", + "effect_id": "effect-0011", + "event_type": "condition_removed", + "target_id": "character-0004", "visibility": "player" }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0022", + "code": "encounter.exhaustion.recovered", + "event_type": "exhaustion", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 2, - "target_id": "monster-0022", - "visibility": "referee" - }, - { - "category": "spells", - "code": "combat.save.passed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 12, - "roll": 19, - "target_id": "monster-0023", + "code": "exploration.rest.rested", + "event_type": "rested", + "kind": "night", "visibility": "player" }, { - "amount": 11, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 3, - 5, - 3, - 6, - 6 + "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-0023", "visibility": "player" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 6, - "target_id": "monster-0023", + "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-0023", - "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-0023", - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0012", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0005", + "visibility": "referee" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 6, - "target_id": "monster-0023", + "code": "effects.effect.attached", + "effect_id": "effect-0013", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0001", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 12, - "roll": 7, - "target_id": "monster-0024", - "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" }, { - "amount": 21, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 6, - 2, - 6, - 2, - 5 - ], - "target_id": "monster-0024", - "visibility": "player" + "code": "effects.effect.attached", + "effect_id": "effect-0015", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0003", + "visibility": "referee" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 2, - "target_id": "monster-0024", + "code": "effects.effect.attached", + "effect_id": "effect-0016", + "event_type": "effect_attached", + "expires_round": null, + "kind": "fatigue", + "target_ref": "character-0004", "visibility": "referee" }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0024", + "code": "exploration.fatigue.gained", + "event_type": "fatigue", "visibility": "player" }, { - "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, + "visibility": "referee" }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 2, - "target_id": "monster-0024", + "code": "effects.effect.attached", + "effect_id": "effect-0017", + "event_type": "effect_attached", + "expires_round": 4440, + "kind": "light", + "target_ref": "character-0001", "visibility": "referee" }, { - "category": "spells", - "code": "combat.save.failed", - "event_type": "saving_throw_rolled", - "modifier": 0, - "required": 12, - "roll": 2, - "target_id": "monster-0025", + "character_id": "character-0001", + "code": "exploration.light.lit", + "event_type": "light", + "source": "torch", "visibility": "player" }, { - "amount": 19, - "attacker_id": "character-0005", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [ - "magic", - "fire" - ], - "non_regenerable": false, - "rolls": [ - 3, - 3, - 4, - 4, - 5 - ], - "target_id": "monster-0025", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, + "visibility": "player", + "x": 4, + "y": 0 }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "monster-0025", - "visibility": "referee" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, + "visibility": "player", + "x": 3, + "y": 0 }, { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "monster-0025", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, + "visibility": "player", + "x": 2, + "y": 0 }, { - "code": "combat.death.died", - "event_type": "death", - "target_id": "monster-0025", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, + "visibility": "player", + "x": 1, + "y": 0 }, { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 5, - "target_id": "monster-0025", - "visibility": "referee" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, + "visibility": "player", + "x": 0, + "y": 0 }, { - "code": "battle.ended.victory", - "event_type": "battle_ended", + "code": "exploration.location.entered", + "dungeon_id": null, + "event_type": "location_entered", + "level_number": 1, + "location_id": "halls", + "location_kind": "level", + "narrative": null, + "transition_ref": "cell:halls:2:0,0", + "via": "stairs_up", "visibility": "player" }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0020", - "outcome": "slain", - "template_id": "dwarf_monster", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, "visibility": "player", - "xp": 10 + "x": 5, + "y": 1 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0021", - "outcome": "slain", - "template_id": "dwarf_monster", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, "visibility": "player", - "xp": 10 + "x": 4, + "y": 1 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0022", - "outcome": "slain", - "template_id": "dwarf_monster", + "code": "exploration.location.entered", + "dungeon_id": "halls", + "event_type": "location_entered", + "level_number": 1, + "location_id": "guard_room", + "location_kind": "area", + "narrative": null, + "transition_ref": null, + "via": null, + "visibility": "player" + }, + { + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, "visibility": "player", - "xp": 10 + "x": 3, + "y": 1 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0023", - "outcome": "slain", - "template_id": "dwarf_monster", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "north", + "narrative": null, "visibility": "player", - "xp": 10 + "x": 3, + "y": 0 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0024", - "outcome": "slain", - "template_id": "dwarf_monster", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, "visibility": "player", - "xp": 10 + "x": 2, + "y": 0 }, { - "code": "battle.monster.defeated", - "event_type": "monster_defeated", - "monster_id": "monster-0025", - "outcome": "slain", - "template_id": "dwarf_monster", + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, "visibility": "player", - "xp": 10 + "x": 1, + "y": 0 }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "victory", - "visibility": "player" + "code": "exploration.party.moved", + "event_type": "party_moved", + "facing": "west", + "narrative": null, + "visibility": "player", + "x": 0, + "y": 0 }, { "code": "effects.effect.expired", - "effect_id": "effect-0020", + "effect_id": "effect-0017", "event_type": "effect_expired", "kind": "light", - "round": 5583, + "round": 4440, "target_ref": "character-0001", "visibility": "referee" }, @@ -6792,8 +4966,8 @@ { "code": "session.xp.adventure_award", "event_type": "adventure_xp_award", - "monster_xp": 145, - "share": 107, + "monster_xp": 150, + "share": 106, "survivors": [ "character-0005", "character-0001", @@ -6801,101 +4975,101 @@ "character-0003", "character-0004" ], - "treasure_xp": 390, + "treasure_xp": 380, "visibility": "player" }, { - "award": 107, + "award": 106, "character_id": "character-0005", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 5, - "modified_award": 107, + "modified_award": 95, "visibility": "player" }, { - "award": 107, + "award": 106, "character_id": "character-0001", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 96, + "modified_award": 106, "visibility": "player" }, { - "award": 107, + "award": 106, "character_id": "character-0002", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 107, + "modified_award": 116, "visibility": "player" }, { - "award": 107, + "award": 106, "character_id": "character-0003", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 107, + "modified_award": 111, "visibility": "player" }, { - "award": 107, + "award": 106, "character_id": "character-0004", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 3, - "modified_award": 112, + "modified_award": 95, "visibility": "player" } ], - "final_clock_rounds": 5880, + "final_clock_rounds": 4440, "final_stream_states": { "advancement": { - "inc": 113243744790816010613151420947305037465, - "state": 208725096245414889025684969862103476275 + "inc": 272646792232726225915060654498294683927, + "state": 163167264044106837772160330596949337033 }, "combat": { - "inc": 44709791918341101804273230237917689853, - "state": 206864652817984283375735748349787118283 + "inc": 159344246211932510829509303919493217123, + "state": 266092290009948186413498475371547777123 }, "effects": { - "inc": 91993697294787309789705346441374335659, - "state": 253066508392588997121851300724168097384 + "inc": 298377397402987849268447613059820517369, + "state": 150049346102533177166002835449060298988 }, "encounter": { - "inc": 124745415932594472056637880636198494837, - "state": 90383700679117698804019353958769950919 + "inc": 239139560226367224550456105087055977279, + "state": 280877017995471485182801908643828390596 }, "exploration": { - "inc": 242027377581606098107272999573924134465, - "state": 168494530392127325437853323231762674854 + "inc": 58870989993950105463865753449319132533, + "state": 23188150114624227772845948615128867624 }, "magic": { - "inc": 92567502949956708021187032725477188211, - "state": 205742646734718465347963513427499084581 + "inc": 64654123892594440314868747719482884447, + "state": 326626037452018429351702931483507193982 }, "monster_action": { - "inc": 75599211217424111166269398409300423593, - "state": 299663134041012873165263030470571698075 + "inc": 245476423180491402428758236362725745815, + "state": 299028234278346889638385454755809456206 }, "monster_spawn": { - "inc": 174763484522250312737251725186899460159, - "state": 109037239688142463665720930723157838995 + "inc": 217435379808109970985149168047725339385, + "state": 185729478380643443071261143019342205804 }, "treasure": { - "inc": 107735246618521925166725734491143033759, - "state": 242074292042336389082923657544580860948 + "inc": 64876769079651964247929058068718478523, + "state": 195262128079322277640085158800050010808 }, "wandering": { - "inc": 114503017593253990138295154675246143887, - "state": 134702898590306211279190984873402069569 + "inc": 24344666656482066363855406459153995285, + "state": 9927203113919290975575528140867914194 } }, - "master_seed": 20260715, + "master_seed": 20260757, "party_document": { - "engine_version": "2.0.1", + "engine_version": "2.2.0", "kind": "party", "payload": { "characters": [ @@ -6904,7 +5078,7 @@ "carrying_treasure": false, "class_id": "fighter", "conditions": [], - "current_hp": 20, + "current_hp": 12, "extra_languages": [], "id": null, "inventory": { @@ -6912,7 +5086,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 60, + "gp": 130, "pp": 0, "sp": 0 }, @@ -6923,29 +5097,29 @@ "worn_armour": null }, "level": 3, - "max_hp": 20, + "max_hp": 12, "memorized_spells": [], "name": "Brakk", "nonregen_damage": 0, "race": "human", "scores": { - "cha": 12, - "con": 9, - "dex": 9, - "int": 6, - "str": 6, - "wis": 5 + "cha": 11, + "con": 13, + "dex": 16, + "int": 13, + "str": 11, + "wis": 10 }, "spell_book": [], "stat_modifiers": [], - "xp": 4320 + "xp": 4001 }, { "alignment": "lawful", "carrying_treasure": false, "class_id": "elf", "conditions": [], - "current_hp": 14, + "current_hp": 6, "extra_languages": [], "id": null, "inventory": { @@ -6953,7 +5127,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 130, + "gp": 90, "pp": 0, "sp": 0 }, @@ -6964,7 +5138,7 @@ "worn_armour": null }, "level": 3, - "max_hp": 14, + "max_hp": 6, "memorized_spells": [ { "reversed": false, @@ -6975,12 +5149,12 @@ "nonregen_damage": 0, "race": "elf", "scores": { - "cha": 15, - "con": 10, - "dex": 12, - "int": 10, - "str": 7, - "wis": 5 + "cha": 7, + "con": 9, + "dex": 11, + "int": 16, + "str": 18, + "wis": 10 }, "spell_book": [ "sleep" @@ -6993,7 +5167,7 @@ "carrying_treasure": false, "class_id": "thief", "conditions": [], - "current_hp": 7, + "current_hp": 9, "extra_languages": [], "id": null, "inventory": { @@ -7001,7 +5175,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 160, + "gp": 80, "pp": 0, "sp": 0 }, @@ -7012,18 +5186,18 @@ "worn_armour": null }, "level": 3, - "max_hp": 7, + "max_hp": 9, "memorized_spells": [], "name": "Sable", "nonregen_damage": 0, "race": "human", "scores": { - "cha": 5, - "con": 8, - "dex": 12, - "int": 14, - "str": 10, - "wis": 12 + "cha": 12, + "con": 9, + "dex": 14, + "int": 12, + "str": 12, + "wis": 13 }, "spell_book": [], "stat_modifiers": [], @@ -7034,7 +5208,7 @@ "carrying_treasure": false, "class_id": "cleric", "conditions": [], - "current_hp": 8, + "current_hp": 11, "extra_languages": [], "id": null, "inventory": { @@ -7042,7 +5216,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 60, + "gp": 100, "pp": 0, "sp": 0 }, @@ -7053,7 +5227,7 @@ "worn_armour": null }, "level": 3, - "max_hp": 8, + "max_hp": 11, "memorized_spells": [ { "reversed": false, @@ -7068,23 +5242,23 @@ "nonregen_damage": 0, "race": "human", "scores": { - "cha": 12, - "con": 5, - "dex": 10, - "int": 13, - "str": 15, - "wis": 14 + "cha": 14, + "con": 8, + "dex": 11, + "int": 10, + "str": 6, + "wis": 7 }, "spell_book": [], "stat_modifiers": [], - "xp": 3001 + "xp": 3240 }, { "alignment": "lawful", "carrying_treasure": false, "class_id": "magic_user", "conditions": [], - "current_hp": 20, + "current_hp": 9, "extra_languages": [], "id": null, "inventory": { @@ -7092,7 +5266,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 70, + "gp": 110, "pp": 0, "sp": 0 }, @@ -7103,7 +5277,7 @@ "worn_armour": null }, "level": 5, - "max_hp": 20, + "max_hp": 9, "memorized_spells": [ { "reversed": false, @@ -7130,11 +5304,11 @@ "nonregen_damage": 0, "race": "human", "scores": { - "cha": 13, - "con": 13, - "dex": 7, - "int": 9, - "str": 5, + "cha": 10, + "con": 10, + "dex": 11, + "int": 8, + "str": 8, "wis": 9 }, "spell_book": [ @@ -7144,7 +5318,7 @@ "fire_ball" ], "stat_modifiers": [], - "xp": 25001 + "xp": 25056 } ] }, @@ -7163,78 +5337,79 @@ "character-0005 acquires dagger, rations_standard, waterskin.", "The party enters dungeon halls (level 1).", "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.", + "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.", "The party moves to (1, 1), facing south.", "The party enters area pit_hall (level 1).", - "Detection roll (trap_spring): 5 vs 2-in-6 — failure.", - "The party moves to (1, 0), facing north.", - "The party moves to (1, 1), facing south.", - "The party enters area pit_hall (level 1).", - "Detection roll (trap_spring): 6 vs 2-in-6 — failure.", + "Detection roll (trap_spring): 3 vs 2-in-6 — failure.", "The party moves to (1, 0), facing north.", "The party moves to (1, 1), facing south.", "The party enters area pit_hall (level 1).", - "Detection roll (trap_spring): 4 vs 2-in-6 — failure.", + "Detection roll (trap_spring): 3 vs 2-in-6 — failure.", "The party moves to (1, 0), facing north.", "The party moves to (1, 1), facing south.", "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 5 damage.", - "character-0001 is at 15/20 hit points.", + "character-0001 takes 1 damage.", + "character-0001 is at 11/12 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.", - "character-0003 hears something beyond the south door.", + "Detection roll (listening, character-0003): 5 vs 3-in-6 — failure.", + "character-0003 hears nothing beyond the south door.", + "Detection roll (listening, character-0002): 1 vs 2-in-6 — success.", + "character-0002 hears something beyond the south door.", + "The door south of (3, 0) won't budge — character-0001 strains in vain.", "character-0001 forces the door south of (3, 0) open.", "character-0001 uses up iron_spikes.", "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): 400 gp in coin, 0 valuable(s), 0 magic item(s).", + "Treasure generated at cache-0001 (C): 200 gp in coin, 0 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 10'.", - "Reaction roll: 9+0 = 9 — indifferent.", - "The monsters' bearing: indifferent.", + "Reaction roll: 8+0 = 8 — uncertain.", + "The monsters' bearing: uncertain.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 2, monsters 6. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", - "group-0001 is now 5' away.", - "group-0001 is now 5' away.", - "Battle round 2 begins.", - "character-0005 begins casting magic_missile.", - "Initiative (side): party 6, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", - "character-0005 casts magic_missile [missiles] at monster-0001.", - "monster-0001 takes 2 damage from character-0005.", - "monster-0001 is at 0/1 hit points.", + "Initiative (side): party 3, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", + "character-0001 closes to 5' from group-0001.", + "character-0002 closes to 5' from group-0001.", + "character-0003 closes to 5' from group-0001.", + "character-0004 closes to 5' from group-0001.", + "character-0005 closes to 5' from group-0001.", + "character-0001 misses monster-0001 with Sword: rolled 7+0 = 7, needing 13.", + "character-0002 hits monster-0001 with Sword: rolled 12+3 = 15, needing 13.", + "monster-0001 takes 11 damage from character-0002.", + "monster-0001 is at 0/4 hit points.", "monster-0001 is dead.", "monster-0001 is killed.", - "monster-0001 is at 0/1 hit points.", - "character-0001 hits monster-0002 with Sword: rolled 15-1 = 14, needing 13.", - "monster-0002 takes 6 damage from character-0001.", - "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-0002 misses monster-0003 with Sword: rolled 3-1 = 2, needing 13.", - "Morale check for group-0001 (ML 7): rolled 12+0 — they flee or surrender.", + "monster-0001 is at 0/4 hit points.", + "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.", + "group-0001 is now 70' away.", + "Battle round 2 begins.", + "Initiative (side): party 4, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0001.", + "character-0001 closes to 45' from group-0001.", + "character-0002 closes to 45' from group-0001.", + "character-0003 closes to 35' from group-0001.", + "character-0004 closes to 45' from group-0001.", + "character-0005 closes to 25' from group-0001.", + "group-0001 is now 130' away.", "Battle round 3 begins.", - "Initiative (side): party 2, 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 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 85' away.", - "group-0001 is now 145' away.", + "Initiative (side): party 3, monsters 6. Order: group-0001, character-0001, character-0002, character-0003, character-0004, character-0005.", + "group-0001 is now 190' away.", "The battle is won.", "monster-0001 (goblin) is slain.", - "monster-0002 (goblin) is slain.", + "monster-0002 (goblin) is routed.", "monster-0003 (goblin) is routed.", "monster-0004 (goblin) is routed.", "monster-0005 (goblin) is routed.", @@ -7246,9 +5421,81 @@ "character-0003 acquires 80 gp in coin.", "character-0004 acquires 80 gp in coin.", "character-0005 acquires 80 gp in coin.", - "Wandering check: 5 vs 3-in-6 — nothing comes.", "Detection roll (secret_doors, character-0002): 1 vs 2-in-6 — success.", "character-0002 searches (secret_doors) and finds: secret_door:east.", + "Wandering check: 2 vs 3-in-6 — an encounter!", + "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 4, surprised on 1-2 — not surprised.", + "Encounter: 8 × Trader at 10'.", + "Reaction roll: 7+0 = 7 — uncertain.", + "The monsters' bearing: uncertain.", + "Battle is joined!", + "Battle round 1 begins.", + "character-0005 begins casting fire_ball.", + "Initiative (side): party 4, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, character-0005, group-0002.", + "character-0001 closes to 5' from group-0002.", + "character-0002 closes to 5' from group-0002.", + "character-0003 closes to 5' from group-0002.", + "character-0004 closes to 5' from group-0002.", + "character-0005 casts fire_ball [damage] at monster-0007, monster-0008, monster-0009, monster-0010, monster-0011, monster-0012, monster-0013, monster-0014.", + "monster-0007 fails a save versus spells: rolled 2+0, needing 16.", + "monster-0007 takes 19 damage from character-0005.", + "monster-0007 is at 0/5 hit points.", + "monster-0007 is dead.", + "monster-0007 is killed.", + "monster-0007 is at 0/5 hit points.", + "monster-0008 passes a save versus spells: rolled 17+0, needing 16.", + "monster-0008 takes 8 damage from character-0005.", + "monster-0008 is at 0/1 hit points.", + "monster-0008 is dead.", + "monster-0008 is killed.", + "monster-0008 is at 0/1 hit points.", + "monster-0009 fails a save versus spells: rolled 11+0, needing 16.", + "monster-0009 takes 12 damage from character-0005.", + "monster-0009 is at 0/5 hit points.", + "monster-0009 is dead.", + "monster-0009 is killed.", + "monster-0009 is at 0/5 hit points.", + "monster-0010 passes a save versus spells: rolled 17+0, needing 16.", + "monster-0010 takes 8 damage from character-0005.", + "monster-0010 is at 0/6 hit points.", + "monster-0010 is dead.", + "monster-0010 is killed.", + "monster-0010 is at 0/6 hit points.", + "monster-0011 fails a save versus spells: rolled 9+0, needing 16.", + "monster-0011 takes 22 damage from character-0005.", + "monster-0011 is at 0/7 hit points.", + "monster-0011 is dead.", + "monster-0011 is killed.", + "monster-0011 is at 0/7 hit points.", + "monster-0012 fails a save versus spells: rolled 13+0, needing 16.", + "monster-0012 takes 10 damage from character-0005.", + "monster-0012 is at 0/8 hit points.", + "monster-0012 is dead.", + "monster-0012 is killed.", + "monster-0012 is at 0/8 hit points.", + "monster-0013 fails a save versus spells: rolled 2+0, needing 16.", + "monster-0013 takes 15 damage from character-0005.", + "monster-0013 is at 0/5 hit points.", + "monster-0013 is dead.", + "monster-0013 is killed.", + "monster-0013 is at 0/5 hit points.", + "monster-0014 fails a save versus spells: rolled 11+0, needing 16.", + "monster-0014 takes 19 damage from character-0005.", + "monster-0014 is at 0/2 hit points.", + "monster-0014 is dead.", + "monster-0014 is killed.", + "monster-0014 is at 0/2 hit points.", + "The battle is won.", + "monster-0007 (trader) is slain.", + "monster-0008 (trader) is slain.", + "monster-0009 (trader) is slain.", + "monster-0010 (trader) is slain.", + "monster-0011 (trader) is slain.", + "monster-0012 (trader) is slain.", + "monster-0013 (trader) is slain.", + "monster-0014 (trader) is slain.", + "The encounter ends (victory).", "The door east of (4, 1) opens.", "character-0001 uses up iron_spikes.", "An iron spike wedges the door east of (4, 1).", @@ -7260,43 +5507,72 @@ "The party moves to (1, 1), facing south.", "The party enters area crypt (level 2).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 6, surprised on 1-2 — not surprised.", - "Encounter: 4 × Skeleton at 10'.", + "Surprise (party): rolled 2, surprised on 1-2 — surprised.", + "Encounter: 4 × Skeleton at 10' — the party is surprised.", "The monsters' bearing: hostile.", "Battle is joined!", - "Battle round 1 begins.", - "Initiative (side): party 2, monsters 1. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0002.", - "group-0002 is now 5' away.", - "character-0004 presents the holy symbol (rolled 3, 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 65' away.", + "group-0003 is now 5' away.", + "monster-0015 misses character-0001 with weapon: rolled 13+0 = 13, needing 16.", + "monster-0016 misses character-0001 with weapon: rolled 8+0 = 8, needing 16.", + "monster-0017 misses character-0005 with weapon: rolled 3+0 = 3, needing 10.", + "monster-0018 hits character-0005 with weapon: rolled 17+0 = 17, needing 10.", + "character-0005 takes 4 damage from monster-0018.", + "character-0005 is at 5/9 hit points.", "Battle round 2 begins.", - "Initiative (side): party 6, monsters 2. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0002.", - "group-0002 is now 45' away.", - "group-0002 is now 105' away.", + "character-0005 begins casting magic_missile.", + "Initiative (side): party 4, monsters 6. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", + "monster-0015 hits character-0005 with weapon: rolled 13+0 = 13, needing 10.", + "character-0005 takes 2 damage from monster-0015.", + "character-0005 is at 3/9 hit points.", + "monster-0016 misses character-0001 with weapon: rolled 11+0 = 11, needing 16.", + "monster-0017 hits character-0005 with weapon: rolled 13+0 = 13, needing 10.", + "character-0005 takes 2 damage from monster-0017.", + "character-0005 is at 1/9 hit points.", + "monster-0018 misses character-0001 with weapon: rolled 11+0 = 11, needing 16.", + "character-0005's casting of magic_missile is disrupted — the spell is lost.", + "character-0004 presents the holy symbol (rolled 12, 7 HD affected) — the undead are turned.", + "Effect effect-0002 (turned) attached to monster-0015.", + "monster-0015 is turned.", + "Effect effect-0003 (turned) attached to monster-0016.", + "monster-0016 is turned.", + "Effect effect-0004 (turned) attached to monster-0017.", + "monster-0017 is turned.", + "Effect effect-0005 (turned) attached to monster-0018.", + "monster-0018 is turned.", + "character-0001 hits monster-0015 with Sword: rolled 17+0 = 17, needing 12.", + "monster-0015 takes 4 damage from character-0001.", + "monster-0015 is at 3/7 hit points.", "Battle round 3 begins.", - "Initiative (side): party 3, monsters 4. Order: group-0002, character-0005, character-0001, character-0002, character-0003, character-0004.", - "group-0002 is now 165' away.", + "character-0005 begins casting magic_missile.", + "character-0004 begins casting cure_light_wounds.", + "Initiative (side): party 2, monsters 3. Order: group-0003, character-0005, character-0001, character-0002, character-0003, character-0004.", + "group-0003 is now 65' away.", + "character-0005 casts magic_missile [missiles] at monster-0015.", + "monster-0015 takes 3 damage from character-0005.", + "monster-0015 is at 0/7 hit points.", + "monster-0015 is dead.", + "monster-0015 is killed.", + "monster-0015 is at 0/7 hit points.", + "character-0004 casts cure_light_wounds [heal] at character-0005.", + "character-0005 regains 4 hit points (magical).", + "character-0005 is at 5/9 hit points.", + "character-0001 misses monster-0016 with Sword: rolled 5+0 = 5, needing 12.", + "Battle round 4 begins.", + "Initiative (side): party 1, monsters 3. 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-0015 (skeleton) is slain.", + "monster-0016 (skeleton) is routed.", + "monster-0017 (skeleton) is routed.", + "monster-0018 (skeleton) is routed.", + "Effect effect-0002 (turned) on monster-0015 is released.", + "monster-0015 is no longer turned.", + "Effect effect-0003 (turned) on monster-0016 is released.", + "monster-0016 is no longer turned.", + "Effect effect-0004 (turned) on monster-0017 is released.", + "monster-0017 is no longer turned.", + "Effect effect-0005 (turned) on monster-0018 is released.", + "monster-0018 is no longer turned.", "The encounter ends (victory).", "The party moves to (1, 0), facing north.", "The party moves to (2, 0), facing east.", @@ -7304,132 +5580,29 @@ "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): 90 gp in coin, 1 valuable(s), 0 magic item(s).", + "Treasure generated at cache-0002 (C): 100 gp in coin, 0 valuable(s), 0 magic item(s).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 5, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 6, 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 10'.", "character-0001 drops 10 gp in coin.", - "Pursuit round 2: the monsters stop for the dropped bait.", + "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).", + "Effect effect-0001 (light) on character-0001 expires.", + "The torch carried by character-0001 gutters out.", + "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-0003 (C): 100 gp in coin, 3 valuable(s), 2 magic item(s).", - "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 1, surprised on 1-2 — surprised.", - "Encounter: 3 × Goblin at 10' — the party is surprised.", - "The monsters' bearing: hostile.", - "Effect effect-0001 (light) on character-0001 expires.", - "The torch carried by character-0001 gutters out.", - "Battle is joined!", - "group-0004 is now 5' away.", - "Battle round 2 begins.", - "character-0005 begins casting magic_missile.", - "Initiative (side): party 3, monsters 5. Order: group-0004, character-0005, character-0001, character-0002, character-0003, character-0004.", - "monster-0014 hits character-0005 with weapon: rolled 18+0 = 18, needing 9.", - "character-0005 takes 1 damage from monster-0014.", - "character-0005 is at 19/20 hit points.", - "monster-0015 misses character-0005 with weapon: rolled 6+0 = 6, needing 9.", - "monster-0016 misses character-0005 with weapon: rolled 3+0 = 3, needing 9.", - "character-0005's casting of magic_missile is disrupted — the spell is lost.", - "character-0001 misses monster-0014 with Sword: rolled 2-1 = 1, needing 13.", - "Battle round 3 begins.", - "Initiative (side): party 1, monsters 3. Order: group-0004, character-0005, character-0001, character-0002, character-0003, character-0004.", - "monster-0014 misses character-0005 with weapon: rolled 8+0 = 8, needing 9.", - "monster-0015 hits character-0001 with weapon: rolled 17+0 = 17, needing 14.", - "character-0001 takes 3 damage from monster-0015.", - "character-0001 is at 12/20 hit points.", - "monster-0016 misses character-0005 with weapon: rolled 1+0 = 1, needing 9.", - "character-0005 misses monster-0014 with Dagger: rolled 11-2 = 9, needing 13.", - "character-0001 misses monster-0014 with Sword: rolled 2-1 = 1, needing 13.", - "Battle round 4 begins.", - "Initiative (side): party 5, monsters 3. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0004.", - "character-0005 misses monster-0014 with Dagger: rolled 12-2 = 10, needing 13.", - "character-0001 hits monster-0014 with Sword: rolled 19-1 = 18, needing 13.", - "monster-0014 takes 1 damage from character-0001.", - "monster-0014 is at 3/4 hit points.", - "monster-0014 misses character-0005 with weapon: rolled 6+0 = 6, needing 9.", - "monster-0015 misses character-0005 with weapon: rolled 8+0 = 8, needing 9.", - "monster-0016 hits character-0005 with weapon: rolled 11+0 = 11, needing 9.", - "character-0005 takes 2 damage from monster-0016.", - "character-0005 is at 17/20 hit points.", - "Battle round 5 begins.", - "Initiative (side): party 2, monsters 3. Order: group-0004, character-0005, character-0001, character-0002, character-0003, character-0004.", - "monster-0014 hits character-0005 with weapon: rolled 15+0 = 15, needing 9.", - "character-0005 takes 5 damage from monster-0014.", - "character-0005 is at 12/20 hit points.", - "monster-0015 hits character-0005 with weapon: rolled 13+0 = 13, needing 9.", - "character-0005 takes 1 damage from monster-0015.", - "character-0005 is at 11/20 hit points.", - "monster-0016 misses character-0001 with weapon: rolled 2+0 = 2, needing 14.", - "character-0005 hits monster-0014 with Dagger: rolled 19-2 = 17, needing 13.", - "monster-0014 takes 1 damage from character-0005.", - "monster-0014 is at 2/4 hit points.", - "character-0001 misses monster-0014 with Sword: rolled 10-1 = 9, needing 13.", - "Battle round 6 begins.", - "Initiative (side): party 2, monsters 3. Order: group-0004, character-0005, character-0001, character-0002, character-0003, character-0004.", - "monster-0014 misses character-0005 with weapon: rolled 2+0 = 2, needing 9.", - "monster-0015 hits character-0005 with weapon: rolled 9+0 = 9, needing 9.", - "character-0005 takes 6 damage from monster-0015.", - "character-0005 is at 5/20 hit points.", - "monster-0016 misses character-0001 with weapon: rolled 8+0 = 8, needing 14.", - "character-0005 misses monster-0014 with Dagger: rolled 6-2 = 4, needing 13.", - "character-0001 hits monster-0014 with Sword: rolled 19-1 = 18, needing 13.", - "monster-0014 takes 7 damage from character-0001.", - "monster-0014 is at 0/4 hit points.", - "monster-0014 is dead.", - "monster-0014 is killed.", - "monster-0014 is at 0/4 hit points.", - "Battle round 7 begins.", - "character-0004 begins casting cure_light_wounds.", - "Initiative (side): party 1, monsters 2. Order: group-0004, character-0005, character-0001, character-0002, character-0003, character-0004.", - "Morale check for group-0004 (ML 7): rolled 10+0 — they flee or surrender.", - "group-0004 flees the battle!", - "group-0004 is now 65' away.", - "character-0005 hits monster-0015 with Dagger: rolled 17+1 = 18, needing 13.", - "monster-0015 takes 4 damage from character-0005.", - "monster-0015 is at 0/1 hit points.", - "monster-0015 is dead.", - "monster-0015 is killed.", - "monster-0015 is at 0/1 hit points.", - "character-0004 casts cure_light_wounds [heal] at character-0005.", - "character-0005 regains 3 hit points (magical).", - "character-0005 is at 8/20 hit points.", - "character-0001 misses monster-0016 with Sword: rolled 8+1 = 9, needing 13.", - "Battle round 8 begins.", - "character-0004 begins casting cure_light_wounds.", - "Initiative (side): party 4, monsters 3. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0004.", - "group-0004 is now 45' away.", - "character-0004 casts cure_light_wounds [heal] at character-0005.", - "character-0005 regains 6 hit points (magical).", - "character-0005 is at 14/20 hit points.", - "group-0004 is now 105' away.", - "Battle round 9 begins.", - "Initiative (side): party 4, monsters 3. Order: character-0005, character-0001, character-0002, character-0003, character-0004, group-0004.", - "group-0004 is now 85' away.", - "group-0004 is now 145' away.", - "The battle is won.", - "monster-0014 (goblin) is slain.", - "monster-0015 (goblin) is slain.", - "monster-0016 (goblin) is routed.", - "The encounter ends (victory).", - "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-0006 (light) attached to character-0001.", - "character-0001 lights a torch.", - "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).", "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 5, surprised on 1-2 — not surprised.", + "Surprise (party): rolled 6, surprised on 1-2 — not surprised.", "Encounter: 3 × Goblin at 10'.", "The monsters' bearing: hostile.", "The monsters give chase!", @@ -7475,8 +5648,7 @@ "The party is exhausted from running: -2 to attacks, damage, and AC.", "Pursuit round 30: the party escapes.", "The encounter ends (escaped).", - "The party moves to (6, 0), facing north.", - "Wandering check: skipped vs 0-in-6 — nothing comes.", + "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.", "Effect effect-0006 (light) on character-0001 expires.", @@ -7502,6 +5674,7 @@ "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.", + "Wandering check: skipped vs 0-in-6 — nothing comes.", "Effect effect-0007 (exhausted) on character-0005 is released.", "character-0005 is no longer exhausted.", "Effect effect-0008 (exhausted) on character-0001 is released.", @@ -7517,16 +5690,15 @@ "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.", "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.", @@ -7541,125 +5713,14 @@ "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 2-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.", - "Effect effect-0015 (fatigue) on character-0003 is released.", - "Effect effect-0016 (fatigue) on character-0004 is released.", - "The party recovers from fatigue.", - "The party rests (turn).", - "The party rests (turn).", - "Wandering check: 4 vs 2-in-6 — nothing comes.", - "The party rests (turn).", - "The party rests (turn).", - "Wandering check: 3 vs 2-in-6 — nothing comes.", - "The party rests (turn).", "Effect effect-0017 (light) on character-0001 expires.", "The torch carried by character-0001 gutters out.", - "The party rests (turn).", - "character-0001 fumbles with the tinder box — no flame.", - "Effect effect-0018 (light) attached to character-0001.", - "character-0001 lights a torch.", - "Wandering check: 3 vs 2-in-6 — nothing comes.", - "The party rests (turn).", - "The party rests (turn).", - "Wandering check: 6 vs 2-in-6 — nothing comes.", - "The party rests (turn).", - "The party rests (turn).", - "Wandering check: 4 vs 2-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: 5 vs 2-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: 6 vs 2-in-6 — nothing comes.", - "The party rests (turn).", - "The party rests (turn).", - "Wandering check: 5 vs 2-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: 6 vs 2-in-6 — nothing comes.", - "The party rests (turn).", - "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-0020 (light) attached to character-0001.", - "character-0001 lights a torch.", - "The party rests (turn).", - "Wandering check: 6 vs 2-in-6 — nothing comes.", - "The party rests (turn).", - "The party rests (turn).", - "Wandering check: 1 vs 2-in-6 — an encounter!", - "Surprise (monsters): no roll, surprised on 1-2 — not surprised.", - "Surprise (party): rolled 6, surprised on 1-2 — not surprised.", - "Encounter: 6 × Dwarf at 30'.", - "Reaction roll: 5+0 = 5 — hostile.", - "The monsters' bearing: hostile.", - "The party's turn rest is interrupted!", - "Battle is joined!", - "Battle round 1 begins.", - "character-0005 begins casting fire_ball.", - "Initiative (side): party 6, monsters 2. 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-0020 passes a save versus spells: rolled 16+0, needing 12.", - "monster-0020 takes 10 damage from character-0005.", - "monster-0020 is at 0/6 hit points.", - "monster-0020 is dead.", - "monster-0020 is killed.", - "monster-0020 is at 0/6 hit points.", - "monster-0021 passes a save versus spells: rolled 14+0, needing 12.", - "monster-0021 takes 8 damage from character-0005.", - "monster-0021 is at 0/3 hit points.", - "monster-0021 is dead.", - "monster-0021 is killed.", - "monster-0021 is at 0/3 hit points.", - "monster-0022 fails a save versus spells: rolled 5+0, needing 12.", - "monster-0022 takes 21 damage from character-0005.", - "monster-0022 is at 0/2 hit points.", - "monster-0022 is dead.", - "monster-0022 is killed.", - "monster-0022 is at 0/2 hit points.", - "monster-0023 passes a save versus spells: rolled 19+0, needing 12.", - "monster-0023 takes 11 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/6 hit points.", - "monster-0024 fails a save versus spells: rolled 7+0, needing 12.", - "monster-0024 takes 21 damage from character-0005.", - "monster-0024 is at 0/2 hit points.", - "monster-0024 is dead.", - "monster-0024 is killed.", - "monster-0024 is at 0/2 hit points.", - "monster-0025 fails a save versus spells: rolled 2+0, needing 12.", - "monster-0025 takes 19 damage from character-0005.", - "monster-0025 is at 0/5 hit points.", - "monster-0025 is dead.", - "monster-0025 is killed.", - "monster-0025 is at 0/5 hit points.", - "The battle is won.", - "monster-0020 (dwarf_monster) is slain.", - "monster-0021 (dwarf_monster) is slain.", - "monster-0022 (dwarf_monster) is slain.", - "monster-0023 (dwarf_monster) is slain.", - "monster-0024 (dwarf_monster) is slain.", - "monster-0025 (dwarf_monster) is slain.", - "The encounter ends (victory).", - "Effect effect-0020 (light) on character-0001 expires.", - "The torch carried by character-0001 gutters out.", "The party enters town town.", - "The adventure ends: 145 XP from monsters and 390 XP from treasure — 107 XP to each of 5 survivor(s).", - "character-0005 gains 107 XP (base 107), now level 5.", - "character-0001 gains 96 XP (base 107), now level 3.", - "character-0002 gains 107 XP (base 107), now level 3.", - "character-0003 gains 107 XP (base 107), now level 3.", - "character-0004 gains 112 XP (base 107), now level 3." + "The adventure ends: 150 XP from monsters and 380 XP from treasure — 106 XP to each of 5 survivor(s).", + "character-0005 gains 95 XP (base 106), now level 5.", + "character-0001 gains 106 XP (base 106), now level 3.", + "character-0002 gains 116 XP (base 106), now level 3.", + "character-0003 gains 111 XP (base 106), now level 3.", + "character-0004 gains 95 XP (base 106), now level 3." ] } diff --git a/tests/goldens/phase5_milestone.json b/tests/goldens/phase5_milestone.json index 16898ba..d8e7c35 100644 --- a/tests/goldens/phase5_milestone.json +++ b/tests/goldens/phase5_milestone.json @@ -1,8 +1,8 @@ { "checkpoints": { - "first_return": 37, - "mid_delve": 12, - "post_award": 60 + "first_return": 32, + "mid_delve": 9, + "post_award": 56 }, "command_log": [ { @@ -33,7 +33,7 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0001", "gaze_defense": null, @@ -45,10 +45,10 @@ "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0002", "gaze_defense": null, @@ -60,7 +60,7 @@ "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { "action": "move", @@ -165,68 +165,108 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "attack", + "action": "move", "back_stab": false, "character_id": "character-0001", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": "sword" + "weapon_id": null }, { - "action": "attack", + "action": "move", "back_stab": false, "character_id": "character-0002", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, "target_group_id": "group-0001", "targets": [], - "weapon_id": "mace" + "weapon_id": null }, { - "action": "hold", + "action": "move", "back_stab": false, "character_id": "character-0003", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", "back_stab": false, "character_id": "character-0004", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0001", "targets": [], "weapon_id": null } ], "source": null }, + { + "command_type": "take_treasure", + "feature_id": "cache-0001", + "recipient_id": null, + "source": null + }, + { + "command_type": "move_party", + "direction": "east", + "source": null + }, + { + "command_type": "move_party", + "direction": "east", + "source": null + }, + { + "command_type": "use_stairs", + "source": null + }, + { + "command_type": "move_party", + "direction": "east", + "source": null + }, + { + "command_type": "move_party", + "direction": "east", + "source": null + }, + { + "command_type": "take_treasure", + "feature_id": "cache-0002", + "recipient_id": null, + "source": null + }, + { + "command_type": "engage_battle", + "source": null + }, { "command_type": "resolve_battle_round", "declarations": [ @@ -236,12 +276,12 @@ "character_id": "character-0001", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], "weapon_id": "sword" }, @@ -251,42 +291,42 @@ "character_id": "character-0002", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], "weapon_id": "mace" }, { - "action": "hold", + "action": "move", "back_stab": false, "character_id": "character-0003", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], "weapon_id": null }, { - "action": "hold", + "action": "move", "back_stab": false, "character_id": "character-0004", "gaze_defense": null, "item_id": null, - "move": null, + "move": "close", "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": null, + "target_group_id": "group-0002", "targets": [], "weapon_id": null } @@ -297,62 +337,62 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0001", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0002", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { - "action": "move", + "action": "hold", "back_stab": false, "character_id": "character-0003", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": 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", "back_stab": false, "character_id": "character-0004", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": null, "targets": [], "weapon_id": null } @@ -363,62 +403,62 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0001", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0002", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": "group-0002", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { - "action": "move", + "action": "hold", "back_stab": false, "character_id": "character-0003", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": 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", "back_stab": false, "character_id": "character-0004", "gaze_defense": null, "item_id": null, - "move": "close", + "move": null, "replacement_id": null, "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0001", + "target_group_id": null, "targets": [], "weapon_id": null } @@ -427,37 +467,7 @@ }, { "command_type": "take_treasure", - "feature_id": "cache-0001", - "recipient_id": null, - "source": null - }, - { - "command_type": "move_party", - "direction": "east", - "source": null - }, - { - "command_type": "move_party", - "direction": "east", - "source": null - }, - { - "command_type": "use_stairs", - "source": null - }, - { - "command_type": "move_party", - "direction": "east", - "source": null - }, - { - "command_type": "move_party", - "direction": "east", - "source": null - }, - { - "command_type": "take_treasure", - "feature_id": "cache-0002", + "feature_id": "pile", "recipient_id": null, "source": null }, @@ -469,7 +479,7 @@ "command_type": "resolve_battle_round", "declarations": [ { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0001", "gaze_defense": null, @@ -479,12 +489,12 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], - "weapon_id": null + "weapon_id": "sword" }, { - "action": "move", + "action": "attack", "back_stab": false, "character_id": "character-0002", "gaze_defense": null, @@ -494,9 +504,9 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], - "weapon_id": null + "weapon_id": "mace" }, { "action": "move", @@ -509,7 +519,7 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": null }, @@ -524,7 +534,7 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": null } @@ -545,7 +555,7 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": "sword" }, @@ -560,7 +570,7 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": "mace" }, @@ -611,7 +621,7 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": "sword" }, @@ -626,7 +636,7 @@ "reversed": false, "spell_id": null, "spell_mode": null, - "target_group_id": "group-0002", + "target_group_id": "group-0003", "targets": [], "weapon_id": "mace" }, @@ -663,348 +673,6 @@ ], "source": null }, - { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "attack", - "back_stab": false, - "character_id": "character-0001", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0002", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "attack", - "back_stab": false, - "character_id": "character-0002", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0002", - "targets": [], - "weapon_id": "mace" - }, - { - "action": "hold", - "back_stab": false, - "character_id": "character-0003", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": null, - "targets": [], - "weapon_id": null - }, - { - "action": "hold", - "back_stab": false, - "character_id": "character-0004", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": null, - "targets": [], - "weapon_id": null - } - ], - "source": null - }, - { - "command_type": "take_treasure", - "feature_id": "pile", - "recipient_id": null, - "source": null - }, - { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "move", - "back_stab": false, - "character_id": "character-0001", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - }, - { - "action": "move", - "back_stab": false, - "character_id": "character-0002", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - }, - { - "action": "move", - "back_stab": false, - "character_id": "character-0003", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - }, - { - "action": "move", - "back_stab": false, - "character_id": "character-0004", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - } - ], - "source": null - }, - { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "attack", - "back_stab": false, - "character_id": "character-0001", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "attack", - "back_stab": false, - "character_id": "character-0003", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "hold", - "back_stab": false, - "character_id": "character-0004", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": null, - "targets": [], - "weapon_id": null - } - ], - "source": null - }, - { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "attack", - "back_stab": false, - "character_id": "character-0001", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "attack", - "back_stab": false, - "character_id": "character-0003", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "hold", - "back_stab": false, - "character_id": "character-0004", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": null, - "targets": [], - "weapon_id": null - } - ], - "source": null - }, - { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "attack", - "back_stab": false, - "character_id": "character-0001", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "attack", - "back_stab": false, - "character_id": "character-0003", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": "sword" - }, - { - "action": "hold", - "back_stab": false, - "character_id": "character-0004", - "gaze_defense": null, - "item_id": null, - "move": null, - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": null, - "targets": [], - "weapon_id": null - } - ], - "source": null - }, - { - "command_type": "resolve_battle_round", - "declarations": [ - { - "action": "move", - "back_stab": false, - "character_id": "character-0001", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - }, - { - "action": "move", - "back_stab": false, - "character_id": "character-0003", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - }, - { - "action": "move", - "back_stab": false, - "character_id": "character-0004", - "gaze_defense": null, - "item_id": null, - "move": "close", - "replacement_id": null, - "reversed": false, - "spell_id": null, - "spell_mode": null, - "target_group_id": "group-0003", - "targets": [], - "weapon_id": null - } - ], - "source": null - }, { "command_type": "move_party", "direction": "west", @@ -1046,12 +714,20 @@ { "command_type": "sell_treasure", "item_ids": [ - "valuable-0001" + "valuable-0005", + "valuable-0006", + "valuable-0003", + "valuable-0002", + "valuable-0009", + "valuable-0004", + "valuable-0001", + "valuable-0007", + "valuable-0008" ], "source": null }, { - "character_id": "character-0001", + "character_id": "character-0002", "command_type": "purchase_healing", "service": "cure_light_wounds", "source": null @@ -1061,27 +737,27 @@ "coins": { "cp": 0, "ep": 0, - "gp": 550, + "gp": 400, "pp": 0, "sp": 0 }, "command_type": "give_items", "item_ids": [], - "recipient_id": "character-0003", + "recipient_id": "character-0004", "source": null }, { - "character_id": "character-0001", + "character_id": "character-0002", "coins": { "cp": 0, "ep": 0, - "gp": 550, + "gp": 250, "pp": 0, "sp": 0 }, "command_type": "give_items", "item_ids": [], - "recipient_id": "character-0004", + "recipient_id": "character-0003", "source": null }, { @@ -1174,6 +850,12 @@ "command_type": "award_xp", "source": "quest:the-idol" }, + { + "amount": 1200, + "character_id": "character-0002", + "command_type": "award_xp", + "source": "quest:the-idol" + }, { "amount": 1200, "character_id": "character-0003", @@ -1255,25 +937,30 @@ "C" ], "valuable_ids": [ - "valuable-0001" + "valuable-0001", + "valuable-0002", + "valuable-0003", + "valuable-0004", + "valuable-0005", + "valuable-0006" ], "visibility": "referee" }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 3, + "roll": 2, "side": "monsters", - "surprised": false, + "surprised": true, "threshold": 2, "visibility": "referee" }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 1, + "roll": 4, "side": "party", - "surprised": true, + "surprised": false, "threshold": 3, "visibility": "referee" }, @@ -1283,235 +970,34 @@ "distance_feet": 20, "event_type": "encounter_started", "monster_name": "Goblin", - "monsters_surprised": false, - "party_surprised": true, - "visibility": "player" - }, - { - "code": "encounter.reaction.rolled", - "event_type": "reaction_rolled", - "modifier": 0, - "result": "uncertain", - "roll": 6, - "total": 6, - "visibility": "referee" - }, - { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "uncertain", + "monsters_surprised": true, + "party_surprised": false, "visibility": "player" }, { "code": "encounter.reaction.rolled", "event_type": "reaction_rolled", "modifier": 0, - "result": "uncertain", - "roll": 7, - "total": 7, - "visibility": "referee" - }, - { - "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": [ - 2 - ], - "total": 2 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "character-0001", - "character-0002", - "character-0003", - "character-0004", - "group-0001" - ], - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0001", - "visibility": "player" - }, - { - "attack_name": "weapon", - "attacker_id": "monster-0001", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 15, - "roll": 1, - "total": 1, - "visibility": "player" - }, - { - "attack_name": "weapon", - "attacker_id": "monster-0002", - "back_stab": false, - "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" - }, - { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 2, - "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" - ], - "visibility": "player" - }, - { - "attack_name": "weapon", - "attacker_id": "monster-0001", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0001", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 15, - "roll": 5, - "total": 5, - "visibility": "player" - }, - { - "attack_name": "weapon", - "attacker_id": "monster-0002", - "back_stab": false, - "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" - }, - { - "amount": 1, - "attacker_id": "monster-0002", - "code": "combat.damage.dealt", - "event_type": "damage_dealt", - "keys": [], - "non_regenerable": false, - "rolls": [ - 1 - ], - "target_id": "character-0002", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 2, - "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "character-0002", + "result": "hostile", + "roll": 4, + "total": 4, "visibility": "referee" }, { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "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, + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "hostile", "visibility": "player" }, { - "attack_name": "Mace", - "attacker_id": "character-0002", - "back_stab": false, - "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, + "code": "battle.started", + "event_type": "battle_started", "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 3, + "round": 1, "visibility": "player" }, { @@ -1521,17 +1007,19 @@ "key": "party", "modifier": 0, "rolls": [ - 2 + 3, + 1 ], - "total": 2 + "total": 1 }, { "key": "monsters", "modifier": 0, "rolls": [ - 6 + 3, + 2 ], - "total": 6 + "total": 2 } ], "event_type": "initiative_rolled", @@ -1546,38 +1034,63 @@ "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0001", - "back_stab": false, - "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, + "advance_feet": 15, + "character_id": "character-0001", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 15, + "character_id": "character-0002", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 15, + "character_id": "character-0003", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 15, + "character_id": "character-0004", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0001", + "move": "close", "visibility": "player" }, { - "attack_name": "weapon", - "attacker_id": "monster-0002", + "attack_name": "Sword", + "attacker_id": "character-0001", "back_stab": false, "code": "combat.attack.hit", - "defender_ac": 4, - "defender_id": "character-0001", + "defender_ac": 6, + "defender_id": "monster-0001", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 15, - "roll": 17, - "total": 17, + "required": 13, + "roll": 19, + "total": 20, "visibility": "player" }, { - "amount": 1, - "attacker_id": "monster-0002", + "amount": 2, + "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], @@ -1585,32 +1098,17 @@ "rolls": [ 1 ], - "target_id": "character-0001", + "target_id": "monster-0001", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 5, + "current_hp": 4, "event_type": "hit_points_reported", "max_hp": 6, - "target_id": "character-0001", + "target_id": "monster-0001", "visibility": "referee" }, - { - "attack_name": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "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", @@ -1627,14 +1125,14 @@ "visibility": "player" }, { - "amount": 3, + "amount": 6, "attacker_id": "character-0002", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 3 + 6 ], "target_id": "monster-0001", "visibility": "player" @@ -1643,7 +1141,7 @@ "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 1, + "max_hp": 6, "target_id": "monster-0001", "visibility": "referee" }, @@ -1665,14 +1163,14 @@ "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 1, + "max_hp": 6, "target_id": "monster-0001", "visibility": "referee" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 4, + "round": 2, "visibility": "player" }, { @@ -1690,68 +1188,28 @@ "key": "monsters", "modifier": 0, "rolls": [ - 2 + 5 ], - "total": 2 + "total": 5 } ], "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": "Sword", - "attacker_id": "character-0001", - "back_stab": false, - "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", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "monster-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 13, - "roll": 2, - "total": 2, - "visibility": "player" - }, - { - "code": "combat.morale.held", - "event_type": "morale_checked", - "held": true, - "modifier": 0, - "roll": 7, - "score": 7, - "subject": "group-0001", - "visibility": "referee" - }, { "code": "combat.morale.broke", "event_type": "morale_checked", "held": false, "modifier": 0, - "roll": 9, + "roll": 10, "score": 7, "subject": "group-0001", "visibility": "referee" @@ -1764,66 +1222,45 @@ }, { "code": "battle.group.moved", - "distance_feet": 65, + "distance_feet": 80, "event_type": "group_moved", "group_id": "group-0001", "visibility": "player" }, { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 5, - "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", - "group-0001" - ], - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 45, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "Sword", + "attacker_id": "character-0001", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0002", + "event_type": "attack_rolled", + "modifier": 3, + "natural": null, + "required": 13, + "roll": 7, + "total": 10, "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 105, - "event_type": "group_moved", - "group_id": "group-0001", + "attack_name": "Mace", + "attacker_id": "character-0002", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "monster-0002", + "event_type": "attack_rolled", + "modifier": 2, + "natural": null, + "required": 13, + "roll": 7, + "total": 9, "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 6, + "round": 3, "visibility": "player" }, { @@ -1841,32 +1278,25 @@ "key": "monsters", "modifier": 0, "rolls": [ - 1 + 4 ], - "total": 1 + "total": 4 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0001", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0001" + "character-0004" ], "visibility": "player" }, { "code": "battle.group.moved", - "distance_feet": 85, - "event_type": "group_moved", - "group_id": "group-0001", - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 145, + "distance_feet": 140, "event_type": "group_moved", "group_id": "group-0001", "visibility": "player" @@ -1895,17 +1325,52 @@ "xp": 5 }, { - "code": "encounter.ended", - "event_type": "encounter_ended", - "outcome": "victory", + "code": "encounter.ended", + "event_type": "encounter_ended", + "outcome": "victory", + "visibility": "player" + }, + { + "character_id": "character-0001", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "valuable-0005" + ], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "valuable-0006" + ], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 0, + "event_type": "item_acquired", + "item_ids": [ + "valuable-0003", + "valuable-0002" + ], + "origin": "treasure", "visibility": "player" }, { - "character_id": "character-0001", + "character_id": "character-0004", "code": "exploration.item.acquired", "coins_gp_value": 0, "event_type": "item_acquired", "item_ids": [ + "valuable-0004", "valuable-0001" ], "origin": "treasure", @@ -1986,7 +1451,7 @@ { "cache_ref": "cache-0002", "code": "treasure.hoard.generated", - "coins_gp_value": 210, + "coins_gp_value": 110, "event_type": "hoard_generated", "magic_item_ids": [], "treasure_types": [ @@ -1998,7 +1463,7 @@ { "character_id": "character-0001", "code": "exploration.item.acquired", - "coins_gp_value": 52, + "coins_gp_value": 27, "event_type": "item_acquired", "item_ids": [], "origin": "treasure", @@ -2007,7 +1472,7 @@ { "character_id": "character-0002", "code": "exploration.item.acquired", - "coins_gp_value": 52, + "coins_gp_value": 27, "event_type": "item_acquired", "item_ids": [], "origin": "treasure", @@ -2016,7 +1481,7 @@ { "character_id": "character-0003", "code": "exploration.item.acquired", - "coins_gp_value": 52, + "coins_gp_value": 27, "event_type": "item_acquired", "item_ids": [], "origin": "treasure", @@ -2025,7 +1490,7 @@ { "character_id": "character-0004", "code": "exploration.item.acquired", - "coins_gp_value": 52, + "coins_gp_value": 27, "event_type": "item_acquired", "item_ids": [], "origin": "treasure", @@ -2040,15 +1505,15 @@ "visibility": "referee" }, { - "alignment": "neutral", + "alignment": "chaotic", "class_ids": [ - "dwarf", - "magic_user" + "magic_user", + "elf" ], "code": "encounter.npc_party.spawned", "event_type": "npc_party_spawned", "levels": [ - 1, + 3, 2 ], "npc_ids": [ @@ -2061,7 +1526,7 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 6, + "roll": 3, "side": "monsters", "surprised": false, "threshold": 2, @@ -2091,8 +1556,8 @@ "event_type": "reaction_rolled", "modifier": 0, "result": "uncertain", - "roll": 6, - "total": 6, + "roll": 7, + "total": 7, "visibility": "referee" }, { @@ -2119,159 +1584,90 @@ "key": "party", "modifier": 0, "rolls": [ - 4 + 2, + 2 ], - "total": 4 + "total": 2 }, { "key": "monsters", "modifier": 0, "rolls": [ - 5 + 2, + 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", + "advance_feet": 15, + "character_id": "character-0001", + "code": "battle.member.moved", "distance_feet": 5, - "event_type": "group_moved", + "event_type": "member_moved", "group_id": "group-0002", + "move": "close", "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "npc-0002", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 15, - "roll": 9, - "total": 9, - "visibility": "player" - }, - { - "code": "battle.group.moved", + "advance_feet": 15, + "character_id": "character-0002", + "code": "battle.member.moved", "distance_feet": 5, - "event_type": "group_moved", + "event_type": "member_moved", "group_id": "group-0002", + "move": "close", "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" - ], - "visibility": "player" - }, - { - "attack_name": "Battle axe", - "attacker_id": "npc-0001", - "back_stab": false, - "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, + "advance_feet": 15, + "character_id": "character-0003", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0002", + "move": "close", "visibility": "player" }, { - "attack_name": "Dagger", - "attacker_id": "npc-0002", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 15, - "roll": 12, - "total": 12, + "advance_feet": 15, + "character_id": "character-0004", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0002", + "move": "close", "visibility": "player" }, { "attack_name": "Sword", "attacker_id": "character-0001", "back_stab": false, - "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", - "back_stab": false, "code": "combat.attack.hit", - "defender_ac": 6, + "defender_ac": 9, "defender_id": "npc-0001", "event_type": "attack_rolled", - "modifier": 0, + "modifier": 1, "natural": null, - "required": 13, - "roll": 19, - "total": 19, + "required": 10, + "roll": 16, + "total": 17, "visibility": "player" }, { - "amount": 6, - "attacker_id": "character-0002", + "amount": 7, + "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], @@ -2286,7 +1682,7 @@ "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 6, + "max_hp": 5, "target_id": "npc-0001", "visibility": "referee" }, @@ -2308,14 +1704,85 @@ "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 6, + "max_hp": 5, "target_id": "npc-0001", "visibility": "referee" }, + { + "attack_name": "Mace", + "attacker_id": "character-0002", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "npc-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 20, + "total": 20, + "visibility": "player" + }, + { + "amount": 6, + "attacker_id": "character-0002", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 6 + ], + "target_id": "npc-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 1, + "event_type": "hit_points_reported", + "max_hp": 7, + "target_id": "npc-0002", + "visibility": "referee" + }, + { + "code": "combat.morale.held", + "event_type": "morale_checked", + "held": true, + "modifier": 0, + "roll": 4, + "score": 9, + "subject": "group-0002", + "visibility": "referee" + }, + { + "code": "combat.morale.held", + "event_type": "morale_checked", + "held": true, + "modifier": 0, + "roll": 8, + "score": 9, + "subject": "group-0002", + "visibility": "referee" + }, + { + "attack_name": "Long bow", + "attacker_id": "npc-0002", + "back_stab": false, + "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" + }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 3, + "round": 2, "visibility": "player" }, { @@ -2325,17 +1792,17 @@ "key": "party", "modifier": 0, "rolls": [ - 5 + 3 ], - "total": 5 + "total": 3 }, { "key": "monsters", "modifier": 0, "rolls": [ - 3 + 2 ], - "total": 3 + "total": 2 } ], "event_type": "initiative_rolled", @@ -2360,47 +1827,27 @@ "modifier": 1, "natural": null, "required": 13, - "roll": 3, - "total": 4, - "visibility": "player" - }, - { - "attack_name": "Mace", - "attacker_id": "character-0002", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 6, - "defender_id": "npc-0002", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 13, - "roll": 9, - "total": 9, - "visibility": "player" - }, - { - "code": "combat.morale.held", - "event_type": "morale_checked", - "held": true, - "modifier": 0, - "roll": 6, - "score": 9, - "subject": "group-0002", - "visibility": "referee" + "roll": 8, + "total": 9, + "visibility": "player" }, { - "code": "combat.morale.held", - "event_type": "morale_checked", - "held": true, + "attack_name": "Mace", + "attacker_id": "character-0002", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 6, + "defender_id": "npc-0002", + "event_type": "attack_rolled", "modifier": 0, - "roll": 7, - "score": 9, - "subject": "group-0002", - "visibility": "referee" + "natural": null, + "required": 13, + "roll": 5, + "total": 5, + "visibility": "player" }, { - "attack_name": "Dagger", + "attack_name": "Sword", "attacker_id": "npc-0002", "back_stab": false, "code": "combat.attack.missed", @@ -2410,14 +1857,14 @@ "modifier": 0, "natural": null, "required": 15, - "roll": 14, - "total": 14, + "roll": 12, + "total": 12, "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 4, + "round": 3, "visibility": "player" }, { @@ -2427,54 +1874,105 @@ "key": "party", "modifier": 0, "rolls": [ - 2 + 1 ], - "total": 2 + "total": 1 }, { "key": "monsters", "modifier": 0, "rolls": [ - 1 + 6 ], - "total": 1 + "total": 6 } ], "event_type": "initiative_rolled", "mode": "side", "order": [ + "group-0002", "character-0001", "character-0002", "character-0003", - "character-0004", - "group-0002" + "character-0004" ], "visibility": "player" }, { "attack_name": "Sword", - "attacker_id": "character-0001", + "attacker_id": "npc-0002", "back_stab": false, "code": "combat.attack.hit", + "defender_ac": 4, + "defender_id": "character-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 20, + "total": 20, + "visibility": "player" + }, + { + "amount": 4, + "attacker_id": "npc-0002", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 4 + ], + "target_id": "character-0002", + "visibility": "player" + }, + { + "code": "combat.state.hit_points", + "current_hp": 2, + "event_type": "hit_points_reported", + "max_hp": 6, + "target_id": "character-0002", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "character-0001", + "back_stab": false, + "code": "combat.attack.missed", "defender_ac": 6, "defender_id": "npc-0002", "event_type": "attack_rolled", "modifier": 1, "natural": null, "required": 13, - "roll": 19, - "total": 20, + "roll": 4, + "total": 5, + "visibility": "player" + }, + { + "attack_name": "Mace", + "attacker_id": "character-0002", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "npc-0002", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 18, + "total": 18, "visibility": "player" }, { "amount": 3, - "attacker_id": "character-0001", + "attacker_id": "character-0002", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 2 + 3 ], "target_id": "npc-0002", "visibility": "player" @@ -2483,7 +1981,7 @@ "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 3, + "max_hp": 7, "target_id": "npc-0002", "visibility": "referee" }, @@ -2505,7 +2003,7 @@ "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 3, + "max_hp": 7, "target_id": "npc-0002", "visibility": "referee" }, @@ -2519,16 +2017,16 @@ "event_type": "monster_defeated", "monster_id": "npc-0001", "outcome": "slain", - "template_id": "npc:dwarf", + "template_id": "npc:magic_user", "visibility": "player", - "xp": 10 + "xp": 35 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", "monster_id": "npc-0002", "outcome": "slain", - "template_id": "npc:magic_user", + "template_id": "npc:elf", "visibility": "player", "xp": 20 }, @@ -2541,22 +2039,9 @@ { "character_id": "character-0001", "code": "exploration.item.acquired", - "coins_gp_value": 0, - "event_type": "item_acquired", - "item_ids": [ - "battle_axe", - "dagger" - ], - "origin": "treasure", - "visibility": "player" - }, - { - "character_id": "character-0002", - "code": "exploration.item.acquired", - "coins_gp_value": 0, + "coins_gp_value": 90, "event_type": "item_acquired", "item_ids": [ - "shield", "rations_standard", "rations_standard", "rations_standard", @@ -2585,7 +2070,62 @@ "torch", "torch", "torch", - "chainmail" + "dagger", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "arrows", + "chainmail", + "sword", + "long_bow" + ], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 90, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0003", + "code": "exploration.item.acquired", + "coins_gp_value": 90, + "event_type": "item_acquired", + "item_ids": [ + "valuable-0009" + ], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0004", + "code": "exploration.item.acquired", + "coins_gp_value": 90, + "event_type": "item_acquired", + "item_ids": [ + "valuable-0007", + "valuable-0008" ], "origin": "treasure", "visibility": "player" @@ -2595,20 +2135,20 @@ "code": "exploration.wandering.checked", "encounter": true, "event_type": "wandering_check", - "roll": 2, + "roll": 6, "visibility": "referee" }, { - "alignment": "lawful", + "alignment": "chaotic", "class_ids": [ - "halfling", - "fighter" + "dwarf", + "elf" ], "code": "encounter.npc_party.spawned", "event_type": "npc_party_spawned", "levels": [ - 3, - 3 + 2, + 1 ], "npc_ids": [ "npc-0003", @@ -2620,18 +2160,18 @@ { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 6, + "roll": 2, "side": "monsters", - "surprised": false, + "surprised": true, "threshold": 2, "visibility": "referee" }, { "code": "encounter.surprise.rolled", "event_type": "surprise_rolled", - "roll": 5, + "roll": 2, "side": "party", - "surprised": false, + "surprised": true, "threshold": 3, "visibility": "referee" }, @@ -2641,143 +2181,34 @@ "distance_feet": 20, "event_type": "encounter_started", "monster_name": "Basic Adventurers", - "monsters_surprised": false, - "party_surprised": false, + "monsters_surprised": true, + "party_surprised": true, "visibility": "player" }, { "code": "encounter.reaction.rolled", "event_type": "reaction_rolled", - "modifier": 0, - "result": "attacks", - "roll": 2, - "total": 2, - "visibility": "referee" - }, - { - "code": "encounter.stance.changed", - "event_type": "stance_changed", - "stance": "attacks", - "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": [ - 1 - ], - "total": 1 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 6 - ], - "total": 6 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0003", - "character-0001", - "character-0002", - "character-0003", - "character-0004" - ], - "visibility": "player" - }, - { - "attack_name": "Sling", - "attacker_id": "npc-0003", - "back_stab": false, - "code": "combat.attack.hit", - "defender_ac": 4, - "defender_id": "character-0002", - "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-0002", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "character-0002", - "visibility": "referee" - }, - { - "code": "effects.condition.gained", - "condition": "dead", - "effect_id": null, - "event_type": "condition_gained", - "target_id": "character-0002", - "visibility": "player" - }, - { - "code": "combat.death.died", - "event_type": "death", - "target_id": "character-0002", - "visibility": "player" - }, - { - "code": "combat.state.hit_points", - "current_hp": 0, - "event_type": "hit_points_reported", - "max_hp": 3, - "target_id": "character-0002", + "modifier": 0, + "result": "uncertain", + "roll": 6, + "total": 6, "visibility": "referee" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0003", + "code": "encounter.stance.changed", + "event_type": "stance_changed", + "stance": "uncertain", "visibility": "player" }, { - "code": "battle.group.moved", - "distance_feet": 5, - "event_type": "group_moved", - "group_id": "group-0003", + "code": "battle.started", + "event_type": "battle_started", "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 2, + "round": 1, "visibility": "player" }, { @@ -2787,9 +2218,9 @@ "key": "party", "modifier": 0, "rolls": [ - 1 + 5 ], - "total": 1 + "total": 5 }, { "key": "monsters", @@ -2803,41 +2234,52 @@ "event_type": "initiative_rolled", "mode": "side", "order": [ - "group-0003", "character-0001", + "character-0002", "character-0003", - "character-0004" + "character-0004", + "group-0003" ], "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "npc-0003", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0001", - "event_type": "attack_rolled", - "modifier": 1, - "natural": null, - "required": 15, - "roll": 9, - "total": 10, + "advance_feet": 15, + "character_id": "character-0001", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0003", + "move": "close", "visibility": "player" }, { - "attack_name": "Sword", - "attacker_id": "npc-0004", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 4, - "defender_id": "character-0001", - "event_type": "attack_rolled", - "modifier": 1, - "natural": null, - "required": 15, - "roll": 8, - "total": 9, + "advance_feet": 15, + "character_id": "character-0002", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0003", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 15, + "character_id": "character-0003", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0003", + "move": "close", + "visibility": "player" + }, + { + "advance_feet": 15, + "character_id": "character-0004", + "code": "battle.member.moved", + "distance_feet": 5, + "event_type": "member_moved", + "group_id": "group-0003", + "move": "close", "visibility": "player" }, { @@ -2851,34 +2293,34 @@ "modifier": 1, "natural": null, "required": 13, - "roll": 18, - "total": 19, + "roll": 20, + "total": 21, "visibility": "player" }, { - "amount": 2, + "amount": 3, "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 1 + 2 ], "target_id": "npc-0003", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 11, + "current_hp": 9, "event_type": "hit_points_reported", - "max_hp": 13, + "max_hp": 12, "target_id": "npc-0003", "visibility": "referee" }, { - "attack_name": "Sword", - "attacker_id": "character-0003", + "attack_name": "Mace", + "attacker_id": "character-0002", "back_stab": false, "code": "combat.attack.missed", "defender_ac": 6, @@ -2887,14 +2329,44 @@ "modifier": 0, "natural": null, "required": 13, - "roll": 6, - "total": 6, + "roll": 5, + "total": 5, + "visibility": "player" + }, + { + "attack_name": "Battle axe", + "attacker_id": "npc-0003", + "back_stab": false, + "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, + "visibility": "player" + }, + { + "attack_name": "Long bow", + "attacker_id": "npc-0004", + "back_stab": false, + "code": "combat.attack.missed", + "defender_ac": 4, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 12, + "total": 12, "visibility": "player" }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 3, + "round": 2, "visibility": "player" }, { @@ -2922,26 +2394,48 @@ "order": [ "group-0003", "character-0001", + "character-0002", "character-0003", "character-0004" ], "visibility": "player" }, { - "attack_name": "Sword", + "attack_name": "Battle axe", "attacker_id": "npc-0003", "back_stab": false, - "code": "combat.attack.missed", + "code": "combat.attack.hit", "defender_ac": 4, "defender_id": "character-0001", "event_type": "attack_rolled", - "modifier": 1, + "modifier": 0, "natural": null, "required": 15, - "roll": 1, - "total": 2, + "roll": 20, + "total": 20, + "visibility": "player" + }, + { + "amount": 1, + "attacker_id": "npc-0003", + "code": "combat.damage.dealt", + "event_type": "damage_dealt", + "keys": [], + "non_regenerable": false, + "rolls": [ + 1 + ], + "target_id": "character-0001", "visibility": "player" }, + { + "code": "combat.state.hit_points", + "current_hp": 8, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "character-0001", + "visibility": "referee" + }, { "attack_name": "Sword", "attacker_id": "npc-0004", @@ -2950,11 +2444,11 @@ "defender_ac": 4, "defender_id": "character-0001", "event_type": "attack_rolled", - "modifier": 1, + "modifier": 0, "natural": null, "required": 15, - "roll": 1, - "total": 2, + "roll": 8, + "total": 8, "visibility": "player" }, { @@ -2968,50 +2462,93 @@ "modifier": 1, "natural": null, "required": 13, - "roll": 13, - "total": 14, + "roll": 15, + "total": 16, "visibility": "player" }, { - "amount": 9, + "amount": 8, "attacker_id": "character-0001", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 8 + 7 ], "target_id": "npc-0003", "visibility": "player" }, { "code": "combat.state.hit_points", - "current_hp": 2, + "current_hp": 1, "event_type": "hit_points_reported", - "max_hp": 13, + "max_hp": 12, "target_id": "npc-0003", "visibility": "referee" }, { - "attack_name": "Sword", - "attacker_id": "character-0003", + "attack_name": "Mace", + "attacker_id": "character-0002", "back_stab": false, - "code": "combat.attack.missed", + "code": "combat.attack.hit", "defender_ac": 6, "defender_id": "npc-0003", "event_type": "attack_rolled", "modifier": 0, "natural": null, "required": 13, - "roll": 12, - "total": 12, + "roll": 13, + "total": 13, + "visibility": "player" + }, + { + "amount": 1, + "attacker_id": "character-0002", + "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": 0, + "event_type": "hit_points_reported", + "max_hp": 12, + "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": 12, + "target_id": "npc-0003", + "visibility": "referee" + }, { "code": "battle.round.started", "event_type": "battle_round", - "round": 4, + "round": 3, "visibility": "player" }, { @@ -3021,63 +2558,135 @@ "key": "party", "modifier": 0, "rolls": [ - 6 + 2 ], - "total": 6 + "total": 2 }, { "key": "monsters", "modifier": 0, "rolls": [ - 5 + 6 ], - "total": 5 + "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" + }, + { + "code": "combat.morale.held", + "event_type": "morale_checked", + "held": true, + "modifier": 0, + "roll": 4, + "score": 9, + "subject": "group-0003", + "visibility": "referee" + }, + { + "code": "combat.morale.held", + "event_type": "morale_checked", + "held": true, + "modifier": 0, + "roll": 9, + "score": 9, + "subject": "group-0003", + "visibility": "referee" + }, + { + "attack_name": "Sword", + "attacker_id": "npc-0004", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 4, + "defender_id": "character-0001", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 15, + "roll": 16, + "total": 16, + "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-0001", "visibility": "player" }, + { + "code": "combat.state.hit_points", + "current_hp": 7, + "event_type": "hit_points_reported", + "max_hp": 9, + "target_id": "character-0001", + "visibility": "referee" + }, { "attack_name": "Sword", "attacker_id": "character-0001", "back_stab": false, - "code": "combat.attack.hit", + "code": "combat.attack.missed", "defender_ac": 6, - "defender_id": "npc-0003", + "defender_id": "npc-0004", "event_type": "attack_rolled", "modifier": 1, "natural": null, "required": 13, - "roll": 16, - "total": 17, + "roll": 9, + "total": 10, "visibility": "player" }, { - "amount": 3, - "attacker_id": "character-0001", + "attack_name": "Mace", + "attacker_id": "character-0002", + "back_stab": false, + "code": "combat.attack.hit", + "defender_ac": 6, + "defender_id": "npc-0004", + "event_type": "attack_rolled", + "modifier": 0, + "natural": null, + "required": 13, + "roll": 18, + "total": 18, + "visibility": "player" + }, + { + "amount": 5, + "attacker_id": "character-0002", "code": "combat.damage.dealt", "event_type": "damage_dealt", "keys": [], "non_regenerable": false, "rolls": [ - 2 + 5 ], - "target_id": "npc-0003", + "target_id": "npc-0004", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 13, - "target_id": "npc-0003", + "max_hp": 5, + "target_id": "npc-0004", "visibility": "referee" }, { @@ -3085,116 +2694,23 @@ "condition": "dead", "effect_id": null, "event_type": "condition_gained", - "target_id": "npc-0003", + "target_id": "npc-0004", "visibility": "player" }, { "code": "combat.death.died", "event_type": "death", - "target_id": "npc-0003", + "target_id": "npc-0004", "visibility": "player" }, { "code": "combat.state.hit_points", "current_hp": 0, "event_type": "hit_points_reported", - "max_hp": 13, - "target_id": "npc-0003", - "visibility": "referee" - }, - { - "attack_name": "Sword", - "attacker_id": "character-0003", - "back_stab": false, - "code": "combat.attack.missed", - "defender_ac": 5, - "defender_id": "npc-0004", - "event_type": "attack_rolled", - "modifier": 0, - "natural": null, - "required": 14, - "roll": 7, - "total": 7, - "visibility": "player" - }, - { - "code": "combat.morale.held", - "event_type": "morale_checked", - "held": true, - "modifier": 0, - "roll": 9, - "score": 9, - "subject": "group-0003", - "visibility": "referee" - }, - { - "code": "combat.morale.broke", - "event_type": "morale_checked", - "held": false, - "modifier": 0, - "roll": 12, - "score": 9, - "subject": "group-0003", + "max_hp": 5, + "target_id": "npc-0004", "visibility": "referee" }, - { - "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" - }, - { - "code": "battle.round.started", - "event_type": "battle_round", - "round": 5, - "visibility": "player" - }, - { - "code": "combat.initiative.rolled", - "entries": [ - { - "key": "party", - "modifier": 0, - "rolls": [ - 6, - 2 - ], - "total": 2 - }, - { - "key": "monsters", - "modifier": 0, - "rolls": [ - 6, - 6 - ], - "total": 6 - } - ], - "event_type": "initiative_rolled", - "mode": "side", - "order": [ - "group-0003", - "character-0001", - "character-0003", - "character-0004" - ], - "visibility": "player" - }, - { - "code": "battle.group.moved", - "distance_feet": 125, - "event_type": "group_moved", - "group_id": "group-0003", - "visibility": "player" - }, { "code": "battle.ended.victory", "event_type": "battle_ended", @@ -3205,18 +2721,18 @@ "event_type": "monster_defeated", "monster_id": "npc-0003", "outcome": "slain", - "template_id": "npc:halfling", + "template_id": "npc:dwarf", "visibility": "player", - "xp": 35 + "xp": 20 }, { "code": "battle.monster.defeated", "event_type": "monster_defeated", "monster_id": "npc-0004", - "outcome": "routed", - "template_id": "npc:fighter", + "outcome": "slain", + "template_id": "npc:elf", "visibility": "player", - "xp": 35 + "xp": 10 }, { "code": "encounter.ended", @@ -3329,60 +2845,105 @@ { "code": "session.xp.adventure_award", "event_type": "adventure_xp_award", - "monster_xp": 110, - "share": 640, + "monster_xp": 95, + "share": 708, "survivors": [ "character-0001", + "character-0002", "character-0003", "character-0004" ], - "treasure_xp": 1810, + "treasure_xp": 2740, "visibility": "player" }, { - "award": 640, + "award": 708, "character_id": "character-0001", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 672, + "modified_award": 743, + "visibility": "player" + }, + { + "award": 708, + "character_id": "character-0002", + "code": "session.xp.awarded", + "event_type": "xp_awarded", + "level_after": 1, + "modified_award": 708, "visibility": "player" }, { - "award": 640, + "award": 708, "character_id": "character-0003", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 704, + "modified_award": 708, "visibility": "player" }, { - "award": 640, + "award": 708, "character_id": "character-0004", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 704, + "modified_award": 637, "visibility": "player" }, { "character_id": "character-0001", "code": "town.treasure.sold", "event_type": "treasure_sold", - "gp_value": 1600, + "gp_value": 1000, "instance_ids": [ - "valuable-0001" + "valuable-0005" ], "visibility": "player" }, { - "character_id": "character-0001", + "character_id": "character-0002", + "code": "town.treasure.sold", + "event_type": "treasure_sold", + "gp_value": 800, + "instance_ids": [ + "valuable-0006" + ], + "visibility": "player" + }, + { + "character_id": "character-0003", + "code": "town.treasure.sold", + "event_type": "treasure_sold", + "gp_value": 250, + "instance_ids": [ + "valuable-0003", + "valuable-0002", + "valuable-0009" + ], + "visibility": "player" + }, + { + "character_id": "character-0004", + "code": "town.treasure.sold", + "event_type": "treasure_sold", + "gp_value": 220, + "instance_ids": [ + "valuable-0004", + "valuable-0001", + "valuable-0007", + "valuable-0008" + ], + "visibility": "player" + }, + { + "character_id": "character-0002", "code": "town.healing.purchased", "cost_gp": 25, "event_type": "healing_purchased", "payers": [ - "character-0001" + "character-0002" ], "payments_gp": [ 25 @@ -3399,16 +2960,16 @@ "reversed": false, "spell_id": "cure_light_wounds", "target_ids": [ - "character-0001" + "character-0002" ], "visibility": "player" }, { - "amount": 1, + "amount": 4, "code": "combat.healing.applied", "event_type": "healing_applied", "source": "magical", - "target_id": "character-0001", + "target_id": "character-0002", "visibility": "player" }, { @@ -3416,25 +2977,25 @@ "current_hp": 6, "event_type": "hit_points_reported", "max_hp": 6, - "target_id": "character-0001", + "target_id": "character-0002", "visibility": "referee" }, { "character_id": "character-0001", "code": "exploration.item.given", - "coins_gp_value": 550, + "coins_gp_value": 400, "event_type": "items_given", "item_ids": [], - "recipient_id": "character-0003", + "recipient_id": "character-0004", "visibility": "player" }, { - "character_id": "character-0001", + "character_id": "character-0002", "code": "exploration.item.given", - "coins_gp_value": 550, + "coins_gp_value": 250, "event_type": "items_given", "item_ids": [], - "recipient_id": "character-0004", + "recipient_id": "character-0003", "visibility": "player" }, { @@ -3512,7 +3073,16 @@ { "character_id": "character-0001", "code": "exploration.item.acquired", - "coins_gp_value": 17, + "coins_gp_value": 13, + "event_type": "item_acquired", + "item_ids": [], + "origin": "treasure", + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "exploration.item.acquired", + "coins_gp_value": 13, "event_type": "item_acquired", "item_ids": [ "jade-idol" @@ -3523,7 +3093,7 @@ { "character_id": "character-0003", "code": "exploration.item.acquired", - "coins_gp_value": 17, + "coins_gp_value": 12, "event_type": "item_acquired", "item_ids": [], "origin": "treasure", @@ -3532,7 +3102,7 @@ { "character_id": "character-0004", "code": "exploration.item.acquired", - "coins_gp_value": 16, + "coins_gp_value": 12, "event_type": "item_acquired", "item_ids": [], "origin": "treasure", @@ -3612,9 +3182,10 @@ "code": "session.xp.adventure_award", "event_type": "adventure_xp_award", "monster_xp": 0, - "share": 16, + "share": 12, "survivors": [ "character-0001", + "character-0002", "character-0003", "character-0004" ], @@ -3622,30 +3193,39 @@ "visibility": "player" }, { - "award": 16, + "award": 12, "character_id": "character-0001", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 16, + "modified_award": 12, + "visibility": "player" + }, + { + "award": 12, + "character_id": "character-0002", + "code": "session.xp.awarded", + "event_type": "xp_awarded", + "level_after": 1, + "modified_award": 12, "visibility": "player" }, { - "award": 16, + "award": 12, "character_id": "character-0003", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 17, + "modified_award": 12, "visibility": "player" }, { - "award": 16, + "award": 12, "character_id": "character-0004", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 17, + "modified_award": 10, "visibility": "player" }, { @@ -3688,17 +3268,50 @@ "character_id": "character-0001", "code": "session.xp.awarded", "event_type": "xp_awarded", - "level_after": 1, + "level_after": 2, "modified_award": 1260, "visibility": "player" }, + { + "character_id": "character-0001", + "code": "session.level.gained", + "con_applied": true, + "event_type": "leveled_up", + "hp_gained": 9, + "hp_roll": 8, + "level_after": 2, + "level_before": 1, + "title": "Warrior", + "visibility": "player" + }, + { + "award": 1200, + "character_id": "character-0002", + "code": "session.xp.awarded", + "event_type": "xp_awarded", + "level_after": 2, + "modified_award": 1200, + "visibility": "player" + }, + { + "character_id": "character-0002", + "code": "session.level.gained", + "con_applied": true, + "event_type": "leveled_up", + "hp_gained": 4, + "hp_roll": 3, + "level_after": 2, + "level_before": 1, + "title": "Adept", + "visibility": "player" + }, { "award": 1200, "character_id": "character-0003", "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 2, - "modified_award": 1320, + "modified_award": 1200, "visibility": "player" }, { @@ -3707,7 +3320,7 @@ "con_applied": true, "event_type": "leveled_up", "hp_gained": 4, - "hp_roll": 4, + "hp_roll": 2, "level_after": 2, "level_before": 1, "title": "Footpad", @@ -3719,7 +3332,7 @@ "code": "session.xp.awarded", "event_type": "xp_awarded", "level_after": 1, - "modified_award": 1320, + "modified_award": 1080, "visibility": "player" }, { @@ -3733,48 +3346,48 @@ "final_clock_rounds": 900, "final_stream_states": { "advancement": { - "inc": 43677341557666270100197892308947072293, - "state": 285515126583297193856346502382424624579 + "inc": 317354655078482491687660465832188465407, + "state": 46859123160200841055637109368684682207 }, "character_creation": { - "inc": 17946088532174565015500210655121870187, - "state": 185814011503179506883659008717516732608 + "inc": 288207965654386774277701128378023405837, + "state": 69307510295842233379511630583976225725 }, "combat": { - "inc": 88285706471182240999796996985449864699, - "state": 250947283381509579396439480784507074708 + "inc": 223847039291761722415136689525526848773, + "state": 120813027853640671304153976454737854151 }, "effects": { - "inc": 315281498630863548472442499383581199711, - "state": 212305229760147444865682963842332160668 + "inc": 209623227512445472299308518288371276429, + "state": 281308689499080569457827214447120371542 }, "encounter": { - "inc": 171819386744888340974805007273236693017, - "state": 275192088164284261660820693828679692415 + "inc": 330493302475760936389488351279102125643, + "state": 91190407467613683073215970989540508089 }, "magic": { - "inc": 235258215081449899357873969667663115735, - "state": 329614968649946639003684095794010180216 + "inc": 311542566478789150027771201513464184629, + "state": 5585198400819104866512205537277274776 }, "monster_action": { - "inc": 46342144612551853195774728794526618795, - "state": 149075435766120041798982209233745057685 + "inc": 301547393136339943645828462278486982837, + "state": 207414043901580423193166814868194713157 }, "monster_spawn": { - "inc": 90076630143872539436531717779739965705, - "state": 230843584225483508681358559969826006728 + "inc": 42699648013958244202175272452953316449, + "state": 11624667195297096667887646147662057217 }, "npc_party": { - "inc": 288339856986629267962509867455118458403, - "state": 128021695504321842526871152362638138911 + "inc": 291488567755035664618408732400432513535, + "state": 280655075740120148393590400225792948872 }, "treasure": { - "inc": 71902289779642106543069209520632252559, - "state": 171781426282240890362948698447536326448 + "inc": 239849886940896449135096637307929497653, + "state": 296617264269641792582791540770375850824 }, "wandering": { - "inc": 307241066519008890573396945446872461937, - "state": 255571344490792913375602188943715079090 + "inc": 268228752819095870323217671948983250349, + "state": 144229597880983293124740293767823401759 } }, "flags": { @@ -3801,10 +3414,10 @@ "listener_state": { "osrlib.interpreter": {} }, - "master_seed": 21, + "master_seed": 39, "mode": "victory", "party_document": { - "engine_version": "2.0.1", + "engine_version": "2.2.0", "kind": "party", "payload": { "characters": [ @@ -3813,7 +3426,7 @@ "carrying_treasure": false, "class_id": "fighter", "conditions": [], - "current_hp": 6, + "current_hp": 9, "extra_languages": [], "id": null, "inventory": { @@ -3821,7 +3434,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 60, + "gp": 20, "pp": 0, "sp": 0 }, @@ -3881,18 +3494,18 @@ } }, "level": 1, - "max_hp": 6, + "max_hp": 9, "memorized_spells": [], "name": "Brakka", "nonregen_damage": 0, "race": "human", "scores": { - "cha": 13, - "con": 10, - "dex": 9, - "int": 11, - "str": 15, - "wis": 13 + "cha": 7, + "con": 14, + "dex": 11, + "int": 7, + "str": 13, + "wis": 9 }, "spell_book": [], "stat_modifiers": [], @@ -3903,7 +3516,7 @@ "carrying_treasure": false, "class_id": "cleric", "conditions": [], - "current_hp": 3, + "current_hp": 6, "extra_languages": [], "id": null, "inventory": { @@ -3911,7 +3524,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 25, + "gp": 45, "pp": 0, "sp": 0 }, @@ -3957,18 +3570,18 @@ } }, "level": 1, - "max_hp": 3, + "max_hp": 6, "memorized_spells": [], "name": "Wynn", "nonregen_damage": 0, "race": "human", "scores": { - "cha": 11, - "con": 9, + "cha": 5, + "con": 15, "dex": 13, - "int": 9, - "str": 10, - "wis": 5 + "int": 17, + "str": 12, + "wis": 11 }, "spell_book": [], "stat_modifiers": [], @@ -3979,7 +3592,7 @@ "carrying_treasure": false, "class_id": "thief", "conditions": [], - "current_hp": 3, + "current_hp": 4, "extra_languages": [], "id": null, "inventory": { @@ -3987,7 +3600,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 80, + "gp": 100, "pp": 0, "sp": 0 }, @@ -4032,17 +3645,17 @@ } }, "level": 1, - "max_hp": 3, + "max_hp": 4, "memorized_spells": [], "name": "Sable", "nonregen_damage": 0, "race": "human", "scores": { - "cha": 16, - "con": 11, - "dex": 17, - "int": 10, - "str": 10, + "cha": 14, + "con": 17, + "dex": 9, + "int": 14, + "str": 13, "wis": 12 }, "spell_book": [], @@ -4054,7 +3667,7 @@ "carrying_treasure": false, "class_id": "magic_user", "conditions": [], - "current_hp": 1, + "current_hp": 4, "extra_languages": [], "id": null, "inventory": { @@ -4062,7 +3675,7 @@ "purse": { "cp": 0, "ep": 0, - "gp": 97, + "gp": 57, "pp": 0, "sp": 0 }, @@ -4106,18 +3719,18 @@ "worn_armour": null }, "level": 1, - "max_hp": 1, + "max_hp": 4, "memorized_spells": [], "name": "Elandril", "nonregen_damage": 0, "race": "human", "scores": { - "cha": 11, - "con": 9, - "dex": 15, - "int": 16, - "str": 10, - "wis": 8 + "cha": 12, + "con": 10, + "dex": 16, + "int": 7, + "str": 13, + "wis": 10 }, "spell_book": [ "sleep" @@ -4133,30 +3746,30 @@ { "class_id": "fighter", "id": "character-0001", - "level": 1, + "level": 2, "name": "Brakka", - "xp": 1948 + "xp": 2015 }, { "class_id": "cleric", "id": "character-0002", - "level": 1, + "level": 2, "name": "Wynn", - "xp": 0 + "xp": 1920 }, { "class_id": "thief", "id": "character-0003", "level": 2, "name": "Sable", - "xp": 2041 + "xp": 1920 }, { "class_id": "magic_user", "id": "character-0004", "level": 1, "name": "Elandril", - "xp": 2041 + "xp": 1727 } ], "quests": { @@ -4180,61 +3793,46 @@ "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, 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: 7+0 = 7 — uncertain.", + "Treasure generated at cache-0001 (C): 0 gp in coin, 6 valuable(s), 0 magic item(s).", + "Surprise (monsters): rolled 2, surprised on 1-2 — surprised.", + "Surprise (party): rolled 4, surprised on 1-3 — not surprised.", + "Encounter: 2 × Goblin at 20' — the monsters are surprised.", + "Reaction roll: 4+0 = 4 — hostile.", + "The monsters' bearing: hostile.", "Battle is joined!", "Battle round 1 begins.", - "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-0002 with weapon: rolled 1+0 = 1, needing 15.", - "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-0001 with weapon: rolled 5+0 = 5, needing 15.", - "monster-0002 hits character-0002 with weapon: rolled 17+0 = 17, needing 15.", - "character-0002 takes 1 damage from monster-0002.", - "character-0002 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 6. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", - "monster-0001 misses character-0002 with weapon: rolled 3+0 = 3, needing 15.", - "monster-0002 hits character-0001 with weapon: rolled 17+0 = 17, needing 15.", - "character-0001 takes 1 damage from monster-0002.", - "character-0001 is at 5/6 hit points.", - "character-0001 misses monster-0001 with Sword: rolled 4+1 = 5, needing 13.", + "Initiative (side): party 1, monsters 2. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", + "character-0001 closes to 5' from group-0001.", + "character-0002 closes to 5' from group-0001.", + "character-0003 closes to 5' from group-0001.", + "character-0004 closes to 5' from group-0001.", + "character-0001 hits monster-0001 with Sword: rolled 19+1 = 20, needing 13.", + "monster-0001 takes 2 damage from character-0001.", + "monster-0001 is at 4/6 hit points.", "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 takes 6 damage from character-0002.", + "monster-0001 is at 0/6 hit points.", "monster-0001 is dead.", "monster-0001 is killed.", - "monster-0001 is at 0/1 hit points.", - "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.", + "monster-0001 is at 0/6 hit points.", + "Battle round 2 begins.", + "Initiative (side): party 4, monsters 5. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", + "Morale check for group-0001 (ML 7): rolled 10+0 — they flee or surrender.", "group-0001 flees the battle!", - "group-0001 is now 65' away.", - "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 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.", + "group-0001 is now 80' away.", + "character-0001 misses monster-0002 with Sword: rolled 7+3 = 10, needing 13.", + "character-0002 misses monster-0002 with Mace: rolled 7+2 = 9, needing 13.", + "Battle round 3 begins.", + "Initiative (side): party 3, monsters 4. Order: group-0001, character-0001, character-0002, character-0003, character-0004.", + "group-0001 is now 140' away.", "The battle is won.", "monster-0001 (goblin) is slain.", "monster-0002 (goblin) is routed.", "The encounter ends (victory).", - "character-0001 acquires valuable-0001.", + "character-0001 acquires valuable-0005.", + "character-0002 acquires valuable-0006.", + "character-0003 acquires valuable-0003, valuable-0002.", + "character-0004 acquires valuable-0004, 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).", @@ -4242,109 +3840,114 @@ "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): 210 gp in coin, 0 valuable(s), 0 magic item(s).", - "character-0001 acquires 52 gp in coin.", - "character-0002 acquires 52 gp in coin.", - "character-0003 acquires 52 gp in coin.", - "character-0004 acquires 52 gp in coin.", + "Treasure generated at cache-0002 (unguarded): 110 gp in coin, 0 valuable(s), 0 magic item(s).", + "character-0001 acquires 27 gp in coin.", + "character-0002 acquires 27 gp in coin.", + "character-0003 acquires 27 gp in coin.", + "character-0004 acquires 27 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.", + "An NPC party (basic, chaotic) takes the field: npc-0001 (magic_user 3), npc-0002 (elf 2).", + "Surprise (monsters): rolled 3, surprised on 1-2 — not surprised.", "Surprise (party): rolled 6, surprised on 1-3 — not surprised.", "Encounter: 2 × Basic Adventurers at 20'.", - "Reaction roll: 6+0 = 6 — uncertain.", + "Reaction roll: 7+0 = 7 — uncertain.", "The monsters' bearing: uncertain.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 4, monsters 5. Order: group-0002, character-0001, character-0002, character-0003, character-0004.", - "group-0002 is now 5' away.", - "npc-0002 misses character-0002 with Dagger: rolled 9+0 = 9, needing 15.", - "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.", + "Initiative (side): party 2, monsters 1. Order: character-0001, character-0002, character-0003, character-0004, group-0002.", + "character-0001 closes to 5' from group-0002.", + "character-0002 closes to 5' from group-0002.", + "character-0003 closes to 5' from group-0002.", + "character-0004 closes to 5' from group-0002.", + "character-0001 hits npc-0001 with Sword: rolled 16+1 = 17, needing 10.", + "npc-0001 takes 7 damage from character-0001.", + "npc-0001 is at 0/5 hit points.", "npc-0001 is dead.", "npc-0001 is killed.", - "npc-0001 is at 0/6 hit points.", + "npc-0001 is at 0/5 hit points.", + "character-0002 hits npc-0002 with Mace: rolled 20+0 = 20, needing 13.", + "npc-0002 takes 6 damage from character-0002.", + "npc-0002 is at 1/7 hit points.", + "Morale check for group-0002 (ML 9): rolled 4+0 — they fight on.", + "Morale check for group-0002 (ML 9): rolled 8+0 — they fight on.", + "npc-0002 misses character-0002 with Long bow: rolled 13+0 = 13, needing 15.", + "Battle round 2 begins.", + "Initiative (side): party 3, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, group-0002.", + "character-0001 misses npc-0002 with Sword: rolled 8+1 = 9, needing 13.", + "character-0002 misses npc-0002 with Mace: rolled 5+0 = 5, needing 13.", + "npc-0002 misses character-0002 with Sword: rolled 12+0 = 12, needing 15.", "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 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.", + "Initiative (side): party 1, monsters 6. Order: group-0002, character-0001, character-0002, character-0003, character-0004.", + "npc-0002 hits character-0002 with Sword: rolled 20+0 = 20, needing 15.", + "character-0002 takes 4 damage from npc-0002.", + "character-0002 is at 2/6 hit points.", + "character-0001 misses npc-0002 with Sword: rolled 4+1 = 5, needing 13.", + "character-0002 hits npc-0002 with Mace: rolled 18+0 = 18, needing 13.", + "npc-0002 takes 3 damage from character-0002.", + "npc-0002 is at 0/7 hit points.", "npc-0002 is dead.", "npc-0002 is killed.", - "npc-0002 is at 0/3 hit points.", + "npc-0002 is at 0/7 hit points.", "The battle is won.", - "npc-0001 (npc:dwarf) is slain.", - "npc-0002 (npc:magic_user) is slain.", + "npc-0001 (npc:magic_user) is slain.", + "npc-0002 (npc:elf) is slain.", "The encounter ends (victory).", - "character-0001 acquires battle_axe, dagger.", - "character-0002 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.", - "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: 2+0 = 2 — attacks.", - "The monsters' bearing: attacks.", + "character-0001 acquires 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, dagger, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, arrows, chainmail, sword, long_bow and 90 gp in coin.", + "character-0002 acquires 90 gp in coin.", + "character-0003 acquires valuable-0009 and 90 gp in coin.", + "character-0004 acquires valuable-0007, valuable-0008 and 90 gp in coin.", + "Wandering check: 6 vs 6-in-6 — an encounter!", + "An NPC party (basic, chaotic) takes the field: npc-0003 (dwarf 2), npc-0004 (elf 1).", + "Surprise (monsters): rolled 2, surprised on 1-2 — surprised.", + "Surprise (party): rolled 2, surprised on 1-3 — surprised.", + "Encounter: 2 × Basic Adventurers at 20' — the party is surprised — the monsters are surprised.", + "Reaction roll: 6+0 = 6 — uncertain.", + "The monsters' bearing: uncertain.", "Battle is joined!", "Battle round 1 begins.", - "Initiative (side): party 1, monsters 6. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", - "npc-0003 hits character-0002 with Sling: rolled 17+2 = 19, needing 15.", - "character-0002 takes 2 damage from npc-0003.", - "character-0002 is at 0/3 hit points.", - "character-0002 is dead.", - "character-0002 is killed.", - "character-0002 is at 0/3 hit points.", - "group-0003 is now 5' away.", - "group-0003 is now 5' away.", - "Battle round 2 begins.", - "Initiative (side): party 1, monsters 2. Order: group-0003, character-0001, character-0003, character-0004.", - "npc-0003 misses character-0001 with Sword: rolled 9+1 = 10, needing 15.", - "npc-0004 misses character-0001 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-0003 misses npc-0003 with Sword: rolled 6+0 = 6, needing 13.", - "Battle round 3 begins.", - "Initiative (side): party 1, monsters 3. Order: group-0003, character-0001, character-0003, character-0004.", - "npc-0003 misses character-0001 with Sword: rolled 1+1 = 2, needing 15.", - "npc-0004 misses character-0001 with Sword: rolled 1+1 = 2, needing 15.", - "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-0003 misses npc-0003 with Sword: rolled 12+0 = 12, needing 13.", - "Battle round 4 begins.", - "Initiative (side): party 6, monsters 5. Order: character-0001, character-0003, character-0004, group-0003.", - "character-0001 hits npc-0003 with Sword: rolled 16+1 = 17, needing 13.", + "Initiative (side): party 5, monsters 2. Order: character-0001, character-0002, character-0003, character-0004, group-0003.", + "character-0001 closes to 5' from group-0003.", + "character-0002 closes to 5' from group-0003.", + "character-0003 closes to 5' from group-0003.", + "character-0004 closes to 5' from group-0003.", + "character-0001 hits npc-0003 with Sword: rolled 20+1 = 21, needing 13.", "npc-0003 takes 3 damage from character-0001.", - "npc-0003 is at 0/13 hit points.", + "npc-0003 is at 9/12 hit points.", + "character-0002 misses npc-0003 with Mace: rolled 5+0 = 5, needing 13.", + "npc-0003 misses character-0002 with Battle axe: rolled 3+0 = 3, needing 15.", + "npc-0004 misses character-0001 with Long bow: rolled 12+0 = 12, needing 15.", + "Battle round 2 begins.", + "Initiative (side): party 1, monsters 3. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", + "npc-0003 hits character-0001 with Battle axe: rolled 20+0 = 20, needing 15.", + "character-0001 takes 1 damage from npc-0003.", + "character-0001 is at 8/9 hit points.", + "npc-0004 misses character-0001 with Sword: rolled 8+0 = 8, needing 15.", + "character-0001 hits npc-0003 with Sword: rolled 15+1 = 16, needing 13.", + "npc-0003 takes 8 damage from character-0001.", + "npc-0003 is at 1/12 hit points.", + "character-0002 hits npc-0003 with Mace: rolled 13+0 = 13, needing 13.", + "npc-0003 takes 1 damage from character-0002.", + "npc-0003 is at 0/12 hit points.", "npc-0003 is dead.", "npc-0003 is killed.", - "npc-0003 is at 0/13 hit points.", - "character-0003 misses npc-0004 with Sword: rolled 7+0 = 7, needing 14.", + "npc-0003 is at 0/12 hit points.", + "Battle round 3 begins.", + "Initiative (side): party 2, monsters 6. Order: group-0003, character-0001, character-0002, character-0003, character-0004.", + "Morale check for group-0003 (ML 9): rolled 4+0 — they fight on.", "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 2, monsters 6. Order: group-0003, character-0001, character-0003, character-0004.", - "group-0003 is now 125' away.", + "npc-0004 hits character-0001 with Sword: rolled 16+0 = 16, needing 15.", + "character-0001 takes 1 damage from npc-0004.", + "character-0001 is at 7/9 hit points.", + "character-0001 misses npc-0004 with Sword: rolled 9+1 = 10, needing 13.", + "character-0002 hits npc-0004 with Mace: rolled 18+0 = 18, needing 13.", + "npc-0004 takes 5 damage from character-0002.", + "npc-0004 is at 0/5 hit points.", + "npc-0004 is dead.", + "npc-0004 is killed.", + "npc-0004 is at 0/5 hit points.", "The battle is won.", - "npc-0003 (npc:halfling) is slain.", - "npc-0004 (npc:fighter) is routed.", + "npc-0003 (npc:dwarf) is slain.", + "npc-0004 (npc:elf) is slain.", "The encounter ends (victory).", "The party moves to (1, 0), facing west.", "The party moves to (0, 0), facing west.", @@ -4356,17 +3959,21 @@ "The party moves to (1, 0), facing west.", "The party moves to (0, 0), facing west.", "The party enters town town.", - "The adventure ends: 110 XP from monsters and 1810 XP from treasure — 640 XP to each of 3 survivor(s).", - "character-0001 gains 672 XP (base 640), now level 1.", - "character-0003 gains 704 XP (base 640), now level 1.", - "character-0004 gains 704 XP (base 640), now level 1.", - "character-0001 sells 1 valuable(s) for 1600 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 1 hit points (magical).", - "character-0001 is at 6/6 hit points.", - "character-0001 gives 550 gp in coin to character-0003.", - "character-0001 gives 550 gp in coin to character-0004.", + "The adventure ends: 95 XP from monsters and 2740 XP from treasure — 708 XP to each of 4 survivor(s).", + "character-0001 gains 743 XP (base 708), now level 1.", + "character-0002 gains 708 XP (base 708), now level 1.", + "character-0003 gains 708 XP (base 708), now level 1.", + "character-0004 gains 637 XP (base 708), now level 1.", + "character-0001 sells 1 valuable(s) for 1000 gp.", + "character-0002 sells 1 valuable(s) for 800 gp.", + "character-0003 sells 3 valuable(s) for 250 gp.", + "character-0004 sells 4 valuable(s) for 220 gp.", + "character-0002 purchases cure_light_wounds at the temple for 25 gp.", + "town-cleric casts cure_light_wounds [heal] at character-0002.", + "character-0002 regains 4 hit points (magical).", + "character-0002 is at 6/6 hit points.", + "character-0001 gives 400 gp in coin to character-0004.", + "character-0002 gives 250 gp in coin to character-0003.", "The party enters dungeon barrow (level 1).", "The party moves to (1, 0), facing east.", "The party moves to (2, 0), facing east.", @@ -4374,9 +3981,10 @@ "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 jade-idol and 17 gp in coin.", - "character-0003 acquires 17 gp in coin.", - "character-0004 acquires 16 gp in coin.", + "character-0001 acquires 13 gp in coin.", + "character-0002 acquires jade-idol and 13 gp in coin.", + "character-0003 acquires 12 gp in coin.", + "character-0004 acquires 12 gp in coin.", "Quest The Jade Idol: objective Recover the idol is done. The idol comes up out of the hollow, cold as well-water.", "The party moves to (3, 0), facing west.", "The party enters area guard_room (level 1).", @@ -4384,18 +3992,22 @@ "The party moves to (1, 0), facing west.", "The party moves to (0, 0), facing west.", "The party enters town town.", - "The adventure ends: 0 XP from monsters and 50 XP from treasure — 16 XP to each of 3 survivor(s).", - "character-0001 gains 16 XP (base 16), now level 1.", - "character-0003 gains 17 XP (base 16), now level 1.", - "character-0004 gains 17 XP (base 16), now level 1.", + "The adventure ends: 0 XP from monsters and 50 XP from treasure — 12 XP to each of 4 survivor(s).", + "character-0001 gains 12 XP (base 12), now level 1.", + "character-0002 gains 12 XP (base 12), now level 1.", + "character-0003 gains 12 XP (base 12), now level 1.", + "character-0004 gains 10 XP (base 12), now level 1.", "Quest The Jade Idol: objective Bring it home is done. Threshold's gate shuts behind you with the idol inside it.", "Quest complete: The Jade Idol. The almoner counts out the reward without looking up. The idol is home.", "The adventure is over: The Jade Idol is finished. The almoner counts out the reward without looking up. The idol is home.", "character-0001 acquires 200 gp in coin.", - "character-0001 gains 1260 XP (base 1200), now level 1.", - "character-0003 gains 1320 XP (base 1200), now level 2.", - "character-0003 advances to level 2 (Footpad): +4 hp (rolled 4).", - "character-0004 gains 1320 XP (base 1200), now level 1.", + "character-0001 gains 1260 XP (base 1200), now level 2.", + "character-0001 advances to level 2 (Warrior): +9 hp (rolled 8).", + "character-0002 gains 1200 XP (base 1200), now level 2.", + "character-0002 advances to level 2 (Adept): +4 hp (rolled 3).", + "character-0003 gains 1200 XP (base 1200), now level 2.", + "character-0003 advances to level 2 (Footpad): +4 hp (rolled 2).", + "character-0004 gains 1080 XP (base 1200), now level 1.", "Flag quest.idol = 'recovered'." ] } diff --git a/tests/test_example_crawler.py b/tests/test_example_crawler.py index 3e97998..55f7f92 100644 --- a/tests/test_example_crawler.py +++ b/tests/test_example_crawler.py @@ -15,16 +15,9 @@ import sys from pathlib import Path -import pytest - REPO_ROOT = Path(__file__).resolve().parent.parent SCRIPT = REPO_ROOT / "examples" / "tui_crawler" / "scripts" / "milestone.txt" -MILESTONE_SEED = 21 - -# The crawler closes while a group is beyond 5' and then attacks with the front rank. Under the rules for member -# positions on the range track (issue #209), a group's distance no longer shrinks when members close, so the crawler -# and the milestone golden change together once those chunks are built. -pytestmark = pytest.mark.xfail(reason="chunk: goldens", strict=False) +MILESTONE_SEED = 39 def run_crawler(*arguments: str) -> subprocess.CompletedProcess: diff --git a/tests/test_phase4_goldens.py b/tests/test_phase4_goldens.py index 6303ff5..202e63d 100644 --- a/tests/test_phase4_goldens.py +++ b/tests/test_phase4_goldens.py @@ -32,10 +32,6 @@ GOLDEN_PATH = Path(__file__).parent / "goldens" / "phase4_delve.json" -# The rules for member positions on the range track (issue #209) change every battle in this golden that closes on a -# group, so the golden is regenerated once those chunks are built. Until then a mismatch is expected. -pytestmark = pytest.mark.xfail(reason="chunk: goldens", strict=False) - REGENERATE_HINT = ( "golden mismatch; if the change is intentional, regenerate with " "`uv run python tests/generate_phase4_goldens.py` and explain why in the commit message" diff --git a/tests/test_phase5_goldens.py b/tests/test_phase5_goldens.py index a810b35..db8b700 100644 --- a/tests/test_phase5_goldens.py +++ b/tests/test_phase5_goldens.py @@ -37,10 +37,6 @@ GOLDEN_DIR = Path(__file__).parent / "goldens" -# The rules for member positions on the range track (issue #209) change every battle in the milestone golden that -# closes on a group, so the golden is regenerated once those chunks are built. Until then a mismatch is expected. -GOLDENS = pytest.mark.xfail(reason="chunk: goldens", strict=False) - REGENERATE_HINT = ( "golden mismatch; if the change is intentional, regenerate with " "`uv run python tests/generate_phase5_goldens.py` and explain why in the commit message" @@ -99,7 +95,6 @@ def replayed(golden): return replay_milestone(golden["master_seed"], golden["command_log"]) -@GOLDENS class TestMilestoneScriptedRun: def test_party_document_matches(self, golden, scripted): _, party_document, _ = scripted @@ -151,7 +146,6 @@ def test_save_load_round_trips_the_listener_run(self, scripted): assert session_state(restored) == session_state(session) -@GOLDENS class TestMilestoneReplay: def test_event_stream_matches_byte_for_byte(self, golden, replayed): events = [entry if isinstance(entry, dict) else entry.model_dump(mode="json") for entry in replayed.event_log] @@ -244,7 +238,6 @@ def test_the_command_log_round_trips(self, golden): assert parse_command(entry) is not None -@GOLDENS class TestCheckpoints: @pytest.mark.parametrize("name", ("mid_delve", "first_return", "post_award")) def test_load_equals_replay_and_continues_identically(self, golden, replayed, name):