mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
SMW: Option Groups and Presets (#3345)
* SMW: Add Option Groups and Presets * Fix Boss Shuffle Preset * Tooltip formatting
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from Options import Choice, Range, Toggle, DeathLink, DefaultOnToggle, PerGameCommonOptions
|
||||
from Options import Choice, Range, Toggle, DeathLink, DefaultOnToggle, OptionGroup, PerGameCommonOptions
|
||||
|
||||
|
||||
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"
|
||||
@@ -28,7 +30,9 @@ class BossesRequired(Range):
|
||||
class NumberOfYoshiEggs(Range):
|
||||
"""
|
||||
Maximum possible number of Yoshi Eggs that will be in the item pool
|
||||
|
||||
If fewer available locations exist in the pool than this number, the number of available locations will be used instead.
|
||||
|
||||
Required Percentage of Yoshi Eggs will be calculated based off of that number.
|
||||
"""
|
||||
display_name = "Max Number of Yoshi Eggs"
|
||||
@@ -64,7 +68,9 @@ class MoonChecks(Toggle):
|
||||
class Hidden1UpChecks(Toggle):
|
||||
"""
|
||||
Whether collecting a hidden 1-Up mushroom in a level will grant a check
|
||||
|
||||
These checks are considered cryptic as there's no actual indicator that they're in their respective places
|
||||
|
||||
Enable this option at your own risk
|
||||
"""
|
||||
display_name = "Hidden 1-Up Checks"
|
||||
@@ -80,7 +86,9 @@ class BonusBlockChecks(Toggle):
|
||||
class Blocksanity(Toggle):
|
||||
"""
|
||||
Whether hitting a block with an item or coin inside will grant a check
|
||||
|
||||
Note that some blocks are excluded due to how the option and the game works!
|
||||
|
||||
Exclusion list:
|
||||
* Blocks in Top Secret Area & Front Door/Bowser Castle
|
||||
* Blocks that are unreachable unless you glitch your way in
|
||||
@@ -91,10 +99,15 @@ class Blocksanity(Toggle):
|
||||
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" rooms depend on the `bowser_castle_rooms` option
|
||||
|
||||
"Back Door" only requires going through the dark hallway to Bowser
|
||||
"""
|
||||
display_name = "Bowser Castle Doors"
|
||||
@@ -107,10 +120,15 @@ class BowserCastleDoors(Choice):
|
||||
class BowserCastleRooms(Choice):
|
||||
"""
|
||||
How the rooms of Bowser's Castle Front Door behave
|
||||
|
||||
Vanilla: You can choose which rooms to enter, as in vanilla
|
||||
|
||||
Random Two Room: Two random rooms are chosen
|
||||
|
||||
Random Five Room: Five random rooms are chosen
|
||||
|
||||
Gauntlet: All eight rooms must be cleared
|
||||
|
||||
Labyrinth: Which room leads to Bowser?
|
||||
"""
|
||||
display_name = "Bowser Castle Rooms"
|
||||
@@ -125,9 +143,13 @@ class BowserCastleRooms(Choice):
|
||||
class BossShuffle(Choice):
|
||||
"""
|
||||
How bosses are shuffled
|
||||
|
||||
None: Bosses are not shuffled
|
||||
|
||||
Simple: Four Reznors and the seven Koopalings are shuffled around
|
||||
|
||||
Full: Each boss location gets a fully random boss
|
||||
|
||||
Singularity: One or two bosses are chosen and placed at every boss location
|
||||
"""
|
||||
display_name = "Boss Shuffle"
|
||||
@@ -148,6 +170,7 @@ class LevelShuffle(Toggle):
|
||||
class ExcludeSpecialZone(Toggle):
|
||||
"""
|
||||
If active, this option will prevent any progression items from being placed in Special Zone levels.
|
||||
|
||||
Additionally, if Level Shuffle is active, Special Zone levels will not be shuffled away from their vanilla tiles.
|
||||
"""
|
||||
display_name = "Exclude Special Zone"
|
||||
@@ -155,9 +178,10 @@ class ExcludeSpecialZone(Toggle):
|
||||
|
||||
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:
|
||||
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"
|
||||
@@ -258,6 +282,7 @@ class Autosave(DefaultOnToggle):
|
||||
class EarlyClimb(Toggle):
|
||||
"""
|
||||
Force Climb to appear early in the seed as a local item.
|
||||
|
||||
This is particularly useful to prevent BK when Level Shuffle is disabled
|
||||
"""
|
||||
display_name = "Early Climb"
|
||||
@@ -277,9 +302,13 @@ class OverworldSpeed(Choice):
|
||||
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"
|
||||
@@ -293,9 +322,13 @@ class MusicShuffle(Choice):
|
||||
class SFXShuffle(Choice):
|
||||
"""
|
||||
Shuffles almost every instance of sound effect playback
|
||||
|
||||
Archipelago elements that play sound effects aren't randomized
|
||||
|
||||
None: No SFX are shuffled
|
||||
|
||||
Full: Each individual SFX call has a random SFX
|
||||
|
||||
Singularity: The entire game uses one SFX for every SFX call
|
||||
"""
|
||||
display_name = "Sound Effect Shuffle"
|
||||
@@ -324,8 +357,11 @@ class MarioPalette(Choice):
|
||||
class LevelPaletteShuffle(Choice):
|
||||
"""
|
||||
Whether to shuffle level palettes
|
||||
|
||||
Off: Do not shuffle palettes
|
||||
|
||||
On Legacy: Uses only the palette sets from the original game
|
||||
|
||||
On Curated: Uses custom, hand-crafted palette sets
|
||||
"""
|
||||
display_name = "Level Palette Shuffle"
|
||||
@@ -338,8 +374,11 @@ class LevelPaletteShuffle(Choice):
|
||||
class OverworldPaletteShuffle(Choice):
|
||||
"""
|
||||
Whether to shuffle overworld palettes
|
||||
|
||||
Off: Do not shuffle palettes
|
||||
|
||||
On Legacy: Uses only the palette sets from the original game
|
||||
|
||||
On Curated: Uses custom, hand-crafted palette sets
|
||||
"""
|
||||
display_name = "Overworld Palette Shuffle"
|
||||
@@ -359,6 +398,52 @@ class StartingLifeCount(Range):
|
||||
default = 5
|
||||
|
||||
|
||||
smw_option_groups = [
|
||||
OptionGroup("Goal Options", [
|
||||
Goal,
|
||||
BossesRequired,
|
||||
NumberOfYoshiEggs,
|
||||
PercentageOfYoshiEggs,
|
||||
]),
|
||||
OptionGroup("Sanity Options", [
|
||||
DragonCoinChecks,
|
||||
MoonChecks,
|
||||
Hidden1UpChecks,
|
||||
BonusBlockChecks,
|
||||
Blocksanity,
|
||||
]),
|
||||
OptionGroup("Level Shuffling", [
|
||||
LevelShuffle,
|
||||
ExcludeSpecialZone,
|
||||
BowserCastleDoors,
|
||||
BowserCastleRooms,
|
||||
BossShuffle,
|
||||
SwapDonutGhostHouseExits,
|
||||
]),
|
||||
OptionGroup("Junk and Traps", [
|
||||
JunkFillPercentage,
|
||||
TrapFillPercentage,
|
||||
IceTrapWeight,
|
||||
StunTrapWeight,
|
||||
LiteratureTrapWeight,
|
||||
TimerTrapWeight,
|
||||
ReverseTrapWeight,
|
||||
ThwimpTrapWeight,
|
||||
]),
|
||||
OptionGroup("Aesthetics", [
|
||||
DisplayReceivedItemPopups,
|
||||
Autosave,
|
||||
OverworldSpeed,
|
||||
MusicShuffle,
|
||||
SFXShuffle,
|
||||
MarioPalette,
|
||||
LevelPaletteShuffle,
|
||||
OverworldPaletteShuffle,
|
||||
StartingLifeCount,
|
||||
]),
|
||||
]
|
||||
|
||||
|
||||
@dataclass
|
||||
class SMWOptions(PerGameCommonOptions):
|
||||
death_link: DeathLink
|
||||
|
||||
Reference in New Issue
Block a user