diff --git a/worlds/dark_souls_3/Items.py b/worlds/dark_souls_3/Items.py index 02822eca72..e1d11bb636 100644 --- a/worlds/dark_souls_3/Items.py +++ b/worlds/dark_souls_3/Items.py @@ -1,11 +1,6 @@ import typing from BaseClasses import Item -from worlds.dark_souls_3.data.locations_data import dictionary_table - - -class ItemData(typing.NamedTuple): - code: int - progression: bool +from worlds.dark_souls_3.data.items_data import item_dictionary_table class DarkSouls3Item(Item): @@ -13,4 +8,4 @@ class DarkSouls3Item(Item): @staticmethod def get_item_name_to_id() -> typing.Dict[str, int]: - return dictionary_table + return item_dictionary_table diff --git a/worlds/dark_souls_3/Rules.py b/worlds/dark_souls_3/Rules.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/worlds/dark_souls_3/__init__.py b/worlds/dark_souls_3/__init__.py index dfe25d4f7d..b40abfa0b6 100644 --- a/worlds/dark_souls_3/__init__.py +++ b/worlds/dark_souls_3/__init__.py @@ -2,12 +2,20 @@ import json import os +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.locations_data import dictionary_table +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, \ + 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 from ..AutoWorld import World -from BaseClasses import MultiWorld, Location, Region, Item, RegionType +from BaseClasses import MultiWorld, Location, Region, Item, RegionType, Entrance +from ..generic.Rules import set_rule class DarkSouls3World(World): @@ -20,35 +28,196 @@ class DarkSouls3World(World): def create_item(self, name: str) -> Item: data = self.item_name_to_id[name] - return DarkSouls3Item(name, False, data, self.player) + return DarkSouls3Item(name, name in key_items_list, data, self.player) def create_regions(self): menu_region = Region("Menu", RegionType.Generic, "Menu", self.player) - """ - cemetery_of_ash_region = Region("Cemetery Of Ash", RegionType.Generic, "Cemetery Of Ash", self.player) - firelink_shrine_region = Region("Firelink Shrine", RegionType.Generic, "Firelink Shrine", self.player) - high_wall_of_lothric_region = Region("High Wall of Lothric", RegionType.Generic, "High Wall of Lothric", self.player) - undead_settlement_region = Region("Undead Settlement", RegionType.Generic, "Undead Settlement", self.player) - road_of_sacrifices_region = Region("Road of Sacrifices", RegionType.Generic, "Road of Sacrifices", self.player) - cathedral_of_the_deep_region = Region("Cathedral of the Deep", RegionType.Generic, "Cathedral of the Deep", self.player) - farron_keep_region = Region("Farron Keep", RegionType.Generic, "Farron Keep", self.player) - catacombs_of_carthus_region = Region("Catacombs of Carthus", RegionType.Generic, "Catacombs of Carthus", self.player) - smouldering_lake_region = Region("Smouldering Lake", RegionType.Generic, "Smouldering Lake", self.player) - irithyll_of_the_boreal_valley_region = Region("Irithyll of the Boreal Valley", RegionType.Generic, "Irithyll of the Boreal Valley", self.player) - irithyll_dungeon_region = Region("Irithyll Dungeon", RegionType.Generic, "Irithyll Dungeon", self.player) - profaned_capital_region = Region("Profaned Capital", RegionType.Generic, "Profaned Capital", self.player) - anor_londo_region = Region("Anor Londo", RegionType.Generic, "Anor Londo", self.player) - lothric_castle_region = Region("Lothric Castle", RegionType.Generic, "Lothric Castle", self.player) - consumed_king_garden_region = Region("Consumed King's Garden", RegionType.Generic, "Consumed King's Garden", self.player) - grand_archives_region = Region("Grand Archives", RegionType.Generic, "Grand Archives", self.player) - untended_graves_region = Region("Untended Graves", RegionType.Generic, "Untended Graves", self.player) - archdragon_peak_region = Region("Archdragon Peak", RegionType.Generic, "Archdragon Peak", 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(): - location = Location(self.player, name, address, menu_region) - menu_region.locations.append(location) - self.world.regions += [menu_region] + 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) + + 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)) + 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.world.get_entrance("Goto High Wall of Lothric", self.player).connect(high_wall_of_lothric_region) + self.world.get_entrance("Goto Kiln Of The First Flame", self.player).connect(kiln_of_the_first_flame_region) + self.world.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.world.get_entrance("Goto Undead Settlement", self.player).connect(undead_settlement_region) + self.world.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.world.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.world.get_entrance("Goto Cathedral", self.player).connect(cathedral_of_the_deep_region) + self.world.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.world.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.world.get_entrance("Goto Irithyll of the boreal", self.player).connect(irithyll_of_the_boreal_valley_region) + self.world.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.world.get_entrance("Goto Irithyll dungeon", self.player).connect(irithyll_dungeon_region) + self.world.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.world.get_entrance("Goto Archdragon peak", self.player).connect(archdragon_peak_region) + self.world.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.world.get_entrance("Goto Consumed King Garden", self.player).connect(consumed_king_garden_region) + self.world.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.world.get_entrance("Goto Untended Graves", self.player).connect(untended_graves_region) def create_items(self): for name, address in self.item_name_to_id.items(): @@ -57,20 +226,45 @@ class DarkSouls3World(World): def generate_early(self): pass - def set_rules(self): - pass + def set_rules(self) -> None: + set_rule(self.world.get_entrance("Goto Bell Tower", self.player), + lambda state: state.has("Mortician's Ashes", self.player)) + set_rule(self.world.get_entrance("Goto Undead Settlement", self.player), + 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_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), + lambda state: state.has("Path of the Dragon Gesture", self.player)) + set_rule(self.world.get_entrance("Goto Profaned capital", self.player), + lambda state: state.has("Storm Ruler", self.player)) + set_rule(self.world.get_entrance("Goto Grand Archives", self.player), + lambda state: state.has("Grand Archives Key", self.player)) + set_rule(self.world.get_entrance("Goto 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)) def generate_basic(self): - pass + 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 - Lothric Prince", self.player) def generate_output(self, output_directory: str): - location_list = list() + for region in self.world.get_regions(self.player): + print(region) + + locations_dict = {} for location in self.world.get_filled_locations(self.player): if location.item.player == self.player: - location_list.append(location.item.code) + print(location) else: - location_list.append(0) + locations_dict[dictionary_table[location.name]] = 0 data = { "options": { @@ -81,8 +275,7 @@ class DarkSouls3World(World): "seed": self.world.seed_name, # to verify the server's multiworld "slot": self.world.player_name[self.player], # to connect to server "base_id": self.base_id, # to merge location and items lists - "locations": location_list, - "itemsAddress": list(dictionary_table.values()) + "locations": json.dumps(locations_dict) } # generate the file @@ -109,5 +302,8 @@ class DarkSouls3World(World): # The following two dicts are required for the generation to know which # 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)} + item_name_to_id = {name: id for id, name in enumerate(DarkSouls3Location.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)} + + + diff --git a/worlds/dark_souls_3/data/items_data.py b/worlds/dark_souls_3/data/items_data.py new file mode 100644 index 0000000000..67cfff1c21 --- /dev/null +++ b/worlds/dark_souls_3/data/items_data.py @@ -0,0 +1,473 @@ +# Regular expression to parse the Python list https://regex101.com/r/XdtiLR/2 +# List of location https://darksouls3.wiki.fextralife.com/Locations + +cemetery_of_ash_table = { +} + +fire_link_shrine_table = { + "Fire Keeper Robe": 0x140D9CE8, + "Fire Keeper Gloves": 0x140DA0D0, + "Fire Keeper Skirt": 0x140DA4B8, + "Estus Ring": 0x200050DC, + "Fire Keeper Soul": 0x40000186, + "Covetous Silver Serpent Ring": 0x20004FB0, + "Broken Straight Sword": 0x001EF9B0, # Multiple + "East-West Shield": 0x0142B930, +} + +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 +} + +undead_settlement_table = { + "Small Leather Shield": 0x01315410, + "Whip": 0x00B71B00, + "Reinforced Club": 0x007A8730, + "Blue Wooden Shield": 0x0143F1B0, + + "Cleric Hat": 0x11D905C0, + "Cleric Blue Robe": 0x11D909A8, + "Cleric Gloves": 0x11D90D90, + "Cleric Trousers": 0x11D91178, + + "Mortician's Ashes": 0x4000083B, # Shop + "Caestus": 0x00A7FFD0, + "Plank Shield": 0x01346150, + "Flame Stoneplate Ring": 0x20004E52, + "Caduceus Round Shield": 0x01341330, + "Fire Clutch Ring": 0x2000501E, + "Partizan": 0x0089C970, + + + "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, + "Mirrah Chain Mail": 0x14B575A8, + "Mirrah Chain Gloves": 0x14B57990, + "Mirrah Chain Leggings": 0x14B57D78, + "Chloranthy Ring": 0x20004E2A, + "Loincloth": 0x148F57D8, + "Wargod Wooden Shield": 0x0144DC10, + + "Loretta's Bone": 0x40000846, +} + +road_of_sacrifice_table = { + "Brigand Twindaggers": 0x00F50E60, + + "Brigand Hood": 0x148009E0, + "Brigand Armor": 0x14800DC8, + "Brigand Gauntlets": 0x148011B0, + "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, + + "Sorcerer Hood": 0x11C9C380, + "Sorcerer Robe": 0x11C9C768, + "Sorcerer Gloves": 0x11C9CB50, + "Sorcerer Trousers": 0x11C9CF38, + + "Sage Ring": 0x20004F38, + + "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, + + "Great Swamp Pyromancy Tome": 0x4000084F, # Shop + + "Great Club": 0x007B4A80, + "Exile Greatsword": 0x005DD770, + + "Farron Coal ": 0x40000837, # Shop + + "Sellsword Twinblades": 0x00F42400, + "Sellsword Helm": 0x11481060, + "Sellsword Armor": 0x11481448, + "Sellsword Gauntlet": 0x11481830, + "Sellsword Trousers": 0x11481C18, + + "Golden Falcon Shield": 0x01354BB0, + + "Herald Helm": 0x114FB180, + "Herald Armor": 0x114FB568, + "Herald Gloves": 0x114FB950, + "Herald Trousers": 0x114FBD38, + + "Grass Crest Shield": 0x01437C80, +} + +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, + + "Lloyd's Sword Ring": 0x200050B4, + "Seek Guidance": 0x40360420, + + "Aldrich's Sapphire": 0x20005096, + "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, + + "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, +} + +farron_keep_table = { + "Ragged Mask": 0x148F4C20, + "Iron Flesh": 0x40251430, + "Golden Scroll": 0x4000085C, + + "Antiquated Dress": 0x15D76068, + "Antiquated Gloves": 0x15D76450, + "Antiquated Skirt": 0x15D76838, + + "Sunlight Talisman": 0x00CA54E0, + "Wolf's Blood Swordgrass": 0x4000016E, + "Greatsword": 0x005C50D0, + + "Sage's Coal": 0x40000838, # Shop #Unique + "Stone Parma": 0x01443FD0, + "Sage's Scroll": 0x40000854, + "Crown of Dusk": 0x15D75C80, + + "Lingering Dragoncrest Ring": 0x20004F2E, + "Pharis's Hat": 0x1487AB00, + "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, +} + +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, +} + +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, +} + +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, + + "Yorshka's Spear": 0x008C3A70, + "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, +} + +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, + + "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, +} + +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, +} + +anor_londo_table = { + "Giant's Coal": 0x40000839, + "Sun Princess Ring": 0x20004FBA, + "Aldrich's Ruby": 0x2000508C, + "Cinders of a Lord - Aldrich": 0x4000084C, +} + +lothric_castle_table = { + "Hood of Prayer": 0x13AA6A60, + "Robe of Prayer": 0x13AA6E48, + "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, +} + +consumed_king_garden_table = { + "Dragonscale Ring": 0x2000515E, + "Shadow Mask": 0x14D3F640, + "Shadow Garb": 0x14D3FA28, + "Shadow Gauntlets": 0x14D3FE10, + "Shadow Leggings": 0x14D401F8, + "Claw": 0x00A7D8C0, +} + +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, +} + +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, +} + +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, +} + +heals_table = { + "Ashen Estus Flask": 0x400000BF, + "Estus Flask Shard #1": 0x4000085D, + "Estus Flask Shard #2": 0x4000085D, + "Estus Flask Shard #3": 0x4000085D, + "Estus Flask Shard #4": 0x4000085D, + "Estus Flask Shard #5": 0x4000085D, + "Estus Flask Shard #6": 0x4000085D, + "Estus Flask Shard #7": 0x4000085D, + "Estus Flask Shard #8": 0x4000085D, + "Estus Flask Shard #9": 0x4000085D, + "Estus Flask Shard #10": 0x4000085D, + "Estus Flask Shard #11": 0x4000085D, + "Estus Flask Shard #12": 0x4000085D, + "Undead Bone Shard #1": 0x4000085F, + "Undead Bone Shard #2": 0x4000085F, + "Undead Bone Shard #3": 0x4000085F, + "Undead Bone Shard #4": 0x4000085F, + "Undead Bone Shard #5": 0x4000085F, + "Undead Bone Shard #6": 0x4000085F, + "Undead Bone Shard #7": 0x4000085F, + "Undead Bone Shard #8": 0x4000085F, + "Undead Bone Shard #9": 0x4000085F, +} + +weapons_table = { + 0x0006AFA54, + 0x007A1200, + 0x005BDBA0, + 0x00D689E0, + 0x002DEDD0, + 0x001ED2A0, + 0x002E14E0, + 0x0098BD90, + 0x00B71B00, + 0x007A8730, + 0x00A7FFD0, + 0x0089C970, + 0x009AB960, + 0x0020A760, + 0x007AFC60, + 0x00F50E60, + 0x006BE130, + 0x006B1DE0, + 0x007B4A80, + 0x005DD770, + 0x00F42400, + 0x00B7DE50, + 0x005C9EF0, + 0x0021DFE0, + 0x00F61FD0, + 0x0021B8D0, + 0x00D662D0, + 0x4000016E, + 0x005C50D0, + 0x00D7E970, + 0x006B9310, + 0x004CC070, + 0x00D6B0F0, + 0x005F5E10, + 0x0060E4B0, + 0x008C3A70, + 0x007E30B0, + 0x003E6890, + 0x00CF8500, + 0x00C83200, + 0x007DE290, + 0x00C91C60, + 0x006132D0, + 0x008A8CC0, + 0x00D83790, + 0x00203230, + 0x00A7D8C0, + 0x00D6FF10, + 0x00C8CE40, + 0x00F58390, + 0x009AE070, + 0x004C9960, + 0x007E57C0, + 0x00609690, + 0x008CAFA0, + 0x002E3BF0 +} + +item_dictionary_table = {**cemetery_of_ash_table, ** fire_link_shrine_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} diff --git a/worlds/dark_souls_3/data/locations_data.py b/worlds/dark_souls_3/data/locations_data.py index 9499bdfb77..19b0bbd9c9 100644 --- a/worlds/dark_souls_3/data/locations_data.py +++ b/worlds/dark_souls_3/data/locations_data.py @@ -1,29 +1,21 @@ - -class LocationData: - - @staticmethod - def create_dictionary_table(): - pass - - # Regular expression to parse the Python list https://regex101.com/r/XdtiLR/2 # List of location https://darksouls3.wiki.fextralife.com/Locations cemetery_of_ash_table = { - "Broken Straight Sword": 0x001EF9B0, # Multiple - "East-West Shield": 0x0142B930, - "Ashen Estus Flask": 0x400000BF, # Flask } fire_link_shrine_table = { + "Covetous Silver Serpent Ring": 0x20004FB0, + "Broken Straight Sword": 0x001EF9B0, # Multiple + "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, - "Covetous Silver Serpent Ring": 0x20004FB0, - "Seed of a Giant Tree #1": 0x400001B8, # Multiple - "Estus Flask Shard #1": 0x4000085D, # Multiple #Flask + "Fire Keeper Soul": 0x40000186 } high_wall_of_lothric = { @@ -39,10 +31,9 @@ high_wall_of_lothric = { "Astora's Straight Sword": 0x002191C0, "Cell Key": 0x400007DA, "Rapier": 0x002E14E0, - "Ring of Sacrifice #1": 0x20004EF2, # Multiple "Lucerne": 0x0098BD90, - "Estus Flask Shard #2": 0x4000085D, # Multiple #Flask - "Refined Gem #1": 0x40000460, # Shop #Multiple + "Small Lothric Banner": 0x40000836, + "Basin of Vows": 0x40000845 } undead_settlement_table = { @@ -56,7 +47,7 @@ undead_settlement_table = { "Cleric Gloves": 0x11D90D90, "Cleric Trousers": 0x11D91178, - "Mortician's Ashes": 0x4000083B, # Shop + "Mortician's Ashes": 0x4000083B, # Key item for Grave Key for Firelink Towerlocations "Caestus": 0x00A7FFD0, "Plank Shield": 0x01346150, "Flame Stoneplate Ring": 0x20004E52, @@ -68,7 +59,6 @@ undead_settlement_table = { "Red Hilted Halberd": 0x009AB960, "Saint's Talisman": 0x00CACA10, "Irithyll Straight Sword": 0x0020A760, - "Fire Gem #1": 0x4000047E, # Shop #Multiple "Large Club": 0x007AFC60, "Northern Helm": 0x116E3600, "Northern Armor": 0x116E39E8, @@ -83,12 +73,9 @@ undead_settlement_table = { "Wargod Wooden Shield": 0x0144DC10, "Loretta's Bone": 0x40000846, - "Estus Flask Shard #3": 0x4000085D, # Multiple #Flask - "Undead Bone Shard #1": 0x4000085F, # Multiple #Flask } road_of_sacrifice_table = { - "Shriving Stone": 0x400004E2, # Shop #Multiple "Brigand Twindaggers": 0x00F50E60, "Brigand Hood": 0x148009E0, @@ -134,7 +121,6 @@ road_of_sacrifice_table = { "Sellsword Trousers": 0x11481C18, "Golden Falcon Shield": 0x01354BB0, - "Ring of Sacrifice #2": 0x20004EF2, # Multiple "Herald Helm": 0x114FB180, "Herald Armor": 0x114FB568, @@ -142,7 +128,6 @@ road_of_sacrifice_table = { "Herald Trousers": 0x114FBD38, "Grass Crest Shield": 0x01437C80, - "Estus Flask Shard #4": 0x4000085D, # Multiple #Flask } cathedral_of_the_deep_table = { @@ -156,7 +141,6 @@ cathedral_of_the_deep_table = { "Saint-tree Bellvine": 0x00C9DFB0, "Poisonbite Ring": 0x20004E8E, - "Deep Gem #1": 0x4000049C, #Shop #Multiple "Lloyd's Sword Ring": 0x200050B4, "Seek Guidance": 0x40360420, @@ -171,7 +155,6 @@ cathedral_of_the_deep_table = { "Drang Armor": 0x154E0C28, "Drang Gauntlets": 0x154E1010, "Drang Shoes": 0x154E13F8, - "Pale Tongue #1": 0x40000175, "Drang Hammers": 0x00F61FD0, "Deep Ring": 0x20004F60, @@ -182,15 +165,11 @@ cathedral_of_the_deep_table = { "Barbed Straight Sword": 0x0021B8D0, "Arbalest": 0x00D662D0, - "Pale Tongue #2": 0x40000175, - "Blessed Gem #1": 0x400004CE, "Helm of Thorns": 0x15B8D800, "Armor of Thorns": 0x15B8DBE8, "Gauntlets of Thorns": 0x15B8DFD0, "Leggings of Thorns": 0x15B8E3B8, - - "Estus Flask Shard #5": 0x4000085D, # Multiple #Flask - "Undead Bone Shard #2": 0x4000085F, # Multiple #Flask + "Small Doll": 0x400007D5, } farron_keep_table = { @@ -213,7 +192,6 @@ farron_keep_table = { "Sage's Coal": 0x40000838, # Shop #Unique "Stone Parma": 0x01443FD0, - "Poison Gem #1": 0x400004B0, # Shop #Multiple "Sage's Scroll": 0x40000854, "Crown of Dusk": 0x15D75C80, @@ -225,37 +203,28 @@ farron_keep_table = { "Great Axe": 0x006B9310, # Multiple "Dragon Crest Shield": 0x01432E60, "Lightning Spear": 0x40362B30, - "Shriving Stone #2": 0x400004E2, # Shop #Multiple "Atonement": 0x4039ADA0, - "Hollow Gem #1": 0x400004D8, # Shop #Multiple "Great Magic Weapon": 0x40140118, - - "Estus Flask Shard #6": 0x4000085D, # Multiple #Flask - "Undead Bone Shard #3": 0x4000085F, # Multiple #Flask + "Cinders of a Lord - Abyss Watcher": 0x4000084B, } catacombs_of_carthus_table = { - "Sharp Gem": 0x40000456, "Carthus Pyromancy Tome": 0x40000850, "Carthus Milkring": 0x20004FE2, "Grave Warden's Ashes": 0x4000083E, - "Deep Gem": 0x4000049C, "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, - "Undead Bone Shard #4": 0x4000085F, } smouldering_lake_table = { "Shield of Want": 0x0144B500, "Speckled Stoneplate Ring": 0x20004E7A, - "Chaos Gem #1": 0x40000488, "Dragonrider Bow": 0x00D6B0F0, "Lightning Stake": 0x40389C30, - "Fire Gem #2": 0x4000047E, "Izalith Pyromancy Tome": 0x40000851, "Black Knight Sword": 0x005F5E10, "Quelana Pyromancy Tome": 0x40000852, @@ -265,28 +234,18 @@ smouldering_lake_table = { "Sacred Flame": 0x40284880, "Fume Ultra Greatsword": 0x0060E4B0, "Black Iron Greatshield": 0x0150EA00, - - "Estus Flask Shard #7": 0x4000085D, - "Undead Bone Shard #5": 0x4000085F, - "Undead Bone Shard #6": 0x4000085F, } irithyll_of_the_boreal_valley_table = { "Dorhys' Gnawing": 0x40363EB8, "Witchtree Branch": 0x00C94370, "Magic Clutch Ring": 0x2000500A, - "Lightning Gem #1": 0x40000492, "Ring of the Sun's First Born": 0x20004F1B, - "Proof of a Concord Kept #1": 0x40000174, "Roster of Knights": 0x4000006C, - "Undead Bone Shard #7": 0x4000085F, "Chameleon": 0x4014ACF8, "Pontiff's Right Eye": 0x2000510E, - "Shriving Stone": 0x400004E2, "Yorshka's Spear": 0x008C3A70, - "Blood Gem #1": 0x400004BA, - "Ring of Sacrifice #3": 0x20004EF2, "Great Heal": 0x40356FB0, "Smough's Great Hammer": 0x007E30B0, @@ -295,7 +254,6 @@ irithyll_of_the_boreal_valley_table = { "Excrement-covered Ashes": 0x40000862, "Dark Stoneplate Ring": 0x20004E70, - "Deep Gem #3": 0x4000049C, "Easterner's Ashes": 0x40000868, "Painting Guardian's Curved Sword": 0x003E6890, "Painting Guardian Hood": 0x156C8CC0, @@ -321,7 +279,6 @@ irithyll_dungeon_table = { "Old Sorcerer Gauntlets": 0x1496F510, "Old Sorcerer Boots": 0x1496F8F8, "Great Magic Shield": 0x40144F38, - "Estus Flask Shard #8": 0x4000085D, "Dragon Torso Stone": 0x4000017A, "Lightning Blade": 0x4036C770, @@ -334,32 +291,29 @@ irithyll_dungeon_table = { "Jailer's Key Ring": 0x400007D8, "Dusk Crown Ring": 0x20004F4C, "Dark Clutch Ring": 0x20005028, + "Path of the Dragon Gesture": 0x40002346, } profaned_capital_table = { "Cursebite Ring": 0x20004E98, - "Poison Gem #2": 0x400004B0, - "Shriving Stone #4": 0x400004E2, "Court Sorcerer Hood": 0x11BA8140, "Court Sorcerer Robe": 0x11BA8528, "Court Sorcerer Gloves": 0x11BA8910, "Court Sorcerer Trousers": 0x11BA8CF8, "Wrath of the Gods": 0x4035E0F8, - "Covetous Gold Serpent Ring": 0x20004FA6, - "Jailer's Key Ring": 0x400007D8, "Logan's Scroll": 0x40000855, "Eleonora": 0x006CCB90, "Court Sorcerer's Staff": 0x00C91C60, - "Undead Bone Shard #8": 0x4000085F, "Greatshield of Glory": 0x01515F30, + "Storm Ruler": 0x006132D0, + "Cinders of a Lord - Yhorm the Giant": 0x4000084D, } anor_londo_table = { "Giant's Coal": 0x40000839, - "Proof of a Concord Kept": 0x40000174, "Sun Princess Ring": 0x20004FBA, - "Estus Flask Shard #9": 0x4000085D, "Aldrich's Ruby": 0x2000508C, + "Cinders of a Lord - Aldrich": 0x4000084C, } lothric_castle_table = { @@ -372,24 +326,19 @@ lothric_castle_table = { "Winged Knight Armor": 0x12EBB228, "Winged Knight Gauntlets": 0x12EBB610, "Winged Knight Leggings": 0x12EBB9F8, - "Estus Flask Shard #10": 0x4000085D, "Greatlance": 0x008A8CC0, "Sniper Crossbow": 0x00D83790, - "Raw Gem #1": 0x400004C4, "Spirit Tree Crest Shield": 0x014466E0, - "Refined Gem #2": 0x40000460, "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, } consumed_king_garden_table = { - "Estus Flask Shard #11": 0x4000085D, - "Ring of Sacrifice #4": 0x20004EF2, - "Dark Gem": 0x400004A6, "Dragonscale Ring": 0x2000515E, "Shadow Mask": 0x14D3F640, "Shadow Garb": 0x14D3FA28, @@ -406,16 +355,12 @@ grand_archives_table = { "Soul Stream": 0x4018B820, "Fleshbite Ring": 0x20004EA2, "Crystal Chime": 0x00CA2DD0, - "Shriving Stone #5": 0x400004E2, - "Hollow Gem #2": 0x400004D8, - "Undead Bone Shard #9": 0x4000085F, "Golden Wing Crest Shield": 0x0143CAA0, "Sage's Crystal Staff": 0x00C8CE40, "Onikiri and Ubadachi": 0x00F58390, "Hunter's Ring": 0x20004FF6, "Divine Pillars of Light": 0x4038C340, - "Blessed Gem #2": 0x400004CE, - "Estus Flask Shard #12": 0x4000085D, + "Cinders of a Lord - Lothric Prince": 0x4000084E, } untended_graves_table = { @@ -423,14 +368,12 @@ untended_graves_table = { "Black Knight Glaive": 0x009AE070, "Hornet Ring": 0x20004F9C, "Chaos Blade": 0x004C9960, - "Seed of a Giant Tree #2": 0x400001B8, "Blacksmith Hammer": 0x007E57C0, "Eyes of a Fire Keeper": 0x4000085A, "Coiled Sword Fragment": 0x4000015F, } archdragon_peak_table = { - "Lightning Gem #2": 0x40000492, "Lightning Clutch Ring": 0x20005014, "Ancient Dragon Greatshield": 0x013599D0, "Ring of Steel Protection": 0x20004E48, @@ -449,16 +392,46 @@ archdragon_peak_table = { "Ricard's Rapier": 0x002E3BF0, } - -key_items_table = { - "Grand Archives Key": 0x400007DE, - "Storm Ruler": 0x006132D0, - "Small Doll": 0x400007D5, - "Path of the Dragon Gesture": 0x40002346, - # "Coiled Sword": 0x40000859, #Useless item, it can be used if looted or not +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" } -dictionary_table = {**cemetery_of_ash_table, ** fire_link_shrine_table, **high_wall_of_lothric, **undead_settlement_table, **road_of_sacrifice_table, +heals_table = { + "Ashen Estus Flask": 0x400000BF, + "Estus Flask Shard #1": 0x4000085D, + "Estus Flask Shard #2": 0x4000085D, + "Estus Flask Shard #3": 0x4000085D, + "Estus Flask Shard #4": 0x4000085D, + "Estus Flask Shard #5": 0x4000085D, + "Estus Flask Shard #6": 0x4000085D, + "Estus Flask Shard #7": 0x4000085D, + "Estus Flask Shard #8": 0x4000085D, + "Estus Flask Shard #9": 0x4000085D, + "Estus Flask Shard #10": 0x4000085D, + "Estus Flask Shard #11": 0x4000085D, + "Estus Flask Shard #12": 0x4000085D, + "Undead Bone Shard #1": 0x4000085F, + "Undead Bone Shard #2": 0x4000085F, + "Undead Bone Shard #3": 0x4000085F, + "Undead Bone Shard #4": 0x4000085F, + "Undead Bone Shard #5": 0x4000085F, + "Undead Bone Shard #6": 0x4000085F, + "Undead Bone Shard #7": 0x4000085F, + "Undead Bone Shard #8": 0x4000085F, + "Undead Bone Shard #9": 0x4000085F, +} + +dictionary_table = {**cemetery_of_ash_table, **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}