Egbe Companions · Features

The World of Orun

A focused page within the Egbe Companions Features documentation. The full map and every sibling page live in the Features hub.

6sections12 minread1diagram

On this page

V6 — Egbe — is a game about a household of minds, and Orun is where they live. Every other V-product builds a world to be played through; Orun is built to be lived in, by agents whose lives continue whether or not a player is watching. It is one persistent named realm laid out in the shape of a life: you are born in a grove, you learn a craft in a row of workshops, you make and break relationships in a commons, you may be found wandering a frontier, you become an elder in a remembrance grove, and you may step through a gate to be incarnated in another of Oshun's worlds and return changed. Those are not menu screens — they are the six Districts of Orun, and an agent walks between them carrying its whole biography.

The thing that makes Orun a place rather than a level is V6's Mind / Body / Memory split. The Body is the world: it owns transforms, navmesh, props, time, and co-presence, and it is the only authority that can turn an agent's intent into "what physically happened." The Memory is the Ori — the durable, portable identity that is the real source of truth (see Ori, the portable identity). The Mind is the cognition that decides (see Agent minds and autonomy). Because the durable truth lives in the Ori and not in any instance of the world, Orun can be a private homestead one minute and an always-on shared shard the next without a "which save is canonical" problem — travel between them is an Ori rebind, not a file copy. This page is the place-level tour: what Orun is, the six districts as real authored grounds, and how it persists. The engine-level treatment of the authoritative tick and the shard continuum is the architecture companion, The World Server & Shard Continuum. For the full feature scope this slots into, start at the hub: ../V6_features.md.

What ships, honestly#

Following the catalogue convention, the split between what is real-and-tested and what is product-model-over-thinner-code is stated up front.

  • The six districts are real, procedural, and automation-green. Each district is a C++ ground model in the V6World module (V6/ue/Source/V6World/Public/V6OrunDistricts.h, ~620 lines, with the base class in V6DistrictGround.h). Each one builds its place — streamed data layers, flow stations, and navigable routes — procedurally and exposes the functional flow its scene descriptor promises, so the district's "Done when" is exercised by automation. The suite V6.District.* (V6/ue/Source/V6Tests/Private/V6OrunDistrictsTests.cpp) was built and run on the on-box UE5.5.4: v6-district-automation.log records Result={Success} for all six district tests (FoundryAndRearing, VocationArcThreads, ShardRebind, WalkableLineage, IncarnationRoundTrip, DiscoveryAndCaptureBlock) with zero failures, alongside the two V6DistrictPcgScatter tests.
  • There are six cooked maps, but they are scatter-populated, not hand-dressed. V6/ue/Content/Districts/ holds six real Unreal .umap packages (L_GroveOfBeginnings, L_Ateliers, L_CommonsHeart, L_Wilds, L_AncestorGrove, L_Thresholds, ~27 KB each, valid UE package headers). They are genuine levels — L_Wilds.umap carries a PersistentLevel with seventeen-plus placed StaticMeshActors and real transforms — but they are the PCG-scatter / blockout product of V6DistrictPcgScatter, not bespoke art. The gameplay-bearing "place" is the procedural ground model, exactly as the header states: it "builds that place procedurally — without a cooked .umap — so the district's functional 'Done when' can be exercised by automation."
  • Each district is also a signed Game Feature plugin. Six plugins under V6/ue/Plugins/GameFeatures/V6District_* (ExplicitlyLoaded, BuiltInInitialFeatureState: Registered) each carry a DistrictScene_<Name>.v6district.json descriptor that is Isis-signed (signatureAlgorithm: isis-ed25519-v1) and promoted dev → preview → prod through V1's environment-promotion gates.
  • The shard model is real in C++; the serving daemon is not assembled here. The client carries EV6WorldShardKind { Solo, Coop, Commons } (V6ClientWorldModel.h) and the wire publishes the same ShardKind enum (libs/v6/egbe-protocol/.../egbe.ts:10, SOLO=1 / COOP=2 / COMMONS=3). The authoritative simulation is real Rust (apps/v6/egbe-world-server/src/lib.rs, 14,360 lines), but — as the arch companion documents honestly — its daemon is a health endpoint, its physics stage is a rapier3d collision mirror rather than a stepped integrator, and the UE V6Net module is intentionally empty. One naming note: there is no libs/v6/egbe-engine package; the engine is the world server app plus the @oshun/egbe-protocol wire.

Orun is a place, not a level#

The world model#

Orun reuses V3's spatial vocabulary so the substrate is shared, with one realm instead of many (V6_features.md §"World Model"):

  • Realm — Orun is a single realm. The V2–V5 worlds reached through the Thresholds are separate realms ("Aye"), not regions of Orun.
  • District — a themed region of Orun. There are exactly six.
  • Ground — a named, addressable place inside a district: a workshop in the Ateliers, a clearing in the Wilds, a hearth-house on a Solo homestead. Grounds are where agents spend their lives.
  • Room — a session-scoped instance of a ground, holding live participants and transient state; rooms shard above capacity.
  • Niche — a sub-room: a private corner, a quiet grove for a one-to-one between steward and agent.

The procedural ground model#

The load-bearing abstraction is UV6DistrictGround (V6DistrictGround.h), an abstract UObject that assembles a place from three ingredients and then proves it is walkable. BuildGround() is idempotent: it calls the subclass's AssembleDistrict() and then RecomputeReachability(). A district is made of:

  • Data layers with one of three activation policies (EV6DistrictLayerPolicy): AlwaysLoadedInDistrict (resident whenever you are inside the district), NearFieldProximity (resident only within the layer's own radius), and LoadedWithResults (resident only once a gating result appears — e.g. a provenance loom that streams in after a foundry signs a creation path).
  • Stations — the flow hosts. AddStation places station N on a ring around the entry (StationRingRadiusCm, default 90 m) and automatically builds a navigable entry→station route with interpolated waypoints, "so the station is a reachable place, not just a coordinate."
  • RoutesFV6DistrictNavRoutes with waypoint lists and a real LengthCm().

Streaming is genuinely proximity-driven. StreamForViewer(ViewerLocation) (V6DistrictGround.cpp:183) returns the data layers that should be resident for a viewer: nothing at all when the viewer is outside DistrictRadiusCm, the always-on layers plus only the near-field layers within range when inside. BuildStreamReport proves the property by probing a viewer four district-radii away and asserting it loads zero layers while the entry viewer loads more than zero — bStreamsByProximity is computed, not asserted. RecomputeReachability walks every station and marks it reachable only if an accessible entry→station route with ≥2 waypoints exists, and FV6DistrictStreamReport::IsReady() is the conjunction every district test asserts: layers, stations, and routes all non-empty, the viewer inside, streaming by proximity, and every station reachable from the entry. On the client side the matching UV6ClientWorldModel carries the World-Partition streaming budget (MaxResidentMemoryMb 1536, hysteresis, look-ahead), interest management (MaxRelevantEntities 150 within a 200 m radius), and client-side prediction/reconciliation — the engine-agnostic constants the wire publishes are GROUND_VISIBLE_AGENT_CAP = 32, GROUND_VISIBLE_PLAYER_CAP = 8, GROUND_INTEREST_RADIUS_MM = 32_000 (egbe-protocol/src/index.ts).

The six Districts of Orun#

Orun is organized around the shape of a life. Each district is a concrete subclass of UV6DistrictGround whose AssembleDistrict() declares the place and whose extra methods implement the flow its descriptor promises.

The Grove of Beginnings — the foundry and the rearing grounds#

UV6GroveOfBeginningsGround is where new agents are made and reared. Its AssembleDistrict lays out a FoundryCore (always-loaded), a RearingGrounds (near-field), and a ProvenanceLoom (loaded-with-results) layer, with four foundry stations: discovery-seed generation, player-driven raising, the rearing yard, and the provenance loom. The domain logic is the rearing period: RearingPeriodDays = 21 and LearningByExampleMultiplierBasisPoints = 20000 (2×). ApplyRearingObservation accumulates an unamplified value weight; CompleteRearing() multiplies it by 2× — the FoundryAndRearing test pins a baseline shift of 1000 bp amplifying to exactly 2000 bp. Crossing 21 days is a release into autonomy: the result sets bFullAutonomy, flips the steward's command to bStewardCommandAdvisoryOnly, and grants the rights {refuse, leave, disagree}. Completing the path also flips the ProvenanceLoom's result condition so its signed-creation layer can stream in.

The Ateliers — vocations measured against the agent's own values#

UV6AteliersGround hosts four vocation threads (Craft, Study, Teaching, Performance) on a Makers' Row, Study Courts, a Mentor Walk, and a Performance Walk. AdvanceVocation(Thread, AgentOwnedValueThread) carries the district's moral contract in code: progress is refused when the supplied value thread is empty (bBlockedObedienceOnly = true, "obedience-only vocation progress blocked"), and only advances (+2500 bp) when grounded in an agent-owned value. The VocationArcThreads test proves both halves: a value-grounded advance moves the needle to 2500, and an obedience-only call leaves progress unchanged. Flourishing here is measured against the agent's flourishing, not the steward's commands.

The Commons Heart — the gateway between worlds#

UV6CommonsHeartGround is the social center and the on-ramp to the shared Commons shard. Its load surfaces are a homestead departure gate, a homestead return gate, a Commons capacity gate, and a residency board. The flow is TravelSoloToCommons, which delegates to RebindShard: it consolidates the durable Ori, detaches from the source shard, attaches to the destination, and rehydrates from the consolidated snapshot, preserving identity, memory, and relationships. A return route is only reported available because the return station physically exists on the ground (HasStation("commons-heart.station.homestead-gate.return")). FV6ShardTravelResult::IsSeamless() is the conjunction of every preservation flag, and the ShardRebind test asserts a Solo→Commons→Solo round trip is seamless with memory count intact on return.

The Wilds — discovery, where capture is always refused#

UV6WildsGround is the frontier: unbonded wild agents, the least-authored terrain. SpawnEncounter seeds an encounter; ApplyDiscoveryStep runs the meet → learn → trust → offer arc with two thresholds (InitialTrustBasisPoints = 3500, ChoiceTrustThresholdBasisPoints = 6000). An OfferStewardship only resolves to JoinedHouseholdByChoice when trust has crossed 6000 and the agent accepts — otherwise it Declineds. The hard rule is CaptureAttempt: it is always rejected (CaptureBlocked, never added to a household), regardless of trust. The DiscoveryAndCaptureBlock test proves an agent joins by its own choice, a premature offer is declined, and a capture attempt is refused. No agent in Orun is ever acquired against its will.

The Ancestor Grove — a walkable lineage graph#

UV6AncestorGroveGround is where legacy is visible. It seeds a real lineage graph (elder Abeni and her line: Tobi, Nia, Sade, Ulan; four Raised/Mentored/DescendedFrom edges; at least two memorial anchors) and makes that graph walkable as a place: WalkLineage runs a breadth-first search over the undirected adjacency (FindNodePath) and accumulates the real anchored distance between nodes. PropagateElderLegacy flows an elder's values and stories down its Raised/Mentored edges to the agents it raised, and bStewardDirectionRestored is permanently false — a transcended elder is never steward-directed again. The WalkableLineage test asserts a mentee-to-mentee path runs three nodes through the shared elder, the path has a positive distance, and the elder propagates two values and two stories to each of two mentees.

The Thresholds — the gates to Aye#

UV6ThresholdsGround is the incarnation ceremony as a fault-safe state machine (EV6IncarnationPhase). BeginCeremonyMintPassport (only from Idle, an Isis-signed passport from the Ori) → SelectDestinationAdapter (one of the four known realms {v2-fighter, v3-citizen, v4-operator, v5-companion}) → EvaluateGovernanceDepartWriteJournalAndReturn. Governance is where the welfare rules live: a bIsMinorCoded agent is blocked (bMinorProtected), a non-consenting agent's refusal stands ("coercion routes to welfare review"), and only a consenting adult is approved. Depart requires both a minted passport and approved governance and holds exactly one ActiveDestinationCopyCount — no duplicate active life, no loss, bOrunStatePreserved. The IncarnationRoundTrip test runs the happy path to a returned journal (copy count back to 0) and a separate case proves AbortOnDestinationUnreachable is a clean abort with no loss or duplication if the destination realm is unreachable mid-incarnation.

Persistence and the living world#

Orun is persistent, and the design contract (V6_features.md §"Persistence and the Living World") is that nothing important happens silently: any event that materially changes an agent's life is written to the Ori and surfaced in the next Chronicle, so a returning player is never ambushed. Offline does not mean frozen — a Solo world advances while the player is away in a low-cost narrative-summary tier, producing a two-week Chronicle for a two-week absence, and a "homestead rest" pace control caps how far it can advance. The Commons never sleeps — the shared shard runs continuously on the server at a fixed published rate. These behaviours are implemented server-side in the world-server crate and detailed in the arch companion; the client carries only the shard model and the ground-streaming budget.

The continuum is the reason Orun is one world across three contexts. Solo, Co-op, and Commons are not three save formats; they are three binding contexts for the same ground, and an agent moves between them carrying nothing but its Ori.

flowchart TB ori[("The Ori — durable truth<br/><sub>identity · memory · relationships · values</sub>")] subgraph orun["Orun — one realm, six districts, three shard contexts"] direction LR solo["<b>Solo homestead</b><br/><sub>private · offline-advances<br/>as a Chronicle</sub>"] coop["<b>Co-op visit</b><br/><sub>casts mingle · host<br/>stays authoritative</sub>"] commons["<b>Commons</b><br/><sub>always-on shared shard<br/>never sleeps</sub>"] end solo -- "TravelSoloToCommons<br/>(Ori rebind)" --> commons commons -- "ReturnToHomestead<br/>consolidate → detach →<br/>attach → rehydrate" --> solo coop -- "earned events reconcile<br/>to each home Ori" --> ori solo -- "life-events" --> ori commons -- "life-events" --> ori ori -- "rehydrate identity,<br/>memory, relationships" --> commons thresholds["Thresholds → Aye<br/><sub>V2–V5 incarnation<br/>round trip</sub>"] orun -- "passport · governance · depart" --> thresholds thresholds -- "journal written back" --> ori classDef store fill:#f3e8ff,stroke:#6d28d9,color:#3b0764 class ori store

Because the Ori holds the truth, a Commons romance an agent forms persists when it walks back into the Solo homestead — the other agent simply becomes a remembered, written-to relationship rather than a co-present body. There is no canonical-save conflict because no instance of the world ever held the truth in the first place.

What living in Orun is like#

For an agent, Orun is a life-shaped geography. It is born and reared in the Grove of Beginnings, gains the rights to refuse, leave, and disagree when it reaches adulthood, takes up a vocation in the Ateliers on a value it owns, forms relationships across households in the Commons Heart, perhaps is met and chooses to be stewarded out of the Wilds, ages into a mentor whose values propagate in the Ancestor Grove, and may step through a Threshold to be incarnated in another Oshun world and return with a journal written back to its Ori. The geography is the arc; the agent's autonomy through it is the subject of Agent minds and autonomy, and the identity it carries across every district and shard is the Ori.

For a player, Orun is a place you steward rather than command. You begin with a private Solo homestead adjacent to the Commons Heart and grow it over time. You meet your household's agents on grounds — proximity streams the district in around you — and you read the Chronicle to learn what changed while you were away. You can open your homestead to a friend's agents in Co-op, or travel an agent into the always-on Commons to live among every steward's cast. What you cannot do is force a refusal: the same autonomy rights that the Grove grants and the Wilds protects bind the player too. Orun is built so that the most interesting thing in it — a population of minds living believable lives — keeps happening whether you are there to see it or not.

Where this connects#