mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
SA2B: v2.3 - The Chao Update (#2277)
Changelog: Features: - New goal - Chaos Chao - Raise a Chaos Chao to win! - New optional Location Checks - Chao Animal Parts - Each body part from each type of animal is a location - Chao Stats - 0-99 levels of each of the 7 Chao stats can be locations - The frequency of Chao Stat locations can be set (every level, every 2nd level, etc) - Kindergartensanity - Classroom lessons are locations - Either all lessons or any one of each category can be set as locations - Shopsanity - A specified number of locations can be placed in the Chao Black Market - These locations are unlocked by acquiring `Chao Coin`s - Ring costs for these items can be adjusted - Chao Karate can now be set to one location per fight, instead of one per tournament - Items - If any Chao locations are active, the following will be in the item pool: - Chao Eggs - Garden Seeds - Garden Fruit - Chao Hats - Chaos Drives - The starting eggs in the garden can be a random color - Chao World entrances can be shuffled - Chao are given default names - New Traps - Reverse Trap Quality of Life: - Chao Save Data is now separate per-slot in addition to per-seed - This allows a single player to have multiple slots in the same seed, each having separate Chao progress - Chao Race/Karate progress is now displayed on Stage Select (when hovering over Chao World) - All Chao can now enter the Hero and Dark races - Chao Karate difficulty can be set separately from Chao Race difficulty - Chao Aging can be sped up at will, up to 15× - New mod `config` option to fine-tune Chao Stat multiplication - Note: This does not mix well with the Mod Manager "`Chao Stat Multiplier`" code - Pong Traps can now activate in Chao World - Maximum range for possible number of Emblems is now 1000 - General APWorld cleanup and optimization - Option access has moved to the new options system - An item group now exists for trap items Bug Fixes: - Dry Lagoon now has all 11 Animals - Eternal Engine - 2 (Standard and Hard Logic) now requires only `Tails - Booster` - Lost Colony - 2 (Hard Logic) now requires no upgrades - Lost Colony - Animal 9 (Hard Logic) now requires either `Eggman - Jet Engine` or `Eggman - Large Cannon`
This commit is contained in:
@@ -13,6 +13,7 @@ class Goal(Choice):
|
||||
Boss Rush: Beat all of the bosses in the Boss Rush, ending with Finalhazard
|
||||
Cannon's Core Boss Rush: Beat Cannon's Core, then beat all of the bosses in the Boss Rush, ending with Finalhazard
|
||||
Boss Rush Chaos Emerald Hunt: Find the Seven Chaos Emeralds, then beat all of the bosses in the Boss Rush, ending with Finalhazard
|
||||
Chaos Chao: Raise a Chaos Chao to win
|
||||
"""
|
||||
display_name = "Goal"
|
||||
option_biolizard = 0
|
||||
@@ -22,6 +23,7 @@ class Goal(Choice):
|
||||
option_boss_rush = 4
|
||||
option_cannons_core_boss_rush = 5
|
||||
option_boss_rush_chaos_emerald_hunt = 6
|
||||
option_chaos_chao = 7
|
||||
default = 0
|
||||
|
||||
@classmethod
|
||||
@@ -70,74 +72,81 @@ class BaseTrapWeight(Choice):
|
||||
|
||||
class OmochaoTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which spawns several Omochao around the player
|
||||
Likelihood of receiving a trap which spawns several Omochao around the player
|
||||
"""
|
||||
display_name = "OmoTrap Weight"
|
||||
|
||||
|
||||
class TimestopTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which briefly stops time
|
||||
Likelihood of receiving a trap which briefly stops time
|
||||
"""
|
||||
display_name = "Chaos Control Trap Weight"
|
||||
|
||||
|
||||
class ConfusionTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which causes the controls to be skewed for a period of time
|
||||
Likelihood of receiving a trap which causes the controls to be skewed for a period of time
|
||||
"""
|
||||
display_name = "Confusion Trap Weight"
|
||||
|
||||
|
||||
class TinyTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which causes the player to become tiny
|
||||
Likelihood of receiving a trap which causes the player to become tiny
|
||||
"""
|
||||
display_name = "Tiny Trap Weight"
|
||||
|
||||
|
||||
class GravityTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which increases gravity
|
||||
Likelihood of receiving a trap which increases gravity
|
||||
"""
|
||||
display_name = "Gravity Trap Weight"
|
||||
|
||||
|
||||
class ExpositionTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which tells you the story
|
||||
Likelihood of receiving a trap which tells you the story
|
||||
"""
|
||||
display_name = "Exposition Trap Weight"
|
||||
|
||||
|
||||
class DarknessTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes the world dark
|
||||
Likelihood of receiving a trap which makes the world dark
|
||||
"""
|
||||
display_name = "Darkness Trap Weight"
|
||||
|
||||
|
||||
class IceTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes the world slippery
|
||||
Likelihood of receiving a trap which makes the world slippery
|
||||
"""
|
||||
display_name = "Ice Trap Weight"
|
||||
|
||||
|
||||
class SlowTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes you gotta go slow
|
||||
Likelihood of receiving a trap which makes you gotta go slow
|
||||
"""
|
||||
display_name = "Slow Trap Weight"
|
||||
|
||||
|
||||
class CutsceneTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of a receiving a trap which makes you watch an unskippable cutscene
|
||||
Likelihood of receiving a trap which makes you watch an unskippable cutscene
|
||||
"""
|
||||
display_name = "Cutscene Trap Weight"
|
||||
|
||||
|
||||
class ReverseTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of receiving a trap which reverses your controls
|
||||
"""
|
||||
display_name = "Reverse Trap Weight"
|
||||
|
||||
|
||||
class PongTrapWeight(BaseTrapWeight):
|
||||
"""
|
||||
Likelihood of receiving a trap which forces you to play a Pong minigame
|
||||
@@ -219,7 +228,7 @@ class Omosanity(Toggle):
|
||||
class Animalsanity(Toggle):
|
||||
"""
|
||||
Determines whether picking up counted small animals grants checks
|
||||
(420 Locations)
|
||||
(421 Locations)
|
||||
"""
|
||||
display_name = "Animalsanity"
|
||||
|
||||
@@ -291,7 +300,7 @@ class MaximumEmblemCap(Range):
|
||||
"""
|
||||
display_name = "Max Emblem Cap"
|
||||
range_start = 50
|
||||
range_end = 500
|
||||
range_end = 1000
|
||||
default = 180
|
||||
|
||||
|
||||
@@ -308,15 +317,15 @@ class RequiredRank(Choice):
|
||||
default = 0
|
||||
|
||||
|
||||
class ChaoGardenDifficulty(Choice):
|
||||
class ChaoRaceDifficulty(Choice):
|
||||
"""
|
||||
Determines the number of chao garden difficulty levels included. Easier difficulty settings means fewer chao garden checks
|
||||
None: No Chao Garden Activities have checks
|
||||
Determines the number of Chao Race difficulty levels included. Easier difficulty settings means fewer Chao Race checks
|
||||
None: No Chao Races have checks
|
||||
Beginner: Beginner Races
|
||||
Intermediate: Beginner, Challenge, Hero, and Dark Races
|
||||
Expert: Beginner, Challenge, Hero, Dark and Jewel Races
|
||||
"""
|
||||
display_name = "Chao Garden Difficulty"
|
||||
display_name = "Chao Race Difficulty"
|
||||
option_none = 0
|
||||
option_beginner = 1
|
||||
option_intermediate = 2
|
||||
@@ -324,26 +333,138 @@ class ChaoGardenDifficulty(Choice):
|
||||
default = 0
|
||||
|
||||
|
||||
class IncludeChaoKarate(Toggle):
|
||||
class ChaoKarateDifficulty(Choice):
|
||||
"""
|
||||
Determines whether the Chao Karate should be included as checks (Note: This setting requires purchase of the "Battle" DLC)
|
||||
Determines the number of Chao Karate difficulty levels included. (Note: This setting requires purchase of the "Battle" DLC)
|
||||
"""
|
||||
display_name = "Include Chao Karate"
|
||||
display_name = "Chao Karate Difficulty"
|
||||
option_none = 0
|
||||
option_beginner = 1
|
||||
option_standard = 2
|
||||
option_expert = 3
|
||||
option_super = 4
|
||||
default = 0
|
||||
|
||||
|
||||
class ChaoRaceChecks(Choice):
|
||||
class ChaoStadiumChecks(Choice):
|
||||
"""
|
||||
Determines which Chao Races grant checks
|
||||
All: Each individual race grants a check
|
||||
Determines which Chao Stadium activities grant checks
|
||||
All: Each individual race and karate fight grants a check
|
||||
Prize: Only the races which grant Chao Toys grant checks (final race of each Beginner and Jewel cup, 4th, 8th, and
|
||||
12th Challenge Races, 2nd and 4th Hero and Dark Races)
|
||||
12th Challenge Races, 2nd and 4th Hero and Dark Races, final fight of each Karate difficulty)
|
||||
"""
|
||||
display_name = "Chao Race Checks"
|
||||
display_name = "Chao Stadium Checks"
|
||||
option_all = 0
|
||||
option_prize = 1
|
||||
default = 0
|
||||
|
||||
|
||||
class ChaoStats(Range):
|
||||
"""
|
||||
Determines the highest level in each Chao Stat that grants checks
|
||||
(Swim, Fly, Run, Power)
|
||||
"""
|
||||
display_name = "Chao Stats"
|
||||
range_start = 0
|
||||
range_end = 99
|
||||
default = 0
|
||||
|
||||
|
||||
class ChaoStatsFrequency(Range):
|
||||
"""
|
||||
Determines how many levels in each Chao Stat grant checks (up to the maximum set in the `chao_stats` option)
|
||||
`1` means every level is included, `2` means every other level is included, `3` means every third, and so on
|
||||
"""
|
||||
display_name = "Chao Stats Frequency"
|
||||
range_start = 1
|
||||
range_end = 20
|
||||
default = 5
|
||||
|
||||
|
||||
class ChaoStatsStamina(Toggle):
|
||||
"""
|
||||
Determines whether Stamina is included in the `chao_stats` option
|
||||
"""
|
||||
display_name = "Chao Stats - Stamina"
|
||||
|
||||
|
||||
class ChaoStatsHidden(Toggle):
|
||||
"""
|
||||
Determines whether the hidden stats (Luck and Intelligence) are included in the `chao_stats` option
|
||||
"""
|
||||
display_name = "Chao Stats - Luck and Intelligence"
|
||||
|
||||
|
||||
class ChaoAnimalParts(Toggle):
|
||||
"""
|
||||
Determines whether giving Chao various animal parts grants checks
|
||||
(73 Locations)
|
||||
"""
|
||||
display_name = "Chao Animal Parts"
|
||||
|
||||
|
||||
class ChaoKindergarten(Choice):
|
||||
"""
|
||||
Determines whether learning the lessons from the Kindergarten Classroom grants checks
|
||||
(WARNING: VERY SLOW)
|
||||
None: No Kindergarten classes have checks
|
||||
Basics: One class from each category (Drawing, Dance, Song, and Instrument) is a check (4 Locations)
|
||||
Full: Every class is a check (23 Locations)
|
||||
"""
|
||||
display_name = "Chao Kindergarten Checks"
|
||||
option_none = 0
|
||||
option_basics = 1
|
||||
option_full = 2
|
||||
default = 0
|
||||
|
||||
|
||||
class BlackMarketSlots(Range):
|
||||
"""
|
||||
Determines how many multiworld items are available to purchase from the Black Market
|
||||
"""
|
||||
display_name = "Black Market Slots"
|
||||
range_start = 0
|
||||
range_end = 64
|
||||
default = 0
|
||||
|
||||
|
||||
class BlackMarketUnlockCosts(Choice):
|
||||
"""
|
||||
Determines how many Chao Coins are required to unlock sets of Black Market items
|
||||
"""
|
||||
display_name = "Black Market Unlock Costs"
|
||||
option_low = 0
|
||||
option_medium = 1
|
||||
option_high = 2
|
||||
default = 1
|
||||
|
||||
|
||||
class BlackMarketPriceMultiplier(Range):
|
||||
"""
|
||||
Determines how many rings the Black Market items cost
|
||||
The base ring costs of items in the Black Market range from 50-100,
|
||||
and are then multiplied by this value
|
||||
"""
|
||||
display_name = "Black Market Price Multiplier"
|
||||
range_start = 0
|
||||
range_end = 40
|
||||
default = 1
|
||||
|
||||
|
||||
class ShuffleStartingChaoEggs(DefaultOnToggle):
|
||||
"""
|
||||
Determines whether the starting Chao eggs in the gardens are random
|
||||
"""
|
||||
display_name = "Shuffle Starting Chao Eggs"
|
||||
|
||||
|
||||
class ChaoEntranceRandomization(Toggle):
|
||||
"""
|
||||
Determines whether entrances in Chao World are randomized
|
||||
"""
|
||||
display_name = "Chao Entrance Randomization"
|
||||
|
||||
|
||||
class RequiredCannonsCoreMissions(Choice):
|
||||
"""
|
||||
Determines how many Cannon's Core missions must be completed (for Biolizard or Cannon's Core goals)
|
||||
@@ -657,24 +778,42 @@ class LogicDifficulty(Choice):
|
||||
|
||||
sa2b_options: typing.Dict[str, type(Option)] = {
|
||||
"goal": Goal,
|
||||
|
||||
"mission_shuffle": MissionShuffle,
|
||||
"boss_rush_shuffle": BossRushShuffle,
|
||||
|
||||
"keysanity": Keysanity,
|
||||
"whistlesanity": Whistlesanity,
|
||||
"beetlesanity": Beetlesanity,
|
||||
"omosanity": Omosanity,
|
||||
"animalsanity": Animalsanity,
|
||||
"kart_race_checks": KartRaceChecks,
|
||||
|
||||
"logic_difficulty": LogicDifficulty,
|
||||
"required_rank": RequiredRank,
|
||||
"emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore,
|
||||
"required_cannons_core_missions": RequiredCannonsCoreMissions,
|
||||
|
||||
"emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore,
|
||||
"number_of_level_gates": NumberOfLevelGates,
|
||||
"level_gate_distribution": LevelGateDistribution,
|
||||
"level_gate_costs": LevelGateCosts,
|
||||
"max_emblem_cap": MaximumEmblemCap,
|
||||
"chao_garden_difficulty": ChaoGardenDifficulty,
|
||||
"include_chao_karate": IncludeChaoKarate,
|
||||
"chao_race_checks": ChaoRaceChecks,
|
||||
|
||||
"chao_race_difficulty": ChaoRaceDifficulty,
|
||||
"chao_karate_difficulty": ChaoKarateDifficulty,
|
||||
"chao_stadium_checks": ChaoStadiumChecks,
|
||||
"chao_stats": ChaoStats,
|
||||
"chao_stats_frequency": ChaoStatsFrequency,
|
||||
"chao_stats_stamina": ChaoStatsStamina,
|
||||
"chao_stats_hidden": ChaoStatsHidden,
|
||||
"chao_animal_parts": ChaoAnimalParts,
|
||||
"chao_kindergarten": ChaoKindergarten,
|
||||
"black_market_slots": BlackMarketSlots,
|
||||
"black_market_unlock_costs": BlackMarketUnlockCosts,
|
||||
"black_market_price_multiplier": BlackMarketPriceMultiplier,
|
||||
"shuffle_starting_chao_eggs": ShuffleStartingChaoEggs,
|
||||
"chao_entrance_randomization": ChaoEntranceRandomization,
|
||||
|
||||
"junk_fill_percentage": JunkFillPercentage,
|
||||
"trap_fill_percentage": TrapFillPercentage,
|
||||
"omochao_trap_weight": OmochaoTrapWeight,
|
||||
@@ -687,39 +826,46 @@ sa2b_options: typing.Dict[str, type(Option)] = {
|
||||
"ice_trap_weight": IceTrapWeight,
|
||||
"slow_trap_weight": SlowTrapWeight,
|
||||
"cutscene_trap_weight": CutsceneTrapWeight,
|
||||
"reverse_trap_weight": ReverseTrapWeight,
|
||||
"pong_trap_weight": PongTrapWeight,
|
||||
"minigame_trap_difficulty": MinigameTrapDifficulty,
|
||||
"ring_loss": RingLoss,
|
||||
"ring_link": RingLink,
|
||||
|
||||
"sadx_music": SADXMusic,
|
||||
"music_shuffle": MusicShuffle,
|
||||
"voice_shuffle": VoiceShuffle,
|
||||
"narrator": Narrator,
|
||||
"logic_difficulty": LogicDifficulty,
|
||||
"ring_loss": RingLoss,
|
||||
|
||||
"speed_mission_count": SpeedMissionCount,
|
||||
"speed_mission_2": SpeedMission2,
|
||||
"speed_mission_3": SpeedMission3,
|
||||
"speed_mission_4": SpeedMission4,
|
||||
"speed_mission_5": SpeedMission5,
|
||||
|
||||
"mech_mission_count": MechMissionCount,
|
||||
"mech_mission_2": MechMission2,
|
||||
"mech_mission_3": MechMission3,
|
||||
"mech_mission_4": MechMission4,
|
||||
"mech_mission_5": MechMission5,
|
||||
|
||||
"hunt_mission_count": HuntMissionCount,
|
||||
"hunt_mission_2": HuntMission2,
|
||||
"hunt_mission_3": HuntMission3,
|
||||
"hunt_mission_4": HuntMission4,
|
||||
"hunt_mission_5": HuntMission5,
|
||||
|
||||
"kart_mission_count": KartMissionCount,
|
||||
"kart_mission_2": KartMission2,
|
||||
"kart_mission_3": KartMission3,
|
||||
"kart_mission_4": KartMission4,
|
||||
"kart_mission_5": KartMission5,
|
||||
|
||||
"cannons_core_mission_count": CannonsCoreMissionCount,
|
||||
"cannons_core_mission_2": CannonsCoreMission2,
|
||||
"cannons_core_mission_3": CannonsCoreMission3,
|
||||
"cannons_core_mission_4": CannonsCoreMission4,
|
||||
"cannons_core_mission_5": CannonsCoreMission5,
|
||||
|
||||
"ring_link": RingLink,
|
||||
"death_link": DeathLink,
|
||||
}
|
||||
|
Reference in New Issue
Block a user