 144d612c52
			
		
	
	144d612c52
	
	
	
		
			
			* sm64ex: Rework logic for 100 Coins * sm64ex: 100 Coins Vanilla Option * sm64ex: Avoiding raw int comparisons for 100 coin option * sm64ex: Change 100 coin option from toggle to choice * sm64ex: use snake_case for 100 coin option * just use "vanilla" for option comparison (exempt-medic feedback) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * sm64ex: remove vanilla 100 coins from item pool to remove overfilling stars * yeah Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Remove range condition (35 is the min for total stars) Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
		
			
				
	
	
		
			188 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import typing
 | |
| from dataclasses import dataclass
 | |
| from Options import DefaultOnToggle, Range, Toggle, DeathLink, Choice, PerGameCommonOptions, OptionSet, OptionGroup
 | |
| from .Items import action_item_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."""
 | |
|     display_name = "Randomize 1Up !-Blocks"
 | |
|     alias_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"
 | |
| 
 | |
| 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_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
 |