- 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.
14 KiB
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:
- Pry open barricaded doors —
BP_Door_Barricadedchecks for crowbar in equipment - Melee weapon —
BPC_MeleeSystemhandles 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_ItemDatawithItemType = KeyItem,bIsKeyItem = trueBP_Pickup_*with standard Construction Script +I_InteractableBP_Door_*withRequiredKeyTagmatching the keyBPC_KeyItemSystemhandles 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:
- Patient #47 — "Claims to hear voices from walls"
- Patient #12 — "Exhibits void-touched scarring"
- Patient #88 — "Disappeared from locked cell — no explanation"
- Patient #03 — "First patient — died during initial void breach (1923)"
- Patient #55 — "Catatonic — responds only to old asylum music"
- 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_ProceduralEncounterloot 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.