Update ds3 locations and items (#819)
* DS3: Add more rules to avoid softlocks, remove Path of the Dragon gesture location/item and remove useless comments * DS3: Add more Hostile NPCs locations/items * DS3: Add missing key items to the key items list
This commit is contained in:
parent
3b2037a2d4
commit
288a623ab6
|
@ -39,7 +39,7 @@ class DarkSouls3World(World):
|
|||
remote_items: bool = False
|
||||
remote_start_inventory: bool = False
|
||||
web = DarkSouls3Web()
|
||||
data_version = 1
|
||||
data_version = 2
|
||||
base_id = 100000
|
||||
item_name_to_id = {name: id for id, name in enumerate(item_dictionary_table, base_id)}
|
||||
location_name_to_id = {name: id for id, name in enumerate(location_dictionary_table, base_id)}
|
||||
|
@ -167,17 +167,15 @@ class DarkSouls3World(World):
|
|||
|
||||
# Define the access rules to the entrances
|
||||
set_rule(self.world.get_entrance("Goto Bell Tower", self.player),
|
||||
lambda state: state.has("Mortician's Ashes", self.player))
|
||||
lambda state: state.has("Tower Key", 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_location("HWL: Soul of the Dancer", self.player),
|
||||
lambda state: state.has("Basin of Vows", self.player))
|
||||
set_rule(self.world.get_entrance("Goto Irithyll of the boreal", self.player),
|
||||
lambda state: state.has("Small Doll", self.player))
|
||||
set_rule(self.world.get_entrance("Goto Archdragon peak", self.player),
|
||||
lambda state: state.has("Path of the Dragon Gesture", self.player))
|
||||
lambda state: state.can_reach("CKG: Soul of Consumed Oceiros", "Location", 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),
|
||||
|
@ -188,6 +186,23 @@ class DarkSouls3World(World):
|
|||
state.has("Cinders of a Lord - Aldrich", self.player) and
|
||||
state.has("Cinders of a Lord - Lothric Prince", self.player))
|
||||
|
||||
# Define the access rules to some specific locations
|
||||
set_rule(self.world.get_location("HWL: Soul of the Dancer", self.player),
|
||||
lambda state: state.has("Basin of Vows", self.player))
|
||||
set_rule(self.world.get_location("HWL: Greirat's Ashes", self.player),
|
||||
lambda state: state.has("Cell Key", self.player))
|
||||
set_rule(self.world.get_location("ID: Bellowing Dragoncrest Ring", self.player),
|
||||
lambda state: state.has("Jailbreaker's Key", self.player))
|
||||
set_rule(self.world.get_location("ID: Prisoner Chief's Ashes", self.player),
|
||||
lambda state: state.has("Jailer's Key Ring", self.player))
|
||||
set_rule(self.world.get_location("ID: Covetous Gold Serpent Ring", self.player),
|
||||
lambda state: state.has("Old Cell Key", self.player))
|
||||
black_hand_gotthard_corpse_rule = lambda state: \
|
||||
(state.can_reach("AL: Cinders of a Lord - Aldrich", "Location", self.player) and
|
||||
state.can_reach("PC: Cinders of a Lord - Yhorm the Giant", "Location", self.player))
|
||||
set_rule(self.world.get_location("LC: Grand Archives Key", self.player), black_hand_gotthard_corpse_rule)
|
||||
set_rule(self.world.get_location("LC: Gotthard Twinswords", self.player), black_hand_gotthard_corpse_rule)
|
||||
|
||||
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 \
|
||||
|
@ -202,6 +217,12 @@ class DarkSouls3World(World):
|
|||
else:
|
||||
self.world.itempool += [item]
|
||||
|
||||
# Fill item pool with additional items
|
||||
item_pool_len = self.item_name_to_id.__len__()
|
||||
total_required_locations = self.location_name_to_id.__len__()
|
||||
for i in range(item_pool_len, total_required_locations):
|
||||
self.world.itempool += [self.create_item("Soul of an Intrepid Hero")]
|
||||
|
||||
def generate_output(self, output_directory: str):
|
||||
# Depending on the specified option, modify items hexadecimal value to add an upgrade level
|
||||
item_dictionary = item_dictionary_table.copy()
|
||||
|
|
|
@ -51,7 +51,7 @@ weapons_upgrade_5_table = {
|
|||
"Twin Princes' Greatsword": 0x005FAC30,
|
||||
"Storm Curved Sword": 0x003E4180,
|
||||
"Dragonslayer Swordspear": 0x008BC540,
|
||||
|
||||
"Sage's Crystal Staff": 0x00C8CE40,
|
||||
}
|
||||
|
||||
weapons_upgrade_10_table = {
|
||||
|
@ -105,6 +105,7 @@ weapons_upgrade_10_table = {
|
|||
"Sniper Crossbow": 0x00D83790,
|
||||
|
||||
"Claw": 0x00A7D8C0,
|
||||
"Drang Twinspears": 0x00F5AAA0,
|
||||
}
|
||||
|
||||
shields_table = {
|
||||
|
@ -125,7 +126,6 @@ shields_table = {
|
|||
"Dragon Crest Shield": 0x01432E60,
|
||||
"Shield of Want": 0x0144B500,
|
||||
"Black Iron Greatshield": 0x0150EA00,
|
||||
"Great Magic Shield": 0x40144F38,
|
||||
"Greatshield of Glory": 0x01515F30,
|
||||
"Sacred Bloom Shield": 0x013572C0,
|
||||
"Golden Wing Crest Shield": 0x0143CAA0,
|
||||
|
@ -291,6 +291,7 @@ rings_table = {
|
|||
"Knight's Ring": 0x20004FEC,
|
||||
"Red Tearstone Ring": 0x20004ECA,
|
||||
"Dragonscale Ring": 0x2000515E,
|
||||
"Knight Slayer's Ring": 0x20005000,
|
||||
}
|
||||
|
||||
spells_table = {
|
||||
|
@ -311,10 +312,12 @@ spells_table = {
|
|||
"Soul Stream": 0x4018B820,
|
||||
"Divine Pillars of Light": 0x4038C340,
|
||||
"Great Magic Barrier": 0x40365628,
|
||||
|
||||
"Great Magic Shield": 0x40144F38,
|
||||
}
|
||||
|
||||
misc_items_table = {
|
||||
"Tower Key": 0x400007DF,
|
||||
"Grave Key": 0x400007D9,
|
||||
"Cell Key": 0x400007DA,
|
||||
"Small Lothric Banner": 0x40000836,
|
||||
"Mortician's Ashes": 0x4000083B,
|
||||
|
@ -349,7 +352,6 @@ misc_items_table = {
|
|||
"Xanthous Ashes": 0x40000864,
|
||||
"Old Cell Key": 0x400007DC,
|
||||
"Jailer's Key Ring": 0x400007D8,
|
||||
"Path of the Dragon Gesture": 0x40002346,
|
||||
"Logan's Scroll": 0x40000855,
|
||||
"Storm Ruler": 0x006132D0,
|
||||
"Giant's Coal": 0x40000839,
|
||||
|
@ -363,14 +365,19 @@ 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"
|
||||
"Mortician's Ashes",
|
||||
"Cell Key",
|
||||
"Tower Key",
|
||||
"Jailbreaker's Key",
|
||||
"Prisoner Chief's Ashes",
|
||||
"Old Cell Key",
|
||||
"Jailer's Key Ring",
|
||||
}
|
||||
|
||||
item_dictionary_table = {**weapons_upgrade_5_table, **weapons_upgrade_10_table, **shields_table, **armor_table, **rings_table, **spells_table, **misc_items_table, **goods_table}
|
||||
|
|
|
@ -9,8 +9,12 @@ cemetery_of_ash_table = {
|
|||
}
|
||||
|
||||
fire_link_shrine_table = {
|
||||
"FS: Broken Straight Sword": 0x001EF9B0, # Multiple
|
||||
# "FS: Coiled Sword": 0x40000859, You can still light the Firelink Shrine fire whether you have it or not, useless
|
||||
"FS: Broken Straight Sword": 0x001EF9B0,
|
||||
"FS: East-West Shield": 0x0142B930,
|
||||
"FS: Uchigatana": 0x004C4B40,
|
||||
"FS: Master's Attire": 0x148F5008,
|
||||
"FS: Master's Gloves": 0x148F53F0,
|
||||
}
|
||||
|
||||
firelink_shrine_bell_tower_table = {
|
||||
|
@ -40,6 +44,7 @@ high_wall_of_lothric = {
|
|||
"HWL: Soul of Boreal Valley Vordt": 0x400002CF,
|
||||
"HWL: Soul of the Dancer": 0x400002CA,
|
||||
"HWL: Way of Blue Covenant": 0x2000274C,
|
||||
"HWL: Greirat's Ashes": 0x4000083F,
|
||||
}
|
||||
|
||||
undead_settlement_table = {
|
||||
|
@ -53,7 +58,7 @@ undead_settlement_table = {
|
|||
"US: Cleric Gloves": 0x11D90D90,
|
||||
"US: Cleric Trousers": 0x11D91178,
|
||||
|
||||
"US: Mortician's Ashes": 0x4000083B, # Key item for Grave Key for Firelink Towerlocations
|
||||
"US: Mortician's Ashes": 0x4000083B,
|
||||
"US: Caestus": 0x00A7FFD0,
|
||||
"US: Plank Shield": 0x01346150,
|
||||
"US: Flame Stoneplate Ring": 0x20004E52,
|
||||
|
@ -99,7 +104,7 @@ road_of_sacrifice_table = {
|
|||
|
||||
"RS: Butcher Knife": 0x006BE130,
|
||||
"RS: Brigand Axe": 0x006B1DE0,
|
||||
"RS: Braille Divine Tome of Carim": 0x40000847, # Shop
|
||||
"RS: Braille Divine Tome of Carim": 0x40000847,
|
||||
"RS: Morne's Ring": 0x20004F1A,
|
||||
"RS: Twin Dragon Greatshield": 0x01513820,
|
||||
"RS: Heretic's Staff": 0x00C8F550,
|
||||
|
@ -121,12 +126,12 @@ road_of_sacrifice_table = {
|
|||
"RS: Conjurator Manchettes": 0x149E9630,
|
||||
"RS: Conjurator Boots": 0x149E9A18,
|
||||
|
||||
"RS: Great Swamp Pyromancy Tome": 0x4000084F, # Shop
|
||||
"RS: Great Swamp Pyromancy Tome": 0x4000084F,
|
||||
|
||||
"RS: Great Club": 0x007B4A80,
|
||||
"RS: Exile Greatsword": 0x005DD770,
|
||||
|
||||
"RS: Farron Coal ": 0x40000837, # Shop
|
||||
"RS: Farron Coal ": 0x40000837,
|
||||
|
||||
"RS: Sellsword Twinblades": 0x00F42400,
|
||||
"RS: Sellsword Helm": 0x11481060,
|
||||
|
@ -147,7 +152,7 @@ road_of_sacrifice_table = {
|
|||
}
|
||||
|
||||
cathedral_of_the_deep_table = {
|
||||
"CD: Paladin's Ashes": 0x4000083D, #Shop
|
||||
"CD: Paladin's Ashes": 0x4000083D,
|
||||
"CD: Spider Shield": 0x01435570,
|
||||
"CD: Crest Shield": 0x01430750,
|
||||
"CD: Notched Whip": 0x00B7DE50,
|
||||
|
@ -161,7 +166,7 @@ cathedral_of_the_deep_table = {
|
|||
"CD: Seek Guidance": 0x40360420,
|
||||
|
||||
"CD: Aldrich's Sapphire": 0x20005096,
|
||||
"CD: Deep Braille Divine Tome": 0x40000860, # Shop
|
||||
"CD: Deep Braille Divine Tome": 0x40000860,
|
||||
|
||||
"CD: Saint Bident": 0x008C1360,
|
||||
"CD: Maiden Hood": 0x14BD12E0,
|
||||
|
@ -202,7 +207,7 @@ farron_keep_table = {
|
|||
"FK: Wolf's Blood Swordgrass": 0x4000016E,
|
||||
"FK: Greatsword": 0x005C50D0,
|
||||
|
||||
"FK: Sage's Coal": 0x40000838, # Shop #Unique
|
||||
"FK: Sage's Coal": 0x40000838,
|
||||
"FK: Stone Parma": 0x01443FD0,
|
||||
"FK: Sage's Scroll": 0x40000854,
|
||||
"FK: Crown of Dusk": 0x15D75C80,
|
||||
|
@ -211,8 +216,8 @@ farron_keep_table = {
|
|||
"FK: Pharis's Hat": 0x1487AB00,
|
||||
"FK: Black Bow of Pharis": 0x00D7E970,
|
||||
|
||||
"FK: Dreamchaser's Ashes": 0x4000083C, # Shop #Unique
|
||||
"FK: Great Axe": 0x006B9310, # Multiple
|
||||
"FK: Dreamchaser's Ashes": 0x4000083C,
|
||||
"FK: Great Axe": 0x006B9310,
|
||||
"FK: Dragon Crest Shield": 0x01432E60,
|
||||
"FK: Lightning Spear": 0x40362B30,
|
||||
"FK: Atonement": 0x4039ADA0,
|
||||
|
@ -251,6 +256,7 @@ smouldering_lake_table = {
|
|||
"SL: Fume Ultra Greatsword": 0x0060E4B0,
|
||||
"SL: Black Iron Greatshield": 0x0150EA00,
|
||||
"SL: Soul of the Old Demon King": 0x400002D0,
|
||||
"SL: Knight Slayer's Ring": 0x20005000,
|
||||
}
|
||||
|
||||
irithyll_of_the_boreal_valley_table = {
|
||||
|
@ -266,7 +272,6 @@ irithyll_of_the_boreal_valley_table = {
|
|||
|
||||
"IBV: Smough's Great Hammer": 0x007E30B0,
|
||||
"IBV: Leo Ring": 0x20004EE8,
|
||||
"IBV: Greirat's Ashes": 0x4000083F,
|
||||
"IBV: Excrement-covered Ashes": 0x40000862,
|
||||
|
||||
"IBV: Dark Stoneplate Ring": 0x20004E70,
|
||||
|
@ -286,6 +291,7 @@ irithyll_of_the_boreal_valley_table = {
|
|||
"IBV: Golden Ritual Spear": 0x00C83200,
|
||||
"IBV: Soul of Pontiff Sulyvahn": 0x400002D4,
|
||||
"IBV: Aldrich Faithful Covenant": 0x2000272E,
|
||||
"IBV: Drang Twinspears": 0x00F5AAA0,
|
||||
}
|
||||
|
||||
irithyll_dungeon_table = {
|
||||
|
@ -354,8 +360,11 @@ lothric_castle_table = {
|
|||
"LC: Braille Divine Tome of Lothric": 0x40000848,
|
||||
"LC: Knight's Ring": 0x20004FEC,
|
||||
"LC: Sunlight Straight Sword": 0x00203230,
|
||||
"LC: Grand Archives Key": 0x400007DE,
|
||||
"LC: Soul of Dragonslayer Armour": 0x400002D1,
|
||||
|
||||
# The Black Hand Gotthard corpse appears when you have defeated Yhorm and Aldrich and triggered the cutscene
|
||||
"LC: Grand Archives Key": 0x400007DE, # On Black Hand Gotthard corpse
|
||||
"LC: Gotthard Twinswords": 0x00F53570 # On Black Hand Gotthard corpse
|
||||
}
|
||||
|
||||
consumed_king_garden_table = {
|
||||
|
@ -366,7 +375,7 @@ consumed_king_garden_table = {
|
|||
"CKG: Shadow Leggings": 0x14D401F8,
|
||||
"CKG: Claw": 0x00A7D8C0,
|
||||
"CKG: Soul of Consumed Oceiros": 0x400002CE,
|
||||
"CKG: Path of the Dragon Gesture": 0x40002346,
|
||||
# "CKG: Path of the Dragon Gesture": 0x40002346, I can't technically randomize it as it is a gesture and not an item
|
||||
}
|
||||
|
||||
grand_archives_table = {
|
||||
|
@ -383,6 +392,7 @@ grand_archives_table = {
|
|||
"GA: Divine Pillars of Light": 0x4038C340,
|
||||
"GA: Cinders of a Lord - Lothric Prince": 0x4000084E,
|
||||
"GA: Soul of the Twin Princes": 0x400002DB,
|
||||
"GA: Sage's Crystal Staff": 0x00C8CE40,
|
||||
}
|
||||
|
||||
untended_graves_table = {
|
||||
|
@ -414,6 +424,8 @@ archdragon_peak_table = {
|
|||
"AP: Dragonslayer Leggings": 0x158B1CF8,
|
||||
"AP: Ricard's Rapier": 0x002E3BF0,
|
||||
"AP: Soul of the Nameless King": 0x400002D2,
|
||||
"AP: Dragon Tooth": 0x007E09A0,
|
||||
"AP: Havel's Greatshield": 0x013376F0,
|
||||
}
|
||||
|
||||
location_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,
|
||||
|
|
Loading…
Reference in New Issue