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
 | 
