Zork Grand Inquisitor: Fix Determinism Issues on Fixed Seeds (#3134)

This commit is contained in:
Nicholas Brochu 2024-04-18 12:47:27 -04:00 committed by GitHub
parent 21184b59d2
commit fec533b65e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 16 deletions

View File

@ -1,4 +1,4 @@
from typing import Dict, Set, Tuple, Union from typing import Dict, List, Set, Tuple, Union
from .data.entrance_rule_data import entrance_rule_data from .data.entrance_rule_data import entrance_rule_data
from .data.item_data import item_data, ZorkGrandInquisitorItemData from .data.item_data import item_data, ZorkGrandInquisitorItemData
@ -54,15 +54,15 @@ def id_to_locations() -> Dict[int, ZorkGrandInquisitorLocations]:
} }
def item_groups() -> Dict[str, Set[str]]: def item_groups() -> Dict[str, List[str]]:
groups: Dict[str, Set[str]] = dict() groups: Dict[str, List[str]] = dict()
item: ZorkGrandInquisitorItems item: ZorkGrandInquisitorItems
data: ZorkGrandInquisitorItemData data: ZorkGrandInquisitorItemData
for item, data in item_data.items(): for item, data in item_data.items():
if data.tags is not None: if data.tags is not None:
for tag in data.tags: for tag in data.tags:
groups.setdefault(tag.value, set()).add(item.value) groups.setdefault(tag.value, list()).append(item.value)
return {k: v for k, v in groups.items() if len(v)} return {k: v for k, v in groups.items() if len(v)}
@ -92,31 +92,31 @@ def game_id_to_items() -> Dict[int, ZorkGrandInquisitorItems]:
return mapping return mapping
def location_groups() -> Dict[str, Set[str]]: def location_groups() -> Dict[str, List[str]]:
groups: Dict[str, Set[str]] = dict() groups: Dict[str, List[str]] = dict()
tag: ZorkGrandInquisitorTags tag: ZorkGrandInquisitorTags
for tag in ZorkGrandInquisitorTags: for tag in ZorkGrandInquisitorTags:
groups[tag.value] = set() groups[tag.value] = list()
location: ZorkGrandInquisitorLocations location: ZorkGrandInquisitorLocations
data: ZorkGrandInquisitorLocationData data: ZorkGrandInquisitorLocationData
for location, data in location_data.items(): for location, data in location_data.items():
if data.tags is not None: if data.tags is not None:
for tag in data.tags: for tag in data.tags:
groups[tag.value].add(location.value) groups[tag.value].append(location.value)
return {k: v for k, v in groups.items() if len(v)} return {k: v for k, v in groups.items() if len(v)}
def locations_by_region(include_deathsanity: bool = False) -> Dict[ def locations_by_region(include_deathsanity: bool = False) -> Dict[
ZorkGrandInquisitorRegions, Set[ZorkGrandInquisitorLocations] ZorkGrandInquisitorRegions, List[ZorkGrandInquisitorLocations]
]: ]:
mapping: Dict[ZorkGrandInquisitorRegions, Set[ZorkGrandInquisitorLocations]] = dict() mapping: Dict[ZorkGrandInquisitorRegions, List[ZorkGrandInquisitorLocations]] = dict()
region: ZorkGrandInquisitorRegions region: ZorkGrandInquisitorRegions
for region in ZorkGrandInquisitorRegions: for region in ZorkGrandInquisitorRegions:
mapping[region] = set() mapping[region] = list()
location: ZorkGrandInquisitorLocations location: ZorkGrandInquisitorLocations
data: ZorkGrandInquisitorLocationData data: ZorkGrandInquisitorLocationData
@ -126,7 +126,7 @@ def locations_by_region(include_deathsanity: bool = False) -> Dict[
): ):
continue continue
mapping[data.region].add(location) mapping[data.region].append(location)
return mapping return mapping

View File

@ -1,4 +1,4 @@
from typing import Any, Dict, List, Set, Tuple from typing import Any, Dict, List, Tuple
from BaseClasses import Item, ItemClassification, Location, Region, Tutorial from BaseClasses import Item, ItemClassification, Location, Region, Tutorial
@ -78,6 +78,7 @@ class ZorkGrandInquisitorWorld(World):
web = ZorkGrandInquisitorWebWorld() web = ZorkGrandInquisitorWebWorld()
filler_item_names: List[str] = item_groups()["Filler"]
item_name_to_item: Dict[str, ZorkGrandInquisitorItems] = item_names_to_item() item_name_to_item: Dict[str, ZorkGrandInquisitorItems] = item_names_to_item()
def create_regions(self) -> None: def create_regions(self) -> None:
@ -89,13 +90,13 @@ class ZorkGrandInquisitorWorld(World):
for region_enum_item in region_data.keys(): for region_enum_item in region_data.keys():
region_mapping[region_enum_item] = Region(region_enum_item.value, self.player, self.multiworld) region_mapping[region_enum_item] = Region(region_enum_item.value, self.player, self.multiworld)
region_locations_mapping: Dict[ZorkGrandInquisitorRegions, Set[ZorkGrandInquisitorLocations]] region_locations_mapping: Dict[ZorkGrandInquisitorRegions, List[ZorkGrandInquisitorLocations]]
region_locations_mapping = locations_by_region(include_deathsanity=deathsanity) region_locations_mapping = locations_by_region(include_deathsanity=deathsanity)
region_enum_item: ZorkGrandInquisitorRegions region_enum_item: ZorkGrandInquisitorRegions
region: Region region: Region
for region_enum_item, region in region_mapping.items(): for region_enum_item, region in region_mapping.items():
regions_locations: Set[ZorkGrandInquisitorLocations] = region_locations_mapping[region_enum_item] regions_locations: List[ZorkGrandInquisitorLocations] = region_locations_mapping[region_enum_item]
# Locations # Locations
location_enum_item: ZorkGrandInquisitorLocations location_enum_item: ZorkGrandInquisitorLocations
@ -201,4 +202,4 @@ class ZorkGrandInquisitorWorld(World):
) )
def get_filler_item_name(self) -> str: def get_filler_item_name(self) -> str:
return self.random.choice(list(self.item_name_groups["Filler"])) return self.random.choice(self.filler_item_names)