130 lines
4.4 KiB
Python
130 lines
4.4 KiB
Python
from typing import Dict
|
|
from BaseClasses import MultiWorld
|
|
from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, Option
|
|
|
|
class StartWithJewelryBox(Toggle):
|
|
"Start with Jewelry Box unlocked"
|
|
display_name = "Start with Jewelry Box"
|
|
|
|
#class ProgressiveVerticalMovement(Toggle):
|
|
# "Always find vertical movement in the following order Succubus Hairpin -> Light Wall -> Celestial Sash"
|
|
# display_name = "Progressive vertical movement"
|
|
|
|
#class ProgressiveKeycards(Toggle):
|
|
# "Always find Security Keycard's in the following order D -> C -> B -> A"
|
|
# display_name = "Progressive keycards"
|
|
|
|
class DownloadableItems(DefaultOnToggle):
|
|
"With the tablet you will be able to download items at terminals"
|
|
display_name = "Downloadable items"
|
|
|
|
class FacebookMode(Toggle):
|
|
"Requires Oculus Rift(ng) to spot the weakspots in walls and floors"
|
|
display_name = "Facebook mode"
|
|
|
|
class StartWithMeyef(Toggle):
|
|
"Start with Meyef, ideal for when you want to play multiplayer."
|
|
display_name = "Start with Meyef"
|
|
|
|
class QuickSeed(Toggle):
|
|
"Start with Talaria Attachment, Nyoom!"
|
|
display_name = "Quick seed"
|
|
|
|
class SpecificKeycards(Toggle):
|
|
"Keycards can only open corresponding doors"
|
|
display_name = "Specific Keycards"
|
|
|
|
class Inverted(Toggle):
|
|
"Start in the past"
|
|
display_name = "Inverted"
|
|
|
|
#class StinkyMaw(Toggle):
|
|
# "Require gasmask for Maw"
|
|
# display_name = "Stinky Maw"
|
|
|
|
class GyreArchives(Toggle):
|
|
"Gyre locations are in logic. New warps are gated by Merchant Crow and Kobo"
|
|
display_name = "Gyre Archives"
|
|
|
|
class Cantoran(Toggle):
|
|
"Cantoran's fight and check are available upon revisiting his room"
|
|
display_name = "Cantoran"
|
|
|
|
class LoreChecks(Toggle):
|
|
"Memories and journal entries contain items."
|
|
display_name = "Lore Checks"
|
|
|
|
class DamageRando(Toggle):
|
|
"Each orb has a high chance of having lower base damage and a low chance of having much higher base damage."
|
|
display_name = "Damage Rando"
|
|
|
|
class ShopFill(Choice):
|
|
"""Sets the items for sale in Merchant Crow's shops.
|
|
Default: No sunglasses or trendy jacket, but sand vials for sale.
|
|
Randomized: Up to 4 random items in each shop.
|
|
Vanilla: Keep shops the same as the base game.
|
|
Empty: Sell no items at the shop."""
|
|
display_name = "Shop Inventory"
|
|
option_default = 0
|
|
option_randomized = 1
|
|
option_vanilla = 2
|
|
option_empty = 3
|
|
|
|
class ShopWarpShards(DefaultOnToggle):
|
|
"Shops always sell warp shards (when keys possessed), ignoring inventory setting."
|
|
display_name = "Always Sell Warp Shards"
|
|
|
|
class ShopMultiplier(Range):
|
|
"Multiplier for the cost of items in the shop. Set to 0 for free shops."
|
|
display_name = "Shop Price Multiplier"
|
|
range_start = 0
|
|
range_end = 10
|
|
default = 1
|
|
|
|
class LootPool(Choice):
|
|
"""Sets the items that drop from enemies (does not apply to boss reward checks)
|
|
Vanilla: Drops are the same as the base game
|
|
Randomized: Each slot of every enemy's drop table is given a random use item or piece of equipment.
|
|
Empty: Enemies drop nothing."""
|
|
display_name = "Shop Inventory"
|
|
option_vanilla = 0
|
|
option_randomized = 1
|
|
option_empty = 2
|
|
|
|
class ShowBestiary(Toggle):
|
|
"All entries in the bestiary are visible, without needing to kill one of a given enemy first"
|
|
display_name = "Show Bestiary Entries"
|
|
|
|
# Some options that are available in the timespinner randomizer arent currently implemented
|
|
timespinner_options: Dict[str, Option] = {
|
|
"StartWithJewelryBox": StartWithJewelryBox,
|
|
#"ProgressiveVerticalMovement": ProgressiveVerticalMovement,
|
|
#"ProgressiveKeycards": ProgressiveKeycards,
|
|
"DownloadableItems": DownloadableItems,
|
|
"FacebookMode": FacebookMode,
|
|
"StartWithMeyef": StartWithMeyef,
|
|
"QuickSeed": QuickSeed,
|
|
"SpecificKeycards": SpecificKeycards,
|
|
"Inverted": Inverted,
|
|
#"StinkyMaw": StinkyMaw,
|
|
"GyreArchives": GyreArchives,
|
|
"Cantoran": Cantoran,
|
|
"LoreChecks": LoreChecks,
|
|
"DamageRando": DamageRando,
|
|
"ShopFill": ShopFill,
|
|
"ShopWarpShards": ShopWarpShards,
|
|
"ShopMultiplier": ShopMultiplier,
|
|
"DeathLink": DeathLink,
|
|
}
|
|
|
|
def is_option_enabled(world: MultiWorld, player: int, name: str) -> bool:
|
|
return get_option_value(world, player, name) > 0
|
|
|
|
def get_option_value(world: MultiWorld, player: int, name: str) -> int:
|
|
option = getattr(world, name, None)
|
|
|
|
if option == None:
|
|
return 0
|
|
|
|
return int(option[player].value)
|