Archipelago/worlds/sm/Options.py

238 lines
6.2 KiB
Python

import typing
from Options import Choice, Range, OptionDict, OptionList, Option, Toggle, DefaultOnToggle, DeathLink
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 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 SuitsRestriction(DefaultOnToggle):
displayname = "Suits Restriction"
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):
displayname = "Fun Combat"
class FunMovement(Toggle):
displayname = "Fun Movement"
class FunSuits(Toggle):
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
}