Templates: Remove auto wordwrap, fix manual indentation, and reformat docstrings for world options in main. (#1201)

* Fix wrapping too early if docstring is within 120 characters and re-indent other lines.

* Remove auto-word wrapping and tweaked all worlds' option docstrings formatting.

Options should wrap around the 120 character mark to prevent template files from being too long horizontally. This also allows manual-indentation to work again.

* Fix missing '#' on empty lines in output from docstring.
This commit is contained in:
Zach Parks 2022-11-06 08:28:16 -06:00 committed by GitHub
parent d10bb3c6c1
commit 462ddce72c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 142 additions and 82 deletions

View File

@ -21,10 +21,10 @@
# https://archipelago.gg/check # https://archipelago.gg/check
# Your name in-game. Spaces will be replaced with underscores and there is a 16-character limit. # Your name in-game. Spaces will be replaced with underscores and there is a 16-character limit.
# {player} will be replaced with the player's slot number. # {player} will be replaced with the player's slot number.
# {PLAYER} will be replaced with the player's slot number, if that slot number is greater than 1. # {PLAYER} will be replaced with the player's slot number, if that slot number is greater than 1.
# {number} will be replaced with the counter value of the name. # {number} will be replaced with the counter value of the name.
# {NUMBER} will be replaced with the counter value of the name, if the counter value is greater than 1. # {NUMBER} will be replaced with the counter value of the name, if the counter value is greater than 1.
name: Player{number} name: Player{number}
# Used to describe your yaml. Useful if you have multiple files. # Used to describe your yaml. Useful if you have multiple files.
@ -49,12 +49,11 @@ requires:
{{ option_key }}: {{ option_key }}:
{%- if option.__doc__ %} {%- if option.__doc__ %}
# {{ option.__doc__ # {{ option.__doc__
| trim | trim
| wordwrap(112, wrapstring="\n# ") | replace('\n\n', '\n \n')
| replace(' ', '') | replace('\n ', '\n# ')
| replace('\n ', '\n# ') | indent(4, first=False)
| indent(4, first=False) }}
}}
{%- endif -%} {%- endif -%}
{%- if option.__doc__ and option.range_start is defined %} {%- if option.__doc__ and option.range_start is defined %}
@ -82,5 +81,5 @@ requires:
{%- else %} {%- else %}
{{ yaml_dump(option.default) | trim | indent(4, first=false) }} {{ yaml_dump(option.default) | trim | indent(4, first=false) }}
{%- endif -%} {%- endif -%}
{{ "\n" }}
{%- endfor %} {%- endfor %}

View File

@ -23,11 +23,11 @@ option_docstrings = {
"RandomizeDreamers": "Allow for Dreamers to be randomized into the item pool and opens their locations for " "RandomizeDreamers": "Allow for Dreamers to be randomized into the item pool and opens their locations for "
"randomization.", "randomization.",
"RandomizeSkills": "Allow for Skills, such as Mantis Claw or Shade Soul, to be randomized into the item pool. " "RandomizeSkills": "Allow for Skills, such as Mantis Claw or Shade Soul, to be randomized into the item pool. "
"Also opens their locations for receiving randomized items.", "Also opens their locations\n for receiving randomized items.",
"RandomizeFocus": "Removes the ability to focus and randomizes it into the item pool.", "RandomizeFocus": "Removes the ability to focus and randomizes it into the item pool.",
"RandomizeSwim": "Removes the ability to swim in water and randomizes it into the item pool.", "RandomizeSwim": "Removes the ability to swim in water and randomizes it into the item pool.",
"RandomizeCharms": "Allow for Charms to be randomized into the item pool and open their locations for " "RandomizeCharms": "Allow for Charms to be randomized into the item pool and open their locations for "
"randomization. Includes Charms sold in shops.", "randomization. Includes Charms\n sold in shops.",
"RandomizeKeys": "Allow for Keys to be randomized into the item pool. Includes those sold in shops.", "RandomizeKeys": "Allow for Keys to be randomized into the item pool. Includes those sold in shops.",
"RandomizeMaskShards": "Allow for Mask Shard to be randomized into the item pool and open their locations for" "RandomizeMaskShards": "Allow for Mask Shard to be randomized into the item pool and open their locations for"
" randomization.", " randomization.",
@ -44,15 +44,15 @@ option_docstrings = {
"RandomizeRelics": "Randomize Relics (King's Idol, et al.) into the item pool and open their locations for" "RandomizeRelics": "Randomize Relics (King's Idol, et al.) into the item pool and open their locations for"
" randomization.", " randomization.",
"RandomizeWhisperingRoots": "Randomize the essence rewards from Whispering Roots into the item pool. Whispering " "RandomizeWhisperingRoots": "Randomize the essence rewards from Whispering Roots into the item pool. Whispering "
"Roots will now grant a randomized item when completed. This can be previewed by " "Roots will now grant a randomized\n item when completed. This can be previewed by "
"standing on the root.", "standing on the root.",
"RandomizeBossEssence": "Randomize boss essence drops, such as those for defeating Warrior Dreams, into the item " "RandomizeBossEssence": "Randomize boss essence drops, such as those for defeating Warrior Dreams, into the item "
"pool and open their locations for randomization.", "pool and open their locations\n for randomization.",
"RandomizeGrubs": "Randomize Grubs into the item pool and open their locations for randomization.", "RandomizeGrubs": "Randomize Grubs into the item pool and open their locations for randomization.",
"RandomizeMimics": "Randomize Mimic Grubs into the item pool and open their locations for randomization." "RandomizeMimics": "Randomize Mimic Grubs into the item pool and open their locations for randomization."
"Mimic Grubs are always placed in your own game.", "Mimic Grubs are always placed\n in your own game.",
"RandomizeMaps": "Randomize Maps into the item pool. This causes Cornifer to give you a message allowing you to see" "RandomizeMaps": "Randomize Maps into the item pool. This causes Cornifer to give you a message allowing you to see"
" and buy an item that is randomized into that location as well.", " and buy an item\n that is randomized into that location as well.",
"RandomizeStags": "Randomize Stag Stations unlocks into the item pool as well as placing randomized items " "RandomizeStags": "Randomize Stag Stations unlocks into the item pool as well as placing randomized items "
"on the stag station bell/toll.", "on the stag station bell/toll.",
"RandomizeLifebloodCocoons": "Randomize Lifeblood Cocoon grants into the item pool and open their locations" "RandomizeLifebloodCocoons": "Randomize Lifeblood Cocoon grants into the item pool and open their locations"
@ -60,7 +60,7 @@ option_docstrings = {
"RandomizeGrimmkinFlames": "Randomize Grimmkin Flames into the item pool and open their locations for " "RandomizeGrimmkinFlames": "Randomize Grimmkin Flames into the item pool and open their locations for "
"randomization.", "randomization.",
"RandomizeJournalEntries": "Randomize the Hunter's Journal as well as the findable journal entries into the item " "RandomizeJournalEntries": "Randomize the Hunter's Journal as well as the findable journal entries into the item "
"pool, and open their locations for randomization. Does not include journal entries " "pool, and open their locations\n for randomization. Does not include journal entries "
"gained by killing enemies.", "gained by killing enemies.",
"RandomizeNail": "Removes the ability to swing the nail left, right and up, and shuffles these into the item pool.", "RandomizeNail": "Removes the ability to swing the nail left, right and up, and shuffles these into the item pool.",
"RandomizeGeoRocks": "Randomize Geo Rock rewards into the item pool and open their locations for randomization.", "RandomizeGeoRocks": "Randomize Geo Rock rewards into the item pool and open their locations for randomization.",
@ -68,9 +68,9 @@ option_docstrings = {
"RandomizeSoulTotems": "Randomize Soul Refill items into the item pool and open the Soul Totem locations for" "RandomizeSoulTotems": "Randomize Soul Refill items into the item pool and open the Soul Totem locations for"
" randomization.", " randomization.",
"RandomizeLoreTablets": "Randomize Lore items into the itempool, one per Lore Tablet, and place randomized item " "RandomizeLoreTablets": "Randomize Lore items into the itempool, one per Lore Tablet, and place randomized item "
"grants on the tablets themselves. You must still read the tablet to get the item.", "grants on the tablets themselves.\n You must still read the tablet to get the item.",
"PreciseMovement": "Places skips into logic which require extremely precise player movement, possibly without " "PreciseMovement": "Places skips into logic which require extremely precise player movement, possibly without "
"movement skills such as dash or hook.", "movement skills such as\n dash or hook.",
"ProficientCombat": "Places skips into logic which require proficient combat, possibly with limited items.", "ProficientCombat": "Places skips into logic which require proficient combat, possibly with limited items.",
"BackgroundObjectPogos": "Places skips into logic for locations which are reachable via pogoing off of " "BackgroundObjectPogos": "Places skips into logic for locations which are reachable via pogoing off of "
"background objects.", "background objects.",
@ -299,7 +299,8 @@ class SlyShopSlots(Range):
class SlyKeyShopSlots(Range): class SlyKeyShopSlots(Range):
"""For each extra slot, add a location to the Sly Shop (requiring Shopkeeper's Key) and a filler item to the item pool.""" """For each extra slot, add a location to the Sly Shop (requiring Shopkeeper's Key) and a filler item to the item
pool."""
display_name = "Sly Key Shop Slots" display_name = "Sly Key Shop Slots"
default = 6 default = 6
@ -324,7 +325,8 @@ class SalubraShopSlots(Range):
class SalubraCharmShopSlots(Range): class SalubraCharmShopSlots(Range):
"""For each extra slot, add a location to the Salubra Shop (requiring Charms), and a filler item to the item pool.""" """For each extra slot, add a location to the Salubra Shop (requiring Charms), and a filler item to the item
pool."""
display_name = "Salubra Charm Shop Slots" display_name = "Salubra Charm Shop Slots"
default = 5 default = 5

View File

@ -47,7 +47,8 @@ class StructureCompasses(DefaultOnToggle):
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."""
display_name = "Bee Trap Percentage" display_name = "Bee Trap Percentage"
range_start = 0 range_start = 0
range_end = 100 range_end = 100

View File

@ -208,7 +208,8 @@ 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."""
display_name = "Navi Idle Outer" display_name = "Navi Idle Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
@ -265,7 +266,8 @@ 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."""
display_name = "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
@ -322,7 +324,8 @@ 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."""
display_name = "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
@ -379,7 +382,8 @@ 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."""
display_name = "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
@ -427,7 +431,8 @@ 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."""
display_name = "Sword Trail Outer" display_name = "Sword Trail Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
@ -465,7 +470,8 @@ 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."""
display_name = "Bombchu Trail Outer" display_name = "Bombchu Trail Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
@ -503,7 +509,8 @@ class boomerang_trail_color_inner(Choice):
class boomerang_trail_color_outer(Choice): class boomerang_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."""
display_name = "Boomerang Trail Outer" display_name = "Boomerang Trail Outer"
option_random_choice = 0 option_random_choice = 0
option_completely_random = 1 option_completely_random = 1
@ -646,7 +653,8 @@ class start_button_color(Choice):
class sfx_navi_overworld(Choice): class sfx_navi_overworld(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Navi Overworld" display_name = "Navi Overworld"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -685,7 +693,8 @@ class sfx_navi_overworld(Choice):
class sfx_navi_enemy(Choice): class sfx_navi_enemy(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Navi Enemy" display_name = "Navi Enemy"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -724,7 +733,8 @@ class sfx_navi_enemy(Choice):
class sfx_low_hp(Choice): class sfx_low_hp(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Low HP" display_name = "Low HP"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -761,7 +771,8 @@ class sfx_low_hp(Choice):
class sfx_menu_cursor(Choice): class sfx_menu_cursor(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Menu Cursor" display_name = "Menu Cursor"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -833,7 +844,8 @@ class sfx_menu_cursor(Choice):
class sfx_menu_select(Choice): class sfx_menu_select(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Menu Select" display_name = "Menu Select"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -907,7 +919,8 @@ class sfx_menu_select(Choice):
class sfx_nightfall(Choice): class sfx_nightfall(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Nightfall" display_name = "Nightfall"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -926,7 +939,8 @@ class sfx_nightfall(Choice):
class sfx_horse_neigh(Choice): class sfx_horse_neigh(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Horse" display_name = "Horse"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1
@ -945,7 +959,8 @@ class sfx_horse_neigh(Choice):
class sfx_hover_boots(Choice): class sfx_hover_boots(Choice):
"""Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option. "completely_random" selects any random sound.""" """Choose a sound effect. "random_choice" selects a random option. "random_ear_safe" selects a random safe option.
"completely_random" selects any random sound."""
display_name = "Hover Boots" display_name = "Hover Boots"
option_default = 0 option_default = 0
option_completely_random = 1 option_completely_random = 1

View File

@ -121,7 +121,8 @@ class StartingAge(Choice):
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."""
display_name = "Shuffle Interior Entrances" display_name = "Shuffle Interior Entrances"
option_off = 0 option_off = 0
option_simple = 1 option_simple = 1
@ -160,7 +161,8 @@ class SpawnPositions(Toggle):
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."""
display_name = "Mix Entrance Pools" display_name = "Mix Entrance Pools"
option_off = 0 option_off = 0
option_indoor = 1 option_indoor = 1
@ -168,7 +170,8 @@ 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."""
display_name = "Decouple Entrances" display_name = "Decouple Entrances"
@ -186,7 +189,8 @@ class TriforceGoal(Range):
class ExtraTriforces(Range): class ExtraTriforces(Range):
"""Percentage of additional Triforce pieces in the pool. With high numbers, you may need to randomize additional locations to have enough items.""" """Percentage of additional Triforce pieces in the pool. With high numbers, you may need to randomize additional
locations to have enough items."""
display_name = "Percentage of Extra Triforce Pieces" display_name = "Percentage of Extra Triforce Pieces"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
@ -194,7 +198,8 @@ class ExtraTriforces(Range):
class LogicalChus(Toggle): class LogicalChus(Toggle):
"""Bombchus are properly considered in logic. The first found pack will have 20 chus; Kokiri Shop and Bazaar sell refills; bombchus open Bombchu Bowling.""" """Bombchus are properly considered in logic. The first found pack will have 20 chus; Kokiri Shop and Bazaar sell
refills; bombchus open Bombchu Bowling."""
display_name = "Bombchus Considered in Logic" display_name = "Bombchus Considered in Logic"
@ -525,7 +530,8 @@ class CompleteMaskQuest(Toggle):
class UsefulCutscenes(Toggle): class UsefulCutscenes(Toggle):
"""Reenables the Poe cutscene in Forest Temple, Darunia in Fire Temple, and Twinrova introduction. Mostly useful for glitched.""" """Reenables the Poe cutscene in Forest Temple, Darunia in Fire Temple, and Twinrova introduction. Mostly useful for
glitched."""
display_name = "Enable Useful Cutscenes" display_name = "Enable Useful Cutscenes"
@ -846,8 +852,10 @@ sfx_options: typing.Dict[str, type(Option)] = {
class LogicTricks(OptionList): class LogicTricks(OptionList):
"""Set various tricks for logic in Ocarina of Time. """Set various tricks for logic in Ocarina of Time.
Format as a comma-separated list of "nice" names: ["Fewer Tunic Requirements", "Hidden Grottos without Stone of Agony"]. Format as a comma-separated list of "nice" names: ["Fewer Tunic Requirements", "Hidden Grottos without Stone of Agony"].
A full list of supported tricks can be found at https://github.com/ArchipelagoMW/Archipelago/blob/main/worlds/oot/LogicTricks.py""" A full list of supported tricks can be found at:
https://github.com/ArchipelagoMW/Archipelago/blob/main/worlds/oot/LogicTricks.py
"""
display_name = "Logic Tricks" display_name = "Logic Tricks"
valid_keys = frozenset(normalized_name_tricks) valid_keys = frozenset(normalized_name_tricks)
valid_keys_casefold = True valid_keys_casefold = True

View File

@ -9,17 +9,20 @@ class OC2OnToggle(DefaultOnToggle):
class AlwaysServeOldestOrder(OC2OnToggle): class AlwaysServeOldestOrder(OC2OnToggle):
"""Modifies the game so that serving an expired order doesn't target the ticket with the highest tip. This helps players dig out of a broken tip combo faster.""" """Modifies the game so that serving an expired order doesn't target the ticket with the highest tip. This helps
players dig out of a broken tip combo faster."""
display_name = "Always Serve Oldest Order" display_name = "Always Serve Oldest Order"
class AlwaysPreserveCookingProgress(OC2OnToggle): class AlwaysPreserveCookingProgress(OC2OnToggle):
"""Modifies the game to behave more like AYCE, where adding an item to an in-progress container doesn't reset the entire progress bar.""" """Modifies the game to behave more like AYCE, where adding an item to an in-progress container doesn't reset the
entire progress bar."""
display_name = "Preserve Cooking/Mixing Progress" display_name = "Preserve Cooking/Mixing Progress"
class DisplayLeaderboardScores(OC2OnToggle): class DisplayLeaderboardScores(OC2OnToggle):
"""Modifies the Overworld map to fetch and display the current world records for each level. Press number keys 1-4 to view leaderboard scores for that number of players.""" """Modifies the Overworld map to fetch and display the current world records for each level. Press number keys 1-4
to view leaderboard scores for that number of players."""
display_name = "Display Leaderboard Scores" display_name = "Display Leaderboard Scores"
@ -29,7 +32,8 @@ class ShuffleLevelOrder(OC2OnToggle):
class IncludeHordeLevels(OC2OnToggle): class IncludeHordeLevels(OC2OnToggle):
"""Includes "Horde Defence" levels in the pool of possible kitchens when Shuffle Level Order is enabled. Also adds two horde-specific items into the item pool.""" """Includes "Horde Defence" levels in the pool of possible kitchens when Shuffle Level Order is enabled. Also adds
two horde-specific items into the item pool."""
display_name = "Include Horde Levels" display_name = "Include Horde Levels"
@ -48,9 +52,11 @@ class FixBugs(OC2OnToggle):
class ShorterLevelDuration(OC2OnToggle): class ShorterLevelDuration(OC2OnToggle):
"""Modifies level duration to be about 1/3rd shorter than in the original game, thus bringing the item discovery pace in line with other popular Archipelago games. """Modifies level duration to be about 1/3rd shorter than in the original game, thus bringing the item discovery
pace in line with other popular Archipelago games.
Points required to earn stars are scaled accordingly. ("Boss Levels" which change scenery mid-game are not affected.)""" Points required to earn stars are scaled accordingly. ("Boss Levels" which change scenery mid-game are not
affected.)"""
display_name = "Shorter Level Duration" display_name = "Shorter Level Duration"
@ -61,7 +67,8 @@ class PrepLevels(Choice):
- Excluded: Prep Levels are excluded from the pool during level shuffling - Excluded: Prep Levels are excluded from the pool during level shuffling
- All You Can Eat: Prep Levels may appear, but the timer automatically starts. The star score requirements are also adjusted to use the All You Can Eat World Record (if it exists)""" - All You Can Eat: Prep Levels may appear, but the timer automatically starts. The star score requirements are also
adjusted to use the All You Can Eat World Record (if it exists)"""
auto_display_name = True auto_display_name = True
display_name = "Prep Level Behavior" display_name = "Prep Level Behavior"
option_original = 0 option_original = 0
@ -73,7 +80,8 @@ class PrepLevels(Choice):
class StarsToWin(Range): class StarsToWin(Range):
"""Number of stars required to unlock 6-6. """Number of stars required to unlock 6-6.
Level purchase requirements between 1-1 and 6-6 will be spread between these two numbers. Using too high of a number may result in more frequent generation failures, especially when horde levels are enabled.""" Level purchase requirements between 1-1 and 6-6 will be spread between these two numbers. Using too high of a number
may result in more frequent generation failures, especially when horde levels are enabled."""
display_name = "Stars to Win" display_name = "Stars to Win"
range_start = 0 range_start = 0
range_end = 100 range_end = 100
@ -81,7 +89,8 @@ class StarsToWin(Range):
class StarThresholdScale(Range): class StarThresholdScale(Range):
"""How difficult should the third star for each level be on a scale of 1-100%, where 100% is the current world record score and 45% is the average vanilla 4-star score.""" """How difficult should the third star for each level be on a scale of 1-100%, where 100% is the current world
record score and 45% is the average vanilla 4-star score."""
display_name = "Star Difficulty %" display_name = "Star Difficulty %"
range_start = 1 range_start = 1
range_end = 100 range_end = 100

View File

@ -15,7 +15,9 @@ class MaximumResourcePackAmount(Range):
default = 5 default = 5
class DuplicateItems(Choice): class DuplicateItems(Choice):
"""Adds duplicates of items to the item pool (if configured in Filler items). These will be selected alongside Resource Packs (if configured). Note that there are not many progression items, and selecting Progression may produce many of the same duplicate item.""" """Adds duplicates of items to the item pool (if configured in Filler items). These will be selected alongside
Resource Packs (if configured). Note that there are not many progression items, and selecting Progression may
produce many of the same duplicate item."""
display_name = "Duplicate items" display_name = "Duplicate items"
option_progression = 0 option_progression = 0
option_non_progression = 1 option_non_progression = 1
@ -59,11 +61,13 @@ class ProgressiveItems(DefaultOnToggle):
display_name = "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. Big islands are available from the start of the game, however it can take a long time to find them.""" """Allows recipes that require items from big islands (eg leather) to lock earlygame items like the Receiver, Bolt,
or Smelter. Big islands are available from the start of the game, however it can take a long time to find them."""
display_name = "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."""
display_name = "Paddleboard Mode" display_name = "Paddleboard Mode"
raft_options = { raft_options = {

View File

@ -163,7 +163,8 @@ class ChaoRaceChecks(Choice):
""" """
Determines which Chao Races grant checks Determines which Chao Races grant checks
All: Each individual race grants a check All: Each individual race grants a check
Prize: Only the races which grant Chao Toys grant checks (final race of each Beginner and Jewel cup, 4th, 8th, and 12th Challenge Races, 2nd and 4th Hero and Dark Races) Prize: Only the races which grant Chao Toys grant checks (final race of each Beginner and Jewel cup, 4th, 8th, and
12th Challenge Races, 2nd and 4th Hero and Dark Races)
""" """
display_name = "Chao Race Checks" display_name = "Chao Race Checks"
option_all = 0 option_all = 0

View File

@ -13,16 +13,16 @@ class GameDifficulty(Choice):
class UpgradeBonus(Choice): class UpgradeBonus(Choice):
"""Determines what lab upgrade to use, whether it is Ultra-Capacitors which boost attack speed with every weapon upgrade """Determines what lab upgrade to use, whether it is Ultra-Capacitors which boost attack speed with every weapon
or Vanadium Plating which boosts life with every armor upgrade.""" upgrade or Vanadium Plating which boosts life with every armor upgrade."""
display_name = "Upgrade Bonus" display_name = "Upgrade Bonus"
option_ultra_capacitors = 0 option_ultra_capacitors = 0
option_vanadium_plating = 1 option_vanadium_plating = 1
class BunkerUpgrade(Choice): class BunkerUpgrade(Choice):
"""Determines what bunker lab upgrade to use, whether it is Shrike Turret which outfits bunkers with an automated turret or """Determines what bunker lab upgrade to use, whether it is Shrike Turret which outfits bunkers with an automated
Fortified Bunker which boosts the life of bunkers.""" turret or Fortified Bunker which boosts the life of bunkers."""
display_name = "Bunker Upgrade" display_name = "Bunker Upgrade"
option_shrike_turret = 0 option_shrike_turret = 0
option_fortified_bunker = 1 option_fortified_bunker = 1
@ -56,14 +56,17 @@ class MissionOrder(Choice):
class ShuffleProtoss(DefaultOnToggle): class ShuffleProtoss(DefaultOnToggle):
"""Determines if the 3 protoss missions are included in the shuffle if Vanilla mission order is not enabled. """Determines if the 3 protoss missions are included in the shuffle if Vanilla mission order is not enabled.
If turned off with Vanilla Shuffled, the 3 protoss missions will be in their normal position on the Prophecy chain if not shuffled. If turned off with Vanilla Shuffled, the 3 protoss missions will be in their normal position on the Prophecy chain
If turned off with reduced mission settings, the 3 protoss missions will not appear and Protoss units are removed from the pool.""" if not shuffled.
If turned off with reduced mission settings, the 3 protoss missions will not appear and Protoss units are removed
from the pool."""
display_name = "Shuffle Protoss Missions" display_name = "Shuffle Protoss Missions"
class ShuffleNoBuild(DefaultOnToggle): class ShuffleNoBuild(DefaultOnToggle):
"""Determines if the 5 no-build missions are included in the shuffle if Vanilla mission order is not enabled. """Determines if the 5 no-build missions are included in the shuffle if Vanilla mission order is not enabled.
If turned off with Vanilla Shuffled, one no-build mission will be placed as the first mission and the rest will be placed at the end of optional routes. If turned off with Vanilla Shuffled, one no-build mission will be placed as the first mission and the rest will be
placed at the end of optional routes.
If turned off with reduced mission settings, the 5 no-build missions will not appear.""" If turned off with reduced mission settings, the 5 no-build missions will not appear."""
display_name = "Shuffle No-Build Missions" display_name = "Shuffle No-Build Missions"
@ -74,7 +77,9 @@ class EarlyUnit(DefaultOnToggle):
class RequiredTactics(Choice): class RequiredTactics(Choice):
"""Determines the maximum tactical difficulty of the seed (separate from mission difficulty). Higher settings increase randomness. """Determines the maximum tactical difficulty of the seed (separate from mission difficulty). Higher settings
increase randomness.
Standard: All missions can be completed with good micro and macro. Standard: All missions can be completed with good micro and macro.
Advanced: Completing missions may require relying on starting units and micro-heavy units. Advanced: Completing missions may require relying on starting units and micro-heavy units.
No Logic: Units and upgrades may be placed anywhere. LIKELY TO RENDER THE RUN IMPOSSIBLE ON HARDER DIFFICULTIES!""" No Logic: Units and upgrades may be placed anywhere. LIKELY TO RENDER THE RUN IMPOSSIBLE ON HARDER DIFFICULTIES!"""

View File

@ -6,7 +6,8 @@ class StartItemsRemovesFromPool(Toggle):
display_name = "StartItems Removes From Item Pool" display_name = "StartItems Removes From Item Pool"
class Preset(Choice): class Preset(Choice):
"""Choose one of the presets or specify "varia_custom" to use varia_custom_preset option or specify "custom" to use custom_preset option.""" """Choose one of the presets or specify "varia_custom" to use varia_custom_preset option or specify "custom" to use
custom_preset option."""
display_name = "Preset" display_name = "Preset"
option_newbie = 0 option_newbie = 0
option_casual = 1 option_casual = 1
@ -57,7 +58,8 @@ class RemoteItems(Toggle):
display_name = "Remote Items" display_name = "Remote Items"
class MaxDifficulty(Choice): class MaxDifficulty(Choice):
"""Depending on the perceived difficulties of the techniques, bosses, hell runs etc. from the preset, it will prevent the Randomizer from placing an item in a location too difficult to reach with the current items.""" """Depending on the perceived difficulties of the techniques, bosses, hell runs etc. from the preset, it will
prevent the Randomizer from placing an item in a location too difficult to reach with the current items."""
display_name = "Maximum Difficulty" display_name = "Maximum Difficulty"
option_easy = 0 option_easy = 0
option_medium = 1 option_medium = 1
@ -76,7 +78,8 @@ class MorphPlacement(Choice):
default = 0 default = 0
class StrictMinors(Toggle): class StrictMinors(Toggle):
"""Instead of using the Minors proportions as probabilities, enforce a strict distribution to match the proportions as closely as possible.""" """Instead of using the Minors proportions as probabilities, enforce a strict distribution to match the proportions
as closely as possible."""
display_name = "Strict Minors" display_name = "Strict Minors"
class MissileQty(Range): class MissileQty(Range):
@ -108,7 +111,8 @@ class MinorQty(Range):
default = 100 default = 100
class EnergyQty(Choice): class EnergyQty(Choice):
"""Choose how many Energy/Reserve Tanks will be available, from 0-1 in ultra sparse, 4-6 in sparse, 8-12 in medium and 18 in vanilla.""" """Choose how many Energy/Reserve Tanks will be available, from 0-1 in ultra sparse, 4-6 in sparse, 8-12 in medium
and 18 in vanilla."""
display_name = "Energy Quantity" display_name = "Energy Quantity"
option_ultra_sparse = 0 option_ultra_sparse = 0
option_sparse = 1 option_sparse = 1
@ -129,11 +133,13 @@ class AreaLayout(Toggle):
display_name = "Area Layout" display_name = "Area Layout"
class DoorsColorsRando(Toggle): class DoorsColorsRando(Toggle):
"""Randomize the color of Red/Green/Yellow doors. Add four new type of doors which require Ice/Wave/Spazer/Plasma beams to open them.""" """Randomize the color of Red/Green/Yellow doors. Add four new type of doors which require Ice/Wave/Spazer/Plasma
beams to open them."""
display_name = "Doors Colors Rando" display_name = "Doors Colors Rando"
class AllowGreyDoors(Toggle): class AllowGreyDoors(Toggle):
"""When randomizing the color of Red/Green/Yellow doors, some doors can be randomized to Grey. Grey doors will never open, you will have to go around them.""" """When randomizing the color of Red/Green/Yellow doors, some doors can be randomized to Grey. Grey doors will never
open, you will have to go around them."""
display_name = "Allow Grey Doors" display_name = "Allow Grey Doors"
class BossRandomization(Toggle): class BossRandomization(Toggle):
@ -141,15 +147,18 @@ class BossRandomization(Toggle):
display_name = "Boss Randomization" display_name = "Boss Randomization"
class FunCombat(Toggle): class FunCombat(Toggle):
"""Forces removal of Plasma Beam and Screw Attack if the preset and settings allow it. In addition, can randomly remove Spazer and Wave Beam from the Combat set. If used, might force 'minimal' accessibility.""" """Forces removal of Plasma Beam and Screw Attack if the preset and settings allow it. In addition, can randomly
remove Spazer and Wave Beam from the Combat set. If used, might force 'minimal' accessibility."""
display_name = "Fun Combat" display_name = "Fun Combat"
class FunMovement(Toggle): class FunMovement(Toggle):
"""Forces removal of Space Jump if the preset allows it. In addition, can randomly remove High Jump, Grappling Beam, Spring Ball, Speed Booster, and Bombs from the Movement set. If used, might force 'minimal' accessibility.""" """Forces removal of Space Jump if the preset allows it. In addition, can randomly remove High Jump, Grappling Beam,
Spring Ball, Speed Booster, and Bombs from the Movement set. If used, might force 'minimal' accessibility."""
display_name = "Fun Movement" display_name = "Fun Movement"
class FunSuits(Toggle): class FunSuits(Toggle):
"""If the preset and seed layout allow it, will force removal of at least one of Varia Suit and/or Gravity Suit. If used, might force 'minimal' accessibility.""" """If the preset and seed layout allow it, will force removal of at least one of Varia Suit and/or Gravity Suit. If
used, might force 'minimal' accessibility."""
display_name = "Fun Suits" display_name = "Fun Suits"
class LayoutPatches(DefaultOnToggle): class LayoutPatches(DefaultOnToggle):
@ -161,7 +170,9 @@ class VariaTweaks(Toggle):
display_name = "Varia Tweaks" display_name = "Varia Tweaks"
class NerfedCharge(Toggle): class NerfedCharge(Toggle):
"""Samus begins with a starter Charge Beam that does one third of charged shot damage that can damage bosses. Pseudo Screws also do one third damage. Special Beam Attacks do normal damage but cost 3 Power Bombs instead of 1. Once the Charge Beam item has been collected, it does full damage and special attacks are back to normal.""" """Samus begins with a starter Charge Beam that does one third of charged shot damage that can damage bosses. Pseudo
Screws also do one third damage. Special Beam Attacks do normal damage but cost 3 Power Bombs instead of 1. Once the
Charge Beam item has been collected, it does full damage and special attacks are back to normal."""
display_name = "Nerfed Charge" display_name = "Nerfed Charge"
class GravityBehaviour(Choice): class GravityBehaviour(Choice):
@ -193,7 +204,8 @@ class RefillBeforeSave(Toggle):
display_name = "Refill Before Save" display_name = "Refill Before Save"
class Hud(Toggle): class Hud(Toggle):
"""Displays the current area name and the number of remaining items of selected item split in the HUD for the current area.""" """Displays the current area name and the number of remaining items of selected item split in the HUD for the
current area."""
display_name = "Hud" display_name = "Hud"
class Animals(Toggle): class Animals(Toggle):
@ -211,7 +223,8 @@ class RandomMusic(Toggle):
class CustomPreset(OptionDict): class CustomPreset(OptionDict):
""" """
see https://randommetroidsolver.pythonanywhere.com/presets for detailed info on each preset settings see https://randommetroidsolver.pythonanywhere.com/presets for detailed info on each preset settings
knows: each skill (know) has a pair [can use, perceived difficulty using one of 1, 5, 10, 25, 50 or 100 each one matching a max_difficulty] knows: each skill (know) has a pair [can use, perceived difficulty using one of 1, 5, 10, 25, 50 or 100 each one
matching a max_difficulty]
settings: hard rooms, hellruns and bosses settings settings: hard rooms, hellruns and bosses settings
controller: predefined controller mapping and moon walk setting controller: predefined controller mapping and moon walk setting
""" """

View File

@ -13,7 +13,8 @@ class StrictCapRequirements(DefaultOnToggle):
class StrictCannonRequirements(DefaultOnToggle): class StrictCannonRequirements(DefaultOnToggle):
"""If disabled, Stars that expect cannons may have to be acquired without them. Only makes a difference if Buddy Checks are enabled""" """If disabled, Stars that expect cannons may have to be acquired without them. Only makes a difference if Buddy
Checks are enabled"""
display_name = "Strict Cannon Requirements" display_name = "Strict Cannon Requirements"

View File

@ -77,7 +77,8 @@ class LevelShuffle(Toggle):
class SwapDonutGhostHouseExits(Toggle): class SwapDonutGhostHouseExits(Toggle):
""" """
If enabled, this option will swap which overworld direction the two exits of the level at the Donut Ghost House overworld tile go: If enabled, this option will swap which overworld direction the two exits of the level at the Donut Ghost House
overworld tile go:
False: Normal Exit goes up, Secret Exit goes right. False: Normal Exit goes up, Secret Exit goes right.
True: Normal Exit goes right, Secret Exit goes up. True: Normal Exit goes right, Secret Exit goes up.
""" """

View File

@ -93,7 +93,8 @@ class DamageRando(Choice):
class DamageRandoOverrides(OptionDict): class DamageRandoOverrides(OptionDict):
"Manual +/-/normal odds for an orb. Put 0 if you don't want a certain nerf or buff to be a possibility. Orbs that you don't specify will roll with 1/1/1 as odds" """Manual +/-/normal odds for an orb. Put 0 if you don't want a certain nerf or buff to be a possibility. Orbs that
you don't specify will roll with 1/1/1 as odds"""
schema = Schema({ schema = Schema({
Optional("Blue"): { Optional("Blue"): {
"MinusOdds": And(int, lambda n: n >= 0), "MinusOdds": And(int, lambda n: n >= 0),