| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  | from Options import Choice, Option, Range, Toggle, OptionSet | 
					
						
							|  |  |  | import typing | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-28 12:02:06 -04:00
										 |  |  | from worlds.kh2 import SupportAbility_Table, ActionAbility_Table | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | class SoraEXP(Range): | 
					
						
							|  |  |  |     """Sora Level Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Sora Level EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FinalEXP(Range): | 
					
						
							|  |  |  |     """Final Form Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Final Form EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MasterEXP(Range): | 
					
						
							|  |  |  |     """Master Form Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Master Form EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LimitEXP(Range): | 
					
						
							|  |  |  |     """Limit Form Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Limit Form EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class WisdomEXP(Range): | 
					
						
							|  |  |  |     """Wisdom Form Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Wisdom Form EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ValorEXP(Range): | 
					
						
							|  |  |  |     """Valor Form Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Valor Form EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SummonEXP(Range): | 
					
						
							|  |  |  |     """Summon Exp Multiplier""" | 
					
						
							|  |  |  |     display_name = "Summon level EXP" | 
					
						
							|  |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 10 | 
					
						
							|  |  |  |     default = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Schmovement(Choice): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """Level of Progressive Movement Abilities You Start With""" | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Schmovement" | 
					
						
							|  |  |  |     option_level_0 = 0 | 
					
						
							|  |  |  |     option_level_1 = 1 | 
					
						
							|  |  |  |     option_level_2 = 2 | 
					
						
							|  |  |  |     option_level_3 = 3 | 
					
						
							|  |  |  |     option_level_4 = 4 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomGrowth(Range): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """Amount of Random Progressive Movement Abilities You Start With""" | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Random Starting Growth" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 20 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KeybladeMin(Range): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """Minimum Stats for Keyblades""" | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Keyblade Minimum Stats" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 20 | 
					
						
							|  |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KeybladeMax(Range): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """Maximum Stats for Keyblades""" | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Keyblade Max Stats" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 20 | 
					
						
							|  |  |  |     default = 7 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Visitlocking(Choice): | 
					
						
							|  |  |  |     """Determines the level of visit locking
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     No Visit Locking: Start with all 25 visit locking items. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Second Visit Locking: Start with 13 visit locking items for every first visit. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     First and Second Visit Locking: One item for First Visit Two For Second Visit"""
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Visit locking" | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     option_no_visit_locking = 0  # starts with 25 visit locking | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     option_second_visit_locking = 1  # starts with 13 (no icecream/picture) | 
					
						
							|  |  |  |     option_first_and_second_visit_locking = 2  # starts with nothing | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RandomVisitLockingItem(Range): | 
					
						
							| 
									
										
										
										
											2023-03-27 13:17:06 -04:00
										 |  |  |     """Start with random amount of visit locking items.""" | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Random Visit Locking Item" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							| 
									
										
										
										
											2023-03-27 13:17:06 -04:00
										 |  |  |     range_end = 25 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     default = 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SuperBosses(Toggle): | 
					
						
							|  |  |  |     """Terra, Sephiroth and Data Fights Toggle.""" | 
					
						
							|  |  |  |     display_name = "Super Bosses" | 
					
						
							|  |  |  |     default = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Cups(Choice): | 
					
						
							|  |  |  |     """Olympus Cups Toggles
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |         No Cups: All Cups are placed into Excluded Locations. | 
					
						
							|  |  |  |         Cups: Hades Paradox Cup is placed into Excluded Locations | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |         Cups and Hades Paradox: Has Every Cup On."""
 | 
					
						
							|  |  |  |     display_name = "Olympus Cups" | 
					
						
							|  |  |  |     option_no_cups = 0 | 
					
						
							|  |  |  |     option_cups = 1 | 
					
						
							|  |  |  |     option_cups_and_hades_paradox = 2 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LevelDepth(Choice): | 
					
						
							|  |  |  |     """Determines How many locations you want on levels
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-09 22:12:23 -04:00
										 |  |  |     Level 50: 23 checks spread through 50 levels. | 
					
						
							|  |  |  |     Level 99: 23 checks spread through 99 levels. | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Level 50 sanity: 49 checks spread through 50 levels. | 
					
						
							|  |  |  |     Level 99 sanity: 98 checks spread through 99 levels. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     Level 1: no checks on levels(checks are replaced with stats)"""
 | 
					
						
							|  |  |  |     display_name = "Level Depth" | 
					
						
							|  |  |  |     option_level_50 = 0 | 
					
						
							|  |  |  |     option_level_99 = 1 | 
					
						
							|  |  |  |     option_level_50_sanity = 2 | 
					
						
							|  |  |  |     option_level_99_sanity = 3 | 
					
						
							|  |  |  |     option_level_1 = 4 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PromiseCharm(Toggle): | 
					
						
							|  |  |  |     """Add Promise Charm to the Pool""" | 
					
						
							|  |  |  |     display_name = "Promise Charm" | 
					
						
							|  |  |  |     default = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KeybladeAbilities(Choice): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Action: Action Abilities in the Keyblade Slot Pool. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Support: Support Abilities in the Keyblade Slot Pool. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Both: Action and Support Abilities in the Keyblade Slot Pool."""
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Keyblade Abilities" | 
					
						
							|  |  |  |     option_support = 0 | 
					
						
							|  |  |  |     option_action = 1 | 
					
						
							|  |  |  |     option_both = 2 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     default = 0 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BlacklistKeyblade(OptionSet): | 
					
						
							|  |  |  |     """Black List these Abilities on Keyblades""" | 
					
						
							|  |  |  |     display_name = "Blacklist Keyblade Abilities" | 
					
						
							| 
									
										
										
										
											2023-03-28 12:02:06 -04:00
										 |  |  |     valid_keys = set(SupportAbility_Table.keys()).union(ActionAbility_Table.keys()) | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  | class Goal(Choice): | 
					
						
							|  |  |  |     """Win Condition
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     Three Proofs: Get a Gold Crown on Sora's Head. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Lucky Emblem Hunt: Find Required Amount of Lucky Emblems . | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Hitlist (Bounty Hunt): Find Required Amount of Bounties"""
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Goal" | 
					
						
							|  |  |  |     option_three_proofs = 0 | 
					
						
							|  |  |  |     option_lucky_emblem_hunt = 1 | 
					
						
							|  |  |  |     option_hitlist = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FinalXemnas(Toggle): | 
					
						
							|  |  |  |     """Kill Final Xemnas to Beat the Game.
 | 
					
						
							|  |  |  |     This is in addition to your Goal. I.E. get three proofs+kill final Xemnas"""
 | 
					
						
							|  |  |  |     display_name = "Final Xemnas" | 
					
						
							|  |  |  |     default = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LuckyEmblemsRequired(Range): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """Number of Lucky Emblems to collect to Win/Unlock Final Xemnas Door.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     If Goal is not Lucky Emblem Hunt this does nothing."""
 | 
					
						
							|  |  |  |     display_name = "Lucky Emblems Required" | 
					
						
							| 
									
										
										
										
											2023-03-27 13:17:06 -04:00
										 |  |  |     range_start = 1 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     range_end = 60 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     default = 30 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LuckyEmblemsAmount(Range): | 
					
						
							|  |  |  |     """Number of Lucky Emblems that are in the pool.
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     If Goal is not Lucky Emblem Hunt this does nothing."""
 | 
					
						
							|  |  |  |     display_name = "Lucky Emblems Available" | 
					
						
							| 
									
										
										
										
											2023-03-27 13:17:06 -04:00
										 |  |  |     range_start = 1 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     range_end = 60 | 
					
						
							|  |  |  |     default = 40 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BountyRequired(Range): | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     """Number of Bounties to collect to Win/Unlock Final Xemnas Door.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If Goal is not Hitlist this does nothing."""
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Bounties Required" | 
					
						
							| 
									
										
										
										
											2023-03-27 13:17:06 -04:00
										 |  |  |     range_start = 1 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     range_end = 24 | 
					
						
							|  |  |  |     default = 7 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BountyAmount(Range): | 
					
						
							|  |  |  |     """Number of Bounties that are in the pool.
 | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     If Goal is not Hitlist this does nothing."""
 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     display_name = "Bounties Available" | 
					
						
							| 
									
										
										
										
											2023-03-27 13:17:06 -04:00
										 |  |  |     range_start = 1 | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     range_end = 24 | 
					
						
							|  |  |  |     default = 13 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | KH2_Options: typing.Dict[str, type(Option)] = { | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     "LevelDepth":             LevelDepth, | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     "Sora_Level_EXP":         SoraEXP, | 
					
						
							|  |  |  |     "Valor_Form_EXP":         ValorEXP, | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     "Wisdom_Form_EXP":        WisdomEXP, | 
					
						
							|  |  |  |     "Limit_Form_EXP":         LimitEXP, | 
					
						
							|  |  |  |     "Master_Form_EXP":        MasterEXP, | 
					
						
							|  |  |  |     "Final_Form_EXP":         FinalEXP, | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     "Summon_EXP":             SummonEXP, | 
					
						
							|  |  |  |     "Schmovement":            Schmovement, | 
					
						
							|  |  |  |     "RandomGrowth":           RandomGrowth, | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     "Promise_Charm":          PromiseCharm, | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     "Goal":                   Goal, | 
					
						
							|  |  |  |     "FinalXemnas":            FinalXemnas, | 
					
						
							|  |  |  |     "LuckyEmblemsAmount":     LuckyEmblemsAmount, | 
					
						
							|  |  |  |     "LuckyEmblemsRequired":   LuckyEmblemsRequired, | 
					
						
							|  |  |  |     "BountyAmount":           BountyAmount, | 
					
						
							|  |  |  |     "BountyRequired":         BountyRequired, | 
					
						
							| 
									
										
										
										
											2023-04-01 13:55:43 -04:00
										 |  |  |     "Keyblade_Minimum":       KeybladeMin, | 
					
						
							|  |  |  |     "Keyblade_Maximum":       KeybladeMax, | 
					
						
							|  |  |  |     "Visitlocking":           Visitlocking, | 
					
						
							|  |  |  |     "RandomVisitLockingItem": RandomVisitLockingItem, | 
					
						
							|  |  |  |     "SuperBosses":            SuperBosses, | 
					
						
							|  |  |  |     "KeybladeAbilities":      KeybladeAbilities, | 
					
						
							|  |  |  |     "BlacklistKeyblade":      BlacklistKeyblade, | 
					
						
							| 
									
										
										
										
											2023-03-20 12:19:55 -04:00
										 |  |  |     "Cups":                   Cups, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |