# 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.*
