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

643 lines
27 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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](GAMEINDEX.md) for full game structure. See [scene-flow.md](scene-flow.md) for transition wiring.*