mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Shivers: New features and removes two missed options using the old options API (#3287)
* 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: 8477d3c85e579200Author: 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 commit5e5792009cAuthor: Alchav <59858495+Alchav@users.noreply.github.com> Date: Mon Apr 1 12:08:21 2024 -0500 LttP: delete playerSettings.yaml (#3062) commit9aeeeb077aAuthor: 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) commit35458380e6Author: Bryce Wilson <gyroscope15@gmail.com> Date: Mon Apr 1 07:07:11 2024 -0600 Pokemon Emerald: Fix wonder trade race condition (#2983) commit4ac1866689Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Mon Apr 1 08:06:31 2024 -0500 ALTTP: Skull Woods Inverted fix (#2980) commit4aa03da66eAuthor: 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) commit24a03bc8b6Author: 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) commitf813a7005fAuthor: 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 commit2a0b7e0defAuthor: 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) commit03d47e460eAuthor: 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 commite546c0f7ffAuthor: Silvris <58583688+Silvris@users.noreply.github.com> Date: Sun Mar 31 10:50:31 2024 -0500 Yoshi's Island: add patch suffix (#3061) commit2ec93ba82aAuthor: Bryce Wilson <gyroscope15@gmail.com> Date: Sun Mar 31 09:48:59 2024 -0600 Pokemon Emerald: Fix inconsistent location name (#3065) commit4e3d396394Author: 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 commit72c53513f8Author: 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) commitb7ac6a4cbdAuthor: 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 commit5f0112e783Author: 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) commitbb481256deAuthor: Aaron Wagener <mmmcheese158@gmail.com> Date: Thu Mar 28 21:48:40 2024 -0500 Core: Make fill failure error more human parseable (#3023) commit301d9de975Author: 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 commit9dc708978bAuthor: 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 commit4391d1f4c1Author: Bryce Wilson <gyroscope15@gmail.com> Date: Thu Mar 28 18:05:39 2024 -0600 Pokemon Emerald: Fix opponents learning non-randomized TMs (#3025) commit5d9d4ed9f1Author: 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) commitc97215e0e7Author: 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 commiteb66886a90Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Thu Mar 28 16:23:01 2024 -0500 SC2: Don't Filter Excluded Victory Locations (#3018) commitde860623d1Author: 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) commit74b2bf5161Author: Bryce Wilson <gyroscope15@gmail.com> Date: Thu Mar 28 15:20:55 2024 -0600 Pokemon Emerald: Exclude norman trainer location during norman goal (#3038) commit74ac66b032Author: 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> commit80d7ac4164Author: 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 commit77311719faAuthor: Ziktofel <ziktofel@gmail.com> Date: Thu Mar 28 15:38:34 2024 +0100 SC2: Fix HERC upgrades (#3044) commitcfc1541be9Author: 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> commit4d954afd9bAuthor: 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) commit17748a4bf1Author: 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) commit9182fe563fAuthor: 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> commitbcf223081fAuthor: 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) commitfa93488f3fAuthor: 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) commitdb15dd4bdeAuthor: 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) commit01cdb0d761Author: 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> commitd0ac2b744eAuthor: 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 commit14f5f0127eAuthor: 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 commitcf133dde72Author: Bryce Wilson <gyroscope15@gmail.com> Date: Thu Mar 28 02:32:27 2024 -0600 Pokemon Emerald: Fix typo (#3020) commitca18121811Author: 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) commit1d4512590eAuthor: 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) commitf7b415dab0Author: 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> commit702f006c84Author: 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) commit98ce8f8844Author: Yussur Mustafa Oraji <N00byKing@hotmail.de> Date: Tue Mar 26 14:29:25 2024 +0100 sm64ex: New Options API and WebHost fix (#2979) commitea47b90367Author: 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) commitbf3856866cAuthor: 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) commitc0368ae0d4Author: Phaneros <31861583+MatthewMarinets@users.noreply.github.com> Date: Sun Mar 24 13:53:20 2024 -0700 SC2: Fixed missing upgrade from custom tracker (#3013) commit36c83073adAuthor: Salzkorn <salzkitty@gmail.com> Date: Sun Mar 24 21:52:41 2024 +0100 SC2 Tracker: Fix grouped items pointing at wrong item IDs (#2992) commit2b24539ea5Author: 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) commit7e904a1c78Author: 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) commitbdd498db23Author: Alchav <59858495+Alchav@users.noreply.github.com> Date: Fri Mar 22 15:36:27 2024 -0500 ALTTP: Fix #2290's crashes (#2973) commit355223b8f0Author: 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> commitaaa3472d5dAuthor: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Fri Mar 22 21:30:51 2024 +0100 The Witness: Fix seed bleed issue (#3008) commit96d93c1ae3Author: 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> commitca549df20aAuthor: 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> commit44988d430dAuthor: Star Rauchenberger <fefferburbia@gmail.com> Date: Fri Mar 22 15:28:41 2024 -0500 Lingo: Add trap weights option (#2837) commit11b32f17abAuthor: 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> commit218cd45844Author: 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> commit4196bde597Author: 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) commit40f843f54dAuthor: Star Rauchenberger <fefferburbia@gmail.com> Date: Thu Mar 21 11:00:53 2024 -0500 Lingo: Minor game data fixes (#3003) commitda333fbb0cAuthor: 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) commit43084da23cAuthor: 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) commit14816743fcAuthor: Scipio Wright <scipiowright@gmail.com> Date: Thu Mar 21 11:50:07 2024 -0400 TUNIC: Shuffle Ladders option (#2919) commit30a0aa2c85Author: Star Rauchenberger <fefferburbia@gmail.com> Date: Thu Mar 21 10:46:53 2024 -0500 Lingo: Add item/location groups (#2789) commitf4b7c28a33Author: 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> commit12864f7b24Author: chandler05 <66492208+chandler05@users.noreply.github.com> Date: Wed Mar 20 22:44:09 2024 +0100 A Short Hike: Implement New Game (#2577) commitdb02e9d2aaAuthor: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com> Date: Wed Mar 20 15:03:25 2024 -0600 Castlevania 64: Implement New Game (#2472) commit32315776acAuthor: 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) commite9620bea77Author: Magnemania <89949176+Magnemania@users.noreply.github.com> Date: Wed Mar 20 16:56:00 2024 -0400 SM64: Goal Logic and Hint Bugfixes (#2886) commit183ca35bbaAuthor: qwint <qwint.42@gmail.com> Date: Wed Mar 20 08:39:37 2024 -0500 CommonClient: Port Casting Bug (#2975) commitfcaaa197a1Author: 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) commit8f7b63a787Author: TheLX5 <luisyuregi@gmail.com> Date: Wed Mar 20 05:56:04 2024 -0700 SMW: Blocksanity logic fixes (#2988) commit6f64bb9869Author: 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) commitd0a9d0e2d1Author: Bryce Wilson <gyroscope15@gmail.com> Date: Wed Mar 20 06:43:13 2024 -0600 Pokemon Emerald: Bump required client version (#2963) commit94650a02deAuthor: 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>
This commit is contained in:
@@ -33,28 +33,38 @@ item_table = {
|
|||||||
"Lightning Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 17, "pot"),
|
"Lightning Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 17, "pot"),
|
||||||
"Sand Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 18, "pot"),
|
"Sand Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 18, "pot"),
|
||||||
"Metal Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 19, "pot"),
|
"Metal Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 19, "pot"),
|
||||||
|
"Water Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 20, "pot_type2"),
|
||||||
|
"Wax Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 21, "pot_type2"),
|
||||||
|
"Ash Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 22, "pot_type2"),
|
||||||
|
"Oil Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 23, "pot_type2"),
|
||||||
|
"Cloth Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 24, "pot_type2"),
|
||||||
|
"Wood Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 25, "pot_type2"),
|
||||||
|
"Crystal Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 26, "pot_type2"),
|
||||||
|
"Lightning Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 27, "pot_type2"),
|
||||||
|
"Sand Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 28, "pot_type2"),
|
||||||
|
"Metal Pot Complete": ItemData(SHIVERS_ITEM_ID_OFFSET + 29, "pot_type2"),
|
||||||
|
|
||||||
#Keys
|
#Keys
|
||||||
"Key for Office Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 20, "key"),
|
"Key for Office Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 30, "key"),
|
||||||
"Key for Bedroom Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 21, "key"),
|
"Key for Bedroom Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 31, "key"),
|
||||||
"Key for Three Floor Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 22, "key"),
|
"Key for Three Floor Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
|
||||||
"Key for Workshop": ItemData(SHIVERS_ITEM_ID_OFFSET + 23, "key"),
|
"Key for Workshop": ItemData(SHIVERS_ITEM_ID_OFFSET + 33, "key"),
|
||||||
"Key for Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 24, "key"),
|
"Key for Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 34, "key"),
|
||||||
"Key for Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 25, "key"),
|
"Key for Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 35, "key"),
|
||||||
"Key for Greenhouse Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 26, "key"),
|
"Key for Greenhouse Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 36, "key"),
|
||||||
"Key for Ocean Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 27, "key"),
|
"Key for Ocean Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 37, "key"),
|
||||||
"Key for Projector Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 28, "key"),
|
"Key for Projector Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 38, "key"),
|
||||||
"Key for Generator Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 29, "key"),
|
"Key for Generator Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 39, "key"),
|
||||||
"Key for Egypt Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 30, "key"),
|
"Key for Egypt Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 40, "key"),
|
||||||
"Key for Library Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 31, "key"),
|
"Key for Library Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 41, "key"),
|
||||||
"Key for Shaman Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
|
"Key for Shaman Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 42, "key"),
|
||||||
"Key for UFO Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 33, "key"),
|
"Key for UFO Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 43, "key"),
|
||||||
"Key for Torture Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 34, "key"),
|
"Key for Torture Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 44, "key"),
|
||||||
"Key for Puzzle Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 35, "key"),
|
"Key for Puzzle Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 45, "key"),
|
||||||
"Key for Bedroom": ItemData(SHIVERS_ITEM_ID_OFFSET + 36, "key"),
|
"Key for Bedroom": ItemData(SHIVERS_ITEM_ID_OFFSET + 46, "key"),
|
||||||
"Key for Underground Lake Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 37, "key"),
|
"Key for Underground Lake Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 47, "key"),
|
||||||
"Key for Janitor Closet": ItemData(SHIVERS_ITEM_ID_OFFSET + 38, "key"),
|
"Key for Janitor Closet": ItemData(SHIVERS_ITEM_ID_OFFSET + 48, "key"),
|
||||||
"Key for Front Door": ItemData(SHIVERS_ITEM_ID_OFFSET + 39, "key-optional"),
|
"Key for Front Door": ItemData(SHIVERS_ITEM_ID_OFFSET + 49, "key-optional"),
|
||||||
|
|
||||||
#Abilities
|
#Abilities
|
||||||
"Crawling": ItemData(SHIVERS_ITEM_ID_OFFSET + 50, "ability"),
|
"Crawling": ItemData(SHIVERS_ITEM_ID_OFFSET + 50, "ability"),
|
||||||
@@ -83,6 +93,16 @@ item_table = {
|
|||||||
"Lightning Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 87, "potduplicate"),
|
"Lightning Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 87, "potduplicate"),
|
||||||
"Sand Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 88, "potduplicate"),
|
"Sand Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 88, "potduplicate"),
|
||||||
"Metal Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 89, "potduplicate"),
|
"Metal Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 89, "potduplicate"),
|
||||||
|
"Water Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 140, "potduplicate_type2"),
|
||||||
|
"Wax Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 141, "potduplicate_type2"),
|
||||||
|
"Ash Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 142, "potduplicate_type2"),
|
||||||
|
"Oil Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 143, "potduplicate_type2"),
|
||||||
|
"Cloth Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 144, "potduplicate_type2"),
|
||||||
|
"Wood Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 145, "potduplicate_type2"),
|
||||||
|
"Crystal Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 146, "potduplicate_type2"),
|
||||||
|
"Lightning Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 147, "potduplicate_type2"),
|
||||||
|
"Sand Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 148, "potduplicate_type2"),
|
||||||
|
"Metal Pot Complete DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 149, "potduplicate_type2"),
|
||||||
|
|
||||||
#Filler
|
#Filler
|
||||||
"Empty": ItemData(SHIVERS_ITEM_ID_OFFSET + 90, "filler"),
|
"Empty": ItemData(SHIVERS_ITEM_ID_OFFSET + 90, "filler"),
|
||||||
|
|||||||
@@ -1,21 +1,37 @@
|
|||||||
from Options import Choice, DefaultOnToggle, Toggle, PerGameCommonOptions
|
from Options import Choice, DefaultOnToggle, Toggle, PerGameCommonOptions, Range
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
|
class IxupiCapturesNeeded(Range):
|
||||||
|
"""
|
||||||
|
Number of Ixupi Captures needed for goal condition.
|
||||||
|
"""
|
||||||
|
display_name = "Number of Ixupi Captures Needed"
|
||||||
|
range_start = 1
|
||||||
|
range_end = 10
|
||||||
|
default = 10
|
||||||
|
|
||||||
class LobbyAccess(Choice):
|
class LobbyAccess(Choice):
|
||||||
"""Chooses how keys needed to reach the lobby are placed.
|
"""
|
||||||
|
Chooses how keys needed to reach the lobby are placed.
|
||||||
- Normal: Keys are placed anywhere
|
- Normal: Keys are placed anywhere
|
||||||
- Early: Keys are placed early
|
- Early: Keys are placed early
|
||||||
- Local: Keys are placed locally"""
|
- Local: Keys are placed locally
|
||||||
|
"""
|
||||||
display_name = "Lobby Access"
|
display_name = "Lobby Access"
|
||||||
option_normal = 0
|
option_normal = 0
|
||||||
option_early = 1
|
option_early = 1
|
||||||
option_local = 2
|
option_local = 2
|
||||||
|
default = 1
|
||||||
|
|
||||||
class PuzzleHintsRequired(DefaultOnToggle):
|
class PuzzleHintsRequired(DefaultOnToggle):
|
||||||
"""If turned on puzzle hints will be available before the corresponding puzzle is required. For example: The Shaman
|
"""
|
||||||
Drums puzzle will be placed after access to the security cameras which give you the solution. Turning this off
|
If turned on puzzle hints/solutions will be available before the corresponding puzzle is required.
|
||||||
allows for greater randomization."""
|
|
||||||
|
For example: The Red Door puzzle will be logically required only after access to the Beth's Address Book which gives you the solution.
|
||||||
|
|
||||||
|
Turning this off allows for greater randomization.
|
||||||
|
"""
|
||||||
display_name = "Puzzle Hints Required"
|
display_name = "Puzzle Hints Required"
|
||||||
|
|
||||||
class InformationPlaques(Toggle):
|
class InformationPlaques(Toggle):
|
||||||
@@ -26,7 +42,9 @@ class InformationPlaques(Toggle):
|
|||||||
display_name = "Include Information Plaques"
|
display_name = "Include Information Plaques"
|
||||||
|
|
||||||
class FrontDoorUsable(Toggle):
|
class FrontDoorUsable(Toggle):
|
||||||
"""Adds a key to unlock the front door of the museum."""
|
"""
|
||||||
|
Adds a key to unlock the front door of the museum.
|
||||||
|
"""
|
||||||
display_name = "Front Door Usable"
|
display_name = "Front Door Usable"
|
||||||
|
|
||||||
class ElevatorsStaySolved(DefaultOnToggle):
|
class ElevatorsStaySolved(DefaultOnToggle):
|
||||||
@@ -37,7 +55,9 @@ class ElevatorsStaySolved(DefaultOnToggle):
|
|||||||
display_name = "Elevators Stay Solved"
|
display_name = "Elevators Stay Solved"
|
||||||
|
|
||||||
class EarlyBeth(DefaultOnToggle):
|
class EarlyBeth(DefaultOnToggle):
|
||||||
"""Beth's body is open at the start of the game. This allows any pot piece to be placed in the slide and early checks on the second half of the final riddle."""
|
"""
|
||||||
|
Beth's body is open at the start of the game. This allows any pot piece to be placed in the slide and early checks on the second half of the final riddle.
|
||||||
|
"""
|
||||||
display_name = "Early Beth"
|
display_name = "Early Beth"
|
||||||
|
|
||||||
class EarlyLightning(Toggle):
|
class EarlyLightning(Toggle):
|
||||||
@@ -47,9 +67,34 @@ class EarlyLightning(Toggle):
|
|||||||
"""
|
"""
|
||||||
display_name = "Early Lightning"
|
display_name = "Early Lightning"
|
||||||
|
|
||||||
|
class LocationPotPieces(Choice):
|
||||||
|
"""
|
||||||
|
Chooses where pot pieces will be located within the multiworld.
|
||||||
|
- Own World: Pot pieces will be located within your own world
|
||||||
|
- Different World: Pot pieces will be located in another world
|
||||||
|
- Any World: Pot pieces will be located in any world
|
||||||
|
"""
|
||||||
|
display_name = "Location of Pot Pieces"
|
||||||
|
option_own_world = 0
|
||||||
|
option_different_world = 1
|
||||||
|
option_any_world = 2
|
||||||
|
|
||||||
|
class FullPots(Choice):
|
||||||
|
"""
|
||||||
|
Chooses if pots will be in pieces or already completed
|
||||||
|
- Pieces: Only pot pieces will be added to the item pool
|
||||||
|
- Complete: Only completed pots will be added to the item pool
|
||||||
|
- Mixed: Each pot will be randomly chosen to be pieces or already completed.
|
||||||
|
"""
|
||||||
|
display_name = "Full Pots"
|
||||||
|
option_pieces = 0
|
||||||
|
option_complete = 1
|
||||||
|
option_mixed = 2
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ShiversOptions(PerGameCommonOptions):
|
class ShiversOptions(PerGameCommonOptions):
|
||||||
|
ixupi_captures_needed: IxupiCapturesNeeded
|
||||||
lobby_access: LobbyAccess
|
lobby_access: LobbyAccess
|
||||||
puzzle_hints_required: PuzzleHintsRequired
|
puzzle_hints_required: PuzzleHintsRequired
|
||||||
include_information_plaques: InformationPlaques
|
include_information_plaques: InformationPlaques
|
||||||
@@ -57,3 +102,5 @@ class ShiversOptions(PerGameCommonOptions):
|
|||||||
elevators_stay_solved: ElevatorsStaySolved
|
elevators_stay_solved: ElevatorsStaySolved
|
||||||
early_beth: EarlyBeth
|
early_beth: EarlyBeth
|
||||||
early_lightning: EarlyLightning
|
early_lightning: EarlyLightning
|
||||||
|
location_pot_pieces: LocationPotPieces
|
||||||
|
full_pots: FullPots
|
||||||
|
|||||||
@@ -8,58 +8,58 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
|
|
||||||
def water_capturable(state: CollectionState, player: int) -> bool:
|
def water_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Lobby", "Region", player) or (state.can_reach("Janitor Closet", "Region", player) and cloth_capturable(state, player))) \
|
return state.has_all({"Water Pot Bottom", "Water Pot Top", "Water Pot Bottom DUPE", "Water Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Water Pot Bottom", "Water Pot Top", "Water Pot Bottom DUPE", "Water Pot Top DUPE"}, player)
|
state.has_all({"Water Pot Complete", "Water Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def wax_capturable(state: CollectionState, player: int) -> bool:
|
def wax_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Library", "Region", player) or state.can_reach("Anansi", "Region", player)) \
|
return state.has_all({"Wax Pot Bottom", "Wax Pot Top", "Wax Pot Bottom DUPE", "Wax Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Wax Pot Bottom", "Wax Pot Top", "Wax Pot Bottom DUPE", "Wax Pot Top DUPE"}, player)
|
state.has_all({"Wax Pot Complete", "Wax Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def ash_capturable(state: CollectionState, player: int) -> bool:
|
def ash_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Office", "Region", player) or state.can_reach("Burial", "Region", player)) \
|
return state.has_all({"Ash Pot Bottom", "Ash Pot Top", "Ash Pot Bottom DUPE", "Ash Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Ash Pot Bottom", "Ash Pot Top", "Ash Pot Bottom DUPE", "Ash Pot Top DUPE"}, player)
|
state.has_all({"Ash Pot Complete", "Ash Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def oil_capturable(state: CollectionState, player: int) -> bool:
|
def oil_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Prehistoric", "Region", player) or state.can_reach("Tar River", "Region", player)) \
|
return state.has_all({"Oil Pot Bottom", "Oil Pot Top", "Oil Pot Bottom DUPE", "Oil Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Oil Pot Bottom", "Oil Pot Top", "Oil Pot Bottom DUPE", "Oil Pot Top DUPE"}, player)
|
state.has_all({"Oil Pot Complete", "Oil Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def cloth_capturable(state: CollectionState, player: int) -> bool:
|
def cloth_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Egypt", "Region", player) or state.can_reach("Burial", "Region", player) or state.can_reach("Janitor Closet", "Region", player)) \
|
return state.has_all({"Cloth Pot Bottom", "Cloth Pot Top", "Cloth Pot Bottom DUPE", "Cloth Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Cloth Pot Bottom", "Cloth Pot Top", "Cloth Pot Bottom DUPE", "Cloth Pot Top DUPE"}, player)
|
state.has_all({"Cloth Pot Complete", "Cloth Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def wood_capturable(state: CollectionState, player: int) -> bool:
|
def wood_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Workshop", "Region", player) or state.can_reach("Blue Maze", "Region", player) or state.can_reach("Gods Room", "Region", player) or state.can_reach("Anansi", "Region", player)) \
|
return state.has_all({"Wood Pot Bottom", "Wood Pot Top", "Wood Pot Bottom DUPE", "Wood Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Wood Pot Bottom", "Wood Pot Top", "Wood Pot Bottom DUPE", "Wood Pot Top DUPE"}, player)
|
state.has_all({"Wood Pot Complete", "Wood Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def crystal_capturable(state: CollectionState, player: int) -> bool:
|
def crystal_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Lobby", "Region", player) or state.can_reach("Ocean", "Region", player)) \
|
return state.has_all({"Crystal Pot Bottom", "Crystal Pot Top", "Crystal Pot Bottom DUPE", "Crystal Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Crystal Pot Bottom", "Crystal Pot Top", "Crystal Pot Bottom DUPE", "Crystal Pot Top DUPE"}, player)
|
state.has_all({"Crystal Pot Complete", "Crystal Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def sand_capturable(state: CollectionState, player: int) -> bool:
|
def sand_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Greenhouse", "Region", player) or state.can_reach("Ocean", "Region", player)) \
|
return state.has_all({"Sand Pot Bottom", "Sand Pot Top", "Sand Pot Bottom DUPE", "Sand Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Sand Pot Bottom", "Sand Pot Top", "Sand Pot Bottom DUPE", "Sand Pot Top DUPE"}, player)
|
state.has_all({"Sand Pot Complete", "Sand Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def metal_capturable(state: CollectionState, player: int) -> bool:
|
def metal_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (state.can_reach("Projector Room", "Region", player) or state.can_reach("Prehistoric", "Region", player) or state.can_reach("Bedroom", "Region", player)) \
|
return state.has_all({"Metal Pot Bottom", "Metal Pot Top", "Metal Pot Bottom DUPE", "Metal Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Metal Pot Bottom", "Metal Pot Top", "Metal Pot Bottom DUPE", "Metal Pot Top DUPE"}, player)
|
state.has_all({"Metal Pot Complete", "Metal Pot Complete DUPE"}, player)
|
||||||
|
|
||||||
|
|
||||||
def lightning_capturable(state: CollectionState, player: int) -> bool:
|
def lightning_capturable(state: CollectionState, player: int) -> bool:
|
||||||
return (first_nine_ixupi_capturable or state.multiworld.early_lightning[player].value) \
|
return (first_nine_ixupi_capturable(state, player) or state.multiworld.worlds[player].options.early_lightning.value) \
|
||||||
and state.can_reach("Generator", "Region", player) \
|
and (state.has_all({"Lightning Pot Bottom", "Lightning Pot Top", "Lightning Pot Bottom DUPE", "Lightning Pot Top DUPE"}, player) or \
|
||||||
and state.has_all({"Lightning Pot Bottom", "Lightning Pot Top", "Lightning Pot Bottom DUPE", "Lightning Pot Top DUPE"}, player)
|
state.has_all({"Lightning Pot Complete", "Lightning Pot Complete DUPE"}, player))
|
||||||
|
|
||||||
|
|
||||||
def beths_body_available(state: CollectionState, player: int) -> bool:
|
def beths_body_available(state: CollectionState, player: int) -> bool:
|
||||||
return (first_nine_ixupi_capturable(state, player) or state.multiworld.early_beth[player].value) \
|
return (first_nine_ixupi_capturable(state, player) or state.multiworld.worlds[player].options.early_beth.value) \
|
||||||
and state.can_reach("Generator", "Region", player)
|
and state.can_reach("Generator", "Region", player)
|
||||||
|
|
||||||
|
|
||||||
@@ -123,7 +123,8 @@ def get_rules_lookup(player: int):
|
|||||||
"To Burial From Egypt": lambda state: state.can_reach("Egypt", "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 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 Slide Room": lambda state: all_skull_dials_available(state, player),
|
||||||
"To Lobby From Slide Room": lambda state: (beths_body_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": {
|
"locations_required": {
|
||||||
"Puzzle Solved Anansi Musicbox": lambda state: state.can_reach("Clock Tower", "Region", player),
|
"Puzzle Solved Anansi Musicbox": lambda state: state.can_reach("Clock Tower", "Region", player),
|
||||||
@@ -207,8 +208,10 @@ def set_rules(world: "ShiversWorld") -> None:
|
|||||||
# forbid cloth in janitor closet and oil in tar river
|
# 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 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 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 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 Top DUPE", player)
|
||||||
|
forbid_item(multiworld.get_location("Accessible: Storage: Tar River", player), "Oil Pot Complete DUPE", player)
|
||||||
|
|
||||||
# Filler Item Forbids
|
# Filler Item Forbids
|
||||||
forbid_item(multiworld.get_location("Puzzle Solved Lyre", player), "Easier Lyre", player)
|
forbid_item(multiworld.get_location("Puzzle Solved Lyre", player), "Easier Lyre", player)
|
||||||
@@ -234,4 +237,8 @@ def set_rules(world: "ShiversWorld") -> None:
|
|||||||
forbid_item(multiworld.get_location("Ixupi Captured Metal", player), "Metal Always Available in Prehistoric", player)
|
forbid_item(multiworld.get_location("Ixupi Captured Metal", player), "Metal Always Available in Prehistoric", player)
|
||||||
|
|
||||||
# Set completion condition
|
# Set completion condition
|
||||||
multiworld.completion_condition[player] = lambda state: (first_nine_ixupi_capturable(state, player) and lightning_capturable(state, player))
|
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)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from typing import List
|
||||||
from .Items import item_table, ShiversItem
|
from .Items import item_table, ShiversItem
|
||||||
from .Rules import set_rules
|
from .Rules import set_rules
|
||||||
from BaseClasses import Item, Tutorial, Region, Location
|
from BaseClasses import Item, Tutorial, Region, Location
|
||||||
@@ -22,7 +23,7 @@ class ShiversWorld(World):
|
|||||||
Shivers is a horror themed point and click adventure. Explore the mysteries of Windlenot's Museum of the Strange and Unusual.
|
Shivers is a horror themed point and click adventure. Explore the mysteries of Windlenot's Museum of the Strange and Unusual.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
game: str = "Shivers"
|
game = "Shivers"
|
||||||
topology_present = False
|
topology_present = False
|
||||||
web = ShiversWeb()
|
web = ShiversWeb()
|
||||||
options_dataclass = ShiversOptions
|
options_dataclass = ShiversOptions
|
||||||
@@ -30,6 +31,12 @@ class ShiversWorld(World):
|
|||||||
|
|
||||||
item_name_to_id = {name: data.code for name, data in item_table.items()}
|
item_name_to_id = {name: data.code for name, data in item_table.items()}
|
||||||
location_name_to_id = Constants.location_name_to_id
|
location_name_to_id = Constants.location_name_to_id
|
||||||
|
shivers_item_id_offset = 27000
|
||||||
|
pot_completed_list: List[int]
|
||||||
|
|
||||||
|
|
||||||
|
def generate_early(self):
|
||||||
|
self.pot_completed_list = []
|
||||||
|
|
||||||
def create_item(self, name: str) -> Item:
|
def create_item(self, name: str) -> Item:
|
||||||
data = item_table[name]
|
data = item_table[name]
|
||||||
@@ -78,9 +85,28 @@ class ShiversWorld(World):
|
|||||||
#Add items to item pool
|
#Add items to item pool
|
||||||
itempool = []
|
itempool = []
|
||||||
for name, data in item_table.items():
|
for name, data in item_table.items():
|
||||||
if data.type in {"pot", "key", "ability", "filler2"}:
|
if data.type in {"key", "ability", "filler2"}:
|
||||||
itempool.append(self.create_item(name))
|
itempool.append(self.create_item(name))
|
||||||
|
|
||||||
|
# Pot pieces/Completed/Mixed:
|
||||||
|
for i in range(10):
|
||||||
|
if self.options.full_pots == "pieces":
|
||||||
|
itempool.append(self.create_item(self.item_id_to_name[self.shivers_item_id_offset + i]))
|
||||||
|
itempool.append(self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 10 + i]))
|
||||||
|
elif self.options.full_pots == "complete":
|
||||||
|
itempool.append(self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 20 + i]))
|
||||||
|
else:
|
||||||
|
# Roll for if pieces or a complete pot will be used.
|
||||||
|
# Pot Pieces
|
||||||
|
if self.random.randint(0, 1) == 0:
|
||||||
|
self.pot_completed_list.append(0)
|
||||||
|
itempool.append(self.create_item(self.item_id_to_name[self.shivers_item_id_offset + i]))
|
||||||
|
itempool.append(self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 10 + i]))
|
||||||
|
# Completed Pot
|
||||||
|
else:
|
||||||
|
self.pot_completed_list.append(1)
|
||||||
|
itempool.append(self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 20 + i]))
|
||||||
|
|
||||||
#Add Filler
|
#Add Filler
|
||||||
itempool += [self.create_item("Easier Lyre") for i in range(9)]
|
itempool += [self.create_item("Easier Lyre") for i in range(9)]
|
||||||
|
|
||||||
@@ -88,7 +114,6 @@ class ShiversWorld(World):
|
|||||||
filler_needed = len(self.multiworld.get_unfilled_locations(self.player)) - 24 - len(itempool)
|
filler_needed = len(self.multiworld.get_unfilled_locations(self.player)) - 24 - len(itempool)
|
||||||
itempool += [self.random.choices([self.create_item("Heal"), self.create_item("Easier Lyre")], weights=[95, 5])[0] for i in range(filler_needed)]
|
itempool += [self.random.choices([self.create_item("Heal"), self.create_item("Easier Lyre")], weights=[95, 5])[0] for i in range(filler_needed)]
|
||||||
|
|
||||||
|
|
||||||
#Place library escape items. Choose a location to place the escape item
|
#Place library escape items. Choose a location to place the escape item
|
||||||
library_region = self.multiworld.get_region("Library", self.player)
|
library_region = self.multiworld.get_region("Library", self.player)
|
||||||
librarylocation = self.random.choice([loc for loc in library_region.locations if not loc.name.startswith("Accessible:")])
|
librarylocation = self.random.choice([loc for loc in library_region.locations if not loc.name.startswith("Accessible:")])
|
||||||
@@ -123,14 +148,14 @@ class ShiversWorld(World):
|
|||||||
self.multiworld.itempool += itempool
|
self.multiworld.itempool += itempool
|
||||||
|
|
||||||
#Lobby acess:
|
#Lobby acess:
|
||||||
if self.options.lobby_access == 1:
|
if self.options.lobby_access == "early":
|
||||||
if lobby_access_keys == 1:
|
if lobby_access_keys == 1:
|
||||||
self.multiworld.early_items[self.player]["Key for Underground Lake Room"] = 1
|
self.multiworld.early_items[self.player]["Key for Underground Lake Room"] = 1
|
||||||
self.multiworld.early_items[self.player]["Key for Office Elevator"] = 1
|
self.multiworld.early_items[self.player]["Key for Office Elevator"] = 1
|
||||||
self.multiworld.early_items[self.player]["Key for Office"] = 1
|
self.multiworld.early_items[self.player]["Key for Office"] = 1
|
||||||
elif lobby_access_keys == 2:
|
elif lobby_access_keys == 2:
|
||||||
self.multiworld.early_items[self.player]["Key for Front Door"] = 1
|
self.multiworld.early_items[self.player]["Key for Front Door"] = 1
|
||||||
if self.options.lobby_access == 2:
|
if self.options.lobby_access == "local":
|
||||||
if lobby_access_keys == 1:
|
if lobby_access_keys == 1:
|
||||||
self.multiworld.local_early_items[self.player]["Key for Underground Lake Room"] = 1
|
self.multiworld.local_early_items[self.player]["Key for Underground Lake Room"] = 1
|
||||||
self.multiworld.local_early_items[self.player]["Key for Office Elevator"] = 1
|
self.multiworld.local_early_items[self.player]["Key for Office Elevator"] = 1
|
||||||
@@ -138,6 +163,12 @@ class ShiversWorld(World):
|
|||||||
elif lobby_access_keys == 2:
|
elif lobby_access_keys == 2:
|
||||||
self.multiworld.local_early_items[self.player]["Key for Front Door"] = 1
|
self.multiworld.local_early_items[self.player]["Key for Front Door"] = 1
|
||||||
|
|
||||||
|
#Pot piece shuffle location:
|
||||||
|
if self.options.location_pot_pieces == "own_world":
|
||||||
|
self.options.local_items.value |= {name for name, data in item_table.items() if data.type == "pot" or data.type == "pot_type2"}
|
||||||
|
if self.options.location_pot_pieces == "different_world":
|
||||||
|
self.options.non_local_items.value |= {name for name, data in item_table.items() if data.type == "pot" or data.type == "pot_type2"}
|
||||||
|
|
||||||
def pre_fill(self) -> None:
|
def pre_fill(self) -> None:
|
||||||
# Prefills event storage locations with duplicate pots
|
# Prefills event storage locations with duplicate pots
|
||||||
storagelocs = []
|
storagelocs = []
|
||||||
@@ -149,7 +180,23 @@ class ShiversWorld(World):
|
|||||||
if loc_name.startswith("Accessible: "):
|
if loc_name.startswith("Accessible: "):
|
||||||
storagelocs.append(self.multiworld.get_location(loc_name, self.player))
|
storagelocs.append(self.multiworld.get_location(loc_name, self.player))
|
||||||
|
|
||||||
|
#Pot pieces/Completed/Mixed:
|
||||||
|
if self.options.full_pots == "pieces":
|
||||||
storageitems += [self.create_item(name) for name, data in item_table.items() if data.type == 'potduplicate']
|
storageitems += [self.create_item(name) for name, data in item_table.items() if data.type == 'potduplicate']
|
||||||
|
elif self.options.full_pots == "complete":
|
||||||
|
storageitems += [self.create_item(name) for name, data in item_table.items() if data.type == 'potduplicate_type2']
|
||||||
|
storageitems += [self.create_item("Empty") for i in range(10)]
|
||||||
|
else:
|
||||||
|
for i in range(10):
|
||||||
|
#Pieces
|
||||||
|
if self.pot_completed_list[i] == 0:
|
||||||
|
storageitems += [self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 70 + i])]
|
||||||
|
storageitems += [self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 80 + i])]
|
||||||
|
#Complete
|
||||||
|
else:
|
||||||
|
storageitems += [self.create_item(self.item_id_to_name[self.shivers_item_id_offset + 140 + i])]
|
||||||
|
storageitems += [self.create_item("Empty")]
|
||||||
|
|
||||||
storageitems += [self.create_item("Empty") for i in range(3)]
|
storageitems += [self.create_item("Empty") for i in range(3)]
|
||||||
|
|
||||||
state = self.multiworld.get_all_state(True)
|
state = self.multiworld.get_all_state(True)
|
||||||
@@ -166,11 +213,13 @@ class ShiversWorld(World):
|
|||||||
def fill_slot_data(self) -> dict:
|
def fill_slot_data(self) -> dict:
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"storageplacements": self.storage_placements,
|
"StoragePlacements": self.storage_placements,
|
||||||
"excludedlocations": {str(excluded_location).replace('ExcludeLocations(', '').replace(')', '') for excluded_location in self.multiworld.exclude_locations.values()},
|
"ExcludedLocations": list(self.options.exclude_locations.value),
|
||||||
"elevatorsstaysolved": {self.options.elevators_stay_solved.value},
|
"IxupiCapturesNeeded": self.options.ixupi_captures_needed.value,
|
||||||
"earlybeth": {self.options.early_beth.value},
|
"ElevatorsStaySolved": self.options.elevators_stay_solved.value,
|
||||||
"earlylightning": {self.options.early_lightning.value},
|
"EarlyBeth": self.options.early_beth.value,
|
||||||
|
"EarlyLightning": self.options.early_lightning.value,
|
||||||
|
"FrontDoorUsable": self.options.front_door_usable.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
"Information Plaque: (Ocean) Poseidon",
|
"Information Plaque: (Ocean) Poseidon",
|
||||||
"Information Plaque: (Ocean) Colossus of Rhodes",
|
"Information Plaque: (Ocean) Colossus of Rhodes",
|
||||||
"Information Plaque: (Ocean) Poseidon's Temple",
|
"Information Plaque: (Ocean) Poseidon's Temple",
|
||||||
"Information Plaque: (Underground Maze) Subterranean World",
|
"Information Plaque: (Underground Maze Staircase) Subterranean World",
|
||||||
"Information Plaque: (Underground Maze) Dero",
|
"Information Plaque: (Underground Maze) Dero",
|
||||||
"Information Plaque: (Egypt) Tomb of the Ixupi",
|
"Information Plaque: (Egypt) Tomb of the Ixupi",
|
||||||
"Information Plaque: (Egypt) The Sphinx",
|
"Information Plaque: (Egypt) The Sphinx",
|
||||||
@@ -119,16 +119,6 @@
|
|||||||
"Outside": [
|
"Outside": [
|
||||||
"Puzzle Solved Gears",
|
"Puzzle Solved Gears",
|
||||||
"Puzzle Solved Stone Henge",
|
"Puzzle Solved Stone Henge",
|
||||||
"Ixupi Captured Water",
|
|
||||||
"Ixupi Captured Wax",
|
|
||||||
"Ixupi Captured Ash",
|
|
||||||
"Ixupi Captured Oil",
|
|
||||||
"Ixupi Captured Cloth",
|
|
||||||
"Ixupi Captured Wood",
|
|
||||||
"Ixupi Captured Crystal",
|
|
||||||
"Ixupi Captured Sand",
|
|
||||||
"Ixupi Captured Metal",
|
|
||||||
"Ixupi Captured Lightning",
|
|
||||||
"Puzzle Solved Office Elevator",
|
"Puzzle Solved Office Elevator",
|
||||||
"Puzzle Solved Three Floor Elevator",
|
"Puzzle Solved Three Floor Elevator",
|
||||||
"Puzzle Hint Found: Combo Lock in Mailbox",
|
"Puzzle Hint Found: Combo Lock in Mailbox",
|
||||||
@@ -182,7 +172,8 @@
|
|||||||
"Accessible: Storage: Transforming Mask"
|
"Accessible: Storage: Transforming Mask"
|
||||||
],
|
],
|
||||||
"Generator": [
|
"Generator": [
|
||||||
"Final Riddle: Beth's Body Page 17"
|
"Final Riddle: Beth's Body Page 17",
|
||||||
|
"Ixupi Captured Lightning"
|
||||||
],
|
],
|
||||||
"Theater Back Hallways": [
|
"Theater Back Hallways": [
|
||||||
"Puzzle Solved Clock Tower Door"
|
"Puzzle Solved Clock Tower Door"
|
||||||
@@ -210,6 +201,7 @@
|
|||||||
"Information Plaque: (Ocean) Poseidon's Temple"
|
"Information Plaque: (Ocean) Poseidon's Temple"
|
||||||
],
|
],
|
||||||
"Maze Staircase": [
|
"Maze Staircase": [
|
||||||
|
"Information Plaque: (Underground Maze Staircase) Subterranean World",
|
||||||
"Puzzle Solved Maze Door"
|
"Puzzle Solved Maze Door"
|
||||||
],
|
],
|
||||||
"Egypt": [
|
"Egypt": [
|
||||||
@@ -305,7 +297,6 @@
|
|||||||
],
|
],
|
||||||
"Tar River": [
|
"Tar River": [
|
||||||
"Accessible: Storage: Tar River",
|
"Accessible: Storage: Tar River",
|
||||||
"Information Plaque: (Underground Maze) Subterranean World",
|
|
||||||
"Information Plaque: (Underground Maze) Dero"
|
"Information Plaque: (Underground Maze) Dero"
|
||||||
],
|
],
|
||||||
"Theater": [
|
"Theater": [
|
||||||
@@ -320,6 +311,33 @@
|
|||||||
"Skull Dial Bridge": [
|
"Skull Dial Bridge": [
|
||||||
"Accessible: Storage: Skull Bridge",
|
"Accessible: Storage: Skull Bridge",
|
||||||
"Puzzle Solved Skull Dial Door"
|
"Puzzle Solved Skull Dial Door"
|
||||||
|
],
|
||||||
|
"Water Capture": [
|
||||||
|
"Ixupi Captured Water"
|
||||||
|
],
|
||||||
|
"Wax Capture": [
|
||||||
|
"Ixupi Captured Wax"
|
||||||
|
],
|
||||||
|
"Ash Capture": [
|
||||||
|
"Ixupi Captured Ash"
|
||||||
|
],
|
||||||
|
"Oil Capture": [
|
||||||
|
"Ixupi Captured Oil"
|
||||||
|
],
|
||||||
|
"Cloth Capture": [
|
||||||
|
"Ixupi Captured Cloth"
|
||||||
|
],
|
||||||
|
"Wood Capture": [
|
||||||
|
"Ixupi Captured Wood"
|
||||||
|
],
|
||||||
|
"Crystal Capture": [
|
||||||
|
"Ixupi Captured Crystal"
|
||||||
|
],
|
||||||
|
"Sand Capture": [
|
||||||
|
"Ixupi Captured Sand"
|
||||||
|
],
|
||||||
|
"Metal Capture": [
|
||||||
|
"Ixupi Captured Metal"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,35 +7,35 @@
|
|||||||
["Underground Lake", ["To Underground Tunnels From Underground Lake", "To Underground Blue Tunnels From Underground Lake"]],
|
["Underground Lake", ["To Underground Tunnels From Underground Lake", "To Underground Blue Tunnels From Underground Lake"]],
|
||||||
["Underground Blue Tunnels", ["To Underground Lake From Underground Blue Tunnels", "To Office Elevator From Underground Blue Tunnels"]],
|
["Underground Blue Tunnels", ["To Underground Lake From Underground Blue Tunnels", "To Office Elevator From Underground Blue Tunnels"]],
|
||||||
["Office Elevator", ["To Underground Blue Tunnels From Office Elevator","To Office From Office Elevator"]],
|
["Office Elevator", ["To Underground Blue Tunnels From Office Elevator","To Office From Office Elevator"]],
|
||||||
["Office", ["To Office Elevator From Office", "To Workshop", "To Lobby From Office", "To Bedroom Elevator From Office"]],
|
["Office", ["To Office Elevator From Office", "To Workshop", "To Lobby From Office", "To Bedroom Elevator From Office", "To Ash Capture From Office"]],
|
||||||
["Workshop", ["To Office From Workshop"]],
|
["Workshop", ["To Office From Workshop", "To Wood Capture From Workshop"]],
|
||||||
["Bedroom Elevator", ["To Office From Bedroom Elevator", "To Bedroom"]],
|
["Bedroom Elevator", ["To Office From Bedroom Elevator", "To Bedroom"]],
|
||||||
["Bedroom", ["To Bedroom Elevator From Bedroom"]],
|
["Bedroom", ["To Bedroom Elevator From Bedroom", "To Metal Capture From Bedroom"]],
|
||||||
["Lobby", ["To Office From Lobby", "To Library From Lobby", "To Theater From Lobby", "To Prehistoric From Lobby", "To Egypt From Lobby", "To Tar River From Lobby", "To Outside From Lobby"]],
|
["Lobby", ["To Office From Lobby", "To Library From Lobby", "To Theater From Lobby", "To Prehistoric From Lobby", "To Egypt From Lobby", "To Tar River From Lobby", "To Outside From Lobby", "To Water Capture From Lobby", "To Crystal Capture From Lobby"]],
|
||||||
["Library", ["To Lobby From Library", "To Maintenance Tunnels From Library"]],
|
["Library", ["To Lobby From Library", "To Maintenance Tunnels From Library", "To Wax Capture From Library"]],
|
||||||
["Maintenance Tunnels", ["To Library From Maintenance Tunnels", "To Three Floor Elevator From Maintenance Tunnels", "To Generator"]],
|
["Maintenance Tunnels", ["To Library From Maintenance Tunnels", "To Three Floor Elevator From Maintenance Tunnels", "To Generator"]],
|
||||||
["Generator", ["To Maintenance Tunnels From Generator"]],
|
["Generator", ["To Maintenance Tunnels From Generator"]],
|
||||||
["Theater", ["To Lobby From Theater", "To Theater Back Hallways From Theater"]],
|
["Theater", ["To Lobby From Theater", "To Theater Back Hallways From Theater"]],
|
||||||
["Theater Back Hallways", ["To Theater From Theater Back Hallways", "To Clock Tower Staircase From Theater Back Hallways", "To Maintenance Tunnels From Theater Back Hallways", "To Projector Room"]],
|
["Theater Back Hallways", ["To Theater From Theater Back Hallways", "To Clock Tower Staircase From Theater Back Hallways", "To Maintenance Tunnels From Theater Back Hallways", "To Projector Room"]],
|
||||||
["Clock Tower Staircase", ["To Theater Back Hallways From Clock Tower Staircase", "To Clock Tower"]],
|
["Clock Tower Staircase", ["To Theater Back Hallways From Clock Tower Staircase", "To Clock Tower"]],
|
||||||
["Clock Tower", ["To Clock Tower Staircase From Clock Tower"]],
|
["Clock Tower", ["To Clock Tower Staircase From Clock Tower"]],
|
||||||
["Projector Room", ["To Theater Back Hallways From Projector Room"]],
|
["Projector Room", ["To Theater Back Hallways From Projector Room", "To Metal Capture From Projector Room"]],
|
||||||
["Prehistoric", ["To Lobby From Prehistoric", "To Greenhouse", "To Ocean From Prehistoric"]],
|
["Prehistoric", ["To Lobby From Prehistoric", "To Greenhouse", "To Ocean From Prehistoric", "To Oil Capture From Prehistoric", "To Metal Capture From Prehistoric"]],
|
||||||
["Greenhouse", ["To Prehistoric From Greenhouse"]],
|
["Greenhouse", ["To Prehistoric From Greenhouse", "To Sand Capture From Greenhouse"]],
|
||||||
["Ocean", ["To Prehistoric From Ocean", "To Maze Staircase From Ocean"]],
|
["Ocean", ["To Prehistoric From Ocean", "To Maze Staircase From Ocean", "To Crystal Capture From Ocean", "To Sand Capture From Ocean"]],
|
||||||
["Maze Staircase", ["To Ocean From Maze Staircase", "To Maze From Maze Staircase"]],
|
["Maze Staircase", ["To Ocean From Maze Staircase", "To Maze From Maze Staircase"]],
|
||||||
["Maze", ["To Maze Staircase From Maze", "To Tar River"]],
|
["Maze", ["To Maze Staircase From Maze", "To Tar River"]],
|
||||||
["Tar River", ["To Maze From Tar River", "To Lobby From Tar River"]],
|
["Tar River", ["To Maze From Tar River", "To Lobby From Tar River", "To Oil Capture From Tar River"]],
|
||||||
["Egypt", ["To Lobby From Egypt", "To Burial From Egypt", "To Blue Maze From Egypt"]],
|
["Egypt", ["To Lobby From Egypt", "To Burial From Egypt", "To Blue Maze From Egypt", "To Cloth Capture From Egypt"]],
|
||||||
["Burial", ["To Egypt From Burial", "To Shaman From Burial"]],
|
["Burial", ["To Egypt From Burial", "To Shaman From Burial", "To Ash Capture From Burial", "To Cloth Capture From Burial"]],
|
||||||
["Shaman", ["To Burial From Shaman", "To Gods Room"]],
|
["Shaman", ["To Burial From Shaman", "To Gods Room", "To Wax Capture From Shaman"]],
|
||||||
["Gods Room", ["To Shaman From Gods Room", "To Anansi From Gods Room"]],
|
["Gods Room", ["To Shaman From Gods Room", "To Anansi From Gods Room", "To Wood Capture From Gods Room"]],
|
||||||
["Anansi", ["To Gods Room From Anansi", "To Werewolf From Anansi"]],
|
["Anansi", ["To Gods Room From Anansi", "To Werewolf From Anansi", "To Wax Capture From Anansi", "To Wood Capture From Anansi"]],
|
||||||
["Werewolf", ["To Anansi From Werewolf", "To Night Staircase From Werewolf"]],
|
["Werewolf", ["To Anansi From Werewolf", "To Night Staircase From Werewolf"]],
|
||||||
["Night Staircase", ["To Werewolf From Night Staircase", "To Janitor Closet", "To UFO"]],
|
["Night Staircase", ["To Werewolf From Night Staircase", "To Janitor Closet", "To UFO"]],
|
||||||
["Janitor Closet", ["To Night Staircase From Janitor Closet"]],
|
["Janitor Closet", ["To Night Staircase From Janitor Closet", "To Water Capture From Janitor Closet", "To Cloth Capture From Janitor Closet"]],
|
||||||
["UFO", ["To Night Staircase From UFO", "To Inventions From UFO"]],
|
["UFO", ["To Night Staircase From UFO", "To Inventions From UFO"]],
|
||||||
["Blue Maze", ["To Egypt From Blue Maze", "To Three Floor Elevator From Blue Maze Bottom", "To Three Floor Elevator From Blue Maze Top", "To Fortune Teller", "To Inventions From Blue Maze"]],
|
["Blue Maze", ["To Egypt From Blue Maze", "To Three Floor Elevator From Blue Maze Bottom", "To Three Floor Elevator From Blue Maze Top", "To Fortune Teller", "To Inventions From Blue Maze", "To Wood Capture From Blue Maze"]],
|
||||||
["Three Floor Elevator", ["To Maintenance Tunnels From Three Floor Elevator", "To Blue Maze From Three Floor Elevator"]],
|
["Three Floor Elevator", ["To Maintenance Tunnels From Three Floor Elevator", "To Blue Maze From Three Floor Elevator"]],
|
||||||
["Fortune Teller", ["To Blue Maze From Fortune Teller"]],
|
["Fortune Teller", ["To Blue Maze From Fortune Teller"]],
|
||||||
["Inventions", ["To Blue Maze From Inventions", "To UFO From Inventions", "To Torture From Inventions"]],
|
["Inventions", ["To Blue Maze From Inventions", "To UFO From Inventions", "To Torture From Inventions"]],
|
||||||
@@ -43,7 +43,16 @@
|
|||||||
["Puzzle Room Mastermind", ["To Torture", "To Puzzle Room Marbles From Puzzle Room Mastermind"]],
|
["Puzzle Room Mastermind", ["To Torture", "To Puzzle Room Marbles From Puzzle Room Mastermind"]],
|
||||||
["Puzzle Room Marbles", ["To Puzzle Room Mastermind From Puzzle Room Marbles", "To Skull Dial Bridge From Puzzle Room Marbles"]],
|
["Puzzle Room Marbles", ["To Puzzle Room Mastermind From Puzzle Room Marbles", "To Skull Dial Bridge From Puzzle Room Marbles"]],
|
||||||
["Skull Dial Bridge", ["To Puzzle Room Marbles From Skull Dial Bridge", "To Slide Room"]],
|
["Skull Dial Bridge", ["To Puzzle Room Marbles From Skull Dial Bridge", "To Slide Room"]],
|
||||||
["Slide Room", ["To Skull Dial Bridge From Slide Room", "To Lobby From Slide Room"]]
|
["Slide Room", ["To Skull Dial Bridge From Slide Room", "To Lobby From Slide Room"]],
|
||||||
|
["Water Capture", []],
|
||||||
|
["Wax Capture", []],
|
||||||
|
["Ash Capture", []],
|
||||||
|
["Oil Capture", []],
|
||||||
|
["Cloth Capture", []],
|
||||||
|
["Wood Capture", []],
|
||||||
|
["Crystal Capture", []],
|
||||||
|
["Sand Capture", []],
|
||||||
|
["Metal Capture", []]
|
||||||
],
|
],
|
||||||
"mandatory_connections": [
|
"mandatory_connections": [
|
||||||
["To Registry", "Registry"],
|
["To Registry", "Registry"],
|
||||||
@@ -140,6 +149,29 @@
|
|||||||
["To Puzzle Room Marbles From Skull Dial Bridge", "Puzzle Room Marbles"],
|
["To Puzzle Room Marbles From Skull Dial Bridge", "Puzzle Room Marbles"],
|
||||||
["To Skull Dial Bridge From Puzzle Room Marbles", "Skull Dial Bridge"],
|
["To Skull Dial Bridge From Puzzle Room Marbles", "Skull Dial Bridge"],
|
||||||
["To Skull Dial Bridge From Slide Room", "Skull Dial Bridge"],
|
["To Skull Dial Bridge From Slide Room", "Skull Dial Bridge"],
|
||||||
["To Slide Room", "Slide Room"]
|
["To Slide Room", "Slide Room"],
|
||||||
|
["To Wax Capture From Library", "Wax Capture"],
|
||||||
|
["To Wax Capture From Shaman", "Wax Capture"],
|
||||||
|
["To Wax Capture From Anansi", "Wax Capture"],
|
||||||
|
["To Water Capture From Lobby", "Water Capture"],
|
||||||
|
["To Water Capture From Janitor Closet", "Water Capture"],
|
||||||
|
["To Ash Capture From Office", "Ash Capture"],
|
||||||
|
["To Ash Capture From Burial", "Ash Capture"],
|
||||||
|
["To Oil Capture From Prehistoric", "Oil Capture"],
|
||||||
|
["To Oil Capture From Tar River", "Oil Capture"],
|
||||||
|
["To Cloth Capture From Egypt", "Cloth Capture"],
|
||||||
|
["To Cloth Capture From Burial", "Cloth Capture"],
|
||||||
|
["To Cloth Capture From Janitor Closet", "Cloth Capture"],
|
||||||
|
["To Wood Capture From Workshop", "Wood Capture"],
|
||||||
|
["To Wood Capture From Gods Room", "Wood Capture"],
|
||||||
|
["To Wood Capture From Anansi", "Wood Capture"],
|
||||||
|
["To Wood Capture From Blue Maze", "Wood Capture"],
|
||||||
|
["To Crystal Capture From Lobby", "Crystal Capture"],
|
||||||
|
["To Crystal Capture From Ocean", "Crystal Capture"],
|
||||||
|
["To Sand Capture From Greenhouse", "Sand Capture"],
|
||||||
|
["To Sand Capture From Ocean", "Sand Capture"],
|
||||||
|
["To Metal Capture From Bedroom", "Metal Capture"],
|
||||||
|
["To Metal Capture From Projector Room", "Metal Capture"],
|
||||||
|
["To Metal Capture From Prehistoric", "Metal Capture"]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -12,8 +12,8 @@ these are randomized. Crawling has been added and is required to use any crawl s
|
|||||||
|
|
||||||
## What is considered a location check in Shivers?
|
## What is considered a location check in Shivers?
|
||||||
|
|
||||||
1. All puzzle solves are location checks excluding elevator puzzles.
|
1. All puzzle solves are location checks.
|
||||||
2. All Ixupi captures are location checks excluding Lightning.
|
2. All Ixupi captures are location checks.
|
||||||
3. Puzzle hints/solutions are location checks. For example, looking at the Atlantis map.
|
3. Puzzle hints/solutions are location checks. For example, looking at the Atlantis map.
|
||||||
4. Optionally information plaques are location checks.
|
4. Optionally information plaques are location checks.
|
||||||
|
|
||||||
@@ -23,9 +23,9 @@ If the player receives a key then the corresponding door will be unlocked. If th
|
|||||||
|
|
||||||
## What is the victory condition?
|
## What is the victory condition?
|
||||||
|
|
||||||
Victory is achieved when the player captures Lightning in the generator room.
|
Victory is achieved when the player has captured the required number Ixupi set in their options.
|
||||||
|
|
||||||
## Encountered a bug?
|
## Encountered a bug?
|
||||||
|
|
||||||
Please contact GodlFire on Discord for bugs related to Shivers world generation.\
|
Please contact GodlFire on Discord for bugs related to Shivers world generation.<br>
|
||||||
Please contact GodlFire or mouse on Discord for bugs related to the Shivers Randomizer.
|
Please contact GodlFire or mouse on Discord for bugs related to the Shivers Randomizer.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
- [Shivers (GOG version)](https://www.gog.com/en/game/shivers) or original disc
|
- [Shivers (GOG version)](https://www.gog.com/en/game/shivers) or original disc
|
||||||
- [ScummVM](https://www.scummvm.org/downloads/) version 2.7.0 or later
|
- [ScummVM](https://www.scummvm.org/downloads/) version 2.7.0 or later
|
||||||
- [Shivers Randomizer](https://www.speedrun.com/shivers/resources)
|
- [Shivers Randomizer](https://github.com/GodlFire/Shivers-Randomizer-CSharp/releases/latest) Latest release version
|
||||||
|
|
||||||
## Setup ScummVM for Shivers
|
## Setup ScummVM for Shivers
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user