Archipelago/worlds/ror2/Options.py

313 lines
8.8 KiB
Python
Raw Normal View History

from typing import Dict
from Options import Option, Toggle, DefaultOnToggle, DeathLink, Range, Choice
# NOTE be aware that since the range of item ids that RoR2 uses is based off of the maximums of checks
# Be careful when changing the range_end values not to go into another game's IDs
# NOTE that these changes to range_end must also be reflected in the RoR2 client so it understands the same ids.
class Goal(Choice):
"""
Classic Mode: Every Item pickup increases fills a progress bar which gives location checks.
Explore Mode: Each environment will have location checks within each environment.
environments will be locked in the item pool until received.
"""
display_name = "Game Mode"
option_classic = 0
option_explore = 1
default = 0
2021-08-29 18:02:02 +00:00
class TotalLocations(Range):
"""Classic Mode: Number of location checks which are added to the Risk of Rain playthrough."""
display_name = "Total Locations"
range_start = 40
range_end = 250
default = 40
class ChestsPerEnvironment(Range):
"""Explore Mode: The number of chest locations per environment."""
display_name = "Chests per Environment"
range_start = 2
range_end = 20
default = 10
class ShrinesPerEnvironment(Range):
"""Explore Mode: The number of shrine locations per environment."""
display_name = "Shrines per Environment"
range_start = 2
range_end = 20
default = 5
class ScavengersPerEnvironment(Range):
"""Explore Mode: The number of scavenger locations per environment."""
display_name = "Scavenger per Environment"
range_start = 0
range_end = 1
default = 1
class ScannersPerEnvironment(Range):
"""Explore Mode: The number of scanners locations per environment."""
display_name = "Radio Scanners per Environment"
range_start = 0
range_end = 1
default = 1
2021-08-29 18:02:02 +00:00
class AltarsPerEnvironment(Range):
"""Explore Mode: The number of altars locations per environment."""
display_name = "Newts Per Environment"
range_start = 0
range_end = 2
default = 1
2021-08-29 18:02:02 +00:00
class TotalRevivals(Range):
"""Total Percentage of `Dio's Best Friend` item put in the item pool."""
display_name = "Total Revives as percentage"
2021-08-29 18:02:02 +00:00
range_start = 0
range_end = 10
2021-08-29 18:02:02 +00:00
default = 4
class ItemPickupStep(Range):
"""
Number of items to pick up before an AP Check is completed.
2021-08-29 18:02:02 +00:00
Setting to 1 means every other pickup.
Setting to 2 means every third pickup. So on...
"""
display_name = "Item Pickup Step"
2021-08-29 18:02:02 +00:00
range_start = 0
range_end = 5
default = 1
class ShrineUseStep(Range):
"""
Explore Mode:
Number of shrines to use up before an AP Check is completed.
Setting to 1 means every other pickup.
Setting to 2 means every third pickup. So on...
"""
display_name = "Shrine use Step"
range_start = 0
range_end = 3
default = 0
2021-08-29 18:02:02 +00:00
class AllowLunarItems(DefaultOnToggle):
"""Allows Lunar items in the item pool."""
display_name = "Enable Lunar Item Shuffling"
2021-08-29 18:02:02 +00:00
class StartWithRevive(DefaultOnToggle):
2021-08-29 18:02:02 +00:00
"""Start the game with a `Dio's Best Friend` item."""
display_name = "Start with a Revive"
class FinalStageDeath(Toggle):
"""The following will count as a win if set to true:
Dying in Commencement.
Dying in The Planetarium.
Obliterating yourself"""
display_name = "Final Stage Death is Win"
2021-08-29 18:02:02 +00:00
class BeginWithLoop(Toggle):
"""
Enable to precollect a full loop of environments.
Only has an effect with Explore Mode.
"""
display_name = "Begin With Loop"
class DLC_SOTV(Toggle):
"""
Enable if you are using SOTV DLC.
Affects environment availability for Explore Mode.
Adds Void Items into the item pool
"""
display_name = "Enable DLC - SOTV"
class GreenScrap(Range):
"""Weight of Green Scraps in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Green Scraps"
range_start = 0
range_end = 100
default = 16
class RedScrap(Range):
"""Weight of Red Scraps in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Red Scraps"
range_start = 0
range_end = 100
default = 4
class YellowScrap(Range):
"""Weight of yellow scraps in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Yellow Scraps"
range_start = 0
range_end = 100
default = 1
class WhiteScrap(Range):
"""Weight of white scraps in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "White Scraps"
range_start = 0
range_end = 100
default = 32
class CommonItem(Range):
"""Weight of common items in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Common Items"
range_start = 0
range_end = 100
default = 64
class UncommonItem(Range):
"""Weight of uncommon items in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Uncommon Items"
range_start = 0
range_end = 100
default = 32
class LegendaryItem(Range):
"""Weight of legendary items in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Legendary Items"
range_start = 0
range_end = 100
default = 8
class BossItem(Range):
"""Weight of boss items in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Boss Items"
range_start = 0
range_end = 100
default = 4
class LunarItem(Range):
"""Weight of lunar items in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Lunar Items"
range_start = 0
range_end = 100
default = 16
class VoidItem(Range):
"""Weight of void items in the item pool.
(Ignored unless Item Weight Presets is 'No')
(Ignored if Enable DLC - SOTV is 'No') """
display_name = "Void Items"
range_start = 0
range_end = 100
default = 16
class Equipment(Range):
"""Weight of equipment items in the item pool.
(Ignored unless Item Weight Presets is 'No')"""
display_name = "Equipment"
range_start = 0
range_end = 100
default = 32
class ItemPoolPresetToggle(Toggle):
"""Will use the item weight presets when set to true, otherwise will use the custom set item pool weights."""
display_name = "Use Item Weight Presets"
class ItemWeights(Choice):
"""Set item_pool_presets to true if you want to use one of these presets.
Preset choices for determining the weights of the item pool.
- New is a test for a potential adjustment to the default weights.
- Uncommon puts a large number of uncommon items in the pool.
- Legendary puts a large number of legendary items in the pool.
- Lunartic makes everything a lunar item.
- Chaos generates the pool completely at random with rarer items having a slight cap to prevent this option being too easy.
- No Scraps removes all scrap items from the item pool.
- Even generates the item pool with every item having an even weight.
- Scraps Only will be only scrap items in the item pool.
- Void makes everything a void item."""
display_name = "Item Weights"
option_default = 0
option_new = 1
option_uncommon = 2
option_legendary = 3
option_lunartic = 4
option_chaos = 5
option_no_scraps = 6
option_even = 7
2021-10-05 03:28:40 +00:00
option_scraps_only = 8
option_void = 9
# define a dictionary for the weights of the generated item pool.
ror2_weights: Dict[str, type(Option)] = {
"green_scrap": GreenScrap,
"red_scrap": RedScrap,
"yellow_scrap": YellowScrap,
"white_scrap": WhiteScrap,
"common_item": CommonItem,
"uncommon_item": UncommonItem,
"legendary_item": LegendaryItem,
"boss_item": BossItem,
"lunar_item": LunarItem,
"void_item": VoidItem,
"equipment": Equipment
}
ror2_options: Dict[str, type(Option)] = {
"goal": Goal,
"total_locations": TotalLocations,
"chests_per_stage": ChestsPerEnvironment,
"shrines_per_stage": ShrinesPerEnvironment,
"scavengers_per_stage": ScavengersPerEnvironment,
"scanner_per_stage": ScannersPerEnvironment,
"altars_per_stage": AltarsPerEnvironment,
"total_revivals": TotalRevivals,
"start_with_revive": StartWithRevive,
"final_stage_death": FinalStageDeath,
"begin_with_loop": BeginWithLoop,
"dlc_sotv": DLC_SOTV,
"death_link": DeathLink,
"item_pickup_step": ItemPickupStep,
"shrine_use_step": ShrineUseStep,
"enable_lunar": AllowLunarItems,
"item_weights": ItemWeights,
"item_pool_presets": ItemPoolPresetToggle,
**ror2_weights
}