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, }