class_name ItemDatabase extends RefCounted # Item Database - Contains all item definitions and generation functions # Coordinates are (x, y) where x is column, y is row in items_n_shit.png (20x14 grid) # Frame calculation: frame = y * 20 + x # Item rarity tiers for random generation enum ItemRarity { COMMON, # Basic items (food, low-tier equipment) UNCOMMON, # Mid-tier equipment RARE, # High-tier equipment EPIC, # Legendary equipment CONSUMABLE # Potions and consumables } # Dictionary to store all item definitions by ID # Format: { "item_id": { item_data } } static var item_definitions: Dictionary = {} # Initialize item database static func _initialize(): if item_definitions.is_empty(): _load_all_items() # Load all item definitions static func _load_all_items(): # ARMOUR items (row 0) _register_item("silk_robe", { "item_name": "Silk Robe", "description": "A luxurious silk robe", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 10, # 10,0 "modifiers": {"def": 1, "end": 1}, "buy_cost": 50, "sell_worth": 15, "rarity": ItemRarity.COMMON }) _register_item("padded_robe", { "item_name": "Padded Robe", "description": "A padded robe for protection", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 11, # 11,0 "modifiers": {"def": 2}, "buy_cost": 60, "sell_worth": 18, "rarity": ItemRarity.COMMON }) _register_item("rags", { "item_name": "Rags", "description": "Tattered rags", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 12, # 12,0 "modifiers": {"def": 0}, "buy_cost": 10, "sell_worth": 3, "rarity": ItemRarity.COMMON }) _register_item("leather_armour", { "item_name": "Leather Armour", "description": "A nice leather armour", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 13, # 13,0 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 2 - Clothes/Tunic Body/LeatherTunic.png", "modifiers": {"def": 3}, "buy_cost": 80, "sell_worth": 24, "rarity": ItemRarity.COMMON }) _register_item("plate", { "item_name": "Plate", "description": "Heavy plate armour", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 14, # 14,0 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 2 - Clothes/Armour Body/SteelArmour.png", "modifiers": {"def": 5, "end": 1}, "buy_cost": 150, "sell_worth": 45, "rarity": ItemRarity.UNCOMMON }) _register_item("full_mail", { "item_name": "Full Mail", "description": "Complete chainmail armour", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 15, # 15,0 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 2 - Clothes/Armour Body/IronArmour.png", "modifiers": {"def": 4}, "buy_cost": 120, "sell_worth": 36, "rarity": ItemRarity.UNCOMMON }) _register_item("golden_mail", { "item_name": "Golden Mail", "description": "Exquisite golden chainmail", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ARMOUR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 16, # 16,0 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 2 - Clothes/Armour Body/GoldArmour.png", "modifiers": {"def": 6, "end": 2}, "buy_cost": 300, "sell_worth": 90, "rarity": ItemRarity.RARE }) # OFFHAND items (shields, row 0) _register_item("wooden_shield", { "item_name": "Wooden Shield", "description": "A basic wooden shield", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.OFFHAND, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 17, # 17,0 "modifiers": {"def": 2}, "buy_cost": 40, "sell_worth": 12, "rarity": ItemRarity.COMMON }) _register_item("sturdy_shield", { "item_name": "Sturdy Shield", "description": "A reinforced shield", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.OFFHAND, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 18, # 18,0 "modifiers": {"def": 3}, "buy_cost": 70, "sell_worth": 21, "rarity": ItemRarity.COMMON }) _register_item("metal_shield", { "item_name": "Metal Shield", "description": "A strong metal shield", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.OFFHAND, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 0 * 20 + 19, # 19,0 "modifiers": {"def": 4}, "buy_cost": 100, "sell_worth": 30, "rarity": ItemRarity.UNCOMMON }) # HEADGEAR items (row 1) _register_item("beanie", { "item_name": "Beanie", "description": "A warm beanie", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 10, # 10,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Headband.png", "modifiers": {"def": 1}, "buy_cost": 20, "sell_worth": 6, "rarity": ItemRarity.COMMON }) _register_item("leather_helm", { "item_name": "Leather Helm", "description": "A nice leather helm", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 11, # 11,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Basic Melee/NoviceHelm.png", "modifiers": {"def": 2}, "buy_cost": 50, "sell_worth": 15, "rarity": ItemRarity.COMMON }) _register_item("nomads_helm", { "item_name": "Nomad's Helm", "description": "A helm for travelers", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 12, # 12,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Basic Range/RangerHatGreen.png", "modifiers": {"def": 2, "dex": 1}, "buy_cost": 60, "sell_worth": 18, "rarity": ItemRarity.COMMON }) _register_item("strong_helm", { "item_name": "Strong Helm", "description": "A reinforced helm", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 13, # 13,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Basic Melee/KnightHelm.png", "modifiers": {"def": 3}, "buy_cost": 80, "sell_worth": 24, "rarity": ItemRarity.UNCOMMON }) _register_item("plate_helm", { "item_name": "Plate Helm", "description": "Heavy plate helm", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 14, # 14,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Basic Melee/SoldierSteelHelmBlue.png", "modifiers": {"def": 4}, "buy_cost": 120, "sell_worth": 36, "rarity": ItemRarity.UNCOMMON }) _register_item("warriors_helm", { "item_name": "Warrior's Helm", "description": "A helm for true warriors", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 15, # 15,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Basic Melee/DragonKnightHelm.png", "modifiers": {"def": 5, "str": 1}, "buy_cost": 180, "sell_worth": 54, "rarity": ItemRarity.RARE }) _register_item("paladins_helm", { "item_name": "Paladin's Helm", "description": "A blessed paladin helm", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.HEADGEAR, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 16, # 16,1 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 6 - Headgears/Basic Melee/PaladinHelmCyan.png", "modifiers": {"def": 5, "wis": 1}, "buy_cost": 200, "sell_worth": 60, "rarity": ItemRarity.RARE }) # ACCESSORY items (row 1) _register_item("amulet_of_strength", { "item_name": "Amulet of Strength", "description": "Grants +3 STR", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ACCESSORY, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 17, # 17,1 "modifiers": {"str": 3}, "buy_cost": 250, "sell_worth": 75, "rarity": ItemRarity.RARE }) _register_item("elven_shield", { "item_name": "Elven Shield", "description": "An elegant elven shield", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.OFFHAND, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 18, # 18,1 "modifiers": {"def": 5, "dex": 1}, "buy_cost": 180, "sell_worth": 54, "rarity": ItemRarity.RARE }) _register_item("tower_shield", { "item_name": "Tower Shield", "description": "A massive tower shield", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.OFFHAND, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 1 * 20 + 19, # 19,1 "modifiers": {"def": 6, "end": 1}, "buy_cost": 220, "sell_worth": 66, "rarity": ItemRarity.RARE }) # BOOTS items (row 2) _register_item("sandals", { "item_name": "Sandals", "description": "A pair of shitty sandals", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 10, # 10,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/ShoesBrown.png", "modifiers": {"def": 1}, "buy_cost": 15, "sell_worth": 4, "rarity": ItemRarity.COMMON }) _register_item("leather_boots", { "item_name": "Leather Boots", "description": "Comfortable leather boots", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 11, # 11,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/ShoesBrown.png", "modifiers": {"def": 2}, "buy_cost": 40, "sell_worth": 12, "rarity": ItemRarity.COMMON }) _register_item("sturdy_boots", { "item_name": "Sturdy Boots", "description": "Reinforced boots", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 12, # 12,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/ShoesMaple.png", "modifiers": {"def": 3}, "buy_cost": 60, "sell_worth": 18, "rarity": ItemRarity.COMMON }) _register_item("smiths_boots", { "item_name": "Smith's Boots", "description": "Heavy boots for smiths", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 13, # 13,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/ShoesMaple.png", "modifiers": {"def": 3, "end": 1}, "buy_cost": 80, "sell_worth": 24, "rarity": ItemRarity.UNCOMMON }) _register_item("chain_boots", { "item_name": "Chain Boots", "description": "Chainmail boots", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 14, # 14,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/IronBoots.png", "modifiers": {"def": 4}, "buy_cost": 100, "sell_worth": 30, "rarity": ItemRarity.UNCOMMON }) _register_item("plate_boots", { "item_name": "Plate Boots", "description": "Heavy plate boots", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 15, # 15,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/IronBoots.png", "modifiers": {"def": 5}, "buy_cost": 140, "sell_worth": 42, "rarity": ItemRarity.UNCOMMON }) _register_item("gold_boots", { "item_name": "Gold Boots", "description": "Exquisite golden boots", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.BOOTS, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 16, # 16,2 "equipmentPath": "res://assets/gfx/Puny-Characters/Layer 1 - Shoes/IronBoots.png", "modifiers": {"def": 6, "lck": 1}, "buy_cost": 250, "sell_worth": 75, "rarity": ItemRarity.RARE }) # ACCESSORY items (row 2) _register_item("ring_of_healing", { "item_name": "Ring of Healing", "description": "Regenerates health over time", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ACCESSORY, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 17, # 17,2 "modifiers": {"end": 2, "hp": 20}, "buy_cost": 200, "sell_worth": 60, "rarity": ItemRarity.RARE }) _register_item("ring_of_magic", { "item_name": "Ring of Magic", "description": "Increases mana and spell power", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ACCESSORY, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 18, # 18,2 "modifiers": {"int": 2, "mp": 30}, "buy_cost": 200, "sell_worth": 60, "rarity": ItemRarity.RARE }) _register_item("ring_of_light", { "item_name": "Ring of Light", "description": "Increases light radius", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.ACCESSORY, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 2 * 20 + 19, # 19,2 "modifiers": {"light_radius": 2}, "buy_cost": 150, "sell_worth": 45, "rarity": ItemRarity.UNCOMMON }) # WEAPONS - SWORDS (row 3) _register_item("long_sword", { "item_name": "Long Sword", "description": "A standard longsword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 10, # 10,3 "modifiers": {"dmg": 5}, "buy_cost": 100, "sell_worth": 30, "rarity": ItemRarity.COMMON }) _register_item("sword_of_blaze", { "item_name": "Sword of Blaze", "description": "A fiery sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 11, # 11,3 "modifiers": {"dmg": 8, "int": 2}, "buy_cost": 250, "sell_worth": 75, "rarity": ItemRarity.RARE }) _register_item("excalibur", { "item_name": "Excalibur", "description": "The legendary sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 12, # 12,3 "modifiers": {"dmg": 15, "str": 3, "wis": 2}, "buy_cost": 1000, "sell_worth": 300, "rarity": ItemRarity.EPIC }) _register_item("sword_of_the_wind", { "item_name": "Sword of the Wind", "description": "A swift sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 13, # 13,3 "modifiers": {"dmg": 7, "dex": 3}, "buy_cost": 300, "sell_worth": 90, "rarity": ItemRarity.RARE }) _register_item("halbrand", { "item_name": "Halbrand", "description": "A powerful sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 14, # 14,3 "modifiers": {"dmg": 12, "str": 2}, "buy_cost": 400, "sell_worth": 120, "rarity": ItemRarity.RARE }) _register_item("thunders_wrath", { "item_name": "Thunder's Wrath", "description": "A sword crackling with lightning", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 15, # 15,3 "modifiers": {"dmg": 10, "int": 3}, "buy_cost": 350, "sell_worth": 105, "rarity": ItemRarity.RARE }) _register_item("bastard_sword", { "item_name": "Bastard Sword", "description": "A versatile sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 16, # 16,3 "modifiers": {"dmg": 6}, "buy_cost": 120, "sell_worth": 36, "rarity": ItemRarity.COMMON }) _register_item("blade_of_darkness", { "item_name": "Blade of Darkness", "description": "A dark and deadly blade", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 17, # 17,3 "modifiers": {"dmg": 11, "lck": 2}, "buy_cost": 380, "sell_worth": 114, "rarity": ItemRarity.RARE }) _register_item("golden_blade", { "item_name": "Golden Blade", "description": "An ornate golden sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 18, # 18,3 "modifiers": {"dmg": 9, "lck": 3}, "buy_cost": 320, "sell_worth": 96, "rarity": ItemRarity.RARE }) _register_item("reapers_edge", { "item_name": "Reaper's Edge", "description": "A blade of death", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 3 * 20 + 19, # 19,3 "modifiers": {"dmg": 13, "lck": 2, "str": 1}, "buy_cost": 450, "sell_worth": 135, "rarity": ItemRarity.EPIC }) # More SWORDS (row 4) _register_item("singers_edge", { "item_name": "Singer's Edge", "description": "An elegant rapier", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 4 * 20 + 10, # 10,4 "modifiers": {"dmg": 6, "dex": 2}, "buy_cost": 150, "sell_worth": 45, "rarity": ItemRarity.UNCOMMON }) _register_item("rapier", { "item_name": "Rapier", "description": "A precise rapier", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 4 * 20 + 11, # 11,4 "modifiers": {"dmg": 5, "dex": 3}, "buy_cost": 130, "sell_worth": 39, "rarity": ItemRarity.UNCOMMON }) _register_item("buster_sword", { "item_name": "Buster Sword", "description": "A massive sword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "two_handed": true, "spriteFrame": 4 * 20 + 12, # 12,4 "modifiers": {"dmg": 14, "str": 2}, "buy_cost": 500, "sell_worth": 150, "rarity": ItemRarity.EPIC }) _register_item("doom_guard", { "item_name": "Doom Guard", "description": "A sword of doom", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 4 * 20 + 13, # 13,4 "modifiers": {"dmg": 12, "str": 3}, "buy_cost": 420, "sell_worth": 126, "rarity": ItemRarity.EPIC }) _register_item("ice_age", { "item_name": "Ice Age", "description": "A frozen blade", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 4 * 20 + 14, # 14,4 "modifiers": {"dmg": 10, "int": 2, "wis": 1}, "buy_cost": 350, "sell_worth": 105, "rarity": ItemRarity.RARE }) _register_item("god_blade", { "item_name": "God Blade", "description": "A divine blade", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 4 * 20 + 15, # 15,4 "modifiers": {"dmg": 16, "str": 2, "wis": 3}, "buy_cost": 800, "sell_worth": 240, "rarity": ItemRarity.EPIC }) # DAGGERS (row 4) _register_item("knife", { "item_name": "Knife", "description": "A sharp dagger", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.DAGGER, "spriteFrame": 4 * 20 + 16, # 16,4 "modifiers": {"dmg": 3, "dex": 1}, "buy_cost": 40, "sell_worth": 12, "rarity": ItemRarity.COMMON }) _register_item("black_shiv", { "item_name": "Black Shiv", "description": "A dark dagger", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.DAGGER, "spriteFrame": 4 * 20 + 17, # 17,4 "modifiers": {"dmg": 4, "dex": 2, "lck": 1}, "buy_cost": 80, "sell_worth": 24, "rarity": ItemRarity.UNCOMMON }) _register_item("golden_knife", { "item_name": "Golden Knife", "description": "An ornate dagger", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.DAGGER, "spriteFrame": 4 * 20 + 18, # 18,4 "modifiers": {"dmg": 5, "lck": 2}, "buy_cost": 120, "sell_worth": 36, "rarity": ItemRarity.UNCOMMON }) _register_item("bloodletter", { "item_name": "Bloodletter", "description": "A deadly dagger", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.DAGGER, "spriteFrame": 4 * 20 + 19, # 19,4 "modifiers": {"dmg": 6, "dex": 3, "lck": 1}, "buy_cost": 180, "sell_worth": 54, "rarity": ItemRarity.RARE }) # SWORDS and AXES (row 5) _register_item("short_sword", { "item_name": "Short Sword", "description": "A basic shortsword", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SWORD, "spriteFrame": 5 * 20 + 10, # 10,5 "modifiers": {"dmg": 4}, "buy_cost": 60, "sell_worth": 18, "rarity": ItemRarity.COMMON }) _register_item("hatchet", { "item_name": "Hatchet", "description": "A small axe", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.AXE, "spriteFrame": 5 * 20 + 11, # 11,5 "modifiers": {"dmg": 5, "str": 1}, "buy_cost": 70, "sell_worth": 21, "rarity": ItemRarity.COMMON }) _register_item("axe", { "item_name": "Axe", "description": "A standard axe", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.AXE, "spriteFrame": 5 * 20 + 12, # 12,5 "modifiers": {"dmg": 7, "str": 1}, "buy_cost": 100, "sell_worth": 30, "rarity": ItemRarity.COMMON }) _register_item("golden_axe", { "item_name": "Golden Axe", "description": "An ornate golden axe", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.AXE, "spriteFrame": 5 * 20 + 13, # 13,5 "modifiers": {"dmg": 9, "str": 2, "lck": 1}, "buy_cost": 250, "sell_worth": 75, "rarity": ItemRarity.RARE }) _register_item("blood_axe", { "item_name": "Blood Axe", "description": "A savage axe", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.AXE, "spriteFrame": 5 * 20 + 14, # 14,5 "modifiers": {"dmg": 10, "str": 3}, "buy_cost": 300, "sell_worth": 90, "rarity": ItemRarity.RARE }) _register_item("battle_axe", { "item_name": "Battle Axe", "description": "A massive two-handed axe", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.AXE, "two_handed": true, "spriteFrame": 5 * 20 + 15, # 15,5 "modifiers": {"dmg": 13, "str": 3}, "buy_cost": 450, "sell_worth": 135, "rarity": ItemRarity.RARE }) # STAVES (row 5) _register_item("staff", { "item_name": "Staff", "description": "A basic staff", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.STAFF, "two_handed": true, "spriteFrame": 5 * 20 + 16, # 16,5 "modifiers": {"dmg": 3, "int": 2, "mp": 20}, "buy_cost": 80, "sell_worth": 24, "rarity": ItemRarity.COMMON }) _register_item("staff_of_darkness", { "item_name": "Staff of Darkness", "description": "A dark staff", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.STAFF, "two_handed": true, "spriteFrame": 5 * 20 + 17, # 17,5 "modifiers": {"dmg": 6, "int": 4, "mp": 40}, "buy_cost": 350, "sell_worth": 105, "rarity": ItemRarity.RARE }) _register_item("staff_of_light", { "item_name": "Staff of Light", "description": "A blessed staff", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.STAFF, "two_handed": true, "spriteFrame": 5 * 20 + 18, # 18,5 "modifiers": {"dmg": 6, "wis": 4, "mp": 40}, "buy_cost": 350, "sell_worth": 105, "rarity": ItemRarity.RARE }) _register_item("staff_of_fire", { "item_name": "Staff of Fire", "description": "A fiery staff", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.STAFF, "two_handed": true, "spriteFrame": 5 * 20 + 19, # 19,5 "modifiers": {"dmg": 7, "int": 3, "mp": 35}, "buy_cost": 380, "sell_worth": 114, "rarity": ItemRarity.RARE }) # More STAVES and SPEARS (row 6) _register_item("staff_of_galactic_magic", { "item_name": "Staff of Galactic Magic", "description": "A legendary staff", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.STAFF, "two_handed": true, "spriteFrame": 6 * 20 + 10, # 10,6 "modifiers": {"dmg": 10, "int": 5, "wis": 3, "mp": 60}, "buy_cost": 700, "sell_worth": 210, "rarity": ItemRarity.EPIC }) _register_item("spear", { "item_name": "Spear", "description": "A standard spear", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SPEAR, "two_handed": true, "spriteFrame": 6 * 20 + 11, # 11,6 "modifiers": {"dmg": 6, "dex": 1}, "buy_cost": 90, "sell_worth": 27, "rarity": ItemRarity.COMMON }) _register_item("dark_spear", { "item_name": "Dark Spear", "description": "A dark spear", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SPEAR, "two_handed": true, "spriteFrame": 6 * 20 + 12, # 12,6 "modifiers": {"dmg": 8, "dex": 2, "lck": 1}, "buy_cost": 200, "sell_worth": 60, "rarity": ItemRarity.UNCOMMON }) _register_item("golden_spear", { "item_name": "Golden Spear", "description": "An ornate spear", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SPEAR, "two_handed": true, "spriteFrame": 6 * 20 + 13, # 13,6 "modifiers": {"dmg": 9, "dex": 2, "lck": 2}, "buy_cost": 280, "sell_worth": 84, "rarity": ItemRarity.RARE }) _register_item("blood_spear", { "item_name": "Blood Spear", "description": "A deadly spear", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.SPEAR, "two_handed": true, "spriteFrame": 6 * 20 + 14, # 14,6 "modifiers": {"dmg": 10, "dex": 3}, "buy_cost": 320, "sell_worth": 96, "rarity": ItemRarity.RARE }) # MACE and BOWS (row 6) _register_item("mace", { "item_name": "Mace", "description": "A heavy mace", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.MACE, "spriteFrame": 6 * 20 + 15, # 15,6 "modifiers": {"dmg": 8, "str": 2}, "buy_cost": 120, "sell_worth": 36, "rarity": ItemRarity.COMMON }) _register_item("short_bow", { "item_name": "Short Bow", "description": "A wooden bow made of elfish lembas bread", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.BOW, "spriteFrame": 6 * 20 + 16, # 16,6 "modifiers": {"dmg": 4, "dex": 2}, "buy_cost": 100, "sell_worth": 30, "rarity": ItemRarity.COMMON }) _register_item("dark_bow", { "item_name": "Dark Bow", "description": "A dark bow", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.BOW, "spriteFrame": 6 * 20 + 17, # 17,6 "modifiers": {"dmg": 6, "dex": 3, "lck": 1}, "buy_cost": 220, "sell_worth": 66, "rarity": ItemRarity.UNCOMMON }) _register_item("long_bow", { "item_name": "Long Bow", "description": "A powerful longbow", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.BOW, "spriteFrame": 6 * 20 + 18, # 18,6 "modifiers": {"dmg": 7, "dex": 2}, "buy_cost": 180, "sell_worth": 54, "rarity": ItemRarity.UNCOMMON }) _register_item("blood_bow", { "item_name": "Blood Bow", "description": "A deadly bow", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.BOW, "spriteFrame": 6 * 20 + 19, # 19,6 "modifiers": {"dmg": 8, "dex": 3}, "buy_cost": 280, "sell_worth": 84, "rarity": ItemRarity.RARE }) # More BOWS and AMMUNITION (row 7) _register_item("strike_force", { "item_name": "Strike Force", "description": "A legendary bow", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.MAINHAND, "weapon_type": Item.WeaponType.BOW, "spriteFrame": 7 * 20 + 10, # 10,7 "modifiers": {"dmg": 10, "dex": 4, "lck": 2}, "buy_cost": 500, "sell_worth": 150, "rarity": ItemRarity.EPIC }) _register_item("arrow", { "item_name": "Arrow", "description": "A sharp arrow made of iron and feathers from pelican birds", "item_type": Item.ItemType.Equippable, "equipment_type": Item.EquipmentType.OFFHAND, "weapon_type": Item.WeaponType.AMMUNITION, "spriteFrame": 7 * 20 + 11, # 11,7 "quantity": 13, "can_have_multiple_of": true, "modifiers": {"dmg": 2}, "buy_cost": 20, "sell_worth": 6, "rarity": ItemRarity.COMMON }) # CONSUMABLE FOOD ITEMS (row 7) _register_item("cheese", { "item_name": "Cheese", "description": "Restores 10 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 12, # 12,7 "modifiers": {"hp": 10}, "buy_cost": 15, "sell_worth": 4, "rarity": ItemRarity.COMMON }) _register_item("meat", { "item_name": "Meat", "description": "Restores 20 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 13, # 13,7 "modifiers": {"hp": 20}, "buy_cost": 25, "sell_worth": 7, "rarity": ItemRarity.COMMON }) _register_item("egg", { "item_name": "Egg", "description": "Restores 3 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 14, # 14,7 "modifiers": {"hp": 3}, "buy_cost": 5, "sell_worth": 1, "rarity": ItemRarity.COMMON }) _register_item("fish", { "item_name": "Fish", "description": "Restores 5 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 15, # 15,7 "modifiers": {"hp": 5}, "buy_cost": 8, "sell_worth": 2, "rarity": ItemRarity.COMMON }) _register_item("chicken_leg", { "item_name": "Chicken Leg", "description": "Restores 8 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 16, # 16,7 "modifiers": {"hp": 8}, "buy_cost": 12, "sell_worth": 3, "rarity": ItemRarity.COMMON }) _register_item("sandwich", { "item_name": "Sandwich", "description": "Restores 10 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 17, # 17,7 "modifiers": {"hp": 10}, "buy_cost": 15, "sell_worth": 4, "rarity": ItemRarity.COMMON }) _register_item("potato", { "item_name": "Potato", "description": "Restores 2 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 18, # 18,7 "modifiers": {"hp": 2}, "buy_cost": 3, "sell_worth": 1, "rarity": ItemRarity.COMMON }) _register_item("steak", { "item_name": "Steak", "description": "Restores 14 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 7 * 20 + 19, # 19,7 "modifiers": {"hp": 14}, "buy_cost": 20, "sell_worth": 6, "rarity": ItemRarity.COMMON }) # More CONSUMABLE ITEMS (row 8) _register_item("cookie", { "item_name": "Cookie", "description": "Restores 4 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 13, # 13,8 "modifiers": {"hp": 4}, "buy_cost": 6, "sell_worth": 2, "rarity": ItemRarity.COMMON }) _register_item("candy", { "item_name": "Candy", "description": "Restores 7 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 14, # 14,8 "modifiers": {"hp": 7}, "buy_cost": 10, "sell_worth": 3, "rarity": ItemRarity.COMMON }) _register_item("healing_potion", { "item_name": "Healing Potion", "description": "Restores 50 HP", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 15, # 15,8 "modifiers": {"hp": 50}, "buy_cost": 50, "sell_worth": 15, "rarity": ItemRarity.CONSUMABLE }) _register_item("rejuvenation_potion", { "item_name": "Rejuvenation Potion", "description": "Restores 75 HP and 75 MANA", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 16, # 16,8 "modifiers": {"hp": 75, "mp": 75}, "buy_cost": 100, "sell_worth": 30, "rarity": ItemRarity.CONSUMABLE }) _register_item("dodge_potion", { "item_name": "Dodge Potion", "description": "Grants higher dodge chance", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 17, # 17,8 "modifiers": {"dodge_chance": 0.15}, # +15% dodge chance (temporary) "duration": 60.0, # 60 seconds "buy_cost": 80, "sell_worth": 24, "rarity": ItemRarity.CONSUMABLE }) _register_item("mana_potion", { "item_name": "Mana Potion", "description": "Restores 50 MANA", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 18, # 18,8 "modifiers": {"mp": 50}, "buy_cost": 40, "sell_worth": 12, "rarity": ItemRarity.CONSUMABLE }) _register_item("resistance_potion", { "item_name": "Resistance Potion", "description": "+25% all resistances", "item_type": Item.ItemType.Restoration, "equipment_type": Item.EquipmentType.NONE, "weapon_type": Item.WeaponType.NONE, "spriteFrame": 8 * 20 + 19, # 19,8 "modifiers": {"res_all": 25}, # +25% to all resistances "duration": 120.0, # 120 seconds "buy_cost": 120, "sell_worth": 36, "rarity": ItemRarity.CONSUMABLE }) # Register an item in the database static func _register_item(item_id: String, item_data: Dictionary): item_data["item_id"] = item_id item_definitions[item_id] = item_data # Create an Item instance from an item ID static func create_item(item_id: String) -> Item: _initialize() if not item_definitions.has(item_id): push_error("ItemDatabase: Item ID '%s' not found!" % item_id) return null var item_data = item_definitions[item_id].duplicate(true) var item = Item.new() # Set all properties from item_data item.item_name = item_data.get("item_name", "Unknown Item") item.description = item_data.get("description", "") item.item_type = item_data.get("item_type", Item.ItemType.Restoration) item.equipment_type = item_data.get("equipment_type", Item.EquipmentType.NONE) item.weapon_type = item_data.get("weapon_type", Item.WeaponType.NONE) item.spriteFrame = item_data.get("spriteFrame", 0) item.modifiers = item_data.get("modifiers", {}).duplicate(true) item.buy_cost = item_data.get("buy_cost", 10) item.sell_worth = item_data.get("sell_worth", 3) item.two_handed = item_data.get("two_handed", false) item.quantity = item_data.get("quantity", 1) item.can_have_multiple_of = item_data.get("can_have_multiple_of", false) item.duration = item_data.get("duration", 0.0) # spritePath defaults to items_n_shit.png in Item class, which is correct # spriteFrames defaults to Vector2i(20,14) in Item class, which is correct if item_data.has("equipmentPath"): item.equipmentPath = item_data["equipmentPath"] if item_data.has("colorReplacements"): item.colorReplacements = item_data["colorReplacements"].duplicate(true) # Remove item_id from data (internal use only) item_data.erase("item_id") item_data.erase("rarity") # Remove rarity (internal use only) return item # Get a random item by rarity static func get_random_item_by_rarity(rarity: ItemRarity) -> Item: _initialize() var candidates = [] for item_id in item_definitions.keys(): var item_data = item_definitions[item_id] if item_data.has("rarity") and item_data["rarity"] == rarity: candidates.append(item_id) if candidates.is_empty(): # Fallback to common items return get_random_item_by_rarity(ItemRarity.COMMON) var random_item_id = candidates[randi() % candidates.size()] return create_item(random_item_id) # Get a random item (weighted by rarity) static func get_random_item() -> Item: _initialize() # Weighted random: 50% common, 25% uncommon, 15% rare, 5% epic, 5% consumable var roll = randf() var rarity: ItemRarity if roll < 0.5: rarity = ItemRarity.COMMON elif roll < 0.75: rarity = ItemRarity.UNCOMMON elif roll < 0.90: rarity = ItemRarity.RARE elif roll < 0.95: rarity = ItemRarity.EPIC else: rarity = ItemRarity.CONSUMABLE return get_random_item_by_rarity(rarity) # Get random items for enemies (weighted towards common/uncommon) static func get_random_enemy_drop() -> Item: _initialize() # Enemies: 60% common, 30% uncommon, 8% rare, 2% epic/consumable var roll = randf() var rarity: ItemRarity if roll < 0.6: rarity = ItemRarity.COMMON elif roll < 0.9: rarity = ItemRarity.UNCOMMON elif roll < 0.98: rarity = ItemRarity.RARE else: # 50/50 between epic and consumable rarity = ItemRarity.EPIC if randf() < 0.5 else ItemRarity.CONSUMABLE return get_random_item_by_rarity(rarity) # Get random items for chests (better loot) static func get_random_chest_item() -> Item: _initialize() # Chests: 40% common, 35% uncommon, 20% rare, 5% epic/consumable var roll = randf() var rarity: ItemRarity if roll < 0.4: rarity = ItemRarity.COMMON elif roll < 0.75: rarity = ItemRarity.UNCOMMON elif roll < 0.95: rarity = ItemRarity.RARE else: rarity = ItemRarity.EPIC if randf() < 0.5 else ItemRarity.CONSUMABLE return get_random_item_by_rarity(rarity) # Get random items for destroyed containers (mostly consumables, some equipment) static func get_random_container_item() -> Item: _initialize() # Containers: 50% food (common restoration), 30% common equipment, 15% uncommon, 5% rare var roll = randf() if roll < 0.5: # Food items (restoration items with rarity COMMON) var food_items = [] for item_id in item_definitions.keys(): var item_data = item_definitions[item_id] if item_data.has("rarity") and item_data["rarity"] == ItemRarity.COMMON: if item_data.has("item_type") and item_data["item_type"] == Item.ItemType.Restoration: food_items.append(item_id) if not food_items.is_empty(): var random_food_id = food_items[randi() % food_items.size()] return create_item(random_food_id) # Fall back to normal random item with adjusted weights roll = randf() var rarity: ItemRarity if roll < 0.6: rarity = ItemRarity.COMMON elif roll < 0.85: rarity = ItemRarity.UNCOMMON else: rarity = ItemRarity.RARE return get_random_item_by_rarity(rarity)