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,
 | |
| }
 | 
