Data Structures
Overview
Configuration is entirely data-driven via DataTable rows. FCCharacterDetailMaker is the central structure defining everything about an actor. FCNPCMaker groups actors for the spawner. FCPlayerMakerStruct references a character maker for player creation. UCActorInformation holds runtime state.
FCCharacterDetailMaker
Main DataTable row structure (FTableRowBase). Defines actor class, visuals, animations, combat, AI, skills, interaction, biome constraints and more.
| Name | Description |
|---|---|
| actorClass | Subclass of ACActor, ACPawn or ACCharacter to spawn |
| enable | Whether this maker is active |
| rowTag / mainTag | Row identifier and primary tag (used for quests, rooms) |
| famillyTag | Tags copied to the actor’s Tags array |
| tagToRoomArray | Room tags controlling where this actor can spawn |
| biomeSelectLowerBound / biomeSelectUpperBound | Biome noise range filter (0,0 = no filter) |
| interactWithPlayerOnly | If true, only interacts with the player |
| canOnlyBeConsumedOnce | If true, interaction consumes the actor permanently |
| minScalePercent / maxScalePercent | Random scale range |
| canInteract | Dynamic delegate (FCBP_boolCalc) for custom interaction filtering |
| beginOverlapInteractionSkill | Skill consumed on begin overlap |
| endOverlapInteractionSkill | Skill consumed on end overlap |
| executeInteractionSkill | Skill consumed on explicit interaction |
| executeDeathSkill / executeDamagedSkill | Skills consumed on death / damage |
| executeAttackSkill / executeRangeAttackSkill | Skills consumed on melee / range attack |
| skillArray | Default skill list for the actor |
| maxWalkSpeed / maxStepHeight / jumpZVelocity | Movement parameters |
| skeletalMesh / physicsAsset / animClass | Visual and animation assets |
| animSequenceMap / blendspaceMap | Named animation sequences and blendspaces for UCAnimInstance |
| attackAnimMontageArray | Melee combo montages (played in order) |
| noCombo / comboLoop | Combo behavior: random pick vs sequential, loop vs stop |
| startRangeAnimMontage / endRangeAnimMontage | Range attack montages |
| startBlockAnimMontage / endBlockAnimMontage | Block montages |
| killedAnimMontage / damagedAnimMontage | Death and damage reaction montages |
| turnLeftAnimMontage / turnRightAnimMontage | Turn-in-place montages |
| baseLife / baseDamage / blockArmor | Combat stats |
| attackOnlyOn | Team attitudes this actor can attack |
| teamId | FGenericTeamId value |
| aiClass / aiStructRH | AI controller class and AI behavior DataTable row |
| navigationRadius | NavMesh invoker radius |
| automationStructArray | Scripted automation commands (location, wait) |
| fogOfWar* | FOW parameters (complex ray, blur, refresh rate, resolution, sizes) |
// FCCharacterDetailMaker is configured in a DataTable.
// Each row defines a complete actor archetype.
FCCharacterDetailMaker maker;
maker.actorClass = ACCharacter::StaticClass();
maker.mainTag = FName("Goblin");
maker.baseLife = 20.0;
maker.baseDamage = 5.0;
maker.teamId = 1;
maker.maxWalkSpeed = 300.0;
maker.attackOnlyOn = {ETeamAttitude::Hostile};FCNPCMaker
DataTable row grouping actors for the spawner. References an array of FCCharacterDetailMaker rows.
| Name | Description |
|---|---|
| cellSize | Tile size for actor cell assignment (default 20000) |
| poolSizeStart / poolSizeRun | Batch sizes for initial and subsequent spawn passes |
| wakeUpDistance | Distance from pawn within which actors stay active |
| characterMakerRH | Array of FDataTableRowHandle pointing to FCCharacterDetailMaker rows |
FCNPCMaker npcMaker;
npcMaker.cellSize = 20000.0;
npcMaker.poolSizeStart = 8;
npcMaker.poolSizeRun = 4;
npcMaker.wakeUpDistance = 10000.0;
// characterMakerRH references FCCharacterDetailMaker rows in a DataTable
FCPlayerMakerStruct
DataTable row for player configuration. References a single FCCharacterDetailMaker row.
| Name | Description |
|---|---|
| characterDetailMakerRH | FDataTableRowHandle pointing to the player’s FCCharacterDetailMaker |
// FCPlayerMakerStruct delegates to FCCharacterDetailMaker for all actor configuration.
FCPlayerMakerStruct playerMaker;
FCCharacterDetailMaker* detail = playerMaker.getCharacterDetailMaker();UCActorInformation
Runtime state object created per actor instance. Holds the link between the spawner data and the live actor.
| Name | Description |
|---|---|
| id | Actor index (advIdx) |
| activated | Whether the actor is currently active (visible, ticking) |
| killedOrConsumed | Whether the actor has been killed or consumed |
| scale | Random scale applied at creation |
| transform | World transform (position, rotation, scale) |
| meshBound | Mesh bounding box extent |
| maker | Pointer to the FCCharacterDetailMaker row |
| actor | Transient reference to the spawned AActor |
// UCActorInformation is created by the spawner for each actor.
UCActorInformation* info = UCActorInformation::createActorInformation(
owner, characterDetailMaker, x, y, advIdx);
// Z is computed from WorldUtility, scale and rotation are randomized.
// preserveMaker() copies the maker data locally (for actors spawned outside DataTable).
info->preserveMaker();