Files
UE5-Modular-Game-Framework/docs/game/polish-loading-credits.md
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

13 KiB

Polish — Tutorials, Loading, Credits, Debug, Analytics

Game: Project Void | Build Phases: 19, 20 Framework Systems: 106_BPC_AnalyticsTracker, 107_BPC_DevCheatManager, 108_BPC_ErrorHandler, 109_BPC_FPSCounter, 110_BPC_LoadingScreen, 111_BPC_TutorialSystem, 112_WBP_CreditsScreen, 113_WBP_DebugMenu, 114_WBP_SplashScreen


Purpose

Covers all polish systems: tutorial triggers, loading screen, credits, debug tools, analytics, and error handling. These are finalized after core gameplay is working.


Tutorial System (BPC_TutorialSystem)

Tutorial Triggers

Trigger Actor Level Condition Teaches
BP_TutorialTrigger_Controls L_Asylum_Entry OnBeginPlay Move WASD + Mouse Look
BP_TutorialTrigger_Interact L_Asylum_Entry OnOverlap with first item Press E to interact
BP_TutorialTrigger_Crouch L_Asylum_Entry OnOverlap near vent Press C to crouch through vents
BP_TutorialTrigger_Hiding L_Asylum_Entry OnOverlap near locker Press E on hiding spots
BP_TutorialTrigger_Combat L_Asylum_WardA OnEquip first weapon Fire/Reload/Aim basics
BP_TutorialTrigger_Battery L_Asylum_Basement OnOverlap in first dark room Battery management for flashlight

Tutorial Prompt Behavior

BP_TutorialTrigger_* → Event BeginOverlap (Player)
   │
   ├─ [Already Shown?]
   │    └─ BPC_TutorialSystem.HasSeenTutorial(TutorialTag)? → Return
   │
   ├─ [Show Tutorial]
   │    ├─ WBP_NotificationToast (special tutorial variant):
   │    │    ├─ Large prompt text (e.g., "Press E to interact with objects")
   │    │    ├─ Key icon (E key or gamepad X/Square icon)
   │    │    ├─ Timer: 10 seconds or until condition met
   │    │    └─ Position: Top-center (not to block crosshair)
   │    │
   │    ├─ [Pause hint]
   │    │    ├─ Dim surrounding screen slightly
   │    │    └─ Highlight the interaction target (glow outline)
   │    │
   │    └─ BPC_TutorialSystem.MarkTutorialSeen(TutorialTag)
   │         └─ Won't show again this save slot
   │
   └─ [Dismiss Conditions]
        ├─ Player performs the action → auto-dismiss
        ├─ Player moves away from trigger → dismiss after 2s
        └─ Timer expires (10s) → auto-dismiss

Loading Screen (BPC_LoadingScreen + WBP_LoadingHorror)

Full Loading Flow

GI_GameFramework.SetGamePhase(Loading)
   │
   ├─ [Pre-Load]
   │    ├─ BPC_LoadingScreen.Activate()
   │    ├─ WBP_LoadingHorror.AddToViewport(ZOrder = 100 — above everything)
   │    ├─ SS_AudioManager.PlaySFX("loading_start")
   │    └─ Set background image based on destination chapter
   │
   ├─ [During Load]
   │    ├─ Tick → GetAsyncLoadPercentage() → UpdateProgressBar
   │    │    └─ Smooth interpolation (lerp to actual value)
   │    ├─ Tip rotation: every 8 seconds, show random tip
   │    ├─ Chapter title: "Ward A — Patient Wing"
   │    └─ Audio: loading ambient loop plays
   │
   └─ [On Level Loaded]
        ├─ Progress bar completes (snap to 100%)
        ├─ Brief pause (0.5s) so player sees complete bar
        ├─ SS_AudioManager.StopSFX("loading_start")
        ├─ WBP_LoadingHorror.RemoveFromParent()
        ├─ BPC_LoadingScreen.Deactivate()
        └─ GI_GameFramework.SetGamePhase(InGame)

Loading Tips (DT_LoadingTips)

Category Tip
Stealth "Darkness is your ally. Enemies can't see what they can't hear."
Resource "Batteries are scarce. Use the flashlight sparingly."
Exploration "Check every drawer. The asylum hides its secrets well."
Survival "Your sanity is as important as your health. Find pills."
Combat "Some enemies fear the light. Others are drawn to it."
Lore "The void watches. It remembers. It waits."
Puzzle "Not all doors need a key. Some need a different opening."
Movement "Running attracts attention. Sometimes walking is survival."
Inventory "Key items cannot be lost. They persist through death."
Atmosphere "Listen. The asylum speaks to those who pay attention."

Credits Screen (WBP_CreditsScreen)

Credits Layout

┌──────────────────────────────────────────────┐
│                                              │
│              PROJECT VOID                    │
│         ═══════════════════════              │
│                                              │
│    A Psychological Horror Experience         │
│                                              │
│    ──────── DEVELOPMENT ────────             │
│    Game Director:          [Name]            │
│    Lead Programmer:        [Name]            │
│    Systems Designer:       [Name]            │
│    Level Designer:         [Name]            │
│    Narrative Designer:     [Name]            │
│    Audio Designer:         [Name]            │
│    Environment Artist:     [Name]            │
│    Character Artist:       [Name]            │
│    UI/UX Designer:         [Name]            │
│    QA Lead:               [Name]            │
│                                              │
│    ──────── SPECIAL THANKS ────────          │
│    UE5 Modular Game Framework Team           │
│    GASP Animation System                     │
│    ...                                       │
│                                              │
│    ──────── POWERED BY ────────              │
│    Unreal Engine 5                           │
│                                              │
│    © 2026 [Studio Name]. All rights reserved.│
│    "In the void, memory is currency."        │
│                                              │
│    [SKIP — ESC]     [RETURN TO MENU — ENTER] │
└──────────────────────────────────────────────┘

Credits Flow

L_Credits.OnBeginPlay
   │
   ├─ WBP_CreditsScreen.AddToViewport()
   ├─ Start scroll animation (Timeline: verticalTranslation, duration 45s)
   ├─ SS_AudioManager.PlayMusic("credits_theme", MS_MusicBus)
   │
   ├─ [Skip]
   │    └─ IA_SkipCutscene (Hold 1.5s) → jump to end
   │
   ├─ [On Complete]
   │    ├─ Show post-credit stats (WBP_DeathScreen variant)
   │    ├─ Achievement unlocks fire
   │    └─ Buttons: "Main Menu" / "New Game+"
   │
   └─ On Return to Menu → OpenLevel("L_MainMenu")

Debug Tools (BPC_DevCheatManager + WBP_DebugMenu)

Dev Cheats (BPC_DevCheatManager)

Cheat Key Effect
God Mode F1 → Toggle Infinite health, no damage
Noclip F2 Fly through walls
Give Item F3 → type item tag Adds any item to inventory
Teleport F4 → click on level Teleport to cursor location
Toggle AI F5 Freeze/unfreeze all AI
Toggle HUD F6 Show/hide HUD for screenshots
Spawn Enemy F7 → select type Spawn test enemy at cursor
Stress Slider F8 → mouse wheel Adjust player stress 0-100
Skip Chapter F9 → select chapter Jump to any level
Reload Level F10 Quick level restart
Toggle Debug F11 Show AI paths, perception, stress values

WBP_DebugMenu (toggle via F11 or console command)

Debug Menu Tabs:
  ├─ [State Viewer]
  │    ├─ Current Game Phase
  │    ├─ Player Health / Stamina / Stress / Sanity
  │    ├─ Active chapter
  │    ├─ Current BPC_StateManager state
  │    ├─ All narrative flags (map view)
  │    └─ Active objectives
  │
  ├─ [Inventory]
  │    ├─ Grid view of all items
  │    ├─ Add/Remove buttons
  │    └─ Weight/space display
  │
  ├─ [AI]
  │    ├─ List all active enemies + states
  │    ├─ Toggle AI perception debug (cones + hearing radius)
  │    ├─ Toggle patrol path display
  │    └─ Force alert/calm all enemies
  │
  ├─ [Performance]
  │    ├─ FPS counter (min/max/avg)
  │    ├─ Memory usage
  │    ├─ Draw calls
  │    └─ Actor count
  │
  ├─ [Audio]
  │    ├─ Bus volume sliders (live)
  │    ├─ Active room zone
  │    └─ Playing sounds list
  │
  └─ [Cheats] (if enabled)
       ├─ God Mode, Noclip toggles
       ├─ Give Item dropdown
       ├─ Teleport to cursor
       └─ Skip Chapter dropdown

Error Handler (BPC_ErrorHandler)

BPC_ErrorHandler — catches and handles errors gracefully

OnError(ErrorMessage, ErrorSeverity)
   │
   ├─ Severity == Warning:
   │    ├─ FL_GameUtilities.LogWarning(ErrorMessage)
   │    └─ WBP_NotificationToast.Show("Warning: " + ErrorMessage, 5s)
   │
   ├─ Severity == Error:
   │    ├─ FL_GameUtilities.LogError(ErrorMessage)
   │    ├─ WBP_NotificationToast.Show("Error: " + ErrorMessage, 10s)
   │    └─ (Continue execution if recoverable)
   │
   └─ Severity == Critical:
        ├─ FL_GameUtilities.LogCritical(ErrorMessage)
        ├─ BPC_AnalyticsTracker.LogCrash(ErrorMessage, StackTrace)
        ├─ SS_SaveManager.QuickSave("CrashRecovery")
        ├─ Show error screen:
        │    ├─ "A critical error occurred."
        │    ├─ "Your progress has been saved."
        │    ├─ [Return to Main Menu]
        │    └─ [Send Error Report] (if analytics enabled)
        └─ OpenLevel("L_MainMenu") (safe fallback)

FPS Counter (BPC_FPSCounter) — Dev Only

BPC_FPSCounter — Simple FPS display in top-right corner

Config:
  ├─ bShowFPS: Bool (default: false — enable via debug menu or -showfps launch arg)
  ├─ bShowMinMax: Bool
  ├─ UpdateInterval: Float (0.5s)

Display Format:
  "FPS: 60 | Min: 42 | Max: 120"
  
Colors:
  ├─ FPS >= 60: Green
  ├─ FPS 30-59: Yellow
  └─ FPS < 30: Red

Launch Arg: -ShowFPS → auto-enables on boot

Analytics Tracker (BPC_AnalyticsTracker) — Opt-in

BPC_AnalyticsTracker tracks session metrics:

Session Events:
  ├─ GameStart (timestamp, platform, settings)
  ├─ GameEnd (ending, playtime, deaths, timestamp)
  ├─ ChapterEnter (chapter tag, timestamp)
  ├─ ChapterComplete (chapter tag, time spent, deaths during chapter)
  ├─ PlayerDeath (cause, location, chapter, time in chapter)
  ├─ ItemPickup (item tag, location, chapter)
  ├─ WeaponUsed (weapon tag, shots fired, hits, misses)
  ├─ PuzzleSolved (puzzle tag, time spent, hints used)
  ├─ ScareExperienced (scare tag, location)
  ├─ MenuOpen (menu type, duration)
  ├─ Crash (error message, stack trace, last 10 events)
  └─ SettingsChanged (setting name, old value, new value)

Privacy:
  ├─ All analytics are OPT-IN (prompt on first launch)
  ├─ No PII collected (no usernames, IP addresses)
  ├─ Data stored locally, sent only if player enables
  └─ SS_SettingsSystem stores analytics consent

Blueprint Wiring Checklist

Tutorials

  • Create 6 BP_TutorialTrigger_* actors
  • Wire BPC_TutorialSystem with seen-tutorial tracking
  • Create tutorial variant of WBP_NotificationToast
  • Place triggers at appropriate tutorial moments in levels

Loading

  • Wire BPC_LoadingScreen to game phase changes (InGame ↔ Loading)
  • Create DT_LoadingTips Data Table with 10 tips
  • Wire tip rotation + progress bar + background selection

Credits

  • Create L_Credits level with dark background
  • Create scroll animation for credits text
  • Wire post-credit stats display + achievement checks

Debug

  • Create BPC_DevCheatManager with all cheat functions
  • Create WBP_DebugMenu with 5 tabs
  • Bind cheats to F1-F11 keys (dev only, exclude from shipping)
  • Add BPC_FPSCounter with -ShowFPS launch arg

Error Handling

  • Wire BPC_ErrorHandler to catch critical errors
  • Create error screen widget with Return to Menu button
  • Wire crash auto-save before error screen

Analytics

  • Wire BPC_AnalyticsTracker to key events (death, chapter, item, scare)
  • Add analytics consent prompt on first launch
  • Wire opt-in/opt-out toggle in Settings

Notes for Expansion

  • Add achievement integration: all polish systems should fire achievement checks
  • Add speedrun timer: optional HUD element showing real-time + chapter splits
  • Add photo mode: pause game, free camera, filters, hide HUD
  • Add benchmarking tool: automated walkthrough to measure performance
  • Add controller remapping UI: rebind every action via SS_EnhancedInputManager.RebindKey()
  • Add multi-language support: loading tips, tutorial text, credits in localized string tables
  • All debug tools and cheats must be excluded from shipping builds (use #if !UE_BUILD_SHIPPING)

Polish Systems for Project Void. See GAMEINDEX.md for full game structure. See 13-polish/ for framework polish system specs.