# 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](item-flashlight.md) | | 2 | Pistol (9mm) | Weapon | 1 | 3.0 | WardA (Security Office) | [item-pistol.md](item-pistol.md) | | 3 | MedKit | Consumable | 5 | 1.0 | All levels | [item-medkit.md](item-medkit.md) | | 4 | Keycard Omega | KeyItem | 1 | 0.1 | WardA (Nurses Station) | [item-keycard.md](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 doors** — `BP_Door_Barricaded` checks for crowbar in equipment 2. **Melee weapon** — `BPC_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](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](GAMEINDEX.md) for full game structure. See individual item docs for detailed build walkthroughs.*