297 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from dataclasses import dataclass
 | |
| from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, PerGameCommonOptions
 | |
| 
 | |
| 
 | |
| class ExtrasEnabled(Toggle):
 | |
|     """If enabled, the more difficult Extra stages will be added into logic. Otherwise, they will be inaccessible."""
 | |
|     display_name = "Include Extra Stages"
 | |
| 
 | |
| 
 | |
| class SplitExtras(Toggle):
 | |
|     """If enabled, Extra stages will be unlocked individually. Otherwise, there will be a single 'Extra Panels' item that unlocks all of them."""
 | |
|     display_name = "Split Extra Stages"
 | |
| 
 | |
| 
 | |
| class SplitBonus(Toggle):
 | |
|     """If enabled, Bonus Games will be unlocked individually. Otherwise, there will be a single 'Bonus Panels' item that unlocks all of them."""
 | |
|     display_name = "Split Bonus Games"
 | |
| 
 | |
| 
 | |
| class ObjectVis(Choice):
 | |
|     """This will determine the default visibility of objects revealed by the Magnifying Glass.
 | |
|     Strict Logic will expect the Secret Lens or a Magnifying Glass to interact with hidden clouds containing stars if they are not set to visible by default."""
 | |
|     display_name = "Hidden Object Visibility"
 | |
|     option_none = 0
 | |
|     option_coins_only = 1
 | |
|     option_clouds_only = 2
 | |
|     option_full = 3
 | |
|     default = 1
 | |
| 
 | |
| 
 | |
| class SoftlockPrevention(DefaultOnToggle):
 | |
|     """If enabled, hold R + X to warp to the last used Middle Ring, or the start of the level if none have been activated."""
 | |
|     display_name = "Softlock Prevention Code"
 | |
| 
 | |
| 
 | |
| class StageLogic(Choice):
 | |
|     """This determines what logic mode the stages will use.
 | |
|     Strict: Best for casual players or those new to playing Yoshi's Island in AP. Level requirements won't expect anything too difficult of the player.
 | |
|     Loose: Recommended for veterans of the original game. Won't expect anything too difficult, but may expect unusual platforming or egg throws.
 | |
|     Expert: Logic may expect advanced knowledge or memorization of level layouts, as well as jumps the player may only have one chance to make without restarting."""
 | |
|     display_name = "Stage Logic"
 | |
|     option_strict = 0
 | |
|     option_loose = 1
 | |
|     option_expert = 2
 | |
|     # option_glitched = 3
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class ShuffleMiddleRings(Toggle):
 | |
|     """If enabled, Middle Rings will be added to the item pool."""
 | |
|     display_name = "Shuffle Middle Rings"
 | |
| 
 | |
| 
 | |
| class ShuffleSecretLens(Toggle):
 | |
|     """If enabled, the Secret Lens will be added to the item pool.
 | |
|     The Secret Lens will act as a permanent Magnifying Glass."""
 | |
|     display_name = "Add Secret Lens"
 | |
| 
 | |
| 
 | |
| class DisableAutoScrollers(Toggle):
 | |
|     """If enabled, will disable autoscrolling during levels, except during levels which cannot function otherwise."""
 | |
|     display_name = "Disable Autoscrolling"
 | |
| 
 | |
| 
 | |
| class ItemLogic(Toggle):
 | |
|     """This will enable logic to expect consumables to be used from the inventory in place of some major items.
 | |
|     Logic will expect you to have access to an Overworld bonus game, or a bandit game to get the necessary items.
 | |
|     Logic will NOT expect grinding end-of-level bonus games, or any inventory consumables received from checks.
 | |
|     Casual logic will only expect consumables from Overworld games; Loose and Expert may expect them from bandit games."""
 | |
|     display_name = "Consumable Logic"
 | |
| 
 | |
| 
 | |
| class MinigameChecks(Choice):
 | |
|     """This will set minigame victories to give Archipelago checks.
 | |
|     This will not randomize minigames amongst themselves, and is compatible with item logic.
 | |
|     Bonus games will be expected to be cleared from the Overworld, not the end of levels.
 | |
|     Additionally, 1-Up bonus games will accept any profit as a victory."""
 | |
|     display_name = "Minigame Reward Checks"
 | |
|     option_none = 0
 | |
|     option_bandit_games = 1
 | |
|     option_bonus_games = 2
 | |
|     option_both = 3
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class StartingWorld(Choice):
 | |
|     """This sets which world you start in. Other worlds can be accessed by receiving a Gate respective to that world."""
 | |
|     display_name = "Starting World"
 | |
|     option_world_1 = 0
 | |
|     option_world_2 = 1
 | |
|     option_world_3 = 2
 | |
|     option_world_4 = 3
 | |
|     option_world_5 = 4
 | |
|     option_world_6 = 5
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class StartingLives(Range):
 | |
|     """This sets the amount of lives Yoshi will have upon loading the game."""
 | |
|     display_name = "Starting Life Count"
 | |
|     range_start = 1
 | |
|     range_end = 999
 | |
|     default = 3
 | |
| 
 | |
| 
 | |
| class PlayerGoal(Choice):
 | |
|     """This sets the goal. Bowser goal requires defeating Bowser at the end of 6-8, while Luigi Hunt requires collecting all required Luigi Pieces."""
 | |
|     display_name = "Goal"
 | |
|     option_bowser = 0
 | |
|     option_luigi_hunt = 1
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class LuigiPiecesReq(Range):
 | |
|     """This will set how many Luigi Pieces are required to trigger a victory."""
 | |
|     display_name = "Luigi Pieces Required"
 | |
|     range_start = 1
 | |
|     range_end = 100
 | |
|     default = 25
 | |
| 
 | |
| 
 | |
| class LuigiPiecesAmt(Range):
 | |
|     """This will set how many Luigi Pieces are in the item pool.
 | |
|        If the number in the pool is lower than the number required,
 | |
|        the amount in the pool will be randomized, with the minimum being the amount required."""
 | |
|     display_name = "Amount of Luigi Pieces"
 | |
|     range_start = 1
 | |
|     range_end = 100
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class FinalLevelBosses(Range):
 | |
|     """This sets how many bosses need to be defeated to access 6-8.
 | |
|        You can check this in-game by pressing SELECT while in any level."""
 | |
|     display_name = "Bosses Required for 6-8 Unlock"
 | |
|     range_start = 0
 | |
|     range_end = 11
 | |
|     default = 5
 | |
| 
 | |
| 
 | |
| class FinalBossBosses(Range):
 | |
|     """This sets how many bosses need to be defeated to access the boss of 6-8.
 | |
|        You can check this in-game by pressing SELECT while in any level."""
 | |
|     display_name = "Bosses Required for 6-8 Clear"
 | |
|     range_start = 0
 | |
|     range_end = 11
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class BowserDoor(Choice):
 | |
|     """This will set which route you take through 6-8.
 | |
|     Manual: You go through the door that you hit with an egg, as normal.
 | |
|     Doors: Route will be forced to be the door chosen here, regardless of which door you hit.
 | |
|     Gauntlet: You will be forced to go through all 4 routes in order before the final hallway."""
 | |
|     display_name = "Bowser's Castle Doors"
 | |
|     option_manual = 0
 | |
|     option_door_1 = 1
 | |
|     option_door_2 = 2
 | |
|     option_door_3 = 3
 | |
|     option_door_4 = 4
 | |
|     option_gauntlet = 5
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class BossShuffle(Toggle):
 | |
|     """This whill shuffle which boss each boss door will lead to. Each boss can only appear once, and Baby Bowser is left alone."""
 | |
|     display_name = "Boss Shuffle"
 | |
| 
 | |
| 
 | |
| class LevelShuffle(Choice):
 | |
|     """Disabled: All levels will appear in their normal location.
 | |
|     Bosses Guaranteed: All worlds will have a boss on -4 and -8.
 | |
|     Full: Worlds may have more than 2 or no bosses in them.
 | |
|     Regardless of the setting, 6-8 and Extra stages are not shuffled."""
 | |
|     display_name = "Level Shuffle"
 | |
|     option_disabled = 0
 | |
|     option_bosses_guaranteed = 1
 | |
|     option_full = 2
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class YoshiColors(Choice):
 | |
|     """Sets the Yoshi color for each level.
 | |
|     Normal will use the vanilla colors.
 | |
|     Random order will generate a random order of colors that will be used in each level. The stage 1 color will be used for Extra stages, and 6-8.
 | |
|     Random color will generate a random color for each stage.
 | |
|     Singularity will use a single color defined under 'Singularity Yoshi Color' for use in all stages."""
 | |
|     display_name = "Yoshi Colors"
 | |
|     option_normal = 0
 | |
|     option_random_order = 1
 | |
|     option_random_color = 2
 | |
|     option_singularity = 3
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class SinguColor(Choice):
 | |
|     """Sets which color Yoshi will be if Yoshi Colors is set to singularity."""
 | |
|     display_name = "Singularity Yoshi Color"
 | |
|     option_green = 0
 | |
|     option_pink = 1
 | |
|     option_cyan = 3
 | |
|     option_yellow = 2
 | |
|     option_purple = 4
 | |
|     option_brown = 5
 | |
|     option_red = 6
 | |
|     option_blue = 7
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class BabySound(Choice):
 | |
|     """Change the sound that Baby Mario makes when not on Yoshi."""
 | |
|     display_name = "Mario Sound Effect"
 | |
|     option_normal = 0
 | |
|     option_disabled = 1
 | |
|     option_random_sound_effect = 2
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class TrapsEnabled(Toggle):
 | |
|     """Will place traps into the item pool.
 | |
|        Traps have a variety of negative effects, and will only replace filler items."""
 | |
|     display_name = "Traps Enabled"
 | |
| 
 | |
| 
 | |
| class TrapPercent(Range):
 | |
|     """Percentage of the item pool that becomes replaced with traps."""
 | |
|     display_name = "Trap Chance"
 | |
|     range_start = 0
 | |
|     range_end = 100
 | |
|     default = 10
 | |
| 
 | |
| # class EnableScrets(Range):
 | |
|     # """This sets the amount of lives Yoshi will have upon loading the game."""
 | |
|     # display_name = "Starting Life Count"
 | |
|     # range_start = 1
 | |
|     # range_end = 255
 | |
|     # default = 3
 | |
| 
 | |
| # class BackgroundColors(Range):
 | |
|     # """This sets the amount of lives Yoshi will have upon loading the game."""
 | |
|     # display_name = "Starting Life Count"
 | |
|     # range_start = 1
 | |
|     # range_end = 255
 | |
|     # default = 3
 | |
| 
 | |
| # class Foreground Colors(Range):
 | |
|     # """This sets the amount of lives Yoshi will have upon loading the game."""
 | |
|     # display_name = "Starting Life Count"
 | |
|     # range_start = 1
 | |
|     # range_end = 255
 | |
|     # default = 3
 | |
| 
 | |
| # class Music Shuffle(Range):
 | |
|     # """This sets the amount of lives Yoshi will have upon loading the game."""
 | |
|     # display_name = "Starting Life Count"
 | |
|     # range_start = 1
 | |
|     # range_end = 255
 | |
|     # default = 3
 | |
| 
 | |
| # class Star Loss Rate(Range):
 | |
|     # """This sets the amount of lives Yoshi will have upon loading the game."""
 | |
|     # display_name = "Starting Life Count"
 | |
|     # range_start = 1
 | |
|     # range_end = 255
 | |
|     # default = 3
 | |
| 
 | |
| 
 | |
| @dataclass
 | |
| class YoshisIslandOptions(PerGameCommonOptions):
 | |
|     starting_world: StartingWorld
 | |
|     starting_lives: StartingLives
 | |
|     goal: PlayerGoal
 | |
|     luigi_pieces_required: LuigiPiecesReq
 | |
|     luigi_pieces_in_pool: LuigiPiecesAmt
 | |
|     extras_enabled:  ExtrasEnabled
 | |
|     minigame_checks: MinigameChecks
 | |
|     split_extras: SplitExtras
 | |
|     split_bonus: SplitBonus
 | |
|     hidden_object_visibility: ObjectVis
 | |
|     add_secretlens: ShuffleSecretLens
 | |
|     shuffle_midrings: ShuffleMiddleRings
 | |
|     stage_logic: StageLogic
 | |
|     item_logic: ItemLogic
 | |
|     disable_autoscroll: DisableAutoScrollers
 | |
|     softlock_prevention: SoftlockPrevention
 | |
|     castle_open_condition: FinalLevelBosses
 | |
|     castle_clear_condition: FinalBossBosses
 | |
|     bowser_door_mode: BowserDoor
 | |
|     level_shuffle: LevelShuffle
 | |
|     boss_shuffle: BossShuffle
 | |
|     yoshi_colors: YoshiColors
 | |
|     yoshi_singularity_color: SinguColor
 | |
|     baby_mario_sound: BabySound
 | |
|     traps_enabled: TrapsEnabled
 | |
|     trap_percent: TrapPercent
 | |
|     death_link: DeathLink
 | 
