Files
Lefteris Notas 040db37720 Add UI Overrides and Weapons Index documentation for Project Void
- Created ui-overrides.md detailing game-specific Widget Blueprint overrides, including purpose, widget index, visual styling, and accessibility requirements.
- Established weapons-index.md outlining all held weapon actors, including their components, logic, and comparisons for gameplay mechanics.
2026-05-21 22:27:57 +03:00

27 KiB
Raw Permalink Blame History

Level Design — All 11 Maps

Game: Project Void | Build Phases: 2 (splash/menu/test) + 21 (full levels) Framework Systems: 05_GM_CoreGameMode, 19_BP_DoorActor, 37_BP_Checkpoint, 67_BP_NarrativeTriggerVolume, 92_BPC_ProceduralEncounter, 93_BPC_AdaptiveEnvironmentDirector, 133_BP_RoomAudioZone


Purpose

Defines the layout, objectives, placed assets, and atmosphere for every .umap level in the game. Each level builds on the previous, introducing new systems incrementally.


Level Index

# Map File Chapter Tag Type Playtime (est.)
1 L_SplashScreen Boot 0:08
2 L_MainMenu Menu
3 L_Asylum_Entry Chapter.Entry Tutorial 5 min
4 L_Asylum_WardA Chapter.WardA Exploration 20 min
5 L_Asylum_WardB Chapter.WardB Horror Ramp 25 min
6 L_Asylum_Basement Chapter.Basement Dark Horror 20 min
7 L_Asylum_WardensOffice Chapter.WardensOffice Climax 15 min
8 L_Asylum_VoidSpace Chapter.VoidSpace Alt Reality 10 min
9 L_Ending_Truth Chapter.Ending Cinematic 5 min
10 L_Credits Chapter.Credits Credits 1 min
11 L_Test_Sandbox Dev

L1 — L_SplashScreen

Duration: ~8 seconds (skippable) | Framework: 114_WBP_SplashScreen

Setup:
  1. New Level → Empty Level
  2. Add PostProcessVolume:
     - Set to Unbound: true
     - Film → Saturation: 0.9
     - Color Grading → cool desaturated look
  3. Add WBP_SplashHorror widget to viewport on BeginPlay
  4. Level Blueprint: OnBeginPlay → PlaySplashSequence
  5. OnSequenceComplete: OpenLevel("L_MainMenu")

Placed Assets:
  - (None — this is a UI-only level with no world geometry)
  - Optional: add a CameraActor + black VoidPlane for background

Audio:
  - SS_AudioManager.PlayMusic("splash_ambient", MS_MusicBus)

L2 — L_MainMenu

Framework: 44_SS_UIManager, 51_WBP_MainMenu

Layout:
  ┌─────────────────────────────────────────────┐
  │                                              │
  │    3D Environment: Asylum Hallway            │
  │    ├─ Static Mesh: Hallway section           │
  │    ├─ Dim point lights (3)                  │
  │    ├─ ExponentialHeightFog (density 0.02)   │
  │    ├─ PostProcessVolume (horror color grade) │
  │    └─ CameraActor: Slow left-right pan      │
  │         (animate rotation via Timeline       │
  │          in Level Blueprint)                 │
  │                                              │
  │  WBP_GameMainMenu overlaid on screen        │
  │                                              │
  └─────────────────────────────────────────────┘

Placed Assets:
  ├─ StaticMesh: SM_AsylumHallway (whitebox)
  ├─ PointLight × 3 (flicker enabled via BP_LightEvent_Flicker)
  ├─ PostProcessVolume (horror color grade)
  ├─ ExponentialHeightFog
  ├─ CameraActor ("MenuCam")
  └─ PlayerStart (hidden — used for spawn, camera overrides)

Level Blueprint:
  OnBeginPlay
    ├─ SS_UIManager.ShowMenu(MainMenu)
    ├─ CameraActor → SetViewTargetWithBlend
    └─ Play menu ambient music via SS_AudioManager

Audio:
  ├─ BP_RoomAudioZone → Lobby preset
  └─ SS_AudioManager.PlayMusic("menu_theme", MS_MusicBus)

L3 — L_Asylum_Entry (Tutorial)

Duration: ~5 minutes | Player Start: Padded Cell

Layout (linear):
  ┌─────────┐    ┌─────────┐    ┌──────────────┐    ┌─────────┐
  │ PADDED  │───→│ HALLWAY │───→│ NURSE STATION│───→│ EXIT    │
  │  CELL   │    │ A (dark)│    │  (safe room) │    │  DOOR   │
  │         │    │  + vent │    │              │    │         │
  │ [Wake]  │    └────┬────┘    └──────────────┘    └────┬────┘
  └─────────┘         │                                  │
                      │ (vent path)                      ▼
                 ┌────┴────┐                      L_Asylum_WardA
                 │ STORAGE │
                 │  CLOSET │
                 └─────────┘

Systems Demonstrated:
  ├─ BPC_InteractionDetector (pick up note, open door)
  ├─ BPC_MovementStateSystem (walk, crouch through vent)
  ├─ BPC_HidingSystem (hide in storage locker)
  ├─ BPC_InventorySystem (first item: "Note")
  ├─ BPC_ObjectiveSystem (first objective: "Find a way out")
  ├─ BPC_TutorialSystem (4 tutorial prompts)
  ├─ BPC_StateManager (hiding blocks interaction, walking allowed)
  └─ BP_Checkpoint (first safe room checkpoint)

Placed Assets:
  ├─ [Cell]
  │   ├─ PlayerStart ("WakeupSpawn")
  │   ├─ BP_Door_Asylum (unlocked — exit cell)
  │   ├─ BP_Pickup_JournalPage ("Wake Up Note" — ItemData: DA_Item_JournalPage)
  │   └─ BP_NarrativeTrigger_Intro (starts opening cutscene)
  │
  ├─ [Hallway A]
  │   ├─ BP_Door_Asylum × 2 (unlocked)
  │   ├─ Vent entrance (overlap → prompt crouch)
  │   ├─ BP_Pickup_Battery × 2 (on floor)
  │   └─ [SCRIPTED] First Patient sighting
  │        └─ BP_Enemy_Patient walks past hallway window
  │           (behind glass, cannot reach player)
  │           Trigger: OnOverlap with hallway midpoint trigger
  │
  ├─ [Storage Closet]
  │   ├─ BP_HidingSpot_Locker × 3
  │   ├─ BP_Pickup_MedKit (on shelf)
  │   └─ BP_Door_Asylum (unlocked → back to hallway)
  │
  ├─ [Nurse Station]
  │   ├─ BP_Checkpoint_SafeRoom (first checkpoint)
  │   ├─ BP_Desk_Drawer × 2 (contain: battery, journal page)
  │   ├─ BP_Pickup_Flashlight (on desk — critical item)
  │   └─ WBP_NotificationToast: "Objective Updated: Find the Warden's Key"
  │
  └─ [Exit Door]
       └─ BP_Door_OmegaWing (UNLOCKED for tutorial — opens to WardA)
          In full game: requires keycard; tutorial version is pre-unlocked

Tutorial Triggers:
  ├─ BP_TutorialTrigger_Controls → "Use WASD to move, Mouse to look"
  ├─ BP_TutorialTrigger_Interact → "Press E to interact with objects"
  ├─ BP_TutorialTrigger_Crouch → "Press C to crouch through vents"
  └─ BP_TutorialTrigger_Hiding → "Press E on lockers to hide from threats"

Audio:
  ├─ BP_RoomAudioZone → SmallRoom preset (cell + hallway)
  ├─ At intro: SS_AudioManager.PlayDialogue("intro_voiceover") (whispered)
  └─ First patient: scare sting + heartbeat rise

Atmosphere:
  ├─ DA_Atmosphere_WardA_Standard (light tension)
  ├─ BP_LightEvent_Flicker (in hallway — occasional flicker)
  └─ BPC_AtmosphereStateController: Tension = Low

L4 — L_Asylum_WardA (Main Exploration)

Duration: ~20 minutes | Framework systems: All interaction, inventory, weapons

Layout (hub-and-spoke):
                    ┌──────────────┐
                    │  MAIN HALL   │ ← Patient enemies patrol
                    └──┬───┬───┬──┘
                       │   │   │
          ┌────────────┘   │   └────────────┐
          ▼                ▼                ▼
   ┌────────────┐  ┌────────────┐   ┌────────────┐
   │ TREATMENT  │  │  SECURITY  │   │  NURSES'   │
   │   ROOM     │  │   OFFICE   │   │  STATION   │
   │ (locked)   │  │  (pistol)  │   │ (keycard)  │
   └────────────┘  └────────────┘   └────────────┘

Systems Demonstrated:
  ├─ BP_DoorActor (locked/unlocked/barricaded states)
  ├─ BP_PuzzleDeviceActor (fusebox — restore power)
  ├─ BPC_ContainerInventory (desk drawers, filing cabinets)
  ├─ BP_WeaponBase → BP_Pistol_Held (first weapon)
  ├─ BPC_FirearmSystem (hitscan fire)
  ├─ BPC_AmmoComponent (9mm ammo pickup)
  ├─ BPC_RecoilSystem (pistol recoil)
  ├─ BPC_ReloadSystem (pistol reload)
  ├─ BPC_CombatFeedbackComponent (hit markers)
  ├─ BP_EnemyBase → BP_Enemy_Patient (first real enemy)
  ├─ BPC_AlertSystem (suspicious → alerted → combat)
  ├─ BPC_AIPerceptionSystem (sight + hearing detection)
  ├─ BPC_DamageReceptionSystem (enemy takes damage)
  └─ BPC_HitReactionSystem (enemy flinches when shot)

Placed Assets:
  ├─ [Main Hall]
  │   ├─ PlayerStart (from Entry transition)
  │   ├─ BP_PatrolPath_Asylum × 2 (for Patient enemies)
  │   ├─ BP_Enemy_Patient × 2 (patrolling)
  │   ├─ BP_Pickup_Ammo_9mm × 3 (scattered on floor/tables)
  │   ├─ BP_Pickup_MedKit × 2
  │   ├─ BP_Pickup_Battery × 2
  │   └─ BP_HidingSpot_Locker × 3
  │
  ├─ [Treatment Room] (locked initially)
  │   ├─ BP_Door_Asylum (locked — unlocks after fusebox puzzle)
  │   ├─ BP_Pickup_OldPhoto × 1 (on bed)
  │   └─ BP_Pickup_PatientFile × 1 (on desk)
  │
  ├─ [Security Office]
  │   ├─ BP_Pickup_Pistol (on desk — first weapon)
  │   ├─ BP_Pickup_Ammo_9mm × 2
  │   ├─ BP_Desk_Drawer × 2
  │   └─ BP_DiegeticScreen_Monitor (shows hallway camera feed)
  │
  ├─ [Nurses' Station]
  │   ├─ BP_Pickup_KeycardAlpha (on counter — key item)
  │   ├─ BP_Pickup_MedKit × 2
  │   ├─ BP_FilingCabinet × 2 (contain: patient files, journal pages)
  │   └─ BP_Checkpoint_Mirror (checkpoint)
  │
  └─ [Puzzles]
       └─ BP_Puzzle_Fusebox (in utility closet off main hall)
            ├─ Solution: Flip 3 switches in correct order (diagram nearby)
            ├─ Reward: Treatment room unlocks
            └─ BPC_TrialScenarioSystem: no timer, just puzzle

Encounter Data:
  ├─ DA_Encounter_WardA_Patrol
  │   ├─ Enemy: Patient
  │   ├─ Count: 2 (spawned at start)
  │   └─ Respawn: OFF (once killed, stays dead — check persistence)
  │
  └─ BP_EncounterSpawner_WardA (procedural)
       ├─ Spawns additional Patient if player lingers > 5 min in one spot
       └─ Difficulty: Easy

Audio:
  ├─ BP_RoomAudioZone_WardA × 4 (one per room)
  │   └─ DA_RoomAcoustic_WardA (medium reverb, echo)
  ├─ SS_AudioManager.SetFloatParameter("TensionLevel", 0.3)
  └─ Scare sting on first patient sighting

Atmosphere:
  ├─ DA_Atmosphere_WardA_Standard
  │   ├─ Lighting: Dim overheads with occasional flicker
  │   ├─ Fog: Light volumetric
  │   ├─ PostProcess: Desaturated, cool blue tint
  │   └─ Music: Low drone, no beat
  │
  ├─ Scares:
  │   ├─ DA_Scare_LockerJumpscare → locker rattles when player nearby
  │   └─ DA_Scare_WindowFace → shadow passes window

Adaptive Environment:
  ├─ BPC_DifficultyManager: starts at 1.0
  │   └─ If player dies: decrease to 0.8 (fewer enemies, more ammo)
  └─ BPC_PacingDirector: Exploration→Tension→Encounter→Recovery bands

L5 — L_Asylum_WardB (Horror Ramp)

Duration: ~25 minutes

Layout (corridor maze with central courtyard):
         ┌──────────────────────────────────┐
         │        CENTRAL COURTYARD         │
         │   (overgrown, rain effect,       │
         │    Shade first appearance)       │
         └────────┬──────────┬──────────────┘
                  │          │
    ┌─────────────┘          └─────────────┐
    ▼                                      ▼
┌──────────┐                        ┌──────────────┐
│  MORGUE   │                        │   CHAPEL     │
│ (shotgun) │                        │ (pipe organ  │
│ + void    │                        │  puzzle)     │
│  trigger  │                        │              │
└──────────┘                        └──────────────┘

Key systems introduced:
  ├─ BP_Enemy_Orderly (fast melee, flashlight-weak)
  ├─ BP_Enemy_Shade (teleporting, rare, terrifying)
  ├─ BPC_AltDeathSpaceSystem → Void shift trigger
  ├─ BP_Puzzle_PipeOrgan (music puzzle)
  ├─ BPC_MemoryDriftSystem (first hallucinations)
  ├─ BPC_FearSystem (enemy fears flashlight on Orderly)
  └─ DA_ScareEvent × 3 (mirror face, window slam, breathing)

Placed Key Assets:
  ├─ BP_Shotgun_Held (in morgue, drawer 7)
  ├─ BP_Pickup_Ammo_Shells × 5
  ├─ BP_Pickup_AdrenalineSyringe × 2
  ├─ BP_Pickup_SanityPill × 2
  ├─ BP_Pickup_KeycardBeta (behind organ puzzle)
  ├─ BP_Pickup_VoidShard × 1 (hidden in courtyard statue)
  ├─ BP_Pickup_PatientFile × 3
  └─ BP_Pickup_OldPhoto × 1

Enemies:
  ├─ BP_Enemy_Orderly × 2 (fast, patrol chapel and courtyard)
  ├─ BP_Enemy_Patient × 1 (morgue hallway)
  └─ BP_Enemy_Shade × 1 (scripted courtyard appearance + random morgue)

Void Shift Trigger (in Morgue):
  On overlap with morgue center trigger:
    ├─ BPC_AdaptiveEnvironmentDirector → TriggerRoomMutation("VoidShift")
    ├─ Effects:
    │   ├─ BPC_LightEventController → All lights flicker red
    │   ├─ BP_Door_Void → Appears/disappears
    │   ├─ BPC_MemoryDriftSystem → SetIntensity(0.5)
    │   │    └─ Walls appear to breathe, text on wall shifts
    │   └─ SS_AudioManager → Crossfade to void ambience
    ├─ Duration: 30 seconds
    └─ Exit: Find mirror in morgue, interact → shift ends

Audio:
  ├─ BP_RoomAudioZone_WardB (darker reverb, echo chamber feel)
  ├─ BP_RoomAudioZone_Courtyard (outdoor preset + rain)
  └─ Organ puzzle: each key press plays a pipe note

L6 — L_Asylum_Basement (Dark Horror)

Duration: ~20 minutes | Special Rule: No ambient light

Layout (dark maze):
    ┌─────────────────────────────────────────┐
    │         BASEMENT CORRIDORS              │
    │  (zero ambient light — flashlight only) │
    │                                         │
    │  ┌─────┐   ┌──────┐   ┌──────┐        │
    │  │BOILER│   │MORGUE│   │CREMAT│        │
    │  │ ROOM │   │  #4  │   │ORIUM │        │
    │  └──┬───┘   └──┬───┘   └──┬───┘        │
    │     │          │          │             │
    │     └──────────┼──────────┘             │
    │                │                        │
    │         ┌──────┴──────┐                 │
    │         │   ELEVATOR  │ → WardensOffice │
    │         │  (requires  │                 │
    │         │   WardKey)  │                 │
    │         └─────────────┘                 │
    └─────────────────────────────────────────┘

Key systems demonstrated:
  ├─ BPC_StressSystem (max stress from constant darkness)
  ├─ BPC_EndingAccumulator (morgue puzzle reveals ending-lore)
  ├─ BPC_ScareEventSystem (4+ jump scares)
  ├─ BPC_AdaptiveEnvironmentDirector (maze shifts rooms)
  ├─ BPC_AIMemorySystem (Shade remembers last known location)
  └─ BPC_PersistentCorpseSystem (enemy corpses remain)

Placed Assets:
  ├─ BP_Pickup_Key_Wardens (in morgue drawer #4 — behind puzzle)
  ├─ BP_Pickup_Battery × 4 (critical — scattered in dark)
  ├─ BP_Pickup_Ammo_9mm × 3
  ├─ BP_Pickup_Ammo_Shells × 3
  ├─ BP_Pickup_MedKit × 2
  ├─ BP_Pickup_AdrenalineSyringe × 1
  ├─ BP_Pickup_SanityPill × 1
  ├─ BP_Pickup_VoidShard × 1 (hidden in crematorium)
  └─ BP_Pickup_OldPhoto × 1

Puzzle: BP_Puzzle_MorgueDrawers
  ├─ 12 morgue drawers in cold storage room
  ├─ Solution: Open drawers in order matching patient death dates
  │   └─ Clue found in patient files from WardA + WardB
  ├─ Wrong drawer: Shade appears behind player briefly
  └─ Correct sequence: Drawer #4 opens → contains Warden's Key

Enemies:
  └─ BP_Enemy_Shade × 1 (persistent pursuer)
       ├─ Teleports between dark corners
       ├─ Flashlight delays its approach (slows to 50% speed)
       ├─ Cannot be killed — only avoided
       └─ If caught → instant death → Void Space

Stress Mechanics:
  ├─ Player stress rises constantly (+2/sec) in total darkness
  ├─ Using flashlight: stress rise slows to +0.5/sec
  ├─ Battery depletes: stress rise doubles
  ├─ At Breaking (75+): screen distortion, false enemy sounds
  └─ At Catatonic (100): player collapses, Shade appears

Audio:
  ├─ BP_RoomAudioZone_Basement (heavy reverb, dripping water, distant screams)
  ├─ SS_AudioManager.SetFloatParameter("HeartRate", player heart rate)
  └─ 4 scare sting cues placed at specific trigger volumes

Atmosphere:
  ├─ NO PostProcess volume "auto-exposure" — pure darkness without flashlight
  ├─ BP_LightEvent_Flicker × 6 (throughout basement — random flickers)
  └─ DA_Atmosphere_Basement_Dark → maximum horror preset

L7 — L_Asylum_WardensOffice (Climax)

Duration: ~15 minutes

Layout (single large room + connecting office):
  ┌───────────────────────────────────────┐
  │         WARDEN'S OFFICE               │
  │  ├─ Large desk (Warden's Journal)     │
  │  ├─ Bookshelves (cover positions)     │
  │  ├─ Window overlooking Void (reality  │
  │  │   breaking through glass)          │
  │  │                                    │
  │  ├─ [DIALOGUE CHOICE TRIGGER]        │
  │  │   └─ Entity speaks through mirror  │
  │  │      3 choices:                    │
  │  │        A) Resist → fight           │
  │  │        B) Accept → merge           │
  │  │        C) Sacrifice → seal void    │
  │  │                                    │
  │  └─ Ending Accumulator evaluates      │
  │       └─ TriggerEnding(result)        │
  └───────────────────────────────────────┘

Key systems:
  ├─ BPC_DialogueChoiceSystem (3-way choice)
  ├─ BPC_BranchingConsequenceSystem (choice → ending path)
  ├─ BPC_EndingAccumulator (evaluate all conditions)
  └─ BPC_CutsceneBridge (play ending cinematic)

Placed Assets:
  ├─ BP_Pickup_JournalPage ("Warden's Confession") on desk
  ├─ BP_Pickup_VoidShard × 1 (final — on bookshelf)
  ├─ BP_DiegeticScreen_Monitor (shows player's own reflection → void)
  └─ BP_NarrativeTrigger_Ending (triggers final confrontation)

L8 — L_Asylum_VoidSpace (Alt Reality)

Duration: ~10 minutes | Access: Death by Shade OR void portal in Basement

Layout (non-Euclidean, floating geometry):
  
  A series of disconnected rooms floating in black void.
  Corridors shift — walking forward may loop back.
  
  ┌──────┐     ┌──────┐     ┌──────┐
  │MEMORY│ ──→ │MEMORY│ ──→ │MEMORY│
  │SHRINE│     │SHRINE│     │SHRINE│
  │  1   │     │  2   │     │  3   │
  └──────┘     └──────┘     └──────┘
       │           │           │
       └───────────┼───────────┘
                   │
              ┌────┴────┐
              │  EXIT   │ → Return to asylum
              │ PORTAL  │
              └─────────┘

Systems:
  ├─ BPC_AltDeathSpaceSystem (enter/exit void)
  ├─ BPC_TrialScenarioSystem (timed escape — 5 minutes)
  └─ BPC_AdaptiveEnvironmentDirector (dynamic room shifting)

Placed Assets:
  ├─ BP_PuzzleDeviceActor × 3 (memory shrines — interact to "remember")
  ├─ BP_Pickup_VoidShard × 1 (if not already collected)
  ├─ BP_Enemy_Shade × 1 (pursues in void — cannot be killed)
  └─ BP_Checkpoint_VoidThreshold (one-time checkpoint)

Shrine Solution:
  ├─ Shrine 1: Player's reflection shows a key moment from earlier
  ├─ Shrine 2: Voice whispers a memory fragment
  ├─ Shrine 3: Touch the light → all shrines activate → exit opens
  └─ Timer: 5 minutes. If exceeded → Shade catches → respawn at shrine 1

L9 — L_Ending_Truth (Cinematic)

Duration: ~5 minutes | Access: Auto-transition from WardensOffice

Setup:
  ├─ Empty dark room with single point of light
  ├─ Camera sequence (Sequencer):
  │   ├─ Ending A (Resist): Player runs through collapsing asylum halls
  │   │   └─ Bursts through front doors → daylight → freedom
  │   ├─ Ending B (Merge): Entity possesses player
  │   │   └─ Asylum calms. Patient enemies bow. Player's eyes glow.
  │   └─ Ending C (Sacrifice): Player walks into void
  │       └─ Light fades to black. Credits music begins.
  │
  └─ On cutscene end: TransitionToChapter(Credits)

L10 — L_Credits

Duration: ~1-2 minutes or skip

Setup:
  ├─ WBP_CreditsScreen with scroll animation
  ├─ Background: black with void particles
  ├─ Audio: Credits music (ending-specific variant)
  │
  ├─ Post-credit: WBP_DeathScreen overlay
  │   └─ Shows:
  │       ├─ "Ending Achieved: [Name]"
  │       ├─ Total Deaths: X
  │       ├─ Total Playtime: HH:MM:SS
  │       ├─ Collectibles: Y/15
  │       ├─ Enemies Defeated: Z
  │       └─ Playstyle: Aggressive/Stealthy/Explorer/Balanced
  │
  └─ Buttons:
      ├─ "Return to Main Menu" → L_MainMenu
      └─ "New Game+" → Set NG+ flag → restart with harder difficulty

L11 — L_Test_Sandbox (Development)

Purpose: Quick testing of all systems. NOT included in shipping build.

Layout (open test area):
  ┌──────────────────────────────────────────┐
  │  SPAWN ZONE                              │
  │  ├─ PlayerStart                          │
  │  ├─ BP_Checkpoint_SafeRoom (reset)       │
  │  └─ WBP_DebugMenu accessible            │
  │                                          │
  │  ITEM ZONE                               │
  │  ├─ All 18 BP_Pickup_* actors            │
  │  └─ Labelled with floating text           │
  │                                          │
  │  WEAPON ZONE                             │
  │  ├─ All 4 held weapon actors on racks    │
  │  └─ Infinite ammo crates                 │
  │                                          │
  │  ENEMY ZONE                              │
  │  ├─ BP_Enemy_Patient (idle)              │
  │  ├─ BP_Enemy_Orderly (idle)              │
  │  ├─ BP_Enemy_Shade (idle)               │
  │  └─ Buttons: "Alert All", "Reset All"    │
  │                                          │
  │  DOOR ZONE                               │
  │  ├─ All 4 door types                     │
  │  └─ Keys placed nearby                   │
  │                                          │
  │  CONTAINER ZONE                          │
  │  ├─ BP_Chest_Supply, Desk_Drawer,        │
  │  │   FilingCabinet                        │
  │  └─ Pre-populated with test items        │
  │                                          │
  │  PUZZLE ZONE                             │
  │  ├─ Fusebox, Pipe Organ, Morgue Drawers  │
  │  └─ Solution hints on wall               │
  │                                          │
  │  ATMOSPHERE ZONE                         │
  │  ├─ Room audio zone test trigger         │
  │  ├─ Light event test panel               │
  │  ├─ Scare event buttons                  │
  │  └─ Stress manipulation slider           │
  │                                          │
  │  UI ZONE                                 │
  │  ├─ All WBP_ widgets testable            │
  │  └─ Notification toast test panel        │
  └──────────────────────────────────────────┘

Setup:
  ├─ In World Settings: GameMode = GM_HorrorGameMode
  ├─ Auto-enable BPC_DevCheatManager on spawn
  ├─ WBP_DebugMenu toggled via F1 key
  └─ Exclude from shipping build via "Never Cook" directory flag

Level Creation Checklist (per level)

For each level, ensure:

  • World Settings → GameMode Override = GM_HorrorGameMode
  • PlayerStart actor placed (at least one)
  • Lighting: DirectionalLight + SkyLight + PostProcessVolume (horror grade)
  • Audio: At least one BP_RoomAudioZone covering the playable area
  • Navigation Mesh: Build → Build Paths (NavMeshBoundsVolume covering all walkable areas)
  • Collision: All walls/floors have collision; doors have interaction collision
  • Loading: Level name registered in GM_HorrorGameMode.HorrorLevelNames map
  • Save Support: All I_Persistable actors present (doors, pickups, enemies)
  • Checkpoint: At least one BP_Checkpoint placed
  • Level Blueprint → OnBeginPlay:
    • Set chapter tag on GS_HorrorGameState
    • Load atmosphere profile via BPC_AtmosphereStateController
    • Start music via SS_AudioManager
    • Fire BPC_NarrativeStateSystem.OnChapterStart

Notes for Expansion

  • Each level should have a paper map (diegetic) that player can find — shows layout
  • Consider streaming sub-levels for large areas (basement corridors) to manage memory
  • Add environmental storytelling: blood trails, scratch marks, patient drawings on walls
  • The void space could be procedurally generated using BPC_AdaptiveEnvironmentDirector
  • Add New Game+ variations: enemy placements shift, doors start locked differently
  • Test sandbox should include a stress/sanity debug overlay (F1 toggle)
  • Each level exit door should glow faintly (diegetic guidance, not quest marker)
  • Use data layers for adaptive environment: rooms that shift should be in a separate data layer

Level Design for Project Void. See GAMEINDEX.md for full game structure. See scene-flow.md for transition wiring.