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: 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>
This commit is contained in:
parent
a05dbac55f
commit
7c8ea34a02
|
@ -33,28 +33,38 @@ item_table = {
|
|||
"Lightning Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 17, "pot"),
|
||||
"Sand Pot Top": ItemData(SHIVERS_ITEM_ID_OFFSET + 18, "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
|
||||
"Key for Office Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 20, "key"),
|
||||
"Key for Bedroom Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 21, "key"),
|
||||
"Key for Three Floor Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 22, "key"),
|
||||
"Key for Workshop": ItemData(SHIVERS_ITEM_ID_OFFSET + 23, "key"),
|
||||
"Key for Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 24, "key"),
|
||||
"Key for Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 25, "key"),
|
||||
"Key for Greenhouse Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 26, "key"),
|
||||
"Key for Ocean Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 27, "key"),
|
||||
"Key for Projector Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 28, "key"),
|
||||
"Key for Generator Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 29, "key"),
|
||||
"Key for Egypt Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 30, "key"),
|
||||
"Key for Library Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 31, "key"),
|
||||
"Key for Shaman Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
|
||||
"Key for UFO Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 33, "key"),
|
||||
"Key for Torture Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 34, "key"),
|
||||
"Key for Puzzle Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 35, "key"),
|
||||
"Key for Bedroom": ItemData(SHIVERS_ITEM_ID_OFFSET + 36, "key"),
|
||||
"Key for Underground Lake Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 37, "key"),
|
||||
"Key for Janitor Closet": ItemData(SHIVERS_ITEM_ID_OFFSET + 38, "key"),
|
||||
"Key for Front Door": ItemData(SHIVERS_ITEM_ID_OFFSET + 39, "key-optional"),
|
||||
"Key for Office Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 30, "key"),
|
||||
"Key for Bedroom Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 31, "key"),
|
||||
"Key for Three Floor Elevator": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
|
||||
"Key for Workshop": ItemData(SHIVERS_ITEM_ID_OFFSET + 33, "key"),
|
||||
"Key for Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 34, "key"),
|
||||
"Key for Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 35, "key"),
|
||||
"Key for Greenhouse Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 36, "key"),
|
||||
"Key for Ocean Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 37, "key"),
|
||||
"Key for Projector Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 38, "key"),
|
||||
"Key for Generator Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 39, "key"),
|
||||
"Key for Egypt Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 40, "key"),
|
||||
"Key for Library Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 41, "key"),
|
||||
"Key for Shaman Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 42, "key"),
|
||||
"Key for UFO Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 43, "key"),
|
||||
"Key for Torture Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 44, "key"),
|
||||
"Key for Puzzle Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 45, "key"),
|
||||
"Key for Bedroom": ItemData(SHIVERS_ITEM_ID_OFFSET + 46, "key"),
|
||||
"Key for Underground Lake Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 47, "key"),
|
||||
"Key for Janitor Closet": ItemData(SHIVERS_ITEM_ID_OFFSET + 48, "key"),
|
||||
"Key for Front Door": ItemData(SHIVERS_ITEM_ID_OFFSET + 49, "key-optional"),
|
||||
|
||||
#Abilities
|
||||
"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"),
|
||||
"Sand Pot Top DUPE": ItemData(SHIVERS_ITEM_ID_OFFSET + 88, "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
|
||||
"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
|
||||
|
||||
|
||||
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):
|
||||
"""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
|
||||
- Early: Keys are placed early
|
||||
- Local: Keys are placed locally"""
|
||||
- Local: Keys are placed locally
|
||||
"""
|
||||
display_name = "Lobby Access"
|
||||
option_normal = 0
|
||||
option_early = 1
|
||||
option_local = 2
|
||||
default = 1
|
||||
|
||||
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
|
||||
allows for greater randomization."""
|
||||
"""
|
||||
If turned on puzzle hints/solutions will be available before the corresponding puzzle is required.
|
||||
|
||||
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"
|
||||
|
||||
class InformationPlaques(Toggle):
|
||||
|
@ -26,7 +42,9 @@ class InformationPlaques(Toggle):
|
|||
display_name = "Include Information Plaques"
|
||||
|
||||
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"
|
||||
|
||||
class ElevatorsStaySolved(DefaultOnToggle):
|
||||
|
@ -37,7 +55,9 @@ class ElevatorsStaySolved(DefaultOnToggle):
|
|||
display_name = "Elevators Stay Solved"
|
||||
|
||||
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"
|
||||
|
||||
class EarlyLightning(Toggle):
|
||||
|
@ -47,9 +67,34 @@ class EarlyLightning(Toggle):
|
|||
"""
|
||||
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
|
||||
class ShiversOptions(PerGameCommonOptions):
|
||||
ixupi_captures_needed: IxupiCapturesNeeded
|
||||
lobby_access: LobbyAccess
|
||||
puzzle_hints_required: PuzzleHintsRequired
|
||||
include_information_plaques: InformationPlaques
|
||||
|
@ -57,3 +102,5 @@ class ShiversOptions(PerGameCommonOptions):
|
|||
elevators_stay_solved: ElevatorsStaySolved
|
||||
early_beth: EarlyBeth
|
||||
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:
|
||||
return (state.can_reach("Lobby", "Region", player) or (state.can_reach("Janitor Closet", "Region", player) and cloth_capturable(state, player))) \
|
||||
and state.has_all({"Water Pot Bottom", "Water Pot Top", "Water Pot Bottom DUPE", "Water Pot Top DUPE"}, player)
|
||||
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.can_reach("Library", "Region", player) or state.can_reach("Anansi", "Region", player)) \
|
||||
and state.has_all({"Wax Pot Bottom", "Wax Pot Top", "Wax Pot Bottom DUPE", "Wax Pot Top DUPE"}, player)
|
||||
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.can_reach("Office", "Region", player) or state.can_reach("Burial", "Region", player)) \
|
||||
and state.has_all({"Ash Pot Bottom", "Ash Pot Top", "Ash Pot Bottom DUPE", "Ash Pot Top DUPE"}, player)
|
||||
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.can_reach("Prehistoric", "Region", player) or state.can_reach("Tar River", "Region", player)) \
|
||||
and state.has_all({"Oil Pot Bottom", "Oil Pot Top", "Oil Pot Bottom DUPE", "Oil Pot Top DUPE"}, player)
|
||||
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.can_reach("Egypt", "Region", player) or state.can_reach("Burial", "Region", player) or state.can_reach("Janitor Closet", "Region", player)) \
|
||||
and state.has_all({"Cloth Pot Bottom", "Cloth Pot Top", "Cloth Pot Bottom DUPE", "Cloth Pot Top DUPE"}, player)
|
||||
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.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)) \
|
||||
and state.has_all({"Wood Pot Bottom", "Wood Pot Top", "Wood Pot Bottom DUPE", "Wood Pot Top DUPE"}, player)
|
||||
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.can_reach("Lobby", "Region", player) or state.can_reach("Ocean", "Region", player)) \
|
||||
and state.has_all({"Crystal Pot Bottom", "Crystal Pot Top", "Crystal Pot Bottom DUPE", "Crystal Pot Top DUPE"}, player)
|
||||
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.can_reach("Greenhouse", "Region", player) or state.can_reach("Ocean", "Region", player)) \
|
||||
and state.has_all({"Sand Pot Bottom", "Sand Pot Top", "Sand Pot Bottom DUPE", "Sand Pot Top DUPE"}, player)
|
||||
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.can_reach("Projector Room", "Region", player) or state.can_reach("Prehistoric", "Region", player) or state.can_reach("Bedroom", "Region", player)) \
|
||||
and state.has_all({"Metal Pot Bottom", "Metal Pot Top", "Metal Pot Bottom DUPE", "Metal Pot Top DUPE"}, player)
|
||||
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 or state.multiworld.early_lightning[player].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)
|
||||
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.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)
|
||||
|
||||
|
||||
|
@ -123,7 +123,8 @@ def get_rules_lookup(player: int):
|
|||
"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 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),
|
||||
|
@ -207,8 +208,10 @@ def set_rules(world: "ShiversWorld") -> None:
|
|||
# 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)
|
||||
|
@ -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)
|
||||
|
||||
# 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 .Rules import set_rules
|
||||
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.
|
||||
"""
|
||||
|
||||
game: str = "Shivers"
|
||||
game = "Shivers"
|
||||
topology_present = False
|
||||
web = ShiversWeb()
|
||||
options_dataclass = ShiversOptions
|
||||
|
@ -30,7 +31,13 @@ class ShiversWorld(World):
|
|||
|
||||
item_name_to_id = {name: data.code for name, data in item_table.items()}
|
||||
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:
|
||||
data = item_table[name]
|
||||
return ShiversItem(name, data.classification, data.code, self.player)
|
||||
|
@ -78,9 +85,28 @@ class ShiversWorld(World):
|
|||
#Add items to item pool
|
||||
itempool = []
|
||||
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))
|
||||
|
||||
# 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
|
||||
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)
|
||||
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
|
||||
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:")])
|
||||
|
@ -123,14 +148,14 @@ class ShiversWorld(World):
|
|||
self.multiworld.itempool += itempool
|
||||
|
||||
#Lobby acess:
|
||||
if self.options.lobby_access == 1:
|
||||
if self.options.lobby_access == "early":
|
||||
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 Office Elevator"] = 1
|
||||
self.multiworld.early_items[self.player]["Key for Office"] = 1
|
||||
elif lobby_access_keys == 2:
|
||||
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:
|
||||
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
|
||||
|
@ -138,6 +163,12 @@ class ShiversWorld(World):
|
|||
elif lobby_access_keys == 2:
|
||||
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:
|
||||
# Prefills event storage locations with duplicate pots
|
||||
storagelocs = []
|
||||
|
@ -149,7 +180,23 @@ class ShiversWorld(World):
|
|||
if loc_name.startswith("Accessible: "):
|
||||
storagelocs.append(self.multiworld.get_location(loc_name, self.player))
|
||||
|
||||
storageitems += [self.create_item(name) for name, data in item_table.items() if data.type == 'potduplicate']
|
||||
#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']
|
||||
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)]
|
||||
|
||||
state = self.multiworld.get_all_state(True)
|
||||
|
@ -166,11 +213,13 @@ class ShiversWorld(World):
|
|||
def fill_slot_data(self) -> dict:
|
||||
|
||||
return {
|
||||
"storageplacements": self.storage_placements,
|
||||
"excludedlocations": {str(excluded_location).replace('ExcludeLocations(', '').replace(')', '') for excluded_location in self.multiworld.exclude_locations.values()},
|
||||
"elevatorsstaysolved": {self.options.elevators_stay_solved.value},
|
||||
"earlybeth": {self.options.early_beth.value},
|
||||
"earlylightning": {self.options.early_lightning.value},
|
||||
"StoragePlacements": self.storage_placements,
|
||||
"ExcludedLocations": list(self.options.exclude_locations.value),
|
||||
"IxupiCapturesNeeded": self.options.ixupi_captures_needed.value,
|
||||
"ElevatorsStaySolved": self.options.elevators_stay_solved.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) Colossus of Rhodes",
|
||||
"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: (Egypt) Tomb of the Ixupi",
|
||||
"Information Plaque: (Egypt) The Sphinx",
|
||||
|
@ -119,16 +119,6 @@
|
|||
"Outside": [
|
||||
"Puzzle Solved Gears",
|
||||
"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 Three Floor Elevator",
|
||||
"Puzzle Hint Found: Combo Lock in Mailbox",
|
||||
|
@ -182,7 +172,8 @@
|
|||
"Accessible: Storage: Transforming Mask"
|
||||
],
|
||||
"Generator": [
|
||||
"Final Riddle: Beth's Body Page 17"
|
||||
"Final Riddle: Beth's Body Page 17",
|
||||
"Ixupi Captured Lightning"
|
||||
],
|
||||
"Theater Back Hallways": [
|
||||
"Puzzle Solved Clock Tower Door"
|
||||
|
@ -210,6 +201,7 @@
|
|||
"Information Plaque: (Ocean) Poseidon's Temple"
|
||||
],
|
||||
"Maze Staircase": [
|
||||
"Information Plaque: (Underground Maze Staircase) Subterranean World",
|
||||
"Puzzle Solved Maze Door"
|
||||
],
|
||||
"Egypt": [
|
||||
|
@ -305,7 +297,6 @@
|
|||
],
|
||||
"Tar River": [
|
||||
"Accessible: Storage: Tar River",
|
||||
"Information Plaque: (Underground Maze) Subterranean World",
|
||||
"Information Plaque: (Underground Maze) Dero"
|
||||
],
|
||||
"Theater": [
|
||||
|
@ -320,6 +311,33 @@
|
|||
"Skull Dial Bridge": [
|
||||
"Accessible: Storage: Skull Bridge",
|
||||
"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 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", ["To Office Elevator From Office", "To Workshop", "To Lobby From Office", "To Bedroom Elevator From Office"]],
|
||||
["Workshop", ["To Office From Workshop"]],
|
||||
["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", "To Wood Capture From Workshop"]],
|
||||
["Bedroom Elevator", ["To Office From Bedroom Elevator", "To Bedroom"]],
|
||||
["Bedroom", ["To Bedroom Elevator 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"]],
|
||||
["Library", ["To Lobby From Library", "To Maintenance Tunnels From Library"]],
|
||||
["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", "To Water Capture From Lobby", "To Crystal Capture From Lobby"]],
|
||||
["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"]],
|
||||
["Generator", ["To Maintenance Tunnels From Generator"]],
|
||||
["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"]],
|
||||
["Clock Tower Staircase", ["To Theater Back Hallways From Clock Tower Staircase", "To Clock Tower"]],
|
||||
["Clock Tower", ["To Clock Tower Staircase From Clock Tower"]],
|
||||
["Projector Room", ["To Theater Back Hallways From Projector Room"]],
|
||||
["Prehistoric", ["To Lobby From Prehistoric", "To Greenhouse", "To Ocean From Prehistoric"]],
|
||||
["Greenhouse", ["To Prehistoric From Greenhouse"]],
|
||||
["Ocean", ["To Prehistoric From Ocean", "To Maze Staircase From Ocean"]],
|
||||
["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", "To Oil Capture From Prehistoric", "To Metal Capture From Prehistoric"]],
|
||||
["Greenhouse", ["To Prehistoric From Greenhouse", "To Sand Capture From Greenhouse"]],
|
||||
["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", ["To Maze Staircase From Maze", "To Tar River"]],
|
||||
["Tar River", ["To Maze From Tar River", "To Lobby From Tar River"]],
|
||||
["Egypt", ["To Lobby From Egypt", "To Burial From Egypt", "To Blue Maze From Egypt"]],
|
||||
["Burial", ["To Egypt From Burial", "To Shaman From Burial"]],
|
||||
["Shaman", ["To Burial From Shaman", "To Gods Room"]],
|
||||
["Gods Room", ["To Shaman From Gods Room", "To Anansi From Gods Room"]],
|
||||
["Anansi", ["To Gods Room From Anansi", "To Werewolf From Anansi"]],
|
||||
["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", "To Cloth Capture From Egypt"]],
|
||||
["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", "To Wax Capture From Shaman"]],
|
||||
["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", "To Wax Capture From Anansi", "To Wood Capture From Anansi"]],
|
||||
["Werewolf", ["To Anansi From Werewolf", "To Night Staircase From Werewolf"]],
|
||||
["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"]],
|
||||
["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"]],
|
||||
["Fortune Teller", ["To Blue Maze From Fortune Teller"]],
|
||||
["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 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"]],
|
||||
["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": [
|
||||
["To Registry", "Registry"],
|
||||
|
@ -140,6 +149,29 @@
|
|||
["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 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?
|
||||
|
||||
1. All puzzle solves are location checks excluding elevator puzzles.
|
||||
2. All Ixupi captures are location checks excluding Lightning.
|
||||
1. All puzzle solves are location checks.
|
||||
2. All Ixupi captures are location checks.
|
||||
3. Puzzle hints/solutions are location checks. For example, looking at the Atlantis map.
|
||||
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?
|
||||
|
||||
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?
|
||||
|
||||
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.
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
- [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
|
||||
- [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
|
||||
|
||||
|
|
Loading…
Reference in New Issue