👻 Ultimate Horror Framework

Complete Horror Game Framework for Unreal Engine 5

v2.0 — 123 C++ Classes UE 5.6 / 5.7 Multiplayer Ready 100% Blueprint Friendly

⚡ Quick Start — Working Horror Game in 5 Minutes

Zero Blueprint work required. Set 4 classes in your GameMode and press Play. Everything auto-creates: HUD, widgets, full player movement with WASD + mouse look, sprint, crouch, jump, interact, flashlight, lean, inventory — all input bindings are built-in.

1 Enable the Plugin

Go to Edit → Plugins, search for "Horror Framework", enable it, and restart the editor.

2 Set Up GameMode

Create or open your GameMode Blueprint. Set these 4 classes in the Details Panel:

📋 GameMode — Details Panel (Classes)
Default Pawn ClassHF_HorrorCharacter
Player Controller ClassHF_HorrorPlayerController
HUD ClassHF_HorrorHUD
Game State ClassHF_GameState

3 Hit Play!

That's it. You now have all of this working automatically:

🏃 Movement

WASD, mouse look, sprint (Shift), crouch (C), jump (Space). Gamepad support included.

❤️ Health System

HP with damage, healing, regen, invincibility frames, death, and revive.

😱 Fear & Sanity

Sanity drains in darkness. Fear spikes from scares. Visual effects intensify automatically.

🔦 Flashlight

Toggle with F key. Battery drains over time. Flickers when low. Auto-created SpotLight.

🤚 Interaction

Line trace from camera. "[E] Open Door" prompts on HUD. Works with all built-in interactables.

🎒 Inventory

12-slot system with stacking, weight, equip/unequip. Toggle with Tab.

🖥️ Full HUD

HP / Sanity / Stamina / Battery bars, crosshair, interaction prompt, damage vignette.

🔊 Noise System

Walk/run/crouch produce different noise levels. AI hears you through AwarenessComponent.

4 Add an Enemy (Optional)

Create a Character Blueprint. Set HF_HorrorAIController as AI Controller Class. Drop it in the level. The AI will automatically detect the player via sight + hearing, chase when awareness is high enough, patrol between points, and search hiding spots.

5 Customize Controls (Optional)

Input works out of the box! The PlayerController auto-creates all InputActions, MappingContext, and key bindings on BeginPlay. No manual Input setup required.

Want to change keys? Open your PlayerController Blueprint → Details → Horror | Input | Keys:

📋 HF_HorrorPlayerController — Key Bindings
Move Forward / Back / Left / RightW / S / A / D
SprintLeft Shift
CrouchC
JumpSpace Bar
InteractE
FlashlightF
InventoryTab
Lean Left / RightQ / R
PauseEscape

🧩 All 16 Default Components on HF_HorrorCharacter

These are auto-created in the constructor. You get them all instantly when you use HF_HorrorCharacter as your Default Pawn Class.

#ComponentWhat It Does
1CameraBoom (SpringArm)Camera mount. First-person by default (TargetArmLength = 0).
2FirstPersonCameraPlayer camera, attached to boom.
3HF_HealthComponentHP, damage, healing, regen, i-frames, death, status effects, stagger.
4HF_FearSanityComponentSanity drain in darkness, fear spikes from scares, visual effects.
5HF_InteractionComponentLine trace from camera, shows prompts on HUD when aiming at interactables.
6HF_InventoryComponent MULTIPLAYERSlot-based inventory with stacking, weight, equip/unequip.
7HF_NoiseSystemComponentTracks player noise (walk/run/crouch). AI hears it.
8HF_NoteReaderComponentCollect and read notes/documents. Widget auto-shows.
9HF_HorrorHUDComponentBridges character state (HP, sanity, stamina, battery) to HUD widget.
10HF_LeanPeekComponentLean left/right to peek around corners without exposing your body.
11HF_DeathManagerHandles death: respawn, permadeath, lives, or downed state.
12HF_CameraManagerHead bob, sprint FOV boost, fear tremble, night vision.
13HF_AccessibilityComponentScare intensity scaling, subtitles, motion sickness mode.
14HF_FlashlightComponentToggle flashlight on/off. Battery drains. Flickers when low.
15HF_BreathHoldComponentHold breath while hiding to reduce detection chance.
16HF_WeaponSocketComponentAttaches visible weapon meshes to character skeleton sockets.
💡 All auto-created

You don't need to add any of these manually. They're all created as default subobjects in the constructor. Just use HF_HorrorCharacter and they're there.

❤️ Health & Damage System

Already included on HF_HorrorCharacter with bIsPlayer = true. For custom characters or enemies, add HF_HealthComponent manually.

Dealing Damage

Two ways to deal damage to anything with a HealthComponent:

Option A: Unreal's Built-in Damage (recommended)
Apply Damage
Base Damage: 50.0
Damaged Actor: Target
HealthComponent auto-receives damage via OnTakeAnyDamage binding. No extra wiring needed.
Option B: Direct Call
Get Health Component → Apply Simple Damage
Amount: 50.0
Damage Causer: Self

Properties (Details Panel)

PropertyDefaultWhat It Does
MaxHealth100Maximum HP. Horror games typically use 50–100.
bEnableRegenerationfalseON: modern horror (RE7). OFF: classic survival horror (healing items only).
RegenRate1.0/sHP per second when regenerating. 0.5 = punishing, 5.0 = forgiving.
RegenDelay5.0sSeconds after last damage before regen starts.
bEnableIFramestrueInvincibility after taking damage. Prevents stunlock.
IFramesDuration0.5s0 = enemies can stunlock. 0.5–1.0 = fair. 2.0+ = very forgiving.
Armor0Flat damage reduction. Applied before damage type multipliers.
bIsPlayerfalseSet true for player — applies difficulty DamageMultiplierToPlayer.
bIsImmortalfalseCannot take any damage at all. Used by EnemySlasher.
bIsUnkillablefalseHP cannot drop below 1. Takes damage but never dies.
bEnableStaggerfalseAccumulated damage triggers stagger at threshold.
StaggerThreshold50Damage needed to trigger stagger. Resets after triggering.

Functions

FunctionDescription
ApplyDamage(DamageInfo)Full damage with type, direction, armor, crits, difficulty scaling.
ApplySimpleDamage(Amount, Causer)Quick damage — just amount + who caused it.
Heal(Amount)Restore HP. Clamped to MaxHealth.
HealToFull()Full heal to MaxHealth.
Kill(Killer)Instant death (blocked by bIsUnkillable/bIsImmortal).
Revive(HP)Bring back from death. Sets bIsAlive = true.
SetInvincible(Duration)Timed invincibility.
GetHealthPercent()0.0–1.0 for HP bars.

Events (bind in Blueprint)

EventWhenParameters
OnDamageReceivedAny damage takenFHF_DamageInfo (amount, type, instigator)
OnHealedAny healingHealAmount, NewHealth
OnDeathHP reaches 0DeadActor
OnHealthChangedAny HP changeCurrentHP, MaxHP, Delta
OnStaggeredStagger threshold reached

Status Effects

HealthComponent manages 10 status effects: Bleeding, Poisoned, Burning, Frozen, Infected, Stunned, Blinded, Slowed, Hallucinating. Each can stack, deal tick damage, and auto-expire.

Status Effect Usage
HealthComp → Apply Status Effect (Burning, 10s, 5dmg/tick)
HealthComp → Remove Status Effect (Burning)
HealthComp → Has Status Effect (Poisoned) → true/false
Burn/Poison/Bleed auto-deal HP damage if HealthComponent is on the same actor. No extra wiring.

Multiplayer

MULTIPLAYER CurrentHealth, MaxHealth, bIsAlive, bIsInvincible are replicated. Damage and healing only process on the server (authority check in ApplyDamage and Heal). Clients receive replicated values via OnRep.

😱 Fear & Sanity System

Sanity = long-term mental state. Drains passively in darkness, recovers in safe zones.
Fear = short-term reaction. Spikes from scare events, decays over time. Both drive visual effects, hallucinations, and gameplay penalties.

How It Works

Fear & Sanity Flow
Player enters DarknessZone → Sanity starts draining (PassiveSanityDrain/s)
Player walks through ScareTrigger → Fear spikes (FearImpact) + Sanity drops (SanityImpact)
Fear level rises → Visual effects intensify (vignette, chromatic, grain, camera shake)
Player enters SafeRoomZone → Sanity recovers (SafeZoneRecoveryRate/s)
Fear decays naturally over time (FearDecayRate/s)

Fear Levels

LevelThresholdEffects
Calm0Normal gameplay
Uneasy15Subtle vignette begins
Anxious35Heartbeat audio starts
Scared55Camera trembles, breathing gets heavy
Terrified75Hallucination chance, chromatic aberration
Panic90Maximum distortion, heavy grain, loud heartbeat

Properties

PropertyDefaultWhat It Does
MaxSanity100Maximum sanity value.
PassiveSanityDrain0.5/sDrain rate in darkness. 0.1 = slow (explore freely). 2.0 = flashlight CRITICAL.
SafeZoneRecoveryRate2.0/sRecovery in safe rooms. High = powerful safe rooms.
bSanityDepletionKillsfalseON: zero sanity = death (Amnesia). OFF: zero = visual effects only (Eternal Darkness).
FearDecayRatevariesHow fast fear naturally decays.
ScareIntensityMultiplier1.0Scale all scare impacts (0 = no fear, 2 = double fear). Set by AccessibilityComponent.
DarknessDrainMultiplier1.0Extra multiplier for darkness drain.

Functions

FunctionDescription
DrainSanity(Amount)Reduce sanity by amount.
RestoreSanity(Amount)Restore sanity.
SetSanity(Value)Set exact sanity value.
AddFear(Amount)Spike fear.
SetFear(Value)Set exact fear value.
CalmDown()Instantly reset fear to 0.
GetSanityPercent()0.0–1.0 for sanity bar.
GetFearPercent()0.0–1.0 for fear indicator.
EnterDarkness() / LeaveDarkness()Toggle darkness drain.

Events

EventWhen
OnSanityChangedAny sanity change — use for sanity bar
OnFearLevelChangedFear level changed (Calm → Uneasy, etc.) — use for music layers
OnSanityDepletedSanity hit zero

MULTIPLAYER CurrentSanity, CurrentFear, and CurrentFearLevel are all replicated.

🤚 Interaction System

HF_InteractionComponent fires a line trace from the camera every tick. If it hits an actor implementing IHF_InteractableInterface, it shows the interaction prompt on HUD.

Interaction Flow
InteractionComp traces from camera (InteractionRange units)
Hits actor with IHF_InteractableInterface? → CanInteract()?
HUD shows prompt: "[E] Open Door"
Player presses E → Interact() fires on the target actor

Making an Actor Interactable

1 Create Actor Blueprint

Create a new Actor Blueprint.

2 Add Interface

Class Settings → Interfaces → Add → HF_InteractableInterface

3 Implement Events

Right-click Event Graph → Add Event from Interface: Interact, Get Interaction Prompt, Can Interact, Get Interaction Type.

Built-in interactables that already implement the interface: HF_DoorActor, HF_HidingSpot, HF_GeneratorActor, HF_CombinationLock, HF_LightSwitchActor, HF_WorkbenchActor.

PropertyDefaultDescription
InteractionRange250Trace distance in Unreal units. Lower = more immersive.
TraceChannelVisibilityCollision channel for the trace.

🎒 Inventory System

MULTIPLAYER Slot-based inventory with stacking, weight limit, equip/unequip. Slots array is replicated.

Functions

FunctionDescription
AddItem(ItemData, Qty)Returns number actually added. Inventory might be full or too heavy.
RemoveItem(ItemID, Qty)Returns number actually removed.
UseItem(SlotIndex, Target)Triggers OnItemUsed event. Consumes item if bConsumable.
HasItem(ItemID, Qty)Check if player has at least Qty of item.
EquipSlot(Index)Set active equipped item.
ClearInventory()Remove all items.
GetCurrentWeight()Total weight of all items.
IsFull()No free slots remaining.

Properties

PropertyDefaultWhat It Does
MaxSlots12Lower (4–6) = RE-style inventory management. Higher (20+) = hoard everything.
bUseWeightfalseEnable weight limit. OFF = slot-based only.
MaxWeight50Maximum carry weight (only if weight enabled).

Item Data (FHF_ItemData)

FieldTypeDescription
ItemIDFNameUnique identifier (e.g. "Medkit", "Key_Basement")
DisplayNameFTextShown in inventory UI
DescriptionFTextItem description text
IconUTexture2DInventory icon image
WeightfloatWeight per unit (if weight system enabled)
bStackableboolCan multiple units share one slot?
MaxStackSizeint32Max units per stack
bConsumableboolConsumed when UseItem is called?
bKeyItemboolKey items (doors, puzzles)

Events

EventWhen
OnItemAddedItem added — use for "+1 Medkit" floating text
OnItemRemovedItem removed
OnItemUsedItem consumed/used
OnInventoryChangedAny change — use to refresh inventory UI

⚔️ Weapon System

HF_WeaponComponent handles melee attacks, firearms with ammo/reload, and throwables. Add it to any actor — weapon pickups, NPCs, or the player. It handles cooldowns, stamina cost, noise generation, and sound.

Weapon Types

TypeBehavior
MeleeNo ammo. Attack within range, consumes stamina, respects cooldown.
FirearmUses ammo from clip. Must reload when empty. Plays empty-click at 0.
ThrowableSingle-use throw. Implement throw logic in your Blueprint on OnAttack.

Properties

PropertyDefaultDescription
Damage25Damage dealt per attack
AttackRange150Melee range (units)
AttackCooldown0.8Seconds between attacks
StaminaCost10Stamina consumed per attack
NoiseLoudness0.7Noise generated — AI hears this via NoiseSystem
MaxAmmo12Total reserve ammo (firearm)
ClipSize6Max ammo per clip (firearm)
ReloadTime2.0Seconds to reload (firearm)

Socket Properties (for visible weapon mesh)

PropertyDescription
WeaponMeshStatic Mesh to display on the character's socket (e.g. SM_Axe, SM_Pistol)
AttachSocketNamePer-weapon socket override (empty = use WeaponSocketComponent default)
SocketOffsetPosition/rotation/scale offset on the socket
⚠️ Important

Applying damage to a target is YOUR responsibility. Bind to OnAttack and do a line trace, overlap, or any hit detection you want. Then call HealthComp→ApplySimpleDamage() on whatever you hit. The weapon handles the "can I attack?" logic — you handle the "what did I hit?" logic.

Events

EventWhenParams
OnAttackAttack performedfloat Damage
OnReloadCompleteReload finished
OnAmmoEmptyTried to fire at 0 ammo

MULTIPLAYER CurrentAmmo is replicated. Attack() and Reload() block on simulated proxies.

Weapon Socket System

HF_WeaponSocketComponent attaches a visible weapon mesh to your character's skeleton socket. Already on HF_HorrorCharacter.

1 Add socket weapon_r to your skeleton (right-click hand_r → Add Socket)

2 On WeaponComponent, set WeaponMesh to your Static Mesh

3 Call WeaponSocketComp→EquipWeapon(WeaponComp). Mesh appears on socket. UnequipWeapon() removes it.

Swapping: EquipWeapon() auto-unequips the previous weapon. Events: OnWeaponEquipped, OnWeaponUnequipped.

🔦 Flashlight

Already on HF_HorrorCharacter. Auto-creates a SpotLight if none assigned. Toggle with F key (auto-bound).

PropertyDefaultWhat It Does
MaxBattery120s2 minutes of light. Lower (30–60s) = scramble for batteries.
DrainRate1.0/sBattery per second when on. Higher = faster drain, more panic.
bUseBatteriestrueOFF: infinite light, no resource anxiety.
FlickerThreshold0.15Battery % when flickering starts.
FunctionDescription
Toggle()Switch on/off
TurnOn() / TurnOff()Explicit control
RechargeBattery(Amount)Add battery from pickup
ReplaceBattery()Full recharge to max

Events: OnToggled, OnBatteryLow, OnBatteryDepleted. MULTIPLAYER bIsOn and CurrentBattery are replicated.

🤖 AI Enemy System

No animations or meshes included. This is a C++ runtime plugin — you bring your own character mesh, animations, and sounds. The plugin provides all AI logic, awareness, pathfinding, and behaviors.

Setting Up Your First Enemy

1 Create Enemy Character Blueprint

Content Browser → Blueprint Class → Character. Add your Skeletal Mesh.

2 Set AI Controller

In Details Panel: AI Controller Class = HF_HorrorAIController, Auto Possess AI = Placed in World or Spawned.

ℹ️ What happens automatically

When the enemy spawns, HF_HorrorAIController possesses it. The controller auto-creates an AwarenessComponent, auto-targets the player, applies difficulty scaling, and starts listening to events. Zero Blueprint logic needed.

3 Create Behavior Tree + Blackboard

Content Browser → AI → Behavior Tree. Content Browser → AI → Blackboard. Assign in AI Controller.

4 Add NavMesh

Place Nav Mesh Bounds Volume in level → Build → Build Paths → Press P to visualize (green = walkable).

🚨 NavMesh required!

Without a Nav Mesh, the AI cannot move. All enemies use Unreal's navigation for pathfinding.

Awareness System (Detection)

HF_AwarenessComponent handles sight + hearing. States progress: Unaware → Suspicious → Searching → Alerted → Chasing → Attacking → LostTarget.

PropertyDefaultDescription
SightRange1500How far the AI can see
SightAngle60°Field of view. 360 = omnidirectional (Slender-style)
HearingRange2000How far the AI can hear noise
DecayRate5/sAwareness drops if not detecting

Built-in BT Nodes

NodeTypeWhat It Does
HF PatrolTaskWalk between PatrolPoints array
HF Chase PlayerTaskChase with rubber-banding speed
HF Search Hiding SpotsTaskCheck nearby HidingSpots for hidden player
HF StalkTaskMaintain distance, hide when player looks
HF Teleport BehindTaskTeleport behind player when not looking
HF Check AwarenessDecoratorBranch based on AwarenessState
HF Update PerceptionServiceKeep perception data fresh

Built-in Enemy Classes

ClassDescriptionKey Differences
HF_EnemyCharacterBaseBase class. HP, attack sphere, death, AI-ready.Foundation for all enemies. 5 montage slots.
HF_EnemyMeleeKillable. Zombie/mutant/infected.HP=150, HeavyAttack 20% chance (2x damage), ChaseSpeed=400.
HF_EnemySlasherUnkillable. Outlast/Alien:Isolation style.bIsImmortal=true, Damage=999 (instant kill), FearOnSight=10, FearOnAttack=40.

AI Events

EventWhen
OnChaseStarted / OnChaseStoppedChase mode toggle — play chase music
OnTargetSpotted / OnTargetLostFirst sight / lost player — play roar/confused
OnNoiseHeardHeard a noise — look toward source
OnAwarenessStateChangedAny state transition
OnTeleportedAI teleported — play VFX

🚪 Hiding & Safe Rooms

HF_HidingSpot

Place in level (closets, lockers, under beds). Player interacts → enters hiding. AI can search with configurable find chance.

PropertyDescription
SpotTypeCloset, Locker, UnderBed, Curtain, Barrel, Dumpster
HidingCameraOffset / RotationCamera position and angle when hiding
bCanPeekPlayer can peek while hiding
NoiseReductionMultiplierNoise output while hiding (0.1 = 10%)
CustomFindChanceAI probability of finding player (0.15 = 15%)

HF_BreathHoldComponent

Already on HorrorCharacter. Hold breath to become nearly silent. Drains over time. Releasing makes a gasp noise.

PropertyDescription
MaxBreathHoldTimeSeconds the player can hold breath
WarningThreshold% remaining when warning event fires

HF_SafeRoomZone

Place in level as a safe area.

PropertyDefaultDescription
bBlocksAItrueAI enemies cannot enter
bRestoresSanitytrueSanity recovers inside
bAllowsSavingtruePlayer can save here

👻 Scare Events

ActorDescription
HF_ScareTriggerBox trigger — player enters → sound + camera shake + fear spike. Configurable: FearImpact, SanityImpact, bOneShot.
HF_MannequinScareMoves toward player when not looking (SCP-173 style).
HF_ApparitionActorGhost appears, fades in/out, disappears when looked at directly.
HF_ObjectMoveScareObject slides/moves when player isn't looking.
HF_FlashbackTriggerScreen fades, shows flashback scene, fades back.
HF_RandomScareSchedulerRandomly triggers scare events at configurable intervals.
HF_HallucinationComponentSpawns hallucination actors when sanity is low.
HF_FlickerLightComponentRandom light flicker. Attach to any light component.
HF_FogManagerDynamic fog transitions based on threat level.
HF_ScriptedEventSequencerTimed sequence of events (sounds, spawns, fear spikes).
HF_PossessionComponentPlayer gets "possessed" when sanity drops below threshold.

🔑 Doors, Locks & Environment

HF_DoorActor

States: Closed → Open → Locked → Barricaded → Broken. Auto-animates rotation.

FunctionDescription
OpenDoor() / CloseDoor()Open/close with sound
LockDoor() / UnlockDoor()Lock/unlock
TryUnlockWithKey(KeyID)Check inventory for correct key
BreakDoor()Permanently open (broken state)
DamageDoor(Amount)Reduce door HP, breaks at 0

MULTIPLAYER DoorState is replicated.

Other Environment Actors

ActorDescription
HF_BarricadeActorBoards to block enemies. Each board adds HP.
HF_WindowActorBreakable windows with health. Barricadable.
HF_LightSwitchActorToggle connected lights. MULTIPLAYER
HF_GeneratorActorFuel-powered. Powers linked systems.
HF_KeyLockComponentRequires specific key from inventory.
HF_DarknessZoneTriggers sanity drain when player enters.
HF_DayNightCycleDirectional light rotation. Day/night with colors.
HF_TrapActorDamage + stun on trigger. Configurable for player/AI.

🎥 Camera System

HF_CameraManager auto-finds the CameraComponent and applies effects.

PropertyDefaultDescription
bEnableHeadBobtrueSinusoidal bob when walking/running
HeadBobIntensity0.5Bob strength. 1.5+ = nausea risk.
BaseFOV90Default field of view
SprintFOVBoost10Extra FOV when sprinting
bEnableNightVisionfalseNight vision toggle with battery

Additional: HF_DollyZoomComponent (Hitchcock vertigo), HF_FixedCameraTrigger (classic RE angles), HF_ForcedLookComponent (force camera at target), HF_PostProcessFearDriver (auto vignette/grain from fear), HF_LeanPeekComponent (lean around corners).

💀 Death & Respawn

HF_DeathManager auto-connects to HealthComponent::OnDeath.

ModeBehavior
RespawnTeleport to last checkpoint after delay, full heal
PermadeathGame over — death screen shows
LivesLimited lives, respawn until 0, then game over
DownedStateCo-op: go down, teammates revive within time limit

HF_CheckpointActor — place in level, player walks through → respawn point updated.
HF_ConsequenceManager — escalating penalties per death (enemies faster, fewer resources).
HF_InjuryComponent — persistent injuries: Leg (slow), Arm (slow interact), Bleeding (HP drain), Infection (worsens).

💾 Save System

HF_SaveManager is a Blueprint Function Library. Call from anywhere.

Save / Load Functions
HF Save Manager → Save Game (SlotName, UserIndex)
HF Save Manager → Load Game (SlotName, UserIndex)
HF Save Manager → Quick Save / Quick Load
HF Save Manager → Auto Save
HF Save Manager → Does Save Exist (SlotName)
HF Save Manager → Delete Save (SlotName)

What Gets Saved

DataSource
Player position + rotationCharacter transform
Health, MaxHealth, bIsAliveHealthComponent
Active status effects (all)HealthComponent
Sanity + Fear levelFearSanityComponent
Full inventory (items + quantities + icons + everything)InventoryComponent
Equipped itemInventoryComponent
Flashlight batteryFlashlightComponent
Lives remaining + last checkpointDeathManager
Objective progress (active + completed)ObjectiveTracker
Story flags (dialogue branching)DialogueComponent
Game phase + difficultyGameMode
Threat level, death count, play timeGameState
Solved puzzles, collected keys, triggered scaresGameState

Custom data: use SaveGame→SetModuleValue(ModuleName, Key, Value) and GetModuleValue() for your own systems.

🔊 Noise System

HF_NoiseSystemComponent on HorrorCharacter. AI hears noise through AwarenessComponent.

PropertyDefaultDescription
WalkNoise0.3Noise when walking
RunNoise0.7Noise when sprinting — running is dangerous!
CrouchNoise0.1Noise when crouching — nearly silent
NoisePropagationRadius1500How far noise travels (units)

WeaponComponent automatically calls MakeNoise(NoiseLoudness) on attack. No extra setup needed.

💬 Dialogue, Notes & Radio

ComponentDescription
HF_DialogueComponentNode-based branching dialogue with story flags. Widget auto-shows. SetStoryFlag("HasKey", true) / GetStoryFlag("MetNPC").
HF_NoteReaderComponentCollect and read notes/documents. Widget auto-shows.
HF_MonologueComponentSequential voice lines with subtitles. Play(), PlaySingle(), Stop().
HF_RadioContactComponentIncoming radio messages with static noise and speaker name.
HF_WalkieTalkieComponentRange-based walkie-talkie with signal quality (distance-based).

🔨 Crafting & Resources

ComponentDescription
HF_CraftingComponentRecipe-based. CanCraft(ID), Craft(ID), DiscoverRecipe(ID). Auto-consumes from inventory.
HF_ConsumableComponentUse items: Health, Sanity, Stamina, Battery, Antidote, Custom. Events: OnUsed.
HF_DurabilityComponentTools/weapons break after use. Repair at workbench. BreakSound on zero.
HF_FuelSystemComponentGeneric fuel/resource for generators. AddFuel(), StartConsuming(), StopConsuming().
HF_WorkbenchActorInteractable crafting station. OnWorkbenchUsed event.

🤝 Companion & NPCs

ComponentDescription
HF_CompanionComponentAI companion: Following, Waiting, Hiding, Downed, Dead. Morale + Trust system. CommandFollow(), CommandWait(), CommandHide().
HF_CompanionAIControllerAI logic for companion behavior. Detects threats, assists player.
HF_NPCScheduleComponentTime-based NPC routines. Schedule entries: start/end time, location, idle anim.

🔍 Investigation Tools (Phasmophobia-style)

Ghost-hunting equipment. Each is a separate component — add only what you need.

ComponentDescription
HF_EMFReaderComponentLevels 0–5 based on proximity. BeepSound on detection. Events: OnEMFLevelChanged, OnHighEMFDetected.
HF_ThermometerComponentTemperature drops near ghost. FreezingThreshold. Event: OnFreezingDetected.
HF_SpiritBoxComponentRadio-frequency communication. ResponseChance per scan. Event: OnGhostResponse.
HF_PhotoCaptureComponentSceneCaptureComponent2D photo evidence. MaxPhotos, ShutterSound. Event: OnPhotoCaptured.
HF_EvidenceComponentTracks collected evidence. CollectEvidence(), HasEvidence(), GetCompletionPercent().
HF_ExamineComponentPick up and 3D-rotate objects to inspect. ExamineDistance, RotationSpeed.

👥 Co-op Multiplayer

HF_CoopManager — player proximity, isolation detection, shared sanity, revive system.

PropertyDescription
CoopModeSinglePlayer, CoopSymmetric, CoopAsymmetric (1 ghost), Versus
MaxPlayersMaximum players (default 4)
bSharedSanityAll players share lowest sanity value
bReviveSystemEnable downed/revive mechanic
IsolationDistanceDistance to be "isolated" — AI prioritizes lone players

HF_SpectatorComponent — dead players spectate living teammates. NextTarget() / PrevTarget().

Replicated systems (22 properties): Health, FearSanity, Inventory, DoorState, Flashlight, GameState, CoopManager, LightSwitch, WeaponAmmo.

🖥️ UI / HUD System

Everything is automatic. Set HF_HorrorHUD as HUD Class. It auto-creates 10 widgets on BeginPlay.

WidgetVisibilityWhen Shown
HorrorHUDWidgetAlwaysHP, sanity, stamina, battery bars, crosshair, prompt
InventoryWidgetHiddenShowInventory() / ToggleInventory()
PauseMenuWidgetHiddenShowPauseMenu()
DeathScreenWidgetHiddenAuto on player death
DialogueWidgetHiddenAuto when dialogue starts
NoteReaderWidgetHiddenAuto when reading note
SubtitleWidgetHiddenDuring monologue/dialogue
CombinationLockWidgetHiddenShowCombinationLock()
EvidenceBoardWidgetHiddenShowEvidenceBoard()
LoadingScreenWidgetHiddenShowLoadingScreen()
💡 Customizing Widgets

Create Widget Blueprint → Parent Class = the widget you want to replace. Customize colors/sizes in Details. Assign in HUD Blueprint under Horror|UI|Widgets. If a slot is None, the built-in C++ default is used automatically.

🎵 Audio System

ComponentDescription
HF_AdaptiveMusicManagerLayered music responding to threat/fear level. SetFearLevel(), PlayStinger().
HF_HeartbeatComponentHeartbeat speeds up with fear or low HP. SetIntensity(), ForceSpike().
HF_BreathingAudioComponent4 states: Normal, Heavy, Panicked, Holding. Auto-transitions from stamina/fear.
HF_AmbientSoundManagerNamed audio layers. EnableLayer("Wind"), SetLayerVolume("Crickets", 0.3).
HF_AudioOcclusionHelperAuto line-trace occlusion for 3D sounds. Volume reduces through walls.
HF_StingerSystemOne-shot scare sounds with cooldown. PlayStinger("JumpScare01"), PlayRandom().
HF_ReverbZoneComponentPer-zone reverb effects (caves echo, bathrooms tile).

⚔️ Difficulty System

5 presets. Change at runtime: GameMode→SetDifficulty(NewDifficulty). All systems update immediately.

SettingStoryEasyNormalHardNightmare
Damage to Player0.25x0.5x1.0x1.5x2.5x
Enemy Speed0.7x0.85x1.0x1.15x1.3x
Enemy Detection0.5x0.75x1.0x1.3x1.75x
Sanity Drain0.3x0.6x1.0x1.5x2.0x
Resources2.0x1.5x1.0x0.7x0.4x
PermadeathNoNoNoNoYes

📦 Module System (23 Modules)

The ActiveModules bitmask in PluginSettings controls which systems run. Disabled modules auto-deactivate — zero CPU cost.

ModuleWhat Gets Disabled When OFF
CoreGameMode, GameState, EventHub, SaveManager — never turn off
HealthDamageHealthComponent, InjuryComponent
FearSanityFearSanityComponent, PostProcessFearDriver
AIEnemyHorrorAIController, all BT tasks
AwarenessDetectionAwarenessComponent (sight, hearing)
EnvironmentAtmosphereDarknessZone, FlickerLight, Fog, DayNight
InteractionInventoryInteraction, Inventory, Crafting, Grabbable, Examine
HidingStealthHidingSpot, BreathHold, Noise, LeanPeek
PuzzleProgressionPuzzleBase, CombinationLock, ObjectiveTracker
JumpScareEventsScareTrigger, MannequinScare, Apparition, ObjectMove
CameraPerspectiveCameraManager, ForcedLook, DollyZoom
NarrativeStoryDialogue, NoteReader, Monologue
MultiplayerCoopManager, Spectator
UIHUDHorrorHUDComponent, all 10 widgets
AudioAdaptiveMusic, Heartbeat, Breathing, Reverb
DeathConsequenceDeathManager, ConsequenceManager
CraftingResourcesCrafting, Consumable, Durability, Fuel
PhysicsDestructionDestructible, Throwable, Rope
TimeWorldStateDayNight, WorldPhase, Timer, Trail
ProceduralReplayabilityRandomPlacement, DifficultyMutators, MultipleEndings
PhotoEvidencePhotoCapture, EMF, SpiritBox, Thermometer
CompanionNPCCompanion, CompanionAI, WalkieTalkie
AccessibilityAccessibilityComponent
💡 Start minimal

Begin with only Core + HealthDamage + FearSanity + UIHUD enabled. Add modules as you build features. This way you see only what you need and keep performance tight.

🔧 Plugin Settings Data Asset

Your master control panel. One file controls everything.

1 Create: Content Browser → Right Click → Miscellaneous → Data Asset → pick HF_PluginSettings

2 Assign in GameMode Blueprint → Details → HorrorSettings

Controls: ActiveModules bitmask, player health/regen, fear/sanity settings, AI defaults, flashlight, inventory, hiding, save, audio, camera, accessibility, and difficulty presets. Without it, all systems use hard-coded defaults.

📡 Event Hub

UHF_EventHub is a GameInstance Subsystem. Central event bus — all systems broadcast through it.

Get Event Hub & Bind Events
Get Game Instance → Get Subsystem → HF Event Hub
Then bind to any event:
OnPlayerDeath / OnEnemyDeath
OnItemPickedUp / OnItemUsed
OnStatusEffectApplied / OnStatusEffectRemoved
OnScareTriggered / OnPlayerHealthChanged
OnGameSaved / OnGameLoaded
OnGamePhaseChanged / OnDifficultyChanged
💡 Pro tip

Use EventHub instead of direct component references. This decouples your systems — e.g., your audio manager listens to OnScareTriggered without knowing about ScareTrigger directly.

🎮 Cheat Manager

HF_CheatManager — type in the UE console (press ~):

CommandDescription
HF_GodToggle invincibility
HF_HealFullFull HP
HF_KillInstant death
HF_MaxSanity / HF_ZeroSanitySet sanity
HF_MaxFear / HF_ZeroFearSet fear
HF_InfiniteBatteryToggle infinite flashlight
HF_SetThreat [0–100]Set threat level
HF_SetPhase [0–5]Set game phase
HF_AddItem [ID] [Qty]Add item to inventory
HF_ClearInventoryRemove all items
HF_TeleportToCheckpointTeleport to last checkpoint
HF_NoClipToggle fly mode

❓ FAQ / Troubleshooting

HUD doesn't show

Make sure your GameMode has HF_HorrorHUD as HUD Class.

Camera doesn't rotate with mouse

Make sure you're using HF_HorrorPlayerController — it auto-creates Enhanced Input.

AI enemy doesn't move

You need a Nav Mesh Bounds Volume in your level. Build → Build Paths. Press P to visualize.

Systems don't respond to difficulty changes

Call GameMode→SetDifficulty() — it broadcasts through EventHub.

Module disabled but component still runs

Module checks happen in BeginPlay. Restart PIE after changing settings.

Flashlight doesn't toggle

FlashlightComponent is auto-created on HorrorCharacter. Make sure you're using HF_HorrorCharacter as Default Pawn Class.