mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Lingo: Add option to prevent shuffling postgame (#3350)
* Lingo: Add option to prevent shuffling postgame * Allow roof access on door shuffle * Fix broken unit test * Simplified THE END edge case * Revert unnecessary change * Review comments * Fix mastery unit test * Update generated.dat * Added player's name to error message
This commit is contained in:
committed by
GitHub
parent
878d5141ce
commit
e714d2e129
@@ -3,7 +3,7 @@ Archipelago init file for Lingo
|
||||
"""
|
||||
from logging import warning
|
||||
|
||||
from BaseClasses import Item, ItemClassification, Tutorial
|
||||
from BaseClasses import CollectionState, Item, ItemClassification, Tutorial
|
||||
from Options import OptionError
|
||||
from worlds.AutoWorld import WebWorld, World
|
||||
from .datatypes import Room, RoomEntrance
|
||||
@@ -68,6 +68,37 @@ class LingoWorld(World):
|
||||
def create_regions(self):
|
||||
create_regions(self)
|
||||
|
||||
if not self.options.shuffle_postgame:
|
||||
state = CollectionState(self.multiworld)
|
||||
state.collect(LingoItem("Prevent Victory", ItemClassification.progression, None, self.player), True)
|
||||
|
||||
# Note: relies on the assumption that real_items is a definitive list of real progression items in this
|
||||
# world, and is not modified after being created.
|
||||
for item in self.player_logic.real_items:
|
||||
state.collect(self.create_item(item), True)
|
||||
|
||||
# Exception to the above: a forced good item is not considered a "real item", but needs to be here anyway.
|
||||
if self.player_logic.forced_good_item != "":
|
||||
state.collect(self.create_item(self.player_logic.forced_good_item), True)
|
||||
|
||||
all_locations = self.multiworld.get_locations(self.player)
|
||||
state.sweep_for_events(locations=all_locations)
|
||||
|
||||
unreachable_locations = [location for location in all_locations
|
||||
if not state.can_reach_location(location.name, self.player)]
|
||||
|
||||
for location in unreachable_locations:
|
||||
if location.name in self.player_logic.event_loc_to_item.keys():
|
||||
continue
|
||||
|
||||
self.player_logic.real_locations.remove(location.name)
|
||||
location.parent_region.locations.remove(location)
|
||||
|
||||
if len(self.player_logic.real_items) > len(self.player_logic.real_locations):
|
||||
raise OptionError(f"{self.player_name}'s Lingo world does not have enough locations to fit the number"
|
||||
f" of required items without shuffling the postgame. Either enable postgame"
|
||||
f" shuffling, or choose different options.")
|
||||
|
||||
def create_items(self):
|
||||
pool = [self.create_item(name) for name in self.player_logic.real_items]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user