Files
Grinch-AP/worlds/sa2b/Presets.py
PoryGone 294a67a4b4 SA2B: v2.4 - Minigame Madness (#4663)
Changelog:

Features:
- New Goal
  - Minigame Madness
    - Win a certain number of each type of Minigame Trap, then defeat the Finalhazard to win!
	- How many of each Minigame are required can be set by an Option
	- When the required amount of a Minigame has been received, that Minigame can be replayed in the Chao World Lobby
- New optional Location Checks
  - Bigsanity
    - Go fishing with Big in each stage for a Location Check
  - Itemboxsanity
    - Either Extra Life Boxes or All Item Boxes
- New Items
  - New Traps
    - Literature Trap
	- Controller Drift Trap
	- Poison Trap
	- Bee Trap
  - New Minigame Traps
    - Breakout Trap
	- Fishing Trap
	- Trivia Trap
	- Pokemon Trivia Trap
	- Pokemon Count Trap
	- Number Sequence Trap
	- Light Up Path Trap
	- Pinball Trap
	- Math Quiz Trap
	- Snake Trap
	- Input Sequence Trap
- Trap Link
  - When you receive a trap, you send a copy of it to every other player with Trap Link enabled
- Boss Gate Plando
- Expert Logic Difficulty
	- Use at your own risk. This difficulty requires complete mastery of SA2.
- Missions can now be enabled and disabled per-character, instead of just per-style
- Minigame Difficulty can now be set to "Chaos", which selects a new difficulty randomly per-trap received

Quality of Life:
- Gate Stages and Mission Orders are now displayed in the spoiler log
- Additional play stats are saved and displayed with the randomizer credits
- Stage Locations progress UI now displays in multiple pages when Itemboxsanity is enabled
- Current stage mission order and progress are now shown when paused in-level
- Chaos Emeralds are now shown when paused in-level
- Location Name Groups were created
- Moved SA2B to the new Options system
- Option Presets were created
- Error Messages are more obvious

Bug Fixes:
- Added missing `Dry Lagoon - 12 Animals` location
- Flying Dog boss should no longer crash when you have done at least 3 Intermediate Kart Races
- Invincibility can no longer be received in the King Boom Boo fight, preventing a crash
- Chaos Emeralds should no longer disproportionately end up in Cannon's Core or the final Level Gate
- Going into submenus from the pause menu should no longer reset traps
- `Sonic - Magic Gloves` are now plural
- Junk items will no longer cause a crash when in a falling state
- Chao Garden:
	- Prevent races from occasionally becoming uncompletable when using the "Prize Only" option
	- Properly allow Hero Chao to participate in Dark Races
	- Don't allow the Chao Garden to send locations when connected to an invalid server
	- Prevent the Chao Garden from resetting your life count
	- Fix Chao World Entrance Shuffle causing inaccessible Neutral Garden
	- Fix pressing the 'B' button to take you to the proper location in Chao World Entrance Shuffle
	- Prevent Chao Karate progress icon overflow
	- Prevent changing Chao Timescale while paused or while a Minigame is active
- Logic Fixes:
	- `Mission Street - Chao Key 1` (Hard Logic) now requires no upgrades
	- `Mission Street - Chao Key 2` (Hard Logic) now requires no upgrades
	- `Crazy Gadget - Hidden 1` (Standard Logic) now requires `Sonic - Bounce Bracelet` instead of `Sonic - Light Shoes`
	- `Lost Colony - Hidden 1` (Standard Logic) now requires `Eggman - Jet Engine`
	- `Mad Space - Gold Beetle` (Standard Logic) now only requires `Rouge - Iron Boots`
	- `Cosmic Wall - Gold Beetle` (Standard and Hard Logic) now only requires `Eggman - Jet Engine`
2025-03-22 13:00:07 +01:00

503 lines
17 KiB
Python

from typing import Dict, Any
from .Options import *
minsanity = {
"goal": Goal.option_chaos_chao,
"max_emblem_cap": MaximumEmblemCap.range_start,
"keysanity": False,
"whistlesanity": Whistlesanity.option_none,
"beetlesanity": False,
"omosanity": False,
"animalsanity": False,
"itemboxsanity": ItemBoxsanity.option_none,
"bigsanity": False,
"kart_race_checks": KartRaceChecks.option_none,
"junk_fill_percentage": 0,
"sonic_mission_count": BaseMissionCount.range_start,
"sonic_mission_2": False,
"sonic_mission_3": False,
"sonic_mission_4": False,
"sonic_mission_5": False,
"shadow_mission_count": BaseMissionCount.range_start,
"shadow_mission_2": False,
"shadow_mission_3": False,
"shadow_mission_4": False,
"shadow_mission_5": False,
"tails_mission_count": BaseMissionCount.range_start,
"tails_mission_2": False,
"tails_mission_3": False,
"tails_mission_4": False,
"tails_mission_5": False,
"eggman_mission_count": BaseMissionCount.range_start,
"eggman_mission_2": False,
"eggman_mission_3": False,
"eggman_mission_4": False,
"eggman_mission_5": False,
"knuckles_mission_count": BaseMissionCount.range_start,
"knuckles_mission_2": False,
"knuckles_mission_3": False,
"knuckles_mission_4": False,
"knuckles_mission_5": False,
"rouge_mission_count": BaseMissionCount.range_start,
"rouge_mission_2": False,
"rouge_mission_3": False,
"rouge_mission_4": False,
"rouge_mission_5": False,
"kart_mission_count": BaseMissionCount.range_start,
"kart_mission_2": False,
"kart_mission_3": False,
"kart_mission_4": False,
"kart_mission_5": False,
"cannons_core_mission_count": BaseMissionCount.range_start,
"cannons_core_mission_2": False,
"cannons_core_mission_3": False,
"cannons_core_mission_4": False,
"cannons_core_mission_5": False,
}
chao_centric = {
"goal": Goal.option_chaos_chao,
"keysanity": False,
"whistlesanity": Whistlesanity.option_none,
"beetlesanity": False,
"omosanity": False,
"animalsanity": False,
"itemboxsanity": ItemBoxsanity.option_none,
"bigsanity": False,
"kart_race_checks": KartRaceChecks.option_none,
"black_market_slots": BlackMarketSlots.range_end,
"black_market_unlock_costs": BlackMarketUnlockCosts.option_high,
"chao_race_difficulty": ChaoRaceDifficulty.option_expert,
"chao_karate_difficulty": ChaoKarateDifficulty.option_super,
"chao_stadium_checks": ChaoStadiumChecks.option_all,
"chao_animal_parts": True,
"chao_stats": ChaoStats.range_end,
"chao_stats_frequency": 1,
"chao_stats_stamina": True,
"chao_stats_hidden": True,
"chao_kindergarten": ChaoKindergarten.option_full,
"junk_fill_percentage": 50,
"sonic_mission_count": BaseMissionCount.range_start,
"sonic_mission_2": False,
"sonic_mission_3": False,
"sonic_mission_4": False,
"sonic_mission_5": False,
"shadow_mission_count": BaseMissionCount.range_start,
"shadow_mission_2": False,
"shadow_mission_3": False,
"shadow_mission_4": False,
"shadow_mission_5": False,
"tails_mission_count": BaseMissionCount.range_start,
"tails_mission_2": False,
"tails_mission_3": False,
"tails_mission_4": False,
"tails_mission_5": False,
"eggman_mission_count": BaseMissionCount.range_start,
"eggman_mission_2": False,
"eggman_mission_3": False,
"eggman_mission_4": False,
"eggman_mission_5": False,
"knuckles_mission_count": BaseMissionCount.range_start,
"knuckles_mission_2": False,
"knuckles_mission_3": False,
"knuckles_mission_4": False,
"knuckles_mission_5": False,
"rouge_mission_count": BaseMissionCount.range_start,
"rouge_mission_2": False,
"rouge_mission_3": False,
"rouge_mission_4": False,
"rouge_mission_5": False,
"kart_mission_count": BaseMissionCount.range_start,
"kart_mission_2": False,
"kart_mission_3": False,
"kart_mission_4": False,
"kart_mission_5": False,
"cannons_core_mission_count": BaseMissionCount.range_start,
"cannons_core_mission_2": False,
"cannons_core_mission_3": False,
"cannons_core_mission_4": False,
"cannons_core_mission_5": False,
}
allsanity_no_chao = {
"goal": Goal.option_cannons_core_boss_rush,
"boss_rush_shuffle": BossRushShuffle.option_chaos,
"minigame_madness_requirement": MinigameMadnessRequirement.range_end,
"minigame_madness_minimum": MinigameMadnessMinimum.range_end,
"max_emblem_cap": MaximumEmblemCap.range_end,
"mission_shuffle": True,
"required_cannons_core_missions": RequiredCannonsCoreMissions.option_all_active,
"emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore.range_end,
"number_of_level_gates": NumberOfLevelGates.range_end,
"level_gate_costs": LevelGateCosts.option_high,
"keysanity": True,
"whistlesanity": Whistlesanity.option_both,
"beetlesanity": True,
"omosanity": True,
"animalsanity": True,
"itemboxsanity": ItemBoxsanity.option_all,
"bigsanity": True,
"kart_race_checks": KartRaceChecks.option_full,
"junk_fill_percentage": 25,
"trap_fill_percentage": 25,
"omochao_trap_weight": BaseTrapWeight.option_high,
"timestop_trap_weight": BaseTrapWeight.option_high,
"confusion_trap_weight": BaseTrapWeight.option_high,
"tiny_trap_weight": BaseTrapWeight.option_high,
"gravity_trap_weight": BaseTrapWeight.option_high,
"exposition_trap_weight": BaseTrapWeight.option_high,
"ice_trap_weight": BaseTrapWeight.option_high,
"slow_trap_weight": BaseTrapWeight.option_high,
"cutscene_trap_weight": BaseTrapWeight.option_high,
"reverse_trap_weight": BaseTrapWeight.option_high,
"literature_trap_weight": BaseTrapWeight.option_high,
"controller_drift_trap_weight": BaseTrapWeight.option_high,
"poison_trap_weight": BaseTrapWeight.option_high,
"bee_trap_weight": BaseTrapWeight.option_high,
"pong_trap_weight": BaseTrapWeight.option_high,
"breakout_trap_weight": BaseTrapWeight.option_high,
"fishing_trap_weight": BaseTrapWeight.option_high,
"trivia_trap_weight": BaseTrapWeight.option_high,
"pokemon_trivia_trap_weight": BaseTrapWeight.option_high,
"pokemon_count_trap_weight": BaseTrapWeight.option_high,
"number_sequence_trap_weight": BaseTrapWeight.option_high,
"light_up_path_trap_weight": BaseTrapWeight.option_high,
"pinball_trap_weight": BaseTrapWeight.option_high,
"math_quiz_trap_weight": BaseTrapWeight.option_high,
"snake_trap_weight": BaseTrapWeight.option_high,
"input_sequence_trap_weight": BaseTrapWeight.option_high,
"minigame_trap_difficulty": MinigameTrapDifficulty.option_chaos,
"big_fishing_difficulty": BigFishingDifficulty.option_chaos,
"music_shuffle": MusicShuffle.option_full,
"voice_shuffle": VoiceShuffle.option_shuffled,
"sonic_mission_count": BaseMissionCount.range_end,
"sonic_mission_2": True,
"sonic_mission_3": True,
"sonic_mission_4": True,
"sonic_mission_5": True,
"shadow_mission_count": BaseMissionCount.range_end,
"shadow_mission_2": True,
"shadow_mission_3": True,
"shadow_mission_4": True,
"shadow_mission_5": True,
"tails_mission_count": BaseMissionCount.range_end,
"tails_mission_2": True,
"tails_mission_3": True,
"tails_mission_4": True,
"tails_mission_5": True,
"eggman_mission_count": BaseMissionCount.range_end,
"eggman_mission_2": True,
"eggman_mission_3": True,
"eggman_mission_4": True,
"eggman_mission_5": True,
"knuckles_mission_count": BaseMissionCount.range_end,
"knuckles_mission_2": True,
"knuckles_mission_3": True,
"knuckles_mission_4": True,
"knuckles_mission_5": True,
"rouge_mission_count": BaseMissionCount.range_end,
"rouge_mission_2": True,
"rouge_mission_3": True,
"rouge_mission_4": True,
"rouge_mission_5": True,
"kart_mission_count": BaseMissionCount.range_end,
"kart_mission_2": True,
"kart_mission_3": True,
"kart_mission_4": True,
"kart_mission_5": True,
"cannons_core_mission_count": BaseMissionCount.range_end,
"cannons_core_mission_2": True,
"cannons_core_mission_3": True,
"cannons_core_mission_4": True,
"cannons_core_mission_5": True,
}
allsanity = {
"goal": Goal.option_cannons_core_boss_rush,
"boss_rush_shuffle": BossRushShuffle.option_chaos,
"minigame_madness_requirement": MinigameMadnessRequirement.range_end,
"minigame_madness_minimum": MinigameMadnessMinimum.range_end,
"max_emblem_cap": MaximumEmblemCap.range_end,
"mission_shuffle": True,
"required_cannons_core_missions": RequiredCannonsCoreMissions.option_all_active,
"emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore.range_end,
"number_of_level_gates": NumberOfLevelGates.range_end,
"level_gate_costs": LevelGateCosts.option_high,
"keysanity": True,
"whistlesanity": Whistlesanity.option_both,
"beetlesanity": True,
"omosanity": True,
"animalsanity": True,
"itemboxsanity": ItemBoxsanity.option_all,
"bigsanity": True,
"kart_race_checks": KartRaceChecks.option_full,
"black_market_slots": BlackMarketSlots.range_end,
"black_market_unlock_costs": BlackMarketUnlockCosts.option_high,
"chao_race_difficulty": ChaoRaceDifficulty.option_expert,
"chao_karate_difficulty": ChaoKarateDifficulty.option_super,
"chao_stadium_checks": ChaoStadiumChecks.option_all,
"chao_animal_parts": True,
"chao_stats": ChaoStats.range_end,
"chao_stats_frequency": 1,
"chao_stats_stamina": True,
"chao_stats_hidden": True,
"chao_kindergarten": ChaoKindergarten.option_full,
"junk_fill_percentage": 25,
"trap_fill_percentage": 25,
"omochao_trap_weight": BaseTrapWeight.option_high,
"timestop_trap_weight": BaseTrapWeight.option_high,
"confusion_trap_weight": BaseTrapWeight.option_high,
"tiny_trap_weight": BaseTrapWeight.option_high,
"gravity_trap_weight": BaseTrapWeight.option_high,
"exposition_trap_weight": BaseTrapWeight.option_high,
"ice_trap_weight": BaseTrapWeight.option_high,
"slow_trap_weight": BaseTrapWeight.option_high,
"cutscene_trap_weight": BaseTrapWeight.option_high,
"reverse_trap_weight": BaseTrapWeight.option_high,
"literature_trap_weight": BaseTrapWeight.option_high,
"controller_drift_trap_weight": BaseTrapWeight.option_high,
"poison_trap_weight": BaseTrapWeight.option_high,
"bee_trap_weight": BaseTrapWeight.option_high,
"pong_trap_weight": BaseTrapWeight.option_high,
"breakout_trap_weight": BaseTrapWeight.option_high,
"fishing_trap_weight": BaseTrapWeight.option_high,
"trivia_trap_weight": BaseTrapWeight.option_high,
"pokemon_trivia_trap_weight": BaseTrapWeight.option_high,
"pokemon_count_trap_weight": BaseTrapWeight.option_high,
"number_sequence_trap_weight": BaseTrapWeight.option_high,
"light_up_path_trap_weight": BaseTrapWeight.option_high,
"pinball_trap_weight": BaseTrapWeight.option_high,
"math_quiz_trap_weight": BaseTrapWeight.option_high,
"snake_trap_weight": BaseTrapWeight.option_high,
"input_sequence_trap_weight": BaseTrapWeight.option_high,
"minigame_trap_difficulty": MinigameTrapDifficulty.option_chaos,
"big_fishing_difficulty": BigFishingDifficulty.option_chaos,
"music_shuffle": MusicShuffle.option_full,
"voice_shuffle": VoiceShuffle.option_shuffled,
"sonic_mission_count": BaseMissionCount.range_end,
"sonic_mission_2": True,
"sonic_mission_3": True,
"sonic_mission_4": True,
"sonic_mission_5": True,
"shadow_mission_count": BaseMissionCount.range_end,
"shadow_mission_2": True,
"shadow_mission_3": True,
"shadow_mission_4": True,
"shadow_mission_5": True,
"tails_mission_count": BaseMissionCount.range_end,
"tails_mission_2": True,
"tails_mission_3": True,
"tails_mission_4": True,
"tails_mission_5": True,
"eggman_mission_count": BaseMissionCount.range_end,
"eggman_mission_2": True,
"eggman_mission_3": True,
"eggman_mission_4": True,
"eggman_mission_5": True,
"knuckles_mission_count": BaseMissionCount.range_end,
"knuckles_mission_2": True,
"knuckles_mission_3": True,
"knuckles_mission_4": True,
"knuckles_mission_5": True,
"rouge_mission_count": BaseMissionCount.range_end,
"rouge_mission_2": True,
"rouge_mission_3": True,
"rouge_mission_4": True,
"rouge_mission_5": True,
"kart_mission_count": BaseMissionCount.range_end,
"kart_mission_2": True,
"kart_mission_3": True,
"kart_mission_4": True,
"kart_mission_5": True,
"cannons_core_mission_count": BaseMissionCount.range_end,
"cannons_core_mission_2": True,
"cannons_core_mission_3": True,
"cannons_core_mission_4": True,
"cannons_core_mission_5": True,
}
all_random = {
"goal": "random",
"boss_rush_shuffle": "random",
"minigame_madness_requirement": "random",
"minigame_madness_minimum": "random",
"logic_difficulty": "random",
"required_rank": "random",
"max_emblem_cap": "random",
"ring_loss": "random",
"mission_shuffle": "random",
"required_cannons_core_missions": "random",
"emblem_percentage_for_cannons_core": "random",
"number_of_level_gates": "random",
"level_gate_distribution": "random",
"level_gate_costs": "random",
"keysanity": "random",
"whistlesanity": "random",
"beetlesanity": "random",
"omosanity": "random",
"animalsanity": "random",
"itemboxsanity": "random",
"bigsanity": "random",
"kart_race_checks": "random",
"black_market_slots": "random",
"black_market_unlock_costs": "random",
"black_market_price_multiplier": "random",
"chao_race_difficulty": "random",
"chao_karate_difficulty": "random",
"chao_stadium_checks": "random",
"chao_animal_parts": "random",
"chao_stats": "random",
"chao_stats_frequency": "random",
"chao_stats_stamina": "random",
"chao_stats_hidden": "random",
"chao_kindergarten": "random",
"shuffle_starting_chao_eggs": "random",
"chao_entrance_randomization": "random",
"junk_fill_percentage": "random",
"trap_fill_percentage": "random",
"omochao_trap_weight": "random",
"timestop_trap_weight": "random",
"confusion_trap_weight": "random",
"tiny_trap_weight": "random",
"gravity_trap_weight": "random",
"exposition_trap_weight": "random",
"ice_trap_weight": "random",
"slow_trap_weight": "random",
"cutscene_trap_weight": "random",
"reverse_trap_weight": "random",
"literature_trap_weight": "random",
"controller_drift_trap_weight": "random",
"poison_trap_weight": "random",
"bee_trap_weight": "random",
"pong_trap_weight": "random",
"breakout_trap_weight": "random",
"fishing_trap_weight": "random",
"trivia_trap_weight": "random",
"pokemon_trivia_trap_weight": "random",
"pokemon_count_trap_weight": "random",
"number_sequence_trap_weight": "random",
"light_up_path_trap_weight": "random",
"pinball_trap_weight": "random",
"math_quiz_trap_weight": "random",
"snake_trap_weight": "random",
"input_sequence_trap_weight": "random",
"minigame_trap_difficulty": "random",
"big_fishing_difficulty": "random",
"sadx_music": "random",
"music_shuffle": "random",
"voice_shuffle": "random",
"narrator": "random",
"sonic_mission_count": "random",
"sonic_mission_2": "random",
"sonic_mission_3": "random",
"sonic_mission_4": "random",
"sonic_mission_5": "random",
"shadow_mission_count": "random",
"shadow_mission_2": "random",
"shadow_mission_3": "random",
"shadow_mission_4": "random",
"shadow_mission_5": "random",
"tails_mission_count": "random",
"tails_mission_2": "random",
"tails_mission_3": "random",
"tails_mission_4": "random",
"tails_mission_5": "random",
"eggman_mission_count": "random",
"eggman_mission_2": "random",
"eggman_mission_3": "random",
"eggman_mission_4": "random",
"eggman_mission_5": "random",
"knuckles_mission_count": "random",
"knuckles_mission_2": "random",
"knuckles_mission_3": "random",
"knuckles_mission_4": "random",
"knuckles_mission_5": "random",
"rouge_mission_count": "random",
"rouge_mission_2": "random",
"rouge_mission_3": "random",
"rouge_mission_4": "random",
"rouge_mission_5": "random",
"kart_mission_count": "random",
"kart_mission_2": "random",
"kart_mission_3": "random",
"kart_mission_4": "random",
"kart_mission_5": "random",
"cannons_core_mission_count": "random",
"cannons_core_mission_2": "random",
"cannons_core_mission_3": "random",
"cannons_core_mission_4": "random",
"cannons_core_mission_5": "random",
"ring_link": "random",
"trap_link": "random",
"death_link": "random",
}
sa2b_options_presets: Dict[str, Dict[str, Any]] = {
"Minsanity": minsanity,
"Chao-centric": chao_centric,
"Allsanity No Chao": allsanity_no_chao,
"Allsanity": allsanity,
"All Random": all_random,
}