149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
import typing
 | 
						|
from Options import Option, DefaultOnToggle, Range, Toggle, DeathLink, Choice
 | 
						|
from .Items import action_item_table
 | 
						|
 | 
						|
class EnableCoinStars(DefaultOnToggle):
 | 
						|
    """Disable to Ignore 100 Coin Stars. You can still collect them, but they don't do anything.
 | 
						|
    Removes 15 locations from the pool."""
 | 
						|
    display_name = "Enable 100 Coin Stars"
 | 
						|
 | 
						|
 | 
						|
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(Choice):
 | 
						|
    """Include 1Up Exclamation Boxes during randomization.
 | 
						|
    Adds 29 locations to the pool."""
 | 
						|
    display_name = "Randomize 1Up !-Blocks"
 | 
						|
    option_Off = 0
 | 
						|
    option_1Ups_Only = 1
 | 
						|
 | 
						|
 | 
						|
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"
 | 
						|
 | 
						|
def getMoveRandomizerOption(action: str):
 | 
						|
    class MoveRandomizerOption(Toggle):
 | 
						|
        """Mario is unable to perform this action until a corresponding item is picked up.
 | 
						|
        This option is incompatible with builds using a 'nomoverando' branch."""
 | 
						|
        display_name = f"Randomize {action}"
 | 
						|
    return MoveRandomizerOption
 | 
						|
 | 
						|
 | 
						|
sm64_options: typing.Dict[str, type(Option)] = {
 | 
						|
    "AreaRandomizer": AreaRandomizer,
 | 
						|
    "BuddyChecks": BuddyChecks,
 | 
						|
    "ExclamationBoxes": ExclamationBoxes,
 | 
						|
    "ProgressiveKeys": ProgressiveKeys,
 | 
						|
    "EnableCoinStars": EnableCoinStars,
 | 
						|
    "StrictCapRequirements": StrictCapRequirements,
 | 
						|
    "StrictCannonRequirements": StrictCannonRequirements,
 | 
						|
    "StrictMoveRequirements": StrictMoveRequirements,
 | 
						|
    "AmountOfStars": AmountOfStars,
 | 
						|
    "FirstBowserStarDoorCost": FirstBowserStarDoorCost,
 | 
						|
    "BasementStarDoorCost": BasementStarDoorCost,
 | 
						|
    "SecondFloorStarDoorCost": SecondFloorStarDoorCost,
 | 
						|
    "MIPS1Cost": MIPS1Cost,
 | 
						|
    "MIPS2Cost": MIPS2Cost,
 | 
						|
    "StarsToFinish": StarsToFinish,
 | 
						|
    "death_link": DeathLink,
 | 
						|
    "CompletionType": CompletionType,
 | 
						|
}
 | 
						|
 | 
						|
for action in action_item_table:
 | 
						|
    # HACK: Disable randomization of double jump
 | 
						|
    if action == 'Double Jump': continue
 | 
						|
    sm64_options[f"MoveRandomizer{action.replace(' ','')}"] = getMoveRandomizerOption(action)
 |