Dev Blog
Dynamic NPC Party Guests!
February 17, 2026
Organic NPC Join/Departure Detection
After each DM post, the system detects when NPCs or creatures narratively join the party
Host receives a proposal modal to approve or dismiss each join — supports multiple joins per DM post, queued sequentially
Detected NPCs are tagged as "Guest" alongside the NPC badge (teal #00897b)
Generated character sheets are fully editable in the proposal modal: name, race, class, description, personality, abilities, and origins (add/remove)
Host can swap the generated sheet for an existing character from the library via dropdown; library characters shown read-only
Character library lookup uses fuzzy first-name matching with Unicode normalization (curly quotes → straight)
Characters already in the session are excluded from library suggestions or additional join requests
Organic NPC departure detection: when a guest NPC narratively leaves, the host gets a departure modal to confirm
Enemies that switch to "allied" disposition during combat are also marked as organic guests
NPCs (guests or manually added) no longer count against the session's MaxPlayers limit
DM Prompt Improvements
First post mode now places the party in the scene — the DM describes where they are and what's around them, instead of pretending PCs don't exist
First post mode only activates when there are no DM messages AND no player input; if a player types before the first /dm, the regular prompt is used
First post scenes feel like a natural slice of the world, not curated adventure hooks
Regular DM prompt: NPCs are now proactive — they approach, make demands, offer unsolicited advice, pick fights, flirt, lie, or manipulate; the DM actively guides players while respecting their decisions
NSFW first post also places characters in the scene with the same guidelines
Combat narration toned down from breathless/cinematic to grounded, novel-like prose — varied weight, concrete descriptions, save intensity for moments that earn it
Enemy Naming
Combat detection and reinforcement prompts now generate proper noun names for enemies ("Fenris" not "Territorial Wolf")
Join detection prompt generates proper names for unnamed NPCs ("Silverfang" not "elder wolf")
Disposition Analysis Fix
No-op disposition changes (fighting → fighting) are now filtered out, preventing spurious narration posts during active combat
Previously the filter only matched fighting enemies; now it compares current vs proposed disposition and drops identical ones
Combat UX Overhaul, Web Client
February 17, 2026
Adventure Machine — Changelist
Feb 16, 2026
Combat UX Overhaul
AOE enemy abilities now display all target rolls simultaneously instead of one-at-a-time
Enemies flash their status (defeated/fled/surrendered/allied) inline when it happens, not batched at end of round
Defeated enemies now flash at the moment they hit 0 resolve, then disappear (no more reappearing at end of round)
Revive system: healing a downed player (0 resolve) always succeeds, no dice roll needed
Downed players auto-pass and are blocked from submitting actions
Fortuna charges get a gold flash animation, both in and out of combat
Crit resist (rolls 19-20) now correctly grants Fortuna
Host can adjust enemy resolve with +/- buttons on enemy panels
Host can toggle any player or NPC's Fortuna status (with flash on toggle-on)
Enemy damage numbers display in red instead of green
Health bars update live per individual hit and heal (snapshot-based tracking)
Flash Lite 2.5 used for origin bonus evaluation and ally character sheet generation
Overlay badge fade curve: long hold with quick fadeout
Enemy Disambiguation
Same-named enemies (e.g. 3 wolves) are now tracked individually with #1, #2, #3 labels in the combat summary
Turn start flash now targets the correct enemy panel instead of always the first matching name
DM narration receives numbered labels but is instructed to use descriptive cues instead (position, injuries, size)
Enemy list in narration prompt includes resolve status for each individual enemy
Narration Improvements
DM narration no longer says players "died" — uses knocked out, battered, bloodied, etc.
Player knockout called out in narration immediately after the hit that downs them
"No valid target" lines excluded from narration
Every action in the combat log is now required to appear in the narration (no more skipped actions)
Narration word count scales dynamically with the number of actions instead of a fixed cap
Bug Fixes
Fix heal always targeting self: character names with spaces were truncated during parsing; now uses player ID
Fix phantom combat round triggering on session reconnect (LINQ All on empty set returned true)
Fix IsOnline flag never persisting due to AsNoTracking on the JoinSession query
Fix Fortuna button not updating after combat state changes
Fix admin edit buttons disappearing on About and Blog pages
UI Polish
Fix resolve +/- button alignment in player sidebar
Host/NPC badges repositioned below HP bar to avoid close button overlap
Fortuna star appears simultaneously with the flash, disappears immediately on use
Encounter editor: add enemy controls moved to sticky footer row
Encounter editor: dropdown + button pattern allows adding the same mob multiple times
Content
Add About and Blog pages with admin-editable site content
Memory search improvements
Release Notes! Mostly to test the system, but hey! Patches!
February 16, 2026
Dalamud Plugin Updates:
v1.0.1.4
Fix OOC input row sizing and Send button alignment
v1.0.1.3
Add dedicated OOC input row to session window
v1.0.1.2
Remove server URL from settings UI (hardcoded to Adventure Machine server)
Add /rp config command to open settings window directly
v1.0.1.1
Add /rp config command to open settings window directly
v1.0.1.0
Fix character selection when joining/resuming sessions: active sessions now resume with your existing character instead of re-creating from game data
Add character picker popup when joining new sessions (public list, join-by-code), defaulting to your in-game character
v1.0.0.0
Create, browse, and join roleplay sessions (public, friends-only, private, or by invite code)
Auto-create characters from your in-game FFXIV data (name, race, class, appearance)
Real-time multiplayer chat with in-character and OOC messages, typing indicators, and streaming DM responses
AI Dungeon Master controls for hosts: prompt the DM, retry/regenerate responses, toggle NSFW
Combat system with manual encounters, attacks, heals, special abilities, Fortuna points, and DC rolls
Friends system: search users, send/accept/decline requests, manage friends list
Session host tools: pause/resume sessions, add NPCs, browse enemy templates from mob library, edit enemy stats
World and character selection from saved lists or auto-created from current FFXIV zone/character
Configurable server URL, display name, and OpenRouter API key for hosting
Soft Launch!
February 15, 2026
Not much else to add here other than to say the website is live, the dalamud plugin connects, and I'm hard at work on new features and bug fixes! I'll do a more detailed update the next time I roll out features, but for now, welcome to the Adventure Machine! 🎉