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 |