184 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			184 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from dataclasses import dataclass
							 | 
						||
| 
								 | 
							
								from typing import Dict, Any
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from Options import PerGameCommonOptions, DeathLink, StartInventoryPool, Choice, DefaultOnToggle, Range, Toggle, \
							 | 
						||
| 
								 | 
							
								    OptionGroup
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ExpandedPool(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Determines if places other than chests and special weapons will be locations.
							 | 
						||
| 
								 | 
							
								    This includes boss fights as well as powering the tesla orb and completing the console login.
							 | 
						||
| 
								 | 
							
								    In Expanded Pool, system power is instead restored when receiving the System Power item.
							 | 
						||
| 
								 | 
							
								    Similarly, the final area door will open once the four Key items, one for each main area, have been found.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Expanded Item Pool"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class InstantSaving(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    When enabled, save points activate with no delay when touched.
							 | 
						||
| 
								 | 
							
								    This makes saving much faster, at the cost of being unable to pick and choose when to save in order to save warp.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Instant Saving"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SprintAvailability(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Determines under which conditions the debug sprint is made accessible to the player.
							 | 
						||
| 
								 | 
							
								    To sprint, hold down Ctrl if playing on keyboard, or Left Bumper if on gamepad (remappable).
							 | 
						||
| 
								 | 
							
								    With Jacket: you will not be able to sprint until after the Jacket item has been found.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Sprint Availability"
							 | 
						||
| 
								 | 
							
								    option_never_available = 0
							 | 
						||
| 
								 | 
							
								    option_always_available = 1
							 | 
						||
| 
								 | 
							
								    option_available_with_jacket = 2
							 | 
						||
| 
								 | 
							
								    default = option_available_with_jacket
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CliffWeaponUpgrade(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Determines which weapon Cliff uses against you, base or upgraded.
							 | 
						||
| 
								 | 
							
								    This does not change the available strategies all that much.
							 | 
						||
| 
								 | 
							
								    Vanilla: Cliff adds fire to his grenades if Ace has been defeated.
							 | 
						||
| 
								 | 
							
								    If playing with the expanded pool, the Arctic Key will trigger the change instead.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Cliff Weapon Upgrade"
							 | 
						||
| 
								 | 
							
								    option_never_upgraded = 0
							 | 
						||
| 
								 | 
							
								    option_always_upgraded = 1
							 | 
						||
| 
								 | 
							
								    option_vanilla = 2
							 | 
						||
| 
								 | 
							
								    default = option_always_upgraded
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AceWeaponUpgrade(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Determines which weapon Ace uses against you, base or upgraded.
							 | 
						||
| 
								 | 
							
								    Ace with his base weapon is very hard to dodge, the upgraded weapon offers a more balanced experience.
							 | 
						||
| 
								 | 
							
								    Vanilla: Ace uses ice attacks if Cliff has been defeated.
							 | 
						||
| 
								 | 
							
								    If playing with the expanded pool, the Volcanic Key will trigger the change instead.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Ace Weapon Upgrade"
							 | 
						||
| 
								 | 
							
								    option_never_upgraded = 0
							 | 
						||
| 
								 | 
							
								    option_always_upgraded = 1
							 | 
						||
| 
								 | 
							
								    option_vanilla = 2
							 | 
						||
| 
								 | 
							
								    default = option_always_upgraded
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ScreenShakeIntensity(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Percentage multiplier for screen shake effects.
							 | 
						||
| 
								 | 
							
								    0% means the screen will not shake at all.
							 | 
						||
| 
								 | 
							
								    100% means the screen shake will be the same as in vanilla.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Screen Shake Intensity %"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    default = 50
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IFramesDuration(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Percentage multiplier for Portia's invincibility frames.
							 | 
						||
| 
								 | 
							
								    0% means you will have no invincibility frames.
							 | 
						||
| 
								 | 
							
								    100% means invincibility frames will be the same as vanilla.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "IFrame Duration %"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 400
							 | 
						||
| 
								 | 
							
								    default = 100
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TrapChance(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Likelihood of a filler item becoming a trap.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Trap Chance"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    default = 50
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MusicShuffle(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Enables music shuffling.
							 | 
						||
| 
								 | 
							
								    The title screen song is not shuffled, as it plays before the client connects.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Music Shuffle"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass
							 | 
						||
| 
								 | 
							
								class SavingPrincessOptions(PerGameCommonOptions):
							 | 
						||
| 
								 | 
							
								    # generation options
							 | 
						||
| 
								 | 
							
								    start_inventory_from_pool: StartInventoryPool
							 | 
						||
| 
								 | 
							
								    expanded_pool: ExpandedPool
							 | 
						||
| 
								 | 
							
								    trap_chance: TrapChance
							 | 
						||
| 
								 | 
							
								    # gameplay options
							 | 
						||
| 
								 | 
							
								    death_link: DeathLink
							 | 
						||
| 
								 | 
							
								    instant_saving: InstantSaving
							 | 
						||
| 
								 | 
							
								    sprint_availability: SprintAvailability
							 | 
						||
| 
								 | 
							
								    cliff_weapon_upgrade: CliffWeaponUpgrade
							 | 
						||
| 
								 | 
							
								    ace_weapon_upgrade: AceWeaponUpgrade
							 | 
						||
| 
								 | 
							
								    iframes_duration: IFramesDuration
							 | 
						||
| 
								 | 
							
								    # aesthetic options
							 | 
						||
| 
								 | 
							
								    shake_intensity: ScreenShakeIntensity
							 | 
						||
| 
								 | 
							
								    music_shuffle: MusicShuffle
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								groups = [
							 | 
						||
| 
								 | 
							
								    OptionGroup("Generation Options", [
							 | 
						||
| 
								 | 
							
								        ExpandedPool,
							 | 
						||
| 
								 | 
							
								        TrapChance,
							 | 
						||
| 
								 | 
							
								    ]),
							 | 
						||
| 
								 | 
							
								    OptionGroup("Gameplay Options", [
							 | 
						||
| 
								 | 
							
								        DeathLink,
							 | 
						||
| 
								 | 
							
								        InstantSaving,
							 | 
						||
| 
								 | 
							
								        SprintAvailability,
							 | 
						||
| 
								 | 
							
								        CliffWeaponUpgrade,
							 | 
						||
| 
								 | 
							
								        AceWeaponUpgrade,
							 | 
						||
| 
								 | 
							
								        IFramesDuration,
							 | 
						||
| 
								 | 
							
								    ]),
							 | 
						||
| 
								 | 
							
								    OptionGroup("Aesthetic Options", [
							 | 
						||
| 
								 | 
							
								        ScreenShakeIntensity,
							 | 
						||
| 
								 | 
							
								        MusicShuffle,
							 | 
						||
| 
								 | 
							
								    ]),
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								presets = {
							 | 
						||
| 
								 | 
							
								    "Vanilla-like": {
							 | 
						||
| 
								 | 
							
								        "expanded_pool": False,
							 | 
						||
| 
								 | 
							
								        "trap_chance": 0,
							 | 
						||
| 
								 | 
							
								        "death_link": False,
							 | 
						||
| 
								 | 
							
								        "instant_saving": False,
							 | 
						||
| 
								 | 
							
								        "sprint_availability": SprintAvailability.option_never_available,
							 | 
						||
| 
								 | 
							
								        "cliff_weapon_upgrade": CliffWeaponUpgrade.option_vanilla,
							 | 
						||
| 
								 | 
							
								        "ace_weapon_upgrade": AceWeaponUpgrade.option_vanilla,
							 | 
						||
| 
								 | 
							
								        "iframes_duration": 100,
							 | 
						||
| 
								 | 
							
								        "shake_intensity": 100,
							 | 
						||
| 
								 | 
							
								        "music_shuffle": False,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "Easy": {
							 | 
						||
| 
								 | 
							
								        "expanded_pool": True,
							 | 
						||
| 
								 | 
							
								        "trap_chance": 0,
							 | 
						||
| 
								 | 
							
								        "death_link": False,
							 | 
						||
| 
								 | 
							
								        "instant_saving": True,
							 | 
						||
| 
								 | 
							
								        "sprint_availability": SprintAvailability.option_always_available,
							 | 
						||
| 
								 | 
							
								        "cliff_weapon_upgrade": CliffWeaponUpgrade.option_never_upgraded,
							 | 
						||
| 
								 | 
							
								        "ace_weapon_upgrade": AceWeaponUpgrade.option_always_upgraded,
							 | 
						||
| 
								 | 
							
								        "iframes_duration": 200,
							 | 
						||
| 
								 | 
							
								        "shake_intensity": 50,
							 | 
						||
| 
								 | 
							
								        "music_shuffle": False,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "Hard": {
							 | 
						||
| 
								 | 
							
								        "expanded_pool": True,
							 | 
						||
| 
								 | 
							
								        "trap_chance": 100,
							 | 
						||
| 
								 | 
							
								        "death_link": True,
							 | 
						||
| 
								 | 
							
								        "instant_saving": True,
							 | 
						||
| 
								 | 
							
								        "sprint_availability": SprintAvailability.option_never_available,
							 | 
						||
| 
								 | 
							
								        "cliff_weapon_upgrade": CliffWeaponUpgrade.option_always_upgraded,
							 | 
						||
| 
								 | 
							
								        "ace_weapon_upgrade": AceWeaponUpgrade.option_never_upgraded,
							 | 
						||
| 
								 | 
							
								        "iframes_duration": 50,
							 | 
						||
| 
								 | 
							
								        "shake_intensity": 100,
							 | 
						||
| 
								 | 
							
								        "music_shuffle": False,
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |