Files
Grinch-AP/worlds/sm64ex/Options.py

188 lines
5.7 KiB
Python
Raw Permalink Normal View History

import typing
from dataclasses import dataclass
from Options import DefaultOnToggle, Range, Toggle, DeathLink, Choice, PerGameCommonOptions, OptionSet, OptionGroup
from .Items import action_item_data_table
class EnableCoinStars(Choice):
"""
Determine logic for 100 Coin Stars.
Off - Removed from pool. You can still collect them, but they don't do anything.
Optimal for ignoring 100 Coin Stars entirely. Removes 15 locations from the pool.
On - Kept in pool, potentially randomized.
Vanilla - Kept in pool, but NOT randomized.
"""
display_name = "Enable 100 Coin Stars"
option_off = 0
option_on = 1
option_vanilla = 2
class StrictCapRequirements(DefaultOnToggle):
"""If disabled, Stars that expect special caps may have to be acquired without the caps"""
display_name = "Strict Cap Requirements"
class StrictCannonRequirements(DefaultOnToggle):
"""If disabled, Stars that expect cannons may have to be acquired without them.
Has no effect if Buddy Checks and Move Randomizer are disabled"""
display_name = "Strict Cannon Requirements"
class FirstBowserStarDoorCost(Range):
"""What percent of the total stars are required at the Star Door to Bowser in the Dark World"""
display_name = "First Star Door Cost %"
range_start = 0
range_end = 40
default = 7
class BasementStarDoorCost(Range):
"""What percent of the total stars are required at the Star Door in the Basement"""
display_name = "Basement Star Door %"
range_start = 0
range_end = 50
default = 25
class SecondFloorStarDoorCost(Range):
"""What percent of the total stars are required to access the third floor"""
display_name = 'Second Floor Star Door %'
range_start = 0
range_end = 70
default = 42
class MIPS1Cost(Range):
"""What percent of the total stars are required to spawn MIPS the first time"""
display_name = "MIPS 1 Star %"
range_start = 0
range_end = 35
default = 12
class MIPS2Cost(Range):
"""What percent of the total stars are required to spawn MIPS the second time."""
display_name = "MIPS 2 Star %"
range_start = 0
range_end = 70
default = 42
class StarsToFinish(Range):
"""What percent of the total stars are required at the infinite stairs"""
display_name = "Endless Stairs Star %"
range_start = 0
range_end = 90
default = 58
class AmountOfStars(Range):
"""How many stars exist.
If there aren't enough locations to hold the given total, the total will be reduced."""
display_name = "Total Power Stars"
range_start = 35
range_end = 120
default = 120
class AreaRandomizer(Choice):
"""Randomize Entrances"""
display_name = "Entrance Randomizer"
option_Off = 0
option_Courses_Only = 1
option_Courses_and_Secrets_Separate = 2
option_Courses_and_Secrets = 3
class BuddyChecks(Toggle):
"""Bob-omb Buddies are checks, Cannon Unlocks are items"""
display_name = "Bob-omb Buddy Checks"
class ExclamationBoxes(Toggle):
"""Include 1Up Exclamation Boxes during randomization.
Adds 29 locations to the pool."""
2022-08-21 20:45:39 +02:00
display_name = "Randomize 1Up !-Blocks"
alias_1Ups_Only = 1
2022-08-21 20:45:39 +02:00
2023-10-28 21:44:16 +02:00
class CompletionType(Choice):
"""Set goal for game completion"""
display_name = "Completion Goal"
option_Last_Bowser_Stage = 0
option_All_Bowser_Stages = 1
class ProgressiveKeys(DefaultOnToggle):
"""Keys will first grant you access to the Basement, then to the Second Floor"""
display_name = "Progressive Keys"
class StrictMoveRequirements(DefaultOnToggle):
"""If disabled, Stars that expect certain moves may have to be acquired without them. Only makes a difference
if Move Randomization is enabled"""
display_name = "Strict Move Requirements"
class EnableMoveRandomizer(Toggle):
"""Mario is unable to perform some actions until a corresponding item is picked up.
This option is incompatible with builds using a 'nomoverando' branch.
Specific actions to randomize can be specified in the YAML."""
display_name = "Enable Move Randomizer"
class MoveRandomizerActions(OptionSet):
"""Which actions to randomize when Move Randomizer is enabled"""
display_name = "Randomized Moves"
# HACK: Disable randomization for double jump
valid_keys = [action for action in action_item_data_table if action != 'Double Jump']
default = valid_keys
sm64_options_groups = [
OptionGroup("Logic Options", [
AreaRandomizer,
BuddyChecks,
ExclamationBoxes,
ProgressiveKeys,
EnableCoinStars,
StrictCapRequirements,
StrictCannonRequirements,
]),
OptionGroup("Ability Options", [
EnableMoveRandomizer,
MoveRandomizerActions,
StrictMoveRequirements,
]),
OptionGroup("Star Options", [
AmountOfStars,
FirstBowserStarDoorCost,
BasementStarDoorCost,
SecondFloorStarDoorCost,
MIPS1Cost,
MIPS2Cost,
StarsToFinish,
]),
]
@dataclass
class SM64Options(PerGameCommonOptions):
area_rando: AreaRandomizer
buddy_checks: BuddyChecks
exclamation_boxes: ExclamationBoxes
progressive_keys: ProgressiveKeys
enable_coin_stars: EnableCoinStars
enable_move_rando: EnableMoveRandomizer
move_rando_actions: MoveRandomizerActions
strict_cap_requirements: StrictCapRequirements
strict_cannon_requirements: StrictCannonRequirements
strict_move_requirements: StrictMoveRequirements
amount_of_stars: AmountOfStars
first_bowser_star_door_cost: FirstBowserStarDoorCost
basement_star_door_cost: BasementStarDoorCost
second_floor_star_door_cost: SecondFloorStarDoorCost
mips1_cost: MIPS1Cost
mips2_cost: MIPS2Cost
stars_to_finish: StarsToFinish
death_link: DeathLink
completion_type: CompletionType