diff --git a/docs/audit-a/audit-request.md b/docs/audit-a/audit-request.md deleted file mode 100644 index 1acd352..0000000 --- a/docs/audit-a/audit-request.md +++ /dev/null @@ -1,113 +0,0 @@ -# Audit Request: Cross-Reference Master Document vs Existing Blueprint Spec Files - -## Goal -Systematically map every system defined in `UE5_Modular_Game_Framework.md` (3703 lines, ~131 systems across 13 sections) against the 83 existing blueprint spec files in `docs/blueprints/` to identify: -1. Which systems have corresponding blueprint spec files (Present) -2. Which systems are missing (Missing) -3. Which existing files have no clear corresponding master-document system (Orphaned / Renamed) - -## Input Files - -### Master Document -- `UE5_Modular_Game_Framework.md` (in workspace root) - -### Existing Files (83 total) -Located under `docs/blueprints/` with the following structure: -``` -docs/blueprints/ - TEMPLATE.md - 01-core/ (files 01-07) - 02-player/ (files 08-15) - 03-interaction/ (files 16-21) - 04-inventory/ (files 22-27) - 05-saveload/ (files 28-31) - 06-ui/ (files 32-37) - 07-narrative/ (files 38-48) - 08-weapons/ (files 49-54) - 09-ai/ (files 55-61) - 10-adaptive/ (files 62-70) - 11-polish/ (files 71-83) -``` - -## Master Document Section Structure - -| Section | Title | Table Count | Lines | -|---------|-------|-------------|-------| -| 1 | Core Framework Systems | 8 | 154-537 | -| 2 | Player State & Embodiment | 9 | 540-939 | -| 3 | Interaction & World Manipulation | 11 | 941-1305 | -| 4 | Inventory, Items & Collectibles | 12 | 1307-1643 | -| 5 | Weapon, Equipment & Damage | 10 | 1645-1892 | -| 6 | UI, Menus & Diegetic Presentation | 13 | 1894-2143 | -| 7 | Narrative, Dialogue, Objective & Choice | 11 | 2146-2467 | -| 8 | Save, Load, Persistence & Death Loop | 11 | 2469-2691 | -| 9 | Adaptive Environment, Atmosphere & Scare | 9 | 2693-2935 | -| 10 | AI, Perception & Encounters | 9 | 2937-3109 | -| 11 | Achievements, Progression & Meta | 10 | 3112-3286 | -| 12 | Settings, Accessibility & Platform | 9 | 3288-3389 | -| 13 | Editor / Data / Content Authoring | 9 | 3391-3498 | - -## Existing Files Reference (83 files) - -### 01-core/ (7 files) -01_GI_GameTagRegistry.md, 02_FL_GameUtilities.md, 03_I_InterfaceLibrary.md, 04_GI_GameFramework.md, 05_GM_CoreGameMode.md, 06_GS_CoreGameState.md, 07_DA_ItemData.md - -### 02-player/ (8 files) -08_BPC_HealthSystem.md, 09_BPC_StaminaSystem.md, 10_BPC_StressSystem.md, 11_BPC_MovementStateSystem.md, 12_BPC_HidingSystem.md, 13_BPC_EmbodimentSystem.md, 14_BPC_CameraStateLayer.md, 15_BPC_PlayerMetricsTracker.md - -### 03-interaction/ (6 files) -16_BPC_InteractionDetector.md, 17_BPC_PickupComponent.md, 18_I_HidingSpot.md, 19_BPC_LeverPuzzleComponent.md, 20_BPC_InteractableDoorComponent.md, 21_BPC_DiegeticDisplay.md - -### 04-inventory/ (6 files) -22_BPC_InventoryComponent.md, 23_BPC_InventoryWeightSystem.md, 24_BPC_InventoryQuickSlot.md, 25_BPC_EquipmentSystem.md, 26_BPC_ContainerInventory.md, 27_BP_ItemPickup.md - -### 05-saveload/ (4 files) -28_SS_SaveManager.md, 29_I_Persistable.md, 30_BPC_CheckpointSystem.md, 31_BPC_DeathHandlingSystem.md - -### 06-ui/ (6 files) -32_SS_UIManager.md, 33_WBP_HUD.md, 34_WBP_InventoryUI.md, 35_WBP_InteractionUI.md, 36_WBP_MenuWidgets.md, 37_WBP_AccessibilityUI.md - -### 07-narrative/ (11 files) -38_BPC_NarrativeStateSystem.md, 39_BPC_ObjectiveSystem.md, 40_BPC_DialoguePlaybackSystem.md, 41_BPC_DialogueChoiceSystem.md, 42_BPC_BranchingConsequenceSystem.md, 43_BPC_TrialScenarioSystem.md, 44_BPC_CutsceneBridge.md, 45_BPC_EndingAccumulatorSystem.md, 46_BPC_LoreUnlockSystem.md, 47_BPC_NarrativeTriggerVolume.md, 48_DA_NarrativeDataAssets.md - -### 08-weapons/ (6 files) -49_BP_WeaponBase.md, 50_BP_RangedWeapon.md, 51_BP_MeleeWeapon.md, 52_BPC_AmmoComponent.md, 53_BPC_DamageHandlerComponent.md, 54_BPC_CombatFeedbackComponent.md - -### 09-ai/ (7 files) -55_BPC_AIControllerBase.md, 56_BPC_PerceptionComponent.md, 57_BPC_BehaviorTreeManager.md, 58_BP_EnemyBase.md, 59_BP_PatrolPath.md, 60_BPC_AlertSystem.md, 61_BPC_AIStateMachine.md - -### 10-adaptive/ (9 files) -62_BPC_DifficultyManager.md, 63_BPC_FearSystem.md, 64_BPC_AtmosphereController.md, 65_BPC_LightingManager.md, 66_BPC_AudioManager.md, 67_BPC_VFXManager.md, 68_BP_DynamicEvent.md, 69_BPC_PerformanceScaler.md, 70_BPC_ProceduralEncounter.md - -### 11-polish/ (13 files) -71_SS_SettingsManager.md, 72_BPC_AccessibilitySettings.md, 73_BPC_TutorialSystem.md, 74_BPC_AchievementManager.md, 75_BPC_StatsTracker.md, 76_BPC_LoadingScreen.md, 77_WBP_CreditsScreen.md, 78_WBP_SplashScreen.md, 79_BPC_FPSCounter.md, 80_BPC_DevCheatManager.md, 81_WBP_DebugMenu.md, 82_BPC_AnalyticsTracker.md, 83_BPC_ErrorHandler.md - -## Methodology - -Read each section of the master document and extract: -- Every named system (by its prefix + name, e.g., `BPC_HealthSystem`, `BP_DoorActor`, `SS_SaveSystem`, `WBP_HUDController`) -- Cross-reference against the 83 existing files by matching: - - Exact name match (e.g., `BPC_HealthSystem` → `08_BPC_HealthSystem.md`) - - Semantic match (e.g., `SS_SaveSystem` in master doc → `28_SS_SaveManager.md` on disk) - - Bundled match (e.g., `WBP_MainMenu`, `WBP_PauseMenu`, `WBP_SettingsMenu` in master doc → `36_WBP_MenuWidgets.md` on disk) - -## Output Format - -Produce a Markdown table for each section of the master document with columns: -| Master Doc System | Corresponding File | Status | Notes | -|---|---|---|---| -| `BPC_HealthSystem` | `08_BPC_HealthSystem.md` | ExactMatch | Same name | -| `SS_SaveSystem` | `28_SS_SaveManager.md` | RenamedMatch | Master calls it SaveSystem, file calls it SaveManager | -| `BPC_InteractionExecutor` | (none) | Missing | No corresponding file | - -Also flag files that exist on disk but have no obvious match in the master document (orphaned). - -## Final Summary -At the end, provide: -1. Count of ExactMatch systems -2. Count of RenamedMatch systems -3. Count of Missing systems -4. Count of Orphaned files -5. Total systems in master doc -6. Total files on disk -7. List of all missing system names organized by their source section \ No newline at end of file diff --git a/docs/reports/blueprint_condensed_summary.md b/docs/reports/blueprint_condensed_summary.md deleted file mode 100644 index 4b27359..0000000 --- a/docs/reports/blueprint_condensed_summary.md +++ /dev/null @@ -1,315 +0,0 @@ -# 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. \ No newline at end of file