add reports
This commit is contained in:
315
docs/reports/blueprint_condensed_summary.md
Normal file
315
docs/reports/blueprint_condensed_summary.md
Normal file
@@ -0,0 +1,315 @@
|
||||
# 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
|
||||
|
||||
1. **Event Dispatcher-driven communication** — Systems never call each other directly except through `I_InterfaceLibrary` interfaces or direct reference on same actor. All cross-component communication uses dispatchers.
|
||||
|
||||
2. **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`.
|
||||
|
||||
3. **GASP integration pattern** — Systems that need animation notify `ABP_GASP` via dispatcher (`OnMovementModeChanged`, `OnPostureChanged`, `OnSprintStateChanged`, `OnExhaustionStateChanged`, `OnHideStateChanged`). GASP reads movement mode/posture variables directly.
|
||||
|
||||
4. **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).
|
||||
|
||||
5. **Montage notify patterns used** — `EnterHideSpot` notifies `OnAnimationHideEnterComplete`. `HideSpotBase` calls `EnterMontage`. Death uses `E_DeathAnimationStage` timeline. Reload/Fire use montage notifies for ammo insertion timing.
|
||||
Reference in New Issue
Block a user