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

Communities and characters

A community is the native world-side system that turns a character record and one or more AI spots into actors that quest logic can activate, wait for, hand to a scene, and eventually deactivate. No single resource owns that complete lifecycle:

always-loaded community registry
  + streamed compiled community area
  + streamed AI spot and workspot
  + questphase activation and readiness gate
  + scene actor acquisition
  + delayed questphase cleanup

Treat those as cooperating owners. A valid TweakDBID does not place an actor, an AI spot does not activate its community, and a scene actor definition does not spawn the character it intends to acquire.

Advanced characters add two more chains without replacing the community:

Character record -> .ent exposed mapping -> .app internal definition

spawned community actor -> Gameplay AI tier -> temporary role/workspot
  -> observed result -> scene/phase/cleanup handoff

The first controls gameplay defaults and renderable presentation. The second temporarily changes what one spawned actor is doing. Neither should borrow a story-unique character or mutate a shared vanilla resource.

The beginner-safe lifecycle is:

Activate community
  -> wait for CharacterSpawned
  -> enter a broad setup area
  -> start the scene
  -> acquire the community entry
  -> consume the named scene outcome
  -> advance outcome-specific journal or branch state
  -> wait until V leaves a cleanup area
  -> Deactivate community
  -> complete the owning phase and its terminal one-shot state

The order is part of the design. Starting the scene immediately after Activate creates a race between actor materialization and scene acquisition. Deactivating on the scene’s last spoken line can remove an actor while the scene, AI, or workspot still owns it.

Native ownership map

OwnerResponsibility
worldCommunityRegistryNodeMakes community template data and initial entry state available independently of the local streamed area.
worldCompiledCommunityAreaNode_StreamablePlaces the community source in the streamed world and mirrors which entry/phase/time period uses which AI-spot identities.
worldAISpotNodePlaces an AIActionSpot and names the workspot resource an actor can use there.
communitySpawnEntryAssociates one community entry name with a character TweakDBID and one or more spawn phases.
communitySpawnPhaseSelects the phase name, appearance set, and time-period behavior for that entry.
Character.* TweakDB recordSelects the entity template and supplies inherited reaction, faction, action-map, archetype, equipment, voice, and other gameplay defaults.
entEntityTemplateOwns the puppet scaffold, root components, default exposed appearance, and exposed-to-internal appearance mappings.
appearanceAppearanceResourceOwns internal appearance definitions, component graphs, frame type, and render/runtime dependencies.
questSpawnManagerNodeDefinitionSends Activate or Deactivate to a community reference; it does not prove the actor already exists or is gone.
questCharacterSpawned_ConditionTypeWaits for the configured spawned-character comparison to become true.
questPuppetAIManagerNodeDefinitionRequests an AI/story tier for selected spawned actors.
questMiscAICommandNodeCarries a typed AI command such as follower/patrol role assignment or role clear.
questUseWorkspotNodeDefinitionIssues a direct workspot command to an actor; its output does not replace state observation.
scnActorDef with acquisitionPlan: communityAcquires an already available community entry for scene performance.
SaveRetains quest, scene, community, and actor-related state that can invalidate a dirty retest.

This builds on the resource model, identifier domains, world streaming model, and persistent state.

Three world identity domains

The retained compact community shape places three numeric identity domains beside one another:

  1. the community/source identity shared by the compiled area’s sourceObjectId and its registry item’s communityId;
  2. the separate world-node identity of the registry node itself;
  3. one separate world-global identity for every AI spot.

They must not be collapsed because all three can appear as 64-bit values. The AI spot’s full NodeRef, the community entry’s CName, and its character record’s TweakDBID are additional typed identities. A debug name is none of them.

Registries and compiled areas explains the exact joins and the collision that motivated this rule.

Reading route

Read these chapters in order:

  1. Registries and compiled areas — where template data lives, how a streamed source meets its registry item, and why registry, source, and spot identities stay separate.
  2. Entries, phases, and AI spots — how an entry selects a character record, appearance, time period, and placed workspot.
  3. Activation, readiness, and acquisition — why Activate, CharacterSpawned, broad setup, and scene acquisition are four different lifecycle steps.
  4. Cleanup and character safety — delayed deactivation, save-aware tests, unique-character hazards, and the bounded generic-character recommendation.
  5. Character records, entities, and appearances — the native record-to-entity-to-appearance chain, typed identities, mod-owned authoring boundary, and render/lifecycle acceptance matrix.
  6. AI roles, behavior, and workspots — record behavior, Gameplay tier, follower/patrol roles, direct workspot commands, state observation, and ownership transfer.

The later scene chapters own screenplay, actor/performer, entry-point, and named-exit details. This section explains only the community side of their join.

Vanilla references

Extract the following resources from your own game with WolvenKit. Do not copy or redistribute the extracted CR2W files.

Depot pathQuestion it answers
base\quest\minor_quests\mq003\mq003_orbitals.questphaseHow a vanilla parent activates a whole community, waits for spawned readiness, and invokes the activity phase.
base\quest\minor_quests\mq003\phases\mq003_homeless.questphaseHow named community entries change phase and how the activity eventually deactivates them.
base\quest\minor_quests\mq003\scenes\mq003_01_homeless.sceneHow scene actors use acquisitionPlan: community, a community NodeRef, and an entry CName.
base\open_world\minor_activities\westbrook\japantown\ma_wbr_jpn_13\community\ma_wbr_jpn_013_claws_com.communityHow a vanilla communityCommunityTemplate stores generic Tyger Claw entries, phases, appearances, time periods, quantities, and AI-spot references.
ep1\characters\entities\gang\gang__ep1_tyger_wa.entHow one installed entity exposes external appearance mappings, internal names, a shared .app, and a root default. Requires Phantom Liberty.
base\characters\appearances\gang\gang__tyger_wa.appHow one appearance resource stores multiple internal definitions and a WomanAverage frame contract.
base\quest\side_quests\sq031\phases\sq031_rogue.questphaseHow one actor is promoted to Gameplay AI and how direct questUseWorkspotNodeDefinition objects are shaped.
base\open_world\street_stories\watson\kabuki\sts_wat_kab_02\phases\sts_wat_kab_02_openworld.questphaseHow a named community actor receives an AIFollowerRole targeting #player and later receives role clear.
base\open_world\street_stories\watson\northside_industrial_district\sts_wat_nid_03\phases\sts_wat_nid_03_gameplay.questphaseHow six AIPatrolRole payloads reference separate spline paths and explicit patrol parameters.

Each path supplies Observed in vanilla evidence for its own focused shape. It is not a template for copying unrelated IDs, records, appearances, or world positions.

First-pass failure routing

SymptomInspect first
Nothing spawns after ActivateRegistered block and sectors, quest prefab dependency, area/registry community identity, entry/phase spelling, AI-spot identities, and character record
Spawn wait never opensWhether activation addressed the same community, entireCommunity/count comparison, area streaming, and the requested entry phase
Actor exists but the scene cannot bind itScene acquisitionPlan, communityParams.reference, communityParams.entryName, and scene start ordering
Actor appears at the wrong place or poseAI-spot placement, exact full spot NodeRef, area spotNodeIds, registry spotNodeRefs, and workspot resource
Actor exists logically but is invisible or malformedCharacter record entity path, exposed entity appearance, internal .app name, frame/component graph, and saved appearance history
Actor is unexpectedly hostile or armedCharacter-record base, reaction/faction, action map, archetype, abilities, and equipment
Role command fires but the actor does not moveSpawn readiness, AI tier, command target, concrete typed params, path/workspot streaming, and navmesh
Actor walks back when the next activity startsFollower/patrol role was cleared before the next scene, defend, phase, or cleanup owner took over
Actor vanishes during the sceneCleanup edge ordering, scene outcome handoff, and the distance/trigger used before Deactivate
A clean resource change behaves like an older buildStarting save, community activation history, scene state, checkpoints, and installed archive filename

WolvenKit opening every file and ArchiveXL mounting the block are intermediate checks. Use the Lab 5 clean-save procedure to verify the complete cqa005 activation, acquisition, and cleanup route in game.