diff --git a/setup.py b/setup.py index 75d223ea..a82f4cac 100644 --- a/setup.py +++ b/setup.py @@ -69,7 +69,6 @@ non_apworlds: set = { "ChecksFinder", "Clique", "DLCQuest", - "Dark Souls III", "Final Fantasy", "Hollow Knight", "Hylics 2", diff --git a/worlds/dark_souls_3/Items.py b/worlds/dark_souls_3/Items.py index 140d3ba6..754282e7 100644 --- a/worlds/dark_souls_3/Items.py +++ b/worlds/dark_souls_3/Items.py @@ -1,36 +1,1276 @@ -import sys +from enum import IntEnum +from typing import NamedTuple from BaseClasses import Item -from worlds.dark_souls_3.data.items_data import item_tables, dlc_shields_table, dlc_weapons_upgrade_10_table, \ - dlc_weapons_upgrade_5_table, dlc_goods_table, dlc_spells_table, dlc_armor_table, dlc_ring_table, dlc_misc_table, dlc_goods_2_table + + +class DS3ItemCategory(IntEnum): + WEAPON_UPGRADE_5 = 0 + WEAPON_UPGRADE_10 = 1 + WEAPON_UPGRADE_10_INFUSIBLE = 2 + SHIELD = 3 + SHIELD_INFUSIBLE = 4 + ARMOR = 5 + RING = 6 + SPELL = 7 + MISC = 8 + KEY = 9 + BOSS = 10 + SKIP = 11 + + +class DS3ItemData(NamedTuple): + name: str + ds3_code: int + is_dlc: bool + category: DS3ItemCategory class DarkSouls3Item(Item): game: str = "Dark Souls III" - dlc_set = {**dlc_shields_table, **dlc_weapons_upgrade_10_table, **dlc_weapons_upgrade_5_table, - **dlc_goods_table, **dlc_spells_table, **dlc_armor_table, **dlc_ring_table, **dlc_misc_table} - - dlc_progressive = {**dlc_goods_2_table} - @staticmethod def get_name_to_id() -> dict: base_id = 100000 - table_offset = 100 + return {item_data.name: id for id, item_data in enumerate(_all_items, base_id)} - output = {} - for i, table in enumerate(item_tables): - if len(table) > table_offset: - raise Exception("An item table has {} entries, that is more than {} entries (table #{})".format(len(table), table_offset, i)) - output.update({name: id for id, name in enumerate(table, base_id + (table_offset * i))}) - return output +key_item_names = { + "Small Lothric Banner", + "Basin of Vows", + "Small Doll", + "Storm Ruler", + "Grand Archives Key", + "Cinders of a Lord - Abyss Watcher", + "Cinders of a Lord - Yhorm the Giant", + "Cinders of a Lord - Aldrich", + "Cinders of a Lord - Lothric Prince", + "Mortician's Ashes", + "Cell Key", + #"Tower Key", #Not a relevant key item atm + "Jailbreaker's Key", + "Prisoner Chief's Ashes", + "Old Cell Key", + "Jailer's Key Ring", + "Contraption Key", + "Small Envoy Banner" +} - @staticmethod - def is_dlc_item(name) -> bool: - return name in DarkSouls3Item.dlc_set - @staticmethod - def is_dlc_progressive(name) -> bool: - return name in DarkSouls3Item.dlc_progressive +_vanilla_items = [DS3ItemData(row[0], row[1], False, row[2]) for row in [ + # Ammunition + ("Standard Arrow", 0x00061A80, DS3ItemCategory.SKIP), + ("Fire Arrow", 0x00061AE4, DS3ItemCategory.SKIP), + ("Poison Arrow", 0x00061B48, DS3ItemCategory.SKIP), + ("Large Arrow", 0x00061BAC, DS3ItemCategory.SKIP), + ("Feather Arrow", 0x00061C10, DS3ItemCategory.SKIP), + ("Moonlight Arrow", 0x00061C74, DS3ItemCategory.SKIP), + ("Wood Arrow", 0x00061CD8, DS3ItemCategory.SKIP), + ("Dark Arrow", 0x00061D3C, DS3ItemCategory.SKIP), + ("Dragonslayer Greatarrow", 0x00062250, DS3ItemCategory.SKIP), + ("Dragonslayer Lightning Arrow", 0x00062318, DS3ItemCategory.SKIP), + ("Onislayer Greatarrow", 0x0006237C, DS3ItemCategory.SKIP), + ("Standard Bolt", 0x00062A20, DS3ItemCategory.SKIP), + ("Heavy Bolt", 0x00062A84, DS3ItemCategory.SKIP), + ("Sniper Bolt", 0x00062AE8, DS3ItemCategory.SKIP), + ("Wood Bolt", 0x00062B4C, DS3ItemCategory.SKIP), + ("Lightning Bolt", 0x00062BB0, DS3ItemCategory.SKIP), + ("Splintering Bolt", 0x00062C14, DS3ItemCategory.SKIP), + ("Exploding Bolt", 0x00062C78, DS3ItemCategory.SKIP), + # Weapons + ("Dagger", 0x000F4240, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Bandit's Knife", 0x000F6950, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Parrying Dagger", 0x000F9060, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Rotten Ghru Dagger", 0x000FDE80, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Harpe", 0x00102CA0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Scholar's Candlestick", 0x001053B0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Tailbone Short Sword", 0x00107AC0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Corvian Greatknife", 0x0010A1D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Handmaid's Dagger", 0x00111700, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Shortsword", 0x001E8480, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Longsword", 0x001EAB90, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Broadsword", 0x001ED2A0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Broken Straight Sword", 0x001EF9B0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Lothric Knight Sword", 0x001F6EE0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Sunlight Straight Sword", 0x00203230, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Rotten Ghru Curved Sword", 0x00205940, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Irithyll Straight Sword", 0x0020A760, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Cleric's Candlestick", 0x0020F580, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Morion Blade", 0x002143A0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Astora's Straight Sword", 0x002191C0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Barbed Straight Sword", 0x0021B8D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Executioner's Greatsword", 0x0021DFE0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Anri's Straight Sword", 0x002206F0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Estoc", 0x002DC6C0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Mail Breaker", 0x002DEDD0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Rapier", 0x002E14E0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Ricard's Rapier", 0x002E3BF0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Crystal Sage's Rapier", 0x002E6300, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Irithyll Rapier", 0x002E8A10, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Shotel", 0x003D3010, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Scimitar", 0x003D7E30, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Falchion", 0x003DA540, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Carthus Curved Sword", 0x003DCC50, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Carthus Curved Greatsword", 0x003DF360, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Pontiff Knight Curved Sword", 0x003E1A70, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Storm Curved Sword", 0x003E4180, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Painting Guardian's Curved Sword", 0x003E6890, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Crescent Moon Sword", 0x003E8FA0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Carthus Shotel", 0x003EB6B0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Uchigatana", 0x004C4B40, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Washing Pole", 0x004C7250, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Chaos Blade", 0x004C9960, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Black Blade", 0x004CC070, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Bloodlust", 0x004CE780, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Darkdrift", 0x004D0E90, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Bastard Sword", 0x005B8D80, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Claymore", 0x005BDBA0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Zweihander", 0x005C29C0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Greatsword", 0x005C50D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Astora Greatsword", 0x005C9EF0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Murakumo", 0x005CC600, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Lothric Knight Greatsword", 0x005D1420, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Flamberge", 0x005DB060, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Exile Greatsword", 0x005DD770, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Greatsword of Judgment", 0x005E2590, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Profaned Greatsword", 0x005E4CA0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Cathedral Knight Greatsword", 0x005E73B0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Farron Greatsword", 0x005E9AC0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Yhorm's Great Machete", 0x005F0FF0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Dark Sword", 0x005F3700, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Black Knight Sword", 0x005F5E10, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Lorian's Greatsword", 0x005F8520, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Twin Princes' Greatsword", 0x005FAC30, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Lothric's Holy Sword", 0x005FD340, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Wolnir's Holy Sword", 0x005FFA50, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Wolf Knight's Greatsword", 0x00602160, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Greatsword of Artorias", 0x0060216A, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Hollowslayer Greatsword", 0x00604870, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Moonlight Greatsword", 0x00606F80, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Drakeblood Greatsword", 0x00609690, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Firelink Greatsword", 0x0060BDA0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Fume Ultra Greatsword", 0x0060E4B0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Old Wolf Curved Sword", 0x00610BC0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Storm Ruler", 0x006132D0, DS3ItemCategory.KEY), + ("Hand Axe", 0x006ACFC0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Battle Axe", 0x006AF6D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Deep Battle Axe", 0x006AFA54, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Brigand Axe", 0x006B1DE0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Crescent Axe", 0x006B6C00, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Great Axe", 0x006B9310, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Butcher Knife", 0x006BE130, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Dragonslayer's Axe", 0x006C0840, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Thrall Axe", 0x006C5660, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Dragonslayer Greataxe", 0x006C7D70, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Demon's Greataxe", 0x006CA480, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Eleonora", 0x006CCB90, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Man Serpent Hatchet", 0x006D19B0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Club", 0x007A1200, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Mace", 0x007A3910, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Morning Star", 0x007A6020, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Reinforced Club", 0x007A8730, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Large Club", 0x007AFC60, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Great Club", 0x007B4A80, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Great Mace", 0x007BBFB0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Great Wooden Hammer", 0x007C8300, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Gargoyle Flame Hammer", 0x007CAA10, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Vordt's Great Hammer", 0x007CD120, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Old King's Great Hammer", 0x007CF830, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Heysel Pick", 0x007D6D60, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Warpick", 0x007DBB80, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Pickaxe", 0x007DE290, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Dragon Tooth", 0x007E09A0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Smough's Great Hammer", 0x007E30B0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Blacksmith Hammer", 0x007E57C0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Morne's Great Hammer", 0x007E7ED0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Spiked Mace", 0x007EA5E0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Spear", 0x00895440, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Winged Spear", 0x00897B50, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Partizan", 0x0089C970, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Greatlance", 0x008A8CC0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Lothric Knight Long Spear", 0x008AB3D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Gargoyle Flame Spear", 0x008B01F0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Rotten Ghru Spear", 0x008B2900, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Tailbone Spear", 0x008B5010, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Soldering Iron", 0x008B7720, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Arstor's Spear", 0x008BEC50, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Saint Bident", 0x008C1360, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Yorshka's Spear", 0x008C3A70, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Pike", 0x008C6180, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Heavy Four-pronged Plow", 0x008ADAE0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Dragonslayer Spear", 0x008CAFA0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Great Scythe", 0x00989680, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Lucerne", 0x0098BD90, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Glaive", 0x0098E4A0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Halberd", 0x00990BB0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Black Knight Greataxe", 0x009959D0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Pontiff Knight Great Scythe", 0x0099A7F0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Great Corvian Scythe", 0x0099CF00, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Winged Knight Halberd", 0x0099F610, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Gundyr's Halberd", 0x009A1D20, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Red Hilted Halberd", 0x009AB960, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Black Knight Glaive", 0x009AE070, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Immolation Tinder", 0x009B0780, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Claw", 0x00A7D8C0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Caestus", 0x00A7FFD0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Manikin Claws", 0x00A826E0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Demon's Fist", 0x00A84DF0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Dark Hand", 0x00A87500, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Whip", 0x00B71B00, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Witch's Locks", 0x00B7B740, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Notched Whip", 0x00B7DE50, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Spotted Whip", 0x00B80560, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Talisman", 0x00C72090, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Sorcerer's Staff", 0x00C747A0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Storyteller's Staff", 0x00C76EB0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Mendicant's Staff", 0x00C795C0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Man-grub's Staff", 0x00C7E3E0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Archdeacon's Great Staff", 0x00C80AF0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Golden Ritual Spear", 0x00C83200, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Yorshka's Chime", 0x00C88020, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Sage's Crystal Staff", 0x00C8CE40, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Heretic's Staff", 0x00C8F550, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Court Sorcerer's Staff", 0x00C91C60, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Witchtree Branch", 0x00C94370, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Izalith Staff", 0x00C96A80, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Cleric's Sacred Chime", 0x00C99190, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Priest's Chime", 0x00C9B8A0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Saint-tree Bellvine", 0x00C9DFB0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Caitha's Chime", 0x00CA06C0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Crystal Chime", 0x00CA2DD0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Sunlight Talisman", 0x00CA54E0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Canvas Talisman", 0x00CA7BF0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Sunless Talisman", 0x00CAA300, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Saint's Talisman", 0x00CACA10, DS3ItemCategory.WEAPON_UPGRADE_10), + ("White Hair Talisman", 0x00CAF120, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Pyromancy Flame", 0x00CC77C0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Dragonslayer Greatbow", 0x00CF8500, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Short Bow", 0x00D5C690, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Composite Bow", 0x00D5EDA0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Light Crossbow", 0x00D63BC0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Arbalest", 0x00D662D0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Longbow", 0x00D689E0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Dragonrider Bow", 0x00D6B0F0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Avelyn", 0x00D6FF10, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Knight's Crossbow", 0x00D72620, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Heavy Crossbow", 0x00D74D30, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Darkmoon Longbow", 0x00D79B50, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Onislayer Greatbow", 0x00D7C260, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Black Bow of Pharis", 0x00D7E970, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Sniper Crossbow", 0x00D83790, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Sellsword Twinblades", 0x00F42400, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Warden Twinblades", 0x00F47220, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Winged Knight Twinaxes", 0x00F49930, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Dancer's Enchanted Swords", 0x00F4C040, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Great Machete", 0x00F4E750, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Brigand Twindaggers", 0x00F50E60, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Gotthard Twinswords", 0x00F53570, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Onikiri and Ubadachi", 0x00F58390, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Drang Twinspears", 0x00F5AAA0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Drang Hammers", 0x00F61FD0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + + # Shields + ("Buckler", 0x01312D00, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Small Leather Shield", 0x01315410, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Round Shield", 0x0131A230, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Large Leather Shield", 0x0131C940, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Hawkwood's Shield", 0x01323E70, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Iron Round Shield", 0x01326580, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Wooden Shield", 0x0132DAB0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Kite Shield", 0x013301C0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Ghru Rotshield", 0x013328D0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Havel's Greatshield", 0x013376F0, DS3ItemCategory.SHIELD), + ("Target Shield", 0x01339E00, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Elkhorn Round Shield", 0x0133C510, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Warrior's Round Shield", 0x0133EC20, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Caduceus Round Shield", 0x01341330, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Red and White Shield", 0x01343A40, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Blessed Red and White Shield+1", 0x01343FB9, DS3ItemCategory.SHIELD), + ("Plank Shield", 0x01346150, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Leather Shield", 0x01348860, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Crimson Parma", 0x0134AF70, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Eastern Iron Shield", 0x0134D680, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Llewellyn Shield", 0x0134FD90, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Golden Falcon Shield", 0x01354BB0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Sacred Bloom Shield", 0x013572C0, DS3ItemCategory.SHIELD), + ("Ancient Dragon Greatshield", 0x013599D0, DS3ItemCategory.SHIELD), + ("Lothric Knight Shield", 0x01409650, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Knight Shield", 0x01410B80, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Pontiff Knight Shield", 0x014159A0, DS3ItemCategory.SHIELD), + ("Carthus Shield", 0x014180B0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Black Knight Shield", 0x0141F5E0, DS3ItemCategory.SHIELD), + ("Silver Knight Shield", 0x01424400, DS3ItemCategory.SHIELD), + ("Spiked Shield", 0x01426B10, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Pierce Shield", 0x01429220, DS3ItemCategory.SHIELD_INFUSIBLE), + ("East-West Shield", 0x0142B930, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Sunlight Shield", 0x0142E040, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Crest Shield", 0x01430750, DS3ItemCategory.SHIELD), + ("Dragon Crest Shield", 0x01432E60, DS3ItemCategory.SHIELD), + ("Spider Shield", 0x01435570, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Grass Crest Shield", 0x01437C80, DS3ItemCategory.SHIELD), + ("Sunset Shield", 0x0143A390, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Golden Wing Crest Shield", 0x0143CAA0, DS3ItemCategory.SHIELD), + ("Blue Wooden Shield", 0x0143F1B0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Silver Eagle Kite Shield", 0x014418C0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Stone Parma", 0x01443FD0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Spirit Tree Crest Shield", 0x014466E0, DS3ItemCategory.SHIELD), + ("Porcine Shield", 0x01448DF0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Shield of Want", 0x0144B500, DS3ItemCategory.SHIELD), + ("Wargod Wooden Shield", 0x0144DC10, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Lothric Knight Greatshield", 0x014FD890, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Cathedral Knight Greatshield", 0x014FFFA0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Dragonslayer Greatshield", 0x01504DC0, DS3ItemCategory.SHIELD), + ("Moaning Shield", 0x015074D0, DS3ItemCategory.SHIELD), + ("Yhorm's Greatshield", 0x0150C2F0, DS3ItemCategory.SHIELD), + ("Black Iron Greatshield", 0x0150EA00, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Wolf Knight's Greatshield", 0x01511110, DS3ItemCategory.SHIELD), + ("Twin Dragon Greatshield", 0x01513820, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Greatshield of Glory", 0x01515F30, DS3ItemCategory.SHIELD), + ("Curse Ward Greatshield", 0x01518640, DS3ItemCategory.SHIELD), + ("Bonewheel Shield", 0x0151AD50, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Stone Greatshield", 0x0151D460, DS3ItemCategory.SHIELD_INFUSIBLE), + + # Armor + ("Fallen Knight Helm", 0x1121EAC0, DS3ItemCategory.ARMOR), + ("Fallen Knight Armor", 0x1121EEA8, DS3ItemCategory.ARMOR), + ("Fallen Knight Gauntlets", 0x1121F290, DS3ItemCategory.ARMOR), + ("Fallen Knight Trousers", 0x1121F678, DS3ItemCategory.ARMOR), + ("Knight Helm", 0x11298BE0, DS3ItemCategory.ARMOR), + ("Knight Armor", 0x11298FC8, DS3ItemCategory.ARMOR), + ("Knight Gauntlets", 0x112993B0, DS3ItemCategory.ARMOR), + ("Knight Leggings", 0x11299798, DS3ItemCategory.ARMOR), + ("Firelink Helm", 0x11406F40, DS3ItemCategory.ARMOR), + ("Firelink Armor", 0x11407328, DS3ItemCategory.ARMOR), + ("Firelink Gauntlets", 0x11407710, DS3ItemCategory.ARMOR), + ("Firelink Leggings", 0x11407AF8, DS3ItemCategory.ARMOR), + ("Sellsword Helm", 0x11481060, DS3ItemCategory.ARMOR), + ("Sellsword Armor", 0x11481448, DS3ItemCategory.ARMOR), + ("Sellsword Gauntlet", 0x11481830, DS3ItemCategory.ARMOR), + ("Sellsword Trousers", 0x11481C18, DS3ItemCategory.ARMOR), + ("Herald Helm", 0x114FB180, DS3ItemCategory.ARMOR), + ("Herald Armor", 0x114FB568, DS3ItemCategory.ARMOR), + ("Herald Gloves", 0x114FB950, DS3ItemCategory.ARMOR), + ("Herald Trousers", 0x114FBD38, DS3ItemCategory.ARMOR), + ("Sunless Veil", 0x115752A0, DS3ItemCategory.ARMOR), + ("Sunless Armor", 0x11575688, DS3ItemCategory.ARMOR), + ("Sunless Gauntlets", 0x11575A70, DS3ItemCategory.ARMOR), + ("Sunless Leggings", 0x11575E58, DS3ItemCategory.ARMOR), + ("Black Hand Hat", 0x115EF3C0, DS3ItemCategory.ARMOR), + ("Black Hand Armor", 0x115EF7A8, DS3ItemCategory.ARMOR), + ("Assassin Gloves", 0x115EFB90, DS3ItemCategory.ARMOR), + ("Assassin Trousers", 0x115EFF78, DS3ItemCategory.ARMOR), + ("Assassin Hood", 0x11607A60, DS3ItemCategory.ARMOR), + ("Assassin Armor", 0x11607E48, DS3ItemCategory.ARMOR), + ("Xanthous Crown", 0x116694E0, DS3ItemCategory.ARMOR), + ("Xanthous Overcoat", 0x116698C8, DS3ItemCategory.ARMOR), + ("Xanthous Gloves", 0x11669CB0, DS3ItemCategory.ARMOR), + ("Xanthous Trousers", 0x1166A098, DS3ItemCategory.ARMOR), + ("Northern Helm", 0x116E3600, DS3ItemCategory.ARMOR), + ("Northern Armor", 0x116E39E8, DS3ItemCategory.ARMOR), + ("Northern Gloves", 0x116E3DD0, DS3ItemCategory.ARMOR), + ("Northern Trousers", 0x116E41B8, DS3ItemCategory.ARMOR), + ("Morne's Helm", 0x1175D720, DS3ItemCategory.ARMOR), + ("Morne's Armor", 0x1175DB08, DS3ItemCategory.ARMOR), + ("Morne's Gauntlets", 0x1175DEF0, DS3ItemCategory.ARMOR), + ("Morne's Leggings", 0x1175E2D8, DS3ItemCategory.ARMOR), + ("Silver Mask", 0x117D7840, DS3ItemCategory.ARMOR), + ("Leonhard's Garb", 0x117D7C28, DS3ItemCategory.ARMOR), + ("Leonhard's Gauntlets", 0x117D8010, DS3ItemCategory.ARMOR), + ("Leonhard's Trousers", 0x117D83F8, DS3ItemCategory.ARMOR), + ("Sneering Mask", 0x11851960, DS3ItemCategory.ARMOR), + ("Pale Shade Robe", 0x11851D48, DS3ItemCategory.ARMOR), + ("Pale Shade Gloves", 0x11852130, DS3ItemCategory.ARMOR), + ("Pale Shade Trousers", 0x11852518, DS3ItemCategory.ARMOR), + ("Sunset Helm", 0x118CBA80, DS3ItemCategory.ARMOR), + ("Sunset Armor", 0x118CBE68, DS3ItemCategory.ARMOR), + ("Sunset Gauntlets", 0x118CC250, DS3ItemCategory.ARMOR), + ("Sunset Leggings", 0x118CC638, DS3ItemCategory.ARMOR), + ("Old Sage's Blindfold", 0x11945BA0, DS3ItemCategory.ARMOR), + ("Cornyx's Garb", 0x11945F88, DS3ItemCategory.ARMOR), + ("Cornyx's Wrap", 0x11946370, DS3ItemCategory.ARMOR), + ("Cornyx's Skirt", 0x11946758, DS3ItemCategory.ARMOR), + ("Executioner Helm", 0x119BFCC0, DS3ItemCategory.ARMOR), + ("Executioner Armor", 0x119C00A8, DS3ItemCategory.ARMOR), + ("Executioner Gauntlets", 0x119C0490, DS3ItemCategory.ARMOR), + ("Executioner Leggings", 0x119C0878, DS3ItemCategory.ARMOR), + ("Billed Mask", 0x11A39DE0, DS3ItemCategory.ARMOR), + ("Black Dress", 0x11A3A1C8, DS3ItemCategory.ARMOR), + ("Black Gauntlets", 0x11A3A5B0, DS3ItemCategory.ARMOR), + ("Black Leggings", 0x11A3A998, DS3ItemCategory.ARMOR), + ("Pyromancer Crown", 0x11AB3F00, DS3ItemCategory.ARMOR), + ("Pyromancer Garb", 0x11AB42E8, DS3ItemCategory.ARMOR), + ("Pyromancer Wrap", 0x11AB46D0, DS3ItemCategory.ARMOR), + ("Pyromancer Trousers", 0x11AB4AB8, DS3ItemCategory.ARMOR), + ("Court Sorcerer Hood", 0x11BA8140, DS3ItemCategory.ARMOR), + ("Court Sorcerer Robe", 0x11BA8528, DS3ItemCategory.ARMOR), + ("Court Sorcerer Gloves", 0x11BA8910, DS3ItemCategory.ARMOR), + ("Court Sorcerer Trousers", 0x11BA8CF8, DS3ItemCategory.ARMOR), + ("Sorcerer Hood", 0x11C9C380, DS3ItemCategory.ARMOR), + ("Sorcerer Robe", 0x11C9C768, DS3ItemCategory.ARMOR), + ("Sorcerer Gloves", 0x11C9CB50, DS3ItemCategory.ARMOR), + ("Sorcerer Trousers", 0x11C9CF38, DS3ItemCategory.ARMOR), + ("Clandestine Coat", 0x11CB4E08, DS3ItemCategory.ARMOR), + ("Cleric Hat", 0x11D905C0, DS3ItemCategory.ARMOR), + ("Cleric Blue Robe", 0x11D909A8, DS3ItemCategory.ARMOR), + ("Cleric Gloves", 0x11D90D90, DS3ItemCategory.ARMOR), + ("Cleric Trousers", 0x11D91178, DS3ItemCategory.ARMOR), + ("Steel Soldier Helm", 0x12625A00, DS3ItemCategory.ARMOR), + ("Deserter Armor", 0x12625DE8, DS3ItemCategory.ARMOR), + ("Deserter Trousers", 0x126265B8, DS3ItemCategory.ARMOR), + ("Thief Mask", 0x12656740, DS3ItemCategory.ARMOR), + ("Sage's Big Hat", 0x129020C0, DS3ItemCategory.ARMOR), + ("Aristocrat's Mask", 0x129F6300, DS3ItemCategory.ARMOR), + ("Jailer Robe", 0x129F66E8, DS3ItemCategory.ARMOR), + ("Jailer Gloves", 0x129F6AD0, DS3ItemCategory.ARMOR), + ("Jailer Trousers", 0x129F6EB8, DS3ItemCategory.ARMOR), + ("Grave Warden Hood", 0x12BDE780, DS3ItemCategory.ARMOR), + ("Grave Warden Robe", 0x12BDEB68, DS3ItemCategory.ARMOR), + ("Grave Warden Wrap", 0x12BDEF50, DS3ItemCategory.ARMOR), + ("Grave Warden Skirt", 0x12BDF338, DS3ItemCategory.ARMOR), + ("Worker Hat", 0x12CD29C0, DS3ItemCategory.ARMOR), + ("Worker Garb", 0x12CD2DA8, DS3ItemCategory.ARMOR), + ("Worker Gloves", 0x12CD3190, DS3ItemCategory.ARMOR), + ("Worker Trousers", 0x12CD3578, DS3ItemCategory.ARMOR), + ("Thrall Hood", 0x12D4CAE0, DS3ItemCategory.ARMOR), + ("Evangelist Hat", 0x12DC6C00, DS3ItemCategory.ARMOR), + ("Evangelist Robe", 0x12DC6FE8, DS3ItemCategory.ARMOR), + ("Evangelist Gloves", 0x12DC73D0, DS3ItemCategory.ARMOR), + ("Evangelist Trousers", 0x12DC77B8, DS3ItemCategory.ARMOR), + ("Scholar's Robe", 0x12E41108, DS3ItemCategory.ARMOR), + ("Winged Knight Helm", 0x12EBAE40, DS3ItemCategory.ARMOR), + ("Winged Knight Armor", 0x12EBB228, DS3ItemCategory.ARMOR), + ("Winged Knight Gauntlets", 0x12EBB610, DS3ItemCategory.ARMOR), + ("Winged Knight Leggings", 0x12EBB9F8, DS3ItemCategory.ARMOR), + ("Cathedral Knight Helm", 0x130291A0, DS3ItemCategory.ARMOR), + ("Cathedral Knight Armor", 0x13029588, DS3ItemCategory.ARMOR), + ("Cathedral Knight Gauntlets", 0x13029970, DS3ItemCategory.ARMOR), + ("Cathedral Knight Leggings", 0x13029D58, DS3ItemCategory.ARMOR), + ("Lothric Knight Helm", 0x13197500, DS3ItemCategory.ARMOR), + ("Lothric Knight Armor", 0x131978E8, DS3ItemCategory.ARMOR), + ("Lothric Knight Gauntlets", 0x13197CD0, DS3ItemCategory.ARMOR), + ("Lothric Knight Leggings", 0x131980B8, DS3ItemCategory.ARMOR), + ("Outrider Knight Helm", 0x1328B740, DS3ItemCategory.ARMOR), + ("Outrider Knight Armor", 0x1328BB28, DS3ItemCategory.ARMOR), + ("Outrider Knight Gauntlets", 0x1328BF10, DS3ItemCategory.ARMOR), + ("Outrider Knight Leggings", 0x1328C2F8, DS3ItemCategory.ARMOR), + ("Black Knight Helm", 0x1337F980, DS3ItemCategory.ARMOR), + ("Black Knight Armor", 0x1337FD68, DS3ItemCategory.ARMOR), + ("Black Knight Gauntlets", 0x13380150, DS3ItemCategory.ARMOR), + ("Black Knight Leggings", 0x13380538, DS3ItemCategory.ARMOR), + ("Dark Mask", 0x133F9AA0, DS3ItemCategory.ARMOR), + ("Dark Armor", 0x133F9E88, DS3ItemCategory.ARMOR), + ("Dark Gauntlets", 0x133FA270, DS3ItemCategory.ARMOR), + ("Dark Leggings", 0x133FA658, DS3ItemCategory.ARMOR), + ("Exile Mask", 0x13473BC0, DS3ItemCategory.ARMOR), + ("Exile Armor", 0x13473FA8, DS3ItemCategory.ARMOR), + ("Exile Gauntlets", 0x13474390, DS3ItemCategory.ARMOR), + ("Exile Leggings", 0x13474778, DS3ItemCategory.ARMOR), + ("Pontiff Knight Crown", 0x13567E00, DS3ItemCategory.ARMOR), + ("Pontiff Knight Armor", 0x135681E8, DS3ItemCategory.ARMOR), + ("Pontiff Knight Gauntlets", 0x135685D0, DS3ItemCategory.ARMOR), + ("Pontiff Knight Leggings", 0x135689B8, DS3ItemCategory.ARMOR), + ("Golden Crown", 0x1365C040, DS3ItemCategory.ARMOR), + ("Dragonscale Armor", 0x1365C428, DS3ItemCategory.ARMOR), + ("Golden Bracelets", 0x1365C810, DS3ItemCategory.ARMOR), + ("Dragonscale Waistcloth", 0x1365CBF8, DS3ItemCategory.ARMOR), + ("Wolnir's Crown", 0x136D6160, DS3ItemCategory.ARMOR), + ("Undead Legion Helm", 0x13750280, DS3ItemCategory.ARMOR), + ("Undead Legion Armor", 0x13750668, DS3ItemCategory.ARMOR), + ("Undead Legion Gauntlets", 0x13750A50, DS3ItemCategory.ARMOR), + ("Undead Legion Leggings", 0x13750E38, DS3ItemCategory.ARMOR), + ("Fire Witch Helm", 0x13938700, DS3ItemCategory.ARMOR), + ("Fire Witch Armor", 0x13938AE8, DS3ItemCategory.ARMOR), + ("Fire Witch Gauntlets", 0x13938ED0, DS3ItemCategory.ARMOR), + ("Fire Witch Leggings", 0x139392B8, DS3ItemCategory.ARMOR), + ("Lorian's Helm", 0x13A2C940, DS3ItemCategory.ARMOR), + ("Lorian's Armor", 0x13A2CD28, DS3ItemCategory.ARMOR), + ("Lorian's Gauntlets", 0x13A2D110, DS3ItemCategory.ARMOR), + ("Lorian's Leggings", 0x13A2D4F8, DS3ItemCategory.ARMOR), + ("Hood of Prayer", 0x13AA6A60, DS3ItemCategory.ARMOR), + ("Robe of Prayer", 0x13AA6E48, DS3ItemCategory.ARMOR), + ("Skirt of Prayer", 0x13AA7618, DS3ItemCategory.ARMOR), + ("Dancer's Crown", 0x13C14DC0, DS3ItemCategory.ARMOR), + ("Dancer's Armor", 0x13C151A8, DS3ItemCategory.ARMOR), + ("Dancer's Gauntlets", 0x13C15590, DS3ItemCategory.ARMOR), + ("Dancer's Leggings", 0x13C15978, DS3ItemCategory.ARMOR), + ("Gundyr's Helm", 0x13D09000, DS3ItemCategory.ARMOR), + ("Gundyr's Armor", 0x13D093E8, DS3ItemCategory.ARMOR), + ("Gundyr's Gauntlets", 0x13D097D0, DS3ItemCategory.ARMOR), + ("Gundyr's Leggings", 0x13D09BB8, DS3ItemCategory.ARMOR), + ("Archdeacon White Crown", 0x13EF1480, DS3ItemCategory.ARMOR), + ("Archdeacon Holy Garb", 0x13EF1868, DS3ItemCategory.ARMOR), + ("Archdeacon Skirt", 0x13EF2038, DS3ItemCategory.ARMOR), + ("Deacon Robe", 0x13F6B988, DS3ItemCategory.ARMOR), + ("Deacon Skirt", 0x13F6C158, DS3ItemCategory.ARMOR), + ("Fire Keeper Robe", 0x140D9CE8, DS3ItemCategory.ARMOR), + ("Fire Keeper Gloves", 0x140DA0D0, DS3ItemCategory.ARMOR), + ("Fire Keeper Skirt", 0x140DA4B8, DS3ItemCategory.ARMOR), + ("Chain Helm", 0x142C1D80, DS3ItemCategory.ARMOR), + ("Chain Armor", 0x142C2168, DS3ItemCategory.ARMOR), + ("Leather Gauntlets", 0x142C2550, DS3ItemCategory.ARMOR), + ("Chain Leggings", 0x142C2938, DS3ItemCategory.ARMOR), + ("Nameless Knight Helm", 0x143B5FC0, DS3ItemCategory.ARMOR), + ("Nameless Knight Armor", 0x143B63A8, DS3ItemCategory.ARMOR), + ("Nameless Knight Gauntlets", 0x143B6790, DS3ItemCategory.ARMOR), + ("Nameless Knight Leggings", 0x143B6B78, DS3ItemCategory.ARMOR), + ("Elite Knight Helm", 0x144AA200, DS3ItemCategory.ARMOR), + ("Elite Knight Armor", 0x144AA5E8, DS3ItemCategory.ARMOR), + ("Elite Knight Gauntlets", 0x144AA9D0, DS3ItemCategory.ARMOR), + ("Elite Knight Leggings", 0x144AADB8, DS3ItemCategory.ARMOR), + ("Faraam Helm", 0x1459E440, DS3ItemCategory.ARMOR), + ("Faraam Armor", 0x1459E828, DS3ItemCategory.ARMOR), + ("Faraam Gauntlets", 0x1459EC10, DS3ItemCategory.ARMOR), + ("Faraam Boots", 0x1459EFF8, DS3ItemCategory.ARMOR), + ("Catarina Helm", 0x14692680, DS3ItemCategory.ARMOR), + ("Catarina Armor", 0x14692A68, DS3ItemCategory.ARMOR), + ("Catarina Gauntlets", 0x14692E50, DS3ItemCategory.ARMOR), + ("Catarina Leggings", 0x14693238, DS3ItemCategory.ARMOR), + ("Standard Helm", 0x1470C7A0, DS3ItemCategory.ARMOR), + ("Hard Leather Armor", 0x1470CB88, DS3ItemCategory.ARMOR), + ("Hard Leather Gauntlets", 0x1470CF70, DS3ItemCategory.ARMOR), + ("Hard Leather Boots", 0x1470D358, DS3ItemCategory.ARMOR), + ("Havel's Helm", 0x147868C0, DS3ItemCategory.ARMOR), + ("Havel's Armor", 0x14786CA8, DS3ItemCategory.ARMOR), + ("Havel's Gauntlets", 0x14787090, DS3ItemCategory.ARMOR), + ("Havel's Leggings", 0x14787478, DS3ItemCategory.ARMOR), + ("Brigand Hood", 0x148009E0, DS3ItemCategory.ARMOR), + ("Brigand Armor", 0x14800DC8, DS3ItemCategory.ARMOR), + ("Brigand Gauntlets", 0x148011B0, DS3ItemCategory.ARMOR), + ("Brigand Trousers", 0x14801598, DS3ItemCategory.ARMOR), + ("Pharis's Hat", 0x1487AB00, DS3ItemCategory.ARMOR), + ("Leather Armor", 0x1487AEE8, DS3ItemCategory.ARMOR), + ("Leather Gloves", 0x1487B2D0, DS3ItemCategory.ARMOR), + ("Leather Boots", 0x1487B6B8, DS3ItemCategory.ARMOR), + ("Ragged Mask", 0x148F4C20, DS3ItemCategory.ARMOR), + ("Master's Attire", 0x148F5008, DS3ItemCategory.ARMOR), + ("Master's Gloves", 0x148F53F0, DS3ItemCategory.ARMOR), + ("Loincloth", 0x148F57D8, DS3ItemCategory.ARMOR), + ("Old Sorcerer Hat", 0x1496ED40, DS3ItemCategory.ARMOR), + ("Old Sorcerer Coat", 0x1496F128, DS3ItemCategory.ARMOR), + ("Old Sorcerer Gauntlets", 0x1496F510, DS3ItemCategory.ARMOR), + ("Old Sorcerer Boots", 0x1496F8F8, DS3ItemCategory.ARMOR), + ("Conjurator Hood", 0x149E8E60, DS3ItemCategory.ARMOR), + ("Conjurator Robe", 0x149E9248, DS3ItemCategory.ARMOR), + ("Conjurator Manchettes", 0x149E9630, DS3ItemCategory.ARMOR), + ("Conjurator Boots", 0x149E9A18, DS3ItemCategory.ARMOR), + ("Black Leather Armor", 0x14A63368, DS3ItemCategory.ARMOR), + ("Black Leather Gloves", 0x14A63750, DS3ItemCategory.ARMOR), + ("Black Leather Boots", 0x14A63B38, DS3ItemCategory.ARMOR), + ("Symbol of Avarice", 0x14ADD0A0, DS3ItemCategory.ARMOR), + ("Creighton's Steel Mask", 0x14B571C0, DS3ItemCategory.ARMOR), + ("Mirrah Chain Mail", 0x14B575A8, DS3ItemCategory.ARMOR), + ("Mirrah Chain Gloves", 0x14B57990, DS3ItemCategory.ARMOR), + ("Mirrah Chain Leggings", 0x14B57D78, DS3ItemCategory.ARMOR), + ("Maiden Hood", 0x14BD12E0, DS3ItemCategory.ARMOR), + ("Maiden Robe", 0x14BD16C8, DS3ItemCategory.ARMOR), + ("Maiden Gloves", 0x14BD1AB0, DS3ItemCategory.ARMOR), + ("Maiden Skirt", 0x14BD1E98, DS3ItemCategory.ARMOR), + ("Alva Helm", 0x14C4B400, DS3ItemCategory.ARMOR), + ("Alva Armor", 0x14C4B7E8, DS3ItemCategory.ARMOR), + ("Alva Gauntlets", 0x14C4BBD0, DS3ItemCategory.ARMOR), + ("Alva Leggings", 0x14C4BFB8, DS3ItemCategory.ARMOR), + ("Shadow Mask", 0x14D3F640, DS3ItemCategory.ARMOR), + ("Shadow Garb", 0x14D3FA28, DS3ItemCategory.ARMOR), + ("Shadow Gauntlets", 0x14D3FE10, DS3ItemCategory.ARMOR), + ("Shadow Leggings", 0x14D401F8, DS3ItemCategory.ARMOR), + ("Eastern Helm", 0x14E33880, DS3ItemCategory.ARMOR), + ("Eastern Armor", 0x14E33C68, DS3ItemCategory.ARMOR), + ("Eastern Gauntlets", 0x14E34050, DS3ItemCategory.ARMOR), + ("Eastern Leggings", 0x14E34438, DS3ItemCategory.ARMOR), + ("Helm of Favor", 0x14F27AC0, DS3ItemCategory.ARMOR), + ("Embraced Armor of Favor", 0x14F27EA8, DS3ItemCategory.ARMOR), + ("Gauntlets of Favor", 0x14F28290, DS3ItemCategory.ARMOR), + ("Leggings of Favor", 0x14F28678, DS3ItemCategory.ARMOR), + ("Brass Helm", 0x1501BD00, DS3ItemCategory.ARMOR), + ("Brass Armor", 0x1501C0E8, DS3ItemCategory.ARMOR), + ("Brass Gauntlets", 0x1501C4D0, DS3ItemCategory.ARMOR), + ("Brass Leggings", 0x1501C8B8, DS3ItemCategory.ARMOR), + ("Silver Knight Helm", 0x1510FF40, DS3ItemCategory.ARMOR), + ("Silver Knight Armor", 0x15110328, DS3ItemCategory.ARMOR), + ("Silver Knight Gauntlets", 0x15110710, DS3ItemCategory.ARMOR), + ("Silver Knight Leggings", 0x15110AF8, DS3ItemCategory.ARMOR), + ("Lucatiel's Mask", 0x15204180, DS3ItemCategory.ARMOR), + ("Mirrah Vest", 0x15204568, DS3ItemCategory.ARMOR), + ("Mirrah Gloves", 0x15204950, DS3ItemCategory.ARMOR), + ("Mirrah Trousers", 0x15204D38, DS3ItemCategory.ARMOR), + ("Iron Helm", 0x152F83C0, DS3ItemCategory.ARMOR), + ("Armor of the Sun", 0x152F87A8, DS3ItemCategory.ARMOR), + ("Iron Bracelets", 0x152F8B90, DS3ItemCategory.ARMOR), + ("Iron Leggings", 0x152F8F78, DS3ItemCategory.ARMOR), + ("Drakeblood Helm", 0x153EC600, DS3ItemCategory.ARMOR), + ("Drakeblood Armor", 0x153EC9E8, DS3ItemCategory.ARMOR), + ("Drakeblood Gauntlets", 0x153ECDD0, DS3ItemCategory.ARMOR), + ("Drakeblood Leggings", 0x153ED1B8, DS3ItemCategory.ARMOR), + ("Drang Armor", 0x154E0C28, DS3ItemCategory.ARMOR), + ("Drang Gauntlets", 0x154E1010, DS3ItemCategory.ARMOR), + ("Drang Shoes", 0x154E13F8, DS3ItemCategory.ARMOR), + ("Black Iron Helm", 0x155D4A80, DS3ItemCategory.ARMOR), + ("Black Iron Armor", 0x155D4E68, DS3ItemCategory.ARMOR), + ("Black Iron Gauntlets", 0x155D5250, DS3ItemCategory.ARMOR), + ("Black Iron Leggings", 0x155D5638, DS3ItemCategory.ARMOR), + ("Painting Guardian Hood", 0x156C8CC0, DS3ItemCategory.ARMOR), + ("Painting Guardian Gown", 0x156C90A8, DS3ItemCategory.ARMOR), + ("Painting Guardian Gloves", 0x156C9490, DS3ItemCategory.ARMOR), + ("Painting Guardian Waistcloth", 0x156C9878, DS3ItemCategory.ARMOR), + ("Wolf Knight Helm", 0x157BCF00, DS3ItemCategory.ARMOR), + ("Wolf Knight Armor", 0x157BD2E8, DS3ItemCategory.ARMOR), + ("Wolf Knight Gauntlets", 0x157BD6D0, DS3ItemCategory.ARMOR), + ("Wolf Knight Leggings", 0x157BDAB8, DS3ItemCategory.ARMOR), + ("Dragonslayer Helm", 0x158B1140, DS3ItemCategory.ARMOR), + ("Dragonslayer Armor", 0x158B1528, DS3ItemCategory.ARMOR), + ("Dragonslayer Gauntlets", 0x158B1910, DS3ItemCategory.ARMOR), + ("Dragonslayer Leggings", 0x158B1CF8, DS3ItemCategory.ARMOR), + ("Smough's Helm", 0x159A5380, DS3ItemCategory.ARMOR), + ("Smough's Armor", 0x159A5768, DS3ItemCategory.ARMOR), + ("Smough's Gauntlets", 0x159A5B50, DS3ItemCategory.ARMOR), + ("Smough's Leggings", 0x159A5F38, DS3ItemCategory.ARMOR), + ("Helm of Thorns", 0x15B8D800, DS3ItemCategory.ARMOR), + ("Armor of Thorns", 0x15B8DBE8, DS3ItemCategory.ARMOR), + ("Gauntlets of Thorns", 0x15B8DFD0, DS3ItemCategory.ARMOR), + ("Leggings of Thorns", 0x15B8E3B8, DS3ItemCategory.ARMOR), + ("Crown of Dusk", 0x15D75C80, DS3ItemCategory.ARMOR), + ("Antiquated Dress", 0x15D76068, DS3ItemCategory.ARMOR), + ("Antiquated Gloves", 0x15D76450, DS3ItemCategory.ARMOR), + ("Antiquated Skirt", 0x15D76838, DS3ItemCategory.ARMOR), + ("Karla's Pointed Hat", 0x15E69EC0, DS3ItemCategory.ARMOR), + ("Karla's Coat", 0x15E6A2A8, DS3ItemCategory.ARMOR), + ("Karla's Gloves", 0x15E6A690, DS3ItemCategory.ARMOR), + ("Karla's Trousers", 0x15E6AA78, DS3ItemCategory.ARMOR), + + # Covenants + ("Blade of the Darkmoon", 0x20002710, DS3ItemCategory.SKIP), + ("Watchdogs of Farron", 0x20002724, DS3ItemCategory.SKIP), + ("Aldrich Faithful", 0x2000272E, DS3ItemCategory.SKIP), + ("Warrior of Sunlight", 0x20002738, DS3ItemCategory.SKIP), + ("Mound-makers", 0x20002742, DS3ItemCategory.SKIP), + ("Way of Blue", 0x2000274C, DS3ItemCategory.SKIP), + ("Blue Sentinels", 0x20002756, DS3ItemCategory.SKIP), + ("Rosaria's Fingers", 0x20002760, DS3ItemCategory.SKIP), + + # Rings + ("Life Ring", 0x20004E20, DS3ItemCategory.RING), + ("Life Ring+1", 0x20004E21, DS3ItemCategory.RING), + ("Life Ring+2", 0x20004E22, DS3ItemCategory.RING), + ("Life Ring+3", 0x20004E23, DS3ItemCategory.RING), + ("Chloranthy Ring", 0x20004E2A, DS3ItemCategory.RING), + ("Chloranthy Ring+1", 0x20004E2B, DS3ItemCategory.RING), + ("Chloranthy Ring+2", 0x20004E2C, DS3ItemCategory.RING), + ("Havel's Ring", 0x20004E34, DS3ItemCategory.RING), + ("Havel's Ring+1", 0x20004E35, DS3ItemCategory.RING), + ("Havel's Ring+2", 0x20004E36, DS3ItemCategory.RING), + ("Ring of Favor", 0x20004E3E, DS3ItemCategory.RING), + ("Ring of Favor+1", 0x20004E3F, DS3ItemCategory.RING), + ("Ring of Favor+2", 0x20004E40, DS3ItemCategory.RING), + ("Ring of Steel Protection", 0x20004E48, DS3ItemCategory.RING), + ("Ring of Steel Protection+1", 0x20004E49, DS3ItemCategory.RING), + ("Ring of Steel Protection+2", 0x20004E4A, DS3ItemCategory.RING), + ("Flame Stoneplate Ring", 0x20004E52, DS3ItemCategory.RING), + ("Flame Stoneplate Ring+1", 0x20004E53, DS3ItemCategory.RING), + ("Flame Stoneplate Ring+2", 0x20004E54, DS3ItemCategory.RING), + ("Thunder Stoneplate Ring", 0x20004E5C, DS3ItemCategory.RING), + ("Thunder Stoneplate Ring+1", 0x20004E5D, DS3ItemCategory.RING), + ("Thunder Stoneplate Ring+2", 0x20004E5E, DS3ItemCategory.RING), + ("Magic Stoneplate Ring", 0x20004E66, DS3ItemCategory.RING), + ("Magic Stoneplate Ring+1", 0x20004E67, DS3ItemCategory.RING), + ("Magic Stoneplate Ring+2", 0x20004E68, DS3ItemCategory.RING), + ("Dark Stoneplate Ring", 0x20004E70, DS3ItemCategory.RING), + ("Dark Stoneplate Ring+1", 0x20004E71, DS3ItemCategory.RING), + ("Dark Stoneplate Ring+2", 0x20004E72, DS3ItemCategory.RING), + ("Speckled Stoneplate Ring", 0x20004E7A, DS3ItemCategory.RING), + ("Speckled Stoneplate Ring+1", 0x20004E7B, DS3ItemCategory.RING), + ("Bloodbite Ring", 0x20004E84, DS3ItemCategory.RING), + ("Bloodbite Ring+1", 0x20004E85, DS3ItemCategory.RING), + ("Poisonbite Ring", 0x20004E8E, DS3ItemCategory.RING), + ("Poisonbite Ring+1", 0x20004E8F, DS3ItemCategory.RING), + ("Cursebite Ring", 0x20004E98, DS3ItemCategory.RING), + ("Fleshbite Ring", 0x20004EA2, DS3ItemCategory.RING), + ("Fleshbite Ring+1", 0x20004EA3, DS3ItemCategory.RING), + ("Wood Grain Ring", 0x20004EAC, DS3ItemCategory.RING), + ("Wood Grain Ring+1", 0x20004EAD, DS3ItemCategory.RING), + ("Wood Grain Ring+2", 0x20004EAE, DS3ItemCategory.RING), + ("Scholar Ring", 0x20004EB6, DS3ItemCategory.RING), + ("Priestess Ring", 0x20004EC0, DS3ItemCategory.RING), + ("Red Tearstone Ring", 0x20004ECA, DS3ItemCategory.RING), + ("Blue Tearstone Ring", 0x20004ED4, DS3ItemCategory.RING), + ("Wolf Ring", 0x20004EDE, DS3ItemCategory.RING), + ("Wolf Ring+1", 0x20004EDF, DS3ItemCategory.RING), + ("Wolf Ring+2", 0x20004EE0, DS3ItemCategory.RING), + ("Leo Ring", 0x20004EE8, DS3ItemCategory.RING), + ("Ring of Sacrifice", 0x20004EF2, DS3ItemCategory.RING), + ("Young Dragon Ring", 0x20004F06, DS3ItemCategory.RING), + ("Bellowing Dragoncrest Ring", 0x20004F07, DS3ItemCategory.RING), + ("Great Swamp Ring", 0x20004F10, DS3ItemCategory.RING), + ("Witch's Ring", 0x20004F11, DS3ItemCategory.RING), + ("Morne's Ring", 0x20004F1A, DS3ItemCategory.RING), + ("Ring of the Sun's First Born", 0x20004F1B, DS3ItemCategory.RING), + ("Lingering Dragoncrest Ring", 0x20004F2E, DS3ItemCategory.RING), + ("Lingering Dragoncrest Ring+1", 0x20004F2F, DS3ItemCategory.RING), + ("Lingering Dragoncrest Ring+2", 0x20004F30, DS3ItemCategory.RING), + ("Sage Ring", 0x20004F38, DS3ItemCategory.RING), + ("Sage Ring+1", 0x20004F39, DS3ItemCategory.RING), + ("Sage Ring+2", 0x20004F3A, DS3ItemCategory.RING), + ("Slumbering Dragoncrest Ring", 0x20004F42, DS3ItemCategory.RING), + ("Dusk Crown Ring", 0x20004F4C, DS3ItemCategory.RING), + ("Saint's Ring", 0x20004F56, DS3ItemCategory.RING), + ("Deep Ring", 0x20004F60, DS3ItemCategory.RING), + ("Darkmoon Ring", 0x20004F6A, DS3ItemCategory.RING), + ("Hawk Ring", 0x20004F92, DS3ItemCategory.RING), + ("Hornet Ring", 0x20004F9C, DS3ItemCategory.RING), + ("Covetous Gold Serpent Ring", 0x20004FA6, DS3ItemCategory.RING), + ("Covetous Gold Serpent Ring+1", 0x20004FA7, DS3ItemCategory.RING), + ("Covetous Gold Serpent Ring+2", 0x20004FA8, DS3ItemCategory.RING), + ("Covetous Silver Serpent Ring", 0x20004FB0, DS3ItemCategory.RING), + ("Covetous Silver Serpent Ring+1", 0x20004FB1, DS3ItemCategory.RING), + ("Covetous Silver Serpent Ring+2", 0x20004FB2, DS3ItemCategory.RING), + ("Sun Princess Ring", 0x20004FBA, DS3ItemCategory.RING), + ("Silvercat Ring", 0x20004FC4, DS3ItemCategory.RING), + ("Skull Ring", 0x20004FCE, DS3ItemCategory.RING), + ("Untrue White Ring", 0x20004FD8, DS3ItemCategory.RING), + ("Carthus Milkring", 0x20004FE2, DS3ItemCategory.RING), + ("Knight's Ring", 0x20004FEC, DS3ItemCategory.RING), + ("Hunter's Ring", 0x20004FF6, DS3ItemCategory.RING), + ("Knight Slayer's Ring", 0x20005000, DS3ItemCategory.RING), + ("Magic Clutch Ring", 0x2000500A, DS3ItemCategory.RING), + ("Lightning Clutch Ring", 0x20005014, DS3ItemCategory.RING), + ("Fire Clutch Ring", 0x2000501E, DS3ItemCategory.RING), + ("Dark Clutch Ring", 0x20005028, DS3ItemCategory.RING), + ("Flynn's Ring", 0x2000503C, DS3ItemCategory.RING), + ("Prisoner's Chain", 0x20005046, DS3ItemCategory.RING), + ("Untrue Dark Ring", 0x20005050, DS3ItemCategory.RING), + ("Obscuring Ring", 0x20005064, DS3ItemCategory.RING), + ("Ring of the Evil Eye", 0x2000506E, DS3ItemCategory.RING), + ("Ring of the Evil Eye+1", 0x2000506F, DS3ItemCategory.RING), + ("Ring of the Evil Eye+2", 0x20005070, DS3ItemCategory.RING), + ("Calamity Ring", 0x20005078, DS3ItemCategory.RING), + ("Farron Ring", 0x20005082, DS3ItemCategory.RING), + ("Aldrich's Ruby", 0x2000508C, DS3ItemCategory.RING), + ("Aldrich's Sapphire", 0x20005096, DS3ItemCategory.RING), + ("Lloyd's Sword Ring", 0x200050B4, DS3ItemCategory.RING), + ("Lloyd's Shield Ring", 0x200050BE, DS3ItemCategory.RING), + ("Estus Ring", 0x200050DC, DS3ItemCategory.RING), + ("Ashen Estus Ring", 0x200050E6, DS3ItemCategory.RING), + ("Carthus Bloodring", 0x200050FA, DS3ItemCategory.RING), + ("Reversal Ring", 0x20005104, DS3ItemCategory.RING), + ("Pontiff's Right Eye", 0x2000510E, DS3ItemCategory.RING), + ("Pontiff's Left Eye", 0x20005136, DS3ItemCategory.RING), + ("Dragonscale Ring", 0x2000515E, DS3ItemCategory.RING), + + # Items + ("Roster of Knights", 0x4000006C, DS3ItemCategory.SKIP), + ("Cracked Red Eye Orb", 0x4000006F, DS3ItemCategory.SKIP), + ("Divine Blessing", 0x400000F0, DS3ItemCategory.MISC), + ("Hidden Blessing", 0x400000F1, DS3ItemCategory.MISC), + ("Silver Pendant", 0x400000F2, DS3ItemCategory.SKIP), + ("Green Blossom", 0x40000104, DS3ItemCategory.MISC), + ("Budding Green Blossom", 0x40000106, DS3ItemCategory.MISC), + ("Bloodred Moss Clump", 0x4000010E, DS3ItemCategory.SKIP), + ("Purple Moss Clump", 0x4000010F, DS3ItemCategory.MISC), + ("Blooming Purple Moss Clump", 0x40000110, DS3ItemCategory.SKIP), + ("Purging Stone", 0x40000112, DS3ItemCategory.SKIP), + ("Rime-blue Moss Clump", 0x40000114, DS3ItemCategory.SKIP), + ("Repair Powder", 0x40000118, DS3ItemCategory.MISC), + ("Kukri", 0x40000122, DS3ItemCategory.SKIP), + ("Firebomb", 0x40000124, DS3ItemCategory.MISC), + ("Dung Pie", 0x40000125, DS3ItemCategory.SKIP), + ("Alluring Skull", 0x40000126, DS3ItemCategory.MISC), + ("Undead Hunter Charm", 0x40000128, DS3ItemCategory.MISC), + ("Black Firebomb", 0x40000129, DS3ItemCategory.MISC), + ("Rope Firebomb", 0x4000012B, DS3ItemCategory.MISC), + ("Lightning Urn", 0x4000012C, DS3ItemCategory.MISC), + ("Rope Black Firebomb", 0x4000012E, DS3ItemCategory.MISC), + ("Stalk Dung Pie", 0x4000012F, DS3ItemCategory.SKIP), + ("Duel Charm", 0x40000130, DS3ItemCategory.MISC), + ("Throwing Knife", 0x40000136, DS3ItemCategory.MISC), + ("Poison Throwing Knife", 0x40000137, DS3ItemCategory.MISC), + ("Charcoal Pine Resin", 0x4000014A, DS3ItemCategory.MISC), + ("Gold Pine Resin", 0x4000014B, DS3ItemCategory.MISC), + ("Human Pine Resin", 0x4000014E, DS3ItemCategory.MISC), + ("Carthus Rouge", 0x4000014F, DS3ItemCategory.MISC), + ("Pale Pine Resin", 0x40000150, DS3ItemCategory.MISC), + ("Charcoal Pine Bundle", 0x40000154, DS3ItemCategory.MISC), + ("Gold Pine Bundle", 0x40000155, DS3ItemCategory.MISC), + ("Rotten Pine Resin", 0x40000157, DS3ItemCategory.MISC), + ("Homeward Bone", 0x4000015E, DS3ItemCategory.MISC), + ("Coiled Sword Fragment", 0x4000015F, DS3ItemCategory.MISC), + ("Wolf's Blood Swordgrass", 0x4000016E, DS3ItemCategory.MISC), + ("Human Dregs", 0x4000016F, DS3ItemCategory.SKIP), + ("Forked Pale Tongue", 0x40000170, DS3ItemCategory.MISC), + ("Proof of a Concord Well Kept", 0x40000171, DS3ItemCategory.SKIP), + ("Prism Stone", 0x40000172, DS3ItemCategory.SKIP), + ("Binoculars", 0x40000173, DS3ItemCategory.MISC), + ("Proof of a Concord Kept", 0x40000174, DS3ItemCategory.SKIP), + ("Pale Tongue", 0x40000175, DS3ItemCategory.MISC), + ("Vertebra Shackle", 0x40000176, DS3ItemCategory.SKIP), + ("Sunlight Medal", 0x40000177, DS3ItemCategory.SKIP), + ("Dragon Head Stone", 0x40000179, DS3ItemCategory.MISC), + ("Dragon Torso Stone", 0x4000017A, DS3ItemCategory.MISC), + ("Rubbish", 0x4000017C, DS3ItemCategory.SKIP), + ("Dried Finger", 0x40000181, DS3ItemCategory.SKIP), + ("Twinkling Dragon Head Stone", 0x40000183, DS3ItemCategory.MISC), + ("Twinkling Dragon Torso Stone", 0x40000184, DS3ItemCategory.MISC), + ("Fire Keeper Soul", 0x40000186, DS3ItemCategory.MISC), + ("Fading Soul", 0x40000190, DS3ItemCategory.MISC), + ("Soul of a Deserted Corpse", 0x40000191, DS3ItemCategory.MISC), + ("Large Soul of a Deserted Corpse", 0x40000192, DS3ItemCategory.MISC), + ("Soul of an Unknown Traveler", 0x40000193, DS3ItemCategory.MISC), + ("Large Soul of an Unknown Traveler", 0x40000194, DS3ItemCategory.MISC), + ("Soul of a Nameless Soldier", 0x40000195, DS3ItemCategory.MISC), + ("Large Soul of a Nameless Soldier", 0x40000196, DS3ItemCategory.MISC), + ("Soul of a Weary Warrior", 0x40000197, DS3ItemCategory.MISC), + ("Large Soul of a Weary Warrior", 0x40000198, DS3ItemCategory.MISC), + ("Soul of a Crestfallen Knight", 0x40000199, DS3ItemCategory.MISC), + ("Large Soul of a Crestfallen Knight", 0x4000019A, DS3ItemCategory.MISC), + ("Soul of a Proud Paladin", 0x4000019B, DS3ItemCategory.MISC), + ("Large Soul of a Proud Paladin", 0x4000019C, DS3ItemCategory.MISC), + ("Soul of an Intrepid Hero", 0x4000019D, DS3ItemCategory.MISC), + ("Large Soul of an Intrepid Hero", 0x4000019E, DS3ItemCategory.MISC), + ("Soul of a Seasoned Warrior", 0x4000019F, DS3ItemCategory.MISC), + ("Large Soul of a Seasoned Warrior", 0x400001A0, DS3ItemCategory.MISC), + ("Soul of an Old Hand", 0x400001A1, DS3ItemCategory.MISC), + ("Soul of a Venerable Old Hand", 0x400001A2, DS3ItemCategory.MISC), + ("Soul of a Champion", 0x400001A3, DS3ItemCategory.MISC), + ("Soul of a Great Champion", 0x400001A4, DS3ItemCategory.MISC), + ("Seed of a Giant Tree", 0x400001B8, DS3ItemCategory.SKIP), + ("Young White Branch", 0x400001C6, DS3ItemCategory.SKIP), + ("Rusted Coin", 0x400001C7, DS3ItemCategory.MISC), + ("Siegbräu", 0x400001C8, DS3ItemCategory.SKIP), + ("Rusted Gold Coin", 0x400001C9, DS3ItemCategory.MISC), + ("Blue Bug Pellet", 0x400001CA, DS3ItemCategory.SKIP), + ("Red Bug Pellet", 0x400001CB, DS3ItemCategory.SKIP), + ("Yellow Bug Pellet", 0x400001CC, DS3ItemCategory.SKIP), + ("Black Bug Pellet", 0x400001CD, DS3ItemCategory.SKIP), + ("Young White Branch", 0x400001CF, DS3ItemCategory.SKIP), + ("Dark Sigil", 0x400001EA, DS3ItemCategory.SKIP), + ("Ember", 0x400001F4, DS3ItemCategory.MISC), + ("Soul of Champion Gundyr", 0x400002C8, DS3ItemCategory.BOSS), + ("Soul of the Dancer", 0x400002CA, DS3ItemCategory.BOSS), + ("Soul of a Crystal Sage", 0x400002CB, DS3ItemCategory.BOSS), + ("Soul of the Blood of the Wolf", 0x400002CD, DS3ItemCategory.BOSS), + ("Soul of Consumed Oceiros", 0x400002CE, DS3ItemCategory.BOSS), + ("Soul of Boreal Valley Vordt", 0x400002CF, DS3ItemCategory.BOSS), + ("Soul of the Old Demon King", 0x400002D0, DS3ItemCategory.BOSS), + ("Soul of Dragonslayer Armour", 0x400002D1, DS3ItemCategory.BOSS), + ("Soul of the Nameless King", 0x400002D2, DS3ItemCategory.BOSS), + ("Soul of Pontiff Sulyvahn", 0x400002D4, DS3ItemCategory.BOSS), + ("Soul of Aldrich", 0x400002D5, DS3ItemCategory.BOSS), + ("Soul of High Lord Wolnir", 0x400002D6, DS3ItemCategory.BOSS), + ("Soul of the Rotted Greatwood", 0x400002D7, DS3ItemCategory.BOSS), + ("Soul of Rosaria", 0x400002D8, DS3ItemCategory.MISC), + ("Soul of the Deacons of the Deep", 0x400002D9, DS3ItemCategory.BOSS), + ("Soul of the Twin Princes", 0x400002DB, DS3ItemCategory.BOSS), + ("Soul of Yhorm the Giant", 0x400002DC, DS3ItemCategory.BOSS), + ("Soul of the Lords", 0x400002DD, DS3ItemCategory.MISC), + ("Soul of a Demon", 0x400002E3, DS3ItemCategory.BOSS), + ("Soul of a Stray Demon", 0x400002E7, DS3ItemCategory.BOSS), + ("Titanite Shard", 0x400003E8, DS3ItemCategory.MISC), + ("Large Titanite Shard", 0x400003E9, DS3ItemCategory.MISC), + ("Titanite Chunk", 0x400003EA, DS3ItemCategory.MISC), + ("Titanite Slab", 0x400003EB, DS3ItemCategory.MISC), + ("Titanite Scale", 0x400003FC, DS3ItemCategory.MISC), + ("Twinkling Titanite", 0x40000406, DS3ItemCategory.MISC), + ("Heavy Gem", 0x4000044C, DS3ItemCategory.MISC), + ("Sharp Gem", 0x40000456, DS3ItemCategory.MISC), + ("Refined Gem", 0x40000460, DS3ItemCategory.MISC), + ("Crystal Gem", 0x4000046A, DS3ItemCategory.MISC), + ("Simple Gem", 0x40000474, DS3ItemCategory.MISC), + ("Fire Gem", 0x4000047E, DS3ItemCategory.MISC), + ("Chaos Gem", 0x40000488, DS3ItemCategory.MISC), + ("Lightning Gem", 0x40000492, DS3ItemCategory.MISC), + ("Deep Gem", 0x4000049C, DS3ItemCategory.MISC), + ("Dark Gem", 0x400004A6, DS3ItemCategory.MISC), + ("Poison Gem", 0x400004B0, DS3ItemCategory.MISC), + ("Blood Gem", 0x400004BA, DS3ItemCategory.MISC), + ("Raw Gem", 0x400004C4, DS3ItemCategory.MISC), + ("Blessed Gem", 0x400004CE, DS3ItemCategory.MISC), + ("Hollow Gem", 0x400004D8, DS3ItemCategory.MISC), + ("Shriving Stone", 0x400004E2, DS3ItemCategory.MISC), + ("Lift Chamber Key", 0x400007D1, DS3ItemCategory.KEY), + ("Small Doll", 0x400007D5, DS3ItemCategory.KEY), + ("Jailbreaker's Key", 0x400007D7, DS3ItemCategory.KEY), + ("Jailer's Key Ring", 0x400007D8, DS3ItemCategory.KEY), + ("Grave Key", 0x400007D9, DS3ItemCategory.KEY), + ("Cell Key", 0x400007DA, DS3ItemCategory.KEY), + ("Dungeon Ground Floor Key", 0x400007DB, DS3ItemCategory.KEY), + ("Old Cell Key", 0x400007DC, DS3ItemCategory.KEY), + ("Grand Archives Key", 0x400007DE, DS3ItemCategory.KEY), + ("Tower Key", 0x400007DF, DS3ItemCategory.KEY), + ("Small Lothric Banner", 0x40000836, DS3ItemCategory.KEY), + ("Farron Coal", 0x40000837, DS3ItemCategory.MISC), + ("Sage's Coal", 0x40000838, DS3ItemCategory.MISC), + ("Giant's Coal", 0x40000839, DS3ItemCategory.MISC), + ("Profaned Coal", 0x4000083A, DS3ItemCategory.MISC), + ("Mortician's Ashes", 0x4000083B, DS3ItemCategory.MISC), + ("Dreamchaser's Ashes", 0x4000083C, DS3ItemCategory.MISC), + ("Paladin's Ashes", 0x4000083D, DS3ItemCategory.MISC), + ("Grave Warden's Ashes", 0x4000083E, DS3ItemCategory.MISC), + ("Greirat's Ashes", 0x4000083F, DS3ItemCategory.MISC), + ("Orbeck's Ashes", 0x40000840, DS3ItemCategory.MISC), + ("Cornyx's Ashes", 0x40000841, DS3ItemCategory.MISC), + ("Karla's Ashes", 0x40000842, DS3ItemCategory.MISC), + ("Irina's Ashes", 0x40000843, DS3ItemCategory.MISC), + ("Yuria's Ashes", 0x40000844, DS3ItemCategory.MISC), + ("Basin of Vows", 0x40000845, DS3ItemCategory.KEY), + ("Loretta's Bone", 0x40000846, DS3ItemCategory.KEY), + ("Braille Divine Tome of Carim", 0x40000847, DS3ItemCategory.MISC), + ("Braille Divine Tome of Lothric", 0x40000848, DS3ItemCategory.MISC), + ("Cinders of a Lord - Abyss Watcher", 0x4000084B, DS3ItemCategory.KEY), + ("Cinders of a Lord - Aldrich", 0x4000084C, DS3ItemCategory.KEY), + ("Cinders of a Lord - Yhorm the Giant", 0x4000084D, DS3ItemCategory.KEY), + ("Cinders of a Lord - Lothric Prince", 0x4000084E, DS3ItemCategory.KEY), + ("Great Swamp Pyromancy Tome", 0x4000084F, DS3ItemCategory.MISC), + ("Carthus Pyromancy Tome", 0x40000850, DS3ItemCategory.MISC), + ("Izalith Pyromancy Tome", 0x40000851, DS3ItemCategory.MISC), + ("Quelana Pyromancy Tome", 0x40000852, DS3ItemCategory.MISC), + ("Grave Warden Pyromancy Tome", 0x40000853, DS3ItemCategory.MISC), + ("Sage's Scroll", 0x40000854, DS3ItemCategory.MISC), + ("Logan's Scroll", 0x40000855, DS3ItemCategory.MISC), + ("Crystal Scroll", 0x40000856, DS3ItemCategory.MISC), + ("Transposing Kiln", 0x40000857, DS3ItemCategory.MISC), + ("Coiled Sword", 0x40000859, DS3ItemCategory.SKIP), # Useless + ("Eyes of a Fire Keeper", 0x4000085A, DS3ItemCategory.KEY), + ("Sword of Avowal", 0x4000085B, DS3ItemCategory.KEY), + ("Golden Scroll", 0x4000085C, DS3ItemCategory.MISC), + ("Estus Shard", 0x4000085D, DS3ItemCategory.MISC), + ("Hawkwood's Swordgrass", 0x4000085E, DS3ItemCategory.SKIP), + ("Undead Bone Shard", 0x4000085F, DS3ItemCategory.MISC), + ("Deep Braille Divine Tome", 0x40000860, DS3ItemCategory.MISC), + ("Londor Braille Divine Tome", 0x40000861, DS3ItemCategory.MISC), + ("Excrement-covered Ashes", 0x40000862, DS3ItemCategory.MISC), + ("Prisoner Chief's Ashes", 0x40000863, DS3ItemCategory.MISC), + ("Xanthous Ashes", 0x40000864, DS3ItemCategory.MISC), + ("Hollow's Ashes", 0x40000865, DS3ItemCategory.MISC), + ("Patches' Ashes", 0x40000866, DS3ItemCategory.MISC), + ("Dragon Chaser's Ashes", 0x40000867, DS3ItemCategory.MISC), + ("Easterner's Ashes", 0x40000868, DS3ItemCategory.MISC), + + # Spells + ("Farron Dart", 0x40124F80, DS3ItemCategory.SPELL), + ("Great Farron Dart", 0x40127690, DS3ItemCategory.SPELL), + ("Soul Arrow", 0x4013D620, DS3ItemCategory.SPELL), + ("Great Soul Arrow", 0x4013DA08, DS3ItemCategory.SPELL), + ("Heavy Soul Arrow", 0x4013DDF0, DS3ItemCategory.SPELL), + ("Great Heavy Soul Arrow", 0x4013E1D8, DS3ItemCategory.SPELL), + ("Homing Soulmass", 0x4013E5C0, DS3ItemCategory.SPELL), + ("Homing Crystal Soulmass", 0x4013E9A8, DS3ItemCategory.SPELL), + ("Soul Spear", 0x4013ED90, DS3ItemCategory.SPELL), + ("Crystal Soul Spear", 0x4013F178, DS3ItemCategory.SPELL), + ("Deep Soul", 0x4013F560, DS3ItemCategory.SPELL), + ("Great Deep Soul", 0x4013F948, DS3ItemCategory.SPELL), + ("Magic Weapon", 0x4013FD30, DS3ItemCategory.SPELL), + ("Great Magic Weapon", 0x40140118, DS3ItemCategory.SPELL), + ("Crystal Magic Weapon", 0x40140500, DS3ItemCategory.SPELL), + ("Magic Shield", 0x40144B50, DS3ItemCategory.SPELL), + ("Great Magic Shield", 0x40144F38, DS3ItemCategory.SPELL), + ("Hidden Weapon", 0x40147260, DS3ItemCategory.SPELL), + ("Hidden Body", 0x40147648, DS3ItemCategory.SPELL), + ("Cast Light", 0x40149970, DS3ItemCategory.SPELL), + ("Repair", 0x4014A528, DS3ItemCategory.SPELL), + ("Spook", 0x4014A910, DS3ItemCategory.SPELL), + ("Chameleon", 0x4014ACF8, DS3ItemCategory.SPELL), + ("Aural Decoy", 0x4014B0E0, DS3ItemCategory.SPELL), + ("White Dragon Breath", 0x4014E790, DS3ItemCategory.SPELL), + ("Farron Hail", 0x4014EF60, DS3ItemCategory.SPELL), + ("Crystal Hail", 0x4014F348, DS3ItemCategory.SPELL), + ("Soul Greatsword", 0x4014F730, DS3ItemCategory.SPELL), + ("Farron Flashsword", 0x4014FB18, DS3ItemCategory.SPELL), + ("Affinity", 0x401875B8, DS3ItemCategory.SPELL), + ("Dark Edge", 0x40189CC8, DS3ItemCategory.SPELL), + ("Soul Stream", 0x4018B820, DS3ItemCategory.SPELL), + ("Twisted Wall of Light", 0x40193138, DS3ItemCategory.SPELL), + ("Pestilent Mist", 0x401A8CE0, DS3ItemCategory.SPELL), # Originally called "Pestilent Mercury" pre 1.15 + ("Fireball", 0x40249F00, DS3ItemCategory.SPELL), + ("Fire Orb", 0x4024A6D0, DS3ItemCategory.SPELL), + ("Firestorm", 0x4024AAB8, DS3ItemCategory.SPELL), + ("Fire Surge", 0x4024B288, DS3ItemCategory.SPELL), + ("Black Serpent", 0x4024BA58, DS3ItemCategory.SPELL), + ("Combustion", 0x4024C610, DS3ItemCategory.SPELL), + ("Great Combustion", 0x4024C9F8, DS3ItemCategory.SPELL), + ("Poison Mist", 0x4024ED20, DS3ItemCategory.SPELL), + ("Toxic Mist", 0x4024F108, DS3ItemCategory.SPELL), + ("Acid Surge", 0x4024F4F0, DS3ItemCategory.SPELL), + ("Iron Flesh", 0x40251430, DS3ItemCategory.SPELL), + ("Flash Sweat", 0x40251818, DS3ItemCategory.SPELL), + ("Carthus Flame Arc", 0x402527B8, DS3ItemCategory.SPELL), + ("Rapport", 0x40252BA0, DS3ItemCategory.SPELL), + ("Power Within", 0x40253B40, DS3ItemCategory.SPELL), + ("Great Chaos Fire Orb", 0x40256250, DS3ItemCategory.SPELL), + ("Chaos Storm", 0x40256638, DS3ItemCategory.SPELL), + ("Fire Whip", 0x40256A20, DS3ItemCategory.SPELL), + ("Black Flame", 0x40256E08, DS3ItemCategory.SPELL), + ("Profaned Flame", 0x402575D8, DS3ItemCategory.SPELL), + ("Chaos Bed Vestiges", 0x402579C0, DS3ItemCategory.SPELL), + ("Warmth", 0x4025B070, DS3ItemCategory.SPELL), + ("Profuse Sweat", 0x402717D0, DS3ItemCategory.SPELL), + ("Black Fire Orb", 0x4027D350, DS3ItemCategory.SPELL), + ("Bursting Fireball", 0x4027FA60, DS3ItemCategory.SPELL), + ("Boulder Heave", 0x40282170, DS3ItemCategory.SPELL), + ("Sacred Flame", 0x40284880, DS3ItemCategory.SPELL), + ("Carthus Beacon", 0x40286F90, DS3ItemCategory.SPELL), + ("Heal Aid", 0x403540D0, DS3ItemCategory.SPELL), + ("Heal", 0x403567E0, DS3ItemCategory.SPELL), + ("Med Heal", 0x40356BC8, DS3ItemCategory.SPELL), + ("Great Heal", 0x40356FB0, DS3ItemCategory.SPELL), + ("Soothing Sunlight", 0x40357398, DS3ItemCategory.SPELL), + ("Replenishment", 0x40357780, DS3ItemCategory.SPELL), + ("Bountiful Sunlight", 0x40357B68, DS3ItemCategory.SPELL), + ("Bountiful Light", 0x40358338, DS3ItemCategory.SPELL), + ("Caressing Tears", 0x40358720, DS3ItemCategory.SPELL), + ("Tears of Denial", 0x4035B600, DS3ItemCategory.SPELL), + ("Homeward", 0x4035B9E8, DS3ItemCategory.SPELL), + ("Force", 0x4035DD10, DS3ItemCategory.SPELL), + ("Wrath of the Gods", 0x4035E0F8, DS3ItemCategory.SPELL), + ("Emit Force", 0x4035E4E0, DS3ItemCategory.SPELL), + ("Seek Guidance", 0x40360420, DS3ItemCategory.SPELL), + ("Lightning Spear", 0x40362B30, DS3ItemCategory.SPELL), + ("Great Lightning Spear", 0x40362F18, DS3ItemCategory.SPELL), + ("Sunlight Spear", 0x40363300, DS3ItemCategory.SPELL), + ("Lightning Storm", 0x403636E8, DS3ItemCategory.SPELL), + ("Gnaw", 0x40363AD0, DS3ItemCategory.SPELL), + ("Dorhys' Gnawing", 0x40363EB8, DS3ItemCategory.SPELL), + ("Magic Barrier", 0x40365240, DS3ItemCategory.SPELL), + ("Great Magic Barrier", 0x40365628, DS3ItemCategory.SPELL), + ("Sacred Oath", 0x40365DF8, DS3ItemCategory.SPELL), + ("Vow of Silence", 0x4036A448, DS3ItemCategory.SPELL), + ("Lightning Blade", 0x4036C770, DS3ItemCategory.SPELL), + ("Darkmoon Blade", 0x4036CB58, DS3ItemCategory.SPELL), + ("Dark Blade", 0x40378AC0, DS3ItemCategory.SPELL), + ("Dead Again", 0x40387520, DS3ItemCategory.SPELL), + ("Lightning Stake", 0x40389C30, DS3ItemCategory.SPELL), + ("Divine Pillars of Light", 0x4038C340, DS3ItemCategory.SPELL), + ("Lifehunt Scythe", 0x4038EA50, DS3ItemCategory.SPELL), + ("Blessed Weapon", 0x40395F80, DS3ItemCategory.SPELL), + ("Deep Protection", 0x40398690, DS3ItemCategory.SPELL), + ("Atonement", 0x4039ADA0, DS3ItemCategory.SPELL), +]] + +_dlc_items = [DS3ItemData(row[0], row[1], True, row[2]) for row in [ + # Ammunition + ("Millwood Greatarrow", 0x000623E0, DS3ItemCategory.SKIP), + + # Weapons + ("Aquamarine Dagger", 0x00116520, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Murky Hand Scythe", 0x00118C30, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Onyx Blade", 0x00222E00, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Ringed Knight Straight Sword", 0x00225510, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Gael's Greatsword", 0x00227C20, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Follower Sabre", 0x003EDDC0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Demon's Scar", 0x003F04D0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Frayed Blade", 0x004D35A0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Herald Curved Greatsword", 0x006159E0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Millwood Battle Axe", 0x006D67D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Earth Seeker", 0x006D8EE0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Quakestone Hammer", 0x007ECCF0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Ledo's Great Hammer", 0x007EF400, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Follower Javelin", 0x008CD6B0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Ringed Knight Spear", 0x008CFDC0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Lothric War Banner", 0x008D24D0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Crucifix of the Mad King", 0x008D4BE0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Splitleaf Greatsword", 0x009B2E90, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Friede's Great Scythe", 0x009B55A0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Crow Talons", 0x00A89C10, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Rose of Ariandel", 0x00B82C70, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Pyromancer's Parting Flame", 0x00CC9ED0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Murky Longstaff", 0x00CCC5E0, DS3ItemCategory.WEAPON_UPGRADE_10), + ("Sacred Chime of Filianore", 0x00CCECF0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Preacher's Right Arm", 0x00CD1400, DS3ItemCategory.WEAPON_UPGRADE_5), + ("White Birch Bow", 0x00D77440, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Millwood Greatbow", 0x00D85EA0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Repeating Crossbow", 0x00D885B0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Giant Door Shield", 0x00F5F8C0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Valorheart", 0x00F646E0, DS3ItemCategory.WEAPON_UPGRADE_5), + ("Crow Quills", 0x00F66DF0, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE), + ("Ringed Knight Paired Greatswords", 0x00F69500, DS3ItemCategory.WEAPON_UPGRADE_5), + + # Shields + ("Follower Shield", 0x0135C0E0, DS3ItemCategory.SHIELD_INFUSIBLE), + ("Dragonhead Shield", 0x0135E7F0, DS3ItemCategory.SHIELD), + ("Ethereal Oak Shield", 0x01450320, DS3ItemCategory.SHIELD), + ("Dragonhead Greatshield", 0x01452A30, DS3ItemCategory.SHIELD), + ("Follower Torch", 0x015F1AD0, DS3ItemCategory.SHIELD), + + # Armor + ("Vilhelm's Helm", 0x11312D00, DS3ItemCategory.ARMOR), + ("Vilhelm's Armor", 0x113130E8, DS3ItemCategory.ARMOR), + ("Vilhelm's Gauntlets", 0x113134D0, DS3ItemCategory.ARMOR), + ("Vilhelm's Leggings", 0x113138B8, DS3ItemCategory.ARMOR), + ("Antiquated Plain Garb", 0x11B2E408, DS3ItemCategory.ARMOR), + ("Violet Wrappings", 0x11B2E7F0, DS3ItemCategory.ARMOR), + ("Loincloth 2", 0x11B2EBD8, DS3ItemCategory.ARMOR), + ("Shira's Crown", 0x11C22260, DS3ItemCategory.ARMOR), + ("Shira's Armor", 0x11C22648, DS3ItemCategory.ARMOR), + ("Shira's Gloves", 0x11C22A30, DS3ItemCategory.ARMOR), + ("Shira's Trousers", 0x11C22E18, DS3ItemCategory.ARMOR), + ("Lapp's Helm", 0x11E84800, DS3ItemCategory.ARMOR), + ("Lapp's Armor", 0x11E84BE8, DS3ItemCategory.ARMOR), + ("Lapp's Gauntlets", 0x11E84FD0, DS3ItemCategory.ARMOR), + ("Lapp's Leggings", 0x11E853B8, DS3ItemCategory.ARMOR), + ("Slave Knight Hood", 0x134EDCE0, DS3ItemCategory.ARMOR), + ("Slave Knight Armor", 0x134EE0C8, DS3ItemCategory.ARMOR), + ("Slave Knight Gauntlets", 0x134EE4B0, DS3ItemCategory.ARMOR), + ("Slave Knight Leggings", 0x134EE898, DS3ItemCategory.ARMOR), + ("Ordained Hood", 0x135E1F20, DS3ItemCategory.ARMOR), + ("Ordained Dress", 0x135E2308, DS3ItemCategory.ARMOR), + ("Ordained Trousers", 0x135E2AD8, DS3ItemCategory.ARMOR), + ("Follower Helm", 0x137CA3A0, DS3ItemCategory.ARMOR), + ("Follower Armor", 0x137CA788, DS3ItemCategory.ARMOR), + ("Follower Gloves", 0x137CAB70, DS3ItemCategory.ARMOR), + ("Follower Boots", 0x137CAF58, DS3ItemCategory.ARMOR), + ("Millwood Knight Helm", 0x139B2820, DS3ItemCategory.ARMOR), + ("Millwood Knight Armor", 0x139B2C08, DS3ItemCategory.ARMOR), + ("Millwood Knight Gauntlets", 0x139B2FF0, DS3ItemCategory.ARMOR), + ("Millwood Knight Leggings", 0x139B33D8, DS3ItemCategory.ARMOR), + ("Ringed Knight Hood", 0x13C8EEE0, DS3ItemCategory.ARMOR), + ("Ringed Knight Armor", 0x13C8F2C8, DS3ItemCategory.ARMOR), + ("Ringed Knight Gauntlets", 0x13C8F6B0, DS3ItemCategory.ARMOR), + ("Ringed Knight Leggings", 0x13C8FA98, DS3ItemCategory.ARMOR), + ("Harald Legion Armor", 0x13D83508, DS3ItemCategory.ARMOR), + ("Harald Legion Gauntlets", 0x13D838F0, DS3ItemCategory.ARMOR), + ("Harald Legion Leggings", 0x13D83CD8, DS3ItemCategory.ARMOR), + ("Iron Dragonslayer Helm", 0x1405F7E0, DS3ItemCategory.ARMOR), + ("Iron Dragonslayer Armor", 0x1405FBC8, DS3ItemCategory.ARMOR), + ("Iron Dragonslayer Gauntlets", 0x1405FFB0, DS3ItemCategory.ARMOR), + ("Iron Dragonslayer Leggings", 0x14060398, DS3ItemCategory.ARMOR), + ("White Preacher Head", 0x14153A20, DS3ItemCategory.ARMOR), + ("Ruin Sentinel Helm", 0x14CC5520, DS3ItemCategory.ARMOR), + ("Ruin Sentinel Armor", 0x14CC5908, DS3ItemCategory.ARMOR), + ("Ruin Sentinel Gauntlets", 0x14CC5CF0, DS3ItemCategory.ARMOR), + ("Ruin Sentinel Leggings", 0x14CC60D8, DS3ItemCategory.ARMOR), + ("Desert Pyromancer Hood", 0x14DB9760, DS3ItemCategory.ARMOR), + ("Desert Pyromancer Garb", 0x14DB9B48, DS3ItemCategory.ARMOR), + ("Desert Pyromancer Gloves", 0x14DB9F30, DS3ItemCategory.ARMOR), + ("Desert Pyromancer Skirt", 0x14DBA318, DS3ItemCategory.ARMOR), + ("Black Witch Hat", 0x14EAD9A0, DS3ItemCategory.ARMOR), + ("Black Witch Garb", 0x14EADD88, DS3ItemCategory.ARMOR), + ("Black Witch Wrappings", 0x14EAE170, DS3ItemCategory.ARMOR), + ("Black Witch Trousers", 0x14EAE558, DS3ItemCategory.ARMOR), + ("Black Witch Veil", 0x14FA1BE0, DS3ItemCategory.ARMOR), + ("Blindfold Mask", 0x15095E20, DS3ItemCategory.ARMOR), + + # Covenants + ("Spear of the Church", 0x2000276A, DS3ItemCategory.SKIP), + + # Rings + ("Chloranthy Ring+3", 0x20004E2D, DS3ItemCategory.RING), + ("Havel's Ring+3", 0x20004E37, DS3ItemCategory.RING), + ("Ring of Favor+3", 0x20004E41, DS3ItemCategory.RING), + ("Ring of Steel Protection+3", 0x20004E4B, DS3ItemCategory.RING), + ("Wolf Ring+3", 0x20004EE1, DS3ItemCategory.RING), + ("Covetous Gold Serpent Ring+3", 0x20004FA9, DS3ItemCategory.RING), + ("Covetous Silver Serpent Ring+3", 0x20004FB3, DS3ItemCategory.RING), + ("Ring of the Evil Eye+3", 0x20005071, DS3ItemCategory.RING), + ("Chillbite Ring", 0x20005208, DS3ItemCategory.RING), + + # Items + ("Church Guardian Shiv", 0x4000013B, DS3ItemCategory.MISC), + ("Filianore's Spear Ornament", 0x4000017B, DS3ItemCategory.SKIP), + ("Ritual Spear Fragment", 0x4000028A, DS3ItemCategory.MISC), + ("Divine Spear Fragment", 0x4000028B, DS3ItemCategory.SKIP), + ("Soul of Sister Friede", 0x400002E8, DS3ItemCategory.BOSS), + ("Soul of Slave Knight Gael", 0x400002E9, DS3ItemCategory.BOSS), + ("Soul of the Demon Prince", 0x400002EA, DS3ItemCategory.BOSS), + ("Soul of Darkeater Midir", 0x400002EB, DS3ItemCategory.BOSS), + ("Champion's Bones", 0x40000869, DS3ItemCategory.SKIP), + ("Captain's Ashes", 0x4000086A, DS3ItemCategory.MISC), + ("Contraption Key", 0x4000086B, DS3ItemCategory.KEY), + ("Small Envoy Banner", 0x4000086C, DS3ItemCategory.KEY), + ("Old Woman's Ashes", 0x4000086D, DS3ItemCategory.SKIP), + ("Blood of the Dark Soul", 0x4000086E, DS3ItemCategory.SKIP), + + # Spells + ("Frozen Weapon", 0x401408E8, DS3ItemCategory.SPELL), + ("Old Moonlight", 0x4014FF00, DS3ItemCategory.SPELL), + ("Great Soul Dregs", 0x401879A0, DS3ItemCategory.SPELL), + ("Snap Freeze", 0x401A90C8, DS3ItemCategory.SPELL), + ("Floating Chaos", 0x40257DA8, DS3ItemCategory.SPELL), + ("Flame Fan", 0x40258190, DS3ItemCategory.SPELL), + ("Seething Chaos", 0x402896A0, DS3ItemCategory.SPELL), + ("Lightning Arrow", 0x40358B08, DS3ItemCategory.SPELL), + ("Way of White Corona", 0x403642A0, DS3ItemCategory.SPELL), + ("Projected Heal", 0x40364688, DS3ItemCategory.SPELL), +]] + +# Unused list for future reference +# These items exist to some degree in the code, but aren't accessible +# in-game and can't be picked up without modifications +_cut_content_items = [DS3ItemData(row[0], row[1], False, row[2]) for row in [ + # Weapons + ("Blood-stained Short Sword", 0x00100590, DS3ItemCategory.SKIP), + ("Missionary's Axe", 0x006C2F50, DS3ItemCategory.SKIP), + ("Dragon King Greataxe", 0x006D40C0, DS3ItemCategory.SKIP), + ("Four Knights Hammer", 0x007D4650, DS3ItemCategory.SKIP), + ("Hammer of the Great Tree", 0x007D9470, DS3ItemCategory.SKIP), + ("Lothric's Scythe", 0x009A4430, DS3ItemCategory.SKIP), + ("Ancient Dragon Halberd", 0x009A6B40, DS3ItemCategory.SKIP), + ("Scythe of Want", 0x009A9250, DS3ItemCategory.SKIP), + ("Sacred Beast Catalyst", 0x00C8A730, DS3ItemCategory.SKIP), + ("Deep Pyromancy Flame", 0x00CC9ED0, DS3ItemCategory.SKIP), # Duplicate? + ("Flickering Pyromancy Flame", 0x00CD3B10, DS3ItemCategory.SKIP), + ("Strong Pyromancy Flame", 0x00CD6220, DS3ItemCategory.SKIP), + ("Deep Pyromancy Flame", 0x00CDFE60, DS3ItemCategory.SKIP), # Duplicate? + ("Pitch-Dark Pyromancy Flame", 0x00CE2570, DS3ItemCategory.SKIP), + ("Dancer's Short Bow", 0x00D77440, DS3ItemCategory.SKIP), + ("Shield Crossbow", 0x00D81080, DS3ItemCategory.SKIP), + ("Golden Dual Swords", 0x00F55C80, DS3ItemCategory.SKIP), + ("Channeler's Trident", 0x008C8890, DS3ItemCategory.SKIP), + + # Shields + ("Cleric's Parma", 0x013524A0, DS3ItemCategory.SKIP), + ("Prince's Shield", 0x01421CF0, DS3ItemCategory.SKIP), + + # Armor + ("Dingy Maiden's Overcoat", 0x11DA9048, DS3ItemCategory.SKIP), + ("Grotto Hat", 0x11F78A40, DS3ItemCategory.SKIP), + ("Grotto Robe", 0x11F78E28, DS3ItemCategory.SKIP), + ("Grotto Wrap", 0x11F79210, DS3ItemCategory.SKIP), + ("Grotto Trousers", 0x11F795F8, DS3ItemCategory.SKIP), + ("Soldier's Gauntlets", 0x126261D0, DS3ItemCategory.SKIP), + ("Soldier's Hood", 0x1263E0A0, DS3ItemCategory.SKIP), + ("Elder's Robe", 0x129024A8, DS3ItemCategory.SKIP), + ("Saint's Veil", 0x12A70420, DS3ItemCategory.SKIP), + ("Saint's Dress", 0x12A70808, DS3ItemCategory.SKIP), + ("Footman's Hood", 0x12AEA540, DS3ItemCategory.SKIP), + ("Footman's Overcoat", 0x12AEA928, DS3ItemCategory.SKIP), + ("Footman's Bracelets", 0x12AEAD10, DS3ItemCategory.SKIP), + ("Footman's Trousers", 0x12AEB0F8, DS3ItemCategory.SKIP), + ("Scholar's Shed Skin", 0x12E40D20, DS3ItemCategory.SKIP), + ("Man Serpent's Mask", 0x138BE5E0, DS3ItemCategory.SKIP), + ("Man Serpent's Robe", 0x138BE9C8, DS3ItemCategory.SKIP), + ("Old Monarch's Crown", 0x13DFD240, DS3ItemCategory.SKIP), + ("Old Monarch's Robe", 0x13DFD628, DS3ItemCategory.SKIP), + ("Frigid Valley Mask", 0x13FE56C0, DS3ItemCategory.SKIP), + ("Dingy Hood", 0x140D9900, DS3ItemCategory.SKIP), + ("Hexer's Hood", 0x15A995C0, DS3ItemCategory.SKIP), + ("Hexer's Robes", 0x15A999A8, DS3ItemCategory.SKIP), + ("Hexer's Gloves", 0x15A99D90, DS3ItemCategory.SKIP), + ("Hexer's Boots", 0x15A9A178, DS3ItemCategory.SKIP), + ("Varangian Helm", 0x15C81A40, DS3ItemCategory.SKIP), + ("Varangian Armor", 0x15C81E28, DS3ItemCategory.SKIP), + ("Varangian Cuffs", 0x15C82210, DS3ItemCategory.SKIP), + ("Varangian Leggings", 0x15C825F8, DS3ItemCategory.SKIP), + + # Rings + ("Rare Ring of Sacrifice", 0x20004EFC, DS3ItemCategory.SKIP), + ("Baneful Bird Ring", 0x20005032, DS3ItemCategory.SKIP), + ("Darkmoon Blade Covenant Ring", 0x20004F7E, DS3ItemCategory.SKIP), + ("Yorgh's Ring", 0x2000505A, DS3ItemCategory.SKIP), + ("Ring of Hiding", 0x200050D2, DS3ItemCategory.SKIP), + ("Ring of Sustained Toughness", 0x20005118, DS3ItemCategory.SKIP), + ("Ring of Sustained Energy", 0x20005122, DS3ItemCategory.SKIP), + ("Ring of Sustained Magic", 0x2000512C, DS3ItemCategory.SKIP), + ("Ring of Sustained Essence", 0x20005140, DS3ItemCategory.SKIP), + ("Ring of Sustained Might", 0x2000514A, DS3ItemCategory.SKIP), + ("Ring of Sustained Fortune", 0x20005154, DS3ItemCategory.SKIP), + + # Items + ("Soul of a Wicked Spirit", 0x400002C9, DS3ItemCategory.SKIP), + + # Spells + ("Dark Orb", 0x4027AC40, DS3ItemCategory.SKIP), + ("Morbid Temptation", 0x40359AA8, DS3ItemCategory.SKIP), + ("Dorris Swarm", 0x40393870, DS3ItemCategory.SKIP), +]] + +_all_items = _vanilla_items + _dlc_items + +item_dictionary = {item_data.name: item_data for item_data in _all_items} diff --git a/worlds/dark_souls_3/Locations.py b/worlds/dark_souls_3/Locations.py index a63a951c..53a39f51 100644 --- a/worlds/dark_souls_3/Locations.py +++ b/worlds/dark_souls_3/Locations.py @@ -1,22 +1,690 @@ -import sys +from enum import IntEnum +from typing import Optional, NamedTuple, Dict -from BaseClasses import Location -from worlds.dark_souls_3.data.locations_data import location_tables, painted_world_table, dreg_heap_table, \ - ringed_city_table +from BaseClasses import Location, Region + + +class DS3LocationCategory(IntEnum): + WEAPON = 0 + SHIELD = 1 + ARMOR = 2 + RING = 3 + SPELL = 4 + NPC = 5 + KEY = 6 + BOSS = 7 + MISC = 8 + HEALTH = 9 + PROGRESSIVE_ITEM = 10 + + +class DS3LocationData(NamedTuple): + name: str + default_item: str + category: DS3LocationCategory class DarkSouls3Location(Location): game: str = "Dark Souls III" + category: DS3LocationCategory + default_item_name: str + + def __init__( + self, + player: int, + name: str, + category: DS3LocationCategory, + default_item_name: str, + address: Optional[int] = None, + parent: Optional[Region] = None): + super().__init__(player, name, address, parent) + self.default_item_name = default_item_name + self.category = category @staticmethod def get_name_to_id() -> dict: base_id = 100000 table_offset = 100 + table_order = [ + "Firelink Shrine", + "Firelink Shrine Bell Tower", + "High Wall of Lothric", + "Undead Settlement", + "Road of Sacrifices", + "Cathedral of the Deep", + "Farron Keep", + "Catacombs of Carthus", + "Smouldering Lake", + "Irithyll of the Boreal Valley", + "Irithyll Dungeon", + "Profaned Capital", + "Anor Londo", + "Lothric Castle", + "Consumed King's Garden", + "Grand Archives", + "Untended Graves", + "Archdragon Peak", + + "Painted World of Ariandel 1", + "Painted World of Ariandel 2", + "Dreg Heap", + "Ringed City", + + "Progressive Items 1", + "Progressive Items 2", + "Progressive Items 3", + "Progressive Items 4", + "Progressive Items DLC", + ] + output = {} - for i, table in enumerate(location_tables): - if len(table) > table_offset: - raise Exception("A location table has {} entries, that is more than {} entries (table #{})".format(len(table), table_offset, i)) - output.update({name: id for id, name in enumerate(table, base_id + (table_offset * i))}) + for i, region_name in enumerate(table_order): + if len(location_tables[region_name]) > table_offset: + raise Exception("A location table has {} entries, that is more than {} entries (table #{})".format(len(location_tables[region_name]), table_offset, i)) + + output.update({location_data.name: id for id, location_data in enumerate(location_tables[region_name], base_id + (table_offset * i))}) return output + + +location_tables = { + "Firelink Shrine": [ + DS3LocationData("FS: Broken Straight Sword", "Broken Straight Sword", DS3LocationCategory.WEAPON), + DS3LocationData("FS: East-West Shield", "East-West Shield", DS3LocationCategory.SHIELD), + DS3LocationData("FS: Uchigatana", "Uchigatana", DS3LocationCategory.WEAPON), + DS3LocationData("FS: Master's Attire", "Master's Attire", DS3LocationCategory.ARMOR), + DS3LocationData("FS: Master's Gloves", "Master's Gloves", DS3LocationCategory.ARMOR), + ], + "Firelink Shrine Bell Tower": [ + DS3LocationData("FSBT: Covetous Silver Serpent Ring", "Covetous Silver Serpent Ring", DS3LocationCategory.RING), + DS3LocationData("FSBT: Fire Keeper Robe", "Fire Keeper Robe", DS3LocationCategory.ARMOR), + DS3LocationData("FSBT: Fire Keeper Gloves", "Fire Keeper Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("FSBT: Fire Keeper Skirt", "Fire Keeper Skirt", DS3LocationCategory.ARMOR), + DS3LocationData("FSBT: Estus Ring", "Estus Ring", DS3LocationCategory.RING), + DS3LocationData("FSBT: Fire Keeper Soul", "Fire Keeper Soul", DS3LocationCategory.MISC), + ], + "High Wall of Lothric": [ + DS3LocationData("HWL: Deep Battle Axe", "Deep Battle Axe", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Club", "Club", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Claymore", "Claymore", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Binoculars", "Binoculars", DS3LocationCategory.MISC), + DS3LocationData("HWL: Longbow", "Longbow", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Mail Breaker", "Mail Breaker", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Broadsword", "Broadsword", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Silver Eagle Kite Shield", "Silver Eagle Kite Shield", DS3LocationCategory.SHIELD), + DS3LocationData("HWL: Astora's Straight Sword", "Astora's Straight Sword", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Cell Key", "Cell Key", DS3LocationCategory.KEY), + DS3LocationData("HWL: Rapier", "Rapier", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Lucerne", "Lucerne", DS3LocationCategory.WEAPON), + DS3LocationData("HWL: Small Lothric Banner", "Small Lothric Banner", DS3LocationCategory.KEY), + DS3LocationData("HWL: Basin of Vows", "Basin of Vows", DS3LocationCategory.KEY), + DS3LocationData("HWL: Soul of Boreal Valley Vordt", "Soul of Boreal Valley Vordt", DS3LocationCategory.BOSS), + DS3LocationData("HWL: Soul of the Dancer", "Soul of the Dancer", DS3LocationCategory.BOSS), + DS3LocationData("HWL: Way of Blue", "Way of Blue", DS3LocationCategory.MISC), + DS3LocationData("HWL: Greirat's Ashes", "Greirat's Ashes", DS3LocationCategory.NPC), + DS3LocationData("HWL: Blue Tearstone Ring", "Blue Tearstone Ring", DS3LocationCategory.NPC), + ], + "Undead Settlement": [ + DS3LocationData("US: Small Leather Shield", "Small Leather Shield", DS3LocationCategory.SHIELD), + DS3LocationData("US: Whip", "Whip", DS3LocationCategory.WEAPON), + DS3LocationData("US: Reinforced Club", "Reinforced Club", DS3LocationCategory.WEAPON), + DS3LocationData("US: Blue Wooden Shield", "Blue Wooden Shield", DS3LocationCategory.SHIELD), + DS3LocationData("US: Cleric Hat", "Cleric Hat", DS3LocationCategory.ARMOR), + DS3LocationData("US: Cleric Blue Robe", "Cleric Blue Robe", DS3LocationCategory.ARMOR), + DS3LocationData("US: Cleric Gloves", "Cleric Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("US: Cleric Trousers", "Cleric Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("US: Mortician's Ashes", "Mortician's Ashes", DS3LocationCategory.KEY), + DS3LocationData("US: Caestus", "Caestus", DS3LocationCategory.WEAPON), + DS3LocationData("US: Plank Shield", "Plank Shield", DS3LocationCategory.SHIELD), + DS3LocationData("US: Flame Stoneplate Ring", "Flame Stoneplate Ring", DS3LocationCategory.RING), + DS3LocationData("US: Caduceus Round Shield", "Caduceus Round Shield", DS3LocationCategory.SHIELD), + DS3LocationData("US: Fire Clutch Ring", "Fire Clutch Ring", DS3LocationCategory.RING), + DS3LocationData("US: Partizan", "Partizan", DS3LocationCategory.WEAPON), + DS3LocationData("US: Bloodbite Ring", "Bloodbite Ring", DS3LocationCategory.RING), + DS3LocationData("US: Red Hilted Halberd", "Red Hilted Halberd", DS3LocationCategory.WEAPON), + DS3LocationData("US: Saint's Talisman", "Saint's Talisman", DS3LocationCategory.WEAPON), + DS3LocationData("US: Irithyll Straight Sword", "Irithyll Straight Sword", DS3LocationCategory.WEAPON), + DS3LocationData("US: Large Club", "Large Club", DS3LocationCategory.WEAPON), + DS3LocationData("US: Northern Helm", "Northern Helm", DS3LocationCategory.ARMOR), + DS3LocationData("US: Northern Armor", "Northern Armor", DS3LocationCategory.ARMOR), + DS3LocationData("US: Northern Gloves", "Northern Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("US: Northern Trousers", "Northern Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("US: Flynn's Ring", "Flynn's Ring", DS3LocationCategory.RING), + DS3LocationData("US: Mirrah Vest", "Mirrah Vest", DS3LocationCategory.ARMOR), + DS3LocationData("US: Mirrah Gloves", "Mirrah Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("US: Mirrah Trousers", "Mirrah Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("US: Chloranthy Ring", "Chloranthy Ring", DS3LocationCategory.RING), + DS3LocationData("US: Loincloth", "Loincloth", DS3LocationCategory.ARMOR), + DS3LocationData("US: Wargod Wooden Shield", "Wargod Wooden Shield", DS3LocationCategory.SHIELD), + DS3LocationData("US: Loretta's Bone", "Loretta's Bone", DS3LocationCategory.KEY), + DS3LocationData("US: Hand Axe", "Hand Axe", DS3LocationCategory.WEAPON), + DS3LocationData("US: Great Scythe", "Great Scythe", DS3LocationCategory.WEAPON), + DS3LocationData("US: Soul of the Rotted Greatwood", "Soul of the Rotted Greatwood", DS3LocationCategory.BOSS), + DS3LocationData("US: Hawk Ring", "Hawk Ring", DS3LocationCategory.RING), + DS3LocationData("US: Warrior of Sunlight", "Warrior of Sunlight", DS3LocationCategory.MISC), + DS3LocationData("US: Blessed Red and White Shield+1", "Blessed Red and White Shield+1", DS3LocationCategory.SHIELD), + DS3LocationData("US: Irina's Ashes", "Irina's Ashes", DS3LocationCategory.NPC), + DS3LocationData("US: Cornyx's Ashes", "Cornyx's Ashes", DS3LocationCategory.NPC), + DS3LocationData("US: Cornyx's Wrap", "Cornyx's Wrap", DS3LocationCategory.NPC), + DS3LocationData("US: Cornyx's Garb", "Cornyx's Garb", DS3LocationCategory.NPC), + DS3LocationData("US: Cornyx's Skirt", "Cornyx's Skirt", DS3LocationCategory.NPC), + DS3LocationData("US: Pyromancy Flame", "Pyromancy Flame", DS3LocationCategory.NPC), + DS3LocationData("US: Transposing Kiln", "Transposing Kiln", DS3LocationCategory.MISC), + DS3LocationData("US: Tower Key", "Tower Key", DS3LocationCategory.NPC), + ], + "Road of Sacrifices": [ + DS3LocationData("RS: Brigand Twindaggers", "Brigand Twindaggers", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Brigand Hood", "Brigand Hood", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Brigand Armor", "Brigand Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Brigand Gauntlets", "Brigand Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Brigand Trousers", "Brigand Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Butcher Knife", "Butcher Knife", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Brigand Axe", "Brigand Axe", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Braille Divine Tome of Carim", "Braille Divine Tome of Carim", DS3LocationCategory.MISC), + DS3LocationData("RS: Morne's Ring", "Morne's Ring", DS3LocationCategory.RING), + DS3LocationData("RS: Twin Dragon Greatshield", "Twin Dragon Greatshield", DS3LocationCategory.SHIELD), + DS3LocationData("RS: Heretic's Staff", "Heretic's Staff", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Sorcerer Hood", "Sorcerer Hood", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sorcerer Robe", "Sorcerer Robe", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sorcerer Gloves", "Sorcerer Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sorcerer Trousers", "Sorcerer Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sage Ring", "Sage Ring", DS3LocationCategory.RING), + DS3LocationData("RS: Fallen Knight Helm", "Fallen Knight Helm", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Fallen Knight Armor", "Fallen Knight Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Fallen Knight Gauntlets", "Fallen Knight Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Fallen Knight Trousers", "Fallen Knight Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Conjurator Hood", "Conjurator Hood", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Conjurator Robe", "Conjurator Robe", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Conjurator Manchettes", "Conjurator Manchettes", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Conjurator Boots", "Conjurator Boots", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Great Swamp Pyromancy Tome", "Great Swamp Pyromancy Tome", DS3LocationCategory.MISC), + DS3LocationData("RS: Great Club", "Great Club", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Exile Greatsword", "Exile Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Farron Coal", "Farron Coal", DS3LocationCategory.MISC), + DS3LocationData("RS: Sellsword Twinblades", "Sellsword Twinblades", DS3LocationCategory.WEAPON), + DS3LocationData("RS: Sellsword Helm", "Sellsword Helm", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sellsword Armor", "Sellsword Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sellsword Gauntlet", "Sellsword Gauntlet", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Sellsword Trousers", "Sellsword Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Golden Falcon Shield", "Golden Falcon Shield", DS3LocationCategory.SHIELD), + DS3LocationData("RS: Herald Helm", "Herald Helm", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Herald Armor", "Herald Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Herald Gloves", "Herald Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Herald Trousers", "Herald Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RS: Grass Crest Shield", "Grass Crest Shield", DS3LocationCategory.SHIELD), + DS3LocationData("RS: Soul of a Crystal Sage", "Soul of a Crystal Sage", DS3LocationCategory.BOSS), + DS3LocationData("RS: Great Swamp Ring", "Great Swamp Ring", DS3LocationCategory.RING), + DS3LocationData("RS: Orbeck's Ashes", "Orbeck's Ashes", DS3LocationCategory.NPC), + ], + "Cathedral of the Deep": [ + DS3LocationData("CD: Paladin's Ashes", "Paladin's Ashes", DS3LocationCategory.MISC), + DS3LocationData("CD: Spider Shield", "Spider Shield", DS3LocationCategory.SHIELD), + DS3LocationData("CD: Crest Shield", "Crest Shield", DS3LocationCategory.SHIELD), + DS3LocationData("CD: Notched Whip", "Notched Whip", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Astora Greatsword", "Astora Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Executioner's Greatsword", "Executioner's Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Curse Ward Greatshield", "Curse Ward Greatshield", DS3LocationCategory.SHIELD), + DS3LocationData("CD: Saint-tree Bellvine", "Saint-tree Bellvine", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Poisonbite Ring", "Poisonbite Ring", DS3LocationCategory.RING), + DS3LocationData("CD: Lloyd's Sword Ring", "Lloyd's Sword Ring", DS3LocationCategory.RING), + DS3LocationData("CD: Seek Guidance", "Seek Guidance", DS3LocationCategory.SPELL), + DS3LocationData("CD: Aldrich's Sapphire", "Aldrich's Sapphire", DS3LocationCategory.RING), + DS3LocationData("CD: Deep Braille Divine Tome", "Deep Braille Divine Tome", DS3LocationCategory.MISC), + DS3LocationData("CD: Saint Bident", "Saint Bident", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Maiden Hood", "Maiden Hood", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Maiden Robe", "Maiden Robe", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Maiden Gloves", "Maiden Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Maiden Skirt", "Maiden Skirt", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Drang Armor", "Drang Armor", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Drang Gauntlets", "Drang Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Drang Shoes", "Drang Shoes", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Drang Hammers", "Drang Hammers", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Deep Ring", "Deep Ring", DS3LocationCategory.RING), + DS3LocationData("CD: Archdeacon White Crown", "Archdeacon White Crown", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Archdeacon Holy Garb", "Archdeacon Holy Garb", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Archdeacon Skirt", "Archdeacon Skirt", DS3LocationCategory.ARMOR), + DS3LocationData("CD: Arbalest", "Arbalest", DS3LocationCategory.WEAPON), + DS3LocationData("CD: Small Doll", "Small Doll", DS3LocationCategory.KEY), + DS3LocationData("CD: Soul of the Deacons of the Deep", "Soul of the Deacons of the Deep", DS3LocationCategory.BOSS), + DS3LocationData("CD: Rosaria's Fingers", "Rosaria's Fingers", DS3LocationCategory.MISC) + ], + "Farron Keep": [ + DS3LocationData("FK: Ragged Mask", "Ragged Mask", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Iron Flesh", "Iron Flesh", DS3LocationCategory.SPELL), + DS3LocationData("FK: Golden Scroll", "Golden Scroll", DS3LocationCategory.MISC), + DS3LocationData("FK: Antiquated Dress", "Antiquated Dress", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Antiquated Gloves", "Antiquated Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Antiquated Skirt", "Antiquated Skirt", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Nameless Knight Helm", "Nameless Knight Helm", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Nameless Knight Armor", "Nameless Knight Armor", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Nameless Knight Gauntlets", "Nameless Knight Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Nameless Knight Leggings", "Nameless Knight Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Sunlight Talisman", "Sunlight Talisman", DS3LocationCategory.WEAPON), + DS3LocationData("FK: Wolf's Blood Swordgrass", "Wolf's Blood Swordgrass", DS3LocationCategory.MISC), + DS3LocationData("FK: Greatsword", "Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("FK: Sage's Coal", "Sage's Coal", DS3LocationCategory.MISC), + DS3LocationData("FK: Stone Parma", "Stone Parma", DS3LocationCategory.SHIELD), + DS3LocationData("FK: Sage's Scroll", "Sage's Scroll", DS3LocationCategory.MISC), + DS3LocationData("FK: Crown of Dusk", "Crown of Dusk", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Lingering Dragoncrest Ring", "Lingering Dragoncrest Ring", DS3LocationCategory.RING), + DS3LocationData("FK: Pharis's Hat", "Pharis's Hat", DS3LocationCategory.ARMOR), + DS3LocationData("FK: Black Bow of Pharis", "Black Bow of Pharis", DS3LocationCategory.WEAPON), + DS3LocationData("FK: Dreamchaser's Ashes", "Dreamchaser's Ashes", DS3LocationCategory.MISC), + DS3LocationData("FK: Great Axe", "Great Axe", DS3LocationCategory.WEAPON), + DS3LocationData("FK: Dragon Crest Shield", "Dragon Crest Shield", DS3LocationCategory.SHIELD), + DS3LocationData("FK: Lightning Spear", "Lightning Spear", DS3LocationCategory.SPELL), + DS3LocationData("FK: Atonement", "Atonement", DS3LocationCategory.SPELL), + DS3LocationData("FK: Great Magic Weapon", "Great Magic Weapon", DS3LocationCategory.SPELL), + DS3LocationData("FK: Cinders of a Lord - Abyss Watcher", "Cinders of a Lord - Abyss Watcher", DS3LocationCategory.KEY), + DS3LocationData("FK: Soul of the Blood of the Wolf", "Soul of the Blood of the Wolf", DS3LocationCategory.BOSS), + DS3LocationData("FK: Soul of a Stray Demon", "Soul of a Stray Demon", DS3LocationCategory.BOSS), + DS3LocationData("FK: Watchdogs of Farron", "Watchdogs of Farron", DS3LocationCategory.MISC), + ], + "Catacombs of Carthus": [ + DS3LocationData("CC: Carthus Pyromancy Tome", "Carthus Pyromancy Tome", DS3LocationCategory.MISC), + DS3LocationData("CC: Carthus Milkring", "Carthus Milkring", DS3LocationCategory.RING), + DS3LocationData("CC: Grave Warden's Ashes", "Grave Warden's Ashes", DS3LocationCategory.MISC), + DS3LocationData("CC: Carthus Bloodring", "Carthus Bloodring", DS3LocationCategory.RING), + DS3LocationData("CC: Grave Warden Pyromancy Tome", "Grave Warden Pyromancy Tome", DS3LocationCategory.MISC), + DS3LocationData("CC: Old Sage's Blindfold", "Old Sage's Blindfold", DS3LocationCategory.ARMOR), + DS3LocationData("CC: Witch's Ring", "Witch's Ring", DS3LocationCategory.RING), + DS3LocationData("CC: Black Blade", "Black Blade", DS3LocationCategory.WEAPON), + DS3LocationData("CC: Soul of High Lord Wolnir", "Soul of High Lord Wolnir", DS3LocationCategory.BOSS), + DS3LocationData("CC: Soul of a Demon", "Soul of a Demon", DS3LocationCategory.BOSS), + ], + "Smouldering Lake": [ + DS3LocationData("SL: Shield of Want", "Shield of Want", DS3LocationCategory.SHIELD), + DS3LocationData("SL: Speckled Stoneplate Ring", "Speckled Stoneplate Ring", DS3LocationCategory.RING), + DS3LocationData("SL: Dragonrider Bow", "Dragonrider Bow", DS3LocationCategory.WEAPON), + DS3LocationData("SL: Lightning Stake", "Lightning Stake", DS3LocationCategory.SPELL), + DS3LocationData("SL: Izalith Pyromancy Tome", "Izalith Pyromancy Tome", DS3LocationCategory.MISC), + DS3LocationData("SL: Black Knight Sword", "Black Knight Sword", DS3LocationCategory.WEAPON), + DS3LocationData("SL: Quelana Pyromancy Tome", "Quelana Pyromancy Tome", DS3LocationCategory.MISC), + DS3LocationData("SL: Toxic Mist", "Toxic Mist", DS3LocationCategory.SPELL), + DS3LocationData("SL: White Hair Talisman", "White Hair Talisman", DS3LocationCategory.WEAPON), + DS3LocationData("SL: Izalith Staff", "Izalith Staff", DS3LocationCategory.WEAPON), + DS3LocationData("SL: Sacred Flame", "Sacred Flame", DS3LocationCategory.SPELL), + DS3LocationData("SL: Fume Ultra Greatsword", "Fume Ultra Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("SL: Black Iron Greatshield", "Black Iron Greatshield", DS3LocationCategory.SHIELD), + DS3LocationData("SL: Soul of the Old Demon King", "Soul of the Old Demon King", DS3LocationCategory.BOSS), + DS3LocationData("SL: Knight Slayer's Ring", "Knight Slayer's Ring", DS3LocationCategory.RING), + ], + "Irithyll of the Boreal Valley": [ + DS3LocationData("IBV: Dorhys' Gnawing", "Dorhys' Gnawing", DS3LocationCategory.SPELL), + DS3LocationData("IBV: Witchtree Branch", "Witchtree Branch", DS3LocationCategory.WEAPON), + DS3LocationData("IBV: Magic Clutch Ring", "Magic Clutch Ring", DS3LocationCategory.RING), + DS3LocationData("IBV: Ring of the Sun's First Born", "Ring of the Sun's First Born", DS3LocationCategory.RING), + DS3LocationData("IBV: Roster of Knights", "Roster of Knights", DS3LocationCategory.MISC), + DS3LocationData("IBV: Pontiff's Right Eye", "Pontiff's Right Eye", DS3LocationCategory.RING), + DS3LocationData("IBV: Yorshka's Spear", "Yorshka's Spear", DS3LocationCategory.WEAPON), + DS3LocationData("IBV: Great Heal", "Great Heal", DS3LocationCategory.SPELL), + DS3LocationData("IBV: Smough's Great Hammer", "Smough's Great Hammer", DS3LocationCategory.WEAPON), + DS3LocationData("IBV: Leo Ring", "Leo Ring", DS3LocationCategory.RING), + DS3LocationData("IBV: Excrement-covered Ashes", "Excrement-covered Ashes", DS3LocationCategory.MISC), + DS3LocationData("IBV: Dark Stoneplate Ring", "Dark Stoneplate Ring", DS3LocationCategory.RING), + DS3LocationData("IBV: Easterner's Ashes", "Easterner's Ashes", DS3LocationCategory.MISC), + DS3LocationData("IBV: Painting Guardian's Curved Sword", "Painting Guardian's Curved Sword", DS3LocationCategory.WEAPON), + DS3LocationData("IBV: Painting Guardian Hood", "Painting Guardian Hood", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Painting Guardian Gown", "Painting Guardian Gown", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Painting Guardian Gloves", "Painting Guardian Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Painting Guardian Waistcloth", "Painting Guardian Waistcloth", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Dragonslayer Greatbow", "Dragonslayer Greatbow", DS3LocationCategory.WEAPON), + DS3LocationData("IBV: Reversal Ring", "Reversal Ring", DS3LocationCategory.RING), + DS3LocationData("IBV: Brass Helm", "Brass Helm", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Brass Armor", "Brass Armor", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Brass Gauntlets", "Brass Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Brass Leggings", "Brass Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("IBV: Ring of Favor", "Ring of Favor", DS3LocationCategory.RING), + DS3LocationData("IBV: Golden Ritual Spear", "Golden Ritual Spear", DS3LocationCategory.WEAPON), + DS3LocationData("IBV: Soul of Pontiff Sulyvahn", "Soul of Pontiff Sulyvahn", DS3LocationCategory.BOSS), + DS3LocationData("IBV: Aldrich Faithful", "Aldrich Faithful", DS3LocationCategory.MISC), + DS3LocationData("IBV: Drang Twinspears", "Drang Twinspears", DS3LocationCategory.WEAPON), + ], + "Irithyll Dungeon": [ + DS3LocationData("ID: Bellowing Dragoncrest Ring", "Bellowing Dragoncrest Ring", DS3LocationCategory.RING), + DS3LocationData("ID: Jailbreaker's Key", "Jailbreaker's Key", DS3LocationCategory.KEY), + DS3LocationData("ID: Prisoner Chief's Ashes", "Prisoner Chief's Ashes", DS3LocationCategory.KEY), + DS3LocationData("ID: Old Sorcerer Hat", "Old Sorcerer Hat", DS3LocationCategory.ARMOR), + DS3LocationData("ID: Old Sorcerer Coat", "Old Sorcerer Coat", DS3LocationCategory.ARMOR), + DS3LocationData("ID: Old Sorcerer Gauntlets", "Old Sorcerer Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("ID: Old Sorcerer Boots", "Old Sorcerer Boots", DS3LocationCategory.ARMOR), + DS3LocationData("ID: Great Magic Shield", "Great Magic Shield", DS3LocationCategory.SPELL), + DS3LocationData("ID: Dragon Torso Stone", "Dragon Torso Stone", DS3LocationCategory.MISC), + DS3LocationData("ID: Lightning Blade", "Lightning Blade", DS3LocationCategory.SPELL), + DS3LocationData("ID: Profaned Coal", "Profaned Coal", DS3LocationCategory.MISC), + DS3LocationData("ID: Xanthous Ashes", "Xanthous Ashes", DS3LocationCategory.MISC), + DS3LocationData("ID: Old Cell Key", "Old Cell Key", DS3LocationCategory.KEY), + DS3LocationData("ID: Pickaxe", "Pickaxe", DS3LocationCategory.WEAPON), + DS3LocationData("ID: Profaned Flame", "Profaned Flame", DS3LocationCategory.SPELL), + DS3LocationData("ID: Covetous Gold Serpent Ring", "Covetous Gold Serpent Ring", DS3LocationCategory.RING), + DS3LocationData("ID: Jailer's Key Ring", "Jailer's Key Ring", DS3LocationCategory.KEY), + DS3LocationData("ID: Dusk Crown Ring", "Dusk Crown Ring", DS3LocationCategory.RING), + DS3LocationData("ID: Dark Clutch Ring", "Dark Clutch Ring", DS3LocationCategory.RING), + DS3LocationData("ID: Karla's Ashes", "Karla's Ashes", DS3LocationCategory.NPC), + DS3LocationData("ID: Karla's Pointed Hat", "Karla's Pointed Hat", DS3LocationCategory.NPC), + DS3LocationData("ID: Karla's Coat", "Karla's Coat", DS3LocationCategory.NPC), + DS3LocationData("ID: Karla's Gloves", "Karla's Gloves", DS3LocationCategory.NPC), + DS3LocationData("ID: Karla's Trousers", "Karla's Trousers", DS3LocationCategory.NPC), + ], + "Profaned Capital": [ + DS3LocationData("PC: Cursebite Ring", "Cursebite Ring", DS3LocationCategory.RING), + DS3LocationData("PC: Court Sorcerer Hood", "Court Sorcerer Hood", DS3LocationCategory.ARMOR), + DS3LocationData("PC: Court Sorcerer Robe", "Court Sorcerer Robe", DS3LocationCategory.ARMOR), + DS3LocationData("PC: Court Sorcerer Gloves", "Court Sorcerer Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("PC: Court Sorcerer Trousers", "Court Sorcerer Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("PC: Wrath of the Gods", "Wrath of the Gods", DS3LocationCategory.SPELL), + DS3LocationData("PC: Logan's Scroll", "Logan's Scroll", DS3LocationCategory.MISC), + DS3LocationData("PC: Eleonora", "Eleonora", DS3LocationCategory.WEAPON), + DS3LocationData("PC: Court Sorcerer's Staff", "Court Sorcerer's Staff", DS3LocationCategory.WEAPON), + DS3LocationData("PC: Greatshield of Glory", "Greatshield of Glory", DS3LocationCategory.SHIELD), + DS3LocationData("PC: Storm Ruler", "Storm Ruler", DS3LocationCategory.KEY), + DS3LocationData("PC: Cinders of a Lord - Yhorm the Giant", "Cinders of a Lord - Yhorm the Giant", DS3LocationCategory.KEY), + DS3LocationData("PC: Soul of Yhorm the Giant", "Soul of Yhorm the Giant", DS3LocationCategory.BOSS), + ], + "Anor Londo": [ + DS3LocationData("AL: Giant's Coal", "Giant's Coal", DS3LocationCategory.MISC), + DS3LocationData("AL: Sun Princess Ring", "Sun Princess Ring", DS3LocationCategory.RING), + DS3LocationData("AL: Aldrich's Ruby", "Aldrich's Ruby", DS3LocationCategory.RING), + DS3LocationData("AL: Cinders of a Lord - Aldrich", "Cinders of a Lord - Aldrich", DS3LocationCategory.KEY), + DS3LocationData("AL: Soul of Aldrich", "Soul of Aldrich", DS3LocationCategory.BOSS), + ], + "Lothric Castle": [ + DS3LocationData("LC: Hood of Prayer", "Hood of Prayer", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Robe of Prayer", "Robe of Prayer", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Skirt of Prayer", "Skirt of Prayer", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Sacred Bloom Shield", "Sacred Bloom Shield", DS3LocationCategory.SHIELD), + DS3LocationData("LC: Winged Knight Helm", "Winged Knight Helm", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Winged Knight Armor", "Winged Knight Armor", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Winged Knight Gauntlets", "Winged Knight Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Winged Knight Leggings", "Winged Knight Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("LC: Greatlance", "Greatlance", DS3LocationCategory.WEAPON), + DS3LocationData("LC: Sniper Crossbow", "Sniper Crossbow", DS3LocationCategory.WEAPON), + DS3LocationData("LC: Spirit Tree Crest Shield", "Spirit Tree Crest Shield", DS3LocationCategory.SHIELD), + DS3LocationData("LC: Red Tearstone Ring", "Red Tearstone Ring", DS3LocationCategory.RING), + DS3LocationData("LC: Caitha's Chime", "Caitha's Chime", DS3LocationCategory.WEAPON), + DS3LocationData("LC: Braille Divine Tome of Lothric", "Braille Divine Tome of Lothric", DS3LocationCategory.MISC), + DS3LocationData("LC: Knight's Ring", "Knight's Ring", DS3LocationCategory.RING), + DS3LocationData("LC: Irithyll Rapier", "Irithyll Rapier", DS3LocationCategory.WEAPON), + DS3LocationData("LC: Sunlight Straight Sword", "Sunlight Straight Sword", DS3LocationCategory.WEAPON), + DS3LocationData("LC: Soul of Dragonslayer Armour", "Soul of Dragonslayer Armour", DS3LocationCategory.BOSS), + DS3LocationData("LC: Grand Archives Key", "Grand Archives Key", DS3LocationCategory.KEY), + DS3LocationData("LC: Gotthard Twinswords", "Gotthard Twinswords", DS3LocationCategory.WEAPON), + ], + "Consumed King's Garden": [ + DS3LocationData("CKG: Dragonscale Ring", "Dragonscale Ring", DS3LocationCategory.RING), + DS3LocationData("CKG: Shadow Mask", "Shadow Mask", DS3LocationCategory.ARMOR), + DS3LocationData("CKG: Shadow Garb", "Shadow Garb", DS3LocationCategory.ARMOR), + DS3LocationData("CKG: Shadow Gauntlets", "Shadow Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("CKG: Shadow Leggings", "Shadow Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("CKG: Claw", "Claw", DS3LocationCategory.WEAPON), + DS3LocationData("CKG: Soul of Consumed Oceiros", "Soul of Consumed Oceiros", DS3LocationCategory.BOSS), + DS3LocationData("CKG: Magic Stoneplate Ring", "Magic Stoneplate Ring", DS3LocationCategory.RING), + ], + "Grand Archives": [ + DS3LocationData("GA: Avelyn", "Avelyn", DS3LocationCategory.WEAPON), + DS3LocationData("GA: Witch's Locks", "Witch's Locks", DS3LocationCategory.WEAPON), + DS3LocationData("GA: Power Within", "Power Within", DS3LocationCategory.SPELL), + DS3LocationData("GA: Scholar Ring", "Scholar Ring", DS3LocationCategory.RING), + DS3LocationData("GA: Soul Stream", "Soul Stream", DS3LocationCategory.SPELL), + DS3LocationData("GA: Fleshbite Ring", "Fleshbite Ring", DS3LocationCategory.RING), + DS3LocationData("GA: Crystal Chime", "Crystal Chime", DS3LocationCategory.WEAPON), + DS3LocationData("GA: Golden Wing Crest Shield", "Golden Wing Crest Shield", DS3LocationCategory.SHIELD), + DS3LocationData("GA: Onikiri and Ubadachi", "Onikiri and Ubadachi", DS3LocationCategory.WEAPON), + DS3LocationData("GA: Hunter's Ring", "Hunter's Ring", DS3LocationCategory.RING), + DS3LocationData("GA: Divine Pillars of Light", "Divine Pillars of Light", DS3LocationCategory.SPELL), + DS3LocationData("GA: Cinders of a Lord - Lothric Prince", "Cinders of a Lord - Lothric Prince", DS3LocationCategory.KEY), + DS3LocationData("GA: Soul of the Twin Princes", "Soul of the Twin Princes", DS3LocationCategory.BOSS), + DS3LocationData("GA: Sage's Crystal Staff", "Sage's Crystal Staff", DS3LocationCategory.WEAPON), + DS3LocationData("GA: Outrider Knight Helm", "Outrider Knight Helm", DS3LocationCategory.ARMOR), + DS3LocationData("GA: Outrider Knight Armor", "Outrider Knight Armor", DS3LocationCategory.ARMOR), + DS3LocationData("GA: Outrider Knight Gauntlets", "Outrider Knight Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("GA: Outrider Knight Leggings", "Outrider Knight Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("GA: Crystal Scroll", "Crystal Scroll", DS3LocationCategory.MISC), + ], + "Untended Graves": [ + DS3LocationData("UG: Ashen Estus Ring", "Ashen Estus Ring", DS3LocationCategory.RING), + DS3LocationData("UG: Black Knight Glaive", "Black Knight Glaive", DS3LocationCategory.WEAPON), + DS3LocationData("UG: Hornet Ring", "Hornet Ring", DS3LocationCategory.RING), + DS3LocationData("UG: Chaos Blade", "Chaos Blade", DS3LocationCategory.WEAPON), + DS3LocationData("UG: Blacksmith Hammer", "Blacksmith Hammer", DS3LocationCategory.WEAPON), + DS3LocationData("UG: Eyes of a Fire Keeper", "Eyes of a Fire Keeper", DS3LocationCategory.KEY), + DS3LocationData("UG: Coiled Sword Fragment", "Coiled Sword Fragment", DS3LocationCategory.MISC), + DS3LocationData("UG: Soul of Champion Gundyr", "Soul of Champion Gundyr", DS3LocationCategory.BOSS), + ], + "Archdragon Peak": [ + DS3LocationData("AP: Lightning Clutch Ring", "Lightning Clutch Ring", DS3LocationCategory.RING), + DS3LocationData("AP: Ancient Dragon Greatshield", "Ancient Dragon Greatshield", DS3LocationCategory.SHIELD), + DS3LocationData("AP: Ring of Steel Protection", "Ring of Steel Protection", DS3LocationCategory.RING), + DS3LocationData("AP: Calamity Ring", "Calamity Ring", DS3LocationCategory.RING), + DS3LocationData("AP: Drakeblood Greatsword", "Drakeblood Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("AP: Dragonslayer Spear", "Dragonslayer Spear", DS3LocationCategory.WEAPON), + DS3LocationData("AP: Thunder Stoneplate Ring", "Thunder Stoneplate Ring", DS3LocationCategory.RING), + DS3LocationData("AP: Great Magic Barrier", "Great Magic Barrier", DS3LocationCategory.SPELL), + DS3LocationData("AP: Dragon Chaser's Ashes", "Dragon Chaser's Ashes", DS3LocationCategory.MISC), + DS3LocationData("AP: Twinkling Dragon Torso Stone", "Twinkling Dragon Torso Stone", DS3LocationCategory.MISC), + DS3LocationData("AP: Dragonslayer Helm", "Dragonslayer Helm", DS3LocationCategory.ARMOR), + DS3LocationData("AP: Dragonslayer Armor", "Dragonslayer Armor", DS3LocationCategory.ARMOR), + DS3LocationData("AP: Dragonslayer Gauntlets", "Dragonslayer Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("AP: Dragonslayer Leggings", "Dragonslayer Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("AP: Ricard's Rapier", "Ricard's Rapier", DS3LocationCategory.WEAPON), + DS3LocationData("AP: Soul of the Nameless King", "Soul of the Nameless King", DS3LocationCategory.BOSS), + DS3LocationData("AP: Dragon Tooth", "Dragon Tooth", DS3LocationCategory.WEAPON), + DS3LocationData("AP: Havel's Greatshield", "Havel's Greatshield", DS3LocationCategory.SHIELD), + ], + "Kiln of the First Flame": [], + + # DLC + "Painted World of Ariandel 1": [ + DS3LocationData("PW: Follower Javelin", "Follower Javelin", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Frozen Weapon", "Frozen Weapon", DS3LocationCategory.SPELL), + DS3LocationData("PW: Millwood Greatbow", "Millwood Greatbow", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Captain's Ashes", "Captain's Ashes", DS3LocationCategory.MISC), + DS3LocationData("PW: Millwood Battle Axe", "Millwood Battle Axe", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Ethereal Oak Shield", "Ethereal Oak Shield", DS3LocationCategory.SHIELD), + DS3LocationData("PW: Crow Quills", "Crow Quills", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Slave Knight Hood", "Slave Knight Hood", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Slave Knight Armor", "Slave Knight Armor", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Slave Knight Gauntlets", "Slave Knight Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Slave Knight Leggings", "Slave Knight Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Way of White Corona", "Way of White Corona", DS3LocationCategory.SPELL), + DS3LocationData("PW: Crow Talons", "Crow Talons", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Onyx Blade", "Onyx Blade", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Contraption Key", "Contraption Key", DS3LocationCategory.KEY), + ], + "Painted World of Ariandel 2": [ + DS3LocationData("PW: Quakestone Hammer", "Quakestone Hammer", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Earth Seeker", "Earth Seeker", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Follower Torch", "Follower Torch", DS3LocationCategory.SHIELD), + DS3LocationData("PW: Follower Shield", "Follower Shield", DS3LocationCategory.SHIELD), + DS3LocationData("PW: Follower Sabre", "Follower Sabre", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Snap Freeze", "Snap Freeze", DS3LocationCategory.SPELL), + DS3LocationData("PW: Floating Chaos", "Floating Chaos", DS3LocationCategory.SPELL), + DS3LocationData("PW: Pyromancer's Parting Flame", "Pyromancer's Parting Flame", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Vilhelm's Helm", "Vilhelm's Helm", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Vilhelm's Armor", "Vilhelm's Armor", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Vilhelm's Gauntlets", "Vilhelm's Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Vilhelm's Leggings", "Vilhelm's Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("PW: Valorheart", "Valorheart", DS3LocationCategory.WEAPON), + DS3LocationData("PW: Champion's Bones", "Champion's Bones", DS3LocationCategory.MISC), + DS3LocationData("PW: Soul of Sister Friede", "Soul of Sister Friede", DS3LocationCategory.BOSS), + DS3LocationData("PW: Chillbite Ring", "Chillbite Ring", DS3LocationCategory.RING), + ], + "Dreg Heap": [ + DS3LocationData("DH: Loincloth", "Loincloth", DS3LocationCategory.ARMOR), + DS3LocationData("DH: Aquamarine Dagger", "Aquamarine Dagger", DS3LocationCategory.WEAPON), + DS3LocationData("DH: Murky Hand Scythe", "Murky Hand Scythe", DS3LocationCategory.WEAPON), + DS3LocationData("DH: Murky Longstaff", "Murky Longstaff", DS3LocationCategory.WEAPON), + DS3LocationData("DH: Great Soul Dregs", "Great Soul Dregs", DS3LocationCategory.SPELL), + DS3LocationData("DH: Lothric War Banner", "Lothric War Banner", DS3LocationCategory.WEAPON), + DS3LocationData("DH: Projected Heal", "Projected Heal", DS3LocationCategory.SPELL), + DS3LocationData("DH: Desert Pyromancer Hood", "Desert Pyromancer Hood", DS3LocationCategory.ARMOR), + DS3LocationData("DH: Desert Pyromancer Garb", "Desert Pyromancer Garb", DS3LocationCategory.ARMOR), + DS3LocationData("DH: Desert Pyromancer Gloves", "Desert Pyromancer Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("DH: Desert Pyromancer Skirt", "Desert Pyromancer Skirt", DS3LocationCategory.ARMOR), + DS3LocationData("DH: Giant Door Shield", "Giant Door Shield", DS3LocationCategory.SHIELD), + DS3LocationData("DH: Herald Curved Greatsword", "Herald Curved Greatsword", DS3LocationCategory.WEAPON), + DS3LocationData("DH: Flame Fan", "Flame Fan", DS3LocationCategory.SPELL), + DS3LocationData("DH: Soul of the Demon Prince", "Soul of the Demon Prince", DS3LocationCategory.BOSS), + DS3LocationData("DH: Small Envoy Banner", "Small Envoy Banner", DS3LocationCategory.KEY), + DS3LocationData("DH: Ring of Favor+3", "Ring of Favor+3", DS3LocationCategory.RING), + DS3LocationData("DH: Covetous Silver Serpent Ring+3", "Covetous Silver Serpent Ring+3", DS3LocationCategory.RING), + ], + "Ringed City": [ + DS3LocationData("RC: Ruin Sentinel Helm", "Ruin Sentinel Helm", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Ruin Sentinel Armor", "Ruin Sentinel Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Ruin Sentinel Gauntlets", "Ruin Sentinel Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Ruin Sentinel Leggings", "Ruin Sentinel Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Black Witch Veil", "Black Witch Veil", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Black Witch Hat", "Black Witch Hat", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Black Witch Garb", "Black Witch Garb", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Black Witch Wrappings", "Black Witch Wrappings", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Black Witch Trousers", "Black Witch Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RC: White Preacher Head", "White Preacher Head", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Havel's Ring+3", "Havel's Ring+3", DS3LocationCategory.RING), + DS3LocationData("RC: Ringed Knight Spear", "Ringed Knight Spear", DS3LocationCategory.WEAPON), + DS3LocationData("RC: Dragonhead Shield", "Dragonhead Shield", DS3LocationCategory.SHIELD), + DS3LocationData("RC: Ringed Knight Straight Sword", "Ringed Knight Straight Sword", DS3LocationCategory.WEAPON), + DS3LocationData("RC: Preacher's Right Arm", "Preacher's Right Arm", DS3LocationCategory.WEAPON), + DS3LocationData("RC: White Birch Bow", "White Birch Bow", DS3LocationCategory.WEAPON), + DS3LocationData("RC: Church Guardian Shiv", "Church Guardian Shiv", DS3LocationCategory.MISC), + DS3LocationData("RC: Dragonhead Greatshield", "Dragonhead Greatshield", DS3LocationCategory.SHIELD), + DS3LocationData("RC: Ringed Knight Paired Greatswords", "Ringed Knight Paired Greatswords", DS3LocationCategory.WEAPON), + DS3LocationData("RC: Shira's Crown", "Shira's Crown", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Shira's Armor", "Shira's Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Shira's Gloves", "Shira's Gloves", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Shira's Trousers", "Shira's Trousers", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Crucifix of the Mad King", "Crucifix of the Mad King", DS3LocationCategory.WEAPON), + DS3LocationData("RC: Sacred Chime of Filianore", "Sacred Chime of Filianore", DS3LocationCategory.WEAPON), + DS3LocationData("RC: Iron Dragonslayer Helm", "Iron Dragonslayer Helm", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Iron Dragonslayer Armor", "Iron Dragonslayer Armor", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Iron Dragonslayer Gauntlets", "Iron Dragonslayer Gauntlets", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Iron Dragonslayer Leggings", "Iron Dragonslayer Leggings", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Lightning Arrow", "Lightning Arrow", DS3LocationCategory.SPELL), + DS3LocationData("RC: Ritual Spear Fragment", "Ritual Spear Fragment", DS3LocationCategory.MISC), + DS3LocationData("RC: Antiquated Plain Garb", "Antiquated Plain Garb", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Violet Wrappings", "Violet Wrappings", DS3LocationCategory.ARMOR), + DS3LocationData("RC: Soul of Darkeater Midir", "Soul of Darkeater Midir", DS3LocationCategory.BOSS), + DS3LocationData("RC: Soul of Slave Knight Gael", "Soul of Slave Knight Gael", DS3LocationCategory.BOSS), + DS3LocationData("RC: Blood of the Dark Soul", "Blood of the Dark Soul", DS3LocationCategory.KEY), + DS3LocationData("RC: Chloranthy Ring+3", "Chloranthy Ring+3", DS3LocationCategory.RING), + DS3LocationData("RC: Ring of Steel Protection+3", "Ring of Steel Protection+3", DS3LocationCategory.RING), + DS3LocationData("RC: Covetous Gold Serpent Ring+3", "Covetous Gold Serpent Ring+3", DS3LocationCategory.RING), + DS3LocationData("RC: Ring of the Evil Eye+3", "Ring of the Evil Eye+3", DS3LocationCategory.RING), + DS3LocationData("RC: Wolf Ring+3", "Wolf Ring+3", DS3LocationCategory.RING), + ], + + # Progressive + "Progressive Items 1": [] + + # Upgrade materials + [DS3LocationData(f"Titanite Shard #{i + 1}", "Titanite Shard", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(26)] + + [DS3LocationData(f"Large Titanite Shard #{i + 1}", "Large Titanite Shard", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(28)] + + [DS3LocationData(f"Titanite Slab #{i + 1}", "Titanite Slab", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Twinkling Titanite #{i + 1}", "Twinkling Titanite", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(15)] + + + # Healing + [DS3LocationData(f"Estus Shard #{i + 1}", "Estus Shard", DS3LocationCategory.HEALTH) for i in range(11)] + + [DS3LocationData(f"Undead Bone Shard #{i + 1}", "Undead Bone Shard", DS3LocationCategory.HEALTH) for i in range(10)], + + "Progressive Items 2": [] + + # Items + [DS3LocationData(f"Green Blossom #{i + 1}", "Green Blossom", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(6)] + + [DS3LocationData(f"Firebomb #{i + 1}", "Firebomb", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(4)] + + [DS3LocationData(f"Alluring Skull #{i + 1}", "Alluring Skull", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Undead Hunter Charm #{i + 1}", "Undead Hunter Charm", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Duel Charm #{i + 1}", "Duel Charm", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Throwing Knife #{i + 1}", "Throwing Knife", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Gold Pine Resin #{i + 1}", "Gold Pine Resin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Charcoal Pine Resin #{i + 1}", "Charcoal Pine Resin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Human Pine Resin #{i + 1}", "Human Pine Resin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Carthus Rouge #{i + 1}", "Carthus Rouge", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Pale Pine Resin #{i + 1}", "Pale Pine Resin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Charcoal Pine Bundle #{i + 1}", "Charcoal Pine Bundle", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Rotten Pine Resin #{i + 1}", "Rotten Pine Resin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Homeward Bone #{i + 1}", "Homeward Bone", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(16)] + + [DS3LocationData(f"Pale Tongue #{i + 1}", "Pale Tongue", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Rusted Coin #{i + 1}", "Rusted Coin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Rusted Gold Coin #{i + 1}", "Rusted Gold Coin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Ember #{i + 1}", "Ember", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(45)], + + "Progressive Items 3": [] + + # Souls & Bulk Upgrade Materials + [DS3LocationData(f"Fading Soul #{i + 1}", "Fading Soul", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Soul of a Deserted Corpse #{i + 1}", "Soul of a Deserted Corpse", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Large Soul of a Deserted Corpse #{i + 1}", "Large Soul of a Deserted Corpse", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Soul of an Unknown Traveler #{i + 1}", "Soul of an Unknown Traveler", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Large Soul of an Unknown Traveler #{i + 1}", "Large Soul of an Unknown Traveler", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Soul of a Nameless Soldier #{i + 1}", "Soul of a Nameless Soldier", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(4)] + + [DS3LocationData(f"Large Soul of a Nameless Soldier #{i + 1}", "Large Soul of a Nameless Soldier", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(4)] + + [DS3LocationData(f"Soul of a Weary Warrior #{i + 1}", "Soul of a Weary Warrior", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(6)] + + [DS3LocationData(f"Soul of a Crestfallen Knight #{i + 1}", "Soul of a Crestfallen Knight", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Titanite Chunk #{i + 1}", "Titanite Chunk", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(22)] + + [DS3LocationData(f"Titanite Scale #{i + 1}", "Titanite Scale", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(29)], + + "Progressive Items 4": [] + + # Gems & Random Consumables + [DS3LocationData(f"Ring of Sacrifice #{i + 1}", "Ring of Sacrifice", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(4)] + + [DS3LocationData(f"Divine Blessing #{i + 1}", "Divine Blessing", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Hidden Blessing #{i + 1}", "Hidden Blessing", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Budding Green Blossom #{i + 1}", "Budding Green Blossom", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Bloodred Moss Clump #{i + 1}", "Bloodred Moss Clump", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Purple Moss Clump #{i + 1}", "Purple Moss Clump", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Blooming Purple Moss Clump #{i + 1}", "Blooming Purple Moss Clump", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Purging Stone #{i + 1}", "Purging Stone", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Rime-blue Moss Clump #{i + 1}", "Rime-blue Moss Clump", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Repair Powder #{i + 1}", "Repair Powder", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Kukri #{i + 1}", "Kukri", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Lightning Urn #{i + 1}", "Lightning Urn", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Rubbish #{i + 1}", "Rubbish", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Blue Bug Pellet #{i + 1}", "Blue Bug Pellet", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Red Bug Pellet #{i + 1}", "Red Bug Pellet", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Yellow Bug Pellet #{i + 1}", "Yellow Bug Pellet", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Black Bug Pellet #{i + 1}", "Black Bug Pellet", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Heavy Gem #{i + 1}", "Heavy Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Sharp Gem #{i + 1}", "Sharp Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Refined Gem #{i + 1}", "Refined Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Crystal Gem #{i + 1}", "Crystal Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Simple Gem #{i + 1}", "Simple Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Fire Gem #{i + 1}", "Fire Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Chaos Gem #{i + 1}", "Chaos Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Lightning Gem #{i + 1}", "Lightning Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Deep Gem #{i + 1}", "Deep Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Dark Gem #{i + 1}", "Dark Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Poison Gem #{i + 1}", "Poison Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Blood Gem #{i + 1}", "Blood Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Raw Gem #{i + 1}", "Raw Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Blessed Gem #{i + 1}", "Blessed Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Hollow Gem #{i + 1}", "Hollow Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Shriving Stone #{i + 1}", "Shriving Stone", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)], + + "Progressive Items DLC": [] + + # Upgrade materials + [DS3LocationData(f"Large Titanite Shard ${i + 1}", "Large Titanite Shard", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Titanite Chunk ${i + 1}", "Titanite Chunk", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(15)] + + [DS3LocationData(f"Titanite Slab ${i + 1}", "Titanite Slab", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Twinkling Titanite ${i + 1}", "Twinkling Titanite", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Titanite Scale ${i + 1}", "Titanite Scale", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(11)] + + + + # Items + [DS3LocationData(f"Homeward Bone ${i + 1}", "Homeward Bone", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(6)] + + [DS3LocationData(f"Rusted Coin ${i + 1}", "Rusted Coin", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + [DS3LocationData(f"Ember ${i + 1}", "Ember", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(10)] + + + # Souls + [DS3LocationData(f"Large Soul of an Unknown Traveler ${i + 1}", "Large Soul of an Unknown Traveler", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(9)] + + [DS3LocationData(f"Soul of a Weary Warrior ${i + 1}", "Soul of a Weary Warrior", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(5)] + + [DS3LocationData(f"Large Soul of a Weary Warrior ${i + 1}", "Large Soul of a Weary Warrior", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(6)] + + [DS3LocationData(f"Soul of a Crestfallen Knight ${i + 1}", "Soul of a Crestfallen Knight", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(6)] + + [DS3LocationData(f"Large Soul of a Crestfallen Knight ${i + 1}", "Large Soul of a Crestfallen Knight", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(3)] + + + # Gems + [DS3LocationData(f"Dark Gem ${i + 1}", "Dark Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Blood Gem ${i + 1}", "Blood Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(1)] + + [DS3LocationData(f"Blessed Gem ${i + 1}", "Blessed Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] + + [DS3LocationData(f"Hollow Gem ${i + 1}", "Hollow Gem", DS3LocationCategory.PROGRESSIVE_ITEM) for i in range(2)] +} + +location_dictionary: Dict[str, DS3LocationData] = {} +for location_table in location_tables.values(): + location_dictionary.update({location_data.name: location_data for location_data in location_table}) diff --git a/worlds/dark_souls_3/Options.py b/worlds/dark_souls_3/Options.py index dc9510a7..d613e473 100644 --- a/worlds/dark_souls_3/Options.py +++ b/worlds/dark_souls_3/Options.py @@ -1,16 +1,91 @@ import typing -from Options import Toggle, Option, Range, Choice, DeathLink + +from Options import Toggle, DefaultOnToggle, Option, Range, Choice, ItemDict, DeathLink + + +class RandomizeWeaponLocations(DefaultOnToggle): + """Randomizes weapons (+76 locations)""" + display_name = "Randomize Weapon Locations" + + +class RandomizeShieldLocations(DefaultOnToggle): + """Randomizes shields (+24 locations)""" + display_name = "Randomize Shield Locations" + + +class RandomizeArmorLocations(DefaultOnToggle): + """Randomizes armor pieces (+97 locations)""" + display_name = "Randomize Armor Locations" + + +class RandomizeRingLocations(DefaultOnToggle): + """Randomizes rings (+49 locations)""" + display_name = "Randomize Ring Locations" + + +class RandomizeSpellLocations(DefaultOnToggle): + """Randomizes spells (+18 locations)""" + display_name = "Randomize Spell Locations" + + +class RandomizeKeyLocations(DefaultOnToggle): + """Randomizes items which unlock doors or bypass barriers""" + display_name = "Randomize Key Locations" + + +class RandomizeBossSoulLocations(DefaultOnToggle): + """Randomizes Boss Souls (+18 Locations)""" + display_name = "Randomize Boss Soul Locations" + + +class RandomizeNPCLocations(Toggle): + """Randomizes friendly NPC drops (meaning you will probably have to kill them) (+14 locations)""" + display_name = "Randomize NPC Locations" + + +class RandomizeMiscLocations(Toggle): + """Randomizes miscellaneous items (ashes, tomes, scrolls, etc.) to the pool. (+36 locations)""" + display_name = "Randomize Miscellaneous Locations" + + +class RandomizeHealthLocations(Toggle): + """Randomizes health upgrade items. (+21 locations)""" + display_name = "Randomize Health Upgrade Locations" + + +class RandomizeProgressiveLocationsOption(Toggle): + """Randomizes upgrade materials and consumables such as the titanite shards, firebombs, resin, etc... + + Instead of specific locations, these are progressive, so Titanite Shard #1 is the first titanite shard + you pick up, regardless of whether it's from an enemy drop late in the game or an item on the ground in the + first 5 minutes.""" + display_name = "Randomize Progressive Locations" + + +class PoolTypeOption(Choice): + """Changes which non-progression items you add to the pool + + Shuffle: Items are picked from the locations being randomized + Various: Items are picked from a list of all items in the game, but are the same type of item they replace""" + display_name = "Pool Type" + option_shuffle = 0 + option_various = 1 + + +class GuaranteedItemsOption(ItemDict): + """Guarantees that the specified items will be in the item pool""" + display_name = "Guaranteed Items" class AutoEquipOption(Toggle): """Automatically equips any received armor or left/right weapons.""" - display_name = "Auto-equip" + display_name = "Auto-Equip" class LockEquipOption(Toggle): """Lock the equipment slots so you cannot change your armor or your left/right weapons. Works great with the Auto-equip option.""" - display_name = "Lock Equipement Slots" + display_name = "Lock Equipment Slots" class NoWeaponRequirementsOption(Toggle): @@ -26,93 +101,124 @@ class NoSpellRequirementsOption(Toggle): class NoEquipLoadOption(Toggle): """Disable the equip load constraint from the game""" - display_name = "No Equip load" + display_name = "No Equip Load" -class RandomizeWeaponsLevelOption(Choice): +class RandomizeInfusionOption(Toggle): + """Enable this option to infuse a percentage of the pool of weapons and shields.""" + display_name = "Randomize Infusion" + + +class RandomizeInfusionPercentageOption(Range): + """The percentage of weapons/shields in the pool to be infused if Randomize Infusion is toggled""" + display_name = "Percentage of Infused Weapons" + range_start = 0 + range_end = 100 + default = 33 + + +class RandomizeWeaponLevelOption(Choice): """Enable this option to upgrade a percentage of the pool of weapons to a random value between the minimum and - maximum levels defined. - all: All weapons are eligible, both basic and epic - basic: Only weapons that can be upgraded to +10 - epic: Only weapons that can be upgraded to +5""" - display_name = "Randomize weapons level" + maximum levels defined. + + All: All weapons are eligible, both basic and epic + Basic: Only weapons that can be upgraded to +10 + Epic: Only weapons that can be upgraded to +5""" + display_name = "Randomize Weapon Level" option_none = 0 option_all = 1 option_basic = 2 option_epic = 3 -class RandomizeWeaponsLevelPercentageOption(Range): +class RandomizeWeaponLevelPercentageOption(Range): """The percentage of weapons in the pool to be upgraded if randomize weapons level is toggled""" - display_name = "Percentage of randomized weapons" - range_start = 1 + display_name = "Percentage of Randomized Weapons" + range_start = 0 range_end = 100 default = 33 class MinLevelsIn5WeaponPoolOption(Range): """The minimum upgraded value of a weapon in the pool of weapons that can only reach +5""" - display_name = "Minimum level of +5 weapons" - range_start = 1 + display_name = "Minimum Level of +5 Weapons" + range_start = 0 range_end = 5 default = 1 class MaxLevelsIn5WeaponPoolOption(Range): """The maximum upgraded value of a weapon in the pool of weapons that can only reach +5""" - display_name = "Maximum level of +5 weapons" - range_start = 1 + display_name = "Maximum Level of +5 Weapons" + range_start = 0 range_end = 5 default = 5 class MinLevelsIn10WeaponPoolOption(Range): """The minimum upgraded value of a weapon in the pool of weapons that can reach +10""" - display_name = "Minimum level of +10 weapons" - range_start = 1 + display_name = "Minimum Level of +10 Weapons" + range_start = 0 range_end = 10 default = 1 class MaxLevelsIn10WeaponPoolOption(Range): """The maximum upgraded value of a weapon in the pool of weapons that can reach +10""" - display_name = "Maximum level of +10 weapons" - range_start = 1 + display_name = "Maximum Level of +10 Weapons" + range_start = 0 range_end = 10 default = 10 class LateBasinOfVowsOption(Toggle): - """Force the Basin of Vows to be located as a reward of defeating Pontiff Sulyvahn. It permits to ease the - progression by preventing having to kill the Dancer of the Boreal Valley as the first boss""" + """This option makes it so the Basin of Vows is still randomized, but guarantees you that you wont have to venture into + Lothric Castle to find your Small Lothric Banner to get out of High Wall of Lothric. So you may find Basin of Vows early, + but you wont have to fight Dancer to find your Small Lothric Banner.""" display_name = "Late Basin of Vows" -class EnableProgressiveLocationsOption(Toggle): - """Randomize upgrade materials such as the titanite shards, the estus shards and the consumables""" - display_name = "Randomize materials, Estus shards and consumables (+196 checks/items)" +class LateDLCOption(Toggle): + """This option makes it so you are guaranteed to find your Small Doll without having to venture off into the DLC, + effectively putting anything in the DLC in logic after finding both Contraption Key and Small Doll, + and being able to get into Irithyll of the Boreal Valley.""" + display_name = "Late DLC" class EnableDLCOption(Toggle): """To use this option, you must own both the ASHES OF ARIANDEL and the RINGED CITY DLC""" - display_name = "Add the DLC Items and Locations to the pool (+81 checks/items)" + display_name = "Enable DLC" -dark_souls_options: typing.Dict[str, type(Option)] = { +dark_souls_options: typing.Dict[str, Option] = { + "enable_weapon_locations": RandomizeWeaponLocations, + "enable_shield_locations": RandomizeShieldLocations, + "enable_armor_locations": RandomizeArmorLocations, + "enable_ring_locations": RandomizeRingLocations, + "enable_spell_locations": RandomizeSpellLocations, + "enable_key_locations": RandomizeKeyLocations, + "enable_boss_locations": RandomizeBossSoulLocations, + "enable_npc_locations": RandomizeNPCLocations, + "enable_misc_locations": RandomizeMiscLocations, + "enable_health_upgrade_locations": RandomizeHealthLocations, + "enable_progressive_locations": RandomizeProgressiveLocationsOption, + "pool_type": PoolTypeOption, + "guaranteed_items": GuaranteedItemsOption, "auto_equip": AutoEquipOption, "lock_equip": LockEquipOption, "no_weapon_requirements": NoWeaponRequirementsOption, - "randomize_weapons_level": RandomizeWeaponsLevelOption, - "randomize_weapons_percentage": RandomizeWeaponsLevelPercentageOption, + "randomize_infusion": RandomizeInfusionOption, + "randomize_infusion_percentage": RandomizeInfusionPercentageOption, + "randomize_weapon_level": RandomizeWeaponLevelOption, + "randomize_weapon_level_percentage": RandomizeWeaponLevelPercentageOption, "min_levels_in_5": MinLevelsIn5WeaponPoolOption, "max_levels_in_5": MaxLevelsIn5WeaponPoolOption, "min_levels_in_10": MinLevelsIn10WeaponPoolOption, "max_levels_in_10": MaxLevelsIn10WeaponPoolOption, "late_basin_of_vows": LateBasinOfVowsOption, + "late_dlc": LateDLCOption, "no_spell_requirements": NoSpellRequirementsOption, "no_equip_load": NoEquipLoadOption, "death_link": DeathLink, - "enable_progressive_locations": EnableProgressiveLocationsOption, "enable_dlc": EnableDLCOption, } - diff --git a/worlds/dark_souls_3/__init__.py b/worlds/dark_souls_3/__init__.py index d08cd3ee..1f6a7a48 100644 --- a/worlds/dark_souls_3/__init__.py +++ b/worlds/dark_souls_3/__init__.py @@ -1,21 +1,15 @@ # world/dark_souls_3/__init__.py -from typing import Dict +from typing import Dict, Set, List -from .Items import DarkSouls3Item -from .Locations import DarkSouls3Location -from .Options import dark_souls_options -from .data.items_data import weapons_upgrade_5_table, weapons_upgrade_10_table, item_dictionary, key_items_list, \ - dlc_weapons_upgrade_5_table, dlc_weapons_upgrade_10_table -from .data.locations_data import location_dictionary, fire_link_shrine_table, \ - high_wall_of_lothric, \ - undead_settlement_table, road_of_sacrifice_table, consumed_king_garden_table, cathedral_of_the_deep_table, \ - farron_keep_table, catacombs_of_carthus_table, smouldering_lake_table, irithyll_of_the_boreal_valley_table, \ - irithyll_dungeon_table, profaned_capital_table, anor_londo_table, lothric_castle_table, grand_archives_table, \ - untended_graves_table, archdragon_peak_table, firelink_shrine_bell_tower_table, progressive_locations, \ - progressive_locations_2, progressive_locations_3, painted_world_table, dreg_heap_table, ringed_city_table, dlc_progressive_locations -from ..AutoWorld import World, WebWorld from BaseClasses import MultiWorld, Region, Item, Entrance, Tutorial, ItemClassification -from ..generic.Rules import set_rule, add_item_rule +from Options import Toggle + +from worlds.AutoWorld import World, WebWorld +from worlds.generic.Rules import set_rule, add_rule, add_item_rule + +from .Items import DarkSouls3Item, DS3ItemCategory, item_dictionary, key_item_names +from .Locations import DarkSouls3Location, DS3LocationCategory, location_tables, location_dictionary +from .Options import RandomizeWeaponLevelOption, PoolTypeOption, dark_souls_options class DarkSouls3Web(WebWorld): @@ -52,212 +46,394 @@ class DarkSouls3World(World): option_definitions = dark_souls_options topology_present: bool = True web = DarkSouls3Web() - data_version = 5 + data_version = 6 base_id = 100000 - required_client_version = (0, 3, 7) + enabled_location_categories: Set[DS3LocationCategory] + required_client_version = (0, 4, 2) item_name_to_id = DarkSouls3Item.get_name_to_id() location_name_to_id = DarkSouls3Location.get_name_to_id() - def __init__(self, world: MultiWorld, player: int): - super().__init__(world, player) + + def __init__(self, multiworld: MultiWorld, player: int): + super().__init__(multiworld, player) self.locked_items = [] self.locked_locations = [] self.main_path_locations = [] + self.enabled_location_categories = set() + + + def generate_early(self): + if self.multiworld.enable_weapon_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.WEAPON) + if self.multiworld.enable_shield_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.SHIELD) + if self.multiworld.enable_armor_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.ARMOR) + if self.multiworld.enable_ring_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.RING) + if self.multiworld.enable_spell_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.SPELL) + if self.multiworld.enable_npc_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.NPC) + if self.multiworld.enable_key_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.KEY) + if self.multiworld.enable_boss_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.BOSS) + if self.multiworld.enable_misc_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.MISC) + if self.multiworld.enable_health_upgrade_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.HEALTH) + if self.multiworld.enable_progressive_locations[self.player] == Toggle.option_true: + self.enabled_location_categories.add(DS3LocationCategory.PROGRESSIVE_ITEM) + + + def create_regions(self): + progressive_location_table = [] + if self.multiworld.enable_progressive_locations[self.player].value: + progressive_location_table = [] + \ + location_tables["Progressive Items 1"] + \ + location_tables["Progressive Items 2"] + \ + location_tables["Progressive Items 3"] + \ + location_tables["Progressive Items 4"] + + if self.multiworld.enable_dlc[self.player].value: + progressive_location_table += location_tables["Progressive Items DLC"] + + # Create Vanilla Regions + regions = {} + regions["Menu"] = self.create_region("Menu", progressive_location_table) + regions.update({region_name: self.create_region(region_name, location_tables[region_name]) for region_name in [ + "Firelink Shrine", + "Firelink Shrine Bell Tower", + "High Wall of Lothric", + "Undead Settlement", + "Road of Sacrifices", + "Cathedral of the Deep", + "Farron Keep", + "Catacombs of Carthus", + "Smouldering Lake", + "Irithyll of the Boreal Valley", + "Irithyll Dungeon", + "Profaned Capital", + "Anor Londo", + "Lothric Castle", + "Consumed King's Garden", + "Grand Archives", + "Untended Graves", + "Archdragon Peak", + "Kiln of the First Flame", + ]}) + + # Create DLC Regions + if self.multiworld.enable_dlc[self.player]: + regions.update({region_name: self.create_region(region_name, location_tables[region_name]) for region_name in [ + "Painted World of Ariandel 1", + "Painted World of Ariandel 2", + "Dreg Heap", + "Ringed City", + ]}) + + # Connect Regions + def create_connection(from_region: str, to_region: str): + connection = Entrance(self.player, f"Go To {to_region}", regions[from_region]) + regions[from_region].exits.append(connection) + connection.connect(regions[to_region]) + + regions["Menu"].exits.append(Entrance(self.player, "New Game", regions["Menu"])) + self.multiworld.get_entrance("New Game", self.player).connect(regions["Firelink Shrine"]) + + create_connection("Firelink Shrine", "High Wall of Lothric") + create_connection("Firelink Shrine", "Firelink Shrine Bell Tower") + create_connection("Firelink Shrine", "Kiln of the First Flame") + + create_connection("High Wall of Lothric", "Undead Settlement") + create_connection("High Wall of Lothric", "Lothric Castle") + + create_connection("Undead Settlement", "Road of Sacrifices") + + create_connection("Road of Sacrifices", "Cathedral of the Deep") + create_connection("Road of Sacrifices", "Farron Keep") + + create_connection("Farron Keep", "Catacombs of Carthus") + + create_connection("Catacombs of Carthus", "Irithyll of the Boreal Valley") + create_connection("Catacombs of Carthus", "Smouldering Lake") + + create_connection("Irithyll of the Boreal Valley", "Irithyll Dungeon") + create_connection("Irithyll of the Boreal Valley", "Anor Londo") + + create_connection("Irithyll Dungeon", "Archdragon Peak") + create_connection("Irithyll Dungeon", "Profaned Capital") + + create_connection("Lothric Castle", "Consumed King's Garden") + create_connection("Lothric Castle", "Grand Archives") + + create_connection("Consumed King's Garden", "Untended Graves") + + # Connect DLC Regions + if self.multiworld.enable_dlc[self.player]: + create_connection("Cathedral of the Deep", "Painted World of Ariandel 1") + create_connection("Painted World of Ariandel 1", "Painted World of Ariandel 2") + create_connection("Painted World of Ariandel 2", "Dreg Heap") + create_connection("Dreg Heap", "Ringed City") + + + # For each region, add the associated locations retrieved from the corresponding location_table + def create_region(self, region_name, location_table) -> Region: + new_region = Region(region_name, self.player, self.multiworld) + + for location in location_table: + if location.category in self.enabled_location_categories: + new_location = DarkSouls3Location( + self.player, + location.name, + location.category, + location.default_item, + self.location_name_to_id[location.name], + new_region + ) + else: + # Replace non-randomized progression items with events + event_item = self.create_item(location.default_item) + if event_item.classification != ItemClassification.progression: + continue + + new_location = DarkSouls3Location( + self.player, + location.name, + location.category, + location.default_item, + None, + new_region + ) + event_item.code = None + new_location.place_locked_item(event_item) + + if region_name == "Menu": + add_item_rule(new_location, lambda item: not item.advancement) + + new_region.locations.append(new_location) + + self.multiworld.regions.append(new_region) + return new_region + + + def create_items(self): + dlc_enabled = self.multiworld.enable_dlc[self.player] == Toggle.option_true + + itempool_by_category = {category: [] for category in self.enabled_location_categories} + + # Gather all default items on randomized locations + num_required_extra_items = 0 + for location in self.multiworld.get_locations(self.player): + if location.category in itempool_by_category: + if item_dictionary[location.default_item_name].category == DS3ItemCategory.SKIP: + num_required_extra_items += 1 + else: + itempool_by_category[location.category].append(location.default_item_name) + + # Replace each item category with a random sample of items of those types + if self.multiworld.pool_type[self.player] == PoolTypeOption.option_various: + def create_random_replacement_list(item_categories: Set[DS3ItemCategory], num_items: int): + candidates = [ + item.name for item + in item_dictionary.values() + if (item.category in item_categories and (not item.is_dlc or dlc_enabled)) + ] + return self.multiworld.random.sample(candidates, num_items) + + if DS3LocationCategory.WEAPON in self.enabled_location_categories: + itempool_by_category[DS3LocationCategory.WEAPON] = create_random_replacement_list( + { + DS3ItemCategory.WEAPON_UPGRADE_5, + DS3ItemCategory.WEAPON_UPGRADE_10, + DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE + }, + len(itempool_by_category[DS3LocationCategory.WEAPON]) + ) + if DS3LocationCategory.SHIELD in self.enabled_location_categories: + itempool_by_category[DS3LocationCategory.SHIELD] = create_random_replacement_list( + {DS3ItemCategory.SHIELD, DS3ItemCategory.SHIELD_INFUSIBLE}, + len(itempool_by_category[DS3LocationCategory.SHIELD]) + ) + if DS3LocationCategory.ARMOR in self.enabled_location_categories: + itempool_by_category[DS3LocationCategory.ARMOR] = create_random_replacement_list( + {DS3ItemCategory.ARMOR}, + len(itempool_by_category[DS3LocationCategory.ARMOR]) + ) + if DS3LocationCategory.RING in self.enabled_location_categories: + itempool_by_category[DS3LocationCategory.RING] = create_random_replacement_list( + {DS3ItemCategory.RING}, + len(itempool_by_category[DS3LocationCategory.RING]) + ) + if DS3LocationCategory.SPELL in self.enabled_location_categories: + itempool_by_category[DS3LocationCategory.SPELL] = create_random_replacement_list( + {DS3ItemCategory.SPELL}, + len(itempool_by_category[DS3LocationCategory.SPELL]) + ) + + itempool: List[DarkSouls3Item] = [] + for category in self.enabled_location_categories: + itempool += [self.create_item(name) for name in itempool_by_category[category]] + + # A list of items we can replace + removable_items = [item for item in itempool if item.classification != ItemClassification.progression] + + guaranteed_items = self.multiworld.guaranteed_items[self.player].value + for item_name in guaranteed_items: + # Break early just in case nothing is removable (if user is trying to guarantee more + # items than the pool can hold, for example) + if len(removable_items) == 0: + break + + num_existing_copies = len([item for item in itempool if item.name == item_name]) + for _ in range(guaranteed_items[item_name]): + if num_existing_copies > 0: + num_existing_copies -= 1 + continue + + if num_required_extra_items > 0: + # We can just add them instead of using "Soul of an Intrepid Hero" later + num_required_extra_items -= 1 + else: + if len(removable_items) == 0: + break + + # Try to construct a list of items with the same category that can be removed + # If none exist, just remove something at random + removable_shortlist = [ + item for item + in removable_items + if item_dictionary[item.name].category == item_dictionary[item_name].category + ] + if len(removable_shortlist) == 0: + removable_shortlist = removable_items + + removed_item = self.multiworld.random.choice(removable_shortlist) + removable_items.remove(removed_item) # To avoid trying to replace the same item twice + itempool.remove(removed_item) + + itempool.append(self.create_item(item_name)) + + # Extra filler items for locations containing SKIP items + itempool += [self.create_filler() for _ in range(num_required_extra_items)] + + # Add items to itempool + self.multiworld.itempool += itempool + def create_item(self, name: str) -> Item: + useful_categories = { + DS3ItemCategory.WEAPON_UPGRADE_5, + DS3ItemCategory.WEAPON_UPGRADE_10, + DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE, + DS3ItemCategory.SPELL, + } data = self.item_name_to_id[name] - if name in key_items_list: + if name in key_item_names: item_classification = ItemClassification.progression - elif name in weapons_upgrade_5_table or name in weapons_upgrade_10_table: + elif item_dictionary[name].category in useful_categories or name in {"Estus Shard", "Undead Bone Shard"}: item_classification = ItemClassification.useful else: item_classification = ItemClassification.filler return DarkSouls3Item(name, item_classification, data, self.player) - def create_regions(self): - if self.multiworld.enable_progressive_locations[self.player].value and self.multiworld.enable_dlc[self.player].value: - menu_region = self.create_region("Menu", {**progressive_locations, **progressive_locations_2, - **progressive_locations_3, **dlc_progressive_locations}) - elif self.multiworld.enable_progressive_locations[self.player].value: - menu_region = self.create_region("Menu", {**progressive_locations, **progressive_locations_2, - **progressive_locations_3}) - else: - menu_region = self.create_region("Menu", None) + def get_filler_item_name(self) -> str: + return "Soul of an Intrepid Hero" - # Create all Vanilla regions of Dark Souls III - firelink_shrine_region = self.create_region("Firelink Shrine", fire_link_shrine_table) - firelink_shrine_bell_tower_region = self.create_region("Firelink Shrine Bell Tower", - firelink_shrine_bell_tower_table) - high_wall_of_lothric_region = self.create_region("High Wall of Lothric", high_wall_of_lothric) - undead_settlement_region = self.create_region("Undead Settlement", undead_settlement_table) - road_of_sacrifices_region = self.create_region("Road of Sacrifices", road_of_sacrifice_table) - consumed_king_garden_region = self.create_region("Consumed King's Garden", consumed_king_garden_table) - cathedral_of_the_deep_region = self.create_region("Cathedral of the Deep", cathedral_of_the_deep_table) - farron_keep_region = self.create_region("Farron Keep", farron_keep_table) - catacombs_of_carthus_region = self.create_region("Catacombs of Carthus", catacombs_of_carthus_table) - smouldering_lake_region = self.create_region("Smouldering Lake", smouldering_lake_table) - irithyll_of_the_boreal_valley_region = self.create_region("Irithyll of the Boreal Valley", - irithyll_of_the_boreal_valley_table) - irithyll_dungeon_region = self.create_region("Irithyll Dungeon", irithyll_dungeon_table) - profaned_capital_region = self.create_region("Profaned Capital", profaned_capital_table) - anor_londo_region = self.create_region("Anor Londo", anor_londo_table) - lothric_castle_region = self.create_region("Lothric Castle", lothric_castle_table) - grand_archives_region = self.create_region("Grand Archives", grand_archives_table) - untended_graves_region = self.create_region("Untended Graves", untended_graves_table) - archdragon_peak_region = self.create_region("Archdragon Peak", archdragon_peak_table) - kiln_of_the_first_flame_region = self.create_region("Kiln Of The First Flame", None) - # DLC Down here - if self.multiworld.enable_dlc[self.player]: - painted_world_of_ariandel_region = self.create_region("Painted World of Ariandel", painted_world_table) - dreg_heap_region = self.create_region("Dreg Heap", dreg_heap_table) - ringed_city_region = self.create_region("Ringed City", ringed_city_table) - - # Create the entrance to connect those regions - menu_region.exits.append(Entrance(self.player, "New Game", menu_region)) - self.multiworld.get_entrance("New Game", self.player).connect(firelink_shrine_region) - firelink_shrine_region.exits.append(Entrance(self.player, "Goto High Wall of Lothric", - firelink_shrine_region)) - firelink_shrine_region.exits.append(Entrance(self.player, "Goto Kiln Of The First Flame", - firelink_shrine_region)) - firelink_shrine_region.exits.append(Entrance(self.player, "Goto Bell Tower", - firelink_shrine_region)) - self.multiworld.get_entrance("Goto High Wall of Lothric", self.player).connect(high_wall_of_lothric_region) - self.multiworld.get_entrance("Goto Kiln Of The First Flame", self.player).connect( - kiln_of_the_first_flame_region) - self.multiworld.get_entrance("Goto Bell Tower", self.player).connect(firelink_shrine_bell_tower_region) - high_wall_of_lothric_region.exits.append(Entrance(self.player, "Goto Undead Settlement", - high_wall_of_lothric_region)) - high_wall_of_lothric_region.exits.append(Entrance(self.player, "Goto Lothric Castle", - high_wall_of_lothric_region)) - self.multiworld.get_entrance("Goto Undead Settlement", self.player).connect(undead_settlement_region) - self.multiworld.get_entrance("Goto Lothric Castle", self.player).connect(lothric_castle_region) - undead_settlement_region.exits.append(Entrance(self.player, "Goto Road Of Sacrifices", - undead_settlement_region)) - self.multiworld.get_entrance("Goto Road Of Sacrifices", self.player).connect(road_of_sacrifices_region) - road_of_sacrifices_region.exits.append(Entrance(self.player, "Goto Cathedral", road_of_sacrifices_region)) - road_of_sacrifices_region.exits.append(Entrance(self.player, "Goto Farron keep", road_of_sacrifices_region)) - self.multiworld.get_entrance("Goto Cathedral", self.player).connect(cathedral_of_the_deep_region) - self.multiworld.get_entrance("Goto Farron keep", self.player).connect(farron_keep_region) - farron_keep_region.exits.append(Entrance(self.player, "Goto Carthus catacombs", farron_keep_region)) - self.multiworld.get_entrance("Goto Carthus catacombs", self.player).connect(catacombs_of_carthus_region) - catacombs_of_carthus_region.exits.append(Entrance(self.player, "Goto Irithyll of the boreal", - catacombs_of_carthus_region)) - catacombs_of_carthus_region.exits.append(Entrance(self.player, "Goto Smouldering Lake", - catacombs_of_carthus_region)) - self.multiworld.get_entrance("Goto Irithyll of the boreal", self.player). \ - connect(irithyll_of_the_boreal_valley_region) - self.multiworld.get_entrance("Goto Smouldering Lake", self.player).connect(smouldering_lake_region) - irithyll_of_the_boreal_valley_region.exits.append(Entrance(self.player, "Goto Irithyll dungeon", - irithyll_of_the_boreal_valley_region)) - irithyll_of_the_boreal_valley_region.exits.append(Entrance(self.player, "Goto Anor Londo", - irithyll_of_the_boreal_valley_region)) - self.multiworld.get_entrance("Goto Irithyll dungeon", self.player).connect(irithyll_dungeon_region) - self.multiworld.get_entrance("Goto Anor Londo", self.player).connect(anor_londo_region) - irithyll_dungeon_region.exits.append(Entrance(self.player, "Goto Archdragon peak", irithyll_dungeon_region)) - irithyll_dungeon_region.exits.append(Entrance(self.player, "Goto Profaned capital", irithyll_dungeon_region)) - self.multiworld.get_entrance("Goto Archdragon peak", self.player).connect(archdragon_peak_region) - self.multiworld.get_entrance("Goto Profaned capital", self.player).connect(profaned_capital_region) - lothric_castle_region.exits.append(Entrance(self.player, "Goto Consumed King Garden", lothric_castle_region)) - lothric_castle_region.exits.append(Entrance(self.player, "Goto Grand Archives", lothric_castle_region)) - self.multiworld.get_entrance("Goto Consumed King Garden", self.player).connect(consumed_king_garden_region) - self.multiworld.get_entrance("Goto Grand Archives", self.player).connect(grand_archives_region) - consumed_king_garden_region.exits.append(Entrance(self.player, "Goto Untended Graves", - consumed_king_garden_region)) - self.multiworld.get_entrance("Goto Untended Graves", self.player).connect(untended_graves_region) - # DLC Connectors Below - if self.multiworld.enable_dlc[self.player]: - cathedral_of_the_deep_region.exits.append(Entrance(self.player, "Goto Painted World of Ariandel", - cathedral_of_the_deep_region)) - self.multiworld.get_entrance("Goto Painted World of Ariandel", self.player).connect(painted_world_of_ariandel_region) - painted_world_of_ariandel_region.exits.append(Entrance(self.player, "Goto Dreg Heap", - painted_world_of_ariandel_region)) - self.multiworld.get_entrance("Goto Dreg Heap", self.player).connect(dreg_heap_region) - dreg_heap_region.exits.append(Entrance(self.player, "Goto Ringed City", dreg_heap_region)) - self.multiworld.get_entrance("Goto Ringed City", self.player).connect(ringed_city_region) - - # For each region, add the associated locations retrieved from the corresponding location_table - def create_region(self, region_name, location_table) -> Region: - new_region = Region(region_name, self.player, self.multiworld) - if location_table: - for name, address in location_table.items(): - location = DarkSouls3Location(self.player, name, self.location_name_to_id[name], new_region) - if region_name == "Menu": - add_item_rule(location, lambda item: not item.advancement) - new_region.locations.append(location) - self.multiworld.regions.append(new_region) - return new_region - - def create_items(self): - for name, address in self.item_name_to_id.items(): - # Specific items will be included in the item pool under certain conditions. See generate_basic - if name == "Basin of Vows": - continue - # Do not add progressive_items ( containing "#" ) to the itempool if the option is disabled - if (not self.multiworld.enable_progressive_locations[self.player]) and "#" in name: - continue - # Do not add DLC items if the option is disabled - if (not self.multiworld.enable_dlc[self.player]) and DarkSouls3Item.is_dlc_item(name): - continue - # Do not add DLC Progressives if both options are disabled - if ((not self.multiworld.enable_progressive_locations[self.player]) or (not self.multiworld.enable_dlc[self.player])) and DarkSouls3Item.is_dlc_progressive(name): - continue - self.multiworld.itempool += [self.create_item(name)] - - def generate_early(self): - pass def set_rules(self) -> None: - # Define the access rules to the entrances - set_rule(self.multiworld.get_entrance("Goto Bell Tower", self.player), - lambda state: state.has("Tower Key", self.player)) - set_rule(self.multiworld.get_entrance("Goto Undead Settlement", self.player), + set_rule(self.multiworld.get_entrance("Go To Undead Settlement", self.player), lambda state: state.has("Small Lothric Banner", self.player)) - set_rule(self.multiworld.get_entrance("Goto Lothric Castle", self.player), + set_rule(self.multiworld.get_entrance("Go To Lothric Castle", self.player), lambda state: state.has("Basin of Vows", self.player)) - set_rule(self.multiworld.get_entrance("Goto Irithyll of the boreal", self.player), + set_rule(self.multiworld.get_entrance("Go To Irithyll of the Boreal Valley", self.player), lambda state: state.has("Small Doll", self.player)) - set_rule(self.multiworld.get_entrance("Goto Archdragon peak", self.player), - lambda state: state.can_reach("CKG: Soul of Consumed Oceiros", "Location", self.player)) - set_rule(self.multiworld.get_entrance("Goto Profaned capital", self.player), - lambda state: state.has("Storm Ruler", self.player)) - set_rule(self.multiworld.get_entrance("Goto Grand Archives", self.player), + set_rule(self.multiworld.get_entrance("Go To Archdragon Peak", self.player), + lambda state: state.can_reach("Go To Untended Graves", "Entrance", self.player)) + set_rule(self.multiworld.get_entrance("Go To Grand Archives", self.player), lambda state: state.has("Grand Archives Key", self.player)) - set_rule(self.multiworld.get_entrance("Goto Kiln Of The First Flame", self.player), + set_rule(self.multiworld.get_entrance("Go To Kiln of the First Flame", self.player), lambda state: state.has("Cinders of a Lord - Abyss Watcher", self.player) and state.has("Cinders of a Lord - Yhorm the Giant", self.player) and state.has("Cinders of a Lord - Aldrich", self.player) and state.has("Cinders of a Lord - Lothric Prince", self.player)) + + if self.multiworld.late_basin_of_vows[self.player] == Toggle.option_true: + add_rule(self.multiworld.get_entrance("Go To Lothric Castle", self.player), + lambda state: state.has("Small Lothric Banner", self.player)) + # DLC Access Rules Below if self.multiworld.enable_dlc[self.player]: - set_rule(self.multiworld.get_entrance("Goto Painted World of Ariandel", self.player), - lambda state: state.has("Contraption Key", self.player)) - set_rule(self.multiworld.get_entrance("Goto Ringed City", self.player), + set_rule(self.multiworld.get_entrance("Go To Ringed City", self.player), lambda state: state.has("Small Envoy Banner", self.player)) + # If key items are randomized, must have contraption key to enter DLC + # If key items are not randomized, Contraption Key is guaranteed to be accessible before it is needed + if self.multiworld.enable_key_locations[self.player] == Toggle.option_true: + add_rule(self.multiworld.get_entrance("Go To Painted World of Ariandel 2", self.player), + lambda state: state.has("Contraption Key", self.player)) + + if self.multiworld.late_dlc[self.player] == Toggle.option_true: + add_rule(self.multiworld.get_entrance("Go To Painted World of Ariandel 2", self.player), + lambda state: state.has("Small Doll", self.player)) + # Define the access rules to some specific locations - set_rule(self.multiworld.get_location("HWL: Soul of the Dancer", self.player), - lambda state: state.has("Basin of Vows", self.player)) - set_rule(self.multiworld.get_location("HWL: Greirat's Ashes", self.player), - lambda state: state.has("Cell Key", self.player)) - set_rule(self.multiworld.get_location("HWL: Blue Tearstone Ring", self.player), - lambda state: state.has("Cell Key", self.player)) - set_rule(self.multiworld.get_location("ID: Bellowing Dragoncrest Ring", self.player), - lambda state: state.has("Jailbreaker's Key", self.player)) - set_rule(self.multiworld.get_location("ID: Prisoner Chief's Ashes", self.player), - lambda state: state.has("Jailer's Key Ring", self.player)) - set_rule(self.multiworld.get_location("ID: Covetous Gold Serpent Ring", self.player), - lambda state: state.has("Old Cell Key", self.player)) - set_rule(self.multiworld.get_location("ID: Karla's Ashes", self.player), - lambda state: state.has("Jailer's Key Ring", self.player)) - black_hand_gotthard_corpse_rule = lambda state: \ + set_rule(self.multiworld.get_location("PC: Cinders of a Lord - Yhorm the Giant", self.player), + lambda state: state.has("Storm Ruler", self.player)) + + if self.multiworld.enable_ring_locations[self.player] == Toggle.option_true: + set_rule(self.multiworld.get_location("ID: Bellowing Dragoncrest Ring", self.player), + lambda state: state.has("Jailbreaker's Key", self.player)) + set_rule(self.multiworld.get_location("ID: Covetous Gold Serpent Ring", self.player), + lambda state: state.has("Old Cell Key", self.player)) + set_rule(self.multiworld.get_location("UG: Hornet Ring", self.player), + lambda state: state.has("Small Lothric Banner", self.player)) + + if self.multiworld.enable_npc_locations[self.player] == Toggle.option_true: + set_rule(self.multiworld.get_location("HWL: Greirat's Ashes", self.player), + lambda state: state.has("Cell Key", self.player)) + set_rule(self.multiworld.get_location("HWL: Blue Tearstone Ring", self.player), + lambda state: state.has("Cell Key", self.player)) + set_rule(self.multiworld.get_location("ID: Karla's Ashes", self.player), + lambda state: state.has("Jailer's Key Ring", self.player)) + set_rule(self.multiworld.get_location("ID: Karla's Pointed Hat", self.player), + lambda state: state.has("Jailer's Key Ring", self.player)) + set_rule(self.multiworld.get_location("ID: Karla's Coat", self.player), + lambda state: state.has("Jailer's Key Ring", self.player)) + set_rule(self.multiworld.get_location("ID: Karla's Gloves", self.player), + lambda state: state.has("Jailer's Key Ring", self.player)) + set_rule(self.multiworld.get_location("ID: Karla's Trousers", self.player), + lambda state: state.has("Jailer's Key Ring", self.player)) + + if self.multiworld.enable_misc_locations[self.player] == Toggle.option_true: + set_rule(self.multiworld.get_location("ID: Prisoner Chief's Ashes", self.player), + lambda state: state.has("Jailer's Key Ring", self.player)) + + if self.multiworld.enable_boss_locations[self.player] == Toggle.option_true: + set_rule(self.multiworld.get_location("PC: Soul of Yhorm the Giant", self.player), + lambda state: state.has("Storm Ruler", self.player)) + set_rule(self.multiworld.get_location("HWL: Soul of the Dancer", self.player), + lambda state: state.has("Basin of Vows", self.player)) + + # Lump Soul of the Dancer in with LC for locations that should not be reachable + # before having access to US. (Prevents requiring getting Basin to fight Dancer to get SLB to go to US) + if self.multiworld.late_basin_of_vows[self.player] == Toggle.option_true: + add_rule(self.multiworld.get_location("HWL: Soul of the Dancer", self.player), + lambda state: state.has("Small Lothric Banner", self.player)) + + gotthard_corpse_rule = lambda state: \ (state.can_reach("AL: Cinders of a Lord - Aldrich", "Location", self.player) and state.can_reach("PC: Cinders of a Lord - Yhorm the Giant", "Location", self.player)) - set_rule(self.multiworld.get_location("LC: Grand Archives Key", self.player), black_hand_gotthard_corpse_rule) - set_rule(self.multiworld.get_location("LC: Gotthard Twinswords", self.player), black_hand_gotthard_corpse_rule) + + set_rule(self.multiworld.get_location("LC: Grand Archives Key", self.player), gotthard_corpse_rule) + + if self.multiworld.enable_weapon_locations[self.player] == Toggle.option_true: + set_rule(self.multiworld.get_location("LC: Gotthard Twinswords", self.player), gotthard_corpse_rule) self.multiworld.completion_condition[self.player] = lambda state: \ state.has("Cinders of a Lord - Abyss Watcher", self.player) and \ @@ -265,57 +441,36 @@ class DarkSouls3World(World): state.has("Cinders of a Lord - Aldrich", self.player) and \ state.has("Cinders of a Lord - Lothric Prince", self.player) - def generate_basic(self): - # Depending on the specified option, add the Basin of Vows to a specific location or to the item pool - item = self.create_item("Basin of Vows") - if self.multiworld.late_basin_of_vows[self.player]: - self.multiworld.get_location("IBV: Soul of Pontiff Sulyvahn", self.player).place_locked_item(item) - else: - self.multiworld.itempool += [item] - - # Fill item pool with additional items - item_pool_len = self.item_name_to_id.__len__() - total_required_locations = self.location_name_to_id.__len__() - for i in range(item_pool_len, total_required_locations): - self.multiworld.itempool += [self.create_item("Soul of an Intrepid Hero")] def fill_slot_data(self) -> Dict[str, object]: slot_data: Dict[str, object] = {} - # Depending on the specified option, modify items hexadecimal value to add an upgrade level - item_dictionary_copy = item_dictionary.copy() - if self.multiworld.randomize_weapons_level[self.player] > 0: + # Depending on the specified option, modify items hexadecimal value to add an upgrade level or infusion + name_to_ds3_code = {item.name: item.ds3_code for item in item_dictionary.values()} + + # Randomize some weapon upgrades + if self.multiworld.randomize_weapon_level[self.player] != RandomizeWeaponLevelOption.option_none: # if the user made an error and set a min higher than the max we default to the max max_5 = self.multiworld.max_levels_in_5[self.player] min_5 = min(self.multiworld.min_levels_in_5[self.player], max_5) max_10 = self.multiworld.max_levels_in_10[self.player] min_10 = min(self.multiworld.min_levels_in_10[self.player], max_10) - weapons_percentage = self.multiworld.randomize_weapons_percentage[self.player] + weapon_level_percentage = self.multiworld.randomize_weapon_level_percentage[self.player] - # Randomize some weapons upgrades - if self.multiworld.randomize_weapons_level[self.player] in [1, 3]: # Options are either all or +5 - for name in weapons_upgrade_5_table.keys(): - if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage: - value = self.multiworld.per_slot_randoms[self.player].randint(min_5, max_5) - item_dictionary_copy[name] += value + for item in item_dictionary.values(): + if self.multiworld.per_slot_randoms[self.player].randint(0, 99) < weapon_level_percentage: + if item.category == DS3ItemCategory.WEAPON_UPGRADE_5: + name_to_ds3_code[item.name] += self.multiworld.per_slot_randoms[self.player].randint(min_5, max_5) + elif item.category in {DS3ItemCategory.WEAPON_UPGRADE_10, DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE}: + name_to_ds3_code[item.name] += self.multiworld.per_slot_randoms[self.player].randint(min_10, max_10) - if self.multiworld.randomize_weapons_level[self.player] in [1, 2]: # Options are either all or +10 - for name in weapons_upgrade_10_table.keys(): - if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage: - value = self.multiworld.per_slot_randoms[self.player].randint(min_10, max_10) - item_dictionary_copy[name] += value - - if self.multiworld.randomize_weapons_level[self.player] in [1, 3]: - for name in dlc_weapons_upgrade_5_table.keys(): - if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage: - value = self.multiworld.per_slot_randoms[self.player].randint(min_5, max_5) - item_dictionary_copy[name] += value - - if self.multiworld.randomize_weapons_level[self.player] in [1, 2]: - for name in dlc_weapons_upgrade_10_table.keys(): - if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage: - value = self.multiworld.per_slot_randoms[self.player].randint(min_10, max_10) - item_dictionary_copy[name] += value + # Randomize some weapon infusions + if self.multiworld.randomize_infusion[self.player] == Toggle.option_true: + infusion_percentage = self.multiworld.randomize_infusion_percentage[self.player] + for item in item_dictionary.values(): + if item.category in {DS3ItemCategory.WEAPON_UPGRADE_10_INFUSIBLE, DS3ItemCategory.SHIELD_INFUSIBLE}: + if self.multiworld.per_slot_randoms[self.player].randint(0, 99) < infusion_percentage: + name_to_ds3_code[item.name] += 100 * self.multiworld.per_slot_randoms[self.player].randint(0, 15) # Create the mandatory lists to generate the player's output file items_id = [] @@ -324,15 +479,19 @@ class DarkSouls3World(World): locations_address = [] locations_target = [] for location in self.multiworld.get_filled_locations(): + # Skip events + if location.item.code is None: + continue + if location.item.player == self.player: items_id.append(location.item.code) - items_address.append(item_dictionary_copy[location.item.name]) + items_address.append(name_to_ds3_code[location.item.name]) if location.player == self.player: - locations_address.append(location_dictionary[location.name]) + locations_address.append(item_dictionary[location_dictionary[location.name].default_item].ds3_code) locations_id.append(location.address) if location.item.player == self.player: - locations_target.append(item_dictionary_copy[location.item.name]) + locations_target.append(name_to_ds3_code[location.item.name]) else: locations_target.append(0) diff --git a/worlds/dark_souls_3/data/items_data.py b/worlds/dark_souls_3/data/items_data.py deleted file mode 100644 index 0ecd0434..00000000 --- a/worlds/dark_souls_3/data/items_data.py +++ /dev/null @@ -1,600 +0,0 @@ -""" -Tools used to create this list : -List of all items https://docs.google.com/spreadsheets/d/1nK2g7g6XJ-qphFAk1tjP3jZtlXWDQY-ItKLa_sniawo/edit#gid=1551945791 -Regular expression parser https://regex101.com/r/XdtiLR/2 -List of locations https://darksouls3.wiki.fextralife.com/Locations -""" - -weapons_upgrade_5_table = { - "Irithyll Straight Sword": 0x0020A760, - "Chaos Blade": 0x004C9960, - "Dragonrider Bow": 0x00D6B0F0, - "White Hair Talisman": 0x00CAF120, - "Izalith Staff": 0x00C96A80, - "Fume Ultra Greatsword": 0x0060E4B0, - "Black Knight Sword": 0x005F5E10, - "Yorshka's Spear": 0x008C3A70, - "Smough's Great Hammer": 0x007E30B0, - "Dragonslayer Greatbow": 0x00CF8500, - "Golden Ritual Spear": 0x00C83200, - "Eleonora": 0x006CCB90, - "Witch's Locks": 0x00B7B740, - "Crystal Chime": 0x00CA2DD0, - "Black Knight Glaive": 0x009AE070, - "Dragonslayer Spear": 0x008CAFA0, - "Caitha's Chime": 0x00CA06C0, - "Sunlight Straight Sword": 0x00203230, - "Firelink Greatsword": 0x0060BDA0, - "Hollowslayer Greatsword": 0x00604870, - "Arstor's Spear": 0x008BEC50, - "Vordt's Great Hammer": 0x007CD120, - "Crystal Sage's Rapier": 0x002E6300, - "Farron Greatsword": 0x005E9AC0, - "Wolf Knight's Greatsword": 0x00602160, - "Dancer's Enchanted Swords": 0x00F4C040, - "Wolnir's Holy Sword": 0x005FFA50, - "Demon's Greataxe": 0x006CA480, - "Demon's Fist": 0x00A84DF0, - "Old King's Great Hammer": 0x007CF830, - "Greatsword of Judgment": 0x005E2590, - "Profaned Greatsword": 0x005E4CA0, - "Yhorm's Great Machete": 0x005F0FF0, - "Cleric's Candlestick": 0x0020F580, - "Dragonslayer Greataxe": 0x006C7D70, - "Moonlight Greatsword": 0x00606F80, - "Gundyr's Halberd": 0x009A1D20, - "Lothric's Holy Sword": 0x005FD340, - "Lorian's Greatsword": 0x005F8520, - "Twin Princes' Greatsword": 0x005FAC30, - "Storm Curved Sword": 0x003E4180, - "Dragonslayer Swordspear": 0x008BC540, - "Sage's Crystal Staff": 0x00C8CE40, - "Irithyll Rapier": 0x002E8A10 -} - -dlc_weapons_upgrade_5_table = { - "Friede's Great Scythe": 0x009B55A0, - "Rose of Ariandel": 0x00B82C70, - "Demon's Scar": 0x003F04D0, # Assigned to "RC: Church Guardian Shiv" - "Frayed Blade": 0x004D35A0, # Assigned to "RC: Ritual Spear Fragment" - "Gael's Greatsword": 0x00227C20, # Assigned to "RC: Violet Wrappings" - "Repeating Crossbow": 0x00D885B0, # Assigned to "RC: Blood of the Dark Souls" - "Onyx Blade": 0x00222E00, # VILHELM FIGHT - "Earth Seeker": 0x006D8EE0, - "Quakestone Hammer": 0x007ECCF0, - "Millwood Greatbow": 0x00D85EA0, - "Valorheart": 0x00F646E0, - "Aquamarine Dagger": 0x00116520, - "Ringed Knight Straight Sword": 0x00225510, - "Ledo's Great Hammer": 0x007EF400, # INVADER FIGHT - "Ringed Knight Spear": 0x008CFDC0, - "Crucifix of the Mad King": 0x008D4BE0, - "Sacred Chime of Filianore": 0x00CCECF0, - "Preacher's Right Arm": 0x00CD1400, - "White Birch Bow": 0x00D77440, - "Ringed Knight Paired Greatswords": 0x00F69500 -} - -weapons_upgrade_10_table = { - "Broken Straight Sword": 0x001EF9B0, - "Deep Battle Axe": 0x0006AFA54, - "Club": 0x007A1200, - "Claymore": 0x005BDBA0, - "Longbow": 0x00D689E0, - "Mail Breaker": 0x002DEDD0, - "Broadsword": 0x001ED2A0, - "Astora's Straight Sword": 0x002191C0, - "Rapier": 0x002E14E0, - "Lucerne": 0x0098BD90, - "Whip": 0x00B71B00, - "Reinforced Club": 0x007A8730, - "Caestus": 0x00A7FFD0, - "Partizan": 0x0089C970, - "Red Hilted Halberd": 0x009AB960, - "Saint's Talisman": 0x00CACA10, - "Large Club": 0x007AFC60, - "Brigand Twindaggers": 0x00F50E60, - "Butcher Knife": 0x006BE130, - "Brigand Axe": 0x006B1DE0, - "Heretic's Staff": 0x00C8F550, - "Great Club": 0x007B4A80, - "Exile Greatsword": 0x005DD770, - "Sellsword Twinblades": 0x00F42400, - "Notched Whip": 0x00B7DE50, - "Astora Greatsword": 0x005C9EF0, - "Executioner's Greatsword": 0x0021DFE0, - "Saint-tree Bellvine": 0x00C9DFB0, - "Saint Bident": 0x008C1360, - "Drang Hammers": 0x00F61FD0, - "Arbalest": 0x00D662D0, - "Sunlight Talisman": 0x00CA54E0, - "Greatsword": 0x005C50D0, - "Black Bow of Pharis": 0x00D7E970, - "Great Axe": 0x006B9310, - "Black Blade": 0x004CC070, - "Blacksmith Hammer": 0x007E57C0, - "Witchtree Branch": 0x00C94370, - "Painting Guardian's Curved Sword": 0x003E6890, - "Pickaxe": 0x007DE290, - "Court Sorcerer's Staff": 0x00C91C60, - "Avelyn": 0x00D6FF10, - "Onikiri and Ubadachi": 0x00F58390, - "Ricard's Rapier": 0x002E3BF0, - "Drakeblood Greatsword": 0x00609690, - "Greatlance": 0x008A8CC0, - "Sniper Crossbow": 0x00D83790, - "Claw": 0x00A7D8C0, - "Drang Twinspears": 0x00F5AAA0, - "Pyromancy Flame": 0x00CC77C0 #given/dropped by Cornyx -} - -dlc_weapons_upgrade_10_table = { - "Follower Sabre": 0x003EDDC0, - "Millwood Battle Axe": 0x006D67D0, - "Follower Javelin": 0x008CD6B0, - "Crow Talons": 0x00A89C10, - "Pyromancer's Parting Flame": 0x00CC9ED0, - "Crow Quills": 0x00F66DF0, - "Follower Torch": 0x015F1AD0, - "Murky Hand Scythe": 0x00118C30, - "Herald Curved Greatsword": 0x006159E0, - "Lothric War Banner": 0x008D24D0, - "Splitleaf Greatsword": 0x009B2E90, # SHOP ITEM - "Murky Longstaff": 0x00CCC5E0, -} - -shields_table = { - "East-West Shield": 0x0142B930, - "Silver Eagle Kite Shield": 0x014418C0, - "Small Leather Shield": 0x01315410, - "Blue Wooden Shield": 0x0143F1B0, - "Plank Shield": 0x01346150, - "Caduceus Round Shield": 0x01341330, - "Wargod Wooden Shield": 0x0144DC10, - "Grass Crest Shield": 0x01437C80, - "Golden Falcon Shield": 0x01354BB0, - "Twin Dragon Greatshield": 0x01513820, - "Spider Shield": 0x01435570, - "Crest Shield": 0x01430750, - "Curse Ward Greatshield": 0x01518640, - "Stone Parma": 0x01443FD0, - "Dragon Crest Shield": 0x01432E60, - "Shield of Want": 0x0144B500, - "Black Iron Greatshield": 0x0150EA00, - "Greatshield of Glory": 0x01515F30, - "Sacred Bloom Shield": 0x013572C0, - "Golden Wing Crest Shield": 0x0143CAA0, - "Ancient Dragon Greatshield": 0x013599D0, - "Spirit Tree Crest Shield": 0x014466E0, - "Blessed Red and White Shield": 0x01343FB9 -} - -dlc_shields_table = { - "Followers Shield": 0x0135C0E0, - "Ethereal Oak Shield": 0x01450320, - "Giant Door Shield": 0x00F5F8C0, - "Dragonhead Shield": 0x0135E7F0, - "Dragonhead Greatshield": 0x01452A30 -} - -goods_table = { - "Soul of an Intrepid Hero": 0x4000019D, - "Soul of the Nameless King": 0x400002D2, - "Soul of Champion Gundyr": 0x400002C8, - "Soul of the Twin Princes": 0x400002DB, - "Soul of Consumed Oceiros": 0x400002CE, - "Soul of Aldrich": 0x400002D5, - "Soul of Yhorm the Giant": 0x400002DC, - "Soul of Pontiff Sulyvahn": 0x400002D4, - "Soul of the Old Demon King": 0x400002D0, - "Soul of High Lord Wolnir": 0x400002D6, - "Soul of the Blood of the Wolf": 0x400002CD, - "Soul of the Deacons of the Deep": 0x400002D9, - "Soul of a Crystal Sage": 0x400002CB, - "Soul of Boreal Valley Vordt": 0x400002CF, - "Soul of a Stray Demon": 0x400002E7, - "Soul of a Demon": 0x400002E3, - - # Upgrade materials - **{"Titanite Shard #"+str(i): 0x400003E8 for i in range(1, 11)}, - **{"Large Titanite Shard #"+str(i): 0x400003E9 for i in range(1, 11)}, - **{"Titanite Chunk #"+str(i): 0x400003EA for i in range(1, 6)}, - **{"Titanite Slab #"+str(i): 0x400003EB for i in range(1, 4)}, - - # Healing - **{"Estus Shard #"+str(i): 0x4000085D for i in range(1, 16)}, - **{"Undead Bone Shard #"+str(i): 0x4000085F for i in range(1, 6)}, - - # Souls - **{"Soul of a Great Champion #"+str(i): 0x400001A4 for i in range(1, 3)}, - **{"Soul of a Champion #"+str(i): 0x400001A3 for i in range(1, 5)}, - **{"Soul of a Venerable Old Hand #"+str(i): 0x400001A2 for i in range(1, 5)}, - **{"Soul of a Crestfallen Knight #"+str(i): 0x40000199 for i in range(1, 11)} -} - -goods_2_table = { # Added by Br00ty - "HWL: Gold Pine Resin #": 0x4000014B, - "US: Charcoal Pine Resin #": 0x4000014A, - "FK: Gold Pine Bundle #": 0x40000155, - "CC: Carthus Rouge #": 0x4000014F, - "ID: Pale Pine Resin #": 0x40000150, - **{"Ember #"+str(i): 0x400001F4 for i in range(1, 45)}, - **{"Titanite Shard #"+str(i): 0x400003E8 for i in range(11, 16)}, - **{"Large Titanite Shard #"+str(i): 0x400003E9 for i in range(11, 16)}, - **{"Titanite Scale #" + str(i): 0x400003FC for i in range(1, 25)} -} - -goods_3_table = { # Added by Br00ty - **{"Fading Soul #" + str(i): 0x40000190 for i in range(1, 4)}, - **{"Ring of Sacrifice #"+str(i): 0x20004EF2 for i in range(1, 5)}, - **{"Homeward Bone #"+str(i): 0x4000015E for i in range(1, 17)}, - **{"Green Blossom #"+str(i): 0x40000104 for i in range(1, 7)}, - **{"Human Pine Resin #"+str(i): 0x4000014E for i in range(1, 3)}, - **{"Charcoal Pine Bundle #"+str(i): 0x40000154 for i in range(1, 3)}, - **{"Rotten Pine Resin #"+str(i): 0x40000157 for i in range(1, 3)}, - **{"Alluring Skull #"+str(i): 0x40000126 for i in range(1, 9)}, - **{"Rusted Coin #"+str(i): 0x400001C7 for i in range(1, 3)}, - **{"Rusted Gold Coin #"+str(i): 0x400001C9 for i in range(1, 3)}, - **{"Titanite Chunk #"+str(i): 0x400003EA for i in range(1, 17)}, - **{"Twinkling Titanite #"+str(i): 0x40000406 for i in range(1, 8)} -} - -dlc_goods_table = { - "Soul of Sister Friede": 0x400002E8, - "Soul of the Demon Prince": 0x400002EA, - "Soul of Darkeater Midir": 0x400002EB, - "Soul of Slave Knight Gael": 0x400002E9 -} - -dlc_goods_2_table = { #71 - **{"Large Soul of an Unknown Traveler $"+str(i): 0x40000194 for i in range(1, 10)}, - **{"Soul of a Weary Warrior $"+str(i): 0x40000197 for i in range(1, 6)}, - **{"Large Soul of a Weary Warrior $"+str(i): 0x40000198 for i in range(1, 7)}, - **{"Soul of a Crestfallen Knight $"+str(i): 0x40000199 for i in range(1, 7)}, - **{"Large Soul of a Crestfallen Knight $"+str(i): 0x4000019A for i in range(1, 4)}, - **{"Homeward Bone $"+str(i): 0x4000015E for i in range(1, 7)}, - **{"Large Titanite Shard $"+str(i): 0x400003E9 for i in range(1, 4)}, - **{"Titanite Chunk $"+str(i): 0x400003EA for i in range(1, 16)}, - **{"Twinkling Titanite $"+str(i): 0x40000406 for i in range(1, 6)}, - **{"Rusted Coin $"+str(i): 0x400001C7 for i in range(1, 4)}, - **{"Ember $"+str(i): 0x400001F4 for i in range(1, 11)} -} - -armor_table = { - "Fire Keeper Robe": 0x140D9CE8, - "Fire Keeper Gloves": 0x140DA0D0, - "Fire Keeper Skirt": 0x140DA4B8, - "Deserter Trousers": 0x126265B8, - "Cleric Hat": 0x11D905C0, - "Cleric Blue Robe": 0x11D909A8, - "Cleric Gloves": 0x11D90D90, - "Cleric Trousers": 0x11D91178, - "Northern Helm": 0x116E3600, - "Northern Armor": 0x116E39E8, - "Northern Gloves": 0x116E3DD0, - "Northern Trousers": 0x116E41B8, - "Loincloth": 0x148F57D8, - - "Brigand Hood": 0x148009E0, - "Brigand Armor": 0x14800DC8, - "Brigand Gauntlets": 0x148011B0, - "Brigand Trousers": 0x14801598, - "Sorcerer Hood": 0x11C9C380, - "Sorcerer Robe": 0x11C9C768, - "Sorcerer Gloves": 0x11C9CB50, - "Sorcerer Trousers": 0x11C9CF38, - "Fallen Knight Helm": 0x1121EAC0, - "Fallen Knight Armor": 0x1121EEA8, - "Fallen Knight Gauntlets": 0x1121F290, - "Fallen Knight Trousers": 0x1121F678, - "Conjurator Hood": 0x149E8E60, - "Conjurator Robe": 0x149E9248, - "Conjurator Manchettes": 0x149E9630, - "Conjurator Boots": 0x149E9A18, - - "Sellsword Helm": 0x11481060, - "Sellsword Armor": 0x11481448, - "Sellsword Gauntlet": 0x11481830, - "Sellsword Trousers": 0x11481C18, - "Herald Helm": 0x114FB180, - "Herald Armor": 0x114FB568, - "Herald Gloves": 0x114FB950, - "Herald Trousers": 0x114FBD38, - - "Maiden Hood": 0x14BD12E0, - "Maiden Robe": 0x14BD16C8, - "Maiden Gloves": 0x14BD1AB0, - "Maiden Skirt": 0x14BD1E98, - "Drang Armor": 0x154E0C28, - "Drang Gauntlets": 0x154E1010, - "Drang Shoes": 0x154E13F8, - "Archdeacon White Crown": 0x13EF1480, - "Archdeacon Holy Garb": 0x13EF1868, - "Archdeacon Skirt": 0x13EF2038, - "Antiquated Dress": 0x15D76068, - "Antiquated Gloves": 0x15D76450, - "Antiquated Skirt": 0x15D76838, - "Ragged Mask": 0x148F4C20, - "Crown of Dusk": 0x15D75C80, - "Pharis's Hat": 0x1487AB00, - "Old Sage's Blindfold": 0x11945BA0, - - "Painting Guardian Hood": 0x156C8CC0, - "Painting Guardian Gown": 0x156C90A8, - "Painting Guardian Gloves": 0x156C9490, - "Painting Guardian Waistcloth": 0x156C9878, - "Brass Helm": 0x1501BD00, - "Brass Armor": 0x1501C0E8, - "Brass Gauntlets": 0x1501C4D0, - "Brass Leggings": 0x1501C8B8, - "Old Sorcerer Hat": 0x1496ED40, - "Old Sorcerer Coat": 0x1496F128, - "Old Sorcerer Gauntlets": 0x1496F510, - "Old Sorcerer Boots": 0x1496F8F8, - "Court Sorcerer Hood": 0x11BA8140, - "Court Sorcerer Robe": 0x11BA8528, - "Court Sorcerer Gloves": 0x11BA8910, - "Court Sorcerer Trousers": 0x11BA8CF8, - "Dragonslayer Helm": 0x158B1140, - "Dragonslayer Armor": 0x158B1528, - "Dragonslayer Gauntlets": 0x158B1910, - "Dragonslayer Leggings": 0x158B1CF8, - - "Hood of Prayer": 0x13AA6A60, - "Robe of Prayer": 0x13AA6E48, - "Skirt of Prayer": 0x13AA7618, - "Winged Knight Helm": 0x12EBAE40, - "Winged Knight Armor": 0x12EBB228, - "Winged Knight Gauntlets": 0x12EBB610, - "Winged Knight Leggings": 0x12EBB9F8, - "Shadow Mask": 0x14D3F640, - "Shadow Garb": 0x14D3FA28, - "Shadow Gauntlets": 0x14D3FE10, - "Shadow Leggings": 0x14D401F8, - "Outrider Knight Helm": 0x1328B740, - "Outrider Knight Armor": 0x1328BB28, - "Outrider Knight Gauntlets": 0x1328BF10, - "Outrider Knight Leggings": 0x1328C2F8, - - "Cornyx's Wrap": 0x11946370, - "Cornyx's Garb": 0x11945F88, - "Cornyx's Skirt": 0x11946758 -} - -dlc_armor_table = { - "Slave Knight Hood": 0x134EDCE0, - "Slave Knight Armor": 0x134EE0C8, - "Slave Knight Gauntlets": 0x134EE4B0, - "Slave Knight Leggings": 0x134EE898, - "Vilhelm's Helm": 0x11312D00, - "Vilhelm's Armor": 0x113130E8, - "Vilhelm's Gauntlets": 0x113134D0, - "Vilhelm's Leggings": 0x113138B8, - #"Millwood Knight Helm": 0x139B2820, # SHOP ITEM - #"Millwood Knight Armor": 0x139B2C08, # SHOP ITEM - #"Millwood Knight Gauntlets": 0x139B2FF0, # SHOP ITEM - #"Millwood Knight Leggings": 0x139B33D8, # SHOP ITEM - - "Shira's Crown": 0x11C22260, - "Shira's Armor": 0x11C22648, - "Shira's Gloves": 0x11C22A30, - "Shira's Trousers": 0x11C22E18, - #"Lapp's Helm": 0x11E84800, # SHOP ITEM - #"Lapp's Armor": 0x11E84BE8, # SHOP ITEM - #"Lapp's Gauntlets": 0x11E84FD0, # SHOP ITEM - #"Lapp's Leggings": 0x11E853B8, # SHOP ITEM - #"Ringed Knight Hood": 0x13C8EEE0, # RANDOM ENEMY DROP - #"Ringed Knight Armor": 0x13C8F2C8, # RANDOM ENEMY DROP - #"Ringed Knight Gauntlets": 0x13C8F6B0, # RANDOM ENEMY DROP - #"Ringed Knight Leggings": 0x13C8FA98, # RANDOM ENEMY DROP - #"Harald Legion Armor": 0x13D83508, # RANDOM ENEMY DROP - #"Harald Legion Gauntlets": 0x13D838F0, # RANDOM ENEMY DROP - #"Harald Legion Leggings": 0x13D83CD8, # RANDOM ENEMY DROP - "Iron Dragonslayer Helm": 0x1405F7E0, - "Iron Dragonslayer Armor": 0x1405FBC8, - "Iron Dragonslayer Gauntlets": 0x1405FFB0, - "Iron Dragonslayer Leggings": 0x14060398, - - "Ruin Sentinel Helm": 0x14CC5520, - "Ruin Sentinel Armor": 0x14CC5908, - "Ruin Sentinel Gauntlets": 0x14CC5CF0, - "Ruin Sentinel Leggings": 0x14CC60D8, - "Desert Pyromancer Hood": 0x14DB9760, - "Desert Pyromancer Garb": 0x14DB9B48, - "Desert Pyromancer Gloves": 0x14DB9F30, - "Desert Pyromancer Skirt": 0x14DBA318, - - #"Follower Helm": 0x137CA3A0, # RANDOM ENEMY DROP - #"Follower Armor": 0x137CA788, # RANDOM ENEMY DROP - #"Follower Gloves": 0x137CAB70, # RANDOM ENEMY DROP - #"Follower Boots": 0x137CAF58, # RANDOM ENEMY DROP - #"Ordained Hood": 0x135E1F20, # SHOP ITEM - #"Ordained Dress": 0x135E2308, # SHOP ITEM - #"Ordained Trousers": 0x135E2AD8, # SHOP ITEM - "Black Witch Veil": 0x14FA1BE0, - "Black Witch Hat": 0x14EAD9A0, - "Black Witch Garb": 0x14EADD88, - "Black Witch Wrappings": 0x14EAE170, - "Black Witch Trousers": 0x14EAE558, - "White Preacher Head": 0x14153A20, - "Antiquated Plain Garb": 0x11B2E408 -} - -rings_table = { - "Estus Ring": 0x200050DC, - "Covetous Silver Serpent Ring": 0x20004FB0, - "Fire Clutch Ring": 0x2000501E, - "Flame Stoneplate Ring": 0x20004E52, - "Flynn's Ring": 0x2000503C, - "Chloranthy Ring": 0x20004E2A, - - "Morne's Ring": 0x20004F1A, - "Sage Ring": 0x20004F38, - "Aldrich's Sapphire": 0x20005096, - "Lloyd's Sword Ring": 0x200050B4, - "Poisonbite Ring": 0x20004E8E, - "Deep Ring": 0x20004F60, - "Lingering Dragoncrest Ring": 0x20004F2E, - "Carthus Milkring": 0x20004FE2, - "Witch's Ring": 0x20004F11, - "Carthus Bloodring": 0x200050FA, - - "Speckled Stoneplate Ring": 0x20004E7A, - "Magic Clutch Ring": 0x2000500A, - "Ring of the Sun's First Born": 0x20004F1B, - "Pontiff's Right Eye": 0x2000510E, "Leo Ring": 0x20004EE8, - "Dark Stoneplate Ring": 0x20004E70, - "Reversal Ring": 0x20005104, - "Ring of Favor": 0x20004E3E, - "Bellowing Dragoncrest Ring": 0x20004F07, - "Covetous Gold Serpent Ring": 0x20004FA6, - "Dusk Crown Ring": 0x20004F4C, - "Dark Clutch Ring": 0x20005028, - "Cursebite Ring": 0x20004E98, - "Sun Princess Ring": 0x20004FBA, - "Aldrich's Ruby": 0x2000508C, - "Scholar Ring": 0x20004EB6, - "Fleshbite Ring": 0x20004EA2, - "Hunter's Ring": 0x20004FF6, - "Ashen Estus Ring": 0x200050E6, - "Hornet Ring": 0x20004F9C, - "Lightning Clutch Ring": 0x20005014, - "Ring of Steel Protection": 0x20004E48, - "Calamity Ring": 0x20005078, - "Thunder Stoneplate Ring": 0x20004E5C, - "Knight's Ring": 0x20004FEC, - "Red Tearstone Ring": 0x20004ECA, - "Dragonscale Ring": 0x2000515E, - "Knight Slayer's Ring": 0x20005000, - "Magic Stoneplate Ring": 0x20004E66, - "Blue Tearstone Ring": 0x20004ED4 #given/dropped by Greirat -} - -dlc_ring_table = { - "Havel's Ring": 0x20004E34, - "Chillbite Ring": 0x20005208 -} - -spells_table = { - "Seek Guidance": 0x40360420, - "Lightning Spear": 0x40362B30, - "Atonement": 0x4039ADA0, - "Great Magic Weapon": 0x40140118, - "Iron Flesh": 0x40251430, - "Lightning Stake": 0x40389C30, - "Toxic Mist": 0x4024F108, - "Sacred Flame": 0x40284880, - "Dorhys' Gnawing": 0x40363EB8, - "Great Heal": 0x40356FB0, - "Lightning Blade": 0x4036C770, - "Profaned Flame": 0x402575D8, - "Wrath of the Gods": 0x4035E0F8, - "Power Within": 0x40253B40, - "Soul Stream": 0x4018B820, - "Divine Pillars of Light": 0x4038C340, - "Great Magic Barrier": 0x40365628, - "Great Magic Shield": 0x40144F38, - "Crystal Scroll": 0x40000856 -} - -dlc_spells_table = { - #"Boulder Heave": 0x40282170, # KILN STRAY DEMON - #"Seething Chaos": 0x402896A0, # KILN DEMON PRINCES - #"Old Moonlight": 0x4014FF00, # KILN MIDIR - "Frozen Weapon": 0x401408E8, - "Snap Freeze": 0x401A90C8, - "Great Soul Dregs": 0x401879A0, - "Flame Fan": 0x40258190, - "Lightning Arrow": 0x40358B08, - "Way of White Corona": 0x403642A0, - "Projected Heal": 0x40364688, - "Floating Chaos": 0x40257DA8 -} - -misc_items_table = { - "Tower Key": 0x400007DF, - "Grave Key": 0x400007D9, - "Cell Key": 0x400007DA, - "Small Lothric Banner": 0x40000836, - "Mortician's Ashes": 0x4000083B, - "Braille Divine Tome of Carim": 0x40000847, # Shop - "Great Swamp Pyromancy Tome": 0x4000084F, # Shop - "Farron Coal ": 0x40000837, # Shop - "Paladin's Ashes": 0x4000083D, # Shop - "Deep Braille Divine Tome": 0x40000860, # Shop - "Small Doll": 0x400007D5, - "Golden Scroll": 0x4000085C, - "Sage's Coal": 0x40000838, # Shop #Unique - "Sage's Scroll": 0x40000854, - "Dreamchaser's Ashes": 0x4000083C, # Shop #Unique - "Cinders of a Lord - Abyss Watcher": 0x4000084B, - "Cinders of a Lord - Yhorm the Giant": 0x4000084D, - "Cinders of a Lord - Aldrich": 0x4000084C, - "Grand Archives Key": 0x400007DE, - "Basin of Vows": 0x40000845, - "Cinders of a Lord - Lothric Prince": 0x4000084E, - "Carthus Pyromancy Tome": 0x40000850, - "Grave Warden's Ashes": 0x4000083E, - "Grave Warden Pyromancy Tome": 0x40000853, - "Quelana Pyromancy Tome": 0x40000852, - "Izalith Pyromancy Tome": 0x40000851, - "Greirat's Ashes": 0x4000083F, - "Excrement-covered Ashes": 0x40000862, - "Easterner's Ashes": 0x40000868, - "Prisoner Chief's Ashes": 0x40000863, - "Jailbreaker's Key": 0x400007D7, - "Dragon Torso Stone": 0x4000017A, - "Profaned Coal": 0x4000083A, - "Xanthous Ashes": 0x40000864, - "Old Cell Key": 0x400007DC, - "Jailer's Key Ring": 0x400007D8, - "Logan's Scroll": 0x40000855, - "Storm Ruler": 0x006132D0, - "Giant's Coal": 0x40000839, - "Coiled Sword Fragment": 0x4000015F, - "Dragon Chaser's Ashes": 0x40000867, - "Twinkling Dragon Torso Stone": 0x40000184, - "Braille Divine Tome of Lothric": 0x40000848, - "Irina's Ashes": 0x40000843, - "Karla's Ashes": 0x40000842, - "Cornyx's Ashes": 0x40000841, - "Orbeck's Ashes": 0x40000840 -} - -dlc_misc_table = { - "Captains Ashes": 0x4000086A, - "Contraption Key": 0x4000086B, # Needed for Painted World - "Small Envoy Banner": 0x4000086C # Needed to get to Ringed City from Dreg Heap -} - -key_items_list = { - "Small Lothric Banner", - "Basin of Vows", - "Small Doll", - "Storm Ruler", - "Grand Archives Key", - "Cinders of a Lord - Abyss Watcher", - "Cinders of a Lord - Yhorm the Giant", - "Cinders of a Lord - Aldrich", - "Cinders of a Lord - Lothric Prince", - "Mortician's Ashes", - "Cell Key", - "Tower Key", - "Jailbreaker's Key", - "Prisoner Chief's Ashes", - "Old Cell Key", - "Jailer's Key Ring", - "Contraption Key", - "Small Envoy Banner" -} - -item_tables = [weapons_upgrade_5_table, weapons_upgrade_10_table, shields_table, - armor_table, rings_table, spells_table, misc_items_table, goods_table, goods_2_table, goods_3_table, - dlc_weapons_upgrade_5_table, dlc_weapons_upgrade_10_table, dlc_shields_table, dlc_goods_table, - dlc_armor_table, dlc_spells_table, dlc_ring_table, dlc_misc_table, dlc_goods_2_table] - -item_dictionary = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table, - **armor_table, **rings_table, **spells_table, **misc_items_table, **goods_table, **goods_2_table, - **goods_3_table, **dlc_weapons_upgrade_5_table, **dlc_weapons_upgrade_10_table, **dlc_shields_table, - **dlc_goods_table, **dlc_armor_table, **dlc_spells_table, **dlc_ring_table, **dlc_misc_table, **dlc_goods_2_table} - diff --git a/worlds/dark_souls_3/data/locations_data.py b/worlds/dark_souls_3/data/locations_data.py deleted file mode 100644 index 98eb8076..00000000 --- a/worlds/dark_souls_3/data/locations_data.py +++ /dev/null @@ -1,614 +0,0 @@ -""" -Tools used to create this list : -List of all items https://docs.google.com/spreadsheets/d/1nK2g7g6XJ-qphFAk1tjP3jZtlXWDQY-ItKLa_sniawo/edit#gid=1551945791 -Regular expression parser https://regex101.com/r/XdtiLR/2 -List of locations https://darksouls3.wiki.fextralife.com/Locations -""" - -fire_link_shrine_table = { - # "FS: Coiled Sword": 0x40000859, You can still light the Firelink Shrine fire whether you have it or not, useless - "FS: Broken Straight Sword": 0x001EF9B0, - "FS: East-West Shield": 0x0142B930, - "FS: Uchigatana": 0x004C4B40, - "FS: Master's Attire": 0x148F5008, - "FS: Master's Gloves": 0x148F53F0, -} - -firelink_shrine_bell_tower_table = { - "FSBT: Covetous Silver Serpent Ring": 0x20004FB0, - "FSBT: Fire Keeper Robe": 0x140D9CE8, - "FSBT: Fire Keeper Gloves": 0x140DA0D0, - "FSBT: Fire Keeper Skirt": 0x140DA4B8, - "FSBT: Estus Ring": 0x200050DC, - "FSBT: Fire Keeper Soul": 0x40000186 -} - -high_wall_of_lothric = { - "HWL: Deep Battle Axe": 0x0006AFA54, - "HWL: Club": 0x007A1200, - "HWL: Claymore": 0x005BDBA0, - "HWL: Binoculars": 0x40000173, - "HWL: Longbow": 0x00D689E0, - "HWL: Mail Breaker": 0x002DEDD0, - "HWL: Broadsword": 0x001ED2A0, - "HWL: Silver Eagle Kite Shield": 0x014418C0, - "HWL: Astora's Straight Sword": 0x002191C0, - "HWL: Cell Key": 0x400007DA, - "HWL: Rapier": 0x002E14E0, - "HWL: Lucerne": 0x0098BD90, - "HWL: Small Lothric Banner": 0x40000836, - "HWL: Basin of Vows": 0x40000845, - "HWL: Soul of Boreal Valley Vordt": 0x400002CF, - "HWL: Soul of the Dancer": 0x400002CA, - "HWL: Way of Blue Covenant": 0x2000274C, - "HWL: Greirat's Ashes": 0x4000083F, - "HWL: Blue Tearstone Ring": 0x20004ED4 #given/dropped by Greirat -} - -undead_settlement_table = { - "US: Small Leather Shield": 0x01315410, - "US: Whip": 0x00B71B00, - "US: Reinforced Club": 0x007A8730, - "US: Blue Wooden Shield": 0x0143F1B0, - - "US: Cleric Hat": 0x11D905C0, - "US: Cleric Blue Robe": 0x11D909A8, - "US: Cleric Gloves": 0x11D90D90, - "US: Cleric Trousers": 0x11D91178, - - "US: Mortician's Ashes": 0x4000083B, - "US: Caestus": 0x00A7FFD0, - "US: Plank Shield": 0x01346150, - "US: Flame Stoneplate Ring": 0x20004E52, - "US: Caduceus Round Shield": 0x01341330, - "US: Fire Clutch Ring": 0x2000501E, - "US: Partizan": 0x0089C970, - "US: Bloodbite Ring": 0x20004E84, - - "US: Red Hilted Halberd": 0x009AB960, - "US: Saint's Talisman": 0x00CACA10, - "US: Irithyll Straight Sword": 0x0020A760, - "US: Large Club": 0x007AFC60, - "US: Northern Helm": 0x116E3600, - "US: Northern Armor": 0x116E39E8, - "US: Northern Gloves": 0x116E3DD0, - "US: Northern Trousers": 0x116E41B8, - "US: Flynn's Ring": 0x2000503C, - - "US: Mirrah Vest": 0x15204568, - "US: Mirrah Gloves": 0x15204950, - "US: Mirrah Trousers": 0x15204D38, - - "US: Chloranthy Ring": 0x20004E2A, - "US: Loincloth": 0x148F57D8, - "US: Wargod Wooden Shield": 0x0144DC10, - - "US: Loretta's Bone": 0x40000846, - - "US: Hand Axe": 0x006ACFC0, - "US: Great Scythe": 0x00989680, - "US: Soul of the Rotted Greatwood": 0x400002D7, - "US: Hawk Ring": 0x20004F92, - "US: Warrior of Sunlight Covenant": 0x20002738, - "US: Blessed Red and White Shield": 0x01343FB9, - "US: Irina's Ashes": 0x40000843, - "US: Cornyx's Ashes": 0x40000841, - "US: Cornyx's Wrap": 0x11946370, - "US: Cornyx's Garb": 0x11945F88, - "US: Cornyx's Skirt": 0x11946758, - "US: Pyromancy Flame": 0x00CC77C0 #given/dropped by Cornyx -} - -road_of_sacrifice_table = { - "RS: Brigand Twindaggers": 0x00F50E60, - - "RS: Brigand Hood": 0x148009E0, - "RS: Brigand Armor": 0x14800DC8, - "RS: Brigand Gauntlets": 0x148011B0, - "RS: Brigand Trousers": 0x14801598, - - "RS: Butcher Knife": 0x006BE130, - "RS: Brigand Axe": 0x006B1DE0, - "RS: Braille Divine Tome of Carim": 0x40000847, - "RS: Morne's Ring": 0x20004F1A, - "RS: Twin Dragon Greatshield": 0x01513820, - "RS: Heretic's Staff": 0x00C8F550, - - "RS: Sorcerer Hood": 0x11C9C380, - "RS: Sorcerer Robe": 0x11C9C768, - "RS: Sorcerer Gloves": 0x11C9CB50, - "RS: Sorcerer Trousers": 0x11C9CF38, - - "RS: Sage Ring": 0x20004F38, - - "RS: Fallen Knight Helm": 0x1121EAC0, - "RS: Fallen Knight Armor": 0x1121EEA8, - "RS: Fallen Knight Gauntlets": 0x1121F290, - "RS: Fallen Knight Trousers": 0x1121F678, - - "RS: Conjurator Hood": 0x149E8E60, - "RS: Conjurator Robe": 0x149E9248, - "RS: Conjurator Manchettes": 0x149E9630, - "RS: Conjurator Boots": 0x149E9A18, - - "RS: Great Swamp Pyromancy Tome": 0x4000084F, - - "RS: Great Club": 0x007B4A80, - "RS: Exile Greatsword": 0x005DD770, - - "RS: Farron Coal ": 0x40000837, - - "RS: Sellsword Twinblades": 0x00F42400, - "RS: Sellsword Helm": 0x11481060, - "RS: Sellsword Armor": 0x11481448, - "RS: Sellsword Gauntlet": 0x11481830, - "RS: Sellsword Trousers": 0x11481C18, - - "RS: Golden Falcon Shield": 0x01354BB0, - - "RS: Herald Helm": 0x114FB180, - "RS: Herald Armor": 0x114FB568, - "RS: Herald Gloves": 0x114FB950, - "RS: Herald Trousers": 0x114FBD38, - - "RS: Grass Crest Shield": 0x01437C80, - "RS: Soul of a Crystal Sage": 0x400002CB, - "RS: Great Swamp Ring": 0x20004F10, - "RS: Orbeck's Ashes": 0x40000840 -} - -cathedral_of_the_deep_table = { - "CD: Paladin's Ashes": 0x4000083D, - "CD: Spider Shield": 0x01435570, - "CD: Crest Shield": 0x01430750, - "CD: Notched Whip": 0x00B7DE50, - "CD: Astora Greatsword": 0x005C9EF0, - "CD: Executioner's Greatsword": 0x0021DFE0, - "CD: Curse Ward Greatshield": 0x01518640, - "CD: Saint-tree Bellvine": 0x00C9DFB0, - "CD: Poisonbite Ring": 0x20004E8E, - - "CD: Lloyd's Sword Ring": 0x200050B4, - "CD: Seek Guidance": 0x40360420, - - "CD: Aldrich's Sapphire": 0x20005096, - "CD: Deep Braille Divine Tome": 0x40000860, - - "CD: Saint Bident": 0x008C1360, - "CD: Maiden Hood": 0x14BD12E0, - "CD: Maiden Robe": 0x14BD16C8, - "CD: Maiden Gloves": 0x14BD1AB0, - "CD: Maiden Skirt": 0x14BD1E98, - "CD: Drang Armor": 0x154E0C28, - "CD: Drang Gauntlets": 0x154E1010, - "CD: Drang Shoes": 0x154E13F8, - "CD: Drang Hammers": 0x00F61FD0, - "CD: Deep Ring": 0x20004F60, - - "CD: Archdeacon White Crown": 0x13EF1480, - "CD: Archdeacon Holy Garb": 0x13EF1868, - "CD: Archdeacon Skirt": 0x13EF2038, - - "CD: Arbalest": 0x00D662D0, - "CD: Small Doll": 0x400007D5, - "CD: Soul of the Deacons of the Deep": 0x400002D9, - "CD: Rosaria's Fingers Covenant": 0x20002760, -} - -farron_keep_table = { - "FK: Ragged Mask": 0x148F4C20, - "FK: Iron Flesh": 0x40251430, - "FK: Golden Scroll": 0x4000085C, - - "FK: Antiquated Dress": 0x15D76068, - "FK: Antiquated Gloves": 0x15D76450, - "FK: Antiquated Skirt": 0x15D76838, - - "FK: Nameless Knight Helm": 0x143B5FC0, - "FK: Nameless Knight Armor": 0x143B63A8, - "FK: Nameless Knight Gauntlets": 0x143B6790, - "FK: Nameless Knight Leggings": 0x143B6B78, - - "FK: Sunlight Talisman": 0x00CA54E0, - "FK: Wolf's Blood Swordgrass": 0x4000016E, - "FK: Greatsword": 0x005C50D0, - - "FK: Sage's Coal": 0x40000838, - "FK: Stone Parma": 0x01443FD0, - "FK: Sage's Scroll": 0x40000854, - "FK: Crown of Dusk": 0x15D75C80, - - "FK: Lingering Dragoncrest Ring": 0x20004F2E, - "FK: Pharis's Hat": 0x1487AB00, - "FK: Black Bow of Pharis": 0x00D7E970, - - "FK: Dreamchaser's Ashes": 0x4000083C, - "FK: Great Axe": 0x006B9310, - "FK: Dragon Crest Shield": 0x01432E60, - "FK: Lightning Spear": 0x40362B30, - "FK: Atonement": 0x4039ADA0, - "FK: Great Magic Weapon": 0x40140118, - "FK: Cinders of a Lord - Abyss Watcher": 0x4000084B, - "FK: Soul of the Blood of the Wolf": 0x400002CD, - "FK: Soul of a Stray Demon": 0x400002E7, - "FK: Watchdogs of Farron Covenant": 0x20002724, -} - -catacombs_of_carthus_table = { - "CC: Carthus Pyromancy Tome": 0x40000850, - "CC: Carthus Milkring": 0x20004FE2, - "CC: Grave Warden's Ashes": 0x4000083E, - "CC: Carthus Bloodring": 0x200050FA, - "CC: Grave Warden Pyromancy Tome": 0x40000853, - "CC: Old Sage's Blindfold": 0x11945BA0, - "CC: Witch's Ring": 0x20004F11, - "CC: Black Blade": 0x004CC070, - "CC: Soul of High Lord Wolnir": 0x400002D6, - "CC: Soul of a Demon": 0x400002E3, -} - -smouldering_lake_table = { - "SL: Shield of Want": 0x0144B500, - "SL: Speckled Stoneplate Ring": 0x20004E7A, - "SL: Dragonrider Bow": 0x00D6B0F0, - "SL: Lightning Stake": 0x40389C30, - "SL: Izalith Pyromancy Tome": 0x40000851, - "SL: Black Knight Sword": 0x005F5E10, - "SL: Quelana Pyromancy Tome": 0x40000852, - "SL: Toxic Mist": 0x4024F108, - "SL: White Hair Talisman": 0x00CAF120, - "SL: Izalith Staff": 0x00C96A80, - "SL: Sacred Flame": 0x40284880, - "SL: Fume Ultra Greatsword": 0x0060E4B0, - "SL: Black Iron Greatshield": 0x0150EA00, - "SL: Soul of the Old Demon King": 0x400002D0, - "SL: Knight Slayer's Ring": 0x20005000, -} - -irithyll_of_the_boreal_valley_table = { - "IBV: Dorhys' Gnawing": 0x40363EB8, - "IBV: Witchtree Branch": 0x00C94370, - "IBV: Magic Clutch Ring": 0x2000500A, - "IBV: Ring of the Sun's First Born": 0x20004F1B, - "IBV: Roster of Knights": 0x4000006C, - "IBV: Pontiff's Right Eye": 0x2000510E, - - "IBV: Yorshka's Spear": 0x008C3A70, - "IBV: Great Heal": 0x40356FB0, - - "IBV: Smough's Great Hammer": 0x007E30B0, - "IBV: Leo Ring": 0x20004EE8, - "IBV: Excrement-covered Ashes": 0x40000862, - - "IBV: Dark Stoneplate Ring": 0x20004E70, - "IBV: Easterner's Ashes": 0x40000868, - "IBV: Painting Guardian's Curved Sword": 0x003E6890, - "IBV: Painting Guardian Hood": 0x156C8CC0, - "IBV: Painting Guardian Gown": 0x156C90A8, - "IBV: Painting Guardian Gloves": 0x156C9490, - "IBV: Painting Guardian Waistcloth": 0x156C9878, - "IBV: Dragonslayer Greatbow": 0x00CF8500, - "IBV: Reversal Ring": 0x20005104, - "IBV: Brass Helm": 0x1501BD00, - "IBV: Brass Armor": 0x1501C0E8, - "IBV: Brass Gauntlets": 0x1501C4D0, - "IBV: Brass Leggings": 0x1501C8B8, - "IBV: Ring of Favor": 0x20004E3E, - "IBV: Golden Ritual Spear": 0x00C83200, - "IBV: Soul of Pontiff Sulyvahn": 0x400002D4, - "IBV: Aldrich Faithful Covenant": 0x2000272E, - "IBV: Drang Twinspears": 0x00F5AAA0, -} - -irithyll_dungeon_table = { - "ID: Bellowing Dragoncrest Ring": 0x20004F07, - "ID: Jailbreaker's Key": 0x400007D7, - "ID: Prisoner Chief's Ashes": 0x40000863, - "ID: Old Sorcerer Hat": 0x1496ED40, - "ID: Old Sorcerer Coat": 0x1496F128, - "ID: Old Sorcerer Gauntlets": 0x1496F510, - "ID: Old Sorcerer Boots": 0x1496F8F8, - "ID: Great Magic Shield": 0x40144F38, - - "ID: Dragon Torso Stone": 0x4000017A, - "ID: Lightning Blade": 0x4036C770, - "ID: Profaned Coal": 0x4000083A, - "ID: Xanthous Ashes": 0x40000864, - "ID: Old Cell Key": 0x400007DC, - "ID: Pickaxe": 0x007DE290, - "ID: Profaned Flame": 0x402575D8, - "ID: Covetous Gold Serpent Ring": 0x20004FA6, - "ID: Jailer's Key Ring": 0x400007D8, - "ID: Dusk Crown Ring": 0x20004F4C, - "ID: Dark Clutch Ring": 0x20005028, - "ID: Karla's Ashes": 0x40000842 -} - -profaned_capital_table = { - "PC: Cursebite Ring": 0x20004E98, - "PC: Court Sorcerer Hood": 0x11BA8140, - "PC: Court Sorcerer Robe": 0x11BA8528, - "PC: Court Sorcerer Gloves": 0x11BA8910, - "PC: Court Sorcerer Trousers": 0x11BA8CF8, - "PC: Wrath of the Gods": 0x4035E0F8, - "PC: Logan's Scroll": 0x40000855, - "PC: Eleonora": 0x006CCB90, - "PC: Court Sorcerer's Staff": 0x00C91C60, - "PC: Greatshield of Glory": 0x01515F30, - "PC: Storm Ruler": 0x006132D0, - "PC: Cinders of a Lord - Yhorm the Giant": 0x4000084D, - "PC: Soul of Yhorm the Giant": 0x400002DC, -} - -anor_londo_table = { - "AL: Giant's Coal": 0x40000839, - "AL: Sun Princess Ring": 0x20004FBA, - "AL: Aldrich's Ruby": 0x2000508C, - "AL: Cinders of a Lord - Aldrich": 0x4000084C, - "AL: Soul of Aldrich": 0x400002D5, -} - -lothric_castle_table = { - "LC: Hood of Prayer": 0x13AA6A60, - "LC: Robe of Prayer": 0x13AA6E48, - "LC: Skirt of Prayer": 0x13AA7618, - - "LC: Sacred Bloom Shield": 0x013572C0, - "LC: Winged Knight Helm": 0x12EBAE40, - "LC: Winged Knight Armor": 0x12EBB228, - "LC: Winged Knight Gauntlets": 0x12EBB610, - "LC: Winged Knight Leggings": 0x12EBB9F8, - - "LC: Greatlance": 0x008A8CC0, - "LC: Sniper Crossbow": 0x00D83790, - "LC: Spirit Tree Crest Shield": 0x014466E0, - "LC: Red Tearstone Ring": 0x20004ECA, - "LC: Caitha's Chime": 0x00CA06C0, - "LC: Braille Divine Tome of Lothric": 0x40000848, - "LC: Knight's Ring": 0x20004FEC, - "LC: Irithyll Rapier": 0x002E8A10, - "LC: Sunlight Straight Sword": 0x00203230, - "LC: Soul of Dragonslayer Armour": 0x400002D1, - - # The Black Hand Gotthard corpse appears when you have defeated Yhorm and Aldrich and triggered the cutscene - "LC: Grand Archives Key": 0x400007DE, # On Black Hand Gotthard corpse - "LC: Gotthard Twinswords": 0x00F53570 # On Black Hand Gotthard corpse -} - -consumed_king_garden_table = { - "CKG: Dragonscale Ring": 0x2000515E, - "CKG: Shadow Mask": 0x14D3F640, - "CKG: Shadow Garb": 0x14D3FA28, - "CKG: Shadow Gauntlets": 0x14D3FE10, - "CKG: Shadow Leggings": 0x14D401F8, - "CKG: Claw": 0x00A7D8C0, - "CKG: Soul of Consumed Oceiros": 0x400002CE, - "CKG: Magic Stoneplate Ring": 0x20004E66, - # "CKG: Path of the Dragon Gesture": 0x40002346, I can't technically randomize it as it is a gesture and not an item -} - -grand_archives_table = { - "GA: Avelyn": 0x00D6FF10, - "GA: Witch's Locks": 0x00B7B740, - "GA: Power Within": 0x40253B40, - "GA: Scholar Ring": 0x20004EB6, - "GA: Soul Stream": 0x4018B820, - "GA: Fleshbite Ring": 0x20004EA2, - "GA: Crystal Chime": 0x00CA2DD0, - "GA: Golden Wing Crest Shield": 0x0143CAA0, - "GA: Onikiri and Ubadachi": 0x00F58390, - "GA: Hunter's Ring": 0x20004FF6, - "GA: Divine Pillars of Light": 0x4038C340, - "GA: Cinders of a Lord - Lothric Prince": 0x4000084E, - "GA: Soul of the Twin Princes": 0x400002DB, - "GA: Sage's Crystal Staff": 0x00C8CE40, - "GA: Outrider Knight Helm": 0x1328B740, - "GA: Outrider Knight Armor": 0x1328BB28, - "GA: Outrider Knight Gauntlets": 0x1328BF10, - "GA: Outrider Knight Leggings": 0x1328C2F8, - "GA: Crystal Scroll": 0x40000856, -} - -untended_graves_table = { - "UG: Ashen Estus Ring": 0x200050E6, - "UG: Black Knight Glaive": 0x009AE070, - "UG: Hornet Ring": 0x20004F9C, - "UG: Chaos Blade": 0x004C9960, - "UG: Blacksmith Hammer": 0x007E57C0, - "UG: Eyes of a Fire Keeper": 0x4000085A, - "UG: Coiled Sword Fragment": 0x4000015F, - "UG: Soul of Champion Gundyr": 0x400002C8, -} - -archdragon_peak_table = { - "AP: Lightning Clutch Ring": 0x20005014, - "AP: Ancient Dragon Greatshield": 0x013599D0, - "AP: Ring of Steel Protection": 0x20004E48, - "AP: Calamity Ring": 0x20005078, - "AP: Drakeblood Greatsword": 0x00609690, - "AP: Dragonslayer Spear": 0x008CAFA0, - - "AP: Thunder Stoneplate Ring": 0x20004E5C, - "AP: Great Magic Barrier": 0x40365628, - "AP: Dragon Chaser's Ashes": 0x40000867, - "AP: Twinkling Dragon Torso Stone": 0x40000184, - "AP: Dragonslayer Helm": 0x158B1140, - "AP: Dragonslayer Armor": 0x158B1528, - "AP: Dragonslayer Gauntlets": 0x158B1910, - "AP: Dragonslayer Leggings": 0x158B1CF8, - "AP: Ricard's Rapier": 0x002E3BF0, - "AP: Soul of the Nameless King": 0x400002D2, - "AP: Dragon Tooth": 0x007E09A0, - "AP: Havel's Greatshield": 0x013376F0, -} - -painted_world_table = { # DLC - "PW: Follower Javelin": 0x008CD6B0, - "PW: Frozen Weapon": 0x401408E8, - "PW: Millwood Greatbow": 0x00D85EA0, - "PW: Captains Ashes": 0x4000086A, - "PW: Millwood Battle Axe": 0x006D67D0, - "PW: Ethereal Oak Shield": 0x01450320, - "PW: Crow Quills": 0x00F66DF0, - "PW: Slave Knight Hood": 0x134EDCE0, - "PW: Slave Knight Armor": 0x134EE0C8, - "PW: Slave Knight Gauntlets": 0x134EE4B0, - "PW: Slave Knight Leggings": 0x134EE898, - "PW: Way of White Corona": 0x403642A0, - "PW: Crow Talons": 0x00A89C10, - "PW: Quakestone Hammer": 0x007ECCF0, - "PW: Earth Seeker": 0x006D8EE0, - "PW: Follower Torch": 0x015F1AD0, - "PW: Follower Shield": 0x0135C0E0, - "PW: Follower Sabre": 0x003EDDC0, - "PW: Snap Freeze": 0x401A90C8, - "PW: Floating Chaos": 0x40257DA8, - "PW: Pyromancer's Parting Flame": 0x00CC9ED0, - "PW: Vilhelm's Helm": 0x11312D00, - "PW: Vilhelm's Armor": 0x113130E8, - "PW: Vilhelm's Gauntlets": 0x113134D0, - "PW: Vilhelm's Leggings": 0x113138B8, - "PW: Valorheart": 0x00F646E0, # GRAVETENDER FIGHT - "PW: Champions Bones": 0x40000869, # GRAVETENDER FIGHT - "PW: Onyx Blade": 0x00222E00, # VILHELM FIGHT - "PW: Soul of Sister Friede": 0x400002E8, - "PW: Titanite Slab": 0x400003EB, - "PW: Chillbite Ring": 0x20005208, - "PW: Contraption Key": 0x4000086B # VILHELM FIGHT/NEEDED TO PROGRESS THROUGH PW -} - -dreg_heap_table = { # DLC - "DH: Loincloth": 0x11B2EBD8, - "DH: Aquamarine Dagger": 0x00116520, - "DH: Murky Hand Scythe": 0x00118C30, - "DH: Murky Longstaff": 0x00CCC5E0, - "DH: Great Soul Dregs": 0x401879A0, - "DH: Lothric War Banner": 0x00CCC5E0, - "DH: Projected Heal": 0x40364688, - "DH: Desert Pyromancer Hood": 0x14DB9760, - "DH: Desert Pyromancer Garb": 0x14DB9B48, - "DH: Desert Pyromancer Gloves": 0x14DB9F30, - "DH: Desert Pyromancer Skirt": 0x14DBA318, - "DH: Giant Door Shield": 0x00F5F8C0, - "DH: Herald Curved Greatsword": 0x006159E0, - "DH: Flame Fan": 0x40258190, - "DH: Soul of the Demon Prince": 0x400002EA, - "DH: Small Envoy Banner": 0x4000086C # NEEDED TO TRAVEL TO RINGED CITY -} - -ringed_city_table = { # DLC - "RC: Ruin Sentinel Helm": 0x14CC5520, - "RC: Ruin Sentinel Armor": 0x14CC5908, - "RC: Ruin Sentinel Gauntlets": 0x14CC5CF0, - "RC: Ruin Sentinel Leggings": 0x14CC60D8, - "RC: Black Witch Veil": 0x14FA1BE0, - "RC: Black Witch Hat": 0x14EAD9A0, - "RC: Black Witch Garb": 0x14EADD88, - "RC: Black Witch Wrappings": 0x14EAE170, - "RC: Black Witch Trousers": 0x14EAE558, - "RC: White Preacher Head": 0x14153A20, - "RC: Havel's Ring": 0x20004E34, - "RC: Ringed Knight Spear": 0x008CFDC0, - "RC: Dragonhead Shield": 0x0135E7F0, - "RC: Ringed Knight Straight Sword": 0x00225510, - "RC: Preacher's Right Arm": 0x00CD1400, - "RC: White Birch Bow": 0x00D77440, - "RC: Church Guardian Shiv": 0x4000013B, # Assigned to "Demon's Scar" - "RC: Dragonhead Greatshield": 0x01452A30, - "RC: Ringed Knight Paired Greatswords": 0x00F69500, - "RC: Shira's Crown": 0x11C22260, - "RC: Shira's Armor": 0x11C22648, - "RC: Shira's Gloves": 0x11C22A30, - "RC: Shira's Trousers": 0x11C22E18, - "RC: Titanite Slab": 0x400003EB, # SHIRA DROP - "RC: Crucifix of the Mad King": 0x008D4BE0, # SHIRA DROP - "RC: Sacred Chime of Filianore": 0x00CCECF0, # SHIRA DROP - "RC: Iron Dragonslayer Helm": 0x1405F7E0, - "RC: Iron Dragonslayer Armor": 0x1405FBC8, - "RC: Iron Dragonslayer Gauntlets": 0x1405FFB0, - "RC: Iron Dragonslayer Leggings": 0x14060398, - "RC: Lightning Arrow": 0x40358B08, - "RC: Ritual Spear Fragment": 0x4000028A, # Assigned to "Frayed Blade" - "RC: Antiquated Plain Garb": 0x11B2E408, - "RC: Violet Wrappings": 0x11B2E7F0, # Assigned to "Gael's Greatsword" - "RC: Soul of Darkeater Midir": 0x400002EB, - "RC: Soul of Slave Knight Gael": 0x400002E9, - "RC: Blood of the Dark Souls": 0x4000086E, # Assigned to "Repeating Crossbow" -} - -progressive_locations = { - # Upgrade materials - **{"Titanite Shard #"+str(i): 0x400003E8 for i in range(1, 11)}, - **{"Large Titanite Shard #"+str(i): 0x400003E9 for i in range(1, 11)}, - **{"Titanite Chunk #"+str(i): 0x400003EA for i in range(1, 6)}, - **{"Titanite Slab #"+str(i): 0x400003EB for i in range(1, 4)}, - - # Healing - **{"Estus Shard #"+str(i): 0x4000085D for i in range(1, 16)}, - **{"Undead Bone Shard #"+str(i): 0x4000085F for i in range(1, 6)}, - - # Items - **{"Firebomb #"+str(i): 0x40000124 for i in range(1, 5)}, - **{"Throwing Knife #"+str(i): 0x40000136 for i in range(1, 3)}, - - # Souls - **{"Soul of a Deserted Corpse #" + str(i): 0x40000191 for i in range(1, 6)}, - **{"Large Soul of a Deserted Corpse #" + str(i): 0x40000192 for i in range(1, 6)}, - **{"Soul of an Unknown Traveler #" + str(i): 0x40000193 for i in range(1, 6)}, - **{"Large Soul of an Unknown Traveler #" + str(i): 0x40000194 for i in range(1, 6)} -} - -progressive_locations_2 = { - ##Added by Br00ty - "HWL: Gold Pine Resin #": 0x4000014B, - "US: Charcoal Pine Resin #": 0x4000014A, - "FK: Gold Pine Bundle #": 0x40000155, - "CC: Carthus Rouge #": 0x4000014F, - "ID: Pale Pine Resin #": 0x40000150, - **{"Titanite Scale #" + str(i): 0x400003FC for i in range(1, 27)}, - **{"Fading Soul #" + str(i): 0x40000190 for i in range(1, 4)}, - **{"Ring of Sacrifice #"+str(i): 0x20004EF2 for i in range(1, 5)}, - **{"Homeward Bone #"+str(i): 0x4000015E for i in range(1, 17)}, - **{"Ember #"+str(i): 0x400001F4 for i in range(1, 46)}, -} - -progressive_locations_3 = { - **{"Green Blossom #" + str(i): 0x40000104 for i in range(1, 7)}, - **{"Human Pine Resin #" + str(i): 0x4000014E for i in range(1, 3)}, - **{"Charcoal Pine Bundle #" + str(i): 0x40000154 for i in range(1, 3)}, - **{"Rotten Pine Resin #" + str(i): 0x40000157 for i in range(1, 3)}, - **{"Pale Tongue #" + str(i): 0x40000175 for i in range(1, 3)}, - **{"Alluring Skull #" + str(i): 0x40000126 for i in range(1, 3)}, - **{"Undead Hunter Charm #" + str(i): 0x40000128 for i in range(1, 3)}, - **{"Duel Charm #" + str(i): 0x40000130 for i in range(1, 3)}, - **{"Rusted Coin #" + str(i): 0x400001C7 for i in range(1, 3)}, - **{"Rusted Gold Coin #" + str(i): 0x400001C9 for i in range(1, 4)}, - **{"Titanite Chunk #"+str(i): 0x400003EA for i in range(1, 17)}, - **{"Twinkling Titanite #"+str(i): 0x40000406 for i in range(1, 8)} -} - -dlc_progressive_locations = { #71 - **{"Large Soul of an Unknown Traveler $"+str(i): 0x40000194 for i in range(1, 10)}, - **{"Soul of a Weary Warrior $"+str(i): 0x40000197 for i in range(1, 6)}, - **{"Large Soul of a Weary Warrior $"+str(i): 0x40000198 for i in range(1, 7)}, - **{"Soul of a Crestfallen Knight $"+str(i): 0x40000199 for i in range(1, 7)}, - **{"Large Soul of a Crestfallen Knight $"+str(i): 0x4000019A for i in range(1, 4)}, - **{"Homeward Bone $"+str(i): 0x4000015E for i in range(1, 7)}, - **{"Large Titanite Shard $"+str(i): 0x400003E9 for i in range(1, 4)}, - **{"Titanite Chunk $"+str(i): 0x400003EA for i in range(1, 16)}, - **{"Twinkling Titanite $"+str(i): 0x40000406 for i in range(1, 6)}, - **{"Rusted Coin $"+str(i): 0x400001C7 for i in range(1, 4)}, - **{"Ember $"+str(i): 0x400001F4 for i in range(1, 11)} -} - -location_tables = [fire_link_shrine_table, firelink_shrine_bell_tower_table, high_wall_of_lothric, undead_settlement_table, road_of_sacrifice_table, - cathedral_of_the_deep_table, farron_keep_table, catacombs_of_carthus_table, smouldering_lake_table, irithyll_of_the_boreal_valley_table, - irithyll_dungeon_table, profaned_capital_table, anor_londo_table, lothric_castle_table, consumed_king_garden_table, - grand_archives_table, untended_graves_table, archdragon_peak_table, progressive_locations, progressive_locations_2, progressive_locations_3, - painted_world_table, dreg_heap_table, ringed_city_table, dlc_progressive_locations] - -location_dictionary = {**fire_link_shrine_table, **firelink_shrine_bell_tower_table, **high_wall_of_lothric, **undead_settlement_table, **road_of_sacrifice_table, - **cathedral_of_the_deep_table, **farron_keep_table, **catacombs_of_carthus_table, **smouldering_lake_table, **irithyll_of_the_boreal_valley_table, - **irithyll_dungeon_table, **profaned_capital_table, **anor_londo_table, **lothric_castle_table, **consumed_king_garden_table, - **grand_archives_table, **untended_graves_table, **archdragon_peak_table, **progressive_locations, **progressive_locations_2, **progressive_locations_3, - **painted_world_table, **dreg_heap_table, **ringed_city_table, **dlc_progressive_locations}