148 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from dataclasses import dataclass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from Options import DefaultOnToggle, Toggle, StartInventoryPool, Choice, Range, PerGameCommonOptions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SwordProgression(DefaultOnToggle):
							 | 
						||
| 
								 | 
							
								    """Adds four sword upgrades to the item pool that will progressively grant stronger melee weapons, including two new
							 | 
						||
| 
								 | 
							
								    swords with increased range and attack power."""
							 | 
						||
| 
								 | 
							
								    internal_name = "sword_progression"
							 | 
						||
| 
								 | 
							
								    display_name = "Sword Progression"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StartWithSword(Toggle):
							 | 
						||
| 
								 | 
							
								    """Start with a sword in the player's inventory. Does not count towards Sword Progression."""
							 | 
						||
| 
								 | 
							
								    internal_name = "start_with_sword"
							 | 
						||
| 
								 | 
							
								    display_name = "Start With Sword"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class KeysBehindBosses(Toggle):
							 | 
						||
| 
								 | 
							
								    """Places the three hexagon keys behind their respective boss fight in your world."""
							 | 
						||
| 
								 | 
							
								    internal_name = "keys_behind_bosses"
							 | 
						||
| 
								 | 
							
								    display_name = "Keys Behind Bosses"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AbilityShuffling(Toggle):
							 | 
						||
| 
								 | 
							
								    """Locks the usage of Prayer, Holy Cross*, and Ice Rod until the relevant pages of the manual have been found.
							 | 
						||
| 
								 | 
							
								    If playing Hexagon Quest, abilities are instead randomly unlocked after obtaining 25%, 50%, and 75% of the required
							 | 
						||
| 
								 | 
							
								    Hexagon goal amount.
							 | 
						||
| 
								 | 
							
								    *Certain Holy Cross usages are still allowed, such as the free bomb codes, the seeking spell, and other
							 | 
						||
| 
								 | 
							
								    player-facing codes.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    internal_name = "ability_shuffling"
							 | 
						||
| 
								 | 
							
								    display_name = "Ability Shuffling"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LogicRules(Choice):
							 | 
						||
| 
								 | 
							
								    """Set which logic rules to use for your world.
							 | 
						||
| 
								 | 
							
								    Restricted: Standard logic, no glitches.
							 | 
						||
| 
								 | 
							
								    No Major Glitches: Ice grapples through doors, shooting the west bell, and boss quick kills are included in logic.
							 | 
						||
| 
								 | 
							
								    Unrestricted: Logic in No Major Glitches, as well as ladder storage to get to certain places early.
							 | 
						||
| 
								 | 
							
								    *Special Shop is not in logic without the Hero's Laurels in Unrestricted due to soft lock potential.
							 | 
						||
| 
								 | 
							
								    *Using Ladder Storage to get to individual chests is not in logic to avoid tedium.
							 | 
						||
| 
								 | 
							
								    *Getting knocked out of the air by enemies during Ladder Storage to reach places is not in logic, except for in
							 | 
						||
| 
								 | 
							
								    Rooted Ziggurat Lower. This is so you're not punished for playing with enemy rando on."""
							 | 
						||
| 
								 | 
							
								    internal_name = "logic_rules"
							 | 
						||
| 
								 | 
							
								    display_name = "Logic Rules"
							 | 
						||
| 
								 | 
							
								    option_restricted = 0
							 | 
						||
| 
								 | 
							
								    option_no_major_glitches = 1
							 | 
						||
| 
								 | 
							
								    option_unrestricted = 2
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Lanternless(Toggle):
							 | 
						||
| 
								 | 
							
								    """Choose whether you require the Lantern for dark areas.
							 | 
						||
| 
								 | 
							
								    When enabled, the Lantern is marked as Useful instead of Progression."""
							 | 
						||
| 
								 | 
							
								    internal_name = "lanternless"
							 | 
						||
| 
								 | 
							
								    display_name = "Lanternless"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Maskless(Toggle):
							 | 
						||
| 
								 | 
							
								    """Choose whether you require the Scavenger's Mask for Lower Quarry.
							 | 
						||
| 
								 | 
							
								    When enabled, the Scavenger's Mask is marked as Useful instead of Progression."""
							 | 
						||
| 
								 | 
							
								    internal_name = "maskless"
							 | 
						||
| 
								 | 
							
								    display_name = "Maskless"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FoolTraps(Choice):
							 | 
						||
| 
								 | 
							
								    """Replaces low-to-medium value money rewards in the item pool with fool traps, which cause random negative
							 | 
						||
| 
								 | 
							
								    effects to the player."""
							 | 
						||
| 
								 | 
							
								    internal_name = "fool_traps"
							 | 
						||
| 
								 | 
							
								    display_name = "Fool Traps"
							 | 
						||
| 
								 | 
							
								    option_off = 0
							 | 
						||
| 
								 | 
							
								    option_normal = 1
							 | 
						||
| 
								 | 
							
								    option_double = 2
							 | 
						||
| 
								 | 
							
								    option_onslaught = 3
							 | 
						||
| 
								 | 
							
								    default = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class HexagonQuest(Toggle):
							 | 
						||
| 
								 | 
							
								    """An alternate goal that shuffles Gold "Questagon" items into the item pool and allows the game to be completed
							 | 
						||
| 
								 | 
							
								    after collecting the required number of them."""
							 | 
						||
| 
								 | 
							
								    internal_name = "hexagon_quest"
							 | 
						||
| 
								 | 
							
								    display_name = "Hexagon Quest"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class HexagonGoal(Range):
							 | 
						||
| 
								 | 
							
								    """How many Gold Questagons are required to complete the game on Hexagon Quest."""
							 | 
						||
| 
								 | 
							
								    internal_name = "hexagon_goal"
							 | 
						||
| 
								 | 
							
								    display_name = "Gold Hexagons Required"
							 | 
						||
| 
								 | 
							
								    range_start = 15
							 | 
						||
| 
								 | 
							
								    range_end = 50
							 | 
						||
| 
								 | 
							
								    default = 20
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ExtraHexagonPercentage(Range):
							 | 
						||
| 
								 | 
							
								    """How many extra Gold Questagons are shuffled into the item pool, taken as a percentage of the goal amount."""
							 | 
						||
| 
								 | 
							
								    internal_name = "extra_hexagon_percentage"
							 | 
						||
| 
								 | 
							
								    display_name = "Percentage of Extra Gold Hexagons"
							 | 
						||
| 
								 | 
							
								    range_start = 0
							 | 
						||
| 
								 | 
							
								    range_end = 100
							 | 
						||
| 
								 | 
							
								    default = 50
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class EntranceRando(Toggle):
							 | 
						||
| 
								 | 
							
								    """Randomize the connections between scenes.
							 | 
						||
| 
								 | 
							
								    A small, very lost fox on a big adventure."""
							 | 
						||
| 
								 | 
							
								    internal_name = "entrance_rando"
							 | 
						||
| 
								 | 
							
								    display_name = "Entrance Rando"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FixedShop(Toggle):
							 | 
						||
| 
								 | 
							
								    """Forces the Windmill entrance to lead to a shop, and places only one other shop in the pool.
							 | 
						||
| 
								 | 
							
								    Has no effect if Entrance Rando is not enabled."""
							 | 
						||
| 
								 | 
							
								    internal_name = "fixed_shop"
							 | 
						||
| 
								 | 
							
								    display_name = "ER Fixed Shop"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LaurelsLocation(Choice):
							 | 
						||
| 
								 | 
							
								    """Force the Hero's Laurels to be placed at a location in your world.
							 | 
						||
| 
								 | 
							
								    For if you want to avoid or specify early or late Laurels.
							 | 
						||
| 
								 | 
							
								    If you use the 10 Fairies option in Entrance Rando, Secret Gathering Place will be at its vanilla entrance."""
							 | 
						||
| 
								 | 
							
								    internal_name = "laurels_location"
							 | 
						||
| 
								 | 
							
								    display_name = "Laurels Location"
							 | 
						||
| 
								 | 
							
								    option_anywhere = 0
							 | 
						||
| 
								 | 
							
								    option_6_coins = 1
							 | 
						||
| 
								 | 
							
								    option_10_coins = 2
							 | 
						||
| 
								 | 
							
								    option_10_fairies = 3
							 | 
						||
| 
								 | 
							
								    default = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass
							 | 
						||
| 
								 | 
							
								class TunicOptions(PerGameCommonOptions):
							 | 
						||
| 
								 | 
							
								    sword_progression: SwordProgression
							 | 
						||
| 
								 | 
							
								    start_with_sword: StartWithSword
							 | 
						||
| 
								 | 
							
								    keys_behind_bosses: KeysBehindBosses
							 | 
						||
| 
								 | 
							
								    ability_shuffling: AbilityShuffling
							 | 
						||
| 
								 | 
							
								    logic_rules: LogicRules
							 | 
						||
| 
								 | 
							
								    entrance_rando: EntranceRando
							 | 
						||
| 
								 | 
							
								    fixed_shop: FixedShop
							 | 
						||
| 
								 | 
							
								    fool_traps: FoolTraps
							 | 
						||
| 
								 | 
							
								    hexagon_quest: HexagonQuest
							 | 
						||
| 
								 | 
							
								    hexagon_goal: HexagonGoal
							 | 
						||
| 
								 | 
							
								    extra_hexagon_percentage: ExtraHexagonPercentage
							 | 
						||
| 
								 | 
							
								    lanternless: Lanternless
							 | 
						||
| 
								 | 
							
								    maskless: Maskless
							 | 
						||
| 
								 | 
							
								    laurels_location: LaurelsLocation
							 | 
						||
| 
								 | 
							
								    start_inventory_from_pool: StartInventoryPool
							 |