The game is now self-contained: run.sh starts the TUI, which calls the LLM directly via engine.py. No external agent (OpenCode) needed. - tools/engine.py: Game engine with prompt builder, litellm client, response parser (JSON block extraction), and state persistence - tools/run.py: Refactored TUI with PLAY/CHAR/LOG/BOOK tabs. PLAY tab has streaming narrative pane, dynamic choice buttons, and text input. Game loop: scene -> input -> resolve -> archive -> apply -> scene - session/config.json: LLM provider configuration (model, api_key, etc.) - AGENTS.md: Updated to document the new architecture - tools/__init__.py: Package marker for clean imports - session/turn_description.md, turn_reaction.md: Deprecated - no longer needed now that the TUI drives the game loop internally
4.8 KiB
4.8 KiB
Session Log — 2026-06-25
- Early Afternoon — Back at the Keep. Head to Weber's Smithy with Rina and Lark. Dillion tells Rina they'll settle with Weber first, then get her rested.
- Early Afternoon — Weber pays 8 silver and sharpens the mace (1d6+2 for next job). Asks if Rina is "one of Fenna's lot." Dillion explains she was locked in the cellar.
- Early Afternoon — Dillion, Rina, and Lark head to the Splintered Tankard. Dillion asks Otta to help Rina get cleaned up. Otta agrees — sends Rina to the back for a bath, finds her a change of clothes.
- Early Afternoon — While Rina recovers, Dillion hits the Market Square. Buys 6 torches (6 copper) and 5 days rations (5 silver). Pays Lark 5 silver for his help and sends him off. Lark leaves with a grin.
- Early Afternoon — Dillion sits down with Rina to learn her skills and background. She's a locksmith and trap-finder, proficient with a crossbow and dagger. Dillion takes her to Weber's for a crossbow, then to the market for a leather vest.
- Late Afternoon — Dillion and Rina head back to Three Bridges on the King's Road. Bought two long ropes on the way (4 silver). Reach the mill as the sun begins to dip. Enter through the loose board, descend into the cellar tunnel.
- Late Afternoon — Cautious descent into the tunnel. Air grows acrid — blood, decay, mint. The rough-hewn tunnel slopes steadily down, walls sweating moisture. After ~15 minutes, the tunnel opens into a natural cavern. Faint light pulses from bioluminescent fungi on the ceiling. A stone door with the fist-and-gear crest stands on the far wall, slightly ajar.
- Late Afternoon — Dillion decides to enter through the ajar stone door. Sneaks in successfully (DEX 5). Rina spots a tripwire — they step over it and proceed into the chamber beyond.
- Late Afternoon — Chamber contains a tall construct (grey stone skin, red eyes, cloth/rusted metal armour). It watches but doesn't attack. Dillion and Rina edge along the wall toward the left corridor without triggering it.
- Late Afternoon — Left corridor leads to an iron-banded wooden door with a heavy lock. Rina picks it while Dillion stands watch.
- Late Afternoon — Beyond the door: a storage room with two men (Beard and Scar) on guard duty. Dillion and Rina slip into cover behind crates (DEX 9). Ambush: Rina bolts Scar through the neck, Dillion cuts Beard's throat. Both killed silently.
- Late Afternoon — Bodies hidden. Dillion searches the guards (19 silver, key ring, handbill). Rina finds delivery manifests and a note mentioning "The Weeper" and "H." Dillion takes the loot and moves to the iron-reinforced door. Listens. Opens it safely with a rope from behind crates. Beyond: a dark tunnel sloping downward, humid air, slow rhythmic breathing sound.
- Late Afternoon — Dillion and Rina descend into the tunnel. It opens into a chamber with a pit at the centre — chains descending into darkness, slow wet breathing from below. A second iron door on the far side. Dillion and Rina skirt the pit silently (DEX 7). Beyond the door: a hallway with a velvet curtain, warm light and a chanting voice beyond. Dillion peeks: a weaver's study, chalk circle with a dagger at the centre. He pulls back to consult Rina.
- Late Afternoon — Dillion weighs the options — wait for the ritual to finish and snatch the artifact, or strike now. Rina warns it's blood magick. The weaver's chant climbs toward its peak. Decision hangs in the air.
- Late Afternoon — Dillion decides to hide and wait. DEX check (11, success). Dillion and Rina slip into the weaver's study undetected, taking cover behind shelves and the table as the ritual reaches its climax.
- Late Afternoon — The ritual completes. A wounded demon emerges from the chalk circle — scarred, a blade in its chest, frost radiating from its feet. Dillion signals Rina to hold. The weaver tries to command the demon — it kills him instead. Now it stands in the dark, searching the room.
- Late Afternoon — Combat opens. Dillion wins initiative. He hurls a jar to distract — Rina fires but misses. The demon strikes Dillion with a freezing blast (−4 HP, now 6/10). Dillion is on his feet, mace ready. Rina reloads.
- Late Afternoon — Dillion lands a solid blow on the demon's ribs (5+2=7 hits, 1+2-1=2 damage). The demon shrugs it off, wound icing over. Rina finishes reloading.
- Late Afternoon — Dillion shouts "Shoot!" Rina fires but misses (3). Dillion swings hard (5) — 6 damage. The demon staggers. Dillion and Rina flee through the hallway into the pit chamber. The demon gives chase.
- Late Afternoon — Ambush at the pit. Rina hits (5, 2 damage -1 = 1). Stones miss (1). Dillion tries again (4) — knocks the demon into the pit. Escape clean (5). Dillion and Rina flee the underground, back through the tunnel, and emerge at the mill at dusk.