mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00

I think quadrupled prices will be plenty expensive, and this will stop people who pick "random" from getting 9999 priced items and potentially locking their multiworld behind absurd rupee grinds
335 lines
7.7 KiB
Python
335 lines
7.7 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
|
|
option_start_with = 6
|
|
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 ShopPriceModifier(Range):
|
|
"""Percentage modifier for shuffled item prices in shops"""
|
|
range_start = 0
|
|
default = 100
|
|
range_end = 400
|
|
|
|
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(Choice):
|
|
"""Vendors: King Zora and Bottle Merchant say what they're selling.
|
|
On/Full: Put item and entrance placement hints on telepathic tiles and some NPCs, Full removes joke hints."""
|
|
displayname = "Hints"
|
|
option_off = 0
|
|
option_vendors = 1
|
|
option_on = 2
|
|
option_full = 3
|
|
default = 2
|
|
alias_false = 0
|
|
alias_true = 2
|
|
|
|
|
|
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
|
|
|
|
|
|
class BeemizerRange(Range):
|
|
value: int
|
|
range_start = 0
|
|
range_end = 100
|
|
|
|
|
|
class BeemizerTotalChance(BeemizerRange):
|
|
"""Percentage chance for each junk-fill item (rupees, bombs, arrows) to be
|
|
replaced with either a bee swarm trap or a single bottle-filling bee."""
|
|
default = 0
|
|
displayname = "Beemizer Total Chance"
|
|
|
|
|
|
class BeemizerTrapChance(BeemizerRange):
|
|
"""Percentage chance for each replaced junk-fill item to be a bee swarm
|
|
trap; all other replaced items are single bottle-filling bees."""
|
|
default = 60
|
|
displayname = "Beemizer Trap Chance"
|
|
|
|
|
|
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,
|
|
"shop_price_modifier": ShopPriceModifier,
|
|
"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,
|
|
"beemizer_total_chance": BeemizerTotalChance,
|
|
"beemizer_trap_chance": BeemizerTrapChance,
|
|
"death_link": DeathLink
|
|
|
|
}
|