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.
This commit is contained in:
642
docs/game/levels.md
Normal file
642
docs/game/levels.md
Normal file
@@ -0,0 +1,642 @@
|
||||
# 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.*
|
||||
Reference in New Issue
Block a user