211 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from dataclasses import dataclass
 | |
| 
 | |
| from Options import (
 | |
|     Choice, DefaultOnToggle, ExcludeLocations, LocalItems, NonLocalItems, OptionGroup, PerGameCommonOptions,
 | |
|     PriorityLocations, Range, StartHints, StartInventory, StartLocationHints, Toggle,
 | |
| )
 | |
| from . import ItemType, item_table
 | |
| from .Constants import location_info
 | |
| 
 | |
| 
 | |
| 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.
 | |
|     - Normal: Keys are placed anywhere
 | |
|     - Early: Keys are placed early 
 | |
|     - Local: Keys are placed locally and early
 | |
|     """
 | |
|     display_name = "Lobby Access"
 | |
|     option_normal = 0
 | |
|     option_early = 1
 | |
|     option_local = 2
 | |
|     default = 1
 | |
| 
 | |
| 
 | |
| class PuzzleHintsRequired(DefaultOnToggle):
 | |
|     """
 | |
|     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 obtaining access to Beth's Address Book
 | |
|     which gives you the solution.
 | |
| 
 | |
|     Turning this off allows for greater randomization.
 | |
|     """
 | |
|     display_name = "Puzzle Hints Required"
 | |
| 
 | |
| 
 | |
| class InformationPlaques(Toggle):
 | |
|     """
 | |
|     Adds Information Plaques as checks.
 | |
|     (40 Locations)
 | |
|     """
 | |
|     display_name = "Include Information Plaques"
 | |
| 
 | |
| 
 | |
| class FrontDoorUsable(Toggle):
 | |
|     """
 | |
|     Adds a key to unlock the front door of the museum.
 | |
|     """
 | |
|     display_name = "Front Door Usable"
 | |
| 
 | |
| 
 | |
| class ElevatorsStaySolved(DefaultOnToggle):
 | |
|     """
 | |
|     Adds elevators as checks and will remain open upon solving them.
 | |
|     (3 Locations)
 | |
|     """
 | |
|     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.
 | |
|     """
 | |
|     display_name = "Early Beth"
 | |
| 
 | |
| 
 | |
| class EarlyLightning(Toggle):
 | |
|     """
 | |
|     Allows lightning to be captured at any point in the game. You will still need to capture all ten Ixupi for victory.
 | |
|     (1 Location)
 | |
|     """
 | |
|     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
 | |
|     default = 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
 | |
| 
 | |
| 
 | |
| class IxupiCapturesPriority(DefaultOnToggle):
 | |
|     """
 | |
|     Ixupi captures are set to priority locations. This forces a progression item into these locations if possible.
 | |
|     """
 | |
|     display_name = "Ixupi Captures are Priority"
 | |
| 
 | |
| 
 | |
| class PuzzleCollectBehavior(Choice):
 | |
|     """
 | |
|     Defines what happens to puzzles on collect.
 | |
|     - Solve None: No puzzles will be solved when collected.
 | |
|     - Prevent Out Of Logic Access: All puzzles, except Red Door and Skull Door, will be solved when collected.
 | |
|     This prevents out of logic access to Gods Room and Slide.
 | |
|     - Solve All: All puzzles will be solved when collected. (original behavior)
 | |
|     """
 | |
|     display_name = "Puzzle Collect Behavior"
 | |
|     option_solve_none = 0
 | |
|     option_prevent_out_of_logic_access = 1
 | |
|     option_solve_all = 2
 | |
|     default = 1
 | |
| 
 | |
| 
 | |
| # Need to override the default options to remove the goal items and goal locations so that they do not show on web.
 | |
| valid_item_keys = [name for name, data in item_table.items() if data.type != ItemType.GOAL and data.code is not None]
 | |
| valid_location_keys = [name for name in location_info["all_locations"] if name != "Mystery Solved"]
 | |
| 
 | |
| 
 | |
| class ShiversLocalItems(LocalItems):
 | |
|     __doc__ = LocalItems.__doc__
 | |
|     valid_keys = valid_item_keys
 | |
| 
 | |
| 
 | |
| class ShiversNonLocalItems(NonLocalItems):
 | |
|     __doc__ = NonLocalItems.__doc__
 | |
|     valid_keys = valid_item_keys
 | |
| 
 | |
| 
 | |
| class ShiversStartInventory(StartInventory):
 | |
|     __doc__ = StartInventory.__doc__
 | |
|     valid_keys = valid_item_keys
 | |
| 
 | |
| 
 | |
| class ShiversStartHints(StartHints):
 | |
|     __doc__ = StartHints.__doc__
 | |
|     valid_keys = valid_item_keys
 | |
| 
 | |
| 
 | |
| class ShiversStartLocationHints(StartLocationHints):
 | |
|     __doc__ = StartLocationHints.__doc__
 | |
|     valid_keys = valid_location_keys
 | |
| 
 | |
| 
 | |
| class ShiversExcludeLocations(ExcludeLocations):
 | |
|     __doc__ = ExcludeLocations.__doc__
 | |
|     valid_keys = valid_location_keys
 | |
| 
 | |
| 
 | |
| class ShiversPriorityLocations(PriorityLocations):
 | |
|     __doc__ = PriorityLocations.__doc__
 | |
|     valid_keys = valid_location_keys
 | |
| 
 | |
| 
 | |
| @dataclass
 | |
| class ShiversOptions(PerGameCommonOptions):
 | |
|     ixupi_captures_needed: IxupiCapturesNeeded
 | |
|     lobby_access: LobbyAccess
 | |
|     puzzle_hints_required: PuzzleHintsRequired
 | |
|     include_information_plaques: InformationPlaques
 | |
|     front_door_usable: FrontDoorUsable
 | |
|     elevators_stay_solved: ElevatorsStaySolved
 | |
|     early_beth: EarlyBeth
 | |
|     early_lightning: EarlyLightning
 | |
|     location_pot_pieces: LocationPotPieces
 | |
|     full_pots: FullPots
 | |
|     ixupi_captures_priority: IxupiCapturesPriority
 | |
|     puzzle_collect_behavior: PuzzleCollectBehavior
 | |
|     local_items: ShiversLocalItems
 | |
|     non_local_items: ShiversNonLocalItems
 | |
|     start_inventory: ShiversStartInventory
 | |
|     start_hints: ShiversStartHints
 | |
|     start_location_hints: ShiversStartLocationHints
 | |
|     exclude_locations: ShiversExcludeLocations
 | |
|     priority_locations: ShiversPriorityLocations
 | |
| 
 | |
| 
 | |
| shivers_option_groups = [
 | |
|     OptionGroup(
 | |
|         "Item & Location Options", [
 | |
|             ShiversLocalItems,
 | |
|             ShiversNonLocalItems,
 | |
|             ShiversStartInventory,
 | |
|             ShiversStartHints,
 | |
|             ShiversStartLocationHints,
 | |
|             ShiversExcludeLocations,
 | |
|             ShiversPriorityLocations
 | |
|         ], True,
 | |
|     ),
 | |
| ]
 | 
