Core RPG handbook · Development build / version notes

Documentation

Configure a streamed Core RPG world

Bind matching World Forge terrain catalogs, Core gameplay placement definitions and separate streaming radii.

On this page

Goal#

Bind matching Forge terrain publications and authoritative Core gameplay placements to one streamed location.

Before you begin#

Start from a working Core session with a registered LocationDefinition and valid scene identity, a saved Forge world, matching VisualClient and HeadlessCollision publications, and the session's NetworkPrefabsList. Use the Forge copy included with Core. Review Forge publication before continuing. These are development-checkout instructions; verify the required types and menus exist in your installed release.

Set it up#

  1. Create Assets → Create → GreenCloakGames → Travel → Streamed World Definition. Its visualCatalog defaults to WorldForge/visual/catalog.json and collisionCatalog to WorldForge/collision/catalog.json. Paths are relative to Assets/StreamingAssets. Copy each complete role publication, including companion bundles, to the corresponding folder. Absolute paths and .. traversal are rejected.
  2. On this definition, configure Client visual → Load radius / Retain radius and Server collision → Load radius / Retain radius. Values are 1–4 chunks. Legacy defaults are load 1 and retain 2; a raw serialized zero inherits the legacy value rather than disabling loading. Retain must be at least load and does not prefetch. readinessTimeoutSeconds defaults to 60 seconds.
  3. Assign the definition to the registered location's Optional World Forge streaming → Streamed World (streamedWorld) field. Keep the location's effective WorldOffset and Core GridManager.gridOrigin at zero, with grid tile size matching the catalog. Only one logical streamed overworld is supported; overlapping location bounds are rejected.
  4. Select the Forge TileTickWorldAsset, then choose Assets → Create → GreenCloakGames → Travel → World Forge Gameplay Authoring. This creates a GameplayPlacementAuthoring sidecar and GameplayDefinitionCatalog. Open Tools → Green Cloak Games → World Forge → Core RPG Gameplay Placements.
  5. Choose Gameplay sidecar and verify its World and Catalog. Assign Session network prefabs to the list actually used by the session NetworkManager, and Core streamed world to your definition.
  6. Click Refresh definitions, find your NPC/world-object definition with Find definition, and select it under Core definition. Click Prepare reusable network binding. This creates/registers a compatible occurrence prefab while preserving the original definition prefab. Its root must contain the supported NPC or world-object components. Keep the same network-prefab list assigned to the session NetworkManager.
  7. Choose Signed floor and enable Place in Scene view • click terrain (Esc cancels). Click the intended terrain location. Inspect Authored gameplay occurrences; adjust Orientation, Scale, Footprint (tiles), Footprint origin and Occurrence signed floor. Scale does not automatically enlarge logical footprint. Click Save authoring.
  8. Click Validate and publish gameplay descriptors… and select the matching canonical terrain catalog.json. The tool writes <sidecarName>Published.json beside the sidecar and binds worldId, sourceHash, gameplayManifest, gameplayDefinitions and gameplayContentHash on the streamed-world definition. A different WorldId is rejected. Rebuild and bind descriptors after placement or binding changes; do not manually patch hashes.
  9. Test a host and a separate client crossing chunk boundaries, changing visual distance, revisiting resources and restarting the world. Also test missing bundles and a deliberately mismatched publication in a disposable copy, and confirm the error identifies the mismatch.

What you should see#

Terrain catalogs, gameplay descriptors and registered prefab bindings refer to the same world/source revision. Server gameplay and collision remain authoritative while clients load presentation. Changing the visual radius does not change server collision demand.

If something goes wrong#

  • Static Forge Objects placement creates decoration; authoritative NPCs/resources belong in the Core gameplay sidecar.
  • Missing companion bundles, absolute catalog paths, wrong WorldId/SourceHash or a stale gameplay manifest prevent compatible loading.
  • Preparing a binding into a different NetworkPrefabsList does not register it with the running session. Assign the same list to NetworkManager.
  • Nonzero effective location/grid offsets, mismatched tile size, overlapping locations or an incorrect signed floor violate the source integration rules.
  • Importing standalone Forge over the Core-bundled copy can create assembly conflicts.

Next steps#

Walk across chunk boundaries, leave and return, reconnect, and check that changes survive a normal shutdown. Review saving and loading, authority boundaries and Forge troubleshooting when diagnosing failures.