Archipelago/worlds/osrs/Options.py

510 lines
15 KiB
Python

from dataclasses import dataclass
from Options import Choice, Toggle, Range, PerGameCommonOptions
MAX_COMBAT_TASKS = 16
MAX_PRAYER_TASKS = 3
MAX_MAGIC_TASKS = 4
MAX_RUNECRAFT_TASKS = 3
MAX_CRAFTING_TASKS = 5
MAX_MINING_TASKS = 5
MAX_SMITHING_TASKS = 4
MAX_FISHING_TASKS = 5
MAX_COOKING_TASKS = 5
MAX_FIREMAKING_TASKS = 2
MAX_WOODCUTTING_TASKS = 3
NON_QUEST_LOCATION_COUNT = 22
class StartingArea(Choice):
"""
Which chunks are available at the start. The player may need to move through locked chunks to reach the starting
area, but any areas that require quests, skills, or coins are not available as a starting location.
"Any Bank" rolls a random region that contains a bank.
Chunksanity can start you in any chunk. Hope you like woodcutting!
"""
display_name = "Starting Region"
option_lumbridge = 0
option_al_kharid = 1
option_varrock_east = 2
option_varrock_west = 3
option_edgeville = 4
option_falador = 5
option_draynor = 6
option_wilderness = 7
option_any_bank = 8
option_chunksanity = 9
default = 0
class BrutalGrinds(Toggle):
"""
Whether to allow skill tasks without having reasonable access to the usual skill training path.
For example, if enabled, you could be forced to train smithing without an anvil purely by smelting bars,
or training fishing to high levels entirely on shrimp.
"""
display_name = "Allow Brutal Grinds"
class ProgressiveTasks(Toggle):
"""
Whether skill tasks should always be generated in order of easiest to hardest.
If enabled, you would not be assigned "Mine Gold" without also being assigned
"Mine Silver", "Mine Coal", and "Mine Iron". Enabling this will result in a generally shorter seed, but with
a lower variety of tasks.
"""
display_name = "Progressive Tasks"
class MaxCombatLevel(Range):
"""
The highest combat level of monster to possibly be assigned as a task.
If set to 0, no combat tasks will be generated.
"""
display_name = "Max Required Enemy Combat Level"
range_start = 0
range_end = 1520
default = 50
class MaxCombatTasks(Range):
"""
The maximum number of Combat Tasks to possibly be assigned.
If set to 0, no combat tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Combat Task Count"
range_start = 0
range_end = MAX_COMBAT_TASKS
default = MAX_COMBAT_TASKS
class CombatTaskWeight(Range):
"""
How much to favor generating combat tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Combat Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxPrayerLevel(Range):
"""
The highest Prayer requirement of any task generated.
If set to 0, no Prayer tasks will be generated.
"""
display_name = "Max Required Prayer Level"
range_start = 0
range_end = 99
default = 50
class MaxPrayerTasks(Range):
"""
The maximum number of Prayer Tasks to possibly be assigned.
If set to 0, no Prayer tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Prayer Task Count"
range_start = 0
range_end = MAX_PRAYER_TASKS
default = MAX_PRAYER_TASKS
class PrayerTaskWeight(Range):
"""
How much to favor generating Prayer tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Prayer Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxMagicLevel(Range):
"""
The highest Magic requirement of any task generated.
If set to 0, no Magic tasks will be generated.
"""
display_name = "Max Required Magic Level"
range_start = 0
range_end = 99
default = 50
class MaxMagicTasks(Range):
"""
The maximum number of Magic Tasks to possibly be assigned.
If set to 0, no Magic tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Magic Task Count"
range_start = 0
range_end = MAX_MAGIC_TASKS
default = MAX_MAGIC_TASKS
class MagicTaskWeight(Range):
"""
How much to favor generating Magic tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Magic Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxRunecraftLevel(Range):
"""
The highest Runecraft requirement of any task generated.
If set to 0, no Runecraft tasks will be generated.
"""
display_name = "Max Required Runecraft Level"
range_start = 0
range_end = 99
default = 50
class MaxRunecraftTasks(Range):
"""
The maximum number of Runecraft Tasks to possibly be assigned.
If set to 0, no Runecraft tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Runecraft Task Count"
range_start = 0
range_end = MAX_RUNECRAFT_TASKS
default = MAX_RUNECRAFT_TASKS
class RunecraftTaskWeight(Range):
"""
How much to favor generating Runecraft tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Runecraft Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxCraftingLevel(Range):
"""
The highest Crafting requirement of any task generated.
If set to 0, no Crafting tasks will be generated.
"""
display_name = "Max Required Crafting Level"
range_start = 0
range_end = 99
default = 50
class MaxCraftingTasks(Range):
"""
The maximum number of Crafting Tasks to possibly be assigned.
If set to 0, no Crafting tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Crafting Task Count"
range_start = 0
range_end = MAX_CRAFTING_TASKS
default = MAX_CRAFTING_TASKS
class CraftingTaskWeight(Range):
"""
How much to favor generating Crafting tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Crafting Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxMiningLevel(Range):
"""
The highest Mining requirement of any task generated.
If set to 0, no Mining tasks will be generated.
"""
display_name = "Max Required Mining Level"
range_start = 0
range_end = 99
default = 50
class MaxMiningTasks(Range):
"""
The maximum number of Mining Tasks to possibly be assigned.
If set to 0, no Mining tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Mining Task Count"
range_start = 0
range_end = MAX_MINING_TASKS
default = MAX_MINING_TASKS
class MiningTaskWeight(Range):
"""
How much to favor generating Mining tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Mining Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxSmithingLevel(Range):
"""
The highest Smithing requirement of any task generated.
If set to 0, no Smithing tasks will be generated.
"""
display_name = "Max Required Smithing Level"
range_start = 0
range_end = 99
default = 50
class MaxSmithingTasks(Range):
"""
The maximum number of Smithing Tasks to possibly be assigned.
If set to 0, no Smithing tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Smithing Task Count"
range_start = 0
range_end = MAX_SMITHING_TASKS
default = MAX_SMITHING_TASKS
class SmithingTaskWeight(Range):
"""
How much to favor generating Smithing tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Smithing Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxFishingLevel(Range):
"""
The highest Fishing requirement of any task generated.
If set to 0, no Fishing tasks will be generated.
"""
display_name = "Max Required Fishing Level"
range_start = 0
range_end = 99
default = 50
class MaxFishingTasks(Range):
"""
The maximum number of Fishing Tasks to possibly be assigned.
If set to 0, no Fishing tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Fishing Task Count"
range_start = 0
range_end = MAX_FISHING_TASKS
default = MAX_FISHING_TASKS
class FishingTaskWeight(Range):
"""
How much to favor generating Fishing tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Fishing Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxCookingLevel(Range):
"""
The highest Cooking requirement of any task generated.
If set to 0, no Cooking tasks will be generated.
"""
display_name = "Max Required Cooking Level"
range_start = 0
range_end = 99
default = 50
class MaxCookingTasks(Range):
"""
The maximum number of Cooking Tasks to possibly be assigned.
If set to 0, no Cooking tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Cooking Task Count"
range_start = 0
range_end = MAX_COOKING_TASKS
default = MAX_COOKING_TASKS
class CookingTaskWeight(Range):
"""
How much to favor generating Cooking tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Cooking Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxFiremakingLevel(Range):
"""
The highest Firemaking requirement of any task generated.
If set to 0, no Firemaking tasks will be generated.
"""
display_name = "Max Required Firemaking Level"
range_start = 0
range_end = 99
default = 50
class MaxFiremakingTasks(Range):
"""
The maximum number of Firemaking Tasks to possibly be assigned.
If set to 0, no Firemaking tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Firemaking Task Count"
range_start = 0
range_end = MAX_FIREMAKING_TASKS
default = MAX_FIREMAKING_TASKS
class FiremakingTaskWeight(Range):
"""
How much to favor generating Firemaking tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Firemaking Task Weight"
range_start = 0
range_end = 99
default = 50
class MaxWoodcuttingLevel(Range):
"""
The highest Woodcutting requirement of any task generated.
If set to 0, no Woodcutting tasks will be generated.
"""
display_name = "Max Required Woodcutting Level"
range_start = 0
range_end = 99
default = 50
class MaxWoodcuttingTasks(Range):
"""
The maximum number of Woodcutting Tasks to possibly be assigned.
If set to 0, no Woodcutting tasks will be generated.
This only determines the maximum possible, fewer than the maximum could be assigned.
"""
display_name = "Max Woodcutting Task Count"
range_start = 0
range_end = MAX_WOODCUTTING_TASKS
default = MAX_WOODCUTTING_TASKS
class WoodcuttingTaskWeight(Range):
"""
How much to favor generating Woodcutting tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "Woodcutting Task Weight"
range_start = 0
range_end = 99
default = 50
class MinimumGeneralTasks(Range):
"""
How many guaranteed general progression tasks to be assigned (total level, total XP, etc.).
General progression tasks will be used to fill out any holes caused by having fewer possible tasks than needed, so
there is no maximum.
"""
display_name = "Minimum General Task Count"
range_start = 0
range_end = NON_QUEST_LOCATION_COUNT
default = 10
class GeneralTaskWeight(Range):
"""
How much to favor generating General tasks over other types of task.
Weights of all Task Types will be compared against each other, a task with 50 weight
is twice as likely to appear as one with 25.
"""
display_name = "General Task Weight"
range_start = 0
range_end = 99
default = 50
@dataclass
class OSRSOptions(PerGameCommonOptions):
starting_area: StartingArea
brutal_grinds: BrutalGrinds
progressive_tasks: ProgressiveTasks
max_combat_level: MaxCombatLevel
max_combat_tasks: MaxCombatTasks
combat_task_weight: CombatTaskWeight
max_prayer_level: MaxPrayerLevel
max_prayer_tasks: MaxPrayerTasks
prayer_task_weight: PrayerTaskWeight
max_magic_level: MaxMagicLevel
max_magic_tasks: MaxMagicTasks
magic_task_weight: MagicTaskWeight
max_runecraft_level: MaxRunecraftLevel
max_runecraft_tasks: MaxRunecraftTasks
runecraft_task_weight: RunecraftTaskWeight
max_crafting_level: MaxCraftingLevel
max_crafting_tasks: MaxCraftingTasks
crafting_task_weight: CraftingTaskWeight
max_mining_level: MaxMiningLevel
max_mining_tasks: MaxMiningTasks
mining_task_weight: MiningTaskWeight
max_smithing_level: MaxSmithingLevel
max_smithing_tasks: MaxSmithingTasks
smithing_task_weight: SmithingTaskWeight
max_fishing_level: MaxFishingLevel
max_fishing_tasks: MaxFishingTasks
fishing_task_weight: FishingTaskWeight
max_cooking_level: MaxCookingLevel
max_cooking_tasks: MaxCookingTasks
cooking_task_weight: CookingTaskWeight
max_firemaking_level: MaxFiremakingLevel
max_firemaking_tasks: MaxFiremakingTasks
firemaking_task_weight: FiremakingTaskWeight
max_woodcutting_level: MaxWoodcuttingLevel
max_woodcutting_tasks: MaxWoodcuttingTasks
woodcutting_task_weight: WoodcuttingTaskWeight
minimum_general_tasks: MinimumGeneralTasks
general_task_weight: GeneralTaskWeight