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)
208 lines
5.8 KiB
YAML
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
|