DS3: Added DLC Items/Locations + corresponding option and added an option to enable materials/consumables/estus randomization (#1301)

- Added more progressive locations and associated items.
- Added an option to enable materials/consumables/estus randomization, some players complain about the number of locations and the randomness of those items.
- Added an option to add DLC Items and Locations to the pool, the player must own both the ASHES OF ARIANDEL and the RINGED CITY DLC.

Co-authored-by: Br00ty <83629348+Br00ty@users.noreply.github.com>
Co-authored-by: Friðberg Reynir Traustason <fridberg.traustason@gmail.com>
This commit is contained in:
Marech 2023-02-26 06:35:03 +01:00 committed by GitHub
parent 6c460bcbf7
commit 062d6eeace
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 542 additions and 52 deletions

View File

@ -1,10 +1,18 @@
import sys
from BaseClasses import Item from BaseClasses import Item
from worlds.dark_souls_3.data.items_data import item_tables from worlds.dark_souls_3.data.items_data import item_tables, dlc_shields_table, dlc_weapons_upgrade_10_table, \
dlc_weapons_upgrade_5_table, dlc_goods_table, dlc_spells_table, dlc_armor_table, dlc_ring_table, dlc_misc_table, dlc_goods_2_table
class DarkSouls3Item(Item): class DarkSouls3Item(Item):
game: str = "Dark Souls III" game: str = "Dark Souls III"
dlc_set = {**dlc_shields_table, **dlc_weapons_upgrade_10_table, **dlc_weapons_upgrade_5_table,
**dlc_goods_table, **dlc_spells_table, **dlc_armor_table, **dlc_ring_table, **dlc_misc_table}
dlc_progressive = {**dlc_goods_2_table}
@staticmethod @staticmethod
def get_name_to_id() -> dict: def get_name_to_id() -> dict:
base_id = 100000 base_id = 100000
@ -12,6 +20,17 @@ class DarkSouls3Item(Item):
output = {} output = {}
for i, table in enumerate(item_tables): for i, table in enumerate(item_tables):
if len(table) > table_offset:
raise Exception("An item table has {} entries, that is more than {} entries (table #{})".format(len(table), table_offset, i))
output.update({name: id for id, name in enumerate(table, base_id + (table_offset * i))}) output.update({name: id for id, name in enumerate(table, base_id + (table_offset * i))})
return output return output
@staticmethod
def is_dlc_item(name) -> bool:
return name in DarkSouls3Item.dlc_set
@staticmethod
def is_dlc_progressive(name) -> bool:
return name in DarkSouls3Item.dlc_progressive

View File

@ -1,5 +1,8 @@
import sys
from BaseClasses import Location from BaseClasses import Location
from worlds.dark_souls_3.data.locations_data import location_tables from worlds.dark_souls_3.data.locations_data import location_tables, painted_world_table, dreg_heap_table, \
ringed_city_table
class DarkSouls3Location(Location): class DarkSouls3Location(Location):
@ -12,6 +15,8 @@ class DarkSouls3Location(Location):
output = {} output = {}
for i, table in enumerate(location_tables): for i, table in enumerate(location_tables):
if len(table) > table_offset:
raise Exception("A location table has {} entries, that is more than {} entries (table #{})".format(len(table), table_offset, i))
output.update({name: id for id, name in enumerate(table, base_id + (table_offset * i))}) output.update({name: id for id, name in enumerate(table, base_id + (table_offset * i))})
return output return output

View File

@ -1,5 +1,5 @@
import typing import typing
from Options import Toggle, Option, DeathLink from Options import Toggle, Option, Range, Choice, DeathLink
class AutoEquipOption(Toggle): class AutoEquipOption(Toggle):
@ -29,10 +29,57 @@ class NoEquipLoadOption(Toggle):
display_name = "No Equip load" display_name = "No Equip load"
class RandomizeWeaponsLevelOption(Toggle): class RandomizeWeaponsLevelOption(Choice):
"""Enable this option to upgrade 33% ( based on the probability chance ) of the pool of weapons to a random value """Enable this option to upgrade a percentage of the pool of weapons to a random value between the minimum and
between +1 and +5/+10""" maximum levels defined.
all: All weapons are eligible, both basic and epic
basic: Only weapons that can be upgraded to +10
epic: Only weapons that can be upgraded to +5"""
display_name = "Randomize weapons level" display_name = "Randomize weapons level"
option_none = 0
option_all = 1
option_basic = 2
option_epic = 3
class RandomizeWeaponsLevelPercentageOption(Range):
"""The percentage of weapons in the pool to be upgraded if randomize weapons level is toggled"""
display_name = "Percentage of randomized weapons"
range_start = 1
range_end = 100
default = 33
class MinLevelsIn5WeaponPoolOption(Range):
"""The minimum upgraded value of a weapon in the pool of weapons that can only reach +5"""
display_name = "Minimum level of +5 weapons"
range_start = 1
range_end = 5
default = 1
class MaxLevelsIn5WeaponPoolOption(Range):
"""The maximum upgraded value of a weapon in the pool of weapons that can only reach +5"""
display_name = "Maximum level of +5 weapons"
range_start = 1
range_end = 5
default = 5
class MinLevelsIn10WeaponPoolOption(Range):
"""The minimum upgraded value of a weapon in the pool of weapons that can reach +10"""
display_name = "Minimum level of +10 weapons"
range_start = 1
range_end = 10
default = 1
class MaxLevelsIn10WeaponPoolOption(Range):
"""The maximum upgraded value of a weapon in the pool of weapons that can reach +10"""
display_name = "Maximum level of +10 weapons"
range_start = 1
range_end = 10
default = 10
class LateBasinOfVowsOption(Toggle): class LateBasinOfVowsOption(Toggle):
@ -41,14 +88,31 @@ class LateBasinOfVowsOption(Toggle):
display_name = "Late Basin of Vows" display_name = "Late Basin of Vows"
class EnableProgressiveLocationsOption(Toggle):
"""Randomize upgrade materials such as the titanite shards, the estus shards and the consumables"""
display_name = "Randomize materials, Estus shards and consumables (+196 checks/items)"
class EnableDLCOption(Toggle):
"""To use this option, you must own both the ASHES OF ARIANDEL and the RINGED CITY DLC"""
display_name = "Add the DLC Items and Locations to the pool (+81 checks/items)"
dark_souls_options: typing.Dict[str, type(Option)] = { dark_souls_options: typing.Dict[str, type(Option)] = {
"auto_equip": AutoEquipOption, "auto_equip": AutoEquipOption,
"lock_equip": LockEquipOption, "lock_equip": LockEquipOption,
"no_weapon_requirements": NoWeaponRequirementsOption, "no_weapon_requirements": NoWeaponRequirementsOption,
"randomize_weapons_level": RandomizeWeaponsLevelOption, "randomize_weapons_level": RandomizeWeaponsLevelOption,
"randomize_weapons_percentage": RandomizeWeaponsLevelPercentageOption,
"min_levels_in_5": MinLevelsIn5WeaponPoolOption,
"max_levels_in_5": MaxLevelsIn5WeaponPoolOption,
"min_levels_in_10": MinLevelsIn10WeaponPoolOption,
"max_levels_in_10": MaxLevelsIn10WeaponPoolOption,
"late_basin_of_vows": LateBasinOfVowsOption, "late_basin_of_vows": LateBasinOfVowsOption,
"no_spell_requirements": NoSpellRequirementsOption, "no_spell_requirements": NoSpellRequirementsOption,
"no_equip_load": NoEquipLoadOption, "no_equip_load": NoEquipLoadOption,
"death_link": DeathLink, "death_link": DeathLink,
"enable_progressive_locations": EnableProgressiveLocationsOption,
"enable_dlc": EnableDLCOption,
} }

View File

@ -1,18 +1,18 @@
# world/dark_souls_3/__init__.py # world/dark_souls_3/__init__.py
import json
import os
from typing import Dict from typing import Dict
from .Items import DarkSouls3Item from .Items import DarkSouls3Item
from .Locations import DarkSouls3Location from .Locations import DarkSouls3Location
from .Options import dark_souls_options from .Options import dark_souls_options
from .data.items_data import weapons_upgrade_5_table, weapons_upgrade_10_table, item_dictionary, key_items_list from .data.items_data import weapons_upgrade_5_table, weapons_upgrade_10_table, item_dictionary, key_items_list, \
dlc_weapons_upgrade_5_table, dlc_weapons_upgrade_10_table
from .data.locations_data import location_dictionary, fire_link_shrine_table, \ from .data.locations_data import location_dictionary, fire_link_shrine_table, \
high_wall_of_lothric, \ high_wall_of_lothric, \
undead_settlement_table, road_of_sacrifice_table, consumed_king_garden_table, cathedral_of_the_deep_table, \ 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, \ 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, \ irithyll_dungeon_table, profaned_capital_table, anor_londo_table, lothric_castle_table, grand_archives_table, \
untended_graves_table, archdragon_peak_table, firelink_shrine_bell_tower_table, progressive_locations untended_graves_table, archdragon_peak_table, firelink_shrine_bell_tower_table, progressive_locations, \
progressive_locations_2, progressive_locations_3, painted_world_table, dreg_heap_table, ringed_city_table, dlc_progressive_locations
from ..AutoWorld import World, WebWorld from ..AutoWorld import World, WebWorld
from BaseClasses import MultiWorld, Region, Item, Entrance, Tutorial, ItemClassification from BaseClasses import MultiWorld, Region, Item, Entrance, Tutorial, ItemClassification
from ..generic.Rules import set_rule, add_item_rule from ..generic.Rules import set_rule, add_item_rule
@ -52,9 +52,9 @@ class DarkSouls3World(World):
option_definitions = dark_souls_options option_definitions = dark_souls_options
topology_present: bool = True topology_present: bool = True
web = DarkSouls3Web() web = DarkSouls3Web()
data_version = 4 data_version = 5
base_id = 100000 base_id = 100000
required_client_version = (0, 3, 6) required_client_version = (0, 3, 7)
item_name_to_id = DarkSouls3Item.get_name_to_id() item_name_to_id = DarkSouls3Item.get_name_to_id()
location_name_to_id = DarkSouls3Location.get_name_to_id() location_name_to_id = DarkSouls3Location.get_name_to_id()
@ -77,7 +77,15 @@ class DarkSouls3World(World):
return DarkSouls3Item(name, item_classification, data, self.player) return DarkSouls3Item(name, item_classification, data, self.player)
def create_regions(self): def create_regions(self):
menu_region = self.create_region("Menu", progressive_locations)
if self.multiworld.enable_progressive_locations[self.player].value and self.multiworld.enable_dlc[self.player].value:
menu_region = self.create_region("Menu", {**progressive_locations, **progressive_locations_2,
**progressive_locations_3, **dlc_progressive_locations})
elif self.multiworld.enable_progressive_locations[self.player].value:
menu_region = self.create_region("Menu", {**progressive_locations, **progressive_locations_2,
**progressive_locations_3})
else:
menu_region = self.create_region("Menu", None)
# Create all Vanilla regions of Dark Souls III # Create all Vanilla regions of Dark Souls III
firelink_shrine_region = self.create_region("Firelink Shrine", fire_link_shrine_table) firelink_shrine_region = self.create_region("Firelink Shrine", fire_link_shrine_table)
@ -101,6 +109,11 @@ class DarkSouls3World(World):
untended_graves_region = self.create_region("Untended Graves", untended_graves_table) untended_graves_region = self.create_region("Untended Graves", untended_graves_table)
archdragon_peak_region = self.create_region("Archdragon Peak", archdragon_peak_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) kiln_of_the_first_flame_region = self.create_region("Kiln Of The First Flame", None)
# DLC Down here
if self.multiworld.enable_dlc[self.player]:
painted_world_of_ariandel_region = self.create_region("Painted World of Ariandel", painted_world_table)
dreg_heap_region = self.create_region("Dreg Heap", dreg_heap_table)
ringed_city_region = self.create_region("Ringed City", ringed_city_table)
# Create the entrance to connect those regions # Create the entrance to connect those regions
menu_region.exits.append(Entrance(self.player, "New Game", menu_region)) menu_region.exits.append(Entrance(self.player, "New Game", menu_region))
@ -112,7 +125,8 @@ class DarkSouls3World(World):
firelink_shrine_region.exits.append(Entrance(self.player, "Goto Bell Tower", firelink_shrine_region.exits.append(Entrance(self.player, "Goto Bell Tower",
firelink_shrine_region)) firelink_shrine_region))
self.multiworld.get_entrance("Goto High Wall of Lothric", self.player).connect(high_wall_of_lothric_region) self.multiworld.get_entrance("Goto High Wall of Lothric", self.player).connect(high_wall_of_lothric_region)
self.multiworld.get_entrance("Goto Kiln Of The First Flame", self.player).connect(kiln_of_the_first_flame_region) self.multiworld.get_entrance("Goto Kiln Of The First Flame", self.player).connect(
kiln_of_the_first_flame_region)
self.multiworld.get_entrance("Goto Bell Tower", self.player).connect(firelink_shrine_bell_tower_region) self.multiworld.get_entrance("Goto Bell Tower", self.player).connect(firelink_shrine_bell_tower_region)
high_wall_of_lothric_region.exits.append(Entrance(self.player, "Goto Undead Settlement", high_wall_of_lothric_region.exits.append(Entrance(self.player, "Goto Undead Settlement",
high_wall_of_lothric_region)) high_wall_of_lothric_region))
@ -153,6 +167,16 @@ class DarkSouls3World(World):
consumed_king_garden_region.exits.append(Entrance(self.player, "Goto Untended Graves", consumed_king_garden_region.exits.append(Entrance(self.player, "Goto Untended Graves",
consumed_king_garden_region)) consumed_king_garden_region))
self.multiworld.get_entrance("Goto Untended Graves", self.player).connect(untended_graves_region) self.multiworld.get_entrance("Goto Untended Graves", self.player).connect(untended_graves_region)
# DLC Connectors Below
if self.multiworld.enable_dlc[self.player]:
cathedral_of_the_deep_region.exits.append(Entrance(self.player, "Goto Painted World of Ariandel",
cathedral_of_the_deep_region))
self.multiworld.get_entrance("Goto Painted World of Ariandel", self.player).connect(painted_world_of_ariandel_region)
painted_world_of_ariandel_region.exits.append(Entrance(self.player, "Goto Dreg Heap",
painted_world_of_ariandel_region))
self.multiworld.get_entrance("Goto Dreg Heap", self.player).connect(dreg_heap_region)
dreg_heap_region.exits.append(Entrance(self.player, "Goto Ringed City", dreg_heap_region))
self.multiworld.get_entrance("Goto Ringed City", self.player).connect(ringed_city_region)
# For each region, add the associated locations retrieved from the corresponding location_table # For each region, add the associated locations retrieved from the corresponding location_table
def create_region(self, region_name, location_table) -> Region: def create_region(self, region_name, location_table) -> Region:
@ -169,7 +193,17 @@ class DarkSouls3World(World):
def create_items(self): def create_items(self):
for name, address in self.item_name_to_id.items(): for name, address in self.item_name_to_id.items():
# Specific items will be included in the item pool under certain conditions. See generate_basic # Specific items will be included in the item pool under certain conditions. See generate_basic
if name != "Basin of Vows": if name == "Basin of Vows":
continue
# Do not add progressive_items ( containing "#" ) to the itempool if the option is disabled
if (not self.multiworld.enable_progressive_locations[self.player]) and "#" in name:
continue
# Do not add DLC items if the option is disabled
if (not self.multiworld.enable_dlc[self.player]) and DarkSouls3Item.is_dlc_item(name):
continue
# Do not add DLC Progressives if both options are disabled
if ((not self.multiworld.enable_progressive_locations[self.player]) or (not self.multiworld.enable_dlc[self.player])) and DarkSouls3Item.is_dlc_progressive(name):
continue
self.multiworld.itempool += [self.create_item(name)] self.multiworld.itempool += [self.create_item(name)]
def generate_early(self): def generate_early(self):
@ -197,12 +231,20 @@ class DarkSouls3World(World):
state.has("Cinders of a Lord - Yhorm the Giant", 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 - Aldrich", self.player) and
state.has("Cinders of a Lord - Lothric Prince", self.player)) state.has("Cinders of a Lord - Lothric Prince", self.player))
# DLC Access Rules Below
if self.multiworld.enable_dlc[self.player]:
set_rule(self.multiworld.get_entrance("Goto Painted World of Ariandel", self.player),
lambda state: state.has("Contraption Key", self.player))
set_rule(self.multiworld.get_entrance("Goto Ringed City", self.player),
lambda state: state.has("Small Envoy Banner", self.player))
# Define the access rules to some specific locations # Define the access rules to some specific locations
set_rule(self.multiworld.get_location("HWL: Soul of the Dancer", self.player), set_rule(self.multiworld.get_location("HWL: Soul of the Dancer", self.player),
lambda state: state.has("Basin of Vows", self.player)) lambda state: state.has("Basin of Vows", self.player))
set_rule(self.multiworld.get_location("HWL: Greirat's Ashes", self.player), set_rule(self.multiworld.get_location("HWL: Greirat's Ashes", self.player),
lambda state: state.has("Cell Key", self.player)) lambda state: state.has("Cell Key", self.player))
set_rule(self.multiworld.get_location("HWL: Blue Tearstone Ring", self.player),
lambda state: state.has("Cell Key", self.player))
set_rule(self.multiworld.get_location("ID: Bellowing Dragoncrest Ring", self.player), set_rule(self.multiworld.get_location("ID: Bellowing Dragoncrest Ring", self.player),
lambda state: state.has("Jailbreaker's Key", self.player)) lambda state: state.has("Jailbreaker's Key", self.player))
set_rule(self.multiworld.get_location("ID: Prisoner Chief's Ashes", self.player), set_rule(self.multiworld.get_location("ID: Prisoner Chief's Ashes", self.player),
@ -242,16 +284,37 @@ class DarkSouls3World(World):
# Depending on the specified option, modify items hexadecimal value to add an upgrade level # Depending on the specified option, modify items hexadecimal value to add an upgrade level
item_dictionary_copy = item_dictionary.copy() item_dictionary_copy = item_dictionary.copy()
if self.multiworld.randomize_weapons_level[self.player]: if self.multiworld.randomize_weapons_level[self.player] > 0:
# if the user made an error and set a min higher than the max we default to the max
max_5 = self.multiworld.max_levels_in_5[self.player]
min_5 = min(self.multiworld.min_levels_in_5[self.player], max_5)
max_10 = self.multiworld.max_levels_in_10[self.player]
min_10 = min(self.multiworld.min_levels_in_10[self.player], max_10)
weapons_percentage = self.multiworld.randomize_weapons_percentage[self.player]
# Randomize some weapons upgrades # Randomize some weapons upgrades
if self.multiworld.randomize_weapons_level[self.player] in [1, 3]: # Options are either all or +5
for name in weapons_upgrade_5_table.keys(): for name in weapons_upgrade_5_table.keys():
if self.multiworld.random.randint(0, 100) < 33: if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage:
value = self.multiworld.random.randint(1, 5) value = self.multiworld.per_slot_randoms[self.player].randint(min_5, max_5)
item_dictionary_copy[name] += value item_dictionary_copy[name] += value
if self.multiworld.randomize_weapons_level[self.player] in [1, 2]: # Options are either all or +10
for name in weapons_upgrade_10_table.keys(): for name in weapons_upgrade_10_table.keys():
if self.multiworld.random.randint(0, 100) < 33: if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage:
value = self.multiworld.random.randint(1, 10) value = self.multiworld.per_slot_randoms[self.player].randint(min_10, max_10)
item_dictionary_copy[name] += value
if self.multiworld.randomize_weapons_level[self.player] in [1, 3]:
for name in dlc_weapons_upgrade_5_table.keys():
if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage:
value = self.multiworld.per_slot_randoms[self.player].randint(min_5, max_5)
item_dictionary_copy[name] += value
if self.multiworld.randomize_weapons_level[self.player] in [1, 2]:
for name in dlc_weapons_upgrade_10_table.keys():
if self.multiworld.per_slot_randoms[self.player].randint(1, 100) < weapons_percentage:
value = self.multiworld.per_slot_randoms[self.player].randint(min_10, max_10)
item_dictionary_copy[name] += value item_dictionary_copy[name] += value
# Create the mandatory lists to generate the player's output file # Create the mandatory lists to generate the player's output file
@ -281,6 +344,7 @@ class DarkSouls3World(World):
"death_link": self.multiworld.death_link[self.player].value, "death_link": self.multiworld.death_link[self.player].value,
"no_spell_requirements": self.multiworld.no_spell_requirements[self.player].value, "no_spell_requirements": self.multiworld.no_spell_requirements[self.player].value,
"no_equip_load": self.multiworld.no_equip_load[self.player].value, "no_equip_load": self.multiworld.no_equip_load[self.player].value,
"enable_dlc": self.multiworld.enable_dlc[self.player].value
}, },
"seed": self.multiworld.seed_name, # to verify the server's multiworld "seed": self.multiworld.seed_name, # to verify the server's multiworld
"slot": self.multiworld.player_name[self.player], # to connect to server "slot": self.multiworld.player_name[self.player], # to connect to server

View File

@ -13,7 +13,6 @@ weapons_upgrade_5_table = {
"Izalith Staff": 0x00C96A80, "Izalith Staff": 0x00C96A80,
"Fume Ultra Greatsword": 0x0060E4B0, "Fume Ultra Greatsword": 0x0060E4B0,
"Black Knight Sword": 0x005F5E10, "Black Knight Sword": 0x005F5E10,
"Yorshka's Spear": 0x008C3A70, "Yorshka's Spear": 0x008C3A70,
"Smough's Great Hammer": 0x007E30B0, "Smough's Great Hammer": 0x007E30B0,
"Dragonslayer Greatbow": 0x00CF8500, "Dragonslayer Greatbow": 0x00CF8500,
@ -25,7 +24,6 @@ weapons_upgrade_5_table = {
"Dragonslayer Spear": 0x008CAFA0, "Dragonslayer Spear": 0x008CAFA0,
"Caitha's Chime": 0x00CA06C0, "Caitha's Chime": 0x00CA06C0,
"Sunlight Straight Sword": 0x00203230, "Sunlight Straight Sword": 0x00203230,
"Firelink Greatsword": 0x0060BDA0, "Firelink Greatsword": 0x0060BDA0,
"Hollowslayer Greatsword": 0x00604870, "Hollowslayer Greatsword": 0x00604870,
"Arstor's Spear": 0x008BEC50, "Arstor's Spear": 0x008BEC50,
@ -37,7 +35,6 @@ weapons_upgrade_5_table = {
"Wolnir's Holy Sword": 0x005FFA50, "Wolnir's Holy Sword": 0x005FFA50,
"Demon's Greataxe": 0x006CA480, "Demon's Greataxe": 0x006CA480,
"Demon's Fist": 0x00A84DF0, "Demon's Fist": 0x00A84DF0,
"Old King's Great Hammer": 0x007CF830, "Old King's Great Hammer": 0x007CF830,
"Greatsword of Judgment": 0x005E2590, "Greatsword of Judgment": 0x005E2590,
"Profaned Greatsword": 0x005E4CA0, "Profaned Greatsword": 0x005E4CA0,
@ -55,6 +52,29 @@ weapons_upgrade_5_table = {
"Irithyll Rapier": 0x002E8A10 "Irithyll Rapier": 0x002E8A10
} }
dlc_weapons_upgrade_5_table = {
"Friede's Great Scythe": 0x009B55A0,
"Rose of Ariandel": 0x00B82C70,
"Demon's Scar": 0x003F04D0, # Assigned to "RC: Church Guardian Shiv"
"Frayed Blade": 0x004D35A0, # Assigned to "RC: Ritual Spear Fragment"
"Gael's Greatsword": 0x00227C20, # Assigned to "RC: Violet Wrappings"
"Repeating Crossbow": 0x00D885B0, # Assigned to "RC: Blood of the Dark Souls"
"Onyx Blade": 0x00222E00, # VILHELM FIGHT
"Earth Seeker": 0x006D8EE0,
"Quakestone Hammer": 0x007ECCF0,
"Millwood Greatbow": 0x00D85EA0,
"Valorheart": 0x00F646E0,
"Aquamarine Dagger": 0x00116520,
"Ringed Knight Straight Sword": 0x00225510,
"Ledo's Great Hammer": 0x007EF400, # INVADER FIGHT
"Ringed Knight Spear": 0x008CFDC0,
"Crucifix of the Mad King": 0x008D4BE0,
"Sacred Chime of Filianore": 0x00CCECF0,
"Preacher's Right Arm": 0x00CD1400,
"White Birch Bow": 0x00D77440,
"Ringed Knight Paired Greatswords": 0x00F69500
}
weapons_upgrade_10_table = { weapons_upgrade_10_table = {
"Broken Straight Sword": 0x001EF9B0, "Broken Straight Sword": 0x001EF9B0,
"Deep Battle Axe": 0x0006AFA54, "Deep Battle Axe": 0x0006AFA54,
@ -73,7 +93,6 @@ weapons_upgrade_10_table = {
"Red Hilted Halberd": 0x009AB960, "Red Hilted Halberd": 0x009AB960,
"Saint's Talisman": 0x00CACA10, "Saint's Talisman": 0x00CACA10,
"Large Club": 0x007AFC60, "Large Club": 0x007AFC60,
"Brigand Twindaggers": 0x00F50E60, "Brigand Twindaggers": 0x00F50E60,
"Butcher Knife": 0x006BE130, "Butcher Knife": 0x006BE130,
"Brigand Axe": 0x006B1DE0, "Brigand Axe": 0x006B1DE0,
@ -104,9 +123,24 @@ weapons_upgrade_10_table = {
"Drakeblood Greatsword": 0x00609690, "Drakeblood Greatsword": 0x00609690,
"Greatlance": 0x008A8CC0, "Greatlance": 0x008A8CC0,
"Sniper Crossbow": 0x00D83790, "Sniper Crossbow": 0x00D83790,
"Claw": 0x00A7D8C0, "Claw": 0x00A7D8C0,
"Drang Twinspears": 0x00F5AAA0, "Drang Twinspears": 0x00F5AAA0,
"Pyromancy Flame": 0x00CC77C0 #given/dropped by Cornyx
}
dlc_weapons_upgrade_10_table = {
"Follower Sabre": 0x003EDDC0,
"Millwood Battle Axe": 0x006D67D0,
"Follower Javelin": 0x008CD6B0,
"Crow Talons": 0x00A89C10,
"Pyromancer's Parting Flame": 0x00CC9ED0,
"Crow Quills": 0x00F66DF0,
"Follower Torch": 0x015F1AD0,
"Murky Hand Scythe": 0x00118C30,
"Herald Curved Greatsword": 0x006159E0,
"Lothric War Banner": 0x008D24D0,
"Splitleaf Greatsword": 0x009B2E90, # SHOP ITEM
"Murky Longstaff": 0x00CCC5E0,
} }
shields_table = { shields_table = {
@ -132,7 +166,15 @@ shields_table = {
"Golden Wing Crest Shield": 0x0143CAA0, "Golden Wing Crest Shield": 0x0143CAA0,
"Ancient Dragon Greatshield": 0x013599D0, "Ancient Dragon Greatshield": 0x013599D0,
"Spirit Tree Crest Shield": 0x014466E0, "Spirit Tree Crest Shield": 0x014466E0,
"Blessed Red and White Shield": 0x01343FB9, "Blessed Red and White Shield": 0x01343FB9
}
dlc_shields_table = {
"Followers Shield": 0x0135C0E0,
"Ethereal Oak Shield": 0x01450320,
"Giant Door Shield": 0x00F5F8C0,
"Dragonhead Shield": 0x0135E7F0,
"Dragonhead Greatshield": 0x01452A30
} }
goods_table = { goods_table = {
@ -167,7 +209,55 @@ goods_table = {
**{"Soul of a Great Champion #"+str(i): 0x400001A4 for i in range(1, 3)}, **{"Soul of a Great Champion #"+str(i): 0x400001A4 for i in range(1, 3)},
**{"Soul of a Champion #"+str(i): 0x400001A3 for i in range(1, 5)}, **{"Soul of a Champion #"+str(i): 0x400001A3 for i in range(1, 5)},
**{"Soul of a Venerable Old Hand #"+str(i): 0x400001A2 for i in range(1, 5)}, **{"Soul of a Venerable Old Hand #"+str(i): 0x400001A2 for i in range(1, 5)},
**{"Soul of a Crestfallen Knight #"+str(i): 0x40000199 for i in range(1, 11)}, **{"Soul of a Crestfallen Knight #"+str(i): 0x40000199 for i in range(1, 11)}
}
goods_2_table = { # Added by Br00ty
"HWL: Gold Pine Resin #": 0x4000014B,
"US: Charcoal Pine Resin #": 0x4000014A,
"FK: Gold Pine Bundle #": 0x40000155,
"CC: Carthus Rouge #": 0x4000014F,
"ID: Pale Pine Resin #": 0x40000150,
**{"Ember #"+str(i): 0x400001F4 for i in range(1, 45)},
**{"Titanite Shard #"+str(i): 0x400003E8 for i in range(11, 16)},
**{"Large Titanite Shard #"+str(i): 0x400003E9 for i in range(11, 16)},
**{"Titanite Scale #" + str(i): 0x400003FC for i in range(1, 25)}
}
goods_3_table = { # Added by Br00ty
**{"Fading Soul #" + str(i): 0x40000190 for i in range(1, 4)},
**{"Ring of Sacrifice #"+str(i): 0x20004EF2 for i in range(1, 5)},
**{"Homeward Bone #"+str(i): 0x4000015E for i in range(1, 17)},
**{"Green Blossom #"+str(i): 0x40000104 for i in range(1, 7)},
**{"Human Pine Resin #"+str(i): 0x4000014E for i in range(1, 3)},
**{"Charcoal Pine Bundle #"+str(i): 0x40000154 for i in range(1, 3)},
**{"Rotten Pine Resin #"+str(i): 0x40000157 for i in range(1, 3)},
**{"Alluring Skull #"+str(i): 0x40000126 for i in range(1, 9)},
**{"Rusted Coin #"+str(i): 0x400001C7 for i in range(1, 3)},
**{"Rusted Gold Coin #"+str(i): 0x400001C9 for i in range(1, 3)},
**{"Titanite Chunk #"+str(i): 0x400003EA for i in range(1, 17)},
**{"Twinkling Titanite #"+str(i): 0x40000406 for i in range(1, 8)}
}
dlc_goods_table = {
"Soul of Sister Friede": 0x400002E8,
"Soul of the Demon Prince": 0x400002EA,
"Soul of Darkeater Midir": 0x400002EB,
"Soul of Slave Knight Gael": 0x400002E9
}
dlc_goods_2_table = { #71
**{"Large Soul of an Unknown Traveler $"+str(i): 0x40000194 for i in range(1, 10)},
**{"Soul of a Weary Warrior $"+str(i): 0x40000197 for i in range(1, 6)},
**{"Large Soul of a Weary Warrior $"+str(i): 0x40000198 for i in range(1, 7)},
**{"Soul of a Crestfallen Knight $"+str(i): 0x40000199 for i in range(1, 7)},
**{"Large Soul of a Crestfallen Knight $"+str(i): 0x4000019A for i in range(1, 4)},
**{"Homeward Bone $"+str(i): 0x4000015E for i in range(1, 7)},
**{"Large Titanite Shard $"+str(i): 0x400003E9 for i in range(1, 4)},
**{"Titanite Chunk $"+str(i): 0x400003EA for i in range(1, 16)},
**{"Twinkling Titanite $"+str(i): 0x40000406 for i in range(1, 6)},
**{"Rusted Coin $"+str(i): 0x400001C7 for i in range(1, 4)},
**{"Ember $"+str(i): 0x400001F4 for i in range(1, 11)}
} }
armor_table = { armor_table = {
@ -265,6 +355,69 @@ armor_table = {
"Outrider Knight Armor": 0x1328BB28, "Outrider Knight Armor": 0x1328BB28,
"Outrider Knight Gauntlets": 0x1328BF10, "Outrider Knight Gauntlets": 0x1328BF10,
"Outrider Knight Leggings": 0x1328C2F8, "Outrider Knight Leggings": 0x1328C2F8,
"Cornyx's Wrap": 0x11946370,
"Cornyx's Garb": 0x11945F88,
"Cornyx's Skirt": 0x11946758
}
dlc_armor_table = {
"Slave Knight Hood": 0x134EDCE0,
"Slave Knight Armor": 0x134EE0C8,
"Slave Knight Gauntlets": 0x134EE4B0,
"Slave Knight Leggings": 0x134EE898,
"Vilhelm's Helm": 0x11312D00,
"Vilhelm's Armor": 0x113130E8,
"Vilhelm's Gauntlets": 0x113134D0,
"Vilhelm's Leggings": 0x113138B8,
#"Millwood Knight Helm": 0x139B2820, # SHOP ITEM
#"Millwood Knight Armor": 0x139B2C08, # SHOP ITEM
#"Millwood Knight Gauntlets": 0x139B2FF0, # SHOP ITEM
#"Millwood Knight Leggings": 0x139B33D8, # SHOP ITEM
"Shira's Crown": 0x11C22260,
"Shira's Armor": 0x11C22648,
"Shira's Gloves": 0x11C22A30,
"Shira's Trousers": 0x11C22E18,
#"Lapp's Helm": 0x11E84800, # SHOP ITEM
#"Lapp's Armor": 0x11E84BE8, # SHOP ITEM
#"Lapp's Gauntlets": 0x11E84FD0, # SHOP ITEM
#"Lapp's Leggings": 0x11E853B8, # SHOP ITEM
#"Ringed Knight Hood": 0x13C8EEE0, # RANDOM ENEMY DROP
#"Ringed Knight Armor": 0x13C8F2C8, # RANDOM ENEMY DROP
#"Ringed Knight Gauntlets": 0x13C8F6B0, # RANDOM ENEMY DROP
#"Ringed Knight Leggings": 0x13C8FA98, # RANDOM ENEMY DROP
#"Harald Legion Armor": 0x13D83508, # RANDOM ENEMY DROP
#"Harald Legion Gauntlets": 0x13D838F0, # RANDOM ENEMY DROP
#"Harald Legion Leggings": 0x13D83CD8, # RANDOM ENEMY DROP
"Iron Dragonslayer Helm": 0x1405F7E0,
"Iron Dragonslayer Armor": 0x1405FBC8,
"Iron Dragonslayer Gauntlets": 0x1405FFB0,
"Iron Dragonslayer Leggings": 0x14060398,
"Ruin Sentinel Helm": 0x14CC5520,
"Ruin Sentinel Armor": 0x14CC5908,
"Ruin Sentinel Gauntlets": 0x14CC5CF0,
"Ruin Sentinel Leggings": 0x14CC60D8,
"Desert Pyromancer Hood": 0x14DB9760,
"Desert Pyromancer Garb": 0x14DB9B48,
"Desert Pyromancer Gloves": 0x14DB9F30,
"Desert Pyromancer Skirt": 0x14DBA318,
#"Follower Helm": 0x137CA3A0, # RANDOM ENEMY DROP
#"Follower Armor": 0x137CA788, # RANDOM ENEMY DROP
#"Follower Gloves": 0x137CAB70, # RANDOM ENEMY DROP
#"Follower Boots": 0x137CAF58, # RANDOM ENEMY DROP
#"Ordained Hood": 0x135E1F20, # SHOP ITEM
#"Ordained Dress": 0x135E2308, # SHOP ITEM
#"Ordained Trousers": 0x135E2AD8, # SHOP ITEM
"Black Witch Veil": 0x14FA1BE0,
"Black Witch Hat": 0x14EAD9A0,
"Black Witch Garb": 0x14EADD88,
"Black Witch Wrappings": 0x14EAE170,
"Black Witch Trousers": 0x14EAE558,
"White Preacher Head": 0x14153A20,
"Antiquated Plain Garb": 0x11B2E408
} }
rings_table = { rings_table = {
@ -314,6 +467,12 @@ rings_table = {
"Dragonscale Ring": 0x2000515E, "Dragonscale Ring": 0x2000515E,
"Knight Slayer's Ring": 0x20005000, "Knight Slayer's Ring": 0x20005000,
"Magic Stoneplate Ring": 0x20004E66, "Magic Stoneplate Ring": 0x20004E66,
"Blue Tearstone Ring": 0x20004ED4 #given/dropped by Greirat
}
dlc_ring_table = {
"Havel's Ring": 0x20004E34,
"Chillbite Ring": 0x20005208
} }
spells_table = { spells_table = {
@ -335,7 +494,21 @@ spells_table = {
"Divine Pillars of Light": 0x4038C340, "Divine Pillars of Light": 0x4038C340,
"Great Magic Barrier": 0x40365628, "Great Magic Barrier": 0x40365628,
"Great Magic Shield": 0x40144F38, "Great Magic Shield": 0x40144F38,
"Crystal Scroll": 0x40000856, "Crystal Scroll": 0x40000856
}
dlc_spells_table = {
#"Boulder Heave": 0x40282170, # KILN STRAY DEMON
#"Seething Chaos": 0x402896A0, # KILN DEMON PRINCES
#"Old Moonlight": 0x4014FF00, # KILN MIDIR
"Frozen Weapon": 0x401408E8,
"Snap Freeze": 0x401A90C8,
"Great Soul Dregs": 0x401879A0,
"Flame Fan": 0x40258190,
"Lightning Arrow": 0x40358B08,
"Way of White Corona": 0x403642A0,
"Projected Heal": 0x40364688,
"Floating Chaos": 0x40257DA8
} }
misc_items_table = { misc_items_table = {
@ -388,6 +561,12 @@ misc_items_table = {
"Orbeck's Ashes": 0x40000840 "Orbeck's Ashes": 0x40000840
} }
dlc_misc_table = {
"Captains Ashes": 0x4000086A,
"Contraption Key": 0x4000086B, # Needed for Painted World
"Small Envoy Banner": 0x4000086C # Needed to get to Ringed City from Dreg Heap
}
key_items_list = { key_items_list = {
"Small Lothric Banner", "Small Lothric Banner",
"Basin of Vows", "Basin of Vows",
@ -405,8 +584,17 @@ key_items_list = {
"Prisoner Chief's Ashes", "Prisoner Chief's Ashes",
"Old Cell Key", "Old Cell Key",
"Jailer's Key Ring", "Jailer's Key Ring",
"Contraption Key",
"Small Envoy Banner"
} }
item_tables = [weapons_upgrade_5_table, weapons_upgrade_10_table, shields_table, armor_table, rings_table, spells_table, misc_items_table, goods_table] item_tables = [weapons_upgrade_5_table, weapons_upgrade_10_table, shields_table,
armor_table, rings_table, spells_table, misc_items_table, goods_table, goods_2_table, goods_3_table,
dlc_weapons_upgrade_5_table, dlc_weapons_upgrade_10_table, dlc_shields_table, dlc_goods_table,
dlc_armor_table, dlc_spells_table, dlc_ring_table, dlc_misc_table, dlc_goods_2_table]
item_dictionary = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table,
**armor_table, **rings_table, **spells_table, **misc_items_table, **goods_table, **goods_2_table,
**goods_3_table, **dlc_weapons_upgrade_5_table, **dlc_weapons_upgrade_10_table, **dlc_shields_table,
**dlc_goods_table, **dlc_armor_table, **dlc_spells_table, **dlc_ring_table, **dlc_misc_table, **dlc_goods_2_table}
item_dictionary = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table, **armor_table, **rings_table, **spells_table, **misc_items_table, **goods_table}

View File

@ -42,6 +42,7 @@ high_wall_of_lothric = {
"HWL: Soul of the Dancer": 0x400002CA, "HWL: Soul of the Dancer": 0x400002CA,
"HWL: Way of Blue Covenant": 0x2000274C, "HWL: Way of Blue Covenant": 0x2000274C,
"HWL: Greirat's Ashes": 0x4000083F, "HWL: Greirat's Ashes": 0x4000083F,
"HWL: Blue Tearstone Ring": 0x20004ED4 #given/dropped by Greirat
} }
undead_settlement_table = { undead_settlement_table = {
@ -91,7 +92,11 @@ undead_settlement_table = {
"US: Warrior of Sunlight Covenant": 0x20002738, "US: Warrior of Sunlight Covenant": 0x20002738,
"US: Blessed Red and White Shield": 0x01343FB9, "US: Blessed Red and White Shield": 0x01343FB9,
"US: Irina's Ashes": 0x40000843, "US: Irina's Ashes": 0x40000843,
"US: Cornyx's Ashes": 0x40000841 "US: Cornyx's Ashes": 0x40000841,
"US: Cornyx's Wrap": 0x11946370,
"US: Cornyx's Garb": 0x11945F88,
"US: Cornyx's Skirt": 0x11946758,
"US: Pyromancy Flame": 0x00CC77C0 #given/dropped by Cornyx
} }
road_of_sacrifice_table = { road_of_sacrifice_table = {
@ -437,6 +442,101 @@ archdragon_peak_table = {
"AP: Havel's Greatshield": 0x013376F0, "AP: Havel's Greatshield": 0x013376F0,
} }
painted_world_table = { # DLC
"PW: Follower Javelin": 0x008CD6B0,
"PW: Frozen Weapon": 0x401408E8,
"PW: Millwood Greatbow": 0x00D85EA0,
"PW: Captains Ashes": 0x4000086A,
"PW: Millwood Battle Axe": 0x006D67D0,
"PW: Ethereal Oak Shield": 0x01450320,
"PW: Crow Quills": 0x00F66DF0,
"PW: Slave Knight Hood": 0x134EDCE0,
"PW: Slave Knight Armor": 0x134EE0C8,
"PW: Slave Knight Gauntlets": 0x134EE4B0,
"PW: Slave Knight Leggings": 0x134EE898,
"PW: Way of White Corona": 0x403642A0,
"PW: Crow Talons": 0x00A89C10,
"PW: Quakestone Hammer": 0x007ECCF0,
"PW: Earth Seeker": 0x006D8EE0,
"PW: Follower Torch": 0x015F1AD0,
"PW: Follower Shield": 0x0135C0E0,
"PW: Follower Sabre": 0x003EDDC0,
"PW: Snap Freeze": 0x401A90C8,
"PW: Floating Chaos": 0x40257DA8,
"PW: Pyromancer's Parting Flame": 0x00CC9ED0,
"PW: Vilhelm's Helm": 0x11312D00,
"PW: Vilhelm's Armor": 0x113130E8,
"PW: Vilhelm's Gauntlets": 0x113134D0,
"PW: Vilhelm's Leggings": 0x113138B8,
"PW: Vilhelm's Leggings": 0x113138B8,
"PW: Valorheart": 0x00F646E0, # GRAVETENDER FIGHT
"PW: Champions Bones": 0x40000869, # GRAVETENDER FIGHT
"PW: Onyx Blade": 0x00222E00, # VILHELM FIGHT
"PW: Soul of Sister Friede": 0x400002E8,
"PW: Titanite Slab": 0x400003EB,
"PW: Chillbite Ring": 0x20005208,
"PW: Contraption Key": 0x4000086B # VILHELM FIGHT/NEEDED TO PROGRESS THROUGH PW
}
dreg_heap_table = { # DLC
"DH: Loincloth": 0x11B2EBD8,
"DH: Aquamarine Dagger": 0x00116520,
"DH: Murky Hand Scythe": 0x00118C30,
"DH: Murky Longstaff": 0x00CCC5E0,
"DH: Great Soul Dregs": 0x401879A0,
"DH: Lothric War Banner": 0x00CCC5E0,
"DH: Projected Heal": 0x40364688,
"DH: Desert Pyromancer Hood": 0x14DB9760,
"DH: Desert Pyromancer Garb": 0x14DB9B48,
"DH: Desert Pyromancer Gloves": 0x14DB9F30,
"DH: Desert Pyromancer Skirt": 0x14DBA318,
"DH: Giant Door Shield": 0x00F5F8C0,
"DH: Herald Curved Greatsword": 0x006159E0,
"DH: Flame Fan": 0x40258190,
"DH: Soul of the Demon Prince": 0x400002EA,
"DH: Small Envoy Banner": 0x4000086C # NEEDED TO TRAVEL TO RINGED CITY
}
ringed_city_table = { # DLC
"RC: Ruin Sentinel Helm": 0x14CC5520,
"RC: Ruin Sentinel Armor": 0x14CC5908,
"RC: Ruin Sentinel Gauntlets": 0x14CC5CF0,
"RC: Ruin Sentinel Leggings": 0x14CC60D8,
"RC: Black Witch Veil": 0x14FA1BE0,
"RC: Black Witch Hat": 0x14EAD9A0,
"RC: Black Witch Garb": 0x14EADD88,
"RC: Black Witch Wrappings": 0x14EAE170,
"RC: Black Witch Trousers": 0x14EAE558,
"RC: White Preacher Head": 0x14153A20,
"RC: Havel's Ring": 0x20004E34,
"RC: Ringed Knight Spear": 0x008CFDC0,
"RC: Dragonhead Shield": 0x0135E7F0,
"RC: Ringed Knight Straight Sword": 0x00225510,
"RC: Preacher's Right Arm": 0x00CD1400,
"RC: White Birch Bow": 0x00D77440,
"RC: Church Guardian Shiv": 0x4000013B, # Assigned to "Demon's Scar"
"RC: Dragonhead Greatshield": 0x01452A30,
"RC: Ringed Knight Paired Greatswords": 0x00F69500,
"RC: Shira's Crown": 0x11C22260,
"RC: Shira's Armor": 0x11C22648,
"RC: Shira's Gloves": 0x11C22A30,
"RC: Shira's Trousers": 0x11C22E18,
"RC: Titanite Slab": 0x400003EB, # SHIRA DROP
"RC: Crucifix of the Mad King": 0x008D4BE0, # SHIRA DROP
"RC: Sacred Chime of Filianore": 0x00CCECF0, # SHIRA DROP
"RC: Iron Dragonslayer Helm": 0x1405F7E0,
"RC: Iron Dragonslayer Armor": 0x1405FBC8,
"RC: Iron Dragonslayer Gauntlets": 0x1405FFB0,
"RC: Iron Dragonslayer Leggings": 0x14060398,
"RC: Lightning Arrow": 0x40358B08,
"RC: Ritual Spear Fragment": 0x4000028A, # Assigned to "Frayed Blade"
"RC: Antiquated Plain Garb": 0x11B2E408,
"RC: Violet Wrappings": 0x11B2E7F0, # Assigned to "Gael's Greatsword"
"RC: Soul of Darkeater Midir": 0x400002EB,
"RC: Soul of Slave Knight Gael": 0x400002E9,
"RC: Blood of the Dark Souls": 0x4000086E, # Assigned to "Repeating Crossbow"
}
progressive_locations = { progressive_locations = {
# Upgrade materials # Upgrade materials
**{"Titanite Shard #"+str(i): 0x400003E8 for i in range(1, 11)}, **{"Titanite Shard #"+str(i): 0x400003E8 for i in range(1, 11)},
@ -456,15 +556,60 @@ progressive_locations = {
**{"Soul of a Deserted Corpse #" + str(i): 0x40000191 for i in range(1, 6)}, **{"Soul of a Deserted Corpse #" + str(i): 0x40000191 for i in range(1, 6)},
**{"Large Soul of a Deserted Corpse #" + str(i): 0x40000192 for i in range(1, 6)}, **{"Large Soul of a Deserted Corpse #" + str(i): 0x40000192 for i in range(1, 6)},
**{"Soul of an Unknown Traveler #" + str(i): 0x40000193 for i in range(1, 6)}, **{"Soul of an Unknown Traveler #" + str(i): 0x40000193 for i in range(1, 6)},
**{"Large Soul of an Unknown Traveler #" + str(i): 0x40000194 for i in range(1, 6)}, **{"Large Soul of an Unknown Traveler #" + str(i): 0x40000194 for i in range(1, 6)}
}
progressive_locations_2 = {
##Added by Br00ty
"HWL: Gold Pine Resin #": 0x4000014B,
"US: Charcoal Pine Resin #": 0x4000014A,
"FK: Gold Pine Bundle #": 0x40000155,
"CC: Carthus Rouge #": 0x4000014F,
"ID: Pale Pine Resin #": 0x40000150,
**{"Titanite Scale #" + str(i): 0x400003FC for i in range(1, 27)},
**{"Fading Soul #" + str(i): 0x40000190 for i in range(1, 4)},
**{"Ring of Sacrifice #"+str(i): 0x20004EF2 for i in range(1, 5)},
**{"Homeward Bone #"+str(i): 0x4000015E for i in range(1, 17)},
**{"Ember #"+str(i): 0x400001F4 for i in range(1, 46)},
}
progressive_locations_3 = {
**{"Green Blossom #" + str(i): 0x40000104 for i in range(1, 7)},
**{"Human Pine Resin #" + str(i): 0x4000014E for i in range(1, 3)},
**{"Charcoal Pine Bundle #" + str(i): 0x40000154 for i in range(1, 3)},
**{"Rotten Pine Resin #" + str(i): 0x40000157 for i in range(1, 3)},
**{"Pale Tongue #" + str(i): 0x40000175 for i in range(1, 3)},
**{"Alluring Skull #" + str(i): 0x40000126 for i in range(1, 3)},
**{"Undead Hunter Charm #" + str(i): 0x40000128 for i in range(1, 3)},
**{"Duel Charm #" + str(i): 0x40000130 for i in range(1, 3)},
**{"Rusted Coin #" + str(i): 0x400001C7 for i in range(1, 3)},
**{"Rusted Gold Coin #" + str(i): 0x400001C9 for i in range(1, 4)},
**{"Titanite Chunk #"+str(i): 0x400003EA for i in range(1, 17)},
**{"Twinkling Titanite #"+str(i): 0x40000406 for i in range(1, 8)}
}
dlc_progressive_locations = { #71
**{"Large Soul of an Unknown Traveler $"+str(i): 0x40000194 for i in range(1, 10)},
**{"Soul of a Weary Warrior $"+str(i): 0x40000197 for i in range(1, 6)},
**{"Large Soul of a Weary Warrior $"+str(i): 0x40000198 for i in range(1, 7)},
**{"Soul of a Crestfallen Knight $"+str(i): 0x40000199 for i in range(1, 7)},
**{"Large Soul of a Crestfallen Knight $"+str(i): 0x4000019A for i in range(1, 4)},
**{"Homeward Bone $"+str(i): 0x4000015E for i in range(1, 7)},
**{"Large Titanite Shard $"+str(i): 0x400003E9 for i in range(1, 4)},
**{"Titanite Chunk $"+str(i): 0x400003EA for i in range(1, 16)},
**{"Twinkling Titanite $"+str(i): 0x40000406 for i in range(1, 6)},
**{"Rusted Coin $"+str(i): 0x400001C7 for i in range(1, 4)},
**{"Ember $"+str(i): 0x400001F4 for i in range(1, 11)}
} }
location_tables = [fire_link_shrine_table, firelink_shrine_bell_tower_table, high_wall_of_lothric, undead_settlement_table, road_of_sacrifice_table, location_tables = [fire_link_shrine_table, firelink_shrine_bell_tower_table, high_wall_of_lothric, undead_settlement_table, road_of_sacrifice_table,
cathedral_of_the_deep_table, farron_keep_table, catacombs_of_carthus_table, smouldering_lake_table, irithyll_of_the_boreal_valley_table, 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, irithyll_dungeon_table, profaned_capital_table, anor_londo_table, lothric_castle_table, consumed_king_garden_table,
grand_archives_table, untended_graves_table, archdragon_peak_table, progressive_locations] grand_archives_table, untended_graves_table, archdragon_peak_table, progressive_locations, progressive_locations_2, progressive_locations_3,
painted_world_table, dreg_heap_table, ringed_city_table, dlc_progressive_locations]
location_dictionary = {**fire_link_shrine_table, **firelink_shrine_bell_tower_table, **high_wall_of_lothric, **undead_settlement_table, **road_of_sacrifice_table, location_dictionary = {**fire_link_shrine_table, **firelink_shrine_bell_tower_table, **high_wall_of_lothric, **undead_settlement_table, **road_of_sacrifice_table,
**cathedral_of_the_deep_table, **farron_keep_table, **catacombs_of_carthus_table, **smouldering_lake_table, **irithyll_of_the_boreal_valley_table, **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, **irithyll_dungeon_table, **profaned_capital_table, **anor_londo_table, **lothric_castle_table, **consumed_king_garden_table,
**grand_archives_table, **untended_graves_table, **archdragon_peak_table, **progressive_locations} **grand_archives_table, **untended_graves_table, **archdragon_peak_table, **progressive_locations, **progressive_locations_2, **progressive_locations_3,
**painted_world_table, **dreg_heap_table, **ringed_city_table, **dlc_progressive_locations}

View File

@ -7,17 +7,18 @@ config file.
## What does randomization do to this game? ## What does randomization do to this game?
In Dark Souls III, all unique items you can earn from a static corpse, a chest or the death of a Boss/NPC are randomized. In Dark Souls III, all unique items you can earn from a static corpse, a chest or the death of a Boss/NPC are
This exclude the upgrade materials such as the titanite shards, the estus shards and the consumables which remain at randomized.
the same location. I also added an option available from the settings page to randomize the level of the generated An option is available from the settings page to also randomize the upgrade materials, the Estus shards and the
weapons(from +0 to +10/+5) consumables.
Another option is available to randomize the level of the generated weapons(from +0 to +10/+5)
To beat the game you need to collect the 4 "Cinders of a Lord" randomized in the multiworld To beat the game you need to collect the 4 "Cinders of a Lord" randomized in the multiworld
and kill the final boss "Soul of Cinder" and kill the final boss "Soul of Cinder"
## What Dark Souls III items can appear in other players' worlds? ## What Dark Souls III items can appear in other players' worlds?
Every unique items from Dark Souls III can appear in other player's worlds, such as a piece of armor, an upgraded weapon Every unique item from Dark Souls III can appear in other player's worlds, such as a piece of armor, an upgraded weapon,
or a key item. or a key item.
## What does another world's item look like in Dark Souls III? ## What does another world's item look like in Dark Souls III?

View File

@ -5,6 +5,10 @@
- [Dark Souls III](https://store.steampowered.com/app/374320/DARK_SOULS_III/) - [Dark Souls III](https://store.steampowered.com/app/374320/DARK_SOULS_III/)
- [Dark Souls III AP Client](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases) - [Dark Souls III AP Client](https://github.com/Marechal-L/Dark-Souls-III-Archipelago-client/releases)
## Optional Software
- [Dark Souls III Maptracker Pack](https://github.com/Br00ty/DS3_AP_Maptracker/releases/latest), for use with [Poptracker](https://github.com/black-sliver/PopTracker/releases)
## General Concept ## General Concept
The Dark Souls III AP Client is a dinput8.dll triggered when launching Dark Souls III. This .dll file will launch a command The Dark Souls III AP Client is a dinput8.dll triggered when launching Dark Souls III. This .dll file will launch a command