108 lines
3.4 KiB
Python
108 lines
3.4 KiB
Python
from Options import PerGameCommonOptions, Toggle, DefaultOnToggle, StartInventoryPool, Choice
|
|
from dataclasses import dataclass
|
|
|
|
|
|
class KeepShopRedPotions(Toggle):
|
|
"""
|
|
Prevents the Shop's Red Potions from being shuffled. Those locations
|
|
will have purchasable Red Potion as usual for their usual price.
|
|
"""
|
|
display_name = "Keep Shop Red Potions"
|
|
|
|
|
|
class IncludePendant(Toggle):
|
|
"""
|
|
Pendant is an item that boosts your attack power permanently when picked up.
|
|
However, due to a programming error in the original game, it has the reverse
|
|
effect. You start with the Pendant power, and lose it when picking
|
|
it up. So this item is essentially a trap.
|
|
There is a setting in the client to reverse the effect back to its original intend.
|
|
This could be used in conjunction with this option to increase or lower difficulty.
|
|
"""
|
|
display_name = "Include Pendant"
|
|
|
|
|
|
class IncludePoisons(DefaultOnToggle):
|
|
"""
|
|
Whether or not to include Poison Potions in the pool of items. Including them
|
|
effectively turn them into traps in multiplayer.
|
|
"""
|
|
display_name = "Include Poisons"
|
|
|
|
|
|
class RequireDragonSlayer(Toggle):
|
|
"""
|
|
Requires the Dragon Slayer to be available before fighting the final boss is required.
|
|
Turning this on will turn Progressive Shields into progression items.
|
|
|
|
This setting does not force you to use Dragon Slayer to kill the final boss.
|
|
Instead, it ensures that you will have the Dragon Slayer and be able to equip
|
|
it before you are expected to beat the final boss.
|
|
"""
|
|
display_name = "Require Dragon Slayer"
|
|
|
|
|
|
class RandomMusic(Toggle):
|
|
"""
|
|
All levels' music is shuffled. Except the title screen because it's finite.
|
|
This is an aesthetic option and doesn't affect gameplay.
|
|
"""
|
|
display_name = "Random Musics"
|
|
|
|
|
|
class RandomSound(Toggle):
|
|
"""
|
|
All sounds are shuffled.
|
|
This is an aesthetic option and doesn't affect gameplay.
|
|
"""
|
|
display_name = "Random Sounds"
|
|
|
|
|
|
class RandomNPC(Toggle):
|
|
"""
|
|
NPCs and their portraits are shuffled.
|
|
This is an aesthetic option and doesn't affect gameplay.
|
|
"""
|
|
display_name = "Random NPCs"
|
|
|
|
|
|
class RandomMonsters(Choice):
|
|
"""
|
|
Choose how monsters are randomized.
|
|
"Vanilla": No randomization
|
|
"Level Shuffle": Monsters are shuffled within a level
|
|
"Level Random": Monsters are picked randomly, balanced based on the ratio of the current level
|
|
"World Shuffle": Monsters are shuffled across the entire world
|
|
"World Random": Monsters are picked randomly, balanced based on the ratio of the entire world
|
|
"Chaotic": Completely random, except big vs small ratio is kept. Big are mini-bosses.
|
|
"""
|
|
display_name = "Random Monsters"
|
|
option_vanilla = 0
|
|
option_level_shuffle = 1
|
|
option_level_random = 2
|
|
option_world_shuffle = 3
|
|
option_world_random = 4
|
|
option_chaotic = 5
|
|
default = 0
|
|
|
|
|
|
class RandomRewards(Toggle):
|
|
"""
|
|
Monsters drops are shuffled.
|
|
"""
|
|
display_name = "Random Rewards"
|
|
|
|
|
|
@dataclass
|
|
class FaxanaduOptions(PerGameCommonOptions):
|
|
start_inventory_from_pool: StartInventoryPool
|
|
keep_shop_red_potions: KeepShopRedPotions
|
|
include_pendant: IncludePendant
|
|
include_poisons: IncludePoisons
|
|
require_dragon_slayer: RequireDragonSlayer
|
|
random_musics: RandomMusic
|
|
random_sounds: RandomSound
|
|
random_npcs: RandomNPC
|
|
random_monsters: RandomMonsters
|
|
random_rewards: RandomRewards
|