27 KiB
Blueprint Condensed Summary — 129 Files Analyzed
Generated: 2026-05-18
Agent: Ask (Knowledge Keeper)
Source: docs/blueprints/ (all 15 categories)
SUMMARY A — Animation Requirements Catalog
1. Core/System (No direct animation triggers)
| System | File | Notes |
|---|---|---|
DA_GameTagRegistry |
01 | Passive data asset — no animations |
FL_GameUtilities |
02 | Pure function library — no animations |
I_InterfaceLibrary |
03 | Interface contracts only — no animations |
GI_GameFramework |
04 | GameInstance — no animations |
GM_CoreGameMode |
05 | GameMode — no animations |
GS_CoreGameState |
06 | GameState — no animations |
DA_ItemData |
07 | Data asset — no animations |
2. Player Systems
| System | Trigger | Type | Body | GASP Notes |
|---|---|---|---|---|
BPC_HealthSystem (08) |
OnDeath → HandleDeath | Montage | Full | Death animation sequence (E_DeathAnimationStage: PreDeath, DeathAnim, PostDeath, RespawnTransition). Hit reaction implied via dispatcher |
BPC_StaminaSystem (09) |
OnExhaustionStateChanged | Montage/Blend | Upper | Heavy breathing animation, refers to ABP_GASP (breathing animation). Exhausted state drives breathing anim |
BPC_StressSystem (10) |
OnStressTierChanged (≥Panicked) | PoseAsset/Blend | Full | FOV distortion via camera, no direct skeletal anim specified. Catatonic tier applies stumble/freeze |
BPC_MovementStateSystem (11) |
OnMovementModeChanged (all modes) | BlendSpace/Montage | Full | GASP-centric. Sets GASP-specific variables (bStrafing, bSprinting) in AnimationBlueprint. Notifies ABP_GASP via interface/direct cast. Posture changes: capsule height changes for Crouch/Prone. Forced transitions apply impulse/knockback |
BPC_MovementStateSystem (11) |
Transition between postures | Blend | Full | E_StanceTransition: Instant, Smooth (TransitionBlendTime=0.2s), Forced |
BPC_MovementStateSystem (11) |
OnJumped / OnLanded | Montage | Full | Landing impact animation |
BPC_MovementStateSystem (11) |
OnClimbStarted / OnClimbEnded | Montage | Full | Climbing animation |
BPC_MovementStateSystem (11) |
OnFootstep | None (audio only) | — | Footstep dispatcher—animation handled by GASP locomotion blend |
BPC_HidingSystem (12) |
EnterHideSpot | Montage | Full | EnterMontage — plays entering animation via ABP_GASP. On animation notify → Set HideState=Hidden |
BPC_HidingSystem (12) |
ExitHideSpot | Montage | Full | ExitMontage — plays exiting animation. bForceExit skips animation |
BPC_HidingSystem (12) |
StartPeek | Pose | Upper | Camera moves to peek socket — no animation, camera-only |
BPC_EmbodimentSystem (13) |
SetVisibilityMode | — | Arms | Arms mesh toggle for ArmsOnly/FullBody/Hidden modes. Arm IK offset on wall proximity |
BPC_EmbodimentSystem (13) |
CheckWallProximity | IK Pose | Arms | Arm IK offset when near walls. Notifies ABP_Arms |
BPC_CameraStateLayer (14) |
RequestCameraState (all states) | None | — | Camera FOV/offset only — no skeletal animation |
BPC_PlayerMetricsTracker (15) |
None | — | — | Pure data gathering — no animation |
3. Interaction Systems
| System | Trigger | Type | Body | Notes |
|---|---|---|---|---|
BPC_InteractionDetector (16) |
Hold interaction | None | — | Hold progress uses timer, no animation |
I_HidingSpot / BP_HidingSpotBase (17) |
EnterMontage | Montage | Full | EnterMontage, ExitMontage, IdleMontage defined as variables. Player animation for entering/exiting hiding spots |
BP_DoorActor (19) |
TryOpen / TryClose | Timeline/Interp | — | Door rotation/slide animation via Timeline (0→1 over 1/OpenSpeed seconds). Skeletal mesh relative rotation interpolation |
BP_DoorActor (19) |
PlayOpenAnimation / PlayCloseAnimation | Timeline | — | Interpolates DoorMeshComponent RelativeRotation.Yaw. Not a character animation |
BPC_ContextualTraversalSystem (21) |
AttemptTraversal | Montage (root motion) | Full | Root motion traversal montages with Motion Warping. Vault, Mantle, Slide, Squeeze, LedgeGrab. MotionWarpingTarget set for accurate placement |
BPC_PhysicsDragSystem (22) |
GrabObject | Pose/IK | Arms | Hand IK for holding physics object. Grabbed object attached to hand socket |
BPC_UsableWorldObjectSystem (23) |
None | — | — | Generic use — no animations |
4. Inventory Systems
| System | Trigger | Type | Body | Notes |
|---|---|---|---|---|
BPC_ContainerInventory (24) |
None | — | — | UI only |
BP_ItemPickup (25) |
BeingPickedUp | Montage | Arms | Pickup animation before destruction. OnPickupAnimationComplete callback. Also: Idle bobbing/rotating timeline |
BPC_ActiveItemSystem (26) |
SelectSlot | — | — | Quick slot switching — animation implied via weapon equip |
BPC_ConsumableSystem (28) |
UseConsumable | Montage | Upper | Use animation for consuming items (health pack, etc.) |
BPC_EquipmentSlotSystem (30) |
EquipItem | Montage | Upper | E_EquipAnimationType: Instant, Holster, Equip, Unequip. Weapon draw/holster animations, armor equip anim |
| Remaining inventory (27,29,31-34) | None | — | — | Data/UI systems, no animations |
5. Save/Load Systems
| System | Trigger | Type | Body | Notes |
|---|---|---|---|---|
| All SS/BP save systems (35-43) | None | — | — | No animation triggers. Death sequence animations handled by BPC_DeathHandlingSystem which references E_DeathAnimationStage |
6. Weapon Systems (08-weapons)
| System | Trigger | Type | Body | Notes |
|---|---|---|---|---|
BP_WeaponBase (69) |
Fire | Montage | Upper | Fire animation. Recoil animation. Equip/Holster animations |
BP_WeaponBase (69) |
Reload | Montage | Upper | Reload montage with notifies for ammo insertion/action cycles |
BPC_FirearmSystem (74) |
StartSwing (melee) | Montage | Upper | Melee swing animation. Chamber check animation |
BPC_MeleeSystem (76) |
StartSwing | Montage | Upper | Melee attack montage with hit-window notifies |
BPC_MeleeSystem (76) |
Parry / Block | Montage | Upper | Block and parry animations |
BPC_ReloadSystem (78) |
StartReload | Montage | Upper | Full reload montage. Interruptible at specific notifies |
BPC_RecoilSystem (77) |
OnFire | Procedural | — | Camera recoil/hand animation — procedural via spring arm offset |
BPC_HitReactionSystem (75) |
OnDamageTaken | Montage | Full | Hit reaction montage. Directional hit reacts (front/back/left/right). Stagger animation |
BPC_ShieldDefenseSystem (79) |
OnBlock | Montage | Arms | Shield raise/block animation. Block stun animation |
BPC_CombatFeedbackComponent (71) |
OnHitConfirmed | VFX/Montage | — | No direct skeletal anim. Camera shake + VFX |
BPC_DamageReceptionSystem (72) |
OnDamageTaken | Montage | Full | Damage reception animations. Stagger, knockdown |
BPC_DeathCauseTracker (73) |
None | — | — | Data tracking — no animation |
BPC_AmmoComponent (70) |
None | — | — | Data tracking — no animation |
7. AI Systems (09-ai)
| System | Trigger | Type | Body | Notes |
|---|---|---|---|---|
BP_EnemyBase (80) |
State transitions | BlendSpace/Montage | Full | Locomotion blendspace. Attack montages. Hit reactions. Death montage |
BPC_AIStateMachine (83) |
State transitions (Patrol→Combat→Search) | BlendSpace | Full | BlendSpace-based locomotion per state. Alert→Combat transition animation |
BPC_AIPerceptionSystem (87) |
OnTargetDetected | — | — | No direct animation trigger |
BPC_AlertSystem (82) |
AlertState transitions | Montage | Full | Alerted animation (head snap, body turn). Suspicious look animation |
BPC_BehaviourVariantSelector (88) |
Variant selection | Montage | Full | Chooses between variant attack/patrol animations |
| AI Memory, Patrol, BB (81,84-86) | None | — | — | Data/state only |
8. Adaptive/Atmosphere Systems (10-adaptive)
| System | Trigger | Type | Body | Notes |
|---|---|---|---|---|
BPC_FearSystem (90) |
Fear level changes | Procedural | — | Character fear pose/breathing animations |
BPC_ScareEventSystem (101) |
OnScareTriggered | Montage | Full | Player jump-scare animation (body jerk, camera whip) |
BPC_MemoryDriftSystem (97) |
Memory distortion active | PostProcess | — | Visual distortion — no skeletal animation |
| Remaining adaptive systems | Atmosphere/light changes | — | — | Environment animation only (light flicker, audio fade) |
9. UI Systems (06-ui)
No skeletal animation triggers. All UI widget animations (fade in/out, slide, pulse) are WidgetAnimations on UUserWidget.
SUMMARY B — Sound/Audio Requirements Catalog
1. Player Systems
| System | Sound Trigger | Type | Surface/Variation | 3D |
|---|---|---|---|---|
BPC_HealthSystem (08) |
OnDamageTaken | SFX | Varies by damage type (Physical, Fire, Fear, etc.) | Yes |
BPC_HealthSystem (08) |
OnDeath | SFX | Death sound | Yes |
BPC_HealthSystem (08) |
OnHealthCritical | SFX | Low-health heartbeat/breathing | No (2D) |
BPC_HealthSystem (08) |
OnHealingReceived | SFX | Healing sound | Yes |
BPC_StaminaSystem (09) |
OnExhausted | SFX/VO | Heavy breathing, heartbeat, fatigue voice lines | No (2D) |
BPC_StaminaSystem (09) |
OnStaminaChanged | SFX | Low stamina warning | No |
BPC_StaminaSystem (09) |
OnStaminaFullyRestored | SFX | Restored chime | No |
BPC_StressSystem (10) |
OnStressTierChanged | SFX/Music/Ambience | Heartbeat audio (Panicked), breathing (Distressed), audio hallucinations (Terrified) | Mixed (hallucinations 3D/2D) |
BPC_StressSystem (10) |
OnHallucinationTriggered | SFX/VO | Random hallucination audio | Yes/No |
BPC_StressSystem (10) |
OnCatatonicStateEntered | SFX | Freeze/stumble sound | Yes |
BPC_MovementStateSystem (11) |
OnFootstep | SFX | Surface-based. S_FootstepProfile: SoundSoft/SoundHard based on velocity threshold. EPhysicalSurface lookup |
Yes |
BPC_MovementStateSystem (11) |
OnJumped | SFX | Jump sound | Yes |
BPC_MovementStateSystem (11) |
OnLanded | SFX | Landing sound, velocity-based | Yes |
BPC_MovementStateSystem (11) |
OnSprintStateChanged | SFX | Sprint wind/breath | No |
BPC_HidingSystem (12) |
OnHideStateChanged | SFX | Enter/exit hide sounds. Breath-hold sounds | Yes |
BPC_HidingSystem (12) |
OnHideSpotCompromised | Music | Tension/heartbeat music | No |
BPC_HidingSystem (12) |
OnForcedExitWarning | SFX/Music | Heartbeat audio | No |
BPC_EmbodimentSystem (13) |
OnOverlayChanged (blood/water) | SFX | Blood spatter, water drip | Yes |
2. Interaction Systems
| System | Sound Trigger | Type | Notes | 3D |
|---|---|---|---|---|
BP_DoorActor (19) |
PlayOpenAnimation | SFX | S_DoorAudioConfig.OpenSound |
Yes |
BP_DoorActor (19) |
PlayCloseAnimation | SFX | S_DoorAudioConfig.CloseSound |
Yes |
BP_DoorActor (19) |
TryUnlock (locked) | SFX | LockedSound |
Yes |
BP_DoorActor (19) |
UnlockDoor | SFX | UnlockSound |
Yes |
BP_DoorActor (19) |
DamageBarricade (break) | SFX | BarricadeBreakSound |
Yes |
BP_DoorActor (19) |
Moving squeak | SFX | SqueakInterval timer |
Yes |
BP_DoorActor (19) |
OnInteractionFailed | SFX | Blocked feedback | Yes |
BP_ItemPickup (25) |
PlayPickupFeedback | SFX | Pickup sound | Yes |
BPC_PhysicsDragSystem (22) |
OnObjectGrabbed / Released | SFX | Grab/release sound | Yes |
BPC_UsableWorldObjectSystem (23) |
OnObjectUsed | SFX | Generic use sound | Yes |
3. Narrative Systems
| System | Sound Trigger | Type | Notes | 3D |
|---|---|---|---|---|
BPC_DialoguePlaybackSystem (60) |
OnLineStarted | VO/Dialogue | Voice audio per speaker (optional). Lip-sync audio | Yes |
BPC_DialoguePlaybackSystem (60) |
OnDialogueStarted/Ended | Music | Dialogue music stinger | No |
BPC_DialogueChoiceSystem (61) |
OnChoicesPresented | UI | Choice UI open/select sounds | No |
BPC_CutsceneBridge (64) |
OnCutscenePlayRequested | Music | Cutscene music | No |
BPC_CutsceneBridge (64) |
OnCutsceneMilestoneReached | SFX/Music | Milestone stingers | No |
4. Weapon Systems
| System | Sound Trigger | Type | Notes | 3D |
|---|---|---|---|---|
BP_WeaponBase (69) |
Fire | SFX | Weapon fire sound (variation: suppressed/normal) | Yes |
BP_WeaponBase (69) |
Reload | SFX | Reload sounds (mag out, mag in, bolt) | Yes |
BPC_AmmoComponent (70) |
OnOutOfAmmo | SFX | Click | Yes |
BPC_ReloadSystem (78) |
StartReload / CompleteReload | SFX | Tactical/empty reload sounds | Yes |
BPC_MeleeSystem (76) |
StartSwing | SFX | Swing whoosh | Yes |
BPC_MeleeSystem (76) |
OnHitConfirmed | SFX | Impact sound (varies by material) | Yes |
BPC_HitReactionSystem (75) |
OnDamageTaken | SFX | Pain/death sounds | Yes |
BPC_CombatFeedbackComponent (71) |
OnHitConfirmed | SFX | Impact sound, ricochet | Yes |
BPC_ShieldDefenseSystem (79) |
OnBlock | SFX | Block impact | Yes |
5. AI Systems
| System | Sound Trigger | Type | Notes | 3D |
|---|---|---|---|---|
BP_EnemyBase (80) |
Alert state transitions | VO/SFX | Alert callout, combat bark, pain, death | Yes |
BPC_AlertSystem (82) |
OnAlertStateChanged | VO | Suspicious line, combat shout | Yes |
BPC_AIPerceptionSystem (87) |
OnTargetDetected / Lost | VO | Detection lines | Yes |
BPC_FearSystem (90) |
OnFearStateChanged | VO/SFX | Fearful whimper, heavy breathing | Yes |
6. Adaptive/Atmosphere Systems
| System | Sound Trigger | Type | Notes | 3D |
|---|---|---|---|---|
BPC_AudioAtmosphereController (95) |
OnAtmosphereChanged | Ambience/Music | Ambient layer swap. Music intensity change. Dynamic mixing | Yes |
BPC_ScareEventSystem (101) |
OnScareTriggered | SFX/Music | Stinger sound, music hit | Yes |
BPC_PacingDirector (98) |
Intensity level changes | Music | Music intensity ramping | No |
BPC_DifficultyManager (89) |
Difficulty changed | — | No direct audio trigger | — |
7. Interactive World Objects
| System | Sound Trigger | Type | Notes | 3D |
|---|---|---|---|---|
BPC_ContainerInventory (24) |
OnContainerOpened | SFX | Open chest/drawer | Yes |
BP_PuzzleDeviceActor (20) |
OnPuzzleStateChanged | SFX | Puzzle click/solve/fail | Yes |
BPC_ContextualTraversalSystem (21) |
OnTraversalStarted | SFX | Vault/climb/slide sound | Yes |
SUMMARY C — Chooser Table Candidates
Condition-Based Selection Nodes
| File | System | Selects Between | Input Columns (Conditions) | Output | Row Logic |
|---|---|---|---|---|---|
| 08 | BPC_HealthSystem |
Damage resistance multiplier | E_DamageType, stackable flag |
EffectiveDamage multiplier | Lookup DamageType → multiplier. If bIsStackable, accumulate |
| 09 | BPC_StaminaSystem |
Exhaustion state (Normal/Low/Exhausted) | CurrentStamina/MaxStamina ratio vs thresholds | Regen rate, regen delay, sprint block | if ratio ≤ ExhaustedThreshold → Exhausted; if ≤ LowThreshold → Low; else Normal |
| 10 | BPC_StressSystem |
Stress tier (Calm→Catatonic) | CurrentStress vs threshold values | Visual/audio penalty tier | Descending threshold check: highest exceeded → assign tier |
| 11 | BPC_MovementStateSystem |
Movement mode settings (speed/accel) | Current movement mode | MaxWalkSpeed, Acceleration, Deceleration | Map lookup: MovementSettings[CurrentMovementMode] |
| 11 | BPC_MovementStateSystem |
Footstep sound (Soft vs Hard) | SurfaceType, MovementMode, velocity vs threshold | SoundBase (SoundSoft/SoundHard) | Trace surface → lookup profile → if velocity > threshold use Hard |
| 11 | BPC_MovementStateSystem |
Stance transition type | E_StanceTransition (Instant/Smooth/Forced) |
Blend time, impulse | Switch on transition type |
| 12 | BPC_HidingSystem |
IsPlayerDetectable | HideType, enemy distance, LOS trace | Boolean detectable | If Hidden false→true. LOS trace: hits cover first→false; hits player→true |
| 17 | I_HidingSpot / BP |
Detectability modifier | E_HideSpotQuality |
DetectionRangeModifier (0-1), DetectionSpeedModifier (0-1) | Better quality = lower detection |
| 19 | BP_DoorActor |
Door interaction outcome | CurrentState, LockState, HasKey | Play open/play locked/start unlock | If Locked→check key; if Closed→open; if Open→close |
| 19 | BP_DoorActor |
Auto-close timer | AutoCloseDelay > 0 | Countdown or none | If delay > 0 → start timer after open |
| 21 | BPC_ContextualTraversalSystem |
Traversal type | Obstacle height vs thresholds (Low/Medium/High) | Vault/Mantle/Slide/Squeeze | if height ≤ Low→step; ≤ Medium→vault; ≤ High→mantle |
| 24 | BPC_ContainerInventory |
Loot generation | E_ContainerFillMethod |
Fixed/loot-table/empty | Switch on FillMethod |
| 24 | BPC_ContainerInventory |
Weighted loot selection | Per-entry Weight, bGuaranteed | Item + quantity | Roll random against weight sum. If guaranteed→always spawn |
| 25 | BP_ItemPickup |
Pickup visual state | Distance/overlap | Idle/Highlighted/BeingPickedUp/Respawning | Player overlap→Highlighted; Interact→BeingPickedUp; Respawn→Respawning |
| 30 | BPC_EquipmentSlotSystem |
Equip result | Slot occupied, category, state | Success/SlotOccupied/NotEquippable/BlockedByState | Cascading validation checks |
| 30 | BPC_EquipmentSlotSystem |
Equip animation type | E_EquipAnimationType |
Montage to play | Switch: Instant→none; Holster→holster anim; Equip→equip anim |
| 31 | BPC_InventorySystem |
Sort mode | E_SortMode |
Reordered slot array | Switch: ByName, ByCategory, ByRarity, ByWeight, ByQuantity, ByRecent |
| 31 | BPC_InventorySystem |
Add item outcome | Has space, has existing stack, weight capacity | Add to stack/new slot/return error | FindExistingStack→if found increment; else FindFreeSlot→new entry |
| 38 | BPC_AltDeathSpaceSystem |
Alt death space level | GameplayTag vs AltDeathSpaceMap | Level soft reference | Map lookup by context tag |
| 39 | BPC_DeathHandlingSystem |
Death outcome | S_DeathOutcomeRules + context |
StandardRespawn/GameOver/AltDeathSpace | Evaluate configurable rules: max deaths reached? → GameOver; has alt space? → AltDeathSpace |
| 50 | WBP_JournalDocumentViewer |
Font style | E_DocumentFontStyle |
Handwritten/Typewritten/Digital/BloodScrawled | Per-document font style selection |
| 58 | BPC_NarrativeStateSystem |
HasAllFlags vs HasAnyFlag | Array of GameplayTag values | True/false | AND query vs OR query |
| 61 | BPC_DialogueChoiceSystem |
GetValidChoices | RequiredFlagTag exists + matches narrative state | Filtered choice array | Filter: if RequiredFlagTag is set, show choice; else hide |
| 62 | BPC_BranchingConsequenceSystem |
Consequence action type | EConsequenceActionType |
Different system calls | Switch: PlayDialogue, UpdateObjective, SetWorldState, TriggerCutscene, etc. |
| 63 | BPC_TrialScenarioSystem |
Scenario end outcome | CheckAllObjectives, CheckFailureConditions | Success or Failure | All objectives complete→Success; failure condition→Failure |
| 74 | BPC_FirearmSystem |
Fire mode | E_FireMode (Single/Burst/Auto) |
Fire rate, ammo consumption | Switch on fire mode |
| 78 | BPC_ReloadSystem |
Reload type | Ammo count = 0 vs > 0 | Empty reload vs tactical reload | If current ammo = 0 → empty reload montage; else → tactical |
| 83 | BPC_AIStateMachine |
AI state | Perception, alert level, health | Patrol/Search/Combat/Flee | State transition conditions |
| 88 | BPC_BehaviourVariantSelector |
Behaviour variant | DA_BehaviourVariant data |
Different attack patterns, movement speeds | Weighted random selection from variant set |
| 89 | BPC_DifficultyManager |
Difficulty level | Player metrics vs thresholds | Damage multipliers, spawn rates, resource amounts | Metric-to-difficulty mapping |
| 97 | BPC_MemoryDriftSystem |
Memory distortion type | Random roll vs tier | Visual/audio/dialogue distortion effects | Random selection weighted by stress tier |
| 98 | BPC_PacingDirector |
Pacing intensity | Stress, combat, exploration time | Music intensity, encounter frequency | Composite score → intensity band |
| 99 | BPC_PlaystyleClassifier |
Player archetype | Metrics (hiding vs combat vs exploration) | Aggressive/Stealthy/Explorer/Balanced | Metric ratio analysis |
| 100 | BPC_RareEventSystem |
Rare event selection | Weight table per event | Event to execute | Weighted random from DA_RareEvent entries |
| 103 | SS_AchievementSystem |
Achievement unlock | Metrics thresholds | Achievement granted | if metric ≥ threshold → unlock |
| 118 | DA_DataAssetArchitecture |
Data asset type | Inherited class type | Struct definition | Per-asset-type variable set |
SUMMARY D — State-Gating Actions
Actions that MUST be BLOCKED in certain states
| Action | System Owner | Blocking States/Conditions | Existing Gating |
|---|---|---|---|
| ApplyDamage | BPC_HealthSystem (08) | DeathState == Dead, bIsInvincible | Early-out at top of function |
| ApplyHealing | BPC_HealthSystem (08) | DeathState == Dead | Early-out at top of function |
| KillInstant | BPC_HealthSystem (08) | Already dead | No gating (bypasses all) |
| DrainStamina | BPC_StaminaSystem (09) | Action cooldown active, CurrentStamina < MinStamina | Check ActionCooldownTimers + CanAffordAction |
| StartContinuousDrain | BPC_StaminaSystem (09) | CurrentStamina <= 0 | Stops drain on exhaustion |
| EnterHideSpot | BPC_HidingSystem (12) | CurrentHideState != Exposed, !bCanHide | Early-out state check |
| ExitHideSpot | BPC_HidingSystem (12) | CurrentHideState != Hidden && != Peeking | State check at top |
| StartPeek | BPC_HidingSystem (12) | CurrentHideState != Hidden, !bCanPeek, !bHasPeekAbility | Multiple early-outs |
| StopPeek | BPC_HidingSystem (12) | CurrentHideState != Peeking | State check |
| SetVisibilityMode | BPC_EmbodimentSystem (13) | NewMode == Current | No-op guard |
| PerformInteraction | BPC_InteractionDetector (16) | bIsPerformingInteraction, DetectionState < TargetConfirmed, InputMode mismatch | Triple guard |
| CancelInteraction | BPC_InteractionDetector (16) | !bIsPerformingInteraction | Early-out |
| TryOpen | BP_DoorActor (19) | DoorState is Opening/Closing/Barricaded, !IsDoorUsable | IsDoorUsable() check, state machine prevents during transitions |
| TryClose | BP_DoorActor (19) | DoorState is Opening/Closing, State != Open | State check |
| EquipItem | BPC_EquipmentSlotSystem (30) | E_EquipResult.BlockedByState, BlockedByCondition |
CanEquipItem pre-check |
| UseItem | BPC_InventorySystem (31) | Item on cooldown, ItemNotUsable, bIsEquipped (weapons) | Cooldown map + usability check |
| OnPlayerDeath | BPC_DeathHandlingSystem (39) | bIsDying (prevents re-entrant death) | Guard flag |
| RespawnPlayer | BPC_PlayerRespawnSystem (42) | Invalid respawn transform | Null-check before respawn |
| ForcePanic | BPC_StressSystem (10) | Already at Catatonic → immune | Early-out at AddStress if Catatonic and !bIsInstant |
| FireWeapon | BP_WeaponBase (69) / BPC_FirearmSystem (74) | Out of ammo, reloading, in hide spot, cutscene, dead | Ammo check, state checks from character |
| Reload | BPC_ReloadSystem (78) | Full ammo, not holding weapon, dead | Ammo check, weapon validity |
| MeleeAttack | BPC_MeleeSystem (76) | In hide spot, dead, mid-combo | Combo state machine |
| Block/Parry | BPC_ShieldDefenseSystem (79) | Not equipped, no stamina, dead | Equipment + stamina check |
| Jump | (Character/PC) | In hide spot, dead, stamina exhausted | Movement state check |
| Sprint | (BPC_MovementStateSystem 11) | Not grounded, dead, exhausted, in hide | MovementState + stamina check |
| Crouch/Prone Transition | BPC_MovementStateSystem (11) | Ceiling clearance fail, no CrouchWalk mode | CanTransitionToPosture(), clearance trace |
| Open Inventory | SS_UIManager (44) | Cutscene playing, dead, in dialogue | GamePhase check by UIManager |
| Pause Game | SS_UIManager (44) | !bPauseAllowed (set by GM_CoreGameMode), cutscene | GM_CoreGameMode.bPauseAllowed runtime flag |
| Initiate Dialogue | BPC_DialoguePlaybackSystem (60) | bIsPlaying (already in dialogue) | Early-out if already playing |
| Skip Dialogue | BPC_DialoguePlaybackSystem (60) | !bCanSkipLine | Per-sequence option check |
| Skip Cutscene | BPC_CutsceneBridge (64) | !bCanSkip, TimeBeforeSkip not elapsed | CanSkipCutscene() with timer |
| SetGamePhase | GI_GameFramework (04) | Same phase as current (optional guard) | Would normally fire dispatcher even for same value |
| EnterAltDeathSpace | BPC_AltDeathSpaceSystem (38) | bIsInAltDeathSpace | Guard flag |
| ExitAltDeathSpace | BPC_AltDeathSpaceSystem (38) | !bIsInAltDeathSpace | Guard flag |
| BeginScenario | BPC_TrialScenarioSystem (63) | ScenarioState != Inactive | Active scenario guard |
| EndScenario | BPC_TrialScenarioSystem (63) | ScenarioState == Inactive | Must be active |
| PlayCutscene | BPC_CutsceneBridge (64) | bIsPlaying | Guard flag |
| SelectChoice | BPC_DialogueChoiceSystem (61) | !bChoiceActive | Guard flag |
| AddStress | BPC_StressSystem (10) | CurrentTier == Catatonic (if !bIsInstant) | Immunity at max tier |
| QuickSlot Switch | BPC_ActiveItemSystem (26) | !bCanSwitchItems (during animation), SwitchCooldown | Cooldown timer + switch block |
| Interact Hold | BPC_InteractionDetector (16) | bBlockDuringDeath, bBlockDuringHiding, bBlockDuringCombat | Config-based blocking per state |
| ApplyMovementPenalty | BPC_MovementStateSystem (11) | !bApplyMovementPenalties | Config toggle |
| LockDoor | BP_DoorActor (19) | Already locked | Redundant state guard |
Key Architectural Patterns Observed
-
Event Dispatcher-driven communication — Systems never call each other directly except through
I_InterfaceLibraryinterfaces or direct reference on same actor. All cross-component communication uses dispatchers. -
State machine everywhere — Every significant system uses state machines:
E_HideState,E_DoorState,E_DeathOutcome,E_StressTier,E_CameraState,E_DiegeticDisplayMode,E_PuzzleState,EScenarioState,E_DetectionState. -
GASP integration pattern — Systems that need animation notify
ABP_GASPvia dispatcher (OnMovementModeChanged,OnPostureChanged,OnSprintStateChanged,OnExhaustionStateChanged,OnHideStateChanged). GASP reads movement mode/posture variables directly. -
GameplayTag-driven state — All enums map to GameplayTag namespaces. Conditions are checked via tag queries, not enums. Enums exist for performance in tight loops (stamina drain, movement mode switching).
-
Montage notify patterns used —
EnterHideSpotnotifiesOnAnimationHideEnterComplete.HideSpotBasecallsEnterMontage. Death usesE_DeathAnimationStagetimeline. Reload/Fire use montage notifies for ammo insertion timing.