154 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| 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, PerGameCommonOptions, DefaultOnToggle, StartInventoryPool
 | |
| 
 | |
| 
 | |
| class IngredientRandomizer(Choice):
 | |
|     """
 | |
|     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".
 | |
|     """
 | |
|     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"
 | |
|     option_none = 0
 | |
|     option_all = 1
 | |
|     option_all_except_final = 2
 | |
|     default = 2
 | |
| 
 | |
| 
 | |
| class EarlyEnergyForm(DefaultOnToggle):
 | |
|     """ Force the Energy Form to be in a location early in the game """
 | |
|     display_name = "Early Energy Form"
 | |
| 
 | |
| 
 | |
| class AquarianTranslation(Toggle):
 | |
|     """Translate the Aquarian scripture in the game into English."""
 | |
|     display_name = "Translate Aquarian"
 | |
| 
 | |
| 
 | |
| class BigBossesToBeat(Range):
 | |
|     """
 | |
|     The number of big bosses to beat before having access to the creator (the final boss). The big bosses are
 | |
|     "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):
 | |
|     """
 | |
|     The number of minibosses to beat before having access to the creator (the final boss). The minibosses are
 | |
|     "Nautilus Prime", "Blaster Peg Prime", "Mergog", "Mithalan priests", "Octopus Prime", "Crabbius Maximus",
 | |
|     "Mantis Shrimp Prime" and "King Jellyfish God Prime".
 | |
|     Note that the Energy Statue and Simon Says are not minibosses.
 | |
|     """
 | |
|     display_name = "Minibosses to beat"
 | |
|     range_start = 0
 | |
|     range_end = 8
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class Objective(Choice):
 | |
|     """
 | |
|     The game objective can be to kill the creator or to kill the creator after obtaining all three secret memories.
 | |
|     """
 | |
|     display_name = "Objective"
 | |
|     option_kill_the_creator = 0
 | |
|     option_obtain_secrets_and_kill_the_creator = 1
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class SkipFirstVision(Toggle):
 | |
|     """
 | |
|     The first vision in the game, where Naija transforms into Energy Form and gets flooded by enemies, is quite cool but
 | |
|     can be quite long when you already know what is going on. This option can be used to skip this vision.
 | |
|     """
 | |
|     display_name = "Skip Naija's first vision"
 | |
| 
 | |
| 
 | |
| class NoProgressionHardOrHiddenLocation(Toggle):
 | |
|     """
 | |
|     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.
 | |
|     """
 | |
|     display_name = "No progression in hard or hidden locations"
 | |
| 
 | |
| 
 | |
| class LightNeededToGetToDarkPlaces(DefaultOnToggle):
 | |
|     """
 | |
|     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.
 | |
|     """
 | |
|     display_name = "Light needed to get to dark places"
 | |
| 
 | |
| 
 | |
| class BindSongNeededToGetUnderRockBulb(Toggle):
 | |
|     """
 | |
|     Make sure that the bind song can be acquired before having to obtain sing bulbs under rocks.
 | |
|     """
 | |
|     display_name = "Bind song needed to get sing bulbs under rocks"
 | |
| 
 | |
| 
 | |
| class BlindGoal(Toggle):
 | |
|     """
 | |
|     Hide the goal's requirements from the help page so that you have to go to the last boss door to know
 | |
|     what is needed to access the boss.
 | |
|     """
 | |
|     display_name = "Hide the goal's requirements"
 | |
| 
 | |
| 
 | |
| class UnconfineHomeWater(Choice):
 | |
|     """
 | |
|     Open the way out of the Home Water area so that Naija can go to open water and beyond without the bind song.
 | |
|     """
 | |
|     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
 | |
|     blind_goal: BlindGoal
 |