You are viewing a potentially older version of this package. View all versions.
CeruleanCutlass-StoryKit-0.1.3 icon

StoryKit

Add an NPC to Outward as plain data: StoryKit builds the character, spawns it at a fixed spot, wires its dialogue, and compiles a trainer skill tree that sells from the vanilla Trainer UI. Requires SideLoader at runtime. A library dependency.

Date uploaded 2 days ago
Version 0.1.3
Download link CeruleanCutlass-StoryKit-0.1.3.zip
Downloads 34
Dependency string CeruleanCutlass-StoryKit-0.1.3

This mod requires the following mods to function

BepInEx-BepInExPack_Outward-5.4.19 icon
BepInEx-BepInExPack_Outward

BepInEx pack for Outward.

Preferred version: 5.4.19
sinai-dev-SideLoader-3.8.4 icon
sinai-dev-SideLoader

API and Mod Development Toolkit for Outward.

Preferred version: 3.8.4
CeruleanCutlass-ForgeKit-0.4.4 icon
CeruleanCutlass-ForgeKit

Dependency-free dev-tooling for Outward BepInEx mods: file-driven dev command loop, self-test harness, on-screen toasts, player-ready lifecycle wait, embedded/override table loaders, and a shared dev-verb pack (movement/combat/skill/status probes).

Preferred version: 0.4.4

README

StoryKit โ€” add an NPC, trainer, and skill tree

๐Ÿ“– Full documentation: StoryKit wiki page

A BepInEx library plugin for Outward (Definitive Edition, Mono branch) that lets a mod add an NPC: a standing character in the world with a dialogue graph and, if it's a trainer, a full in-game skill tree the vanilla Trainer window sells from. A consuming mod describes the NPC as plain data; StoryKit builds the character, spawns it at a fixed spot, wires its conversation, and compiles its skill tree โ€” no custom UI, no NodeCanvas hand-editing.

StoryKit covers NPCs, trainers, and dialogue. A quest/story-event engine is not part of the kit โ€” there is no quest-authoring API. (It does ship read-only recon tooling over the vanilla QuestEventManager โ€” the qevent* dev verbs below โ€” but that is diagnostics, not an authoring surface, and it's off unless [Recon] EnableStoryRecon is turned on.)

Requires: BepInEx 5 (Outward's Mono branch โ€” see Compatibility), ForgeKit, and SideLoader present at runtime.

Installing (for players)

You don't install or interact with StoryKit directly. It arrives as a dependency of a mod that adds an NPC โ€” for example Beastwhispering, whose animal-taming trainer is a StoryKit NPC that sells the mod's pet-skill tree. The NPC and its dialogue are what you actually meet in-game; StoryKit is the plumbing behind it. A mod manager installs it automatically alongside whatever mod declares it as a dependency.

Consuming the kit

A consumer calls NpcRegistry.Register(NpcSpec) in Awake, describing the NPC's placement, appearance, dialogue tree, and (if it's a trainer) the skills it sells. NpcDirector spawns the registered NPC at player-ready on every scene load (built to be master-only in co-op and duplicate-safe โ€” that guard has not been live-verified on a two-machine session), and DialogueBuilder compiles the described conversation into a real NodeCanvas graph reusing SideLoader's own trainer dialogue nodes. See the wiki page for the full NpcSpec/SkillTreeDef shape and worked examples.

Compatibility

Outward must be on its Mono Steam branch, not the default IL2CPP build. If your game runs but nothing looks modded, check that first.

Config

BepInEx/config/cobalt.storykit.cfg, created on first launch. Three keys, shown at their shipped defaults:

[Story]
## Master kill-switch. false = no NPC is built or spawned by this kit.
EnableStory = true

[Recon]
## Read-only taps over the vanilla QuestEventManager, for the qevent* verbs below.
EnableStoryRecon = false

[Diag]
## The Harmony patches StoryRecon installs. Only meaningful with recon enabled.
StoryReconPatches = false

Each generated entry carries a # Default value: comment; BepInEx never migrates a changed default into an existing cfg, so compare against those before assuming a bug.

Dev verbs

BepInEx/config/StoryKit_cmd.txt โ€” write a line, it runs on the next poll (works while paused).

Verb What it does
storynpclist Every registered NPC and its placement
storynpcstatus Whether each NPC is spawned, and where
storynpcspawn <id> [here] Spawn one NPC โ€” here uses your current position
storynpcdespawn Despawn the spawned NPCs
storyreload Re-read registrations and rebuild
selftest [SELFTEST] PASS/FAIL โ€ฆ DONE
storyrecon Recon summary (needs [Recon] EnableStoryRecon)
qeventdump / qeventlisten Dump quest-event state / watch events as they fire
qeventadd / qeventset / qeventdel / qeventage Read-write pokes at a quest event, for diagnosis only

โš  The qevent* verbs write to real quest state. They exist for investigation on a throwaway save, not for play.

CHANGELOG

StoryKit changelog

0.1.3 โ€” 2026-08-19

  • StoryKit: quest-event catalog tools โ€” enumerate, dump and toggle by name
  • Review follow-ups on the F3c leaf-kit wave (M1, M2, L3, L5, L6)
  • Static-analysis wave F3c: leaf-kit fixes (A7-1/2/4/8/9/13/14/15/16/20/23/24/25/27)
  • Coercion wave: every ForgeKit integration completes cleanly through the TUI seam
  • Forge shell fixes: SSH commands via bash -c (fish login shell); set/cfgdump on every channel mod
  • Forge shell: catalog dump + response protocol + set/cfgdump in ForgeKit; forge CLI/REPL + completion packs; wiki-enriched name db

0.1.3 โ€” 2026-08-19

  • StoryKit: quest-event catalog tools โ€” enumerate, dump and toggle by name
  • Review follow-ups on the F3c leaf-kit wave (M1, M2, L3, L5, L6)
  • Static-analysis wave F3c: leaf-kit fixes (A7-1/2/4/8/9/13/14/15/16/20/23/24/25/27)
  • Coercion wave: every ForgeKit integration completes cleanly through the TUI seam
  • Forge shell fixes: SSH commands via bash -c (fish login shell); set/cfgdump on every channel mod
  • Forge shell: catalog dump + response protocol + set/cfgdump in ForgeKit; forge CLI/REPL + completion packs; wiki-enriched name db

0.1.2 โ€” 2026-08-11

  • Merge branch 'main' into fix/sa-0808-kits
  • Static-analysis 2026-08-08 wave D-kits: P2-13/P2-15 + the kit P3 group
  • Static-analysis 2026-08-08 wave E: close the test-debt list (ยง4)
  • Maren teaches: nested tutorial dialogue + StoryKit submenus
  • W4: fixes for everything D1 found, plus the join-race P1
  • StoryKit: fake-null cleanup across the NPC rig and the recon taps

0.1.1 โ€” 2026-08-02

  • Cleanup: collapse three repeated verb preambles into helpers that already had a home
  • ForgeKit/SkillKit/StoryKit: fix five guards that could never fire, and stop the recovery verb lying
  • Docs sweep: archive, condense, and validate the whole documentation tree

0.1.0 โ€” 2026-07-30

  • Thunderstore release prep: changelogs + real category tags for BW
  • Thunderstore release prep: BW/SkillKit/StoryKit manifests + descriptions
  • Icon pipeline: condition generation on real Outward art, restyle every icon
  • Review fixes for b5118e3 MP wave: real corpse-view mute (group block), QESYNC poison purge, CHAR-GUARD player exemption + ghost identity check
  • 2026-07-27 MP session closeout: NK-F3 guest-join fix (QuestEventSyncGuard + unconditional srecon signatures + save purge), V-PARKLEAK corpse-view mute, AddCharacter dup-UID guard, [DIAG] loading line; session handoff + testplan/STATUS updates (428->352 queue burn)
  • Review must-fixes: plain-NPC fallback safety, empty choice menu, Dialogue guard, owner side-table leak
  • StoryKit T2/T4: kill-switch is recoverable; recon verbs route through VerbHost
  • StoryKit T1/T3/T5: plain-dialogue NPCs, on-demand late registration, internal OpenTrainerTask
  • Maren MP review fixes: scene-scope the guest warning, adopt the replica
  • Maren MP: converge placements against CharacterManager + watch the room
  • StoryKit: per-NPC toggle for NpcLookFollow; Maren stands static
  • Evening fix batch: Bugs 44-47 + 39 + unequip-hint nit (built, NOT live-verified)
  • Integrate verb re-homing wave + 2026-07-20 SP session results + fix batch
  • fix: high-severity wave from the 2026-07-19 static-analysis review
  • Maren: relocate default spawn to Cobalt's spot + StoryKit ground-snap
  • Guest pets Phase A (M0-M5): guests can tame, fight, and buy the skill tree
  • Small-mods bundle (review 2026-07-14): TreeLayout breakthrough violations now hard-refuse (Cobalt's ruling), Hireling recruit/dismiss master-gated, AggroKit cause-stack maintenance skipped when observation is off, StoryKit verbs through VerbHost
  • StoryKit: NPCs/trainers/dialogue as a kit โ€” Maren goes live in Cierzo

0.1.0 โ€” initial release

  • Add an NPC to Outward as plain data: a consumer describes placement, appearance, dialogue, and (if the NPC is a trainer) the skills it sells, and StoryKit builds the character, spawns it at a fixed spot, and wires the conversation โ€” no custom UI, no NodeCanvas hand-editing.
  • NpcDirector spawns the registered NPC at player-ready on every scene load โ€” master-only in co-op, duplicate-safe.
  • DialogueBuilder compiles a described conversation into a real NodeCanvas graph, reusing SideLoader's own trainer dialogue nodes.
  • A described skill tree compiles and sells from the vanilla Trainer window โ€” no custom shop UI.
  • NPCs, trainers, and dialogue only. No quest/story-event authoring API in this release.