Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

OwnerResponsibility in this section
worldStreamingWorldReferences the world’s compiled streaming blocks and global world resources.
ArchiveXL configurationAdds a mod-owned block to the game’s streaming registration without replacing the base streaming world.
worldStreamingBlockHolds sector descriptors, including sector depot paths, streaming bounds, categories, levels, and quest-prefab roots.
worldStreamingSectorHolds or references concrete world nodes, their placement records, and registered NodeRefs.
questQuestPhaseResourceExecutes quest logic and carries quest-prefab dependency declarations.
Journal resourceOwns journal presentation and map-pin records; it can refer to a world marker but does not place one.
SaveRetains 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:

  1. Streaming model — world, block, descriptor, sector, and registration responsibilities.
  2. Quest prefabs and NodeRefs — the single-phase dependency and lookup chain from a questphase to a sector node, plus the unresolved nested-phase boundary.
  3. Sector nodes and placement — concrete nodes, nodeData, nodeRefs, transforms, and inplace resources.
  4. Triggers and areas — outlines, notifiers, state-shaped and edge-shaped conditions.
  5. Markers and navigation — world markers, journal pins, navigation endpoints, and route expectations.
  6. Devices and persistence — entity nodes, slots, controller state, and fresh NodeRef identity.
  7. Advanced devices, interactions, and persistent state — world identity, template/component binding, command-versus-observation semantics, cancellation, and a clean-save device matrix.
  8. Location research — extracting quest-safe vanilla references without redistributing them.
  9. Lab 3: Boundary Check — the learner-facing resource and graph contract.
  10. Author Boundary Check in WolvenKit — every supplied resource and property explained.
  11. 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

SymptomInspect first
Nothing from the mod-owned world content appearsArchiveXL block registration, exact depot path, and ArchiveXL logs
One sector is absentIts block descriptor data, category, level, and streaming box
The object exists but quest logic cannot resolve itphasePrefabs, descriptor questPrefabNodeRef, full sector NodeRef, and local questphase NodeRef
The wrong object or transform is usednodeData.NodeIndex, the corresponding nodes[] entry, position, orientation, scale, and bounds
A journal pin has UI state but no expected world anchorJournal mappin data and the marker node/NodeRef are separate owners; inspect both
A device is visible but its prompt or authored content is absentEntity-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 savePersistent 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 saveTreat 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.