Files
UE5-Modular-Game-Framework/docs/game/items-index.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

14 KiB
Raw Blame History

Items Index — All Game Items & Pickups

Game: Project Void | Build Phases: 5, 6 Framework Systems: 07_DA_ItemData, 25_BP_ItemPickup, 31_BPC_InventorySystem


Purpose

Master index of all game items, their Data Assets, and pickup actors. The first 4 items (flashlight, pistol, medkit, keycard) have full build walkthroughs in their own docs. This document covers the remaining 9 items and provides quick-reference for all 13 + their 18 pickups.


Complete Item Catalog

# Item Type Stack Weight Found In Has Full Build Doc
1 Flashlight Tool 1 1.5 Entry, WardA item-flashlight.md
2 Pistol (9mm) Weapon 1 3.0 WardA (Security Office) item-pistol.md
3 MedKit Consumable 5 1.0 All levels item-medkit.md
4 Keycard Omega KeyItem 1 0.1 WardA (Nurses Station) item-keycard.md
5 9mm Ammo Ammo 999 0.05 WardA, WardB, Basement (below)
6 Shotgun Weapon 1 6.0 WardB (Morgue) (below)
7 Shotgun Shells Ammo 999 0.03 WardB, Basement (below)
8 Battery Consumable 10 0.3 All dark areas (below)
9 Adrenaline Syringe Consumable 3 0.5 WardB, Basement (below)
10 Sanity Pill Consumable 5 0.2 WardB, Basement, WardensOffice (below)
11 Crowbar Tool 1 4.0 Basement (Boiler Room) (below)
12 Keycard Alpha KeyItem 1 0.1 WardA (Nurses Station) (same pattern as #4)
13 Keycard Beta KeyItem 1 0.1 WardB (Chapel — behind organ puzzle) (same pattern as #4)
14 Warden's Key KeyItem 1 0.1 Basement (Morgue Drawer #4) (same pattern as #4)
15 Journal Page Document 1 0.05 All levels (below)
16 Patient File Document 1 0.1 WardA, WardB, Basement (below)
17 Old Photo Collectible 1 0.05 WardA, WardB, Basement (below)
18 Void Shard Collectible 1 0.8 WardB (1), Basement (1), WardensOffice (1) (below)

Items with Quick Build Notes

5. DA_Item_Ammo_9mm / BP_Pickup_Ammo_9mm

Item Type: Ammo | Ammo Type Tag: Framework.Item.Ammo.Pistol9mm

Field Value
Display Name "9mm Rounds"
World Mesh SM_AmmoBox_9mm (small cardboard box)
AmmoData.PerPickupCount 15 (15 rounds per pickup)

Pickup Wiring (differs from standard pickups):

Event Interact → Interactor → BPC_AmmoComponent.AddAmmo(AmmoTypeTag, PerPickupCount)
   └─ (Does NOT use BPC_InventorySystem — ammo goes to ammo pool, not inventory grid)

6. DA_Item_Shotgun / BP_Pickup_Shotgun / BP_Shotgun_Held

Item Type: Weapon | Slot: Framework.Equipment.Slot.PrimaryWeapon

Field Value
Display Name "Double-Barrel Shotgun"
Weight 6.0
Equipment.Damage 45.0 (total if both barrels hit)
Equipment.FireRate 1.0 (slow — break-action reload)
Equipment.MagazineSize 2
Equipment.ReloadTime 3.0 (shell-by-shell)

Difference from Pistol:

  • Pellet Spread: Fire trace replaced with multi-trace (6 pellets in cone)
  • Reload: Shell-by-shell reload (player can fire mid-reload if 1 shell loaded)
  • Damage Falloff: Heavy dropoff past 2000 units (close-range weapon)
  • Recoil: Much heavier — BPC_RecoilSystem.ApplyRecoil with ×3 multiplier

Held Actor Components:

BP_Shotgun_Held
  ├── SkeletalMeshComponent "WeaponMesh" (break-action animation)
  ├── SceneComponent "MuzzleSocket" (barrel end)
  ├── AudioComponent "FireSound" (loud BOOM)
  ├── AudioComponent "ReloadSound" (shell click)
  └── ParticleSystemComponent "MuzzleFlash" (large flash)

7. DA_Item_Ammo_Shells / BP_Pickup_Ammo_Shells

Item Type: Ammo | Ammo Type Tag: Framework.Item.Ammo.ShotgunShells

Field Value
Display Name "12-Gauge Shells"
AmmoData.PerPickupCount 6

Same pickup pattern as 9mm ammo — routes to BPC_AmmoComponent.AddAmmo().


8. DA_Item_Battery / BP_Pickup_Battery

Item Type: Consumable | Stack Limit: 10

Field Value
Display Name "Flashlight Battery"
Consumable.RestoreValue 50.0 (flashlight charge percentage)
Consumable.UseDuration 1.0

Usage (in BPC_ConsumableSystem):

Use Battery → Get equipped flashlight → I_Toggleable.GetCurrentState()
   ├─ If ON: FlashlightCharge += 50.0 (clamped to 100)
   └─ If OFF: FlashlightCharge += 50.0 + auto-toggle ON

9. DA_Item_AdrenalineSyringe / BP_Pickup_AdrenalineSyringe

Item Type: Consumable | Stack Limit: 3

Field Value
Display Name "Adrenaline Syringe"
Description "A military-grade stimulant. Restores stamina and suppresses exhaustion."
Consumable.StaminaRestore 50.0
Consumable.ExhaustionBlockDuration 10.0 (seconds — prevents exhaustion state)
Consumable.UseDuration 1.5 (injection animation)
Consumable.StressIncrease 10.0 (side effect — jittery)

Usage:

BPC_ConsumableSystem.UseItem(DA_Item_AdrenalineSyringe)
   ├─ BPC_StaminaSystem.RestoreStamina(50.0)
   ├─ BPC_StaminaSystem.SetExhaustionBlocked(true, 10.0s)
   ├─ BPC_StressSystem.AddStress(10.0)  // side effect
   ├─ WBP_ScreenEffectController.Flash(amber, 0.5s)
   └─ BPC_CameraStateLayer.AddTemporaryLayer("Adrenaline", 10s)
        └─ FOV +5, slight chromatic aberration

10. DA_Item_SanityPill / BP_Pickup_SanityPill

Item Type: Consumable | Stack Limit: 5

Field Value
Display Name "Sanity Pill (Diazepam)"
Description "Prescribed to asylum patients. Reduces psychological stress."
Consumable.StressReduce 30.0
Consumable.UseDuration 2.0
Consumable.StaminaReduce 10.0 (side effect — drowsiness)

Usage:

BPC_ConsumableSystem.UseItem(DA_Item_SanityPill)
   ├─ BPC_StressSystem.RemoveStress(30.0)
   ├─ BPC_StaminaSystem.DrainStamina(10.0)  // side effect
   ├─ WBP_ScreenEffectController.Flash(blue-white, 1.0s)
   ├─ BPC_MemoryDriftSystem.SetIntensity(0.0)  // clears hallucinations
   └─ SS_AudioManager.SetFloatParameter("StressTier", newTier)

11. DA_Item_Crowbar / BP_Pickup_Crowbar / BP_Crowbar_Held

Item Type: Tool | Slot: Framework.Equipment.Slot.Tool (shares with flashlight)

Field Value
Display Name "Rusted Crowbar"
Weight 4.0
Equipment.Damage 20.0 (melee damage)

Dual functions:

  1. Pry open barricaded doorsBP_Door_Barricaded checks for crowbar in equipment
  2. Melee weaponBPC_MeleeSystem handles swing hit detection
BP_Crowbar_Held implements:
  ├─ I_UsableItem → UseItem() → BPC_MeleeSystem.Swing()
  ├─ I_MeleeWeapon → GetDamage() → 20.0
  └─ I_Tool → CanPryOpen(DoorActor) → true

12-14. Key Items (Alpha, Beta, Warden's Key)

All follow the exact same pattern as item-keycard.md:

  • DA_ItemData with ItemType = KeyItem, bIsKeyItem = true
  • BP_Pickup_* with standard Construction Script + I_Interactable
  • BP_Door_* with RequiredKeyTag matching the key
  • BPC_KeyItemSystem handles consumption on use
Key Unlocks Location
Keycard Alpha WardA → WardB transition door Nurses Station (WardA)
Keycard Beta WardB → Basement transition door Chapel (behind organ puzzle)
Warden's Key Basement → WardensOffice (elevator) Morgue Drawer #4 (puzzle reward)

15. DA_Item_JournalPage / BP_Pickup_JournalPage

Item Type: Document

Field Value
Display Name "Journal Page" (varies per instance — set via Instance Data)
DocumentData.PageCount 1
DocumentData.bIsLoreEntry true

Variants (set via Instance Editable on pickup):

Instance Display Name Content
JournalPage_WakeUp "A Note to Myself" Player's own handwriting — "Find out what happened here"
JournalPage_WardensConfession "Warden's Confession" Final journal of Dr. Blackwood — reveals entity origin
JournalPage_PatientLetter "Letter to Mother" Patient's unsent letter — personal horror story
JournalPage_OrderlyReport "Incident Report #77" Orderly's report of first void manifestation

16. DA_Item_PatientFile / BP_Pickup_PatientFile

Item Type: Document | DocumentData.PageCount: 2-3

Patient files are world-building collectibles. Each file has: patient name, admission date, diagnosis, doctor's notes, treatment log. Reading all files unlocks lore entries via BPC_LoreUnlockSystem.

6 Files scattered across WardA, WardB, Basement:

  1. Patient #47 — "Claims to hear voices from walls"
  2. Patient #12 — "Exhibits void-touched scarring"
  3. Patient #88 — "Disappeared from locked cell — no explanation"
  4. Patient #03 — "First patient — died during initial void breach (1923)"
  5. Patient #55 — "Catatonic — responds only to old asylum music"
  6. Patient #101 — "No records prior to admission. Identity unknown."

17. DA_Item_OldPhoto / BP_Pickup_OldPhoto

Item Type: Collectible | bIsCollectible: true

4 photos hidden across levels. Each shows a piece of the asylum's history. Tracked by BPC_CollectibleTracker. Finding all 4 unlocks "Photographer" achievement.

Photo Location Content
Photo 1 WardA — Treatment Room bed Asylum staff photo, 1920 — faces scratched out
Photo 2 WardB — Morgue desk Patient group photo — one figure is missing from print
Photo 3 Basement — Crematorium Dr. Blackwood standing before the void portal
Photo 4 WardensOffice — Bookshelf Player's own reflection — dated 1923

18. DA_Item_VoidShard / BP_Pickup_VoidShard

Item Type: Collectible | bIsCollectible: true

3 shards hidden throughout the game. Critical for ending determination. Each shard glows with void energy. Tracked by BPC_CollectibleTracker.

Shard Location Acquired
Shard 1 WardB — Courtyard statue (behind) Mid-game
Shard 2 Basement — Crematorium (on altar) Late-game
Shard 3 WardensOffice — Bookshelf (hidden slot) End-game

Ending Impact:

  • 0 shards → Ending A (Resist / Escape) — default
  • 1-2 shards → Ending B (Merge / Become) — possible
  • 3 shards → Ending C (Sacrifice / Seal) — unlocked + alternate dialogue

Pickup Actor Template (for all 18 pickups)

Every pickup in the game follows this exact Component + Wiring template:

BP_Pickup_[ItemName]
  Components:
    ├── StaticMeshComponent "Mesh" (collision disabled)
    └── SphereComponent "PickupTrigger" (radius 200, OverlapOnlyPawn)

  Variables:
    └── ItemData (DA_ItemData*, Instance Editable)

  Construction Script:
    ├── ItemData.IsValid?
    │    ├─ True:
    │    │    ├─ ItemData → GetWorldMesh → LoadSynchronous → SetStaticMesh(Mesh)
    │    │    └─ ItemData → GetDisplayName → SetActorLabel
    │    └─ False: Print "No ItemData configured"

  Interfaces:
    └── I_Interactable

  Event Interact:
    ├─ [GET INVENTORY]       Interactor → BPC_InventorySystem
    ├─ [CHECK CAPACITY]      CanAddItem(ItemData, 1)
    │    ├─ True:
    │    │    ├─ AddItem(ItemData, 1)
    │    │    ├─ [IF WEAPON/TOOL] Auto-equip to slot
    │    │    ├─ DestroyActor()
    │    │    └─ Return True
    │    └─ False:
    │         ├─ Print "Inventory full"
    │         └─ Return False

  Event CanInteract:
    └─ Return (ItemData.IsValid?)

  Event GetInteractionPrompt:
    └─ Return Format("Pick up {0}", ItemData.DisplayName)

  Event BeginPlay (optional):
    └─ Start float/bob Timeline

  SPECIAL HANDLERS (per item type):
    ├─ Ammo:      Interactor → BPC_AmmoComponent.AddAmmo() (NOT inventory)
    ├─ Weapon:    After AddItem → BPC_EquipmentSlotSystem.EquipToSlot()
    └─ Key Item:  After AddItem → BPC_KeyItemSystem.RegisterKey()

Item Type Comparison

Aspect Weapon Tool Consumable Ammo KeyItem Document Collectible
Inventory Slot Yes Yes Yes No (pool) Yes Yes Yes
Stack Limit 1 1 3-10 999 1 1 1
Can Drop? Yes Yes Yes N/A NO Yes Yes
Equips? Yes (Primary/Tool) Yes (Tool) No No No No No
Consumed? No (ammo) No (battery) Yes Yes Yes No No
Saves? Yes Yes Yes Yes Yes Yes Yes
Interfaces I_UsableItem I_UsableItem, I_Toggleable I_UsableItem

Notes for Expansion

  • Add upgradable flashlight: find "High-Power Bulb" → increases light radius/cone
  • Add silencer attachment for pistol (consumable, degrades over 10 shots)
  • Add crafting recipes: combine items via BPC_ItemCombineSystem (e.g., Rag + Alcohol = Molotov)
  • Add randomized item placement per run via BPC_ProceduralEncounter loot tables
  • Add inspect mode: hold item in hand, rotate to find hidden details (some documents have invisible ink)
  • Void Shards could have puzzle interactions — place all 3 in a pedestal to unlock secret area
  • Patient Files could have audio logs attached — play via BPC_DialoguePlaybackSystem

Items Index for Project Void. See GAMEINDEX.md for full game structure. See individual item docs for detailed build walkthroughs.