mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
A Hat in Time: Implement New Game (#2640)
Adds A Hat in Time as a supported game in Archipelago.
This commit is contained in:
770
worlds/ahit/Options.py
Normal file
770
worlds/ahit/Options.py
Normal file
@@ -0,0 +1,770 @@
|
||||
from typing import List, TYPE_CHECKING, Dict, Any
|
||||
from schema import Schema, Optional
|
||||
from dataclasses import dataclass
|
||||
from worlds.AutoWorld import PerGameCommonOptions
|
||||
from Options import Range, Toggle, DeathLink, Choice, OptionDict, DefaultOnToggle, OptionGroup
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from . import HatInTimeWorld
|
||||
|
||||
|
||||
def create_option_groups() -> List[OptionGroup]:
|
||||
option_group_list: List[OptionGroup] = []
|
||||
for name, options in ahit_option_groups.items():
|
||||
option_group_list.append(OptionGroup(name=name, options=options))
|
||||
|
||||
return option_group_list
|
||||
|
||||
|
||||
def adjust_options(world: "HatInTimeWorld"):
|
||||
if world.options.HighestChapterCost < world.options.LowestChapterCost:
|
||||
world.options.HighestChapterCost.value, world.options.LowestChapterCost.value = \
|
||||
world.options.LowestChapterCost.value, world.options.HighestChapterCost.value
|
||||
|
||||
if world.options.FinalChapterMaxCost < world.options.FinalChapterMinCost:
|
||||
world.options.FinalChapterMaxCost.value, world.options.FinalChapterMinCost.value = \
|
||||
world.options.FinalChapterMinCost.value, world.options.FinalChapterMaxCost.value
|
||||
|
||||
if world.options.BadgeSellerMaxItems < world.options.BadgeSellerMinItems:
|
||||
world.options.BadgeSellerMaxItems.value, world.options.BadgeSellerMinItems.value = \
|
||||
world.options.BadgeSellerMinItems.value, world.options.BadgeSellerMaxItems.value
|
||||
|
||||
if world.options.NyakuzaThugMaxShopItems < world.options.NyakuzaThugMinShopItems:
|
||||
world.options.NyakuzaThugMaxShopItems.value, world.options.NyakuzaThugMinShopItems.value = \
|
||||
world.options.NyakuzaThugMinShopItems.value, world.options.NyakuzaThugMaxShopItems.value
|
||||
|
||||
if world.options.DWShuffleCountMax < world.options.DWShuffleCountMin:
|
||||
world.options.DWShuffleCountMax.value, world.options.DWShuffleCountMin.value = \
|
||||
world.options.DWShuffleCountMin.value, world.options.DWShuffleCountMax.value
|
||||
|
||||
total_tps: int = get_total_time_pieces(world)
|
||||
if world.options.HighestChapterCost > total_tps-5:
|
||||
world.options.HighestChapterCost.value = min(45, total_tps-5)
|
||||
|
||||
if world.options.LowestChapterCost > total_tps-5:
|
||||
world.options.LowestChapterCost.value = min(45, total_tps-5)
|
||||
|
||||
if world.options.FinalChapterMaxCost > total_tps:
|
||||
world.options.FinalChapterMaxCost.value = min(50, total_tps)
|
||||
|
||||
if world.options.FinalChapterMinCost > total_tps:
|
||||
world.options.FinalChapterMinCost.value = min(50, total_tps)
|
||||
|
||||
if world.is_dlc1() and world.options.ShipShapeCustomTaskGoal <= 0:
|
||||
# automatically determine task count based on Tasksanity settings
|
||||
if world.options.Tasksanity:
|
||||
world.options.ShipShapeCustomTaskGoal.value = world.options.TasksanityCheckCount * world.options.TasksanityTaskStep
|
||||
else:
|
||||
world.options.ShipShapeCustomTaskGoal.value = 18
|
||||
|
||||
# Don't allow Rush Hour goal if DLC2 content is disabled
|
||||
if world.options.EndGoal == EndGoal.option_rush_hour and not world.options.EnableDLC2:
|
||||
world.options.EndGoal.value = EndGoal.option_finale
|
||||
|
||||
# Don't allow Seal the Deal goal if Death Wish content is disabled
|
||||
if world.options.EndGoal == EndGoal.option_seal_the_deal and not world.is_dw():
|
||||
world.options.EndGoal.value = EndGoal.option_finale
|
||||
|
||||
if world.options.DWEnableBonus:
|
||||
world.options.DWAutoCompleteBonuses.value = 0
|
||||
|
||||
if world.is_dw_only():
|
||||
world.options.EndGoal.value = EndGoal.option_seal_the_deal
|
||||
world.options.ActRandomizer.value = 0
|
||||
world.options.ShuffleAlpineZiplines.value = 0
|
||||
world.options.ShuffleSubconPaintings.value = 0
|
||||
world.options.ShuffleStorybookPages.value = 0
|
||||
world.options.ShuffleActContracts.value = 0
|
||||
world.options.EnableDLC1.value = 0
|
||||
world.options.LogicDifficulty.value = LogicDifficulty.option_normal
|
||||
world.options.DWTimePieceRequirement.value = 0
|
||||
|
||||
|
||||
def get_total_time_pieces(world: "HatInTimeWorld") -> int:
|
||||
count: int = 40
|
||||
if world.is_dlc1():
|
||||
count += 6
|
||||
|
||||
if world.is_dlc2():
|
||||
count += 10
|
||||
|
||||
return min(40+world.options.MaxExtraTimePieces, count)
|
||||
|
||||
|
||||
class EndGoal(Choice):
|
||||
"""The end goal required to beat the game.
|
||||
Finale: Reach Time's End and beat Mustache Girl. The Finale will be in its vanilla location.
|
||||
|
||||
Rush Hour: Reach and complete Rush Hour. The level will be in its vanilla location and Chapter 7
|
||||
will be the final chapter. You also must find Nyakuza Metro itself and complete all of its levels.
|
||||
Requires DLC2 content to be enabled.
|
||||
|
||||
Seal the Deal: Reach and complete the Seal the Deal death wish main objective.
|
||||
Requires Death Wish content to be enabled."""
|
||||
display_name = "End Goal"
|
||||
option_finale = 1
|
||||
option_rush_hour = 2
|
||||
option_seal_the_deal = 3
|
||||
default = 1
|
||||
|
||||
|
||||
class ActRandomizer(Choice):
|
||||
"""If enabled, shuffle the game's Acts between each other.
|
||||
Light will cause Time Rifts to only be shuffled amongst each other,
|
||||
and Blue Time Rifts and Purple Time Rifts to be shuffled separately."""
|
||||
display_name = "Shuffle Acts"
|
||||
option_false = 0
|
||||
option_light = 1
|
||||
option_insanity = 2
|
||||
default = 1
|
||||
|
||||
|
||||
class ActPlando(OptionDict):
|
||||
"""Plando acts onto other acts. For example, \"Train Rush\": \"Alpine Free Roam\" will place Alpine Free Roam
|
||||
at Train Rush."""
|
||||
display_name = "Act Plando"
|
||||
schema = Schema({
|
||||
Optional(str): str
|
||||
})
|
||||
|
||||
|
||||
class ActBlacklist(OptionDict):
|
||||
"""Blacklist acts from being shuffled onto other acts. Multiple can be listed per act.
|
||||
For example, \"Barrel Battle\": [\"The Big Parade\", \"Dead Bird Studio\"]
|
||||
will prevent The Big Parade and Dead Bird Studio from being shuffled onto Barrel Battle."""
|
||||
display_name = "Act Blacklist"
|
||||
schema = Schema({
|
||||
Optional(str): list
|
||||
})
|
||||
|
||||
|
||||
class FinaleShuffle(Toggle):
|
||||
"""If enabled, chapter finales will only be shuffled amongst each other in act shuffle."""
|
||||
display_name = "Finale Shuffle"
|
||||
|
||||
|
||||
class LogicDifficulty(Choice):
|
||||
"""Choose the difficulty setting for logic.
|
||||
For an exhaustive list of all logic tricks for each difficulty, see this Google Doc:
|
||||
https://docs.google.com/document/d/1x9VLSQ5davfx1KGamR9T0mD5h69_lDXJ6H7Gq7knJRI/edit?usp=sharing"""
|
||||
display_name = "Logic Difficulty"
|
||||
option_normal = -1
|
||||
option_moderate = 0
|
||||
option_hard = 1
|
||||
option_expert = 2
|
||||
default = -1
|
||||
|
||||
|
||||
class CTRLogic(Choice):
|
||||
"""Choose how you want to logically clear Cheating the Race."""
|
||||
display_name = "Cheating the Race Logic"
|
||||
option_time_stop_only = 0
|
||||
option_scooter = 1
|
||||
option_sprint = 2
|
||||
option_nothing = 3
|
||||
default = 0
|
||||
|
||||
|
||||
class RandomizeHatOrder(Choice):
|
||||
"""Randomize the order that hats are stitched in.
|
||||
Time Stop Last will force Time Stop to be the last hat in the sequence."""
|
||||
display_name = "Randomize Hat Order"
|
||||
option_false = 0
|
||||
option_true = 1
|
||||
option_time_stop_last = 2
|
||||
default = 1
|
||||
|
||||
|
||||
class YarnBalancePercent(Range):
|
||||
"""How much (in percentage) of the yarn in the pool that will be progression balanced."""
|
||||
display_name = "Yarn Balance Percentage"
|
||||
default = 20
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
|
||||
|
||||
class TimePieceBalancePercent(Range):
|
||||
"""How much (in percentage) of time pieces in the pool that will be progression balanced."""
|
||||
display_name = "Time Piece Balance Percentage"
|
||||
default = 35
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
|
||||
|
||||
class StartWithCompassBadge(DefaultOnToggle):
|
||||
"""If enabled, start with the Compass Badge. In Archipelago, the Compass Badge will track all items in the world
|
||||
(instead of just Relics). Recommended if you're not familiar with where item locations are."""
|
||||
display_name = "Start with Compass Badge"
|
||||
|
||||
|
||||
class CompassBadgeMode(Choice):
|
||||
"""closest - Compass Badge points to the closest item regardless of classification
|
||||
important_only - Compass Badge points to progression/useful items only
|
||||
important_first - Compass Badge points to progression/useful items first, then it will point to junk items"""
|
||||
display_name = "Compass Badge Mode"
|
||||
option_closest = 1
|
||||
option_important_only = 2
|
||||
option_important_first = 3
|
||||
default = 1
|
||||
|
||||
|
||||
class UmbrellaLogic(Toggle):
|
||||
"""Makes Hat Kid's default punch attack do absolutely nothing, making the Umbrella much more relevant and useful"""
|
||||
display_name = "Umbrella Logic"
|
||||
|
||||
|
||||
class ShuffleStorybookPages(DefaultOnToggle):
|
||||
"""If enabled, each storybook page in the purple Time Rifts is an item check.
|
||||
The Compass Badge can track these down for you."""
|
||||
display_name = "Shuffle Storybook Pages"
|
||||
|
||||
|
||||
class ShuffleActContracts(DefaultOnToggle):
|
||||
"""If enabled, shuffle Snatcher's act contracts into the pool as items"""
|
||||
display_name = "Shuffle Contracts"
|
||||
|
||||
|
||||
class ShuffleAlpineZiplines(Toggle):
|
||||
"""If enabled, Alpine's zipline paths leading to the peaks will be locked behind items."""
|
||||
display_name = "Shuffle Alpine Ziplines"
|
||||
|
||||
|
||||
class ShuffleSubconPaintings(Toggle):
|
||||
"""If enabled, shuffle items into the pool that unlock Subcon Forest fire spirit paintings.
|
||||
These items are progressive, with the order of Village-Swamp-Courtyard."""
|
||||
display_name = "Shuffle Subcon Paintings"
|
||||
|
||||
|
||||
class NoPaintingSkips(Toggle):
|
||||
"""If enabled, prevent Subcon fire wall skips from being in logic on higher difficulty settings."""
|
||||
display_name = "No Subcon Fire Wall Skips"
|
||||
|
||||
|
||||
class StartingChapter(Choice):
|
||||
"""Determines which chapter you will be guaranteed to be able to enter at the beginning of the game."""
|
||||
display_name = "Starting Chapter"
|
||||
option_1 = 1
|
||||
option_2 = 2
|
||||
option_3 = 3
|
||||
option_4 = 4
|
||||
default = 1
|
||||
|
||||
|
||||
class ChapterCostIncrement(Range):
|
||||
"""Lower values mean chapter costs increase slower. Higher values make the cost differences more steep."""
|
||||
display_name = "Chapter Cost Increment"
|
||||
range_start = 1
|
||||
range_end = 8
|
||||
default = 4
|
||||
|
||||
|
||||
class ChapterCostMinDifference(Range):
|
||||
"""The minimum difference between chapter costs."""
|
||||
display_name = "Minimum Chapter Cost Difference"
|
||||
range_start = 1
|
||||
range_end = 8
|
||||
default = 4
|
||||
|
||||
|
||||
class LowestChapterCost(Range):
|
||||
"""Value determining the lowest possible cost for a chapter.
|
||||
Chapter costs will, progressively, be calculated based on this value (except for the final chapter)."""
|
||||
display_name = "Lowest Possible Chapter Cost"
|
||||
range_start = 0
|
||||
range_end = 10
|
||||
default = 5
|
||||
|
||||
|
||||
class HighestChapterCost(Range):
|
||||
"""Value determining the highest possible cost for a chapter.
|
||||
Chapter costs will, progressively, be calculated based on this value (except for the final chapter)."""
|
||||
display_name = "Highest Possible Chapter Cost"
|
||||
range_start = 15
|
||||
range_end = 45
|
||||
default = 25
|
||||
|
||||
|
||||
class FinalChapterMinCost(Range):
|
||||
"""Minimum Time Pieces required to enter the final chapter. This is part of your goal."""
|
||||
display_name = "Final Chapter Minimum Time Piece Cost"
|
||||
range_start = 0
|
||||
range_end = 50
|
||||
default = 30
|
||||
|
||||
|
||||
class FinalChapterMaxCost(Range):
|
||||
"""Maximum Time Pieces required to enter the final chapter. This is part of your goal."""
|
||||
display_name = "Final Chapter Maximum Time Piece Cost"
|
||||
range_start = 0
|
||||
range_end = 50
|
||||
default = 35
|
||||
|
||||
|
||||
class MaxExtraTimePieces(Range):
|
||||
"""Maximum number of extra Time Pieces from the DLCs.
|
||||
Arctic Cruise will add up to 6. Nyakuza Metro will add up to 10. The absolute maximum is 56."""
|
||||
display_name = "Max Extra Time Pieces"
|
||||
range_start = 0
|
||||
range_end = 16
|
||||
default = 16
|
||||
|
||||
|
||||
class YarnCostMin(Range):
|
||||
"""The minimum possible yarn needed to stitch a hat."""
|
||||
display_name = "Minimum Yarn Cost"
|
||||
range_start = 1
|
||||
range_end = 12
|
||||
default = 4
|
||||
|
||||
|
||||
class YarnCostMax(Range):
|
||||
"""The maximum possible yarn needed to stitch a hat."""
|
||||
display_name = "Maximum Yarn Cost"
|
||||
range_start = 1
|
||||
range_end = 12
|
||||
default = 8
|
||||
|
||||
|
||||
class YarnAvailable(Range):
|
||||
"""How much yarn is available to collect in the item pool."""
|
||||
display_name = "Yarn Available"
|
||||
range_start = 30
|
||||
range_end = 80
|
||||
default = 50
|
||||
|
||||
|
||||
class MinExtraYarn(Range):
|
||||
"""The minimum number of extra yarn in the item pool.
|
||||
There must be at least this much more yarn over the total number of yarn needed to craft all hats.
|
||||
For example, if this option's value is 10, and the total yarn needed to craft all hats is 40,
|
||||
there must be at least 50 yarn in the pool."""
|
||||
display_name = "Max Extra Yarn"
|
||||
range_start = 5
|
||||
range_end = 15
|
||||
default = 10
|
||||
|
||||
|
||||
class HatItems(Toggle):
|
||||
"""Removes all yarn from the pool and turns the hats into individual items instead."""
|
||||
display_name = "Hat Items"
|
||||
|
||||
|
||||
class MinPonCost(Range):
|
||||
"""The minimum number of Pons that any item in the Badge Seller's shop can cost."""
|
||||
display_name = "Minimum Shop Pon Cost"
|
||||
range_start = 10
|
||||
range_end = 800
|
||||
default = 75
|
||||
|
||||
|
||||
class MaxPonCost(Range):
|
||||
"""The maximum number of Pons that any item in the Badge Seller's shop can cost."""
|
||||
display_name = "Maximum Shop Pon Cost"
|
||||
range_start = 10
|
||||
range_end = 800
|
||||
default = 300
|
||||
|
||||
|
||||
class BadgeSellerMinItems(Range):
|
||||
"""The smallest number of items that the Badge Seller can have for sale."""
|
||||
display_name = "Badge Seller Minimum Items"
|
||||
range_start = 0
|
||||
range_end = 10
|
||||
default = 4
|
||||
|
||||
|
||||
class BadgeSellerMaxItems(Range):
|
||||
"""The largest number of items that the Badge Seller can have for sale."""
|
||||
display_name = "Badge Seller Maximum Items"
|
||||
range_start = 0
|
||||
range_end = 10
|
||||
default = 8
|
||||
|
||||
|
||||
class EnableDLC1(Toggle):
|
||||
"""Shuffle content from The Arctic Cruise (Chapter 6) into the game. This also includes the Tour time rift.
|
||||
DO NOT ENABLE THIS OPTION IF YOU DO NOT HAVE SEAL THE DEAL DLC INSTALLED!!!"""
|
||||
display_name = "Shuffle Chapter 6"
|
||||
|
||||
|
||||
class Tasksanity(Toggle):
|
||||
"""If enabled, Ship Shape tasks will become checks. Requires DLC1 content to be enabled."""
|
||||
display_name = "Tasksanity"
|
||||
|
||||
|
||||
class TasksanityTaskStep(Range):
|
||||
"""How many tasks the player must complete in Tasksanity to send a check."""
|
||||
display_name = "Tasksanity Task Step"
|
||||
range_start = 1
|
||||
range_end = 3
|
||||
default = 1
|
||||
|
||||
|
||||
class TasksanityCheckCount(Range):
|
||||
"""How many Tasksanity checks there will be in total."""
|
||||
display_name = "Tasksanity Check Count"
|
||||
range_start = 1
|
||||
range_end = 30
|
||||
default = 18
|
||||
|
||||
|
||||
class ExcludeTour(Toggle):
|
||||
"""Removes the Tour time rift from the game. This option is recommended if you don't want to deal with
|
||||
important levels being shuffled onto the Tour time rift, or important items being shuffled onto Tour pages
|
||||
when your goal is Time's End."""
|
||||
display_name = "Exclude Tour Time Rift"
|
||||
|
||||
|
||||
class ShipShapeCustomTaskGoal(Range):
|
||||
"""Change the number of tasks required to complete Ship Shape. If this option's value is 0, the number of tasks
|
||||
required will be TasksanityTaskStep x TasksanityCheckCount, if Tasksanity is enabled. If Tasksanity is disabled,
|
||||
it will use the game's default of 18.
|
||||
This option will not affect Cruisin' for a Bruisin'."""
|
||||
display_name = "Ship Shape Custom Task Goal"
|
||||
range_start = 0
|
||||
range_end = 90
|
||||
default = 0
|
||||
|
||||
|
||||
class EnableDLC2(Toggle):
|
||||
"""Shuffle content from Nyakuza Metro (Chapter 7) into the game.
|
||||
DO NOT ENABLE THIS OPTION IF YOU DO NOT HAVE NYAKUZA METRO DLC INSTALLED!!!"""
|
||||
display_name = "Shuffle Chapter 7"
|
||||
|
||||
|
||||
class MetroMinPonCost(Range):
|
||||
"""The cheapest an item can be in any Nyakuza Metro shop. Includes ticket booths."""
|
||||
display_name = "Metro Shops Minimum Pon Cost"
|
||||
range_start = 10
|
||||
range_end = 800
|
||||
default = 50
|
||||
|
||||
|
||||
class MetroMaxPonCost(Range):
|
||||
"""The most expensive an item can be in any Nyakuza Metro shop. Includes ticket booths."""
|
||||
display_name = "Metro Shops Maximum Pon Cost"
|
||||
range_start = 10
|
||||
range_end = 800
|
||||
default = 200
|
||||
|
||||
|
||||
class NyakuzaThugMinShopItems(Range):
|
||||
"""The smallest number of items that the thugs in Nyakuza Metro can have for sale."""
|
||||
display_name = "Nyakuza Thug Minimum Shop Items"
|
||||
range_start = 0
|
||||
range_end = 5
|
||||
default = 2
|
||||
|
||||
|
||||
class NyakuzaThugMaxShopItems(Range):
|
||||
"""The largest number of items that the thugs in Nyakuza Metro can have for sale."""
|
||||
display_name = "Nyakuza Thug Maximum Shop Items"
|
||||
range_start = 0
|
||||
range_end = 5
|
||||
default = 4
|
||||
|
||||
|
||||
class NoTicketSkips(Choice):
|
||||
"""Prevent metro gate skips from being in logic on higher difficulties.
|
||||
Rush Hour option will only consider the ticket skips for Rush Hour in logic."""
|
||||
display_name = "No Ticket Skips"
|
||||
option_false = 0
|
||||
option_true = 1
|
||||
option_rush_hour = 2
|
||||
|
||||
|
||||
class BaseballBat(Toggle):
|
||||
"""Replace the Umbrella with the baseball bat from Nyakuza Metro.
|
||||
DLC2 content does not have to be shuffled for this option but Nyakuza Metro still needs to be installed."""
|
||||
display_name = "Baseball Bat"
|
||||
|
||||
|
||||
class EnableDeathWish(Toggle):
|
||||
"""Shuffle Death Wish contracts into the game. Each contract by default will have 1 check granted upon completion.
|
||||
DO NOT ENABLE THIS OPTION IF YOU DO NOT HAVE SEAL THE DEAL DLC INSTALLED!!!"""
|
||||
display_name = "Enable Death Wish"
|
||||
|
||||
|
||||
class DeathWishOnly(Toggle):
|
||||
"""An alternative gameplay mode that allows you to exclusively play Death Wish in a seed.
|
||||
This has the following effects:
|
||||
- Death Wish is instantly unlocked from the start
|
||||
- All hats and other progression items are instantly given to you
|
||||
- Useful items such as Fast Hatter Badge will still be in the item pool instead of in your inventory at the start
|
||||
- All chapters and their levels are unlocked, act shuffle is forced off
|
||||
- Any checks other than Death Wish contracts are completely removed
|
||||
- All Pons in the item pool are replaced with Health Pons or random cosmetics
|
||||
- The EndGoal option is forced to complete Seal the Deal"""
|
||||
display_name = "Death Wish Only"
|
||||
|
||||
|
||||
class DWShuffle(Toggle):
|
||||
"""An alternative mode for Death Wish where each contract is unlocked one by one, in a random order.
|
||||
Stamp requirements to unlock contracts is removed. Any excluded contracts will not be shuffled into the sequence.
|
||||
If Seal the Deal is the end goal, it will always be the last Death Wish in the sequence.
|
||||
Disabling candles is highly recommended."""
|
||||
display_name = "Death Wish Shuffle"
|
||||
|
||||
|
||||
class DWShuffleCountMin(Range):
|
||||
"""The minimum number of Death Wishes that can be in the Death Wish shuffle sequence.
|
||||
The final result is clamped at the number of non-excluded Death Wishes."""
|
||||
display_name = "Death Wish Shuffle Minimum Count"
|
||||
range_start = 5
|
||||
range_end = 38
|
||||
default = 18
|
||||
|
||||
|
||||
class DWShuffleCountMax(Range):
|
||||
"""The maximum number of Death Wishes that can be in the Death Wish shuffle sequence.
|
||||
The final result is clamped at the number of non-excluded Death Wishes."""
|
||||
display_name = "Death Wish Shuffle Maximum Count"
|
||||
range_start = 5
|
||||
range_end = 38
|
||||
default = 25
|
||||
|
||||
|
||||
class DWEnableBonus(Toggle):
|
||||
"""In Death Wish, add a location for completing all of a DW contract's bonuses,
|
||||
in addition to the location for completing the DW contract normally.
|
||||
WARNING!! Only for the brave! This option can create VERY DIFFICULT SEEDS!
|
||||
ONLY turn this on if you know what you are doing to yourself and everyone else in the multiworld!
|
||||
Using Peace and Tranquility to auto-complete the bonuses will NOT count!"""
|
||||
display_name = "Shuffle Death Wish Full Completions"
|
||||
|
||||
|
||||
class DWAutoCompleteBonuses(DefaultOnToggle):
|
||||
"""If enabled, auto complete all bonus stamps after completing the main objective in a Death Wish.
|
||||
This option will have no effect if bonus checks (DWEnableBonus) are turned on."""
|
||||
display_name = "Auto Complete Bonus Stamps"
|
||||
|
||||
|
||||
class DWExcludeAnnoyingContracts(DefaultOnToggle):
|
||||
"""Exclude Death Wish contracts from the pool that are particularly tedious or take a long time to reach/clear.
|
||||
Excluded Death Wishes are automatically completed as soon as they are unlocked.
|
||||
This option currently excludes the following contracts:
|
||||
- Vault Codes in the Wind
|
||||
- Boss Rush
|
||||
- Camera Tourist
|
||||
- The Mustache Gauntlet
|
||||
- Rift Collapse: Deep Sea
|
||||
- Cruisin' for a Bruisin'
|
||||
- Seal the Deal (non-excluded if goal, but the checks are still excluded)"""
|
||||
display_name = "Exclude Annoying Death Wish Contracts"
|
||||
|
||||
|
||||
class DWExcludeAnnoyingBonuses(DefaultOnToggle):
|
||||
"""If Death Wish full completions are shuffled in, exclude tedious Death Wish full completions from the pool.
|
||||
Excluded bonus Death Wishes automatically reward their bonus stamps upon completion of the main objective.
|
||||
This option currently excludes the following bonuses:
|
||||
- So You're Back From Outer Space
|
||||
- Encore! Encore!
|
||||
- Snatcher's Hit List
|
||||
- 10 Seconds until Self-Destruct
|
||||
- Killing Two Birds
|
||||
- Zero Jumps
|
||||
- Bird Sanctuary
|
||||
- Wound-Up Windmill
|
||||
- Vault Codes in the Wind
|
||||
- Boss Rush
|
||||
- Camera Tourist
|
||||
- The Mustache Gauntlet
|
||||
- Rift Collapse: Deep Sea
|
||||
- Cruisin' for a Bruisin'
|
||||
- Seal the Deal"""
|
||||
display_name = "Exclude Annoying Death Wish Full Completions"
|
||||
|
||||
|
||||
class DWExcludeCandles(DefaultOnToggle):
|
||||
"""If enabled, exclude all candle Death Wishes."""
|
||||
display_name = "Exclude Candle Death Wishes"
|
||||
|
||||
|
||||
class DWTimePieceRequirement(Range):
|
||||
"""How many Time Pieces that will be required to unlock Death Wish."""
|
||||
display_name = "Death Wish Time Piece Requirement"
|
||||
range_start = 0
|
||||
range_end = 35
|
||||
default = 15
|
||||
|
||||
|
||||
class TrapChance(Range):
|
||||
"""The chance for any junk item in the pool to be replaced by a trap."""
|
||||
display_name = "Trap Chance"
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
default = 0
|
||||
|
||||
|
||||
class BabyTrapWeight(Range):
|
||||
"""The weight of Baby Traps in the trap pool.
|
||||
Baby Traps place a multitude of the Conductor's grandkids into Hat Kid's hands, causing her to lose her balance."""
|
||||
display_name = "Baby Trap Weight"
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
default = 40
|
||||
|
||||
|
||||
class LaserTrapWeight(Range):
|
||||
"""The weight of Laser Traps in the trap pool.
|
||||
Laser Traps will spawn multiple giant lasers (from Snatcher's boss fight) at Hat Kid's location."""
|
||||
display_name = "Laser Trap Weight"
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
default = 40
|
||||
|
||||
|
||||
class ParadeTrapWeight(Range):
|
||||
"""The weight of Parade Traps in the trap pool.
|
||||
Parade Traps will summon multiple Express Band owls with knives that chase Hat Kid by mimicking her movement."""
|
||||
display_name = "Parade Trap Weight"
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
default = 20
|
||||
|
||||
|
||||
@dataclass
|
||||
class AHITOptions(PerGameCommonOptions):
|
||||
EndGoal: EndGoal
|
||||
ActRandomizer: ActRandomizer
|
||||
ActPlando: ActPlando
|
||||
ActBlacklist: ActBlacklist
|
||||
ShuffleAlpineZiplines: ShuffleAlpineZiplines
|
||||
FinaleShuffle: FinaleShuffle
|
||||
LogicDifficulty: LogicDifficulty
|
||||
YarnBalancePercent: YarnBalancePercent
|
||||
TimePieceBalancePercent: TimePieceBalancePercent
|
||||
RandomizeHatOrder: RandomizeHatOrder
|
||||
UmbrellaLogic: UmbrellaLogic
|
||||
StartWithCompassBadge: StartWithCompassBadge
|
||||
CompassBadgeMode: CompassBadgeMode
|
||||
ShuffleStorybookPages: ShuffleStorybookPages
|
||||
ShuffleActContracts: ShuffleActContracts
|
||||
ShuffleSubconPaintings: ShuffleSubconPaintings
|
||||
NoPaintingSkips: NoPaintingSkips
|
||||
StartingChapter: StartingChapter
|
||||
CTRLogic: CTRLogic
|
||||
|
||||
EnableDLC1: EnableDLC1
|
||||
Tasksanity: Tasksanity
|
||||
TasksanityTaskStep: TasksanityTaskStep
|
||||
TasksanityCheckCount: TasksanityCheckCount
|
||||
ExcludeTour: ExcludeTour
|
||||
ShipShapeCustomTaskGoal: ShipShapeCustomTaskGoal
|
||||
|
||||
EnableDeathWish: EnableDeathWish
|
||||
DWShuffle: DWShuffle
|
||||
DWShuffleCountMin: DWShuffleCountMin
|
||||
DWShuffleCountMax: DWShuffleCountMax
|
||||
DeathWishOnly: DeathWishOnly
|
||||
DWEnableBonus: DWEnableBonus
|
||||
DWAutoCompleteBonuses: DWAutoCompleteBonuses
|
||||
DWExcludeAnnoyingContracts: DWExcludeAnnoyingContracts
|
||||
DWExcludeAnnoyingBonuses: DWExcludeAnnoyingBonuses
|
||||
DWExcludeCandles: DWExcludeCandles
|
||||
DWTimePieceRequirement: DWTimePieceRequirement
|
||||
|
||||
EnableDLC2: EnableDLC2
|
||||
BaseballBat: BaseballBat
|
||||
MetroMinPonCost: MetroMinPonCost
|
||||
MetroMaxPonCost: MetroMaxPonCost
|
||||
NyakuzaThugMinShopItems: NyakuzaThugMinShopItems
|
||||
NyakuzaThugMaxShopItems: NyakuzaThugMaxShopItems
|
||||
NoTicketSkips: NoTicketSkips
|
||||
|
||||
LowestChapterCost: LowestChapterCost
|
||||
HighestChapterCost: HighestChapterCost
|
||||
ChapterCostIncrement: ChapterCostIncrement
|
||||
ChapterCostMinDifference: ChapterCostMinDifference
|
||||
MaxExtraTimePieces: MaxExtraTimePieces
|
||||
|
||||
FinalChapterMinCost: FinalChapterMinCost
|
||||
FinalChapterMaxCost: FinalChapterMaxCost
|
||||
|
||||
YarnCostMin: YarnCostMin
|
||||
YarnCostMax: YarnCostMax
|
||||
YarnAvailable: YarnAvailable
|
||||
MinExtraYarn: MinExtraYarn
|
||||
HatItems: HatItems
|
||||
|
||||
MinPonCost: MinPonCost
|
||||
MaxPonCost: MaxPonCost
|
||||
BadgeSellerMinItems: BadgeSellerMinItems
|
||||
BadgeSellerMaxItems: BadgeSellerMaxItems
|
||||
|
||||
TrapChance: TrapChance
|
||||
BabyTrapWeight: BabyTrapWeight
|
||||
LaserTrapWeight: LaserTrapWeight
|
||||
ParadeTrapWeight: ParadeTrapWeight
|
||||
|
||||
death_link: DeathLink
|
||||
|
||||
|
||||
ahit_option_groups: Dict[str, List[Any]] = {
|
||||
"General Options": [EndGoal, ShuffleStorybookPages, ShuffleAlpineZiplines, ShuffleSubconPaintings,
|
||||
ShuffleActContracts, MinPonCost, MaxPonCost, BadgeSellerMinItems, BadgeSellerMaxItems,
|
||||
LogicDifficulty, NoPaintingSkips, CTRLogic],
|
||||
|
||||
"Act Options": [ActRandomizer, StartingChapter, LowestChapterCost, HighestChapterCost,
|
||||
ChapterCostIncrement, ChapterCostMinDifference, FinalChapterMinCost, FinalChapterMaxCost,
|
||||
FinaleShuffle, ActPlando, ActBlacklist],
|
||||
|
||||
"Item Options": [StartWithCompassBadge, CompassBadgeMode, RandomizeHatOrder, YarnAvailable, YarnCostMin,
|
||||
YarnCostMax, MinExtraYarn, HatItems, UmbrellaLogic, MaxExtraTimePieces, YarnBalancePercent,
|
||||
TimePieceBalancePercent],
|
||||
|
||||
"Arctic Cruise Options": [EnableDLC1, Tasksanity, TasksanityTaskStep, TasksanityCheckCount,
|
||||
ShipShapeCustomTaskGoal, ExcludeTour],
|
||||
|
||||
"Nyakuza Metro Options": [EnableDLC2, MetroMinPonCost, MetroMaxPonCost, NyakuzaThugMinShopItems,
|
||||
NyakuzaThugMaxShopItems, BaseballBat, NoTicketSkips],
|
||||
|
||||
"Death Wish Options": [EnableDeathWish, DWTimePieceRequirement, DWShuffle, DWShuffleCountMin, DWShuffleCountMax,
|
||||
DWEnableBonus, DWAutoCompleteBonuses, DWExcludeAnnoyingContracts, DWExcludeAnnoyingBonuses,
|
||||
DWExcludeCandles, DeathWishOnly],
|
||||
|
||||
"Trap Options": [TrapChance, BabyTrapWeight, LaserTrapWeight, ParadeTrapWeight]
|
||||
}
|
||||
|
||||
|
||||
slot_data_options: List[str] = [
|
||||
"EndGoal",
|
||||
"ActRandomizer",
|
||||
"ShuffleAlpineZiplines",
|
||||
"LogicDifficulty",
|
||||
"CTRLogic",
|
||||
"RandomizeHatOrder",
|
||||
"UmbrellaLogic",
|
||||
"StartWithCompassBadge",
|
||||
"CompassBadgeMode",
|
||||
"ShuffleStorybookPages",
|
||||
"ShuffleActContracts",
|
||||
"ShuffleSubconPaintings",
|
||||
"NoPaintingSkips",
|
||||
"HatItems",
|
||||
|
||||
"EnableDLC1",
|
||||
"Tasksanity",
|
||||
"TasksanityTaskStep",
|
||||
"TasksanityCheckCount",
|
||||
"ShipShapeCustomTaskGoal",
|
||||
"ExcludeTour",
|
||||
|
||||
"EnableDeathWish",
|
||||
"DWShuffle",
|
||||
"DeathWishOnly",
|
||||
"DWEnableBonus",
|
||||
"DWAutoCompleteBonuses",
|
||||
"DWTimePieceRequirement",
|
||||
|
||||
"EnableDLC2",
|
||||
"MetroMinPonCost",
|
||||
"MetroMaxPonCost",
|
||||
"BaseballBat",
|
||||
"NoTicketSkips",
|
||||
|
||||
"MinPonCost",
|
||||
"MaxPonCost",
|
||||
|
||||
"death_link",
|
||||
]
|
||||
Reference in New Issue
Block a user