# 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.*