237 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			237 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import typing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from Options import Choice, Range, Option, Toggle, DeathLink, DefaultOnToggle, OptionList
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Goal(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Determines the goal of the seed
							 | 
						||
| 
								 | 
							
								    Bowser: Defeat Koopalings, reach Bowser's Castle and defeat Bowser
							 | 
						||
| 
								 | 
							
								    Yoshi Egg Hunt: Find a certain number of Yoshi Eggs
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Goal"
							 | 
						||
| 
								 | 
							
								    option_bowser = 0
							 | 
						||
| 
								 | 
							
								    option_yoshi_egg_hunt = 1
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BossesRequired(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    How many Bosses (Koopalings or Reznor) must be defeated in order to defeat Bowser
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Bosses Required"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 11
							 | 
						||
| 
								 | 
							
								    default = 7
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NumberOfYoshiEggs(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    How many Yoshi Eggs are in the pool for Yoshi Egg Hunt
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Total Number of Yoshi Eggs"
							 | 
						||
| 
								 | 
							
								    range_start = 1
							 | 
						||
| 
								 | 
							
								    range_end = 80
							 | 
						||
| 
								 | 
							
								    default = 50
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PercentageOfYoshiEggs(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    What Percentage of Yoshi Eggs are required to finish Yoshi Egg Hunt
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Required Percentage of Yoshi Eggs"
							 | 
						||
| 
								 | 
							
								    range_start = 1
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    default = 100
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DragonCoinChecks(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Whether collecting 5 Dragon Coins in each level will grant a check
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Dragon Coin Checks"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BowserCastleDoors(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    How the doors of Bowser's Castle behave
							 | 
						||
| 
								 | 
							
								    Vanilla: Front and Back Doors behave as vanilla
							 | 
						||
| 
								 | 
							
								    Fast: Both doors behave as the Back Door
							 | 
						||
| 
								 | 
							
								    Slow: Both doors behave as the Front Door
							 | 
						||
| 
								 | 
							
								    "Front Door" requires beating all 8 Rooms
							 | 
						||
| 
								 | 
							
								    "Back Door" only requires going through the dark hallway to Bowser
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Bowser Castle Doors"
							 | 
						||
| 
								 | 
							
								    option_vanilla = 0
							 | 
						||
| 
								 | 
							
								    option_fast = 1
							 | 
						||
| 
								 | 
							
								    option_slow = 2
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LevelShuffle(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Whether levels are shuffled
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Level Shuffle"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SwapDonutGhostHouseExits(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    If enabled, this option will swap which overworld direction the two exits of the level at the Donut Ghost House overworld tile go:
							 | 
						||
| 
								 | 
							
								    False: Normal Exit goes up, Secret Exit goes right.
							 | 
						||
| 
								 | 
							
								    True: Normal Exit goes right, Secret Exit goes up.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Swap Donut GH Exits"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DisplaySentItemPopups(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    What messages to display in-game for items sent
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Display Sent Item Popups"
							 | 
						||
| 
								 | 
							
								    option_none = 0
							 | 
						||
| 
								 | 
							
								    option_all = 1
							 | 
						||
| 
								 | 
							
								    default = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DisplayReceivedItemPopups(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    What messages to display in-game for items received
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Display Received Item Popups"
							 | 
						||
| 
								 | 
							
								    option_none = 0
							 | 
						||
| 
								 | 
							
								    option_all = 1
							 | 
						||
| 
								 | 
							
								    option_progression = 2
							 | 
						||
| 
								 | 
							
								    default = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TrapFillPercentage(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Replace a percentage of junk items in the item pool with random traps
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Trap Fill Percentage"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BaseTrapWeight(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Base Class for Trap Weights
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    option_none = 0
							 | 
						||
| 
								 | 
							
								    option_low = 1
							 | 
						||
| 
								 | 
							
								    option_medium = 2
							 | 
						||
| 
								 | 
							
								    option_high = 4
							 | 
						||
| 
								 | 
							
								    default = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IceTrapWeight(BaseTrapWeight):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Likelihood of a receiving a trap which causes the level to become slippery
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Ice Trap Weight"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StunTrapWeight(BaseTrapWeight):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Likelihood of a receiving a trap which briefly stuns Mario
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Stun Trap Weight"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LiteratureTrapWeight(BaseTrapWeight):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Likelihood of a receiving a trap which causes the player to read literature
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Literature Trap Weight"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Autosave(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Whether a save prompt will appear after every level
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Autosave"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MusicShuffle(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Music shuffle type
							 | 
						||
| 
								 | 
							
								    None: No Music is shuffled
							 | 
						||
| 
								 | 
							
								    Consistent: Each music track is consistently shuffled throughout the game
							 | 
						||
| 
								 | 
							
								    Full: Each individual level has a random music track
							 | 
						||
| 
								 | 
							
								    Singularity: The entire game uses one song for overworld and one song for levels
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Music Shuffle"
							 | 
						||
| 
								 | 
							
								    option_none = 0
							 | 
						||
| 
								 | 
							
								    option_consistent = 1
							 | 
						||
| 
								 | 
							
								    option_full = 2
							 | 
						||
| 
								 | 
							
								    option_singularity = 3
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MarioPalette(Choice):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Mario palette color
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Mario Palette"
							 | 
						||
| 
								 | 
							
								    option_mario = 0
							 | 
						||
| 
								 | 
							
								    option_luigi = 1
							 | 
						||
| 
								 | 
							
								    option_wario = 2
							 | 
						||
| 
								 | 
							
								    option_waluigi = 3
							 | 
						||
| 
								 | 
							
								    option_geno = 4
							 | 
						||
| 
								 | 
							
								    option_princess = 5
							 | 
						||
| 
								 | 
							
								    option_dark = 6
							 | 
						||
| 
								 | 
							
								    option_sponge = 7
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ForegroundPaletteShuffle(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Whether to shuffle level foreground palettes
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Foreground Palette Shuffle"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BackgroundPaletteShuffle(Toggle):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Whether to shuffle level background palettes
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Background Palette Shuffle"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StartingLifeCount(Range):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    How many extra lives to start the game with
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    display_name = "Starting Life Count"
							 | 
						||
| 
								 | 
							
								    range_start = 1
							 | 
						||
| 
								 | 
							
								    range_end = 99
							 | 
						||
| 
								 | 
							
								    default = 5
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								smw_options: typing.Dict[str, type(Option)] = {
							 | 
						||
| 
								 | 
							
								    "death_link": DeathLink,
							 | 
						||
| 
								 | 
							
								    "goal": Goal,
							 | 
						||
| 
								 | 
							
								    "bosses_required": BossesRequired,
							 | 
						||
| 
								 | 
							
								    "number_of_yoshi_eggs": NumberOfYoshiEggs,
							 | 
						||
| 
								 | 
							
								    "percentage_of_yoshi_eggs": PercentageOfYoshiEggs,
							 | 
						||
| 
								 | 
							
								    "dragon_coin_checks": DragonCoinChecks,
							 | 
						||
| 
								 | 
							
								    "bowser_castle_doors": BowserCastleDoors,
							 | 
						||
| 
								 | 
							
								    "level_shuffle": LevelShuffle,
							 | 
						||
| 
								 | 
							
								    "swap_donut_gh_exits": SwapDonutGhostHouseExits,
							 | 
						||
| 
								 | 
							
								    #"display_sent_item_popups": DisplaySentItemPopups,
							 | 
						||
| 
								 | 
							
								    "display_received_item_popups": DisplayReceivedItemPopups,
							 | 
						||
| 
								 | 
							
								    "trap_fill_percentage": TrapFillPercentage,
							 | 
						||
| 
								 | 
							
								    "ice_trap_weight": IceTrapWeight,
							 | 
						||
| 
								 | 
							
								    "stun_trap_weight": StunTrapWeight,
							 | 
						||
| 
								 | 
							
								    "literature_trap_weight": LiteratureTrapWeight,
							 | 
						||
| 
								 | 
							
								    "autosave": Autosave,
							 | 
						||
| 
								 | 
							
								    "music_shuffle": MusicShuffle,
							 | 
						||
| 
								 | 
							
								    "mario_palette": MarioPalette,
							 | 
						||
| 
								 | 
							
								    "foreground_palette_shuffle": ForegroundPaletteShuffle,
							 | 
						||
| 
								 | 
							
								    "background_palette_shuffle": BackgroundPaletteShuffle,
							 | 
						||
| 
								 | 
							
								    "starting_life_count": StartingLifeCount,
							 | 
						||
| 
								 | 
							
								}
							 |