| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  | """
 | 
					
						
							|  |  |  | Author: Louis M | 
					
						
							|  |  |  | Date: Fri, 15 Mar 2024 18:41:40 +0000 | 
					
						
							|  |  |  | Description: Manage options in the Aquaria game multiworld randomizer | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from dataclasses import dataclass | 
					
						
							|  |  |  | from Options import Toggle, Choice, Range, DeathLink, PerGameCommonOptions, DefaultOnToggle, StartInventoryPool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IngredientRandomizer(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     Select if the simple ingredients (that do not have a recipe) should be randomized. | 
					
						
							|  |  |  |     If "Common Ingredients" is selected, the randomization will exclude the "Red Bulb", "Special Bulb" and "Rukh Egg". | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Randomize Ingredients" | 
					
						
							|  |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_common_ingredients = 1 | 
					
						
							|  |  |  |     option_all_ingredients = 2 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DishRandomizer(Toggle): | 
					
						
							|  |  |  |     """Randomize the drop of Dishes (Ingredients with recipe).""" | 
					
						
							|  |  |  |     display_name = "Dish Randomizer" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TurtleRandomizer(Choice): | 
					
						
							|  |  |  |     """Randomize the transportation turtle.""" | 
					
						
							|  |  |  |     display_name = "Turtle Randomizer" | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     option_none = 0 | 
					
						
							|  |  |  |     option_all = 1 | 
					
						
							|  |  |  |     option_all_except_final = 2 | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class EarlyEnergyForm(DefaultOnToggle): | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     """ Force the Energy Form to be in a location early in the game """ | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     display_name = "Early Energy Form" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AquarianTranslation(Toggle): | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     """Translate the Aquarian scripture in the game into English.""" | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     display_name = "Translate Aquarian" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BigBossesToBeat(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     The number of big bosses to beat before having access to the creator (the final boss). The big bosses are | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     "Fallen God", "Mithalan God", "Drunian God", "Sun God" and "The Golem". | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Big bosses to beat" | 
					
						
							|  |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 5 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MiniBossesToBeat(Range): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     The number of minibosses to beat before having access to the creator (the final boss). The minibosses are | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     "Nautilus Prime", "Blaster Peg Prime", "Mergog", "Mithalan priests", "Octopus Prime", "Crabbius Maximus", | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     "Mantis Shrimp Prime" and "King Jellyfish God Prime". | 
					
						
							|  |  |  |     Note that the Energy Statue and Simon Says are not minibosses. | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     display_name = "Minibosses to beat" | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     range_start = 0 | 
					
						
							|  |  |  |     range_end = 8 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Objective(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     The game objective can be to kill the creator or to kill the creator after obtaining all three secret memories. | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Objective" | 
					
						
							|  |  |  |     option_kill_the_creator = 0 | 
					
						
							|  |  |  |     option_obtain_secrets_and_kill_the_creator = 1 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  | class SkipFirstVision(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     The first vision in the game, where Naija transforms into Energy Form and gets flooded by enemies, is quite cool but | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     can be quite long when you already know what is going on. This option can be used to skip this vision. | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     display_name = "Skip Naija's first vision" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | class NoProgressionHardOrHiddenLocation(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     Make sure that there are no progression items at hard-to-reach or hard-to-find locations. | 
					
						
							|  |  |  |     Those locations are very High locations (that need beast form, soup and skill to get), | 
					
						
							|  |  |  |     every location in the bubble cave, locations where need you to cross a false wall without any indication, | 
					
						
							|  |  |  |     the Arnassi race, bosses and minibosses. Useful for those that want a more casual run. | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "No progression in hard or hidden locations" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  | class LightNeededToGetToDarkPlaces(DefaultOnToggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     Make sure that the sun form or the dumbo pet can be acquired before getting to dark places. | 
					
						
							|  |  |  |     Be aware that navigating in dark places without light is extremely difficult. | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Light needed to get to dark places" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  | class BindSongNeededToGetUnderRockBulb(Toggle): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     Make sure that the bind song can be acquired before having to obtain sing bulbs under rocks. | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Bind song needed to get sing bulbs under rocks" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class UnconfineHomeWater(Choice): | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-05-20 02:58:44 -04:00
										 |  |  |     Open the way out of the Home water area so that Naija can go to open water and beyond without the bind song. | 
					
						
							| 
									
										
										
										
											2024-05-17 06:29:00 -04:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     display_name = "Unconfine Home Water Area" | 
					
						
							|  |  |  |     option_off = 0 | 
					
						
							|  |  |  |     option_via_energy_door = 1 | 
					
						
							|  |  |  |     option_via_transturtle = 2 | 
					
						
							|  |  |  |     option_via_both = 3 | 
					
						
							|  |  |  |     default = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @dataclass | 
					
						
							|  |  |  | class AquariaOptions(PerGameCommonOptions): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Every option in the Aquaria randomizer | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     start_inventory_from_pool: StartInventoryPool | 
					
						
							|  |  |  |     objective: Objective | 
					
						
							|  |  |  |     mini_bosses_to_beat: MiniBossesToBeat | 
					
						
							|  |  |  |     big_bosses_to_beat: BigBossesToBeat | 
					
						
							|  |  |  |     turtle_randomizer: TurtleRandomizer | 
					
						
							|  |  |  |     early_energy_form: EarlyEnergyForm | 
					
						
							|  |  |  |     light_needed_to_get_to_dark_places: LightNeededToGetToDarkPlaces | 
					
						
							|  |  |  |     bind_song_needed_to_get_under_rock_bulb: BindSongNeededToGetUnderRockBulb | 
					
						
							|  |  |  |     unconfine_home_water: UnconfineHomeWater | 
					
						
							|  |  |  |     no_progression_hard_or_hidden_locations: NoProgressionHardOrHiddenLocation | 
					
						
							|  |  |  |     ingredient_randomizer: IngredientRandomizer | 
					
						
							|  |  |  |     dish_randomizer: DishRandomizer | 
					
						
							|  |  |  |     aquarian_translation: AquarianTranslation | 
					
						
							|  |  |  |     skip_first_vision: SkipFirstVision | 
					
						
							|  |  |  |     death_link: DeathLink |