Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: alchav <alchav@jalchavware.com>
		
			
				
	
	
		
			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
 |