199 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			199 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from Options import Toggle, Choice, NamedRange, Range, PerGameCommonOptions, ItemsAccessibility
							 | 
						||
| 
								 | 
							
								from dataclasses import dataclass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ShuffleGoldenCoins(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Vanilla: Golden Coins are received when defeating bosses.
							 | 
						||
| 
								 | 
							
								    Shuffle: Shuffle the Golden Coins into the item pool and make bosses location checks.
							 | 
						||
| 
								 | 
							
								    Mario Coin Fragment Hunt: You start with all Golden Coins except the Mario Coin, which has been fragmented into many pieces.
							 | 
						||
| 
								 | 
							
								    You will see a Golden Coin being received when defeating bosses regardless of whether you are actually getting a coin.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Shuffle Golden Coins"
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								    option_vanilla = 0
							 | 
						||
| 
								 | 
							
								    option_shuffle = 1
							 | 
						||
| 
								 | 
							
								    option_mario_coin_fragment_hunt = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class GoldenCoinsRequired(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Number of Golden Coins required to enter Mario's Castle. Ignored on Mario Coin Fragment Hunt.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Golden Coins Required"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 6
							 | 
						||
| 
								 | 
							
								    default = 6
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MarioCoinFragmentPercentage(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Percentage of filler items to be replaced with Mario Coin Fragments. Note that the Coinsanity and Coinsanity
							 | 
						||
| 
								 | 
							
								    Checks options will greatly impact the number of replaceable filler items.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Mario Coin Fragment Percentage"
							 | 
						||
| 
								 | 
							
								    range_start = 1
							 | 
						||
| 
								 | 
							
								    range_end = 50
							 | 
						||
| 
								 | 
							
								    default = 20
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MarioCoinFragmentsRequiredPercentage(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Percentage of the Mario Coins in the item pool that are required to put the Mario Coin together.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Mario Coin Fragments Required Percentage"
							 | 
						||
| 
								 | 
							
								    range_start = 1
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    default = 75
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ShuffleMidwayBells(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Shuffle Midway Bells into the item pool. You can always start at the beginning of a level after obtaining the
							 | 
						||
| 
								 | 
							
								    Midway Bell by holding SELECT while entering the level (until you load into the level).
							 | 
						||
| 
								 | 
							
								    The Midway Bells in levels will trigger location checks whether this option is on or not, but they will only
							 | 
						||
| 
								 | 
							
								    set the checkpoint if this is off, otherwise you must obtain the Midway Bell item from the item pool.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Shuffle Midway Bells"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MariosCastleMidwayBell(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Adds a Midway Bell to the final stage, just before the Wario fight.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Mario's Castle Midway Bell"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Coinsanity(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Shuffles the singular coins found freestanding and in question mark blocks into the item pool, and adds location
							 | 
						||
| 
								 | 
							
								    checks made by obtaining a sufficient number of coins in particular levels within a single playthrough.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Coinsanity"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CoinsanityChecks(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Number of Coinsanity checks.
							 | 
						||
| 
								 | 
							
								    A higher number means more checks, and smaller coin amounts per coin item in the item pool.
							 | 
						||
| 
								 | 
							
								    If Accessibility is set to Full, auto-scroll levels may have a lower maximum count, which may lead to this
							 | 
						||
| 
								 | 
							
								    value being limited.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Coinsanity Checks"
							 | 
						||
| 
								 | 
							
								    range_start = 31
							 | 
						||
| 
								 | 
							
								    range_end = 2599
							 | 
						||
| 
								 | 
							
								    default = 150
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DifficultyMode(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Play in normal or easy mode. You can also start in Normal Mode with an "upgrade" to Easy Mode in the item pool,
							 | 
						||
| 
								 | 
							
								    or start in Easy Mode with a Normal Mode "trap" in the item pool.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Difficulty Mode"
							 | 
						||
| 
								 | 
							
								    option_normal = 0
							 | 
						||
| 
								 | 
							
								    option_easy = 1
							 | 
						||
| 
								 | 
							
								    option_normal_to_easy = 2
							 | 
						||
| 
								 | 
							
								    option_easy_to_normal = 3
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ShufflePipeTraversal(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Single: Shuffle a Pipe Traversal item into the item pool, which is required to enter any pipes.
							 | 
						||
| 
								 | 
							
								    Split: Shuffle 4 Pipe Traversal items, one required for entering pipes from each direction.
							 | 
						||
| 
								 | 
							
								    Note that being unable to enter pipes is very limiting and affects nearly half of all levels.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Shuffle Pipe Traversal"
							 | 
						||
| 
								 | 
							
								    option_off = 0
							 | 
						||
| 
								 | 
							
								    option_single = 1
							 | 
						||
| 
								 | 
							
								    option_split = 2
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RandomizeEnemies(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Randomize enemies throughout levels.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Randomize Enemies"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RandomizePlatforms(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Randomize platforms throughout levels.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Randomize Platforms"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AutoScrollChances(NamedRange):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Chance per eligible level to be made into an auto scroll level. Can also set to Vanilla to leave them unchanged.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Auto Scroll Chance"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    special_range_names = {"vanilla": -1, "none": 0, "all": 100}
							 | 
						||
| 
								 | 
							
								    default = -1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AutoScrollMode(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Always: Any auto scroll levels will always auto-scroll.
							 | 
						||
| 
								 | 
							
								    Global Trap Item: Auto scroll levels will only auto-scroll after obtaining the Auto Scroll trap item.
							 | 
						||
| 
								 | 
							
								    Level Trap Items: As with Trap Item, but there is a separate trap item for each auto scroll level.
							 | 
						||
| 
								 | 
							
								    Global Cancel Item: Auto Scroll levels will stop auto-scrolling after obtaining the Auto Scroll Cancel item.
							 | 
						||
| 
								 | 
							
								    Level Cancel Items: As with Cancel Item, but there is a separate cancel item for each auto scroll level.
							 | 
						||
| 
								 | 
							
								    Chaos: Each level will randomly always auto scroll, have an Auto Scroll Trap, or have an Auto Scroll Cancel item.
							 | 
						||
| 
								 | 
							
								    The effects of Trap and Cancel items are permanent! If Accessibility is not set to Full,
							 | 
						||
| 
								 | 
							
								    Traps may cause locations to become permanently unreachable.
							 | 
						||
| 
								 | 
							
								    With individual level items, the number of auto scroll levels may be limited by the available space in the item
							 | 
						||
| 
								 | 
							
								    pool.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Auto Scroll Mode"
							 | 
						||
| 
								 | 
							
								    option_always = 0
							 | 
						||
| 
								 | 
							
								    option_global_trap_item = 1
							 | 
						||
| 
								 | 
							
								    option_level_trap_items = 2
							 | 
						||
| 
								 | 
							
								    option_global_cancel_item = 3
							 | 
						||
| 
								 | 
							
								    option_level_cancel_items = 4
							 | 
						||
| 
								 | 
							
								    option_chaos = 5
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RandomizeMusic(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Randomize the music that plays in levels and overworld areas.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Randomize Music"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class EnergyLink(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    All extra lives beyond 1 are transferred into the server's shared EnergyLink storage. If you drop to 0,
							 | 
						||
| 
								 | 
							
								    1 will be replenished if there is sufficient energy stored.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Energy Link"
							 | 
						||
| 
								 | 
							
								    default = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass
							 | 
						||
| 
								 | 
							
								class SML2Options(PerGameCommonOptions):
							 | 
						||
| 
								 | 
							
								    accessibility: ItemsAccessibility
							 | 
						||
| 
								 | 
							
								    shuffle_golden_coins: ShuffleGoldenCoins
							 | 
						||
| 
								 | 
							
								    required_golden_coins: GoldenCoinsRequired
							 | 
						||
| 
								 | 
							
								    mario_coin_fragment_percentage: MarioCoinFragmentPercentage
							 | 
						||
| 
								 | 
							
								    mario_coin_fragments_required_percentage: MarioCoinFragmentsRequiredPercentage
							 | 
						||
| 
								 | 
							
								    coinsanity: Coinsanity
							 | 
						||
| 
								 | 
							
								    coinsanity_checks: CoinsanityChecks
							 | 
						||
| 
								 | 
							
								    shuffle_midway_bells: ShuffleMidwayBells
							 | 
						||
| 
								 | 
							
								    marios_castle_midway_bell: MariosCastleMidwayBell
							 | 
						||
| 
								 | 
							
								    shuffle_pipe_traversal: ShufflePipeTraversal
							 | 
						||
| 
								 | 
							
								    auto_scroll_mode: AutoScrollMode
							 | 
						||
| 
								 | 
							
								    auto_scroll_chances: AutoScrollChances
							 | 
						||
| 
								 | 
							
								    difficulty_mode: DifficultyMode
							 | 
						||
| 
								 | 
							
								    randomize_enemies: RandomizeEnemies
							 | 
						||
| 
								 | 
							
								    randomize_platforms: RandomizePlatforms
							 | 
						||
| 
								 | 
							
								    randomize_music: RandomizeMusic
							 | 
						||
| 
								 | 
							
								    energy_link: EnergyLink
							 |