236 lines
8.3 KiB
Python
236 lines
8.3 KiB
Python
import typing
|
|
|
|
from Options import Toggle, DefaultOnToggle, Option, Range, Choice, ItemDict, DeathLink
|
|
|
|
|
|
class RandomizeWeaponLocations(DefaultOnToggle):
|
|
"""Randomizes weapons (+76 locations)"""
|
|
display_name = "Randomize Weapon Locations"
|
|
|
|
|
|
class RandomizeShieldLocations(DefaultOnToggle):
|
|
"""Randomizes shields (+24 locations)"""
|
|
display_name = "Randomize Shield Locations"
|
|
|
|
|
|
class RandomizeArmorLocations(DefaultOnToggle):
|
|
"""Randomizes armor pieces (+97 locations)"""
|
|
display_name = "Randomize Armor Locations"
|
|
|
|
|
|
class RandomizeRingLocations(DefaultOnToggle):
|
|
"""Randomizes rings (+49 locations)"""
|
|
display_name = "Randomize Ring Locations"
|
|
|
|
|
|
class RandomizeSpellLocations(DefaultOnToggle):
|
|
"""Randomizes spells (+18 locations)"""
|
|
display_name = "Randomize Spell Locations"
|
|
|
|
|
|
class RandomizeKeyLocations(DefaultOnToggle):
|
|
"""Randomizes items which unlock doors or bypass barriers"""
|
|
display_name = "Randomize Key Locations"
|
|
|
|
|
|
class RandomizeBossSoulLocations(DefaultOnToggle):
|
|
"""Randomizes Boss Souls (+18 Locations)"""
|
|
display_name = "Randomize Boss Soul Locations"
|
|
|
|
|
|
class RandomizeNPCLocations(Toggle):
|
|
"""Randomizes friendly NPC drops (meaning you will probably have to kill them) (+14 locations)"""
|
|
display_name = "Randomize NPC Locations"
|
|
|
|
|
|
class RandomizeMiscLocations(Toggle):
|
|
"""Randomizes miscellaneous items (ashes, tomes, scrolls, etc.) to the pool. (+36 locations)"""
|
|
display_name = "Randomize Miscellaneous Locations"
|
|
|
|
|
|
class RandomizeHealthLocations(Toggle):
|
|
"""Randomizes health upgrade items. (+21 locations)"""
|
|
display_name = "Randomize Health Upgrade Locations"
|
|
|
|
|
|
class RandomizeProgressiveLocationsOption(Toggle):
|
|
"""Randomizes upgrade materials and consumables such as the titanite shards, firebombs, resin, etc...
|
|
|
|
Instead of specific locations, these are progressive, so Titanite Shard #1 is the first titanite shard
|
|
you pick up, regardless of whether it's from an enemy drop late in the game or an item on the ground in the
|
|
first 5 minutes."""
|
|
display_name = "Randomize Progressive Locations"
|
|
|
|
|
|
class PoolTypeOption(Choice):
|
|
"""Changes which non-progression items you add to the pool
|
|
|
|
Shuffle: Items are picked from the locations being randomized
|
|
Various: Items are picked from a list of all items in the game, but are the same type of item they replace"""
|
|
display_name = "Pool Type"
|
|
option_shuffle = 0
|
|
option_various = 1
|
|
|
|
|
|
class GuaranteedItemsOption(ItemDict):
|
|
"""Guarantees that the specified items will be in the item pool"""
|
|
display_name = "Guaranteed Items"
|
|
|
|
|
|
class AutoEquipOption(Toggle):
|
|
"""Automatically equips any received armor or left/right weapons."""
|
|
display_name = "Auto-Equip"
|
|
|
|
|
|
class LockEquipOption(Toggle):
|
|
"""Lock the equipment slots so you cannot change your armor or your left/right weapons. Works great with the
|
|
Auto-equip option."""
|
|
display_name = "Lock Equipment Slots"
|
|
|
|
|
|
class NoWeaponRequirementsOption(Toggle):
|
|
"""Disable the weapon requirements by removing any movement or damage penalties.
|
|
Permitting you to use any weapon early"""
|
|
display_name = "No Weapon Requirements"
|
|
|
|
|
|
class NoSpellRequirementsOption(Toggle):
|
|
"""Disable the spell requirements permitting you to use any spell"""
|
|
display_name = "No Spell Requirements"
|
|
|
|
|
|
class NoEquipLoadOption(Toggle):
|
|
"""Disable the equip load constraint from the game"""
|
|
display_name = "No Equip Load"
|
|
|
|
|
|
class RandomizeInfusionOption(Toggle):
|
|
"""Enable this option to infuse a percentage of the pool of weapons and shields."""
|
|
display_name = "Randomize Infusion"
|
|
|
|
|
|
class RandomizeInfusionPercentageOption(Range):
|
|
"""The percentage of weapons/shields in the pool to be infused if Randomize Infusion is toggled"""
|
|
display_name = "Percentage of Infused Weapons"
|
|
range_start = 0
|
|
range_end = 100
|
|
default = 33
|
|
|
|
|
|
class RandomizeWeaponLevelOption(Choice):
|
|
"""Enable this option to upgrade a percentage of the pool of weapons to a random value between the minimum and
|
|
maximum levels defined.
|
|
|
|
All: All weapons are eligible, both basic and epic
|
|
Basic: Only weapons that can be upgraded to +10
|
|
Epic: Only weapons that can be upgraded to +5"""
|
|
display_name = "Randomize Weapon Level"
|
|
option_none = 0
|
|
option_all = 1
|
|
option_basic = 2
|
|
option_epic = 3
|
|
|
|
|
|
class RandomizeWeaponLevelPercentageOption(Range):
|
|
"""The percentage of weapons in the pool to be upgraded if randomize weapons level is toggled"""
|
|
display_name = "Percentage of Randomized Weapons"
|
|
range_start = 0
|
|
range_end = 100
|
|
default = 33
|
|
|
|
|
|
class MinLevelsIn5WeaponPoolOption(Range):
|
|
"""The minimum upgraded value of a weapon in the pool of weapons that can only reach +5"""
|
|
display_name = "Minimum Level of +5 Weapons"
|
|
range_start = 0
|
|
range_end = 5
|
|
default = 1
|
|
|
|
|
|
class MaxLevelsIn5WeaponPoolOption(Range):
|
|
"""The maximum upgraded value of a weapon in the pool of weapons that can only reach +5"""
|
|
display_name = "Maximum Level of +5 Weapons"
|
|
range_start = 0
|
|
range_end = 5
|
|
default = 5
|
|
|
|
|
|
class MinLevelsIn10WeaponPoolOption(Range):
|
|
"""The minimum upgraded value of a weapon in the pool of weapons that can reach +10"""
|
|
display_name = "Minimum Level of +10 Weapons"
|
|
range_start = 0
|
|
range_end = 10
|
|
default = 1
|
|
|
|
|
|
class MaxLevelsIn10WeaponPoolOption(Range):
|
|
"""The maximum upgraded value of a weapon in the pool of weapons that can reach +10"""
|
|
display_name = "Maximum Level of +10 Weapons"
|
|
range_start = 0
|
|
range_end = 10
|
|
default = 10
|
|
|
|
|
|
class EarlySmallLothricBanner(Choice):
|
|
"""This option makes it so the user can choose to force the Small Lothric Banner into an early sphere in their world or
|
|
into an early sphere across all worlds."""
|
|
display_name = "Early Small Lothric Banner"
|
|
option_off = 0
|
|
option_early_global = 1
|
|
option_early_local = 2
|
|
default = option_off
|
|
|
|
|
|
class LateBasinOfVowsOption(Toggle):
|
|
"""This option makes it so the Basin of Vows is still randomized, but guarantees you that you wont have to venture into
|
|
Lothric Castle to find your Small Lothric Banner to get out of High Wall of Lothric. So you may find Basin of Vows early,
|
|
but you wont have to fight Dancer to find your Small Lothric Banner."""
|
|
display_name = "Late Basin of Vows"
|
|
|
|
|
|
class LateDLCOption(Toggle):
|
|
"""This option makes it so you are guaranteed to find your Small Doll without having to venture off into the DLC,
|
|
effectively putting anything in the DLC in logic after finding both Contraption Key and Small Doll,
|
|
and being able to get into Irithyll of the Boreal Valley."""
|
|
display_name = "Late DLC"
|
|
|
|
|
|
class EnableDLCOption(Toggle):
|
|
"""To use this option, you must own both the ASHES OF ARIANDEL and the RINGED CITY DLC"""
|
|
display_name = "Enable DLC"
|
|
|
|
|
|
dark_souls_options: typing.Dict[str, Option] = {
|
|
"enable_weapon_locations": RandomizeWeaponLocations,
|
|
"enable_shield_locations": RandomizeShieldLocations,
|
|
"enable_armor_locations": RandomizeArmorLocations,
|
|
"enable_ring_locations": RandomizeRingLocations,
|
|
"enable_spell_locations": RandomizeSpellLocations,
|
|
"enable_key_locations": RandomizeKeyLocations,
|
|
"enable_boss_locations": RandomizeBossSoulLocations,
|
|
"enable_npc_locations": RandomizeNPCLocations,
|
|
"enable_misc_locations": RandomizeMiscLocations,
|
|
"enable_health_upgrade_locations": RandomizeHealthLocations,
|
|
"enable_progressive_locations": RandomizeProgressiveLocationsOption,
|
|
"pool_type": PoolTypeOption,
|
|
"guaranteed_items": GuaranteedItemsOption,
|
|
"auto_equip": AutoEquipOption,
|
|
"lock_equip": LockEquipOption,
|
|
"no_weapon_requirements": NoWeaponRequirementsOption,
|
|
"randomize_infusion": RandomizeInfusionOption,
|
|
"randomize_infusion_percentage": RandomizeInfusionPercentageOption,
|
|
"randomize_weapon_level": RandomizeWeaponLevelOption,
|
|
"randomize_weapon_level_percentage": RandomizeWeaponLevelPercentageOption,
|
|
"min_levels_in_5": MinLevelsIn5WeaponPoolOption,
|
|
"max_levels_in_5": MaxLevelsIn5WeaponPoolOption,
|
|
"min_levels_in_10": MinLevelsIn10WeaponPoolOption,
|
|
"max_levels_in_10": MaxLevelsIn10WeaponPoolOption,
|
|
"early_banner": EarlySmallLothricBanner,
|
|
"late_basin_of_vows": LateBasinOfVowsOption,
|
|
"late_dlc": LateDLCOption,
|
|
"no_spell_requirements": NoSpellRequirementsOption,
|
|
"no_equip_load": NoEquipLoadOption,
|
|
"death_link": DeathLink,
|
|
"enable_dlc": EnableDLCOption,
|
|
}
|