Files
Code_of_Conquest/api/app/data/static_items/materials.yaml
Phillip Tarrant fdd48034e4 feat(api): implement combat loot integration with hybrid static/procedural system
Add CombatLootService that orchestrates loot generation from combat,
supporting both static item drops (consumables, materials) and procedural
equipment generation (weapons, armor with affixes).

Key changes:
- Extend LootEntry model with LootType enum (STATIC/PROCEDURAL)
- Create StaticItemLoader service for consumables/materials from YAML
- Create CombatLootService with full rarity formula incorporating:
  - Party average level
  - Enemy difficulty tier (EASY: +0%, MEDIUM: +5%, HARD: +15%, BOSS: +30%)
  - Character luck stat
  - Per-entry rarity bonus
- Integrate with CombatService._calculate_rewards() for automatic loot gen
- Add boss guaranteed drops via generate_boss_loot()

New enemy variants (goblin family proof-of-concept):
- goblin_scout (Easy) - static drops only
- goblin_warrior (Medium) - static + procedural weapon drops
- goblin_chieftain (Hard) - static + procedural weapon/armor drops

Static items added:
- consumables.yaml: health/mana potions, elixirs, food
- materials.yaml: trophy items, crafting materials

Tests: 59 new tests across 3 test files (all passing)
2025-11-27 00:01:17 -06:00

208 lines
5.8 KiB
YAML

# Trophy items, crafting materials, and quest items dropped by enemies
# These items don't have combat effects but are used for quests, crafting, or selling
items:
# ==========================================================================
# Goblin Drops
# ==========================================================================
goblin_ear:
name: "Goblin Ear"
item_type: quest_item
rarity: common
description: "A severed goblin ear. Proof of a kill, sometimes collected for bounties."
value: 2
is_tradeable: true
goblin_trinket:
name: "Goblin Trinket"
item_type: quest_item
rarity: common
description: "A crude piece of jewelry stolen by a goblin. Worth a few coins."
value: 8
is_tradeable: true
goblin_war_paint:
name: "Goblin War Paint"
item_type: quest_item
rarity: uncommon
description: "Pungent red and black paint used by goblin warriors before battle."
value: 15
is_tradeable: true
goblin_chieftain_token:
name: "Chieftain's Token"
item_type: quest_item
rarity: rare
description: "A carved bone token marking the authority of a goblin chieftain."
value: 50
is_tradeable: true
# ==========================================================================
# Wolf/Beast Drops
# ==========================================================================
wolf_pelt:
name: "Wolf Pelt"
item_type: quest_item
rarity: common
description: "A fur pelt from a wolf. Useful for crafting or selling to tanners."
value: 10
is_tradeable: true
dire_wolf_fang:
name: "Dire Wolf Fang"
item_type: quest_item
rarity: uncommon
description: "A large fang from a dire wolf. Prized by craftsmen for weapon making."
value: 25
is_tradeable: true
beast_hide:
name: "Beast Hide"
item_type: quest_item
rarity: common
description: "Thick hide from a large beast. Can be tanned into leather."
value: 12
is_tradeable: true
# ==========================================================================
# Undead Drops
# ==========================================================================
skeleton_bone:
name: "Skeleton Bone"
item_type: quest_item
rarity: common
description: "A bone from an animated skeleton. Retains faint magical energy."
value: 5
is_tradeable: true
bone_dust:
name: "Bone Dust"
item_type: quest_item
rarity: common
description: "Powdered bone from undead remains. Used in alchemy and rituals."
value: 8
is_tradeable: true
skull_fragment:
name: "Skull Fragment"
item_type: quest_item
rarity: uncommon
description: "A piece of an undead skull, still crackling with dark energy."
value: 20
is_tradeable: true
# ==========================================================================
# Orc Drops
# ==========================================================================
orc_tusk:
name: "Orc Tusk"
item_type: quest_item
rarity: uncommon
description: "A large tusk from an orc warrior. A trophy prized by collectors."
value: 25
is_tradeable: true
orc_war_banner:
name: "Orc War Banner"
item_type: quest_item
rarity: rare
description: "A bloodstained banner torn from an orc warband. Proof of a hard fight."
value: 45
is_tradeable: true
berserker_charm:
name: "Berserker Charm"
item_type: quest_item
rarity: rare
description: "A crude charm worn by orc berserkers. Said to enhance rage."
value: 60
is_tradeable: true
# ==========================================================================
# Bandit Drops
# ==========================================================================
bandit_mask:
name: "Bandit Mask"
item_type: quest_item
rarity: common
description: "A cloth mask worn by bandits to conceal their identity."
value: 8
is_tradeable: true
stolen_coin_pouch:
name: "Stolen Coin Pouch"
item_type: quest_item
rarity: common
description: "A small pouch of coins stolen by bandits. Should be returned."
value: 15
is_tradeable: true
wanted_poster:
name: "Wanted Poster"
item_type: quest_item
rarity: uncommon
description: "A crumpled wanted poster. May lead to bounty opportunities."
value: 5
is_tradeable: true
# ==========================================================================
# Generic/Currency Items
# ==========================================================================
gold_coin:
name: "Gold Coin"
item_type: quest_item
rarity: common
description: "A single gold coin. Standard currency across the realm."
value: 1
is_tradeable: true
silver_coin:
name: "Silver Coin"
item_type: quest_item
rarity: common
description: "A silver coin worth less than gold but still useful."
value: 1
is_tradeable: true
# ==========================================================================
# Crafting Materials (Generic)
# ==========================================================================
iron_ore:
name: "Iron Ore"
item_type: quest_item
rarity: common
description: "Raw iron ore that can be smelted into ingots."
value: 10
is_tradeable: true
leather_scraps:
name: "Leather Scraps"
item_type: quest_item
rarity: common
description: "Scraps of leather useful for crafting and repairs."
value: 5
is_tradeable: true
cloth_scraps:
name: "Cloth Scraps"
item_type: quest_item
rarity: common
description: "Torn cloth that can be sewn into bandages or used for crafting."
value: 3
is_tradeable: true
magic_essence:
name: "Magic Essence"
item_type: quest_item
rarity: uncommon
description: "Crystallized magical energy. Used in enchanting and alchemy."
value: 30
is_tradeable: true