Options: change displayname to display_name

This commit is contained in:
Fabian Dill 2022-02-02 16:29:29 +01:00
parent 0f20888563
commit dc4b064c73
21 changed files with 227 additions and 228 deletions

View File

@ -1206,9 +1206,9 @@ class Spoiler():
def write_option(option_key: str, option_obj: type(Options.Option)): def write_option(option_key: str, option_obj: type(Options.Option)):
res = getattr(self.world, option_key)[player] res = getattr(self.world, option_key)[player]
displayname = getattr(option_obj, "displayname", option_key) display_name = getattr(option_obj, "display_name", option_key)
try: try:
outfile.write(f'{displayname + ":":33}{res.get_current_option_name()}\n') outfile.write(f'{display_name + ":":33}{res.get_current_option_name()}\n')
except: except:
raise Exception raise Exception

View File

@ -157,7 +157,7 @@ def distribute_items_restrictive(world: MultiWorld):
localrestitempool, nonlocalrestitempool, restitempool, fill_locations) localrestitempool, nonlocalrestitempool, restitempool, fill_locations)
locations: typing.Dict[LocationProgressType, typing.List[Location]] = { locations: typing.Dict[LocationProgressType, typing.List[Location]] = {
type: [] for type in LocationProgressType} loc_type: [] for loc_type in LocationProgressType}
for loc in fill_locations: for loc in fill_locations:
locations[loc.progress_type].append(loc) locations[loc.progress_type].append(loc)

View File

@ -47,13 +47,6 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No
world.item_functionality = args.item_functionality.copy() world.item_functionality = args.item_functionality.copy()
world.timer = args.timer.copy() world.timer = args.timer.copy()
world.goal = args.goal.copy() world.goal = args.goal.copy()
if hasattr(args, "algorithm"): # current GUI options
world.algorithm = args.algorithm
world.shuffleganon = args.shuffleganon
world.custom = args.custom
world.customitemarray = args.customitemarray
world.open_pyramid = args.open_pyramid.copy() world.open_pyramid = args.open_pyramid.copy()
world.boss_shuffle = args.shufflebosses.copy() world.boss_shuffle = args.shufflebosses.copy()
world.enemy_health = args.enemy_health.copy() world.enemy_health = args.enemy_health.copy()
@ -318,7 +311,7 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No
multidata = zlib.compress(pickle.dumps(multidata), 9) multidata = zlib.compress(pickle.dumps(multidata), 9)
with open(os.path.join(temp_dir, f'{outfilebase}.archipelago'), 'wb') as f: with open(os.path.join(temp_dir, f'{outfilebase}.archipelago'), 'wb') as f:
f.write(bytes([2])) # version of format f.write(bytes([3])) # version of format
f.write(multidata) f.write(multidata)
multidata_task = pool.submit(write_multidata) multidata_task = pool.submit(write_multidata)

View File

@ -263,7 +263,7 @@ class Context:
@staticmethod @staticmethod
def decompress(data: bytes) -> dict: def decompress(data: bytes) -> dict:
format_version = data[0] format_version = data[0]
if format_version > 2: if format_version > 3:
raise Utils.VersionException("Incompatible multidata.") raise Utils.VersionException("Incompatible multidata.")
return restricted_loads(zlib.decompress(data[1:])) return restricted_loads(zlib.decompress(data[1:]))

View File

@ -87,7 +87,7 @@ def adjustGUI():
option = sfx_options[option_name] option = sfx_options[option_name]
optionFrame = Frame(romSettingsFrame) optionFrame = Frame(romSettingsFrame)
optionFrame.grid(row=row, column=column, sticky=E) optionFrame.grid(row=row, column=column, sticky=E)
optionLabel = Label(optionFrame, text=option.displayname) optionLabel = Label(optionFrame, text=option.display_name)
optionLabel.pack(side=LEFT) optionLabel.pack(side=LEFT)
setattr(opts, option_name, StringVar()) setattr(opts, option_name, StringVar())
getattr(opts, option_name).set(option.name_lookup[option.default]) getattr(opts, option_name).set(option.name_lookup[option.default])
@ -143,7 +143,7 @@ def adjustGUI():
option = cosmetic_options['sword_trail_duration'] option = cosmetic_options['sword_trail_duration']
optionFrame = Frame(romSettingsFrame) optionFrame = Frame(romSettingsFrame)
optionFrame.grid(row=8, column=2, sticky=E) optionFrame.grid(row=8, column=2, sticky=E)
optionLabel = Label(optionFrame, text=option.displayname) optionLabel = Label(optionFrame, text=option.display_name)
optionLabel.pack(side=LEFT) optionLabel.pack(side=LEFT)
setattr(opts, 'sword_trail_duration', StringVar()) setattr(opts, 'sword_trail_duration', StringVar())
getattr(opts, 'sword_trail_duration').set(option.default) getattr(opts, 'sword_trail_duration').set(option.default)

View File

@ -41,9 +41,9 @@ class Option(metaclass=AssembleOptions):
name_lookup: typing.Dict[int, str] name_lookup: typing.Dict[int, str]
default = 0 default = 0
# convert option_name_long into Name Long as displayname, otherwise name_long is the result. # convert option_name_long into Name Long as display_name, otherwise name_long is the result.
# Handled in get_option_name() # Handled in get_option_name()
autodisplayname = False auto_display_name = False
# can be weighted between selections # can be weighted between selections
supports_weighting = True supports_weighting = True
@ -64,7 +64,7 @@ class Option(metaclass=AssembleOptions):
@classmethod @classmethod
def get_option_name(cls, value: typing.Any) -> str: def get_option_name(cls, value: typing.Any) -> str:
if cls.autodisplayname: if cls.auto_display_name:
return cls.name_lookup[value].replace("_", " ").title() return cls.name_lookup[value].replace("_", " ").title()
else: else:
return cls.name_lookup[value] return cls.name_lookup[value]
@ -133,7 +133,7 @@ class DefaultOnToggle(Toggle):
class Choice(Option): class Choice(Option):
autodisplayname = True auto_display_name = True
def __init__(self, value: int): def __init__(self, value: int):
self.value: int = value self.value: int = value
@ -372,7 +372,7 @@ class Accessibility(Choice):
Locations: ensure everything can be reached and acquired. Locations: ensure everything can be reached and acquired.
Items: ensure all logically relevant items can be acquired. Items: ensure all logically relevant items can be acquired.
Minimal: ensure what is needed to reach your goal can be acquired.""" Minimal: ensure what is needed to reach your goal can be acquired."""
displayname = "Accessibility" display_name = "Accessibility"
option_locations = 0 option_locations = 0
option_items = 1 option_items = 1
option_minimal = 2 option_minimal = 2
@ -382,7 +382,7 @@ class Accessibility(Choice):
class ProgressionBalancing(DefaultOnToggle): class ProgressionBalancing(DefaultOnToggle):
"""A system that moves progression earlier, to try and prevent the player from getting stuck and bored early.""" """A system that moves progression earlier, to try and prevent the player from getting stuck and bored early."""
displayname = "Progression Balancing" display_name = "Progression Balancing"
common_options = { common_options = {
@ -398,45 +398,50 @@ class ItemSet(OptionSet):
class LocalItems(ItemSet): class LocalItems(ItemSet):
"""Forces these items to be in their native world.""" """Forces these items to be in their native world."""
displayname = "Local Items" display_name = "Local Items"
class NonLocalItems(ItemSet): class NonLocalItems(ItemSet):
"""Forces these items to be outside their native world.""" """Forces these items to be outside their native world."""
displayname = "Not Local Items" display_name = "Not Local Items"
class StartInventory(ItemDict): class StartInventory(ItemDict):
"""Start with these items.""" """Start with these items."""
verify_item_name = True verify_item_name = True
displayname = "Start Inventory" display_name = "Start Inventory"
class ItemLinks(OptionList):
"""Share these items with players of the same game."""
display_name = "Shared Items"
class StartHints(ItemSet): class StartHints(ItemSet):
"""Start with these item's locations prefilled into the !hint command.""" """Start with these item's locations prefilled into the !hint command."""
displayname = "Start Hints" display_name = "Start Hints"
class StartLocationHints(OptionSet): class StartLocationHints(OptionSet):
"""Start with these locations and their item prefilled into the !hint command""" """Start with these locations and their item prefilled into the !hint command"""
displayname = "Start Location Hints" display_name = "Start Location Hints"
class ExcludeLocations(OptionSet): class ExcludeLocations(OptionSet):
"""Prevent these locations from having an important item""" """Prevent these locations from having an important item"""
displayname = "Excluded Locations" display_name = "Excluded Locations"
verify_location_name = True verify_location_name = True
class PriorityLocations(OptionSet): class PriorityLocations(OptionSet):
"""Prevent these locations from having an unimportant item""" """Prevent these locations from having an unimportant item"""
displayname = "Priority Locations" display_name = "Priority Locations"
verify_location_name = True verify_location_name = True
class DeathLink(Toggle): class DeathLink(Toggle):
"""When you die, everyone dies. Of course the reverse is true too.""" """When you die, everyone dies. Of course the reverse is true too."""
displayname = "Death Link" display_name = "Death Link"
per_game_common_options = { per_game_common_options = {

View File

@ -69,7 +69,7 @@ def create():
elif option.options: elif option.options:
game_options[option_name] = this_option = { game_options[option_name] = this_option = {
"type": "select", "type": "select",
"displayName": option.displayname if hasattr(option, "displayname") else option_name, "displayName": option.display_name if hasattr(option, "display_name") else option_name,
"description": option.__doc__ if option.__doc__ else "Please document me!", "description": option.__doc__ if option.__doc__ else "Please document me!",
"defaultValue": None, "defaultValue": None,
"options": [] "options": []
@ -92,7 +92,7 @@ def create():
elif hasattr(option, "range_start") and hasattr(option, "range_end"): elif hasattr(option, "range_start") and hasattr(option, "range_end"):
game_options[option_name] = { game_options[option_name] = {
"type": "range", "type": "range",
"displayName": option.displayname if hasattr(option, "displayname") else option_name, "displayName": option.display_name if hasattr(option, "display_name") else option_name,
"description": option.__doc__ if option.__doc__ else "Please document me!", "description": option.__doc__ if option.__doc__ else "Please document me!",
"defaultValue": option.default if hasattr(option, "default") else option.range_start, "defaultValue": option.default if hasattr(option, "default") else option.range_start,
"min": option.range_start, "min": option.range_start,
@ -102,14 +102,14 @@ def create():
elif getattr(option, "verify_item_name", False): elif getattr(option, "verify_item_name", False):
game_options[option_name] = { game_options[option_name] = {
"type": "items-list", "type": "items-list",
"displayName": option.displayname if hasattr(option, "displayname") else option_name, "displayName": option.display_name if hasattr(option, "display_name") else option_name,
"description": option.__doc__ if option.__doc__ else "Please document me!", "description": option.__doc__ if option.__doc__ else "Please document me!",
} }
elif getattr(option, "verify_location_name", False): elif getattr(option, "verify_location_name", False):
game_options[option_name] = { game_options[option_name] = {
"type": "locations-list", "type": "locations-list",
"displayName": option.displayname if hasattr(option, "displayname") else option_name, "displayName": option.display_name if hasattr(option, "display_name") else option_name,
"description": option.__doc__ if option.__doc__ else "Please document me!", "description": option.__doc__ if option.__doc__ else "Please document me!",
} }
@ -117,7 +117,7 @@ def create():
if option.valid_keys: if option.valid_keys:
game_options[option_name] = { game_options[option_name] = {
"type": "custom-list", "type": "custom-list",
"displayName": option.displayname if hasattr(option, "displayname") else option_name, "displayName": option.display_name if hasattr(option, "display_name") else option_name,
"description": option.__doc__ if option.__doc__ else "Please document me!", "description": option.__doc__ if option.__doc__ else "Please document me!",
"options": list(option.valid_keys), "options": list(option.valid_keys),
} }

View File

@ -46,26 +46,26 @@ class DungeonItem(Choice):
class bigkey_shuffle(DungeonItem): class bigkey_shuffle(DungeonItem):
"""Big Key Placement""" """Big Key Placement"""
item_name_group = "Big Keys" item_name_group = "Big Keys"
displayname = "Big Key Shuffle" display_name = "Big Key Shuffle"
class smallkey_shuffle(DungeonItem): class smallkey_shuffle(DungeonItem):
"""Small Key Placement""" """Small Key Placement"""
option_universal = 5 option_universal = 5
item_name_group = "Small Keys" item_name_group = "Small Keys"
displayname = "Small Key Shuffle" display_name = "Small Key Shuffle"
class compass_shuffle(DungeonItem): class compass_shuffle(DungeonItem):
"""Compass Placement""" """Compass Placement"""
item_name_group = "Compasses" item_name_group = "Compasses"
displayname = "Compass Shuffle" display_name = "Compass Shuffle"
class map_shuffle(DungeonItem): class map_shuffle(DungeonItem):
"""Map Placement""" """Map Placement"""
item_name_group = "Maps" item_name_group = "Maps"
displayname = "Map Shuffle" display_name = "Map Shuffle"
class Crystals(Range): class Crystals(Range):
@ -118,7 +118,7 @@ class Enemies(Choice):
class Progressive(Choice): class Progressive(Choice):
displayname = "Progressive Items" display_name = "Progressive Items"
option_off = 0 option_off = 0
option_grouped_random = 1 option_grouped_random = 1
option_on = 2 option_on = 2
@ -137,24 +137,24 @@ class Swordless(Toggle):
can be opened without a sword. Hammer damages Ganon. can be opened without a sword. Hammer damages Ganon.
Ether and Bombos Tablet can be activated with Hammer Ether and Bombos Tablet can be activated with Hammer
(and Book).""" (and Book)."""
displayname = "Swordless" display_name = "Swordless"
class Retro(Toggle): class Retro(Toggle):
"""Zelda-1 like mode. You have to purchase a quiver to shoot arrows using rupees """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.""" and there are randomly placed take-any caves that contain one Sword and choices of Heart Container/Blue Potion."""
displayname = "Retro" display_name = "Retro"
class RestrictBossItem(Toggle): class RestrictBossItem(Toggle):
"""Don't place dungeon-native items on the dungeon's boss.""" """Don't place dungeon-native items on the dungeon's boss."""
displayname = "Prevent Dungeon Item on Boss" display_name = "Prevent Dungeon Item on Boss"
class Hints(Choice): class Hints(Choice):
"""Vendors: King Zora and Bottle Merchant say what they're selling. """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.""" On/Full: Put item and entrance placement hints on telepathic tiles and some NPCs, Full removes joke hints."""
displayname = "Hints" display_name = "Hints"
option_off = 0 option_off = 0
option_vendors = 1 option_vendors = 1
option_on = 2 option_on = 2
@ -167,27 +167,27 @@ class Hints(Choice):
class EnemyShuffle(Toggle): class EnemyShuffle(Toggle):
"""Randomize every enemy spawn. """Randomize every enemy spawn.
If mode is Standard, Hyrule Castle is left out (may result in visually wrong enemy sprites in that area.)""" If mode is Standard, Hyrule Castle is left out (may result in visually wrong enemy sprites in that area.)"""
displayname = "Enemy Shuffle" display_name = "Enemy Shuffle"
class KillableThieves(Toggle): class KillableThieves(Toggle):
"""Makes Thieves killable.""" """Makes Thieves killable."""
displayname = "Killable Thieves" display_name = "Killable Thieves"
class BushShuffle(Toggle): class BushShuffle(Toggle):
"""Randomize chance that a bush contains an enemy as well as which enemy may spawn.""" """Randomize chance that a bush contains an enemy as well as which enemy may spawn."""
displayname = "Bush Shuffle" display_name = "Bush Shuffle"
class TileShuffle(Toggle): class TileShuffle(Toggle):
"""Randomize flying tiles floor patterns.""" """Randomize flying tiles floor patterns."""
displayname = "Tile Shuffle" display_name = "Tile Shuffle"
class PotShuffle(Toggle): class PotShuffle(Toggle):
"""Shuffle contents of pots within "supertiles" (item will still be nearby original placement).""" """Shuffle contents of pots within "supertiles" (item will still be nearby original placement)."""
displayname = "Pot Shuffle" display_name = "Pot Shuffle"
class Palette(Choice): class Palette(Choice):
@ -203,31 +203,31 @@ class Palette(Choice):
class OWPalette(Palette): class OWPalette(Palette):
displayname = "Overworld Palette" display_name = "Overworld Palette"
class UWPalette(Palette): class UWPalette(Palette):
displayname = "Underworld Palette" display_name = "Underworld Palette"
class HUDPalette(Palette): class HUDPalette(Palette):
displayname = "Menu Palette" display_name = "Menu Palette"
class SwordPalette(Palette): class SwordPalette(Palette):
displayname = "Sword Palette" display_name = "Sword Palette"
class ShieldPalette(Palette): class ShieldPalette(Palette):
displayname = "Shield Palette" display_name = "Shield Palette"
class LinkPalette(Palette): class LinkPalette(Palette):
displayname = "Link Palette" display_name = "Link Palette"
class HeartBeep(Choice): class HeartBeep(Choice):
displayname = "Heart Beep Rate" display_name = "Heart Beep Rate"
option_normal = 0 option_normal = 0
option_double = 1 option_double = 1
option_half = 2 option_half = 2
@ -237,7 +237,7 @@ class HeartBeep(Choice):
class HeartColor(Choice): class HeartColor(Choice):
displayname = "Heart Color" display_name = "Heart Color"
option_red = 0 option_red = 0
option_blue = 1 option_blue = 1
option_green = 2 option_green = 2
@ -245,11 +245,11 @@ class HeartColor(Choice):
class QuickSwap(DefaultOnToggle): class QuickSwap(DefaultOnToggle):
displayname = "L/R Quickswapping" display_name = "L/R Quickswapping"
class MenuSpeed(Choice): class MenuSpeed(Choice):
displayname = "Menu Speed" display_name = "Menu Speed"
option_normal = 0 option_normal = 0
option_instant = 1, option_instant = 1,
option_double = 2 option_double = 2
@ -259,7 +259,7 @@ class MenuSpeed(Choice):
class Music(DefaultOnToggle): class Music(DefaultOnToggle):
displayname = "Play music" display_name = "Play music"
class ReduceFlashing(DefaultOnToggle): class ReduceFlashing(DefaultOnToggle):

View File

@ -11,7 +11,7 @@ LuaBool = Or(bool, And(int, lambda n: n in (0, 1)))
class MaxSciencePack(Choice): class MaxSciencePack(Choice):
"""Maximum level of science pack required to complete the game.""" """Maximum level of science pack required to complete the game."""
displayname = "Maximum Required Science Pack" display_name = "Maximum Required Science Pack"
option_automation_science_pack = 0 option_automation_science_pack = 0
option_logistic_science_pack = 1 option_logistic_science_pack = 1
option_military_science_pack = 2 option_military_science_pack = 2
@ -35,7 +35,7 @@ class MaxSciencePack(Choice):
class Goal(Choice): class Goal(Choice):
"""Goal required to complete the game.""" """Goal required to complete the game."""
displayname = "Goal" display_name = "Goal"
option_rocket = 0 option_rocket = 0
option_satellite = 1 option_satellite = 1
default = 0 default = 0
@ -43,7 +43,7 @@ class Goal(Choice):
class TechCost(Choice): class TechCost(Choice):
"""How expensive are the technologies.""" """How expensive are the technologies."""
displayname = "Technology Cost Scale" display_name = "Technology Cost Scale"
option_very_easy = 0 option_very_easy = 0
option_easy = 1 option_easy = 1
option_kind = 2 option_kind = 2
@ -56,7 +56,7 @@ class TechCost(Choice):
class Silo(Choice): class Silo(Choice):
"""Ingredients to craft rocket silo or auto-place if set to spawn.""" """Ingredients to craft rocket silo or auto-place if set to spawn."""
displayname = "Rocket Silo" display_name = "Rocket Silo"
option_vanilla = 0 option_vanilla = 0
option_randomize_recipe = 1 option_randomize_recipe = 1
option_spawn = 2 option_spawn = 2
@ -65,7 +65,7 @@ class Silo(Choice):
class Satellite(Choice): class Satellite(Choice):
"""Ingredients to craft satellite.""" """Ingredients to craft satellite."""
displayname = "Satellite" display_name = "Satellite"
option_vanilla = 0 option_vanilla = 0
option_randomize_recipe = 1 option_randomize_recipe = 1
default = 0 default = 0
@ -73,7 +73,7 @@ class Satellite(Choice):
class FreeSamples(Choice): class FreeSamples(Choice):
"""Get free items with your technologies.""" """Get free items with your technologies."""
displayname = "Free Samples" display_name = "Free Samples"
option_none = 0 option_none = 0
option_single_craft = 1 option_single_craft = 1
option_half_stack = 2 option_half_stack = 2
@ -83,7 +83,7 @@ class FreeSamples(Choice):
class TechTreeLayout(Choice): class TechTreeLayout(Choice):
"""Selects how the tech tree nodes are interwoven.""" """Selects how the tech tree nodes are interwoven."""
displayname = "Technology Tree Layout" display_name = "Technology Tree Layout"
option_single = 0 option_single = 0
option_small_diamonds = 1 option_small_diamonds = 1
option_medium_diamonds = 2 option_medium_diamonds = 2
@ -101,7 +101,7 @@ class TechTreeLayout(Choice):
class TechTreeInformation(Choice): class TechTreeInformation(Choice):
"""How much information should be displayed in the tech tree.""" """How much information should be displayed in the tech tree."""
displayname = "Technology Tree Information" display_name = "Technology Tree Information"
option_none = 0 option_none = 0
option_advancement = 1 option_advancement = 1
option_full = 2 option_full = 2
@ -119,7 +119,7 @@ class RecipeTime(Choice):
New Normal: 0.25 - 10 seconds New Normal: 0.25 - 10 seconds
New Slow: 5 - 10 seconds New Slow: 5 - 10 seconds
""" """
displayname = "Recipe Time" display_name = "Recipe Time"
option_vanilla = 0 option_vanilla = 0
option_fast = 1 option_fast = 1
option_normal = 2 option_normal = 2
@ -133,7 +133,7 @@ class RecipeTime(Choice):
class Progressive(Choice): class Progressive(Choice):
"""Merges together Technologies like "automation-1" to "automation-3" into 3 copies of "Progressive Automation", """Merges together Technologies like "automation-1" to "automation-3" into 3 copies of "Progressive Automation",
which awards them in order.""" which awards them in order."""
displayname = "Progressive Technologies" display_name = "Progressive Technologies"
option_off = 0 option_off = 0
option_grouped_random = 1 option_grouped_random = 1
option_on = 2 option_on = 2
@ -147,26 +147,26 @@ class Progressive(Choice):
class RecipeIngredients(Choice): class RecipeIngredients(Choice):
"""Select if rocket, or rocket + science pack ingredients should be random.""" """Select if rocket, or rocket + science pack ingredients should be random."""
displayname = "Random Recipe Ingredients Level" display_name = "Random Recipe Ingredients Level"
option_rocket = 0 option_rocket = 0
option_science_pack = 1 option_science_pack = 1
class FactorioStartItems(ItemDict): class FactorioStartItems(ItemDict):
"""Mapping of Factorio internal item-name to amount granted on start.""" """Mapping of Factorio internal item-name to amount granted on start."""
displayname = "Starting Items" display_name = "Starting Items"
verify_item_name = False verify_item_name = False
default = {"burner-mining-drill": 19, "stone-furnace": 19} default = {"burner-mining-drill": 19, "stone-furnace": 19}
class FactorioFreeSampleBlacklist(OptionSet): class FactorioFreeSampleBlacklist(OptionSet):
"""Set of items that should never be granted from Free Samples""" """Set of items that should never be granted from Free Samples"""
displayname = "Free Sample Blacklist" display_name = "Free Sample Blacklist"
class FactorioFreeSampleWhitelist(OptionSet): class FactorioFreeSampleWhitelist(OptionSet):
"""Overrides any free sample blacklist present. This may ruin the balance of the mod, be warned.""" """Overrides any free sample blacklist present. This may ruin the balance of the mod, be warned."""
displayname = "Free Sample Whitelist" display_name = "Free Sample Whitelist"
class TrapCount(Range): class TrapCount(Range):
@ -175,19 +175,19 @@ class TrapCount(Range):
class AttackTrapCount(TrapCount): class AttackTrapCount(TrapCount):
"""Trap items that when received trigger an attack on your base.""" """Trap items that when received trigger an attack on your base."""
displayname = "Attack Traps" display_name = "Attack Traps"
class EvolutionTrapCount(TrapCount): class EvolutionTrapCount(TrapCount):
"""Trap items that when received increase the enemy evolution.""" """Trap items that when received increase the enemy evolution."""
displayname = "Evolution Traps" display_name = "Evolution Traps"
class EvolutionTrapIncrease(Range): class EvolutionTrapIncrease(Range):
"""How much an Evolution Trap increases the enemy evolution. """How much an Evolution Trap increases the enemy evolution.
Increases scale down proportionally to the session's current evolution factor Increases scale down proportionally to the session's current evolution factor
(40 increase at 0.50 will add 0.20... 40 increase at 0.75 will add 0.10...)""" (40 increase at 0.50 will add 0.20... 40 increase at 0.75 will add 0.10...)"""
displayname = "Evolution Trap % Effect" display_name = "Evolution Trap % Effect"
range_start = 1 range_start = 1
default = 10 default = 10
range_end = 100 range_end = 100
@ -196,7 +196,7 @@ class EvolutionTrapIncrease(Range):
class FactorioWorldGen(OptionDict): class FactorioWorldGen(OptionDict):
"""World Generation settings. Overview of options at https://wiki.factorio.com/Map_generator, """World Generation settings. Overview of options at https://wiki.factorio.com/Map_generator,
with in-depth documentation at https://lua-api.factorio.com/latest/Concepts.html#MapGenSettings""" with in-depth documentation at https://lua-api.factorio.com/latest/Concepts.html#MapGenSettings"""
displayname = "World Generation" display_name = "World Generation"
# FIXME: do we want default be a rando-optimized default or in-game DS? # FIXME: do we want default be a rando-optimized default or in-game DS?
value: typing.Dict[str, typing.Dict[str, typing.Any]] value: typing.Dict[str, typing.Dict[str, typing.Any]]
default = { default = {
@ -330,7 +330,7 @@ class FactorioWorldGen(OptionDict):
class ImportedBlueprint(DefaultOnToggle): class ImportedBlueprint(DefaultOnToggle):
"""Allow or Disallow Blueprints from outside the current savegame.""" """Allow or Disallow Blueprints from outside the current savegame."""
displayname = "Blueprints" display_name = "Blueprints"
factorio_options: typing.Dict[str, type(Option)] = { factorio_options: typing.Dict[str, type(Option)] = {

View File

@ -74,7 +74,6 @@ class Factorio(World):
self.sending_visible = self.world.tech_tree_information[player] == TechTreeInformation.option_full self.sending_visible = self.world.tech_tree_information[player] == TechTreeInformation.option_full
generate_output = generate_mod generate_output = generate_mod
def create_regions(self): def create_regions(self):
@ -205,7 +204,8 @@ class Factorio(World):
new_ingredient = pool.pop() new_ingredient = pool.pop()
liquids_used += 1 liquids_used += 1
new_ingredients[new_ingredient] = 1 new_ingredients[new_ingredient] = 1
return Recipe(original.name, self.get_category(original.category, liquids_used), new_ingredients, original.products, original.energy) return Recipe(original.name, self.get_category(original.category, liquids_used), new_ingredients,
original.products, original.energy)
def make_balanced_recipe(self, original: Recipe, pool: list, factor: float = 1, allow_liquids: int = 2) -> \ def make_balanced_recipe(self, original: Recipe, pool: list, factor: float = 1, allow_liquids: int = 2) -> \
Recipe: Recipe:
@ -292,7 +292,8 @@ class Factorio(World):
if remaining_num_ingredients > 1: if remaining_num_ingredients > 1:
logging.warning("could not randomize recipe") logging.warning("could not randomize recipe")
return Recipe(original.name, self.get_category(original.category, liquids_used), new_ingredients, original.products, original.energy) return Recipe(original.name, self.get_category(original.category, liquids_used), new_ingredients,
original.products, original.energy)
def set_custom_technologies(self): def set_custom_technologies(self):
custom_technologies = {} custom_technologies = {}

View File

@ -4,15 +4,15 @@ from Options import OptionDict
class Locations(OptionDict): class Locations(OptionDict):
displayname = "locations" display_name = "locations"
class Items(OptionDict): class Items(OptionDict):
displayname = "items" display_name = "items"
class Rules(OptionDict): class Rules(OptionDict):
displayname = "rules" display_name = "rules"
ff1_options: Dict[str, OptionDict] = { ff1_options: Dict[str, OptionDict] = {

View File

@ -4,7 +4,7 @@ from Options import Choice, Option, Toggle, Range, OptionList, DeathLink
class AdvancementGoal(Range): class AdvancementGoal(Range):
"""Number of advancements required to spawn bosses.""" """Number of advancements required to spawn bosses."""
displayname = "Advancement Goal" display_name = "Advancement Goal"
range_start = 0 range_start = 0
range_end = 92 range_end = 92
default = 40 default = 40
@ -12,7 +12,7 @@ class AdvancementGoal(Range):
class EggShardsRequired(Range): class EggShardsRequired(Range):
"""Number of dragon egg shards to collect to spawn bosses.""" """Number of dragon egg shards to collect to spawn bosses."""
displayname = "Egg Shards Required" display_name = "Egg Shards Required"
range_start = 0 range_start = 0
range_end = 40 range_end = 40
default = 0 default = 0
@ -20,7 +20,7 @@ class EggShardsRequired(Range):
class EggShardsAvailable(Range): class EggShardsAvailable(Range):
"""Number of dragon egg shards available to collect.""" """Number of dragon egg shards available to collect."""
displayname = "Egg Shards Available" display_name = "Egg Shards Available"
range_start = 0 range_start = 0
range_end = 40 range_end = 40
default = 0 default = 0
@ -28,7 +28,7 @@ class EggShardsAvailable(Range):
class BossGoal(Choice): class BossGoal(Choice):
"""Bosses which must be defeated to finish the game.""" """Bosses which must be defeated to finish the game."""
displayname = "Required Bosses" display_name = "Required Bosses"
option_none = 0 option_none = 0
option_ender_dragon = 1 option_ender_dragon = 1
option_wither = 2 option_wither = 2
@ -38,19 +38,19 @@ class BossGoal(Choice):
class ShuffleStructures(Toggle): class ShuffleStructures(Toggle):
"""Enables shuffling of villages, outposts, fortresses, bastions, and end cities.""" """Enables shuffling of villages, outposts, fortresses, bastions, and end cities."""
displayname = "Shuffle Structures" display_name = "Shuffle Structures"
default = 1 default = 1
class StructureCompasses(Toggle): class StructureCompasses(Toggle):
"""Adds structure compasses to the item pool, which point to the nearest indicated structure.""" """Adds structure compasses to the item pool, which point to the nearest indicated structure."""
displayname = "Structure Compasses" display_name = "Structure Compasses"
default = 1 default = 1
class BeeTraps(Range): class BeeTraps(Range):
"""Replaces a percentage of junk items with bee traps, which spawn multiple angered bees around every player when received.""" """Replaces a percentage of junk items with bee traps, which spawn multiple angered bees around every player when received."""
displayname = "Bee Trap Percentage" display_name = "Bee Trap Percentage"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 0 default = 0
@ -58,7 +58,7 @@ class BeeTraps(Range):
class CombatDifficulty(Choice): class CombatDifficulty(Choice):
"""Modifies the level of items logically required for exploring dangerous areas and fighting bosses.""" """Modifies the level of items logically required for exploring dangerous areas and fighting bosses."""
displayname = "Combat Difficulty" display_name = "Combat Difficulty"
option_easy = 0 option_easy = 0
option_normal = 1 option_normal = 1
option_hard = 2 option_hard = 2
@ -67,31 +67,31 @@ class CombatDifficulty(Choice):
class HardAdvancements(Toggle): class HardAdvancements(Toggle):
"""Enables certain RNG-reliant or tedious advancements.""" """Enables certain RNG-reliant or tedious advancements."""
displayname = "Include Hard Advancements" display_name = "Include Hard Advancements"
default = 0 default = 0
class UnreasonableAdvancements(Toggle): class UnreasonableAdvancements(Toggle):
"""Enables the extremely difficult advancements "How Did We Get Here?" and "Adventuring Time.\"""" """Enables the extremely difficult advancements "How Did We Get Here?" and "Adventuring Time.\""""
displayname = "Include Unreasonable Advancements" display_name = "Include Unreasonable Advancements"
default = 0 default = 0
class PostgameAdvancements(Toggle): class PostgameAdvancements(Toggle):
"""Enables advancements that require spawning and defeating the required bosses.""" """Enables advancements that require spawning and defeating the required bosses."""
displayname = "Include Postgame Advancements" display_name = "Include Postgame Advancements"
default = 0 default = 0
class SendDefeatedMobs(Toggle): class SendDefeatedMobs(Toggle):
"""Send killed mobs to other Minecraft worlds which have this option enabled.""" """Send killed mobs to other Minecraft worlds which have this option enabled."""
displayname = "Send Defeated Mobs" display_name = "Send Defeated Mobs"
default = 0 default = 0
class StartingItems(OptionList): class StartingItems(OptionList):
"""Start with these items. Each entry should be of this format: {item: "item_name", amount: #, nbt: "nbt_string"}""" """Start with these items. Each entry should be of this format: {item: "item_name", amount: #, nbt: "nbt_string"}"""
displayname = "Starting Items" display_name = "Starting Items"
minecraft_options: typing.Dict[str, type(Option)] = { minecraft_options: typing.Dict[str, type(Option)] = {

View File

@ -4,7 +4,7 @@ from Options import Choice
class kokiri_color(Choice): class kokiri_color(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Kokiri Tunic" display_name = "Kokiri Tunic"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_kokiri_green = 2 option_kokiri_green = 2
@ -43,7 +43,7 @@ class kokiri_color(Choice):
class goron_color(Choice): class goron_color(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Goron Tunic" display_name = "Goron Tunic"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_kokiri_green = 2 option_kokiri_green = 2
@ -82,7 +82,7 @@ class goron_color(Choice):
class zora_color(Choice): class zora_color(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Zora Tunic" display_name = "Zora Tunic"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_kokiri_green = 2 option_kokiri_green = 2
@ -121,7 +121,7 @@ class zora_color(Choice):
class silver_gauntlets_color(Choice): class silver_gauntlets_color(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Silver Gauntlets Color" display_name = "Silver Gauntlets Color"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_silver = 2 option_silver = 2
@ -142,7 +142,7 @@ class silver_gauntlets_color(Choice):
class golden_gauntlets_color(Choice): class golden_gauntlets_color(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Golden Gauntlets Color" display_name = "Golden Gauntlets Color"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_silver = 2 option_silver = 2
@ -163,7 +163,7 @@ class golden_gauntlets_color(Choice):
class mirror_shield_frame_color(Choice): class mirror_shield_frame_color(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Mirror Shield Frame Color" display_name = "Mirror Shield Frame Color"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_red = 2 option_red = 2
@ -181,7 +181,7 @@ class mirror_shield_frame_color(Choice):
class navi_color_default_inner(Choice): class navi_color_default_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Navi Idle Inner" display_name = "Navi Idle Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -209,7 +209,7 @@ class navi_color_default_inner(Choice):
class navi_color_default_outer(Choice): class navi_color_default_outer(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option."""
displayname = "Navi Idle Outer" display_name = "Navi Idle Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -238,7 +238,7 @@ class navi_color_default_outer(Choice):
class navi_color_enemy_inner(Choice): class navi_color_enemy_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Navi Targeting Enemy Inner" display_name = "Navi Targeting Enemy Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -266,7 +266,7 @@ class navi_color_enemy_inner(Choice):
class navi_color_enemy_outer(Choice): class navi_color_enemy_outer(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option."""
displayname = "Navi Targeting Enemy Outer" display_name = "Navi Targeting Enemy Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -295,7 +295,7 @@ class navi_color_enemy_outer(Choice):
class navi_color_npc_inner(Choice): class navi_color_npc_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Navi Targeting NPC Inner" display_name = "Navi Targeting NPC Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -323,7 +323,7 @@ class navi_color_npc_inner(Choice):
class navi_color_npc_outer(Choice): class navi_color_npc_outer(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option."""
displayname = "Navi Targeting NPC Outer" display_name = "Navi Targeting NPC Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -352,7 +352,7 @@ class navi_color_npc_outer(Choice):
class navi_color_prop_inner(Choice): class navi_color_prop_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Navi Targeting Prop Inner" display_name = "Navi Targeting Prop Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -380,7 +380,7 @@ class navi_color_prop_inner(Choice):
class navi_color_prop_outer(Choice): class navi_color_prop_outer(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option."""
displayname = "Navi Targeting Prop Outer" display_name = "Navi Targeting Prop Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -409,7 +409,7 @@ class navi_color_prop_outer(Choice):
class sword_trail_color_inner(Choice): class sword_trail_color_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Sword Trail Inner" display_name = "Sword Trail Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -428,7 +428,7 @@ class sword_trail_color_inner(Choice):
class sword_trail_color_outer(Choice): class sword_trail_color_outer(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option."""
displayname = "Sword Trail Outer" display_name = "Sword Trail Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -448,7 +448,7 @@ class sword_trail_color_outer(Choice):
class bombchu_trail_color_inner(Choice): class bombchu_trail_color_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Bombchu Trail Inner" display_name = "Bombchu Trail Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -466,7 +466,7 @@ class bombchu_trail_color_inner(Choice):
class bombchu_trail_color_outer(Choice): class bombchu_trail_color_outer(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code. "match_inner" copies the inner color for this option."""
displayname = "Bombchu Trail Outer" display_name = "Bombchu Trail Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2
@ -485,7 +485,7 @@ class bombchu_trail_color_outer(Choice):
class boomerang_trail_color_inner(Choice): class boomerang_trail_color_inner(Choice):
"""Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code.""" """Choose a color. "random_choice" selects a random option. "completely_random" generates a random hex code."""
displayname = "Boomerang Trail Inner" display_name = "Boomerang Trail Inner"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
option_rainbow = 2 option_rainbow = 2

View File

@ -6,7 +6,7 @@ from .ColorSFXOptions import *
class Logic(Choice): class Logic(Choice):
"""Set the logic used for the generator.""" """Set the logic used for the generator."""
displayname = "Logic Rules" display_name = "Logic Rules"
option_glitchless = 0 option_glitchless = 0
option_glitched = 1 option_glitched = 1
option_no_logic = 2 option_no_logic = 2
@ -14,12 +14,12 @@ class Logic(Choice):
class NightTokens(Toggle): class NightTokens(Toggle):
"""Nighttime skulltulas will logically require Sun's Song.""" """Nighttime skulltulas will logically require Sun's Song."""
displayname = "Nighttime Skulltulas Expect Sun's Song" display_name = "Nighttime Skulltulas Expect Sun's Song"
class Forest(Choice): class Forest(Choice):
"""Set the state of Kokiri Forest and the path to Deku Tree.""" """Set the state of Kokiri Forest and the path to Deku Tree."""
displayname = "Forest" display_name = "Forest"
option_open = 0 option_open = 0
option_closed_deku = 1 option_closed_deku = 1
option_closed = 2 option_closed = 2
@ -29,7 +29,7 @@ class Forest(Choice):
class Gate(Choice): class Gate(Choice):
"""Set the state of the Kakariko Village gate.""" """Set the state of the Kakariko Village gate."""
displayname = "Kakariko Gate" display_name = "Kakariko Gate"
option_open = 0 option_open = 0
option_zelda = 1 option_zelda = 1
option_closed = 2 option_closed = 2
@ -37,12 +37,12 @@ class Gate(Choice):
class DoorOfTime(DefaultOnToggle): class DoorOfTime(DefaultOnToggle):
"""Open the Door of Time by default, without the Song of Time.""" """Open the Door of Time by default, without the Song of Time."""
displayname = "Open Door of Time" display_name = "Open Door of Time"
class Fountain(Choice): class Fountain(Choice):
"""Set the state of King Zora, blocking the way to Zora's Fountain.""" """Set the state of King Zora, blocking the way to Zora's Fountain."""
displayname = "Zora's Fountain" display_name = "Zora's Fountain"
option_open = 0 option_open = 0
option_adult = 1 option_adult = 1
option_closed = 2 option_closed = 2
@ -51,7 +51,7 @@ class Fountain(Choice):
class Fortress(Choice): class Fortress(Choice):
"""Set the requirements for access to Gerudo Fortress.""" """Set the requirements for access to Gerudo Fortress."""
displayname = "Gerudo Fortress" display_name = "Gerudo Fortress"
option_normal = 0 option_normal = 0
option_fast = 1 option_fast = 1
option_open = 2 option_open = 2
@ -60,7 +60,7 @@ class Fortress(Choice):
class Bridge(Choice): class Bridge(Choice):
"""Set the requirements for the Rainbow Bridge.""" """Set the requirements for the Rainbow Bridge."""
displayname = "Rainbow Bridge Requirement" display_name = "Rainbow Bridge Requirement"
option_open = 0 option_open = 0
option_vanilla = 1 option_vanilla = 1
option_stones = 2 option_stones = 2
@ -72,7 +72,7 @@ class Bridge(Choice):
class Trials(Range): class Trials(Range):
"""Set the number of required trials in Ganon's Castle.""" """Set the number of required trials in Ganon's Castle."""
displayname = "Ganon's Trials Count" display_name = "Ganon's Trials Count"
range_start = 0 range_start = 0
range_end = 6 range_end = 6
@ -90,14 +90,14 @@ open_options: typing.Dict[str, type(Option)] = {
class StartingAge(Choice): class StartingAge(Choice):
"""Choose which age Link will start as.""" """Choose which age Link will start as."""
displayname = "Starting Age" display_name = "Starting Age"
option_child = 0 option_child = 0
option_adult = 1 option_adult = 1
class InteriorEntrances(Choice): class InteriorEntrances(Choice):
"""Shuffles interior entrances. "Simple" shuffles houses and Great Fairies; "All" includes Windmill, Link's House, Temple of Time, and Kak potion shop.""" """Shuffles interior entrances. "Simple" shuffles houses and Great Fairies; "All" includes Windmill, Link's House, Temple of Time, and Kak potion shop."""
displayname = "Shuffle Interior Entrances" display_name = "Shuffle Interior Entrances"
option_off = 0 option_off = 0
option_simple = 1 option_simple = 1
option_all = 2 option_all = 2
@ -107,37 +107,37 @@ class InteriorEntrances(Choice):
class GrottoEntrances(Toggle): class GrottoEntrances(Toggle):
"""Shuffles grotto and grave entrances.""" """Shuffles grotto and grave entrances."""
displayname = "Shuffle Grotto/Grave Entrances" display_name = "Shuffle Grotto/Grave Entrances"
class DungeonEntrances(Toggle): class DungeonEntrances(Toggle):
"""Shuffles dungeon entrances, excluding Ganon's Castle. Opens Deku, Fire and BotW to both ages.""" """Shuffles dungeon entrances, excluding Ganon's Castle. Opens Deku, Fire and BotW to both ages."""
displayname = "Shuffle Dungeon Entrances" display_name = "Shuffle Dungeon Entrances"
class OverworldEntrances(Toggle): class OverworldEntrances(Toggle):
"""Shuffles overworld loading zones.""" """Shuffles overworld loading zones."""
displayname = "Shuffle Overworld Entrances" display_name = "Shuffle Overworld Entrances"
class OwlDrops(Toggle): class OwlDrops(Toggle):
"""Randomizes owl drops from Lake Hylia or Death Mountain Trail as child.""" """Randomizes owl drops from Lake Hylia or Death Mountain Trail as child."""
displayname = "Randomize Owl Drops" display_name = "Randomize Owl Drops"
class WarpSongs(Toggle): class WarpSongs(Toggle):
"""Randomizes warp song destinations.""" """Randomizes warp song destinations."""
displayname = "Randomize Warp Songs" display_name = "Randomize Warp Songs"
class SpawnPositions(Toggle): class SpawnPositions(Toggle):
"""Randomizes the starting position on loading a save. Consistent between savewarps.""" """Randomizes the starting position on loading a save. Consistent between savewarps."""
displayname = "Randomize Spawn Positions" display_name = "Randomize Spawn Positions"
class MixEntrancePools(Choice): class MixEntrancePools(Choice):
"""Shuffles entrances into a mixed pool instead of separate ones. "indoor" keeps overworld entrances separate; "all" mixes them in.""" """Shuffles entrances into a mixed pool instead of separate ones. "indoor" keeps overworld entrances separate; "all" mixes them in."""
displayname = "Mix Entrance Pools" display_name = "Mix Entrance Pools"
option_off = 0 option_off = 0
option_indoor = 1 option_indoor = 1
option_all = 2 option_all = 2
@ -146,17 +146,17 @@ class MixEntrancePools(Choice):
class DecoupleEntrances(Toggle): class DecoupleEntrances(Toggle):
"""Decouple entrances when shuffling them. Also adds the one-way entrance from Gerudo Valley to Lake Hylia if overworld is shuffled.""" """Decouple entrances when shuffling them. Also adds the one-way entrance from Gerudo Valley to Lake Hylia if overworld is shuffled."""
displayname = "Decouple Entrances" display_name = "Decouple Entrances"
class TriforceHunt(Toggle): class TriforceHunt(Toggle):
"""Gather pieces of the Triforce scattered around the world to complete the game.""" """Gather pieces of the Triforce scattered around the world to complete the game."""
displayname = "Triforce Hunt" display_name = "Triforce Hunt"
class TriforceGoal(Range): class TriforceGoal(Range):
"""Number of Triforce pieces required to complete the game.""" """Number of Triforce pieces required to complete the game."""
displayname = "Required Triforce Pieces" display_name = "Required Triforce Pieces"
range_start = 1 range_start = 1
range_end = 100 range_end = 100
default = 20 default = 20
@ -164,7 +164,7 @@ class TriforceGoal(Range):
class ExtraTriforces(Range): class ExtraTriforces(Range):
"""Percentage of additional Triforce pieces in the pool, separate from the item pool setting.""" """Percentage of additional Triforce pieces in the pool, separate from the item pool setting."""
displayname = "Percentage of Extra Triforce Pieces" display_name = "Percentage of Extra Triforce Pieces"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 50 default = 50

View File

@ -17,7 +17,7 @@ def assemble_color_option(f, internal_name: str, func, display_name: str, defaul
f.write(f"class {internal_name}(Choice):\n") f.write(f"class {internal_name}(Choice):\n")
f.write(f" \"\"\"{docstring}\"\"\"\n") f.write(f" \"\"\"{docstring}\"\"\"\n")
f.write(f" displayname = \"{display_name}\"\n") f.write(f" display_name = \"{display_name}\"\n")
for color, id in color_to_id.items(): for color, id in color_to_id.items():
f.write(f" option_{color} = {id}\n") f.write(f" option_{color} = {id}\n")
f.write(f" default = {color_options.index(default_option)}") f.write(f" default = {color_options.index(default_option)}")
@ -31,7 +31,7 @@ def assemble_sfx_option(f, internal_name: str, sound_hook: sfx.SoundHooks, displ
f.write(f"class {internal_name}(Choice):\n") f.write(f"class {internal_name}(Choice):\n")
f.write(f" \"\"\"{docstring}\"\"\"\n") f.write(f" \"\"\"{docstring}\"\"\"\n")
f.write(f" displayname = \"{display_name}\"\n") f.write(f" display_name = \"{display_name}\"\n")
for sound, id in sfx_to_id.items(): for sound, id in sfx_to_id.items():
f.write(f" option_{sound} = {id}\n") f.write(f" option_{sound} = {id}\n")
f.write(f"\n\n\n") f.write(f"\n\n\n")

View File

@ -2,18 +2,18 @@ from Options import Range, Toggle, DefaultOnToggle, Choice
class UseResourcePacks(DefaultOnToggle): class UseResourcePacks(DefaultOnToggle):
"""Uses Resource Packs to fill out the item pool from Raft. Resource Packs have basic earlygame items such as planks, plastic, or food.""" """Uses Resource Packs to fill out the item pool from Raft. Resource Packs have basic earlygame items such as planks, plastic, or food."""
displayname = "Use resource packs" display_name = "Use resource packs"
class MinimumResourcePackAmount(Range): class MinimumResourcePackAmount(Range):
"""The minimum amount of resources available in a resource pack""" """The minimum amount of resources available in a resource pack"""
displayname = "Minimum resource pack amount" display_name = "Minimum resource pack amount"
range_start = 1 range_start = 1
range_end = 15 range_end = 15
default = 1 default = 1
class MaximumResourcePackAmount(Range): class MaximumResourcePackAmount(Range):
"""The maximum amount of resources available in a resource pack""" """The maximum amount of resources available in a resource pack"""
displayname = "Maximum resource pack amount" display_name = "Maximum resource pack amount"
range_start = 1 range_start = 1
range_end = 15 range_end = 15
default = 5 default = 5
@ -22,7 +22,7 @@ class DuplicateItems(Choice):
"""Adds duplicates of items to the item pool. These will be selected alongside """Adds duplicates of items to the item pool. These will be selected alongside
Resource Packs (if configured). Note that there are not many progression items, Resource Packs (if configured). Note that there are not many progression items,
and selecting Progression may produce many of the same duplicate item.""" and selecting Progression may produce many of the same duplicate item."""
displayname = "Duplicate items" display_name = "Duplicate items"
option_disabled = 0 option_disabled = 0
option_progression = 1 option_progression = 1
option_non_progression = 2 option_non_progression = 2
@ -30,7 +30,7 @@ class DuplicateItems(Choice):
class IslandFrequencyLocations(Choice): class IslandFrequencyLocations(Choice):
"""Sets where frequencies for story islands are located.""" """Sets where frequencies for story islands are located."""
displayname = "Frequency locations" display_name = "Frequency locations"
option_vanilla = 0 option_vanilla = 0
option_random_on_island = 1 option_random_on_island = 1
option_progressive = 2 option_progressive = 2
@ -39,15 +39,15 @@ class IslandFrequencyLocations(Choice):
class ProgressiveItems(DefaultOnToggle): class ProgressiveItems(DefaultOnToggle):
"""Makes some items, like the Bow and Arrow, progressive rather than raw unlocks.""" """Makes some items, like the Bow and Arrow, progressive rather than raw unlocks."""
displayname = "Progressive items" display_name = "Progressive items"
class BigIslandEarlyCrafting(Toggle): class BigIslandEarlyCrafting(Toggle):
"""Allows recipes that require items from big islands (eg leather) to lock earlygame items like the Receiver, Bolt, or Smelter.""" """Allows recipes that require items from big islands (eg leather) to lock earlygame items like the Receiver, Bolt, or Smelter."""
displayname = "Early recipes behind big islands" display_name = "Early recipes behind big islands"
class PaddleboardMode(Toggle): class PaddleboardMode(Toggle):
"""Sets later story islands to in logic without an Engine or Steering Wheel. May require lots of paddling. Not recommended.""" """Sets later story islands to in logic without an Engine or Steering Wheel. May require lots of paddling. Not recommended."""
displayname = "Paddleboard Mode" display_name = "Paddleboard Mode"
raft_options = { raft_options = {
"use_resource_packs": UseResourcePacks, "use_resource_packs": UseResourcePacks,

View File

@ -7,7 +7,7 @@ class StartingGender(Choice):
""" """
Determines the gender of your initial 'Sir Lee' character. Determines the gender of your initial 'Sir Lee' character.
""" """
displayname = "Starting Gender" display_name = "Starting Gender"
option_sir = 0 option_sir = 0
option_lady = 1 option_lady = 1
alias_male = 0 alias_male = 0
@ -19,7 +19,7 @@ class StartingClass(Choice):
""" """
Determines the starting class of your initial 'Sir Lee' character. Determines the starting class of your initial 'Sir Lee' character.
""" """
displayname = "Starting Class" display_name = "Starting Class"
option_knight = 0 option_knight = 0
option_mage = 1 option_mage = 1
option_barbarian = 2 option_barbarian = 2
@ -36,7 +36,7 @@ class NewGamePlus(Choice):
Puts the castle in new game plus mode which vastly increases enemy level, but increases gold gain by 50%. Not Puts the castle in new game plus mode which vastly increases enemy level, but increases gold gain by 50%. Not
recommended for those inexperienced to Rogue Legacy! recommended for those inexperienced to Rogue Legacy!
""" """
displayname = "New Game Plus" display_name = "New Game Plus"
option_normal = 0 option_normal = 0
option_new_game_plus = 1 option_new_game_plus = 1
option_new_game_plus_2 = 2 option_new_game_plus_2 = 2
@ -51,7 +51,7 @@ class LevelScaling(Range):
100% level scaling (normal). Setting this too high will result in enemies with absurdly high levels, you have been 100% level scaling (normal). Setting this too high will result in enemies with absurdly high levels, you have been
warned. warned.
""" """
displayname = "Enemy Level Scaling Percentage" display_name = "Enemy Level Scaling Percentage"
range_start = 1 range_start = 1
range_end = 300 range_end = 300
default = 100 default = 100
@ -62,7 +62,7 @@ class FairyChestsPerZone(Range):
Determines the number of Fairy Chests in a given zone that contain items. After these have been checked, only stat Determines the number of Fairy Chests in a given zone that contain items. After these have been checked, only stat
bonuses can be found in Fairy Chests. bonuses can be found in Fairy Chests.
""" """
displayname = "Fairy Chests Per Zone" display_name = "Fairy Chests Per Zone"
range_start = 5 range_start = 5
range_end = 15 range_end = 15
default = 5 default = 5
@ -73,7 +73,7 @@ class ChestsPerZone(Range):
Determines the number of Non-Fairy Chests in a given zone that contain items. After these have been checked, only Determines the number of Non-Fairy Chests in a given zone that contain items. After these have been checked, only
gold or stat bonuses can be found in Chests. gold or stat bonuses can be found in Chests.
""" """
displayname = "Chests Per Zone" display_name = "Chests Per Zone"
range_start = 15 range_start = 15
range_end = 30 range_end = 30
default = 15 default = 15
@ -83,21 +83,21 @@ class UniversalFairyChests(Toggle):
""" """
Determines if fairy chests should be combined into one pool instead of per zone, similar to Risk of Rain 2. Determines if fairy chests should be combined into one pool instead of per zone, similar to Risk of Rain 2.
""" """
displayname = "Universal Fairy Chests" display_name = "Universal Fairy Chests"
class UniversalChests(Toggle): class UniversalChests(Toggle):
""" """
Determines if non-fairy chests should be combined into one pool instead of per zone, similar to Risk of Rain 2. Determines if non-fairy chests should be combined into one pool instead of per zone, similar to Risk of Rain 2.
""" """
displayname = "Universal Non-Fairy Chests" display_name = "Universal Non-Fairy Chests"
class Vendors(Choice): class Vendors(Choice):
""" """
Determines where to place the Blacksmith and Enchantress unlocks in logic (or start with them unlocked). Determines where to place the Blacksmith and Enchantress unlocks in logic (or start with them unlocked).
""" """
displayname = "Vendors" display_name = "Vendors"
option_start_unlocked = 0 option_start_unlocked = 0
option_early = 1 option_early = 1
option_normal = 2 option_normal = 2
@ -109,7 +109,7 @@ class Architect(Choice):
""" """
Determines where the Architect sits in the item pool. Determines where the Architect sits in the item pool.
""" """
displayname = "Architect" display_name = "Architect"
option_start_unlocked = 0 option_start_unlocked = 0
option_normal = 2 option_normal = 2
option_disabled = 3 option_disabled = 3
@ -121,7 +121,7 @@ class ArchitectFee(Range):
Determines how large of a percentage the architect takes from the player when utilizing his services. 100 means he Determines how large of a percentage the architect takes from the player when utilizing his services. 100 means he
takes all your gold. 0 means his services are free. takes all your gold. 0 means his services are free.
""" """
displayname = "Architect Fee Percentage" display_name = "Architect Fee Percentage"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 40 default = 40
@ -131,7 +131,7 @@ class DisableCharon(Toggle):
""" """
Prevents Charon from taking your money when you re-enter the castle. Also removes Haggling from the Item Pool. Prevents Charon from taking your money when you re-enter the castle. Also removes Haggling from the Item Pool.
""" """
displayname = "Disable Charon" display_name = "Disable Charon"
class RequirePurchasing(DefaultOnToggle): class RequirePurchasing(DefaultOnToggle):
@ -139,7 +139,7 @@ class RequirePurchasing(DefaultOnToggle):
Determines where you will be required to purchase equipment and runes from the Blacksmith and Enchantress before Determines where you will be required to purchase equipment and runes from the Blacksmith and Enchantress before
equipping them. If you disable require purchasing, Manor Renovations are scaled to take this into account. equipping them. If you disable require purchasing, Manor Renovations are scaled to take this into account.
""" """
displayname = "Require Purchasing" display_name = "Require Purchasing"
class ProgressiveBlueprints(Toggle): class ProgressiveBlueprints(Toggle):
@ -147,14 +147,14 @@ class ProgressiveBlueprints(Toggle):
Instead of shuffling blueprints randomly into the pool, blueprint unlocks are progressively unlocked. You would get Instead of shuffling blueprints randomly into the pool, blueprint unlocks are progressively unlocked. You would get
Squire first, then Knight, etc., until finally Dark. Squire first, then Knight, etc., until finally Dark.
""" """
displayname = "Progressive Blueprints" display_name = "Progressive Blueprints"
class GoldGainMultiplier(Choice): class GoldGainMultiplier(Choice):
""" """
Adjusts the multiplier for gaining gold from all sources. Adjusts the multiplier for gaining gold from all sources.
""" """
displayname = "Gold Gain Multiplier" display_name = "Gold Gain Multiplier"
option_normal = 0 option_normal = 0
option_quarter = 1 option_quarter = 1
option_half = 2 option_half = 2
@ -167,7 +167,7 @@ class NumberOfChildren(Range):
""" """
Determines the number of offspring you can choose from on the lineage screen after a death. Determines the number of offspring you can choose from on the lineage screen after a death.
""" """
displayname = "Number of Children" display_name = "Number of Children"
range_start = 1 range_start = 1
range_end = 5 range_end = 5
default = 3 default = 3
@ -179,7 +179,7 @@ class AdditionalNames(OptionList):
of names your children can have. The first value will also be your initial character's name depending on Starting of names your children can have. The first value will also be your initial character's name depending on Starting
Gender. Gender.
""" """
displayname = "Additional Names" display_name = "Additional Names"
class AllowDefaultNames(DefaultOnToggle): class AllowDefaultNames(DefaultOnToggle):
@ -187,7 +187,7 @@ class AllowDefaultNames(DefaultOnToggle):
Determines if the default names defined in the vanilla game are allowed to be used. Warning: Your world will not Determines if the default names defined in the vanilla game are allowed to be used. Warning: Your world will not
generate if the number of Additional Names defined is less than the Number of Children value. generate if the number of Additional Names defined is less than the Number of Children value.
""" """
displayname = "Allow Default Names" display_name = "Allow Default Names"
class CastleScaling(Range): class CastleScaling(Range):

View File

@ -4,7 +4,7 @@ from Options import Option, DefaultOnToggle, Range, Choice
class TotalLocations(Range): class TotalLocations(Range):
"""Number of location checks which are added to the Risk of Rain playthrough.""" """Number of location checks which are added to the Risk of Rain playthrough."""
displayname = "Total Locations" display_name = "Total Locations"
range_start = 10 range_start = 10
range_end = 500 range_end = 500
default = 20 default = 20
@ -12,7 +12,7 @@ class TotalLocations(Range):
class TotalRevivals(Range): class TotalRevivals(Range):
"""Total Percentage of `Dio's Best Friend` item put in the item pool.""" """Total Percentage of `Dio's Best Friend` item put in the item pool."""
displayname = "Total Percentage Revivals Available" display_name = "Total Percentage Revivals Available"
range_start = 0 range_start = 0
range_end = 10 range_end = 10
default = 4 default = 4
@ -22,7 +22,7 @@ class ItemPickupStep(Range):
"""Number of items to pick up before an AP Check is completed. """Number of items to pick up before an AP Check is completed.
Setting to 1 means every other pickup. Setting to 1 means every other pickup.
Setting to 2 means every third pickup. So on...""" Setting to 2 means every third pickup. So on..."""
displayname = "Item Pickup Step" display_name = "Item Pickup Step"
range_start = 0 range_start = 0
range_end = 5 range_end = 5
default = 2 default = 2
@ -30,17 +30,17 @@ class ItemPickupStep(Range):
class AllowLunarItems(DefaultOnToggle): class AllowLunarItems(DefaultOnToggle):
"""Allows Lunar items in the item pool.""" """Allows Lunar items in the item pool."""
displayname = "Enable Lunar Item Shuffling" display_name = "Enable Lunar Item Shuffling"
class StartWithRevive(DefaultOnToggle): class StartWithRevive(DefaultOnToggle):
"""Start the game with a `Dio's Best Friend` item.""" """Start the game with a `Dio's Best Friend` item."""
displayname = "Start with a Revive" display_name = "Start with a Revive"
class GreenScrap(Range): class GreenScrap(Range):
"""Weight of Green Scraps in the item pool.""" """Weight of Green Scraps in the item pool."""
displayname = "Green Scraps" display_name = "Green Scraps"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 16 default = 16
@ -48,7 +48,7 @@ class GreenScrap(Range):
class RedScrap(Range): class RedScrap(Range):
"""Weight of Red Scraps in the item pool.""" """Weight of Red Scraps in the item pool."""
displayname = "Red Scraps" display_name = "Red Scraps"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 4 default = 4
@ -56,7 +56,7 @@ class RedScrap(Range):
class YellowScrap(Range): class YellowScrap(Range):
"""Weight of yellow scraps in the item pool.""" """Weight of yellow scraps in the item pool."""
displayname = "Yellow Scraps" display_name = "Yellow Scraps"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 1 default = 1
@ -64,7 +64,7 @@ class YellowScrap(Range):
class WhiteScrap(Range): class WhiteScrap(Range):
"""Weight of white scraps in the item pool.""" """Weight of white scraps in the item pool."""
displayname = "White Scraps" display_name = "White Scraps"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 32 default = 32
@ -72,7 +72,7 @@ class WhiteScrap(Range):
class CommonItem(Range): class CommonItem(Range):
"""Weight of common items in the item pool.""" """Weight of common items in the item pool."""
displayname = "Common Items" display_name = "Common Items"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 64 default = 64
@ -80,7 +80,7 @@ class CommonItem(Range):
class UncommonItem(Range): class UncommonItem(Range):
"""Weight of uncommon items in the item pool.""" """Weight of uncommon items in the item pool."""
displayname = "Uncommon Items" display_name = "Uncommon Items"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 32 default = 32
@ -88,7 +88,7 @@ class UncommonItem(Range):
class LegendaryItem(Range): class LegendaryItem(Range):
"""Weight of legendary items in the item pool.""" """Weight of legendary items in the item pool."""
displayname = "Legendary Items" display_name = "Legendary Items"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 8 default = 8
@ -96,7 +96,7 @@ class LegendaryItem(Range):
class BossItem(Range): class BossItem(Range):
"""Weight of boss items in the item pool.""" """Weight of boss items in the item pool."""
displayname = "Boss Items" display_name = "Boss Items"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 4 default = 4
@ -104,7 +104,7 @@ class BossItem(Range):
class LunarItem(Range): class LunarItem(Range):
"""Weight of lunar items in the item pool.""" """Weight of lunar items in the item pool."""
displayname = "Lunar Items" display_name = "Lunar Items"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 16 default = 16
@ -112,7 +112,7 @@ class LunarItem(Range):
class Equipment(Range): class Equipment(Range):
"""Weight of equipment items in the item pool.""" """Weight of equipment items in the item pool."""
displayname = "Equipment" display_name = "Equipment"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
default = 32 default = 32
@ -120,7 +120,7 @@ class Equipment(Range):
class ItemPoolPresetToggle(DefaultOnToggle): class ItemPoolPresetToggle(DefaultOnToggle):
"""Will use the item weight presets when set to true, otherwise will use the custom set item pool weights.""" """Will use the item weight presets when set to true, otherwise will use the custom set item pool weights."""
displayname = "Item Weight Presets" display_name = "Item Weight Presets"
class ItemWeights(Choice): class ItemWeights(Choice):
"""Preset choices for determining the weights of the item pool.<br> """Preset choices for determining the weights of the item pool.<br>
@ -132,7 +132,7 @@ class ItemWeights(Choice):
No Scraps removes all scrap items from the item pool.<br> No Scraps removes all scrap items from the item pool.<br>
Even generates the item pool with every item having an even weight.<br> Even generates the item pool with every item having an even weight.<br>
Scraps Only will be only scrap items in the item pool.""" Scraps Only will be only scrap items in the item pool."""
displayname = "Item Weights" display_name = "Item Weights"
option_default = 0 option_default = 0
option_new = 1 option_new = 1
option_uncommon = 2 option_uncommon = 2

View File

@ -2,11 +2,11 @@ import typing
from Options import Choice, Range, OptionDict, OptionList, Option, Toggle, DefaultOnToggle from Options import Choice, Range, OptionDict, OptionList, Option, Toggle, DefaultOnToggle
class StartItemsRemovesFromPool(Toggle): class StartItemsRemovesFromPool(Toggle):
displayname = "StartItems Removes From Item Pool" display_name = "StartItems Removes From Item Pool"
class Preset(Choice): class Preset(Choice):
"""choose one of the preset or specify "varia_custom" to use varia_custom_preset option or specify "custom" to use custom_preset option""" """choose one of the preset or specify "varia_custom" to use varia_custom_preset option or specify "custom" to use custom_preset option"""
displayname = "Preset" display_name = "Preset"
option_newbie = 0 option_newbie = 0
option_casual = 1 option_casual = 1
option_regular = 2 option_regular = 2
@ -22,7 +22,7 @@ class Preset(Choice):
default = 2 default = 2
class StartLocation(Choice): class StartLocation(Choice):
displayname = "Start Location" display_name = "Start Location"
option_Ceres = 0 option_Ceres = 0
option_Landing_Site = 1 option_Landing_Site = 1
option_Gauntlet_Top = 2 option_Gauntlet_Top = 2
@ -42,7 +42,7 @@ class StartLocation(Choice):
class DeathLink(Choice): class DeathLink(Choice):
"""When DeathLink is enabled and someone dies, you will die. With survive reserve tanks can save you.""" """When DeathLink is enabled and someone dies, you will die. With survive reserve tanks can save you."""
displayname = "Death Link" display_name = "Death Link"
option_disable = 0 option_disable = 0
option_enable = 1 option_enable = 1
option_enable_survive = 3 option_enable_survive = 3
@ -51,7 +51,7 @@ class DeathLink(Choice):
default = 0 default = 0
class MaxDifficulty(Choice): class MaxDifficulty(Choice):
displayname = "Maximum Difficulty" display_name = "Maximum Difficulty"
option_easy = 0 option_easy = 0
option_medium = 1 option_medium = 1
option_hard = 2 option_hard = 2
@ -62,40 +62,40 @@ class MaxDifficulty(Choice):
default = 4 default = 4
class MorphPlacement(Choice): class MorphPlacement(Choice):
displayname = "Morph Placement" display_name = "Morph Placement"
option_early = 0 option_early = 0
option_normal = 1 option_normal = 1
default = 0 default = 0
class StrictMinors(Toggle): class StrictMinors(Toggle):
displayname = "Strict Minors" display_name = "Strict Minors"
class MissileQty(Range): class MissileQty(Range):
displayname = "Missile Quantity" display_name = "Missile Quantity"
range_start = 10 range_start = 10
range_end = 90 range_end = 90
default = 30 default = 30
class SuperQty(Range): class SuperQty(Range):
displayname = "Super Quantity" display_name = "Super Quantity"
range_start = 10 range_start = 10
range_end = 90 range_end = 90
default = 20 default = 20
class PowerBombQty(Range): class PowerBombQty(Range):
displayname = "Power Bomb Quantity" display_name = "Power Bomb Quantity"
range_start = 10 range_start = 10
range_end = 90 range_end = 90
default = 10 default = 10
class MinorQty(Range): class MinorQty(Range):
displayname = "Minor Quantity" display_name = "Minor Quantity"
range_start = 7 range_start = 7
range_end = 100 range_end = 100
default = 100 default = 100
class EnergyQty(Choice): class EnergyQty(Choice):
displayname = "Energy Quantity" display_name = "Energy Quantity"
option_ultra_sparse = 0 option_ultra_sparse = 0
option_sparse = 1 option_sparse = 1
option_medium = 2 option_medium = 2
@ -103,7 +103,7 @@ class EnergyQty(Choice):
default = 3 default = 3
class AreaRandomization(Choice): class AreaRandomization(Choice):
displayname = "Area Randomization" display_name = "Area Randomization"
option_off = 0 option_off = 0
option_light = 1 option_light = 1
option_on = 2 option_on = 2
@ -112,47 +112,47 @@ class AreaRandomization(Choice):
default = 0 default = 0
class AreaLayout(Toggle): class AreaLayout(Toggle):
displayname = "Area Layout" display_name = "Area Layout"
class DoorsColorsRando(Toggle): class DoorsColorsRando(Toggle):
displayname = "Doors Colors Rando" display_name = "Doors Colors Rando"
class AllowGreyDoors(Toggle): class AllowGreyDoors(Toggle):
displayname = "Allow Grey Doors" display_name = "Allow Grey Doors"
class BossRandomization(Toggle): class BossRandomization(Toggle):
displayname = "Boss Randomization" display_name = "Boss Randomization"
class FunCombat(Toggle): class FunCombat(Toggle):
"""if used, might force 'items' accessibility""" """if used, might force 'items' accessibility"""
displayname = "Fun Combat" display_name = "Fun Combat"
class FunMovement(Toggle): class FunMovement(Toggle):
"""if used, might force 'items' accessibility""" """if used, might force 'items' accessibility"""
displayname = "Fun Movement" display_name = "Fun Movement"
class FunSuits(Toggle): class FunSuits(Toggle):
"""if used, might force 'items' accessibility""" """if used, might force 'items' accessibility"""
displayname = "Fun Suits" display_name = "Fun Suits"
class LayoutPatches(DefaultOnToggle): class LayoutPatches(DefaultOnToggle):
displayname = "Layout Patches" display_name = "Layout Patches"
class VariaTweaks(Toggle): class VariaTweaks(Toggle):
displayname = "Varia Tweaks" display_name = "Varia Tweaks"
class NerfedCharge(Toggle): class NerfedCharge(Toggle):
displayname = "Nerfed Charge" display_name = "Nerfed Charge"
class GravityBehaviour(Choice): class GravityBehaviour(Choice):
displayname = "Gravity Behaviour" display_name = "Gravity Behaviour"
option_Vanilla = 0 option_Vanilla = 0
option_Balanced = 1 option_Balanced = 1
option_Progressive = 2 option_Progressive = 2
default = 1 default = 1
class ElevatorsDoorsSpeed(DefaultOnToggle): class ElevatorsDoorsSpeed(DefaultOnToggle):
displayname = "Elevators doors speed" display_name = "Elevators doors speed"
class SpinJumpRestart(Toggle): class SpinJumpRestart(Toggle):
displayname = "Spin Jump Restart" displayname = "Spin Jump Restart"

View File

@ -3,11 +3,11 @@ from Options import Option, DefaultOnToggle, Range
class EnableCoinStars(DefaultOnToggle): class EnableCoinStars(DefaultOnToggle):
"""Disable to Ignore 100 Coin Stars. You can still collect them, but they don't do anything""" """Disable to Ignore 100 Coin Stars. You can still collect them, but they don't do anything"""
displayname = "Enable 100 Coin Stars" display_name = "Enable 100 Coin Stars"
class StrictCapRequirements(DefaultOnToggle): class StrictCapRequirements(DefaultOnToggle):
"""If disabled, Stars that expect special caps may have to be acquired without the caps""" """If disabled, Stars that expect special caps may have to be acquired without the caps"""
displayname = "Strict Cap Requirements" display_name = "Strict Cap Requirements"
class StarsToFinish(Range): class StarsToFinish(Range):
"""How many stars are required at the infinite stairs""" """How many stars are required at the infinite stairs"""

View File

@ -27,7 +27,7 @@ class OffOnFullChoice(Choice):
class Difficulty(EvermizerFlags, Choice): class Difficulty(EvermizerFlags, Choice):
"""Changes relative spell cost and stuff""" """Changes relative spell cost and stuff"""
displayname = "Difficulty" display_name = "Difficulty"
option_easy = 0 option_easy = 0
option_normal = 1 option_normal = 1
option_hard = 2 option_hard = 2
@ -39,7 +39,7 @@ class Difficulty(EvermizerFlags, Choice):
class MoneyModifier(Range): class MoneyModifier(Range):
"""Money multiplier in %""" """Money multiplier in %"""
displayname = "Money Modifier" display_name = "Money Modifier"
range_start = 1 range_start = 1
range_end = 2500 range_end = 2500
default = 200 default = 200
@ -47,7 +47,7 @@ class MoneyModifier(Range):
class ExpModifier(Range): class ExpModifier(Range):
"""EXP multiplier for Weapons, Characters and Spells in %""" """EXP multiplier for Weapons, Characters and Spells in %"""
displayname = "Exp Modifier" display_name = "Exp Modifier"
range_start = 1 range_start = 1
range_end = 2500 range_end = 2500
default = 200 default = 200
@ -55,76 +55,76 @@ class ExpModifier(Range):
class FixSequence(EvermizerFlag, DefaultOnToggle): class FixSequence(EvermizerFlag, DefaultOnToggle):
"""Fix some sequence breaks""" """Fix some sequence breaks"""
displayname = "Fix Sequence" display_name = "Fix Sequence"
flag = '1' flag = '1'
class FixCheats(EvermizerFlag, DefaultOnToggle): class FixCheats(EvermizerFlag, DefaultOnToggle):
"""Fix cheats left in by the devs (not desert skip)""" """Fix cheats left in by the devs (not desert skip)"""
displayname = "Fix Cheats" display_name = "Fix Cheats"
flag = '2' flag = '2'
class FixInfiniteAmmo(EvermizerFlag, Toggle): class FixInfiniteAmmo(EvermizerFlag, Toggle):
"""Fix infinite ammo glitch""" """Fix infinite ammo glitch"""
displayname = "Fix Infinite Ammo" display_name = "Fix Infinite Ammo"
flag = '5' flag = '5'
class FixAtlasGlitch(EvermizerFlag, Toggle): class FixAtlasGlitch(EvermizerFlag, Toggle):
"""Fix atlas underflowing stats""" """Fix atlas underflowing stats"""
displayname = "Fix Atlas Glitch" display_name = "Fix Atlas Glitch"
flag = '6' flag = '6'
class FixWingsGlitch(EvermizerFlag, Toggle): class FixWingsGlitch(EvermizerFlag, Toggle):
"""Fix wings making you invincible in some areas""" """Fix wings making you invincible in some areas"""
displayname = "Fix Wings Glitch" display_name = "Fix Wings Glitch"
flag = '7' flag = '7'
class ShorterDialogs(EvermizerFlag, DefaultOnToggle): class ShorterDialogs(EvermizerFlag, DefaultOnToggle):
"""Cuts some dialogs""" """Cuts some dialogs"""
displayname = "Shorter Dialogs" display_name = "Shorter Dialogs"
flag = '9' flag = '9'
class ShortBossRush(EvermizerFlag, DefaultOnToggle): class ShortBossRush(EvermizerFlag, DefaultOnToggle):
"""Start boss rush at Metal Magmar, cut enemy HP in half""" """Start boss rush at Metal Magmar, cut enemy HP in half"""
displayname = "Short Boss Rush" display_name = "Short Boss Rush"
flag = 'f' flag = 'f'
class Ingredienizer(EvermizerFlags, OffOnFullChoice): class Ingredienizer(EvermizerFlags, OffOnFullChoice):
"""On Shuffles, Full randomizes spell ingredients""" """On Shuffles, Full randomizes spell ingredients"""
displayname = "Ingredienizer" display_name = "Ingredienizer"
default = 1 default = 1
flags = ['i', '', 'I'] flags = ['i', '', 'I']
class Sniffamizer(EvermizerFlags, OffOnFullChoice): class Sniffamizer(EvermizerFlags, OffOnFullChoice):
"""On Shuffles, Full randomizes drops in sniff locations""" """On Shuffles, Full randomizes drops in sniff locations"""
displayname = "Sniffamizer" display_name = "Sniffamizer"
default = 1 default = 1
flags = ['s', '', 'S'] flags = ['s', '', 'S']
class Callbeadamizer(EvermizerFlags, OffOnFullChoice): class Callbeadamizer(EvermizerFlags, OffOnFullChoice):
"""On Shuffles call bead characters, Full shuffles individual spells""" """On Shuffles call bead characters, Full shuffles individual spells"""
displayname = "Callbeadamizer" display_name = "Callbeadamizer"
default = 1 default = 1
flags = ['c', '', 'C'] flags = ['c', '', 'C']
class Musicmizer(EvermizerFlag, Toggle): class Musicmizer(EvermizerFlag, Toggle):
"""Randomize music for some rooms""" """Randomize music for some rooms"""
displayname = "Musicmizer" display_name = "Musicmizer"
flag = 'm' flag = 'm'
class Doggomizer(EvermizerFlags, OffOnFullChoice): class Doggomizer(EvermizerFlags, OffOnFullChoice):
"""On shuffles dog per act, Full randomizes dog per screen, Pupdunk gives you Everpupper everywhere""" """On shuffles dog per act, Full randomizes dog per screen, Pupdunk gives you Everpupper everywhere"""
displayname = "Doggomizer" display_name = "Doggomizer"
option_pupdunk = 3 option_pupdunk = 3
default = 0 default = 0
flags = ['', 'd', 'D', 'p'] flags = ['', 'd', 'D', 'p']
@ -132,7 +132,7 @@ class Doggomizer(EvermizerFlags, OffOnFullChoice):
class TurdoMode(EvermizerFlag, Toggle): class TurdoMode(EvermizerFlag, Toggle):
"""Replace offensive spells by Turd Balls with varying strength and make weapons weak""" """Replace offensive spells by Turd Balls with varying strength and make weapons weak"""
displayname = "Turdo Mode" display_name = "Turdo Mode"
flag = 't' flag = 't'