import typing from Options import Choice, Range, OptionDict, OptionList, Option, Toggle, DefaultOnToggle class StartItemsRemovesFromPool(Toggle): displayname = "StartItems Removes From Item Pool" class Preset(Choice): """choose one of the preset or specify "varia_custom" to use varia_custom_preset option or specify "custom" to use custom_preset option""" displayname = "Preset" option_newbie = 0 option_casual = 1 option_regular = 2 option_veteran = 3 option_expert = 4 option_master = 5 option_samus = 6 option_Season_Races = 7 option_SMRAT2021 = 8 option_solution = 9 option_custom = 10 option_varia_custom = 11 default = 2 class StartLocation(Choice): displayname = "Start Location" option_Ceres = 0 option_Landing_Site = 1 option_Gauntlet_Top = 2 option_Green_Brinstar_Elevator = 3 option_Big_Pink = 4 option_Etecoons_Supers = 5 option_Wrecked_Ship_Main = 6 option_Firefleas_Top = 7 option_Business_Center = 8 option_Bubble_Mountain = 9 option_Mama_Turtle = 10 option_Watering_Hole = 11 option_Aqueduct = 12 option_Red_Brinstar_Elevator = 13 option_Golden_Four = 14 default = 1 class DeathLink(Choice): """When DeathLink is enabled and someone dies, you will die. With survive reserve tanks can save you.""" displayname = "Death Link" option_disable = 0 option_enable = 1 option_enable_survive = 3 alias_false = 0 alias_true = 1 default = 0 class MaxDifficulty(Choice): displayname = "Maximum Difficulty" option_easy = 0 option_medium = 1 option_hard = 2 option_harder = 3 option_hardcore = 4 option_mania = 5 option_infinity = 6 default = 4 class MorphPlacement(Choice): displayname = "Morph Placement" option_early = 0 option_normal = 1 default = 0 class StrictMinors(Toggle): displayname = "Strict Minors" class MissileQty(Range): displayname = "Missile Quantity" range_start = 10 range_end = 90 default = 30 class SuperQty(Range): displayname = "Super Quantity" range_start = 10 range_end = 90 default = 20 class PowerBombQty(Range): displayname = "Power Bomb Quantity" range_start = 10 range_end = 90 default = 10 class MinorQty(Range): displayname = "Minor Quantity" range_start = 7 range_end = 100 default = 100 class EnergyQty(Choice): displayname = "Energy Quantity" option_ultra_sparse = 0 option_sparse = 1 option_medium = 2 option_vanilla = 3 default = 3 class AreaRandomization(Choice): displayname = "Area Randomization" option_off = 0 option_light = 1 option_on = 2 alias_false = 0 alias_true = 2 default = 0 class AreaLayout(Toggle): displayname = "Area Layout" class DoorsColorsRando(Toggle): displayname = "Doors Colors Rando" class AllowGreyDoors(Toggle): displayname = "Allow Grey Doors" class BossRandomization(Toggle): displayname = "Boss Randomization" class FunCombat(Toggle): """if used, might force 'items' accessibility""" displayname = "Fun Combat" class FunMovement(Toggle): """if used, might force 'items' accessibility""" displayname = "Fun Movement" class FunSuits(Toggle): """if used, might force 'items' accessibility""" displayname = "Fun Suits" class LayoutPatches(DefaultOnToggle): displayname = "Layout Patches" class VariaTweaks(Toggle): displayname = "Varia Tweaks" class NerfedCharge(Toggle): displayname = "Nerfed Charge" class GravityBehaviour(Choice): displayname = "Gravity Behaviour" option_Vanilla = 0 option_Balanced = 1 option_Progressive = 2 default = 1 class ElevatorsDoorsSpeed(DefaultOnToggle): displayname = "Elevators doors speed" class SpinJumpRestart(Toggle): displayname = "Spin Jump Restart" class InfiniteSpaceJump(Toggle): displayname = "Infinite Space Jump" class RefillBeforeSave(Toggle): displayname = "Refill Before Save" class Hud(Toggle): displayname = "Hud" class Animals(Toggle): displayname = "Animals" class NoMusic(Toggle): displayname = "No Music" class RandomMusic(Toggle): displayname = "Random Music" class CustomPreset(OptionDict): """ see https://randommetroidsolver.pythonanywhere.com/presets for detailed info on each preset settings knows: each skill (know) has a pair [can use, perceived difficulty using one of 1, 5, 10, 25, 50 or 100 each one matching a max_difficulty] settings: hard rooms, hellruns and bosses settings controller: predefined controller mapping and moon walk setting """ displayname = "Custom Preset" default = { "knows": {}, "settings": {}, "controller": {} } class VariaCustomPreset(OptionList): """use an entry from the preset list on https://randommetroidsolver.pythonanywhere.com/presets""" displayname = "Varia Custom Preset" default = {} sm_options: typing.Dict[str, type(Option)] = { "start_inventory_removes_from_pool": StartItemsRemovesFromPool, "preset": Preset, "start_location": StartLocation, "death_link": DeathLink, #"majors_split": "Full", #"scav_num_locs": "10", #"scav_randomized": "off", #"scav_escape": "off", "max_difficulty": MaxDifficulty, #"progression_speed": "medium", #"progression_difficulty": "normal", "morph_placement": MorphPlacement, #"suits_restriction": SuitsRestriction, #"hide_items": "off", "strict_minors": StrictMinors, "missile_qty": MissileQty, "super_qty": SuperQty, "power_bomb_qty": PowerBombQty, "minor_qty": MinorQty, "energy_qty": EnergyQty, "area_randomization": AreaRandomization, "area_layout": AreaLayout, "doors_colors_rando": DoorsColorsRando, "allow_grey_doors": AllowGreyDoors, "boss_randomization": BossRandomization, #"minimizer": "off", #"minimizer_qty": "45", #"minimizer_tourian": "off", #"escape_rando": "off", #"remove_escape_enemies": "off", "fun_combat": FunCombat, "fun_movement": FunMovement, "fun_suits": FunSuits, "layout_patches": LayoutPatches, "varia_tweaks": VariaTweaks, "nerfed_charge": NerfedCharge, "gravity_behaviour": GravityBehaviour, #"item_sounds": "on", "elevators_doors_speed": ElevatorsDoorsSpeed, "spin_jump_restart": SpinJumpRestart, #"rando_speed": "off", "infinite_space_jump": InfiniteSpaceJump, "refill_before_save": RefillBeforeSave, "hud": Hud, "animals": Animals, "no_music": NoMusic, "random_music": RandomMusic, "custom_preset": CustomPreset, "varia_custom_preset": VariaCustomPreset }