299 lines
6.6 KiB
Python
299 lines
6.6 KiB
Python
import typing
|
|
|
|
from Options import Choice, Range, Option, Toggle, DefaultOnToggle, DeathLink
|
|
|
|
|
|
class Logic(Choice):
|
|
option_no_glitches = 0
|
|
option_minor_glitches = 1
|
|
option_overworld_glitches = 2
|
|
option_hybrid_major_glitches = 3
|
|
option_no_logic = 4
|
|
alias_owg = 2
|
|
alias_hmg = 3
|
|
|
|
|
|
class Objective(Choice):
|
|
option_crystals = 0
|
|
# option_pendants = 1
|
|
option_triforce_pieces = 2
|
|
option_pedestal = 3
|
|
option_bingo = 4
|
|
|
|
|
|
class Goal(Choice):
|
|
option_kill_ganon = 0
|
|
option_kill_ganon_and_gt_agahnim = 1
|
|
option_hand_in = 2
|
|
|
|
|
|
class DungeonItem(Choice):
|
|
value: int
|
|
option_original_dungeon = 0
|
|
option_own_dungeons = 1
|
|
option_own_world = 2
|
|
option_any_world = 3
|
|
option_different_world = 4
|
|
alias_true = 3
|
|
alias_false = 0
|
|
|
|
@property
|
|
def in_dungeon(self):
|
|
return self.value in {0, 1}
|
|
|
|
|
|
class bigkey_shuffle(DungeonItem):
|
|
"""Big Key Placement"""
|
|
item_name_group = "Big Keys"
|
|
displayname = "Big Key Shuffle"
|
|
|
|
|
|
class smallkey_shuffle(DungeonItem):
|
|
"""Small Key Placement"""
|
|
option_universal = 5
|
|
item_name_group = "Small Keys"
|
|
displayname = "Small Key Shuffle"
|
|
|
|
|
|
class compass_shuffle(DungeonItem):
|
|
"""Compass Placement"""
|
|
item_name_group = "Compasses"
|
|
displayname = "Compass Shuffle"
|
|
|
|
|
|
class map_shuffle(DungeonItem):
|
|
"""Map Placement"""
|
|
item_name_group = "Maps"
|
|
displayname = "Map Shuffle"
|
|
|
|
|
|
class Crystals(Range):
|
|
range_start = 0
|
|
range_end = 7
|
|
|
|
|
|
class CrystalsTower(Crystals):
|
|
default = 7
|
|
|
|
|
|
class CrystalsGanon(Crystals):
|
|
default = 7
|
|
|
|
|
|
class TriforcePieces(Range):
|
|
default = 30
|
|
range_start = 1
|
|
range_end = 90
|
|
|
|
|
|
class ShopItemSlots(Range):
|
|
range_start = 0
|
|
range_end = 30
|
|
|
|
|
|
class WorldState(Choice):
|
|
option_standard = 1
|
|
option_open = 0
|
|
option_inverted = 2
|
|
|
|
|
|
class Bosses(Choice):
|
|
option_vanilla = 0
|
|
option_simple = 1
|
|
option_full = 2
|
|
option_chaos = 3
|
|
option_singularity = 4
|
|
|
|
|
|
class Enemies(Choice):
|
|
option_vanilla = 0
|
|
option_shuffled = 1
|
|
option_chaos = 2
|
|
|
|
|
|
class Progressive(Choice):
|
|
displayname = "Progressive Items"
|
|
option_off = 0
|
|
option_grouped_random = 1
|
|
option_on = 2
|
|
alias_false = 0
|
|
alias_true = 2
|
|
default = 2
|
|
|
|
def want_progressives(self, random):
|
|
return random.choice([True, False]) if self.value == self.option_grouped_random else bool(self.value)
|
|
|
|
|
|
class Swordless(Toggle):
|
|
"""No swords. Curtains in Skull Woods and Agahnim\'s
|
|
Tower are removed, Agahnim\'s Tower barrier can be
|
|
destroyed with hammer. Misery Mire and Turtle Rock
|
|
can be opened without a sword. Hammer damages Ganon.
|
|
Ether and Bombos Tablet can be activated with Hammer
|
|
(and Book)."""
|
|
displayname = "Swordless"
|
|
|
|
|
|
class Retro(Toggle):
|
|
"""Zelda-1 like mode. You have to purchase a quiver to shoot arrows using rupees
|
|
and there are randomly placed take-any caves that contain one Sword and choices of Heart Container/Blue Potion."""
|
|
displayname = "Retro"
|
|
|
|
|
|
class RestrictBossItem(Toggle):
|
|
"""Don't place dungeon-native items on the dungeon's boss."""
|
|
displayname = "Prevent Dungeon Item on Boss"
|
|
|
|
|
|
class Hints(DefaultOnToggle):
|
|
"""Put item and entrance placement hints on telepathic tiles and some NPCs.
|
|
Additionally King Zora and Bottle Merchant say what they're selling."""
|
|
displayname = "Hints"
|
|
|
|
|
|
class EnemyShuffle(Toggle):
|
|
"""Randomize every enemy spawn.
|
|
If mode is Standard, Hyrule Castle is left out (may result in visually wrong enemy sprites in that area.)"""
|
|
displayname = "Enemy Shuffle"
|
|
|
|
|
|
class KillableThieves(Toggle):
|
|
"""Makes Thieves killable."""
|
|
displayname = "Killable Thieves"
|
|
|
|
|
|
class BushShuffle(Toggle):
|
|
"""Randomize chance that a bush contains an enemy as well as which enemy may spawn."""
|
|
displayname = "Bush Shuffle"
|
|
|
|
|
|
class TileShuffle(Toggle):
|
|
"""Randomize flying tiles floor patterns."""
|
|
displayname = "Tile Shuffle"
|
|
|
|
|
|
class PotShuffle(Toggle):
|
|
"""Shuffle contents of pots within "supertiles" (item will still be nearby original placement)."""
|
|
displayname = "Pot Shuffle"
|
|
|
|
|
|
class Palette(Choice):
|
|
option_default = 0
|
|
option_good = 1
|
|
option_blackout = 2
|
|
option_puke = 3
|
|
option_classic = 4
|
|
option_grayscale = 5
|
|
option_negative = 6
|
|
option_dizzy = 7
|
|
option_sick = 8
|
|
|
|
|
|
class OWPalette(Palette):
|
|
displayname = "Overworld Palette"
|
|
|
|
|
|
class UWPalette(Palette):
|
|
displayname = "Underworld Palette"
|
|
|
|
|
|
class HUDPalette(Palette):
|
|
displayname = "Menu Palette"
|
|
|
|
|
|
class SwordPalette(Palette):
|
|
displayname = "Sword Palette"
|
|
|
|
|
|
class ShieldPalette(Palette):
|
|
displayname = "Shield Palette"
|
|
|
|
|
|
class LinkPalette(Palette):
|
|
displayname = "Link Palette"
|
|
|
|
|
|
class HeartBeep(Choice):
|
|
displayname = "Heart Beep Rate"
|
|
option_normal = 0
|
|
option_double = 1
|
|
option_half = 2
|
|
option_quarter = 3
|
|
option_off = 4
|
|
alias_false = 4
|
|
|
|
|
|
class HeartColor(Choice):
|
|
displayname = "Heart Color"
|
|
option_red = 0
|
|
option_blue = 1
|
|
option_green = 2
|
|
option_yellow = 3
|
|
|
|
|
|
class QuickSwap(DefaultOnToggle):
|
|
displayname = "L/R Quickswapping"
|
|
|
|
|
|
class MenuSpeed(Choice):
|
|
displayname = "Menu Speed"
|
|
option_normal = 0
|
|
option_instant = 1,
|
|
option_double = 2
|
|
option_triple = 3
|
|
option_quadruple = 4
|
|
option_half = 5
|
|
|
|
|
|
class Music(DefaultOnToggle):
|
|
displayname = "Play music"
|
|
|
|
|
|
class ReduceFlashing(DefaultOnToggle):
|
|
displayname = "Reduce Screen Flashes"
|
|
|
|
|
|
class TriforceHud(Choice):
|
|
displayname = "Display Method for Triforce Hunt"
|
|
option_normal = 0
|
|
option_hide_goal = 1
|
|
option_hide_required = 2
|
|
option_hide_both = 3
|
|
|
|
|
|
alttp_options: typing.Dict[str, type(Option)] = {
|
|
"crystals_needed_for_gt": CrystalsTower,
|
|
"crystals_needed_for_ganon": CrystalsGanon,
|
|
"bigkey_shuffle": bigkey_shuffle,
|
|
"smallkey_shuffle": smallkey_shuffle,
|
|
"compass_shuffle": compass_shuffle,
|
|
"map_shuffle": map_shuffle,
|
|
"progressive": Progressive,
|
|
"swordless": Swordless,
|
|
"retro": Retro,
|
|
"hints": Hints,
|
|
"restrict_dungeon_item_on_boss": RestrictBossItem,
|
|
"pot_shuffle": PotShuffle,
|
|
"enemy_shuffle": EnemyShuffle,
|
|
"killable_thieves": KillableThieves,
|
|
"bush_shuffle": BushShuffle,
|
|
"shop_item_slots": ShopItemSlots,
|
|
"tile_shuffle": TileShuffle,
|
|
"ow_palettes": OWPalette,
|
|
"uw_palettes": UWPalette,
|
|
"hud_palettes": HUDPalette,
|
|
"sword_palettes": SwordPalette,
|
|
"shield_palettes": ShieldPalette,
|
|
"link_palettes": LinkPalette,
|
|
"heartbeep": HeartBeep,
|
|
"heartcolor": HeartColor,
|
|
"quickswap": QuickSwap,
|
|
"menuspeed": MenuSpeed,
|
|
"music": Music,
|
|
"reduceflashing": ReduceFlashing,
|
|
"triforcehud": TriforceHud,
|
|
"glitch_boots": DefaultOnToggle,
|
|
"death_link": DeathLink
|
|
|
|
}
|