World integration
A quest can name a place, but the streamed world must supply the thing at that place. The useful mental model is therefore a chain of owners:
ArchiveXL registration
-> streaming block
-> sector descriptor
-> streaming sector
-> node data + registered NodeRef + concrete node
-> questphase or journal reference
No link substitutes for another. A valid quest graph does not create its trigger, and a visible world marker does not prove that a questphase declared the prefab root needed to address it.
What owns what
| Owner | Responsibility in this section |
|---|---|
worldStreamingWorld | References the world’s compiled streaming blocks and global world resources. |
| ArchiveXL configuration | Adds a mod-owned block to the game’s streaming registration without replacing the base streaming world. |
worldStreamingBlock | Holds sector descriptors, including sector depot paths, streaming bounds, categories, levels, and quest-prefab roots. |
worldStreamingSector | Holds or references concrete world nodes, their placement records, and registered NodeRefs. |
questQuestPhaseResource | Executes quest logic and carries quest-prefab dependency declarations. |
| Journal resource | Owns journal presentation and map-pin records; it can refer to a world marker but does not place one. |
| Save | Retains facts, journal state, checkpoints, and some world/device state independently of the installed archive. |
This ownership split builds on the resource model, identifier domains, and persistent state.
Reading route
Read the chapters in order:
- Streaming model — world, block, descriptor, sector, and registration responsibilities.
- Quest prefabs and NodeRefs — the single-phase dependency and lookup chain from a questphase to a sector node, plus the unresolved nested-phase boundary.
- Sector nodes and placement — concrete
nodes,
nodeData,nodeRefs, transforms, and inplace resources. - Triggers and areas — outlines, notifiers, state-shaped and edge-shaped conditions.
- Markers and navigation — world markers, journal pins, navigation endpoints, and route expectations.
- Devices and persistence — entity nodes, slots, controller state, and fresh NodeRef identity.
- Advanced devices, interactions, and persistent state — world identity, template/component binding, command-versus-observation semantics, cancellation, and a clean-save device matrix.
- Location research — extracting quest-safe vanilla references without redistributing them.
- Lab 3: Boundary Check — the learner-facing resource and graph contract.
- Author Boundary Check in WolvenKit — every supplied resource and property explained.
- Test Boundary Check — clean-save, reload, streaming, and boundary acceptance cases.
Lab 3 design boundary
Structurally validated: Boundary Check uses one quest prefab root, one
Quest sector containing a reach trigger and a leave trigger, and one
AlwaysLoaded sector containing the checkpoint marker. Its candidate site is
near world position (-1000.02, 1497.2208, 8.3). The geometry is a 25-unit
reach area with 16 outline points and height 12, plus a 110-unit leave area with
20 outline points and height 16. The graph uses state-shaped IsInside and
IsOutside conditions. The acceptance matrix tests ordinary entry, reload
before the reach crossing, and reload after reach while the player is still
inside the outer leave area. It does not claim coverage for loading while an
active reach condition is already inside its area.
These numbers came from prior research. Their serialization is checked; finite padded block bounds, marker visibility, trigger firing, vertical coverage, navigation behavior, and reload semantics are runtime acceptance claims governed by the recorded matrix. The lab intentionally omits devices, child phases, communities, and scenes so each failure has a small search surface.
First-pass failure routing
| Symptom | Inspect first |
|---|---|
| Nothing from the mod-owned world content appears | ArchiveXL block registration, exact depot path, and ArchiveXL logs |
| One sector is absent | Its block descriptor data, category, level, and streaming box |
| The object exists but quest logic cannot resolve it | phasePrefabs, descriptor questPrefabNodeRef, full sector NodeRef, and local questphase NodeRef |
| The wrong object or transform is used | nodeData.NodeIndex, the corresponding nodes[] entry, position, orientation, scale, and bounds |
| A journal pin has UI state but no expected world anchor | Journal mappin data and the marker node/NodeRef are separate owners; inspect both |
| A device is visible but its prompt or authored content is absent | Entity-template interaction/controller components, CRUID binding, node-local RedPackage, workspots, slots, and placement clearance |
| A device works on a fresh save but exposes old state on another save | Persistent NodeRef identity, controller state, active graph/journal history, and whether that save streamed an earlier package |
| A result changes between new game, reload, and an old save | Treat save-backed facts and journal state as a separate variable before editing more CR2W fields |
Packing, registration, and a clean WolvenKit round trip are intermediate checks. Runtime acceptance must begin from a save made before any version of the test quest was installed, then cover normal entry, reload before reaching, reload between the two boundaries, departure through the outer area, stream-away/return while reach is active, completion, and completed-save reload. This matrix does not make a separate post-completion re-entry claim. Changing an archive cannot reset a fact or journal state already stored in a save. The full evidence ladder is in Lifecycle, cleanup, and evidence.