TUNIC: Implement New Game (#2172)
This commit is contained in:
147
worlds/tunic/options.py
Normal file
147
worlds/tunic/options.py
Normal file
@@ -0,0 +1,147 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from Options import DefaultOnToggle, Toggle, StartInventoryPool, Choice, Range, PerGameCommonOptions
|
||||
|
||||
|
||||
class SwordProgression(DefaultOnToggle):
|
||||
"""Adds four sword upgrades to the item pool that will progressively grant stronger melee weapons, including two new
|
||||
swords with increased range and attack power."""
|
||||
internal_name = "sword_progression"
|
||||
display_name = "Sword Progression"
|
||||
|
||||
|
||||
class StartWithSword(Toggle):
|
||||
"""Start with a sword in the player's inventory. Does not count towards Sword Progression."""
|
||||
internal_name = "start_with_sword"
|
||||
display_name = "Start With Sword"
|
||||
|
||||
|
||||
class KeysBehindBosses(Toggle):
|
||||
"""Places the three hexagon keys behind their respective boss fight in your world."""
|
||||
internal_name = "keys_behind_bosses"
|
||||
display_name = "Keys Behind Bosses"
|
||||
|
||||
|
||||
class AbilityShuffling(Toggle):
|
||||
"""Locks the usage of Prayer, Holy Cross*, and Ice Rod until the relevant pages of the manual have been found.
|
||||
If playing Hexagon Quest, abilities are instead randomly unlocked after obtaining 25%, 50%, and 75% of the required
|
||||
Hexagon goal amount.
|
||||
*Certain Holy Cross usages are still allowed, such as the free bomb codes, the seeking spell, and other
|
||||
player-facing codes.
|
||||
"""
|
||||
internal_name = "ability_shuffling"
|
||||
display_name = "Ability Shuffling"
|
||||
|
||||
|
||||
class LogicRules(Choice):
|
||||
"""Set which logic rules to use for your world.
|
||||
Restricted: Standard logic, no glitches.
|
||||
No Major Glitches: Ice grapples through doors, shooting the west bell, and boss quick kills are included in logic.
|
||||
Unrestricted: Logic in No Major Glitches, as well as ladder storage to get to certain places early.
|
||||
*Special Shop is not in logic without the Hero's Laurels in Unrestricted due to soft lock potential.
|
||||
*Using Ladder Storage to get to individual chests is not in logic to avoid tedium.
|
||||
*Getting knocked out of the air by enemies during Ladder Storage to reach places is not in logic, except for in
|
||||
Rooted Ziggurat Lower. This is so you're not punished for playing with enemy rando on."""
|
||||
internal_name = "logic_rules"
|
||||
display_name = "Logic Rules"
|
||||
option_restricted = 0
|
||||
option_no_major_glitches = 1
|
||||
option_unrestricted = 2
|
||||
default = 0
|
||||
|
||||
|
||||
class Lanternless(Toggle):
|
||||
"""Choose whether you require the Lantern for dark areas.
|
||||
When enabled, the Lantern is marked as Useful instead of Progression."""
|
||||
internal_name = "lanternless"
|
||||
display_name = "Lanternless"
|
||||
|
||||
|
||||
class Maskless(Toggle):
|
||||
"""Choose whether you require the Scavenger's Mask for Lower Quarry.
|
||||
When enabled, the Scavenger's Mask is marked as Useful instead of Progression."""
|
||||
internal_name = "maskless"
|
||||
display_name = "Maskless"
|
||||
|
||||
|
||||
class FoolTraps(Choice):
|
||||
"""Replaces low-to-medium value money rewards in the item pool with fool traps, which cause random negative
|
||||
effects to the player."""
|
||||
internal_name = "fool_traps"
|
||||
display_name = "Fool Traps"
|
||||
option_off = 0
|
||||
option_normal = 1
|
||||
option_double = 2
|
||||
option_onslaught = 3
|
||||
default = 1
|
||||
|
||||
|
||||
class HexagonQuest(Toggle):
|
||||
"""An alternate goal that shuffles Gold "Questagon" items into the item pool and allows the game to be completed
|
||||
after collecting the required number of them."""
|
||||
internal_name = "hexagon_quest"
|
||||
display_name = "Hexagon Quest"
|
||||
|
||||
|
||||
class HexagonGoal(Range):
|
||||
"""How many Gold Questagons are required to complete the game on Hexagon Quest."""
|
||||
internal_name = "hexagon_goal"
|
||||
display_name = "Gold Hexagons Required"
|
||||
range_start = 15
|
||||
range_end = 50
|
||||
default = 20
|
||||
|
||||
|
||||
class ExtraHexagonPercentage(Range):
|
||||
"""How many extra Gold Questagons are shuffled into the item pool, taken as a percentage of the goal amount."""
|
||||
internal_name = "extra_hexagon_percentage"
|
||||
display_name = "Percentage of Extra Gold Hexagons"
|
||||
range_start = 0
|
||||
range_end = 100
|
||||
default = 50
|
||||
|
||||
|
||||
class EntranceRando(Toggle):
|
||||
"""Randomize the connections between scenes.
|
||||
A small, very lost fox on a big adventure."""
|
||||
internal_name = "entrance_rando"
|
||||
display_name = "Entrance Rando"
|
||||
|
||||
|
||||
class FixedShop(Toggle):
|
||||
"""Forces the Windmill entrance to lead to a shop, and places only one other shop in the pool.
|
||||
Has no effect if Entrance Rando is not enabled."""
|
||||
internal_name = "fixed_shop"
|
||||
display_name = "ER Fixed Shop"
|
||||
|
||||
|
||||
class LaurelsLocation(Choice):
|
||||
"""Force the Hero's Laurels to be placed at a location in your world.
|
||||
For if you want to avoid or specify early or late Laurels.
|
||||
If you use the 10 Fairies option in Entrance Rando, Secret Gathering Place will be at its vanilla entrance."""
|
||||
internal_name = "laurels_location"
|
||||
display_name = "Laurels Location"
|
||||
option_anywhere = 0
|
||||
option_6_coins = 1
|
||||
option_10_coins = 2
|
||||
option_10_fairies = 3
|
||||
default = 0
|
||||
|
||||
|
||||
@dataclass
|
||||
class TunicOptions(PerGameCommonOptions):
|
||||
sword_progression: SwordProgression
|
||||
start_with_sword: StartWithSword
|
||||
keys_behind_bosses: KeysBehindBosses
|
||||
ability_shuffling: AbilityShuffling
|
||||
logic_rules: LogicRules
|
||||
entrance_rando: EntranceRando
|
||||
fixed_shop: FixedShop
|
||||
fool_traps: FoolTraps
|
||||
hexagon_quest: HexagonQuest
|
||||
hexagon_goal: HexagonGoal
|
||||
extra_hexagon_percentage: ExtraHexagonPercentage
|
||||
lanternless: Lanternless
|
||||
maskless: Maskless
|
||||
laurels_location: LaurelsLocation
|
||||
start_inventory_from_pool: StartInventoryPool
|
||||
Reference in New Issue
Block a user