Data Structures

FCRoomClusterStruct

Top-level DataTable row structure defining the entire room cluster generation.

Name Description
roomMakerCountStructArray Array of FCRoomMakerCountStruct defining how many clusters of each type to generate
maxIteration Maximum relaxation iterations for cluster placement (default 9999)
algoRelax Relaxation algorithm for cluster spacing (default SLOW_SMALL)
algoSpeed Relaxation speed multiplier (default 1.0)
clusterNoiseDataAsset Noise asset for cluster-level terrain modulation
roomAndCorridorNoiseDataAsset Noise asset for room and corridor terrain modulation
clusterShiftNoiseDataAsset Noise asset for cluster shift terrain modulation
// FCRoomClusterStruct is a FTableRowBase, designed to be used in a DataTable.
// ACRoomSpawner references a row via FDataTableRowHandle (roomClusterRH).

FCRoomClusterStruct clusterStruct;
clusterStruct.maxIteration = 9999;
clusterStruct.algoRelax = CAlgoRelaxType::SLOW_SMALL;
clusterStruct.algoSpeed = 1.0;
// clusterNoiseDataAsset, roomAndCorridorNoiseDataAsset, clusterShiftNoiseDataAsset
// are optional UCNoiseDataAsset references for terrain modulation.

FCRoomMakerCountStruct

Associates a cluster definition with a spawn count.

Name Description
roomMakerRH FDataTableRowHandle pointing to a FCRoomMakerStruct row
countCluster Number of clusters of this type to generate (default 1)
FCRoomMakerCountStruct countStruct;
countStruct.countCluster = 3; // spawn 3 clusters of this type
// countStruct.roomMakerRH points to a DataTable row of type FCRoomMakerStruct

FCRoomMakerStruct

Configuration for a single cluster: room layout, corridor parameters, and optional per-cluster noise.

Name Description
mainTag Tag identifying this cluster type (used for deck/quest systems)
maxIteration Maximum relaxation iterations for room placement within this cluster (default 9999)
corridowMinWidth Minimum corridor width in world units (default 250)
corridowMaxWidth Maximum corridor width in world units (default 500)
algoRelax Relaxation algorithm for room spacing (default FAST_LARGE)
algoSpeed Relaxation speed multiplier (default 1.0)
algoShuffle Whether to shuffle room processing order during relaxation
tileSize Tile size for room grid (default 150)
straightCorridor If true, uses straight MST corridors; if false, uses flex corridors
clusterMarginMeter Margin around the cluster bounding box in world units (default 10000)
corridorNoiseIntensity Noise intensity applied to corridor edges for organic shapes (0 = straight)
minSizeForStraight Minimum edge size to use straight corridors when straightCorridor is true
roomCountStructArray Array of FCRoomCountStruct defining room types and counts in this cluster
clusterSpecificNoise Optional per-cluster noise asset for terrain topography
clusterSpecificShiftNoise Optional per-cluster shift noise asset
FCRoomMakerStruct makerStruct;
makerStruct.mainTag = FName("dungeon");
makerStruct.maxIteration = 9999;
makerStruct.corridowMinWidth = 250;
makerStruct.corridowMaxWidth = 500;
makerStruct.algoRelax = CAlgoRelaxType::FAST_LARGE;
makerStruct.straightCorridor = true;
makerStruct.corridorNoiseIntensity = 0; // 0 = no noise on corridors
makerStruct.clusterMarginMeter = 10000;

FCRoomCountStruct

Associates a room definition with a spawn count and an optional condition.

Name Description
roomDetailRH FDataTableRowHandle pointing to a FCRoomDetailStruct row
countRoom Number of rooms of this type to generate (default 1)
condition Optional Blueprint delegate (FCRoomConditionBasic) evaluated before spawning each room
FCRoomCountStruct roomCount;
roomCount.countRoom = 5;
// roomCount.roomDetailRH points to a DataTable row of type FCRoomDetailStruct
// roomCount.condition is an optional BP delegate; if bound and returns false, the room is skipped

FCRoomDetailStruct

Configuration for a single room type: size, margins, interaction rules, and content probabilities.

Name Description
mainTag Tag identifying this room type (used for quest matching)
minRoomSize Minimum room dimension in world units (default 600)
maxRoomSize Maximum room dimension in world units (default 5000)
marginRoom Margin around the room for relaxation spacing (default 800.0)
interactWithPlayerOnly If true, only the player pawn triggers room overlap events
canOnlyBeConsumedOnce If true, the room interaction fires only once then is marked consumed
canInteract Optional Blueprint delegate for custom interaction check
beginOverlapInteractionSkill Skill name triggered on room enter overlap
endOverlapInteractionSkill Skill name triggered on room exit overlap
roomProbaRHArray Array of FCRoomContentStruct defining tag-based content probabilities
doorTag Tag for door identification
FCRoomDetailStruct roomDetail;
roomDetail.mainTag = FName("treasure");
roomDetail.minRoomSize = 600;
roomDetail.maxRoomSize = 5000;
roomDetail.marginRoom = 800.0;
roomDetail.interactWithPlayerOnly = true;
roomDetail.canOnlyBeConsumedOnce = true;
// beginOverlapInteractionSkill / endOverlapInteractionSkill trigger skills on overlap

FCRoomContentStruct

Defines tag-based content probability for room population.

Name Description
tag Content tag to match against character tags
roomContentProbaStructArray Array of FCRoomContentProbaStruct with probability ranges and conditions

FCRoomContentProbaStruct

Probability range with optional condition for room content eligibility.

Name Description
minRandom Minimum random threshold (default 0.0)
maxRandom Maximum random threshold (default 1.0)
condition Optional Blueprint delegate (FCRoomConditionWithMetadata) with access to character tag and room metadata
// Content eligibility is checked via isRoomEligibleForTagProba:
// For each FCRoomContentStruct matching a character tag,
// a random value is rolled and compared to [minRandom, maxRandom].
// If the condition delegate is bound, it is also evaluated.

FCRoomDetailData

Runtime data for a single cluster’s room layout (generated, not configured).

Name Description
roomRectangulator FCRectangulator containing all room rectangles for this cluster
roomTriangulator FCTriangulator with Delaunay triangulation data
roomMST FCMstData with the Minimum Spanning Tree connecting rooms
brokenMSTEdgeMap Map of edge index to FCEdge with noise-broken corridor edges

FCClusterDetailData

Runtime data for the entire cluster system (generated, not configured).

Name Description
roomDetailMap Map of cluster ID to FCRoomDetailData
clusterRectangulator FCRectangulator containing all cluster bounding rectangles

FCRoomDataQueue

Internal queue structure used during async room generation.

Name Description
last Marks the final queue entry, triggering finalization
clusterToFinalizeArray Array of cluster IDs with their FCRoomMakerStruct for metadata creation
roomToFinalizeArray Array of (clusterId, roomId, FCRoomDetailStruct) for room metadata creation