mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 12:11:33 -06:00
The Witness: Panel Hunt Mode (#3265)
* Add panel hunt options * Make sure all panels are either solvable or disabled in panel hunt * Pick huntable panels * Discards in disable non randomized * Set up panel hunt requirement * Panel hunt functional * Make it so an event can have multiple names * Panel hunt with events * Add hunt entities to slot data * ruff * add to hint data, no client sneding yet * encode panel hunt amount in compact hint data * Remove print statement * my b * consistent * meh * additions for lcient * Nah * Victory panels ineligible for panel hunt * Panel Hunt Postgame option * cleanup * Add data generation file * pull out set * always disable gate ep in panel hunt * Disallow certain challenge panels from being panel hunt panels * Make panelhuntpostgame its own function, so it can be called even if normal postgame is enabled * disallow PP resets from panel hunt * Disable challenge timer and elevetor start respectively in disable hunt postgame * Fix panelhunt postgame * lol * When you test that the bug is fixed but not that the non-bug is not unfixed * Prevent Obelisks from being panel hunt panels * Make picking panels for panel hunt a bit more sophisticated, if less random * Better function maybe ig * Ok maybe that was a bit too much * Give advanced players some control over panel hunt * lint * correct the logic for amount to pick * decided the jingle thing was dumb, I'll figure sth out client side. Same area discouragement is now a configurable factor, and the logic has been significantly rewritten * comment * Make the option visible * Safety * Change assert slightly * We do a little logging * number tweak & we do a lil logging * we do a little more logging * Ruff * Panel Hunt Option Group * Idk how that got here * Update worlds/witness/options.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update worlds/witness/__init__.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * remove merge error * Update worlds/witness/player_logic.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * True * Don't have underwater sliding bridge when you have above water sliding bridge * These are not actually connected lol * get rid of unnecessary variable * Refactor compact hint function again * lint * Pull out Entity Hunt Picking into its own class, split it into many functions. Kept a lot of the comments tho * forgot to actually add the new file * some more refactoring & docstrings * consistent naming * flip elif change * Comment about naming * Make static eligible panels a constant I can refer back to * slight formatting change * pull out options-based eligibility into its own function * better text and stuff * lint * this is not necessary * capitalisation * Fix same area discouragement 0 * Simplify data file generation * Simplify data file generation * prevent div 0 * Add Vault Boxes -> Vault Panels to replacements * Update options.py * Update worlds/witness/entity_hunt.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update entity_hunt.py * Fix some events not working * assert * remove now unused function * lint * Lasers Activate, Lasers don't Solve * lint * oops * mypy * lint * Add simple panel hunt unit test * Add Panel Hunt Tests * Add more Panel Hunt Tests * Disallow Box Short for normal panel hunt --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This commit is contained in:
@@ -159,3 +159,36 @@ class WitnessMultiworldTestBase(MultiworldTestBase):
|
||||
if isinstance(item_names, str):
|
||||
item_names = (item_names,)
|
||||
return [item for item in self.multiworld.itempool if item.name in item_names and item.player == player]
|
||||
|
||||
def assert_location_exists(self, location_name: str, player: int, strict_check: bool = True) -> None:
|
||||
"""
|
||||
Assert that a location exists in this world.
|
||||
If strict_check, also make sure that this (non-event) location COULD exist.
|
||||
"""
|
||||
|
||||
world = self.multiworld.worlds[player]
|
||||
|
||||
if strict_check:
|
||||
self.assertIn(location_name, world.location_name_to_id, f"Location {location_name} can never exist")
|
||||
|
||||
try:
|
||||
world.get_location(location_name)
|
||||
except KeyError:
|
||||
self.fail(f"Location {location_name} does not exist.")
|
||||
|
||||
def assert_location_does_not_exist(self, location_name: str, player: int, strict_check: bool = True) -> None:
|
||||
"""
|
||||
Assert that a location exists in this world.
|
||||
If strict_check, be explicit about whether the location could exist in the first place.
|
||||
"""
|
||||
|
||||
world = self.multiworld.worlds[player]
|
||||
|
||||
if strict_check:
|
||||
self.assertIn(location_name, world.location_name_to_id, f"Location {location_name} can never exist")
|
||||
|
||||
self.assertRaises(
|
||||
KeyError,
|
||||
lambda _: world.get_location(location_name),
|
||||
f"Location {location_name} exists, but is not supposed to.",
|
||||
)
|
||||
|
Reference in New Issue
Block a user