OSRS: UT integration for OSRS to support chunksanity (#3776)

This commit is contained in:
Faris 2024-09-18 13:53:17 -05:00 committed by GitHub
parent 0d35cd4679
commit 2ee8b7535d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 34 additions and 16 deletions

View File

@ -90,16 +90,18 @@ class OSRSWorld(World):
rnd = self.random rnd = self.random
starting_area = self.options.starting_area starting_area = self.options.starting_area
#UT specific override, if we are in normal gen, resolve starting area, we will get it from slot_data in UT
if not hasattr(self.multiworld, "generation_is_fake"):
if starting_area.value == StartingArea.option_any_bank:
self.starting_area_item = rnd.choice(starting_area_dict)
elif starting_area.value < StartingArea.option_chunksanity:
self.starting_area_item = starting_area_dict[starting_area.value]
else:
self.starting_area_item = rnd.choice(chunksanity_starting_chunks)
if starting_area.value == StartingArea.option_any_bank: # Set Starting Chunk
self.starting_area_item = rnd.choice(starting_area_dict) self.multiworld.push_precollected(self.create_item(self.starting_area_item))
elif starting_area.value < StartingArea.option_chunksanity:
self.starting_area_item = starting_area_dict[starting_area.value]
else:
self.starting_area_item = rnd.choice(chunksanity_starting_chunks)
# Set Starting Chunk
self.multiworld.push_precollected(self.create_item(self.starting_area_item))
""" """
This function pulls from LogicCSVToPython so that it sends the correct tag of the repository to the client. This function pulls from LogicCSVToPython so that it sends the correct tag of the repository to the client.
@ -109,8 +111,23 @@ class OSRSWorld(World):
def fill_slot_data(self): def fill_slot_data(self):
data = self.options.as_dict("brutal_grinds") data = self.options.as_dict("brutal_grinds")
data["data_csv_tag"] = data_csv_tag data["data_csv_tag"] = data_csv_tag
data["starting_area"] = str(self.starting_area_item) #these aren't actually strings, they just play them on tv
return data return data
def interpret_slot_data(self, slot_data: typing.Dict[str, typing.Any]) -> None:
if "starting_area" in slot_data:
self.starting_area_item = slot_data["starting_area"]
menu_region = self.multiworld.get_region("Menu",self.player)
menu_region.exits.clear() #prevent making extra exits if players just reconnect to a differnet slot
if self.starting_area_item in chunksanity_special_region_names:
starting_area_region = chunksanity_special_region_names[self.starting_area_item]
else:
starting_area_region = self.starting_area_item[6:] # len("Area: ")
starting_entrance = menu_region.create_exit(f"Start->{starting_area_region}")
starting_entrance.access_rule = lambda state: state.has(self.starting_area_item, self.player)
starting_entrance.connect(self.region_name_to_data[starting_area_region])
def create_regions(self) -> None: def create_regions(self) -> None:
""" """
called to place player's regions into the MultiWorld's regions list. If it's hard to separate, this can be done called to place player's regions into the MultiWorld's regions list. If it's hard to separate, this can be done
@ -128,13 +145,14 @@ class OSRSWorld(World):
# Removes the word "Area: " from the item name to get the region it applies to. # Removes the word "Area: " from the item name to get the region it applies to.
# I figured tacking "Area: " at the beginning would make it _easier_ to tell apart. Turns out it made it worse # I figured tacking "Area: " at the beginning would make it _easier_ to tell apart. Turns out it made it worse
if self.starting_area_item in chunksanity_special_region_names: if self.starting_area_item != "": #if area hasn't been set, then we shouldn't connect it
starting_area_region = chunksanity_special_region_names[self.starting_area_item] if self.starting_area_item in chunksanity_special_region_names:
else: starting_area_region = chunksanity_special_region_names[self.starting_area_item]
starting_area_region = self.starting_area_item[6:] # len("Area: ") else:
starting_entrance = menu_region.create_exit(f"Start->{starting_area_region}") starting_area_region = self.starting_area_item[6:] # len("Area: ")
starting_entrance.access_rule = lambda state: state.has(self.starting_area_item, self.player) starting_entrance = menu_region.create_exit(f"Start->{starting_area_region}")
starting_entrance.connect(self.region_name_to_data[starting_area_region]) starting_entrance.access_rule = lambda state: state.has(self.starting_area_item, self.player)
starting_entrance.connect(self.region_name_to_data[starting_area_region])
# Create entrances between regions # Create entrances between regions
for region_row in region_rows: for region_row in region_rows: