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:
Lefteris Notas
2026-05-21 22:27:57 +03:00
parent c515920eea
commit 040db37720
17 changed files with 6795 additions and 43 deletions

View File

@@ -0,0 +1,188 @@
# Game Core — GI_HorrorGame (Game Instance)
**Game:** Project Void | **Asset:** `GI_HorrorGame` | **Parent:** `GI_GameFramework`
**Asset Path:** `Content/Game/Core/GI_HorrorGame.uasset`
**Build Phase:** 1 | **Framework System:** 04_GI_GameFramework
---
## Purpose
The game-specific Game Instance. Inherits all kernel functionality from `GI_GameFramework` (game phase state machine, session flags, save slot management, service resolution, platform init). This BP child adds game-specific bootstrap configuration and horror-game startup sequences.
---
## Dependencies
| System | Type | Why |
|--------|------|-----|
| `GI_GameFramework` (04) | Parent class | Inherits all kernel systems |
| `GM_HorrorGameMode` | Referenced | Default game mode for all levels |
| `DA_GameTagRegistry` (01) | Configured | Tag registry assigned in Class Defaults |
| All `SS_` Subsystems | Owned | Initialized by parent on boot |
| `DA_AudioSettings_Horror` (134) | Configured | Audio mix defaults for horror game |
---
## Creation Steps
### Step 1 — Create Blueprint Child
```
Content Browser → Game/Core/
Right-click → Blueprint Class
Parent Class: GI_GameFramework (from Framework/Core/)
Name: GI_HorrorGame
```
### Step 2 — Configure Class Defaults
Open `GI_HorrorGame` → Class Defaults:
| Property | Value | Notes |
|----------|-------|-------|
| `TagRegistry` | `DA_GameTagRegistry` (Framework/Core/) | Critical — validates all gameplay tags on boot |
| `ActiveSaveSlotIndex` | `0` | Default save slot |
| `PlatformType` | `Generic` | Change to Steam/PlayStation/Xbox per build |
| `bFirstLaunch` | `true` | Triggers intro flow on first-ever boot |
### Step 3 — Add Game-Specific Variables
| Variable | Type | Default | Category | Purpose |
|----------|------|---------|----------|---------|
| `bIntroPlayed` | Boolean | `false` | `Game` | Tracks if opening cutscene has been played |
| `TotalDeaths` | Integer | `0` | `Game` | Global death counter (persists across runs) |
| `FearIntensityMultiplier` | Float | `1.0` | `Game` | Global scalar for scare/fear intensity |
| `ActiveEndingTag` | GameplayTag | — | `Game` | Tracks which ending path player is on |
### Step 4 — Wire Event Init (Game-Specific Override)
```
[Event Init] (inherited from GI_GameFramework — call parent first)
├─ Parent: Event Init
├─ [Bootstrap Game Services]
│ │
│ ├─ GetSubsystem(SS_AudioManager) → Initialize (DA_AudioSettings_Horror)
│ │ └─ Sets horror-specific mix bus levels (quieter music, louder SFX)
│ │
│ ├─ GetSubsystem(SS_SettingsSystem) → Apply Settings
│ │ └─ Loads persisted audio/video/control settings
│ │
│ └─ GetSubsystem(SS_EnhancedInputManager) → Initialize (DA_InputMapping_Horror_PC)
│ └─ Load horror-specific keybindings
├─ [Check First Launch]
│ │
│ ├─ bFirstLaunch? → Branch
│ │ ├─ True:
│ │ │ ├─ SetSessionFlag("HasSeenIntro", false)
│ │ │ └─ (Optional) Reset achievement progress for fresh start
│ │ └─ False:
│ │ └─ SetSessionFlag("HasSeenIntro", true)
│ │
│ └─ Set bFirstLaunch = false (won't trigger again this session)
├─ [Route to First Scene]
│ │
│ ├─ Set Game Phase → Loading
│ ├─ OpenLevel → "L_SplashScreen"
│ └─ (Splash auto-advances to L_MainMenu after sequence)
└─ Broadcast OnFrameworkReady
```
### Step 5 — Add Game-Specific Functions
#### `SetFearIntensity(Float Multiplier)`
```
Input: Multiplier (Float)
Output: none
Flow:
├─ FearIntensityMultiplier = Multiplier
├─ GetSubsystem(SS_AudioManager) → SetFloatParameter("FearIntensity", Multiplier)
└─ Optionally notify BPC_PacingDirector of new intensity
```
#### `GetEndingAccumulator()` → BPC_EndingAccumulator
```
Output: BPC_EndingAccumulator Reference
Flow:
├─ Get Player Pawn → GetComponentByClass(BPC_EndingAccumulator)
└─ Return reference (null if player isn't spawned yet — only valid InGame)
```
#### `QuitToDesktop()`
```
Flow:
├─ GetSubsystem(SS_SaveManager) → QuickSave (if in-game)
├─ SetSessionFlag("CleanQuit", true)
└─ UKismetSystemLibrary.QuitGame(GetWorld(), GetPlayerController(), Quit)
```
---
## Key Differences from `GI_GameFramework` Parent
| Aspect | GI_GameFramework (Framework) | GI_HorrorGame (Game) |
|--------|---------------------------|---------------------|
| Tag Registry | Not set (abstract) | `DA_GameTagRegistry` assigned |
| Audio Settings | None | `DA_AudioSettings_Horror` |
| Input Profile | None | `DA_InputMapping_Horror_PC` |
| First Route | Generic | `L_SplashScreen``L_MainMenu` |
| Game Variables | Session flags only | `TotalDeaths`, `FearIntensityMultiplier`, `ActiveEndingTag` |
---
## Blueprint Wiring Checklist
- [ ] Create BP child of `GI_GameFramework` named `GI_HorrorGame` in `Game/Core/`
- [ ] Set `TagRegistry``DA_GameTagRegistry` in Class Defaults
- [ ] Add 4 game-specific variables (bIntroPlayed, TotalDeaths, FearIntensityMultiplier, ActiveEndingTag)
- [ ] Override `Event Init` → call Parent → bootstrap audio, settings, input → route to splash
- [ ] Add `SetFearIntensity` function
- [ ] Add `GetEndingAccumulator` function
- [ ] Add `QuitToDesktop` function
- [ ] Set `GI_HorrorGame` as Default Game Instance in Project Settings → Maps & Modes
---
## Project Settings Configuration
```
Edit → Project Settings → Maps & Modes
Default Game Instance: GI_HorrorGame (NOT GI_GameFramework)
Edit → Project Settings → Gameplay Tags
Add all 11 DT_Tags_*.csv Data Tables to Gameplay Tag Table List
(See project-setup-migration.md section 2.2)
```
---
## Communications With
| Target System | Method | Why |
|--------------|--------|-----|
| `GM_HorrorGameMode` | Direct (spawned by engine) | Game rules |
| `SS_AudioManager` | `GetSubsystem` | Audio bus config on boot |
| `SS_SettingsSystem` | `GetSubsystem` | Load/apply settings on boot |
| `SS_EnhancedInputManager` | `GetSubsystem` | Load input profile on boot |
| `SS_SaveManager` | `GetSubsystem` | Auto-save on quit |
| `BPC_PacingDirector` | Dispatcher | Fear intensity changes |
| `BPC_EndingAccumulator` | Interface | Ending path tracking |
---
## Notes for Expansion
- To add **Steam integration**: set `PlatformType = Steam`, add Steam subsystem init in `Event Init`
- To add **Epic Online Services**: create a `SS_OnlineManager` subsystem, init in `Event Init`
- To support **DLC chapters**: add a `LoadedChapters` map variable, query on level load
- The `FearIntensityMultiplier` could drive a **global difficulty scaler** accessible to all systems
- Consider adding an `OnGameBootComplete` dispatcher for systems that need to wait for full init
---
*GI_HorrorGame — Core game instance for Project Void. See [GAMEINDEX.md](GAMEINDEX.md) for full game structure. See [04_GI_GameFramework.md](../blueprints/01-core/04_GI_GameFramework.md) for parent class spec.*