- 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.
27 KiB
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_RoomAudioZonecovering 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.HorrorLevelNamesmap - Save Support: All
I_Persistableactors present (doors, pickups, enemies) - Checkpoint: At least one
BP_Checkpointplaced - Level Blueprint → OnBeginPlay:
- Set chapter tag on
GS_HorrorGameState - Load atmosphere profile via
BPC_AtmosphereStateController - Start music via
SS_AudioManager - Fire
BPC_NarrativeStateSystem.OnChapterStart
- Set chapter tag on
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.