mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00

* Adds an option to have pot pieces placed local/non-local/anywhere Shivers nearly always finishes last in multiworld games due to the fact you need all 20 pot pieces to win and the pot pieces open very few location checks. This option allows the pieces to be placed locally. This should allow Shivers to be finished earlier. * New option: Choose how many ixupi captures are needed for goal completion New option: Choose how many ixupi captures are needed for goal completion * Fixes rule logic for location 'puzzle solved three floor elevator' Fixes rule logic for location 'puzzle solved three floor elevator'. Missing a parenthesis caused only the key requirement to be checked for the blue maze region. * Merge branch 'main' of https://github.com/GodlFire/Shivers * Revert "Merge branch 'main' of https://github.com/GodlFire/Shivers" This reverts commit bb08c3f0c2ef148fd24d7c7820cdfe936f7196e2. * Fixes issue with office elevator rule logic. * Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped' Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped' * Moves plaque location to front for better tracker referencing. * Tiki should be Shaman. * Hanging should be Gallows. * Merrick spelling. * Clarity change. * Changes new option to use new option API Changes new option to use new option API * Added sub regions for Ixupi -Added sub regions for Ixupi and moved ixupi capture checks into the sub region. -Added missing wax capture possible spot in Shaman room * Adds option for ixupi captures to be priority locations Adds option for ixupi captures to be priority locations * Consistency Consistency * Changes ixupi captures priority to default on toggle Changes ixupi captures priority to default on toggle * Docs update -Updated link to randomizer -Update some text to reflect the latest functionality -Replaced 'setting' with 'option' * New features/bug fixes -Adds an option to have completed pots in the item pool -Moved subterranean world information plaque to maze staircase * Cleanup Cleanup * Fixed name for moved location When moving a location and renaming it I forgot to fix the name in a second spot. * Squashed commit of the following: commit 630a3bdfb9414d8c57154f29253fce0cf67b6436 Merge: 8477d3c85e579200
Author: GodlFire <46984098+GodlFire@users.noreply.github.com> Date: Mon Apr 1 19:08:48 2024 -0600 Merge pull request #10 from ArchipelagoMW/main Merge main into branch commit5e5792009c
Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Mon Apr 1 12:08:21 2024 -0500 LttP: delete playerSettings.yaml (#3062) commit9aeeeb077a
Author: CaitSith2 <d_good@caitsith2.com> Date: Mon Apr 1 06:07:56 2024 -0700 ALttP: Re-mark light/dark world regions after applying plando connections (#2964) commit35458380e6
Author: Bryce Wilson <gyroscope15@gmail.com> Date: Mon Apr 1 07:07:11 2024 -0600 Pokemon Emerald: Fix wonder trade race condition (#2983) commit4ac1866689
Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Mon Apr 1 08:06:31 2024 -0500 ALTTP: Skull Woods Inverted fix (#2980) commit4aa03da66e
Author: Fabian Dill <Berserker66@users.noreply.github.com> Date: Mon Apr 1 15:06:02 2024 +0200 Factorio: fix attempting to create savegame with not filename safe characters (#2842) commit24a03bc8b6
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Mon Apr 1 08:02:26 2024 -0500 KDL3: fix shuffled animals not actually being random (#3060) commitf813a7005f
Author: Aaron Wagener <mmmcheese158@gmail.com> Date: Sun Mar 31 11:11:10 2024 -0500 The Messenger: update docs formatting and fix outdated info (#3033) * The Messenger: update docs formatting and fix outdated info * address review feedback * 120 chars commit2a0b7e0def
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com> Date: Sun Mar 31 09:55:55 2024 -0600 CV64: A couple of very small docs corrections. (#3057) commit03d47e460e
Author: Ixrec <ericrhitchcock@gmail.com> Date: Sun Mar 31 16:55:08 2024 +0100 A Short Hike: Clarify installation instructions (#3058) * Clarify installation instructions * don't mention 'config' folder since it isn't created until the game starts commite546c0f7ff
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Sun Mar 31 10:50:31 2024 -0500 Yoshi's Island: add patch suffix (#3061) commit2ec93ba82a
Author: Bryce Wilson <gyroscope15@gmail.com> Date: Sun Mar 31 09:48:59 2024 -0600 Pokemon Emerald: Fix inconsistent location name (#3065) commit4e3d396394
Author: Aaron Wagener <mmmcheese158@gmail.com> Date: Sun Mar 31 10:47:11 2024 -0500 The Messenger: Fix precollected notes not being removed from the itempool (#3066) * The Messenger: fix precollected notes not being properly removed from pool * The Messenger: bump required client version commit72c53513f8
Author: Fabian Dill <Berserker66@users.noreply.github.com> Date: Sun Mar 31 03:57:59 2024 +0200 WebHost: fix /check creating broken yaml files if files don't end with a newline (#3063) commitb7ac6a4cbd
Author: Aaron Wagener <mmmcheese158@gmail.com> Date: Fri Mar 29 20:14:53 2024 -0500 The Messenger: Fix various portal shuffle issues (#2976) * put constants in a bit more sensical order * fix accidental incorrect scoping * fix plando rules not being respected * add docstrings for the plando functions * fix the portal output pools being overwritten * use shuffle and pop instead of removing by content so plando can go to the same area twice * move portal pool rebuilding outside mapping creation * remove plando_connection cleansing since it isn't shared with transition shuffle commit5f0112e783
Author: Zach Parks <zach@alliware.com> Date: Fri Mar 29 19:13:51 2024 -0500 Tracker: Add starting inventory to trackers and received items table. (#3051) commitbb481256de
Author: Aaron Wagener <mmmcheese158@gmail.com> Date: Thu Mar 28 21:48:40 2024 -0500 Core: Make fill failure error more human parseable (#3023) commit301d9de975
Author: Aaron Wagener <mmmcheese158@gmail.com> Date: Thu Mar 28 19:31:59 2024 -0500 Docs: adding games rework (#2892) * Docs: complete adding games.md rework * remove all the now unused images * review changes * address medic's review * address more comments commit9dc708978b
Author: Trevor L <80716066+TRPG0@users.noreply.github.com> Date: Thu Mar 28 18:26:58 2024 -0600 Hylics 2: Fix invalid multiworld data, use `self.random` instead of `self.multiworld.random` (#3001) * Hylics 2: Fixes * Rewrite loop commit4391d1f4c1
Author: Bryce Wilson <gyroscope15@gmail.com> Date: Thu Mar 28 18:05:39 2024 -0600 Pokemon Emerald: Fix opponents learning non-randomized TMs (#3025) commit5d9d4ed9f1
Author: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Fri Mar 29 01:01:31 2024 +0100 SoE: update to pyevermizer v0.48.0 (#3050) commitc97215e0e7
Author: Scipio Wright <scipiowright@gmail.com> Date: Thu Mar 28 17:23:37 2024 -0400 TUNIC: Minor refactor of the vanilla_portals function (#3009) * Remove unused, change an if to an elif * Remove unused import commiteb66886a90
Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Thu Mar 28 16:23:01 2024 -0500 SC2: Don't Filter Excluded Victory Locations (#3018) commitde860623d1
Author: Fabian Dill <Berserker66@users.noreply.github.com> Date: Thu Mar 28 22:21:56 2024 +0100 Core: differentiate between unknown worlds and broken worlds in error message (#2903) commit74b2bf5161
Author: Bryce Wilson <gyroscope15@gmail.com> Date: Thu Mar 28 15:20:55 2024 -0600 Pokemon Emerald: Exclude norman trainer location during norman goal (#3038) commit74ac66b032
Author: BadMagic100 <dempsey.sean@outlook.com> Date: Thu Mar 28 08:49:19 2024 -0700 Hollow Knight: 0.4.5 doc revamp and default options tweaks (#2982) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> commit80d7ac4164
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Thu Mar 28 09:41:32 2024 -0500 KDL3: RC1 Fixes and Enhancement (#3022) * fix cloudy park 4 rule, zero deathlink message * remove redundant door_shuffle bool when generic ER gets in, this whole function gets rewritten. So just clean it a little now. * properly fix deathlink messages, fix fill error * update docs commit77311719fa
Author: Ziktofel <ziktofel@gmail.com> Date: Thu Mar 28 15:38:34 2024 +0100 SC2: Fix HERC upgrades (#3044) commitcfc1541be9
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Thu Mar 28 15:19:32 2024 +0100 Docs: Mention the "last received item index" paradigm in the network protocol docs (#2989) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> commit4d954afd9b
Author: Scipio Wright <scipiowright@gmail.com> Date: Thu Mar 28 10:11:20 2024 -0400 TUNIC: Add link to AP plando guide to connection plando section of game page (#2993) commit17748a4bf1
Author: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com> Date: Thu Mar 28 10:00:10 2024 -0400 Launcher, Docs: Update UI and Set-Up Guide to Reference Options (#2950) commit9182fe563f
Author: Entropynines <163603868+Entropynines@users.noreply.github.com> Date: Thu Mar 28 06:56:35 2024 -0700 README: Remove outdated information about launchers (#2966) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> commitbcf223081f
Author: t3hf1gm3nt <59876300+t3hf1gm3nt@users.noreply.github.com> Date: Thu Mar 28 09:54:56 2024 -0400 TLOZ: Fix markdown issue with game info page (#2985) commitfa93488f3f
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Date: Thu Mar 28 09:46:00 2024 -0400 Docs: Consistent naming for "connection plando" (#2994) commitdb15dd4bde
Author: chandler05 <66492208+chandler05@users.noreply.github.com> Date: Thu Mar 28 08:45:19 2024 -0500 A Short Hike: Fix incorrect info in docs (#3016) commit01cdb0d761
Author: PoryGone <98504756+PoryGone@users.noreply.github.com> Date: Thu Mar 28 09:44:23 2024 -0400 SMW: Update World Doc for v2.0 Features (#3034) Co-authored-by: Scipio Wright <scipiowright@gmail.com> commitd0ac2b744e
Author: panicbit <panicbit@users.noreply.github.com> Date: Thu Mar 28 10:11:26 2024 +0100 LADX: fix local and non-local instrument placement (#2987) * LADX: fix local and non-local instrument placement * change confusing variable name commit14f5f0127e
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Date: Thu Mar 28 04:42:35 2024 -0400 Stardew Valley: Fix potential soft lock with vanilla tools and entrance randomizer + Performance improvement for vanilla tool/skills (#3002) * fix vanilla tool fishing rod requiring metal bars fix vanilla skill requiring previous level (it's always the same rule or more restrictive) * add test to ensure fishing rod need fish shop * fishing rod should be indexed from 0 like a mentally sane person would do. * fishing rod 0 isn't real, but it definitely can hurt you. * reeeeeeeee commitcf133dde72
Author: Bryce Wilson <gyroscope15@gmail.com> Date: Thu Mar 28 02:32:27 2024 -0600 Pokemon Emerald: Fix typo (#3020) commitca18121811
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Date: Thu Mar 28 04:27:49 2024 -0400 Stardew Valley: Fix generation fail with SVE and entrance rando when Wizard Tower is in place of Sprite Spring (#2970) commit1d4512590e
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Wed Mar 27 21:09:09 2024 +0100 requirements.txt: _ instead of - to make PyCharm happy (#3043) commitf7b415dab0
Author: agilbert1412 <alexgilbert@yahoo.com> Date: Tue Mar 26 19:40:58 2024 +0300 Stardew valley: Game version documentation (#2990) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> commit702f006c84
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com> Date: Tue Mar 26 07:31:36 2024 -0600 CV64: Change all mentions of "settings" to "options" and fix a broken link (#3015) commit98ce8f8844
Author: Yussur Mustafa Oraji <N00byKing@hotmail.de> Date: Tue Mar 26 14:29:25 2024 +0100 sm64ex: New Options API and WebHost fix (#2979) commitea47b90367
Author: Scipio Wright <scipiowright@gmail.com> Date: Tue Mar 26 09:25:41 2024 -0400 TUNIC: You can grapple down here without the ladder, neat (#3019) commitbf3856866c
Author: agilbert1412 <alexgilbert@yahoo.com> Date: Sun Mar 24 23:53:49 2024 +0300 Stardew Valley: presets with some of the new available values for existing settings to make them more accurate (#3014) commitc0368ae0d4
Author: Phaneros <31861583+MatthewMarinets@users.noreply.github.com> Date: Sun Mar 24 13:53:20 2024 -0700 SC2: Fixed missing upgrade from custom tracker (#3013) commit36c83073ad
Author: Salzkorn <salzkitty@gmail.com> Date: Sun Mar 24 21:52:41 2024 +0100 SC2 Tracker: Fix grouped items pointing at wrong item IDs (#2992) commit2b24539ea5
Author: Ziktofel <ziktofel@gmail.com> Date: Sun Mar 24 21:52:16 2024 +0100 SC2 Tracker: Use level tinting to let the player know which level he has of Replenishable Magazine (#2986) commit7e904a1c78
Author: Ziktofel <ziktofel@gmail.com> Date: Sun Mar 24 21:51:46 2024 +0100 SC2: Fix Kerrigan presence resolving when deciding which races should be used (#2978) commitbdd498db23
Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Fri Mar 22 15:36:27 2024 -0500 ALTTP: Fix #2290's crashes (#2973) commit355223b8f0
Author: PinkSwitch <52474902+PinkSwitch@users.noreply.github.com> Date: Fri Mar 22 15:35:00 2024 -0500 Yoshi's Island: Implement New Game (#2141) Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> commitaaa3472d5d
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Fri Mar 22 21:30:51 2024 +0100 The Witness: Fix seed bleed issue (#3008) commit96d93c1ae3
Author: chandler05 <66492208+chandler05@users.noreply.github.com> Date: Fri Mar 22 15:30:23 2024 -0500 A Short Hike: Add option to customize filler coin count (#3004) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> commitca549df20a
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Fri Mar 22 15:29:24 2024 -0500 CommonClient: fix hint tab overlapping (#2957) Co-authored-by: Remy Jette <remy@remyjette.com> commit44988d430d
Author: Star Rauchenberger <fefferburbia@gmail.com> Date: Fri Mar 22 15:28:41 2024 -0500 Lingo: Add trap weights option (#2837) commit11b32f17ab
Author: Danaël V <104455676+ReverM@users.noreply.github.com> Date: Fri Mar 22 12:46:14 2024 -0400 Docs: replacing "setting" to "option" in world docs (#2622) * Update contributing.md * Update contributing.md * Update contributing.md * Update contributing.md * Update contributing.md * Update contributing.md Added non-AP World specific information * Update contributing.md Fixed broken link * Some minor touchups * Update Contributing.md Draft for version with picture * Update contributing.md Small word change * Minor updates for conciseness, mostly * Changed all instances of settings to options in info and setup guides I combed through all world docs and swapped "setting" to "option" when this was refering to yaml options. I also changed a leftover "setting" in option.py * Update contributing.md * Update contributing.md * Update setup_en.md Woops I forgot one * Update Options.py Reverted changes regarding options.py * Update worlds/noita/docs/en_Noita.md Co-authored-by: Scipio Wright <scipiowright@gmail.com> * Update worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md revert change waiting for that page to be updated * Update worlds/witness/docs/setup_en.md * Update worlds/witness/docs/en_The Witness.md * Update worlds/soe/docs/multiworld_en.md Fixed Typo Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/witness/docs/en_The Witness.md * Update worlds/adventure/docs/en_Adventure.md * Update worlds/witness/docs/setup_en.md * Updated Stardew valley to hopefully get rid of the merge conflicts * Didn't work :dismay: * Delete worlds/sc2wol/docs/setup_en.md I think this will fix the merge issue * Now it should work * Woops --------- Co-authored-by: Scipio Wright <scipiowright@gmail.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> commit218cd45844
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Fri Mar 22 03:02:38 2024 -0500 APProcedurePatch: fix RLE/COPY incorrect sizing (#3006) * change class variables to instance variables * Update worlds/Files.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/Files.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * move required_extensions to tuple * fix missing tuple ellipsis * fix classvar mixup * rename tokens to _tokens. use hasattr * type hint cleanup * Update Files.py * check using isinstance instead * Update Files.py --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> commit4196bde597
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Date: Thu Mar 21 16:38:36 2024 -0400 Docs: Fixing special_range_names example (#3005) commit40f843f54d
Author: Star Rauchenberger <fefferburbia@gmail.com> Date: Thu Mar 21 11:00:53 2024 -0500 Lingo: Minor game data fixes (#3003) commitda333fbb0c
Author: GodlFire <46984098+GodlFire@users.noreply.github.com> Date: Thu Mar 21 09:52:16 2024 -0600 Shivers: Adds missing logic rule for skull dial door location (#2997) commit43084da23c
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Thu Mar 21 16:51:29 2024 +0100 The Witness: Fix newlines in Witness option tooltips (#2971) commit14816743fc
Author: Scipio Wright <scipiowright@gmail.com> Date: Thu Mar 21 11:50:07 2024 -0400 TUNIC: Shuffle Ladders option (#2919) commit30a0aa2c85
Author: Star Rauchenberger <fefferburbia@gmail.com> Date: Thu Mar 21 10:46:53 2024 -0500 Lingo: Add item/location groups (#2789) commitf4b7c28a33
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Wed Mar 20 17:45:32 2024 -0500 APProcedurePatch: hotfix changing class variables to instance variables (#2996) * change class variables to instance variables * Update worlds/Files.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/Files.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * move required_extensions to tuple * fix missing tuple ellipsis * fix classvar mixup * rename tokens to _tokens. use hasattr * type hint cleanup * Update Files.py * check using isinstance instead --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> commit12864f7b24
Author: chandler05 <66492208+chandler05@users.noreply.github.com> Date: Wed Mar 20 22:44:09 2024 +0100 A Short Hike: Implement New Game (#2577) commitdb02e9d2aa
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com> Date: Wed Mar 20 15:03:25 2024 -0600 Castlevania 64: Implement New Game (#2472) commit32315776ac
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Date: Wed Mar 20 16:57:45 2024 -0400 Stardew Valley: Fix extended family legendary fishes being locations with fishsanity set to exclude legendary (#2967) commite9620bea77
Author: Magnemania <89949176+Magnemania@users.noreply.github.com> Date: Wed Mar 20 16:56:00 2024 -0400 SM64: Goal Logic and Hint Bugfixes (#2886) commit183ca35bba
Author: qwint <qwint.42@gmail.com> Date: Wed Mar 20 08:39:37 2024 -0500 CommonClient: Port Casting Bug (#2975) commitfcaaa197a1
Author: TheLX5 <luisyuregi@gmail.com> Date: Wed Mar 20 05:56:19 2024 -0700 SMW: Fixes for Bowser being defeatable on Egg Hunt and CI2 DC room access (#2981) commit8f7b63a787
Author: TheLX5 <luisyuregi@gmail.com> Date: Wed Mar 20 05:56:04 2024 -0700 SMW: Blocksanity logic fixes (#2988) commit6f64bb9869
Author: Scipio Wright <scipiowright@gmail.com> Date: Wed Mar 20 08:46:31 2024 -0400 Noita: Remove newline from option description so it doesn't look bad on webhost (#2969) commitd0a9d0e2d1
Author: Bryce Wilson <gyroscope15@gmail.com> Date: Wed Mar 20 06:43:13 2024 -0600 Pokemon Emerald: Bump required client version (#2963) commit94650a02de
Author: Silvris <58583688+Silvris@users.noreply.github.com> Date: Tue Mar 19 17:08:29 2024 -0500 Core: implement APProcedurePatch and APTokenMixin (#2536) * initial work on procedure patch * more flexibility load default procedure for version 5 patches add args for procedure add default extension for tokens and bsdiff allow specifying additional required extensions for generation * pushing current changes to go fix tloz bug * move tokens into a separate inheritable class * forgot the commit to remove token from ProcedurePatch * further cleaning from bad commit * start on docstrings * further work on docstrings and typing * improve docstrings * fix incorrect docstring * cleanup * clean defaults and docstring * define interface that has only the bare minimum required for `Patch.create_rom_file` * change to dictionary.get * remove unnecessary if statement * update to explicitly check for procedure, restore compatible version and manual override * Update Files.py * remove struct uses * ensure returning bytes, add token type checking * Apply suggestions from code review Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * pep8 --------- Co-authored-by: beauxq <beauxq@yahoo.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * Changes pot_completed_list to a instance variable instead of global. Changes pot_completed_list to a instance variable instead of global. The global variable was unintentional and was causing missmatch in pre_fill which would cause generation error. * Removing deprecated options getter * Adds back fix from main branch Adds back fix from main branch * Removing messenger changes that somehow got on my branch? Removing messenger changes that somehow got on my branch? * Removing messenger changes that are somehow on the Shivers branch Removing messenger changes that are somehow on the Shivers branch * Still trying to remove Messenger changes on Shivers branch Still trying to remove Messenger changes on Shivers branch * Review comments addressed. Early lobby access set as default. Review comments addressed. Early lobby access set as default. * Review comments addressed Review comments addressed * Review comments addressed. Option for priority locations removed. Option to have ixupi captures a priority has been removed and can be added again if Priority Fill is changed. See Issues #3467. * Minor Change Minor Change * Fixed ID 10 T Error Fixed ID 10 T Error * Front door option added to slot data Front door option added to slot data * Add missing .value on slot data Add missing .value on slot data * Small change to slot data Small change to slot data * Small change to slot data Why didn't this change get pushed github... * Forgot list Forgot list --------- Co-authored-by: Kory Dondzila <korydondzila@gmail.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
245 lines
18 KiB
Python
245 lines
18 KiB
Python
from typing import Dict, TYPE_CHECKING
|
|
from collections.abc import Callable
|
|
from BaseClasses import CollectionState
|
|
from worlds.generic.Rules import forbid_item
|
|
|
|
if TYPE_CHECKING:
|
|
from . import ShiversWorld
|
|
|
|
|
|
def water_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Water Pot Bottom", "Water Pot Top", "Water Pot Bottom DUPE", "Water Pot Top DUPE"}, player) or \
|
|
state.has_all({"Water Pot Complete", "Water Pot Complete DUPE"}, player)
|
|
|
|
|
|
def wax_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Wax Pot Bottom", "Wax Pot Top", "Wax Pot Bottom DUPE", "Wax Pot Top DUPE"}, player) or \
|
|
state.has_all({"Wax Pot Complete", "Wax Pot Complete DUPE"}, player)
|
|
|
|
|
|
def ash_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Ash Pot Bottom", "Ash Pot Top", "Ash Pot Bottom DUPE", "Ash Pot Top DUPE"}, player) or \
|
|
state.has_all({"Ash Pot Complete", "Ash Pot Complete DUPE"}, player)
|
|
|
|
|
|
def oil_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Oil Pot Bottom", "Oil Pot Top", "Oil Pot Bottom DUPE", "Oil Pot Top DUPE"}, player) or \
|
|
state.has_all({"Oil Pot Complete", "Oil Pot Complete DUPE"}, player)
|
|
|
|
|
|
def cloth_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Cloth Pot Bottom", "Cloth Pot Top", "Cloth Pot Bottom DUPE", "Cloth Pot Top DUPE"}, player) or \
|
|
state.has_all({"Cloth Pot Complete", "Cloth Pot Complete DUPE"}, player)
|
|
|
|
|
|
def wood_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Wood Pot Bottom", "Wood Pot Top", "Wood Pot Bottom DUPE", "Wood Pot Top DUPE"}, player) or \
|
|
state.has_all({"Wood Pot Complete", "Wood Pot Complete DUPE"}, player)
|
|
|
|
|
|
def crystal_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Crystal Pot Bottom", "Crystal Pot Top", "Crystal Pot Bottom DUPE", "Crystal Pot Top DUPE"}, player) or \
|
|
state.has_all({"Crystal Pot Complete", "Crystal Pot Complete DUPE"}, player)
|
|
|
|
|
|
def sand_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Sand Pot Bottom", "Sand Pot Top", "Sand Pot Bottom DUPE", "Sand Pot Top DUPE"}, player) or \
|
|
state.has_all({"Sand Pot Complete", "Sand Pot Complete DUPE"}, player)
|
|
|
|
|
|
def metal_capturable(state: CollectionState, player: int) -> bool:
|
|
return state.has_all({"Metal Pot Bottom", "Metal Pot Top", "Metal Pot Bottom DUPE", "Metal Pot Top DUPE"}, player) or \
|
|
state.has_all({"Metal Pot Complete", "Metal Pot Complete DUPE"}, player)
|
|
|
|
|
|
def lightning_capturable(state: CollectionState, player: int) -> bool:
|
|
return (first_nine_ixupi_capturable(state, player) or state.multiworld.worlds[player].options.early_lightning.value) \
|
|
and (state.has_all({"Lightning Pot Bottom", "Lightning Pot Top", "Lightning Pot Bottom DUPE", "Lightning Pot Top DUPE"}, player) or \
|
|
state.has_all({"Lightning Pot Complete", "Lightning Pot Complete DUPE"}, player))
|
|
|
|
|
|
def beths_body_available(state: CollectionState, player: int) -> bool:
|
|
return (first_nine_ixupi_capturable(state, player) or state.multiworld.worlds[player].options.early_beth.value) \
|
|
and state.can_reach("Generator", "Region", player)
|
|
|
|
|
|
def first_nine_ixupi_capturable(state: CollectionState, player: int) -> bool:
|
|
return water_capturable(state, player) and wax_capturable(state, player) \
|
|
and ash_capturable(state, player) and oil_capturable(state, player) \
|
|
and cloth_capturable(state, player) and wood_capturable(state, player) \
|
|
and crystal_capturable(state, player) and sand_capturable(state, player) \
|
|
and metal_capturable(state, player)
|
|
|
|
|
|
def all_skull_dials_available(state: CollectionState, player: int) -> bool:
|
|
return state.can_reach("Prehistoric", "Region", player) and state.can_reach("Tar River", "Region", player) \
|
|
and state.can_reach("Egypt", "Region", player) and state.can_reach("Burial", "Region", player) \
|
|
and state.can_reach("Gods Room", "Region", player) and state.can_reach("Werewolf", "Region", player)
|
|
|
|
|
|
def get_rules_lookup(player: int):
|
|
rules_lookup: Dict[str, Dict[str, Callable[[CollectionState], bool]]] = {
|
|
"entrances": {
|
|
"To Office Elevator From Underground Blue Tunnels": lambda state: state.has("Key for Office Elevator", player),
|
|
"To Office Elevator From Office": lambda state: state.has("Key for Office Elevator", player),
|
|
"To Bedroom Elevator From Office": lambda state: state.has_all({"Key for Bedroom Elevator", "Crawling"}, player),
|
|
"To Office From Bedroom Elevator": lambda state: state.has_all({"Key for Bedroom Elevator", "Crawling"}, player),
|
|
"To Three Floor Elevator From Maintenance Tunnels": lambda state: state.has("Key for Three Floor Elevator", player),
|
|
"To Three Floor Elevator From Blue Maze Bottom": lambda state: state.has("Key for Three Floor Elevator", player),
|
|
"To Three Floor Elevator From Blue Maze Top": lambda state: state.has("Key for Three Floor Elevator", player),
|
|
"To Workshop": lambda state: state.has("Key for Workshop", player),
|
|
"To Lobby From Office": lambda state: state.has("Key for Office", player),
|
|
"To Office From Lobby": lambda state: state.has("Key for Office", player),
|
|
"To Library From Lobby": lambda state: state.has("Key for Library Room", player),
|
|
"To Lobby From Library": lambda state: state.has("Key for Library Room", player),
|
|
"To Prehistoric From Lobby": lambda state: state.has("Key for Prehistoric Room", player),
|
|
"To Lobby From Prehistoric": lambda state: state.has("Key for Prehistoric Room", player),
|
|
"To Greenhouse": lambda state: state.has("Key for Greenhouse Room", player),
|
|
"To Ocean From Prehistoric": lambda state: state.has("Key for Ocean Room", player),
|
|
"To Prehistoric From Ocean": lambda state: state.has("Key for Ocean Room", player),
|
|
"To Projector Room": lambda state: state.has("Key for Projector Room", player),
|
|
"To Generator": lambda state: state.has("Key for Generator Room", player),
|
|
"To Lobby From Egypt": lambda state: state.has("Key for Egypt Room", player),
|
|
"To Egypt From Lobby": lambda state: state.has("Key for Egypt Room", player),
|
|
"To Janitor Closet": lambda state: state.has("Key for Janitor Closet", player),
|
|
"To Shaman From Burial": lambda state: state.has("Key for Shaman Room", player),
|
|
"To Burial From Shaman": lambda state: state.has("Key for Shaman Room", player),
|
|
"To Inventions From UFO": lambda state: state.has("Key for UFO Room", player),
|
|
"To UFO From Inventions": lambda state: state.has("Key for UFO Room", player),
|
|
"To Torture From Inventions": lambda state: state.has("Key for Torture Room", player),
|
|
"To Inventions From Torture": lambda state: state.has("Key for Torture Room", player),
|
|
"To Torture": lambda state: state.has("Key for Puzzle Room", player),
|
|
"To Puzzle Room Mastermind From Torture": lambda state: state.has("Key for Puzzle Room", player),
|
|
"To Bedroom": lambda state: state.has("Key for Bedroom", player),
|
|
"To Underground Lake From Underground Tunnels": lambda state: state.has("Key for Underground Lake Room", player),
|
|
"To Underground Tunnels From Underground Lake": lambda state: state.has("Key for Underground Lake Room", player),
|
|
"To Outside From Lobby": lambda state: state.has("Key for Front Door", player),
|
|
"To Lobby From Outside": lambda state: state.has("Key for Front Door", player),
|
|
"To Maintenance Tunnels From Theater Back Hallways": lambda state: state.has("Crawling", player),
|
|
"To Blue Maze From Egypt": lambda state: state.has("Crawling", player),
|
|
"To Egypt From Blue Maze": lambda state: state.has("Crawling", player),
|
|
"To Lobby From Tar River": lambda state: (state.has("Crawling", player) and oil_capturable(state, player)),
|
|
"To Tar River From Lobby": lambda state: (state.has("Crawling", player) and oil_capturable(state, player) and state.can_reach("Tar River", "Region", player)),
|
|
"To Burial From Egypt": lambda state: state.can_reach("Egypt", "Region", player),
|
|
"To Gods Room From Anansi": lambda state: state.can_reach("Gods Room", "Region", player),
|
|
"To Slide Room": lambda state: all_skull_dials_available(state, player),
|
|
"To Lobby From Slide Room": lambda state: beths_body_available(state, player),
|
|
"To Water Capture From Janitor Closet": lambda state: cloth_capturable(state, player)
|
|
},
|
|
"locations_required": {
|
|
"Puzzle Solved Anansi Musicbox": lambda state: state.can_reach("Clock Tower", "Region", player),
|
|
"Accessible: Storage: Janitor Closet": lambda state: cloth_capturable(state, player),
|
|
"Accessible: Storage: Tar River": lambda state: oil_capturable(state, player),
|
|
"Accessible: Storage: Theater": lambda state: state.can_reach("Projector Room", "Region", player),
|
|
"Accessible: Storage: Slide": lambda state: beths_body_available(state, player) and state.can_reach("Slide Room", "Region", player),
|
|
"Ixupi Captured Water": lambda state: water_capturable(state, player),
|
|
"Ixupi Captured Wax": lambda state: wax_capturable(state, player),
|
|
"Ixupi Captured Ash": lambda state: ash_capturable(state, player),
|
|
"Ixupi Captured Oil": lambda state: oil_capturable(state, player),
|
|
"Ixupi Captured Cloth": lambda state: cloth_capturable(state, player),
|
|
"Ixupi Captured Wood": lambda state: wood_capturable(state, player),
|
|
"Ixupi Captured Crystal": lambda state: crystal_capturable(state, player),
|
|
"Ixupi Captured Sand": lambda state: sand_capturable(state, player),
|
|
"Ixupi Captured Metal": lambda state: metal_capturable(state, player),
|
|
"Final Riddle: Planets Aligned": lambda state: state.can_reach("Fortune Teller", "Region", player),
|
|
"Final Riddle: Norse God Stone Message": lambda state: (state.can_reach("Fortune Teller", "Region", player) and state.can_reach("UFO", "Region", player)),
|
|
"Final Riddle: Beth's Body Page 17": lambda state: beths_body_available(state, player),
|
|
"Final Riddle: Guillotine Dropped": lambda state: beths_body_available(state, player),
|
|
"Puzzle Solved Skull Dial Door": lambda state: all_skull_dials_available(state, player),
|
|
},
|
|
"locations_puzzle_hints": {
|
|
"Puzzle Solved Clock Tower Door": lambda state: state.can_reach("Three Floor Elevator", "Region", player),
|
|
"Puzzle Solved Clock Chains": lambda state: state.can_reach("Bedroom", "Region", player),
|
|
"Puzzle Solved Shaman Drums": lambda state: state.can_reach("Clock Tower", "Region", player),
|
|
"Puzzle Solved Red Door": lambda state: state.can_reach("Maintenance Tunnels", "Region", player),
|
|
"Puzzle Solved UFO Symbols": lambda state: state.can_reach("Library", "Region", player),
|
|
"Puzzle Solved Maze Door": lambda state: state.can_reach("Projector Room", "Region", player),
|
|
"Puzzle Solved Theater Door": lambda state: state.can_reach("Underground Lake", "Region", player),
|
|
"Puzzle Solved Columns of RA": lambda state: state.can_reach("Underground Lake", "Region", player),
|
|
"Final Riddle: Guillotine Dropped": lambda state: (beths_body_available(state, player) and state.can_reach("Underground Lake", "Region", player))
|
|
},
|
|
"elevators": {
|
|
"Puzzle Solved Office Elevator": lambda state: ((state.can_reach("Underground Lake", "Region", player) or state.can_reach("Office", "Region", player))
|
|
and state.has("Key for Office Elevator", player)),
|
|
"Puzzle Solved Bedroom Elevator": lambda state: (state.can_reach("Office", "Region", player) and state.has_all({"Key for Bedroom Elevator","Crawling"}, player)),
|
|
"Puzzle Solved Three Floor Elevator": lambda state: ((state.can_reach("Maintenance Tunnels", "Region", player) or state.can_reach("Blue Maze", "Region", player))
|
|
and state.has("Key for Three Floor Elevator", player))
|
|
},
|
|
"lightning": {
|
|
"Ixupi Captured Lightning": lambda state: lightning_capturable(state, player)
|
|
}
|
|
}
|
|
return rules_lookup
|
|
|
|
|
|
def set_rules(world: "ShiversWorld") -> None:
|
|
multiworld = world.multiworld
|
|
player = world.player
|
|
|
|
rules_lookup = get_rules_lookup(player)
|
|
# Set required entrance rules
|
|
for entrance_name, rule in rules_lookup["entrances"].items():
|
|
multiworld.get_entrance(entrance_name, player).access_rule = rule
|
|
|
|
# Set required location rules
|
|
for location_name, rule in rules_lookup["locations_required"].items():
|
|
multiworld.get_location(location_name, player).access_rule = rule
|
|
|
|
# Set option location rules
|
|
if world.options.puzzle_hints_required.value:
|
|
for location_name, rule in rules_lookup["locations_puzzle_hints"].items():
|
|
multiworld.get_location(location_name, player).access_rule = rule
|
|
if world.options.elevators_stay_solved.value:
|
|
for location_name, rule in rules_lookup["elevators"].items():
|
|
multiworld.get_location(location_name, player).access_rule = rule
|
|
if world.options.early_lightning.value:
|
|
for location_name, rule in rules_lookup["lightning"].items():
|
|
multiworld.get_location(location_name, player).access_rule = rule
|
|
|
|
# Register indirect conditions
|
|
multiworld.register_indirect_condition(world.get_region("Burial"), world.get_entrance("To Slide Room"))
|
|
multiworld.register_indirect_condition(world.get_region("Egypt"), world.get_entrance("To Slide Room"))
|
|
multiworld.register_indirect_condition(world.get_region("Gods Room"), world.get_entrance("To Slide Room"))
|
|
multiworld.register_indirect_condition(world.get_region("Prehistoric"), world.get_entrance("To Slide Room"))
|
|
multiworld.register_indirect_condition(world.get_region("Tar River"), world.get_entrance("To Slide Room"))
|
|
multiworld.register_indirect_condition(world.get_region("Werewolf"), world.get_entrance("To Slide Room"))
|
|
multiworld.register_indirect_condition(world.get_region("Prehistoric"), world.get_entrance("To Tar River From Lobby"))
|
|
|
|
# forbid cloth in janitor closet and oil in tar river
|
|
forbid_item(multiworld.get_location("Accessible: Storage: Janitor Closet", player), "Cloth Pot Bottom DUPE", player)
|
|
forbid_item(multiworld.get_location("Accessible: Storage: Janitor Closet", player), "Cloth Pot Top DUPE", player)
|
|
forbid_item(multiworld.get_location("Accessible: Storage: Janitor Closet", player), "Cloth Pot Complete DUPE", player)
|
|
forbid_item(multiworld.get_location("Accessible: Storage: Tar River", player), "Oil Pot Bottom DUPE", player)
|
|
forbid_item(multiworld.get_location("Accessible: Storage: Tar River", player), "Oil Pot Top DUPE", player)
|
|
forbid_item(multiworld.get_location("Accessible: Storage: Tar River", player), "Oil Pot Complete DUPE", player)
|
|
|
|
# Filler Item Forbids
|
|
forbid_item(multiworld.get_location("Puzzle Solved Lyre", player), "Easier Lyre", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Water", player), "Water Always Available in Lobby", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Library", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Anansi Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Shaman Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Ash", player), "Ash Always Available in Office", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Ash", player), "Ash Always Available in Burial Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Oil", player), "Oil Always Available in Prehistoric Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Cloth", player), "Cloth Always Available in Egypt", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Cloth", player), "Cloth Always Available in Burial Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wood", player), "Wood Always Available in Workshop", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wood", player), "Wood Always Available in Blue Maze", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wood", player), "Wood Always Available in Pegasus Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Wood", player), "Wood Always Available in Gods Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Crystal", player), "Crystal Always Available in Lobby", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Crystal", player), "Crystal Always Available in Ocean", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Sand", player), "Sand Always Available in Plants Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Sand", player), "Sand Always Available in Ocean", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Metal", player), "Metal Always Available in Projector Room", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Metal", player), "Metal Always Available in Bedroom", player)
|
|
forbid_item(multiworld.get_location("Ixupi Captured Metal", player), "Metal Always Available in Prehistoric", player)
|
|
|
|
# Set completion condition
|
|
multiworld.completion_condition[player] = lambda state: ((
|
|
water_capturable(state, player) + wax_capturable(state, player) + ash_capturable(state, player) \
|
|
+ oil_capturable(state, player) + cloth_capturable(state, player) + wood_capturable(state, player) \
|
|
+ crystal_capturable(state, player) + sand_capturable(state, player) + metal_capturable(state, player) \
|
|
+ lightning_capturable(state, player)) >= world.options.ixupi_captures_needed.value)
|