From 07c0801cd57c992848e123e9475c6aeb83f3d36e Mon Sep 17 00:00:00 2001 From: Marechal-l Date: Wed, 29 Jun 2022 18:06:06 +0200 Subject: [PATCH] Add more options and filter items by categories --- worlds/dark_souls_3/Locations.py | 2 +- worlds/dark_souls_3/Options.py | 18 +- worlds/dark_souls_3/Rules.py | 0 worlds/dark_souls_3/__init__.py | 244 +++----- worlds/dark_souls_3/data/items_data.py | 165 +++-- worlds/dark_souls_3/data/locations_data.py | 676 +++++++++++---------- 6 files changed, 547 insertions(+), 558 deletions(-) delete mode 100644 worlds/dark_souls_3/Rules.py diff --git a/worlds/dark_souls_3/Locations.py b/worlds/dark_souls_3/Locations.py index 69d6e41731..b4c713d732 100644 --- a/worlds/dark_souls_3/Locations.py +++ b/worlds/dark_souls_3/Locations.py @@ -16,5 +16,5 @@ class DarkSouls3Location(Location): self.event = code is None @staticmethod - def get_item_name_to_id() -> typing.Dict[str, int]: + def get_location_name_to_id() -> typing.Dict[str, int]: return dictionary_table diff --git a/worlds/dark_souls_3/Options.py b/worlds/dark_souls_3/Options.py index a1ee099287..68ec378f59 100644 --- a/worlds/dark_souls_3/Options.py +++ b/worlds/dark_souls_3/Options.py @@ -3,23 +3,35 @@ from Options import Toggle, Option class AutoEquipOption(Toggle): - # AutoEquip display_name = "Auto Equip" class LockEquipOption(Toggle): - # AutoEquip display_name = "Lock Equip" class NoWeaponRequirementsOption(Toggle): - # AutoEquip display_name = "No Weapon Requirements" +class RandomizeWeaponsLevelOption(Toggle): + display_name = "Randomize weapons level" + + +class PriorityLocationsPresetOption(Toggle): + display_name = "Priority locations preset" + + +class LateBasinOfVowsOption(Toggle): + display_name = "Late Basin of Vows" + + dark_souls_options: typing.Dict[str, type(Option)] = { "auto_equip": AutoEquipOption, "lock_equip": LockEquipOption, "no_weapon_requirements": NoWeaponRequirementsOption, + "randomize_weapons_level": RandomizeWeaponsLevelOption, + "priority_locations_preset": PriorityLocationsPresetOption, + "late_basin_of_vows": LateBasinOfVowsOption, } diff --git a/worlds/dark_souls_3/Rules.py b/worlds/dark_souls_3/Rules.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/worlds/dark_souls_3/__init__.py b/worlds/dark_souls_3/__init__.py index b026fb9eda..a99e9f9c5b 100644 --- a/worlds/dark_souls_3/__init__.py +++ b/worlds/dark_souls_3/__init__.py @@ -6,13 +6,13 @@ from random import randint from .Options import dark_souls_options # the options we defined earlier from .Items import DarkSouls3Item # data used below to add items to the World from .Locations import DarkSouls3Location # same as above -from .data.items_data import weapons_table, item_dictionary_table -from .data.locations_data import key_items_list, dictionary_table, cemetery_of_ash_table, fire_link_shrine_table, \ +from .data.items_data import weapons_upgrade_5_table, weapons_upgrade_10_table, item_dictionary_table, key_items_list +from .data.locations_data import dictionary_table, cemetery_of_ash_table, 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 + untended_graves_table, archdragon_peak_table, firelink_shrine_bell_tower_table, main_path_location_list from ..AutoWorld import World from BaseClasses import MultiWorld, Location, Region, Item, RegionType, Entrance from ..generic.Rules import set_rule @@ -25,6 +25,7 @@ class DarkSouls3World(World): super().__init__(world, player) self.locked_items = [] self.locked_locations = [] + self.main_path_locations = [] def create_item(self, name: str) -> Item: data = self.item_name_to_id[name] @@ -34,149 +35,31 @@ class DarkSouls3World(World): menu_region = Region("Menu", RegionType.Generic, "Menu", self.player) self.world.regions.append(menu_region) - cemetery_of_ash_region = Region("Cemetery Of Ash", RegionType.Generic, "Cemetery Of Ash", self.player) - for name, address in self.location_name_to_id.items(): - if cemetery_of_ash_table.get(name): - location = Location(self.player, name, address, cemetery_of_ash_region) - cemetery_of_ash_region.locations.append(location) - self.world.regions.append(cemetery_of_ash_region) - - firelink_shrine_region = Region("Firelink Shrine", RegionType.Generic, "Firelink Shrine", self.player) - for name, address in self.location_name_to_id.items(): - if fire_link_shrine_table.get(name): - location = Location(self.player, name, address, firelink_shrine_region) - firelink_shrine_region.locations.append(location) - self.world.regions.append(firelink_shrine_region) - - firelink_shrine_bell_tower_region = Region("Firelink Shrine Bell Tower", RegionType.Generic, "Firelink Shrine Bell Tower", self.player) - for name, address in self.location_name_to_id.items(): - if firelink_shrine_bell_tower_table.get(name): - location = Location(self.player, name, address, firelink_shrine_bell_tower_region) - firelink_shrine_bell_tower_region.locations.append(location) - self.world.regions.append(firelink_shrine_bell_tower_region) - - high_wall_of_lothric_region = Region("High Wall of Lothric", RegionType.Generic, "High Wall of Lothric", self.player) - for name, address in self.location_name_to_id.items(): - if high_wall_of_lothric.get(name): - location = Location(self.player, name, address, high_wall_of_lothric_region) - high_wall_of_lothric_region.locations.append(location) - self.world.regions.append(high_wall_of_lothric_region) - - undead_settlement_region = Region("Undead Settlement", RegionType.Generic, "Undead Settlement", self.player) - for name, address in self.location_name_to_id.items(): - if undead_settlement_table.get(name): - location = Location(self.player, name, address, undead_settlement_region) - undead_settlement_region.locations.append(location) - self.world.regions.append(undead_settlement_region) - - road_of_sacrifices_region = Region("Road of Sacrifices", RegionType.Generic, "Road of Sacrifices", self.player) - for name, address in self.location_name_to_id.items(): - if road_of_sacrifice_table.get(name): - location = Location(self.player, name, address, road_of_sacrifices_region) - road_of_sacrifices_region.locations.append(location) - self.world.regions.append(road_of_sacrifices_region) - - consumed_king_garden_region = Region("Consumed King's Garden", RegionType.Generic, "Consumed King's Garden", - self.player) - for name, address in self.location_name_to_id.items(): - if consumed_king_garden_table.get(name): - location = Location(self.player, name, address, consumed_king_garden_region) - consumed_king_garden_region.locations.append(location) - self.world.regions.append(consumed_king_garden_region) - - cathedral_of_the_deep_region = Region("Cathedral of the Deep", RegionType.Generic, "Cathedral of the Deep", - self.player) - for name, address in self.location_name_to_id.items(): - if cathedral_of_the_deep_table.get(name): - location = Location(self.player, name, address, cathedral_of_the_deep_region) - cathedral_of_the_deep_region.locations.append(location) - self.world.regions.append(cathedral_of_the_deep_region) - - farron_keep_region = Region("Farron Keep", RegionType.Generic, "Farron Keep", self.player) - for name, address in self.location_name_to_id.items(): - if farron_keep_table.get(name): - location = Location(self.player, name, address, farron_keep_region) - farron_keep_region.locations.append(location) - self.world.regions.append(farron_keep_region) - - catacombs_of_carthus_region = Region("Catacombs of Carthus", RegionType.Generic, "Catacombs of Carthus", self.player) - for name, address in self.location_name_to_id.items(): - if catacombs_of_carthus_table.get(name): - location = Location(self.player, name, address, catacombs_of_carthus_region) - catacombs_of_carthus_region.locations.append(location) - self.world.regions.append(catacombs_of_carthus_region) - - smouldering_lake_region = Region("Smouldering Lake", RegionType.Generic, "Smouldering Lake", self.player) - for name, address in self.location_name_to_id.items(): - if smouldering_lake_table.get(name): - location = Location(self.player, name, address, smouldering_lake_region) - smouldering_lake_region.locations.append(location) - self.world.regions.append(smouldering_lake_region) - - irithyll_of_the_boreal_valley_region = Region("Irithyll of the Boreal Valley", RegionType.Generic, - "Irithyll of the Boreal Valley", self.player) - for name, address in self.location_name_to_id.items(): - if irithyll_of_the_boreal_valley_table.get(name): - location = Location(self.player, name, address, irithyll_of_the_boreal_valley_region) - irithyll_of_the_boreal_valley_region.locations.append(location) - self.world.regions.append(irithyll_of_the_boreal_valley_region) - - irithyll_dungeon_region = Region("Irithyll Dungeon", RegionType.Generic, "Irithyll Dungeon", self.player) - for name, address in self.location_name_to_id.items(): - if irithyll_dungeon_table.get(name): - location = Location(self.player, name, address, irithyll_dungeon_region) - irithyll_dungeon_region.locations.append(location) - self.world.regions.append(irithyll_dungeon_region) - - profaned_capital_region = Region("Profaned Capital", RegionType.Generic, "Profaned Capital", self.player) - for name, address in self.location_name_to_id.items(): - if profaned_capital_table.get(name): - location = Location(self.player, name, address, profaned_capital_region) - profaned_capital_region.locations.append(location) - self.world.regions.append(profaned_capital_region) - - anor_londo_region = Region("Anor Londo", RegionType.Generic, "Anor Londo", self.player) - for name, address in self.location_name_to_id.items(): - if anor_londo_table.get(name): - location = Location(self.player, name, address, anor_londo_region) - anor_londo_region.locations.append(location) - self.world.regions.append(anor_londo_region) - - lothric_castle_region = Region("Lothric Castle", RegionType.Generic, "Lothric Castle", self.player) - for name, address in self.location_name_to_id.items(): - if lothric_castle_table.get(name): - location = Location(self.player, name, address, lothric_castle_region) - lothric_castle_region.locations.append(location) - self.world.regions.append(lothric_castle_region) - - grand_archives_region = Region("Grand Archives", RegionType.Generic, "Grand Archives", self.player) - for name, address in self.location_name_to_id.items(): - if grand_archives_table.get(name): - location = Location(self.player, name, address, grand_archives_region) - grand_archives_region.locations.append(location) - self.world.regions.append(grand_archives_region) - - untended_graves_region = Region("Untended Graves", RegionType.Generic, "Untended Graves", self.player) - for name, address in self.location_name_to_id.items(): - if untended_graves_table.get(name): - location = Location(self.player, name, address, untended_graves_region) - untended_graves_region.locations.append(location) - self.world.regions.append(untended_graves_region) - - archdragon_peak_region = Region("Archdragon Peak", RegionType.Generic, "Archdragon Peak", self.player) - for name, address in self.location_name_to_id.items(): - if archdragon_peak_table.get(name): - location = Location(self.player, name, address, archdragon_peak_region) - archdragon_peak_region.locations.append(location) - self.world.regions.append(archdragon_peak_region) - - kiln_of_the_first_flame_region = Region("Kiln Of The First Flame", RegionType.Generic, - "Kiln Of The First Flame", self.player) - self.world.regions.append(kiln_of_the_first_flame_region) + self.main_path_locations = main_path_location_list + cemetery_of_ash_region = self.create_region("Cemetery Of Ash", cemetery_of_ash_table) + 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) + # Entrances menu_region.exits.append(Entrance(self.player, "New Game", menu_region)) self.world.get_entrance("New Game", self.player).connect(cemetery_of_ash_region) - cemetery_of_ash_region.exits.append(Entrance(self.player, "Goto Firelink Shrine", cemetery_of_ash_region)) self.world.get_entrance("Goto Firelink Shrine", self.player).connect(firelink_shrine_region) firelink_shrine_region.exits.append(Entrance(self.player, "Goto High Wall of Lothric", firelink_shrine_region)) @@ -219,12 +102,24 @@ class DarkSouls3World(World): consumed_king_garden_region.exits.append(Entrance(self.player, "Goto Untended Graves", consumed_king_garden_region)) self.world.get_entrance("Goto Untended Graves", self.player).connect(untended_graves_region) + def create_region(self, name, location_table) -> Region: + new_region = Region(name, RegionType.Generic, name, self.player) + if location_table is not None: + for name, address in self.location_name_to_id.items(): + if location_table.get(name): # and name in self.main_path_locations: + location = Location(self.player, name, address, new_region) + new_region.locations.append(location) + self.world.regions.append(new_region) + return new_region + def create_items(self): for name, address in self.item_name_to_id.items(): - self.world.itempool += [self.create_item(name)] + if name != "Basin of Vows" and name != "Path of the Dragon Gesture": + self.world.itempool += [self.create_item(name)] def generate_early(self): - pass + if self.world.priority_locations_preset[self.player]: + self.world.priority_locations[self.player].value.update(main_path_location_list) def set_rules(self) -> None: set_rule(self.world.get_entrance("Goto Bell Tower", self.player), @@ -233,6 +128,8 @@ class DarkSouls3World(World): lambda state: state.has("Small Lothric Banner", self.player)) set_rule(self.world.get_entrance("Goto Lothric Castle", self.player), lambda state: state.has("Basin of Vows", self.player)) + set_rule(self.world.get_location("HWL: Soul of the Dancer", self.player), + lambda state: state.has("Basin of Vows", self.player)) set_rule(self.world.get_entrance("Goto Irithyll of the boreal", self.player), lambda state: state.has("Small Doll", self.player)) set_rule(self.world.get_entrance("Goto Archdragon peak", self.player), @@ -247,13 +144,19 @@ 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): self.world.completion_condition[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 - 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) + def generate_basic(self): + item = self.create_item("Basin of Vows") + if self.world.late_basin_of_vows[self.player]: + self.world.get_location("IBV: Soul of Pontiff Sulyvahn", self.player).place_locked_item(item) + else: + self.world.itempool += item + itempool_len = self.item_name_to_id.__len__() total_required_locations = self.location_name_to_id.__len__() @@ -263,24 +166,38 @@ class DarkSouls3World(World): def generate_output(self, output_directory: str): + print(self.world.get_items().__len__()) + + item_dictionary = item_dictionary_table.copy() + if self.world.randomize_weapons_level[self.player]: + # Randomize some weapons upgrades + for name in weapons_upgrade_5_table.keys(): + if randint(0, 100) < 33: + value = randint(1, 5) + item_dictionary[name] += value + + for name in weapons_upgrade_10_table.keys(): + if randint(0, 100) < 33: + value = randint(1, 10) + item_dictionary[name] += value + itemsId = [] itemsAddress = [] locationsId = [] locationsAddress = [] locationsTarget = [] - for location in self.world.get_filled_locations(self.player): - locationsAddress.append(dictionary_table[location.name]) - locationsId.append(location.address) - if location.item.player == self.player: - locationsTarget.append(item_dictionary_table[location.item.name]) - else: - locationsTarget.append(0) - for location in self.world.get_filled_locations(): if location.item.player == self.player: itemsId.append(location.item.code) - itemsAddress.append(item_dictionary_table[location.item.name]) + itemsAddress.append(item_dictionary[location.item.name]) + if location.player == self.player: + locationsAddress.append(dictionary_table[location.name]) + locationsId.append(location.address) + if location.item.player == self.player: + locationsTarget.append(item_dictionary[location.item.name]) + else: + locationsTarget.append(0) data = { "options": { @@ -323,14 +240,9 @@ class DarkSouls3World(World): # items exist. They could be generated from json or something else. They can # include events, but don't have to since events will be placed manually. item_name_to_id = {name: id for id, name in enumerate(DarkSouls3Item.get_item_name_to_id(), base_id)} - location_name_to_id = {name: id for id, name in enumerate(DarkSouls3Location.get_item_name_to_id(), base_id)} - - for name in item_dictionary_table.keys(): - if name in weapons_table and randint(0, 100) < 33: - value = randint(1, 10) - old = item_dictionary_table[name] - item_dictionary_table[name] += value - print(name + str(" +") + str(value) + str(" - ") + str(old) + str(" - ") + str(item_dictionary_table[name])) + location_name_to_id = {name: id for id, name in enumerate(DarkSouls3Location.get_location_name_to_id(), base_id)} + + diff --git a/worlds/dark_souls_3/data/items_data.py b/worlds/dark_souls_3/data/items_data.py index 739516aafa..7c6a6dab25 100644 --- a/worlds/dark_souls_3/data/items_data.py +++ b/worlds/dark_souls_3/data/items_data.py @@ -2,113 +2,158 @@ # List of location https://darksouls3.wiki.fextralife.com/Locations -weapons_table = { - "Broken Straight Sword": 0x001EF9B0, # Multiple - "East-West Shield": 0x0142B930, +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, + "Sage's Crystal Staff": 0x00C8CE40, + "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, + +} + +weapons_upgrade_10_table = { + "Broken Straight Sword": 0x001EF9B0, "Deep Battle Axe": 0x0006AFA54, "Club": 0x007A1200, "Claymore": 0x005BDBA0, "Longbow": 0x00D689E0, "Mail Breaker": 0x002DEDD0, "Broadsword": 0x001ED2A0, - "Silver Eagle Kite Shield": 0x014418C0, "Astora's Straight Sword": 0x002191C0, "Rapier": 0x002E14E0, "Lucerne": 0x0098BD90, - "Small Leather Shield": 0x01315410, "Whip": 0x00B71B00, "Reinforced Club": 0x007A8730, - "Blue Wooden Shield": 0x0143F1B0, "Caestus": 0x00A7FFD0, - "Plank Shield": 0x01346150, - "Caduceus Round Shield": 0x01341330, "Partizan": 0x0089C970, "Red Hilted Halberd": 0x009AB960, "Saint's Talisman": 0x00CACA10, - "Irithyll Straight Sword": 0x0020A760, "Large Club": 0x007AFC60, - "Wargod Wooden Shield": 0x0144DC10, - "Grass Crest Shield": 0x01437C80, - "Golden Falcon Shield": 0x01354BB0, "Brigand Twindaggers": 0x00F50E60, "Butcher Knife": 0x006BE130, "Brigand Axe": 0x006B1DE0, - "Twin Dragon Greatshield": 0x01513820, "Heretic's Staff": 0x00C8F550, "Great Club": 0x007B4A80, "Exile Greatsword": 0x005DD770, "Sellsword Twinblades": 0x00F42400, - - "Spider Shield": 0x01435570, - "Crest Shield": 0x01430750, "Notched Whip": 0x00B7DE50, "Astora Greatsword": 0x005C9EF0, "Executioner's Greatsword": 0x0021DFE0, - "Curse Ward Greatshield": 0x01518640, "Saint-tree Bellvine": 0x00C9DFB0, "Saint Bident": 0x008C1360, "Drang Hammers": 0x00F61FD0, - "Spiked Shield": 0x01426B10, "Barbed Straight Sword": 0x0021B8D0, "Arbalest": 0x00D662D0, - "Sunlight Talisman": 0x00CA54E0, "Greatsword": 0x005C50D0, - "Stone Parma": 0x01443FD0, "Black Bow of Pharis": 0x00D7E970, - "Great Axe": 0x006B9310, # Multiple - "Dragon Crest Shield": 0x01432E60, + "Great Axe": 0x006B9310, "Black Blade": 0x004CC070, - - "Chaos Blade": 0x004C9960, "Blacksmith Hammer": 0x007E57C0, - - "Shield of Want": 0x0144B500, - "Dragonrider Bow": 0x00D6B0F0, - "White Hair Talisman": 0x00CAF120, - "Izalith Staff": 0x00C96A80, - "Fume Ultra Greatsword": 0x0060E4B0, - "Black Iron Greatshield": 0x0150EA00, - "Black Knight Sword": 0x005F5E10, - - "Yorshka's Spear": 0x008C3A70, "Witchtree Branch": 0x00C94370, - "Smough's Great Hammer": 0x007E30B0, "Painting Guardian's Curved Sword": 0x003E6890, - "Dragonslayer Greatbow": 0x00CF8500, - "Golden Ritual Spear": 0x00C83200, - "Great Magic Shield": 0x40144F38, "Pickaxe": 0x007DE290, - "Eleonora": 0x006CCB90, "Court Sorcerer's Staff": 0x00C91C60, - "Greatshield of Glory": 0x01515F30, - "Sacred Bloom Shield": 0x013572C0, - "Avelyn": 0x00D6FF10, - "Witch's Locks": 0x00B7B740, - "Crystal Chime": 0x00CA2DD0, - "Golden Wing Crest Shield": 0x0143CAA0, - "Sage's Crystal Staff": 0x00C8CE40, "Onikiri and Ubadachi": 0x00F58390, - "Black Knight Glaive": 0x009AE070, "Ricard's Rapier": 0x002E3BF0, - "Ancient Dragon Greatshield": 0x013599D0, "Drakeblood Greatsword": 0x00609690, - "Dragonslayer Spear": 0x008CAFA0, "Greatlance": 0x008A8CC0, "Sniper Crossbow": 0x00D83790, - "Spirit Tree Crest Shield": 0x014466E0, - "Caitha's Chime": 0x00CA06C0, - "Sunlight Straight Sword": 0x00203230, + "Claw": 0x00A7D8C0, } +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, + "Spiked Shield": 0x01426B10, + "Stone Parma": 0x01443FD0, + "Dragon Crest Shield": 0x01432E60, + "Shield of Want": 0x0144B500, + "Black Iron Greatshield": 0x0150EA00, + "Great Magic Shield": 0x40144F38, + "Greatshield of Glory": 0x01515F30, + "Sacred Bloom Shield": 0x013572C0, + "Golden Wing Crest Shield": 0x0143CAA0, + "Ancient Dragon Greatshield": 0x013599D0, + "Spirit Tree Crest Shield": 0x014466E0, + +} + goods_table = { "Fire Keeper Soul": 0x40000186, "Binoculars": 0x40000173, "Loretta's Bone": 0x40000846, "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, } armor_table = { @@ -354,4 +399,18 @@ heals_table = { "Undead Bone Shard #9": 0x4000085F, } -item_dictionary_table = {**weapons_table, **armor_table, **rings_table, **spells_table, **key_items_table, **goods_table} +key_items_list = { + "Small Lothric Banner", + "Basin of Vows", + "Small Doll", + "Path of the Dragon Gesture", + "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" +} + +item_dictionary_table = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table, **armor_table, **rings_table, **spells_table, **key_items_table, **goods_table} diff --git a/worlds/dark_souls_3/data/locations_data.py b/worlds/dark_souls_3/data/locations_data.py index d0071d5dab..6c5978b50c 100644 --- a/worlds/dark_souls_3/data/locations_data.py +++ b/worlds/dark_souls_3/data/locations_data.py @@ -5,431 +5,437 @@ cemetery_of_ash_table = { } fire_link_shrine_table = { - "Covetous Silver Serpent Ring": 0x20004FB0, - "Broken Straight Sword": 0x001EF9B0, # Multiple - "East-West Shield": 0x0142B930, + "FS: Broken Straight Sword": 0x001EF9B0, # Multiple + "FS: East-West Shield": 0x0142B930, } firelink_shrine_bell_tower_table = { - "Fire Keeper Robe": 0x140D9CE8, - "Fire Keeper Gloves": 0x140DA0D0, - "Fire Keeper Skirt": 0x140DA4B8, - "Estus Ring": 0x200050DC, - "Fire Keeper Soul": 0x40000186 + "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 = { - "Deep Battle Axe": 0x0006AFA54, - "Club": 0x007A1200, - "Deserter Trousers": 0x126265B8, - "Claymore": 0x005BDBA0, - "Binoculars": 0x40000173, - "Longbow": 0x00D689E0, - "Mail Breaker": 0x002DEDD0, - "Broadsword": 0x001ED2A0, - "Silver Eagle Kite Shield": 0x014418C0, - "Astora's Straight Sword": 0x002191C0, - "Cell Key": 0x400007DA, - "Rapier": 0x002E14E0, - "Lucerne": 0x0098BD90, - "Small Lothric Banner": 0x40000836, - "Basin of Vows": 0x40000845, - "Soul of the Dancer": 0x400002CA, - "Soul of Boreal Valley Vordt": 0x400002CF, + "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, } undead_settlement_table = { - "Small Leather Shield": 0x01315410, - "Whip": 0x00B71B00, - "Reinforced Club": 0x007A8730, - "Blue Wooden Shield": 0x0143F1B0, + "US: Small Leather Shield": 0x01315410, + "US: Whip": 0x00B71B00, + "US: Reinforced Club": 0x007A8730, + "US: Blue Wooden Shield": 0x0143F1B0, - "Cleric Hat": 0x11D905C0, - "Cleric Blue Robe": 0x11D909A8, - "Cleric Gloves": 0x11D90D90, - "Cleric Trousers": 0x11D91178, + "US: Cleric Hat": 0x11D905C0, + "US: Cleric Blue Robe": 0x11D909A8, + "US: Cleric Gloves": 0x11D90D90, + "US: Cleric Trousers": 0x11D91178, - "Mortician's Ashes": 0x4000083B, # Key item for Grave Key for Firelink Towerlocations - "Caestus": 0x00A7FFD0, - "Plank Shield": 0x01346150, - "Flame Stoneplate Ring": 0x20004E52, - "Caduceus Round Shield": 0x01341330, - "Fire Clutch Ring": 0x2000501E, - "Partizan": 0x0089C970, - "Bloodbite Ring": 0x20004E84, + "US: Mortician's Ashes": 0x4000083B, # Key item for Grave Key for Firelink Towerlocations + "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, - "Red Hilted Halberd": 0x009AB960, - "Saint's Talisman": 0x00CACA10, - "Irithyll Straight Sword": 0x0020A760, - "Large Club": 0x007AFC60, - "Northern Helm": 0x116E3600, - "Northern Armor": 0x116E39E8, - "Northern Gloves": 0x116E3DD0, - "Northern Trousers": 0x116E41B8, - "Flynn's Ring": 0x2000503C, + "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, - "Mirrah Vest": 0x15204568, - "Mirrah Gloves": 0x15204950, - "Mirrah Trousers": 0x15204D38, + "US: Mirrah Vest": 0x15204568, + "US: Mirrah Gloves": 0x15204950, + "US: Mirrah Trousers": 0x15204D38, - "Chloranthy Ring": 0x20004E2A, - "Loincloth": 0x148F57D8, - "Wargod Wooden Shield": 0x0144DC10, + "US: Chloranthy Ring": 0x20004E2A, + "US: Loincloth": 0x148F57D8, + "US: Wargod Wooden Shield": 0x0144DC10, - "Loretta's Bone": 0x40000846, + "US: Loretta's Bone": 0x40000846, + + "US: Hand Axe": 0x006ACFC0, + "US: Great Scythe": 0x00989680, + "US: Soul of the Rotted Greatwood": 0x400002D7, } road_of_sacrifice_table = { - "Brigand Twindaggers": 0x00F50E60, + "RS: Brigand Twindaggers": 0x00F50E60, - "Brigand Hood": 0x148009E0, - "Brigand Armor": 0x14800DC8, - "Brigand Gauntlets": 0x148011B0, - "Brigand Trousers": 0x14801598, + "RS: Brigand Hood": 0x148009E0, + "RS: Brigand Armor": 0x14800DC8, + "RS: Brigand Gauntlets": 0x148011B0, + "RS: Brigand Trousers": 0x14801598, - "Butcher Knife": 0x006BE130, - "Brigand Axe": 0x006B1DE0, - "Braille Divine Tome of Carim": 0x40000847, # Shop - "Morne's Ring": 0x20004F1A, - "Twin Dragon Greatshield": 0x01513820, - "Heretic's Staff": 0x00C8F550, + "RS: Butcher Knife": 0x006BE130, + "RS: Brigand Axe": 0x006B1DE0, + "RS: Braille Divine Tome of Carim": 0x40000847, # Shop + "RS: Morne's Ring": 0x20004F1A, + "RS: Twin Dragon Greatshield": 0x01513820, + "RS: Heretic's Staff": 0x00C8F550, - "Sorcerer Hood": 0x11C9C380, - "Sorcerer Robe": 0x11C9C768, - "Sorcerer Gloves": 0x11C9CB50, - "Sorcerer Trousers": 0x11C9CF38, + "RS: Sorcerer Hood": 0x11C9C380, + "RS: Sorcerer Robe": 0x11C9C768, + "RS: Sorcerer Gloves": 0x11C9CB50, + "RS: Sorcerer Trousers": 0x11C9CF38, - "Sage Ring": 0x20004F38, + "RS: Sage Ring": 0x20004F38, - "Fallen Knight Helm": 0x1121EAC0, - "Fallen Knight Armor": 0x1121EEA8, - "Fallen Knight Gauntlets": 0x1121F290, - "Fallen Knight Trousers": 0x1121F678, + "RS: Fallen Knight Helm": 0x1121EAC0, + "RS: Fallen Knight Armor": 0x1121EEA8, + "RS: Fallen Knight Gauntlets": 0x1121F290, + "RS: Fallen Knight Trousers": 0x1121F678, - "Conjurator Hood": 0x149E8E60, - "Conjurator Robe": 0x149E9248, - "Conjurator Manchettes": 0x149E9630, - "Conjurator Boots": 0x149E9A18, + "RS: Conjurator Hood": 0x149E8E60, + "RS: Conjurator Robe": 0x149E9248, + "RS: Conjurator Manchettes": 0x149E9630, + "RS: Conjurator Boots": 0x149E9A18, - "Great Swamp Pyromancy Tome": 0x4000084F, # Shop + "RS: Great Swamp Pyromancy Tome": 0x4000084F, # Shop - "Great Club": 0x007B4A80, - "Exile Greatsword": 0x005DD770, + "RS: Great Club": 0x007B4A80, + "RS: Exile Greatsword": 0x005DD770, - "Farron Coal ": 0x40000837, # Shop + "RS: Farron Coal ": 0x40000837, # Shop - "Sellsword Twinblades": 0x00F42400, - "Sellsword Helm": 0x11481060, - "Sellsword Armor": 0x11481448, - "Sellsword Gauntlet": 0x11481830, - "Sellsword Trousers": 0x11481C18, + "RS: Sellsword Twinblades": 0x00F42400, + "RS: Sellsword Helm": 0x11481060, + "RS: Sellsword Armor": 0x11481448, + "RS: Sellsword Gauntlet": 0x11481830, + "RS: Sellsword Trousers": 0x11481C18, - "Golden Falcon Shield": 0x01354BB0, + "RS: Golden Falcon Shield": 0x01354BB0, - "Herald Helm": 0x114FB180, - "Herald Armor": 0x114FB568, - "Herald Gloves": 0x114FB950, - "Herald Trousers": 0x114FBD38, + "RS: Herald Helm": 0x114FB180, + "RS: Herald Armor": 0x114FB568, + "RS: Herald Gloves": 0x114FB950, + "RS: Herald Trousers": 0x114FBD38, - "Grass Crest Shield": 0x01437C80, - "Soul of a Crystal Sage": 0x400002CB, + "RS: Grass Crest Shield": 0x01437C80, + "RS: Soul of a Crystal Sage": 0x400002CB, + "RS: Great Swamp Ring": 0x20004F10, } cathedral_of_the_deep_table = { - "Paladin's Ashes": 0x4000083D, #Shop - "Spider Shield": 0x01435570, - "Crest Shield": 0x01430750, - "Notched Whip": 0x00B7DE50, - "Astora Greatsword": 0x005C9EF0, - "Executioner's Greatsword": 0x0021DFE0, - "Curse Ward Greatshield": 0x01518640, - "Saint-tree Bellvine": 0x00C9DFB0, - "Poisonbite Ring": 0x20004E8E, + "CD: Paladin's Ashes": 0x4000083D, #Shop + "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, - "Lloyd's Sword Ring": 0x200050B4, - "Seek Guidance": 0x40360420, + "CD: Lloyd's Sword Ring": 0x200050B4, + "CD: Seek Guidance": 0x40360420, - "Aldrich's Sapphire": 0x20005096, - "Deep Braille Divine Tome": 0x40000860, # Shop + "CD: Aldrich's Sapphire": 0x20005096, + "CD: Deep Braille Divine Tome": 0x40000860, # Shop - "Saint Bident": 0x008C1360, - "Maiden Hood": 0x14BD12E0, - "Maiden Robe": 0x14BD16C8, - "Maiden Gloves": 0x14BD1AB0, - "Maiden Skirt": 0x14BD1E98, - "Drang Armor": 0x154E0C28, - "Drang Gauntlets": 0x154E1010, - "Drang Shoes": 0x154E13F8, - "Drang Hammers": 0x00F61FD0, - "Deep Ring": 0x20004F60, + "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, - "Archdeacon White Crown": 0x13EF1480, - "Archdeacon Holy Garb": 0x13EF1868, - "Archdeacon Skirt": 0x13EF2038, - "Spiked Shield": 0x01426B10, - "Barbed Straight Sword": 0x0021B8D0, - - "Arbalest": 0x00D662D0, - "Helm of Thorns": 0x15B8D800, - "Armor of Thorns": 0x15B8DBE8, - "Gauntlets of Thorns": 0x15B8DFD0, - "Leggings of Thorns": 0x15B8E3B8, - "Small Doll": 0x400007D5, - "Soul of the Deacons of the Deep": 0x400002D9, + "CD: Archdeacon White Crown": 0x13EF1480, + "CD: Archdeacon Holy Garb": 0x13EF1868, + "CD: Archdeacon Skirt": 0x13EF2038, + "CD: Arbalest": 0x00D662D0, + "CD: Helm of Thorns": 0x15B8D800, + "CD: Armor of Thorns": 0x15B8DBE8, + "CD: Gauntlets of Thorns": 0x15B8DFD0, + "CD: Leggings of Thorns": 0x15B8E3B8, + "CD: Small Doll": 0x400007D5, + "CD: Soul of the Deacons of the Deep": 0x400002D9, } farron_keep_table = { - "Ragged Mask": 0x148F4C20, - "Iron Flesh": 0x40251430, - "Golden Scroll": 0x4000085C, + "FK: Ragged Mask": 0x148F4C20, + "FK: Iron Flesh": 0x40251430, + "FK: Golden Scroll": 0x4000085C, - "Antiquated Dress": 0x15D76068, - "Antiquated Gloves": 0x15D76450, - "Antiquated Skirt": 0x15D76838, + "FK: Antiquated Dress": 0x15D76068, + "FK: Antiquated Gloves": 0x15D76450, + "FK: Antiquated Skirt": 0x15D76838, - "Nameless Knight Helm": 0x143B5FC0, - "Nameless Knight Armor": 0x143B63A8, - "Nameless Knight Gauntlets": 0x143B6790, - "Nameless Knight Leggings": 0x143B6B78, + "FK: Nameless Knight Helm": 0x143B5FC0, + "FK: Nameless Knight Armor": 0x143B63A8, + "FK: Nameless Knight Gauntlets": 0x143B6790, + "FK: Nameless Knight Leggings": 0x143B6B78, - "Sunlight Talisman": 0x00CA54E0, - "Wolf's Blood Swordgrass": 0x4000016E, - "Greatsword": 0x005C50D0, + "FK: Sunlight Talisman": 0x00CA54E0, + "FK: Wolf's Blood Swordgrass": 0x4000016E, + "FK: Greatsword": 0x005C50D0, - "Sage's Coal": 0x40000838, # Shop #Unique - "Stone Parma": 0x01443FD0, - "Sage's Scroll": 0x40000854, - "Crown of Dusk": 0x15D75C80, + "FK: Sage's Coal": 0x40000838, # Shop #Unique + "FK: Stone Parma": 0x01443FD0, + "FK: Sage's Scroll": 0x40000854, + "FK: Crown of Dusk": 0x15D75C80, - "Lingering Dragoncrest Ring": 0x20004F2E, - "Pharis's Hat": 0x1487AB00, - "Black Bow of Pharis": 0x00D7E970, + "FK: Lingering Dragoncrest Ring": 0x20004F2E, + "FK: Pharis's Hat": 0x1487AB00, + "FK: Black Bow of Pharis": 0x00D7E970, - "Dreamchaser's Ashes": 0x4000083C, # Shop #Unique - "Great Axe": 0x006B9310, # Multiple - "Dragon Crest Shield": 0x01432E60, - "Lightning Spear": 0x40362B30, - "Atonement": 0x4039ADA0, - "Great Magic Weapon": 0x40140118, - "Cinders of a Lord - Abyss Watcher": 0x4000084B, - "Soul of the Blood of the Wolf": 0x400002CD, - "Soul of a Stray Demon": 0x400002E7, + "FK: Dreamchaser's Ashes": 0x4000083C, # Shop #Unique + "FK: Great Axe": 0x006B9310, # Multiple + "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, } catacombs_of_carthus_table = { - "Carthus Pyromancy Tome": 0x40000850, - "Carthus Milkring": 0x20004FE2, - "Grave Warden's Ashes": 0x4000083E, - "Knight Slayer's Ring": 0x20005000, - "Carthus Bloodring": 0x200050FA, - "Grave Warden Pyromancy Tome": 0x40000853, - "Old Sage's Blindfold": 0x11945BA0, - "Witch's Ring": 0x20004F11, - "Black Blade": 0x004CC070, - "Soul of High Lord Wolnir": 0x400002D6, - "Soul of a Demon": 0x400002E3, + "CC: Carthus Pyromancy Tome": 0x40000850, + "CC: Carthus Milkring": 0x20004FE2, + "CC: Grave Warden's Ashes": 0x4000083E, + "CC: Knight Slayer's Ring": 0x20005000, + "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 = { - "Shield of Want": 0x0144B500, - "Speckled Stoneplate Ring": 0x20004E7A, - "Dragonrider Bow": 0x00D6B0F0, - "Lightning Stake": 0x40389C30, - "Izalith Pyromancy Tome": 0x40000851, - "Black Knight Sword": 0x005F5E10, - "Quelana Pyromancy Tome": 0x40000852, - "Toxic Mist": 0x4024F108, - "White Hair Talisman": 0x00CAF120, - "Izalith Staff": 0x00C96A80, - "Sacred Flame": 0x40284880, - "Fume Ultra Greatsword": 0x0060E4B0, - "Black Iron Greatshield": 0x0150EA00, - "Soul of the Old Demon King": 0x400002D0, - + "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, } irithyll_of_the_boreal_valley_table = { - "Dorhys' Gnawing": 0x40363EB8, - "Witchtree Branch": 0x00C94370, - "Magic Clutch Ring": 0x2000500A, - "Ring of the Sun's First Born": 0x20004F1B, - "Roster of Knights": 0x4000006C, - "Chameleon": 0x4014ACF8, - "Pontiff's Right Eye": 0x2000510E, + "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: Chameleon": 0x4014ACF8, + "IBV: Pontiff's Right Eye": 0x2000510E, - "Yorshka's Spear": 0x008C3A70, - "Great Heal": 0x40356FB0, + "IBV: Yorshka's Spear": 0x008C3A70, + "IBV: Great Heal": 0x40356FB0, - "Smough's Great Hammer": 0x007E30B0, - "Leo Ring": 0x20004EE8, - "Greirat's Ashes": 0x4000083F, - "Excrement-covered Ashes": 0x40000862, - - "Dark Stoneplate Ring": 0x20004E70, - "Easterner's Ashes": 0x40000868, - "Painting Guardian's Curved Sword": 0x003E6890, - "Painting Guardian Hood": 0x156C8CC0, - "Painting Guardian Gown": 0x156C90A8, - "Painting Guardian Gloves": 0x156C9490, - "Painting Guardian Waistcloth": 0x156C9878, - "Dragonslayer Greatbow": 0x00CF8500, - "Reversal Ring": 0x20005104, - "Brass Helm": 0x1501BD00, - "Brass Armor": 0x1501C0E8, - "Brass Gauntlets": 0x1501C4D0, - "Brass Leggings": 0x1501C8B8, - "Ring of Favor": 0x20004E3E, - "Golden Ritual Spear": 0x00C83200, - "Soul of Pontiff Sulyvahn": 0x400002D4, + "IBV: Smough's Great Hammer": 0x007E30B0, + "IBV: Leo Ring": 0x20004EE8, + "IBV: Greirat's Ashes": 0x4000083F, + "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, } irithyll_dungeon_table = { - "Bellowing Dragoncrest Ring": 0x20004F07, - "Jailbreaker's Key": 0x400007D7, - "Prisoner Chief's Ashes": 0x40000863, - "Old Sorcerer Hat": 0x1496ED40, - "Old Sorcerer Coat": 0x1496F128, - "Old Sorcerer Gauntlets": 0x1496F510, - "Old Sorcerer Boots": 0x1496F8F8, - "Great Magic Shield": 0x40144F38, + "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, - "Dragon Torso Stone": 0x4000017A, - "Lightning Blade": 0x4036C770, - "Profaned Coal": 0x4000083A, - "Xanthous Ashes": 0x40000864, - "Old Cell Key": 0x400007DC, - "Pickaxe": 0x007DE290, - "Profaned Flame": 0x402575D8, - "Covetous Gold Serpent Ring": 0x20004FA6, - "Jailer's Key Ring": 0x400007D8, - "Dusk Crown Ring": 0x20004F4C, - "Dark Clutch Ring": 0x20005028, - "Path of the Dragon Gesture": 0x40002346, + "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: Path of the Dragon Gesture": 0x40002346, } profaned_capital_table = { - "Cursebite Ring": 0x20004E98, - "Court Sorcerer Hood": 0x11BA8140, - "Court Sorcerer Robe": 0x11BA8528, - "Court Sorcerer Gloves": 0x11BA8910, - "Court Sorcerer Trousers": 0x11BA8CF8, - "Wrath of the Gods": 0x4035E0F8, - "Logan's Scroll": 0x40000855, - "Eleonora": 0x006CCB90, - "Court Sorcerer's Staff": 0x00C91C60, - "Greatshield of Glory": 0x01515F30, - "Storm Ruler": 0x006132D0, - "Cinders of a Lord - Yhorm the Giant": 0x4000084D, - "Soul of Yhorm the Giant": 0x400002DC, - + "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 = { - "Giant's Coal": 0x40000839, - "Sun Princess Ring": 0x20004FBA, - "Aldrich's Ruby": 0x2000508C, - "Cinders of a Lord - Aldrich": 0x4000084C, - "Soul of Aldrich": 0x400002D5, - + "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 = { - "Hood of Prayer": 0x13AA6A60, - "Robe of Prayer": 0x13AA6E48, - "Skirt of Prayer": 0x13AA7618, + "LC: Hood of Prayer": 0x13AA6A60, + "LC: Robe of Prayer": 0x13AA6E48, + "LC: Skirt of Prayer": 0x13AA7618, - "Sacred Bloom Shield": 0x013572C0, - "Winged Knight Helm": 0x12EBAE40, - "Winged Knight Armor": 0x12EBB228, - "Winged Knight Gauntlets": 0x12EBB610, - "Winged Knight Leggings": 0x12EBB9F8, - - "Greatlance": 0x008A8CC0, - "Sniper Crossbow": 0x00D83790, - "Spirit Tree Crest Shield": 0x014466E0, - "Red Tearstone Ring": 0x20004ECA, - "Caitha's Chime": 0x00CA06C0, - "Braille Divine Tome of Lothric": 0x40000848, - "Knight's Ring": 0x20004FEC, - "Sunlight Straight Sword": 0x00203230, - "Grand Archives Key": 0x400007DE, - "Soul of Dragonslayer Armour": 0x400002D1, + "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: Sunlight Straight Sword": 0x00203230, + "LC: Grand Archives Key": 0x400007DE, + "LC: Soul of Dragonslayer Armour": 0x400002D1, } consumed_king_garden_table = { - "Dragonscale Ring": 0x2000515E, - "Shadow Mask": 0x14D3F640, - "Shadow Garb": 0x14D3FA28, - "Shadow Gauntlets": 0x14D3FE10, - "Shadow Leggings": 0x14D401F8, - "Claw": 0x00A7D8C0, - "Soul of Consumed Oceiros": 0x400002CE, + "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, } grand_archives_table = { - "Avelyn": 0x00D6FF10, - "Witch's Locks": 0x00B7B740, - "Power Within": 0x40253B40, - "Scholar Ring": 0x20004EB6, - "Soul Stream": 0x4018B820, - "Fleshbite Ring": 0x20004EA2, - "Crystal Chime": 0x00CA2DD0, - "Golden Wing Crest Shield": 0x0143CAA0, - "Sage's Crystal Staff": 0x00C8CE40, - "Onikiri and Ubadachi": 0x00F58390, - "Hunter's Ring": 0x20004FF6, - "Divine Pillars of Light": 0x4038C340, - "Cinders of a Lord - Lothric Prince": 0x4000084E, - "Soul of the Twin Princes": 0x400002DB, + "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: Sage's Crystal Staff": 0x00C8CE40, + "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, } untended_graves_table = { - "Ashen Estus Ring": 0x200050E6, - "Black Knight Glaive": 0x009AE070, - "Hornet Ring": 0x20004F9C, - "Chaos Blade": 0x004C9960, - "Blacksmith Hammer": 0x007E57C0, - "Eyes of a Fire Keeper": 0x4000085A, - "Coiled Sword Fragment": 0x4000015F, - "Soul of Champion Gundyr": 0x400002C8, + "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 = { - "Lightning Clutch Ring": 0x20005014, - "Ancient Dragon Greatshield": 0x013599D0, - "Ring of Steel Protection": 0x20004E48, - "Calamity Ring": 0x20005078, - "Drakeblood Greatsword": 0x00609690, - "Dragonslayer Spear": 0x008CAFA0, - - "Thunder Stoneplate Ring": 0x20004E5C, - "Great Magic Barrier": 0x40365628, - "Dragon Chaser's Ashes": 0x40000867, - "Twinkling Dragon Torso Stone": 0x40000184, - "Dragonslayer Helm": 0x158B1140, - "Dragonslayer Armor": 0x158B1528, - "Dragonslayer Gauntlets": 0x158B1910, - "Dragonslayer Leggings": 0x158B1CF8, - "Ricard's Rapier": 0x002E3BF0, - "Soul of the Nameless King": 0x400002D2, + "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, } -key_items_list = { - "Small Lothric Banner", - "Basin of Vows", - "Small Doll", - "Path of the Dragon Gesture", - "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" +main_path_location_list = { + "FS: Broken Straight Sword", + "HWL: Soul of Boreal Valley Vordt", + "HWL: Basin of Vows", + "HWL: Small Lothric Banner", + "HWL: Soul of the Dancer", + "US: Soul of the Rotted Greatwood", + "CD: Small Doll", + "CD: Soul of the Deacons of the Deep", + "RS: Soul of a Crystal Sage", + "CC: Soul of High Lord Wolnir", + "IBV: Soul of Pontiff Sulyvahn", + "PC: Cinders of a Lord - Yhorm the Giant", + "PC: Soul of Yhorm the Giant", + "AL: Cinders of a Lord - Aldrich", + "AL: Soul of Aldrich", + "LC: Grand Archives Key", + "LC: Soul of Dragonslayer Armour", + "CKG: Soul of Consumed Oceiros", + "GA: Cinders of a Lord - Lothric Prince", + "GA: Soul of the Twin Princes", + "UG: Soul of Champion Gundyr", + "AP: Soul of the Nameless King", } heals_table = {