Repository navigation
v3.4.0
What's new
Story DM observability
- Every NPC now produces an
[StoryDM Pass1] ACCEPTED|skipped-<reason>line inIntelEngine.logwith score, formId and rejection reason. Previously-silent skips (recent,teammate) are now diagnosable from the log. [StoryDM Pass2]/[Pass3]log loaded-actor and location-mate additions, so the full candidate pool composition is visible.- "Last story dispatched" hint no longer suggests gated-off subtypes; the LLM is steered back to the
Available Story Typessection.
seek_player prompt steering
- Long-absent acquainted intimates (lovers, sworn friends, travel companions, family) are now promoted as PRIME
seek_playercandidates — missing the player is itself a legitimate motive, no fresh crisis required. - New rule under Player Familiarity steers the LLM to prefer
seek_playerover faction-courier dispatches when an acquainted candidate has been absent 2+ in-game days. - Added absence-driven JSON example alongside the existing event-driven one.
Fixes
- Maintenance duplicate-call guard: no longer rejects new sessions on game-load. The previous guard compared against
GetCurrentRealTime()which resets to 0 on every game launch, blocking maintenance from running until you'd been in-session for several real-time minutes. - Battle real-time timer cleanup: stale
BattleStartRealTimevalues from a prior session are now cleared onOnGameReloadinstead of being compared against the new session's reset clock — battles that previously appeared "stuck for hours" on load are now correctly recognized as fresh. - StoryEngine session rollover: new
ClearStaleRealTimeTimershelper called on game load scrubs allGetCurrentRealTime()-derived timestamps so cross-session resumption doesn't mis-classify state.
Compatibility
No public API changes. SkyrimNet PublicAPI version requirements unchanged. Drop-in replacement for v3.3.1 — no save-game migration needed.