Add docstrings to hollow knight YAML options.

This commit is contained in:
Hussein Farran 2022-04-03 18:10:13 -04:00
parent 356384ab05
commit 0eb37883ca
1 changed files with 111 additions and 18 deletions

View File

@ -18,9 +18,79 @@ class Disabled(Toggle):
locations = {"option_" + start: i for i, start in enumerate(starts)}
# This way the dynamic start names are picked up by the MetaClass Choice belongs to
StartLocation = type("StartLocation", (Choice,), {"__module__": __name__, "auto_display_name": False, **locations})
StartLocation = type("StartLocation", (Choice,), {"__module__": __name__, "auto_display_name": False, **locations,
"__doc__": "Choose your start location. "
"This is currently only locked to King's Pass."})
del (locations)
option_docstrings = {
"RandomizeDreamers": "Allow for Dreamers to be randomized into the item pool and opens their locations for "
"randomization.",
"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.",
"RandomizeCharms": "Allow for Charms to be randomized into the item pool and open their locations for "
"randomization. Includes Charms 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"
" randomization.",
"RandomizeVesselFragments": "Allow for Vessel Fragments to be randomized into the item pool and open their "
"locations for randomization.",
"RandomizeCharmNotches": "Allow for Charm Notches to be randomized into the item pool. "
"Includes those sold by Salubra.",
"RandomizePaleOre": "Randomize Pale Ores into the item pool and open their locations for randomization.",
"RandomizeGeoChests": "Allow for Geo Chests to contain randomized items, "
"as well as their Geo reward being randomized into the item pool.",
"RandomizeJunkPitChests": "Randomize the contents of junk pit chests into the item pool and open their locations "
"for randomization.",
"RandomizeRancidEggs": "Randomize Rancid Eggs into the item pool and open their locations for randomization",
"RandomizeRelics": "Randomize Relics (King's Idol, et al.) into the item pool and open their locations for"
" randomization.",
"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 "
"standing on the root.",
"RandomizeBossEssence": "Randomize boss essence drops, such as those for defeating Warrior Dreams, into the item "
"pool and open their locations for randomization.",
"RandomizeGrubs": "Randomize Grubs into the item pool and open their locations for randomization.",
"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.",
"RandomizeStags": "Randomize Stag Stations unlocks into the item pool as well as placing randomized items "
"on the stag station bell/toll.",
"RandomizeLifebloodCocoons": "Randomize Lifeblood Cocoon grants into the item pool and open their locations"
" for randomization.",
"RandomizeGrimmkinFlames": "Randomize Grimmkin Flames into the item pool and open their locations for "
"randomization.",
"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 "
"gained by killing enemies.",
"RandomizeGeoRocks": "Randomize Geo Rock rewards into the item pool and open their locations for randomization.",
"RandomizeBossGeo": "Randomize boss Geo drops into the item pool and open those locations for randomization.",
"RandomizeSoulTotems": "Randomize Soul Refill items into the item pool and open the Soul Totem locations for"
" randomization.",
"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.",
"PreciseMovement": "Places skips into logic which require extremely precise player movement, possibly without "
"movement skills such as dash or hook.",
"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 "
"background objects.",
"EnemyPogos": "Places skips into logic for locations which are reachable via pogos off of enemies.",
"ObscureSkips": "Places skips into logic which are considered obscure enough that a beginner is not expected "
"to know them.",
"ShadeSkips": "Places shade skips into logic which utilize the player's shade for pogoing or damage boosting.",
"InfectionSkips": "Places skips into logic which are only possible after the crossroads become infected.",
"FireballSkips": "Places skips into logic which require the use of spells to reset fall speed while in mid-air.",
"SpikeTunnels": "Places skips into logic which require the navigation of narrow tunnels filled with spikes.",
"AcidSkips": "Places skips into logic which require crossing a pool of acid without Isma's Tear, or water if swim "
"is disabled.",
"DamageBoosts": "Places skips into logic which require you to take damage from an enemy or hazard to progress.",
"DangerousSkips": "Places skips into logic which contain a high risk of taking damage.",
"DarkRooms": "Places skips into logic which require navigating dark rooms without the use of the Lumafly Lantern.",
"ComplexSkips": "Places skips into logic which require intense setup or are obscure even beyond advanced skip "
"standards.",
"DifficultSkips": "Places skips into logic which are considered more difficult than typical.",
"RemoveSpellUpgrades": "Removes the second level of all spells from the item pool."
}
default_on = {
"RandomizeDreamers",
"RandomizeSkills",
@ -44,6 +114,8 @@ hollow_knight_randomize_options: typing.Dict[str, type(Option)] = {}
for option_name, option_data in pool_options.items():
extra_data = {"__module__": __name__, "items": option_data[0], "locations": option_data[1]}
if option_name in option_docstrings:
extra_data["__doc__"] = option_docstrings[option_name]
if option_name in disabled:
extra_data["__doc__"] = "Disabled Option. Not implemented."
option = type(option_name, (Disabled,), extra_data)
@ -54,13 +126,23 @@ for option_name, option_data in pool_options.items():
globals()[option.__name__] = option
hollow_knight_randomize_options[option.__name__] = option
hollow_knight_logic_options: typing.Dict[str, type(Option)] = {}
for option_name in logic_options.values():
if option_name in hollow_knight_randomize_options:
continue
extra_data = {}
if option_name in option_docstrings:
extra_data["__doc__"] = option_docstrings[option_name]
option = type(option_name, (Toggle,), extra_data)
if option_name in disabled:
extra_data["__doc__"] = "Disabled Option. Not implemented."
option = type(option_name, (Disabled,), extra_data)
hollow_knight_logic_options: typing.Dict[str, type(Option)] = {
option_name: Disabled if option_name in disabled else Toggle for option_name in logic_options.values() if
option_name not in hollow_knight_randomize_options}
hollow_knight_logic_options[option_name] = option
class MinimumGrubPrice(Range):
"""The minimum grub price in the range of prices that an item should cost from Grubfather."""
display_name = "Minimum Grub Price"
range_start = 1
range_end = 46
@ -68,11 +150,13 @@ class MinimumGrubPrice(Range):
class MaximumGrubPrice(MinimumGrubPrice):
"""The maximum grub price in the range of prices that an item should cost from Grubfather."""
display_name = "Maximum Grub Price"
default = 23
class MinimumEssencePrice(Range):
"""The minimum essence price in the range of prices that an item should cost from Seer."""
display_name = "Minimum Essence Price"
range_start = 1
range_end = 2800
@ -80,11 +164,14 @@ class MinimumEssencePrice(Range):
class MaximumEssencePrice(MinimumEssencePrice):
"""The maximum essence price in the range of prices that an item should cost from Seer."""
display_name = "Maximum Essence Price"
default = 1400
class MinimumEggPrice(Range):
"""The minimum rancid egg price in the range of prices that an item should cost from Ijii.
Only takes effect if the EggSlotShops option is greater than 0."""
display_name = "Minimum Egg Price"
range_start = 1
range_end = 21
@ -92,12 +179,15 @@ class MinimumEggPrice(Range):
class MaximumEggPrice(MinimumEggPrice):
"""The maximum rancid egg price in the range of prices that an item should cost from Ijii.
Only takes effect if the EggSlotShops option is greater than 0."""
display_name = "Maximum Egg Price"
default = 10
class MinimumCharmPrice(Range):
"""For Salubra's Charm-count based locations."""
"""The minimum charm price in the range of prices that an item should cost for Salubra's shop item which also
carry a charm cost."""
display_name = "Minimum Charm Requirement"
range_start = 1
range_end = 40
@ -105,13 +195,16 @@ class MinimumCharmPrice(Range):
class MaximumCharmPrice(MinimumCharmPrice):
"""The maximum charm price in the range of prices that an item should cost for Salubra's shop item which also
carry a charm cost."""
default = 20
class RandomCharmCosts(Range):
"""Total Cost of all Charms together. Set to -1 for vanilla costs. Vanilla sums to 90."""
"""Total Notch Cost of all Charms together. Set to -1 for vanilla costs. Vanilla sums to 90.
This value is distributed among all charms in a random fashion."""
display_name = "Random Charm Costs"
display_name = "Randomize Charm Notch Costs"
range_start = -1
range_end = 240
default = -1
@ -142,15 +235,15 @@ class EggShopSlots(Range):
hollow_knight_options: typing.Dict[str, type(Option)] = {
**hollow_knight_randomize_options,
**hollow_knight_logic_options,
"start_location": StartLocation,
"minimum_grub_price": MinimumGrubPrice,
"maximum_grub_price": MaximumGrubPrice,
"minimum_essence_price": MinimumEssencePrice,
"maximum_essence_price": MaximumEssencePrice,
"minimum_egg_price": MinimumEggPrice,
"maximum_egg_price": MaximumEggPrice,
"minimum_charm_price": MinimumCharmPrice,
"maximum_charm_price": MaximumCharmPrice,
"random_charm_costs": RandomCharmCosts,
"egg_shop_slots": EggShopSlots,
StartLocation.__name__: StartLocation,
MinimumGrubPrice.__name__: MinimumGrubPrice,
MaximumGrubPrice.__name__: MaximumGrubPrice,
MinimumEssencePrice.__name__: MinimumEssencePrice,
MaximumEssencePrice.__name__: MaximumEssencePrice,
MinimumEggPrice.__name__: MinimumEggPrice,
MaximumEggPrice.__name__: MaximumEggPrice,
MinimumCharmPrice.__name__: MinimumCharmPrice,
MaximumCharmPrice.__name__: MaximumCharmPrice,
RandomCharmCosts.__name__: RandomCharmCosts,
EggShopSlots.__name__: EggShopSlots,
}