2024-01-12 14:32:15 -05:00
from dataclasses import dataclass
2024-05-22 20:12:59 -04:00
from typing import Dict , Any
2024-06-01 06:34:41 -05:00
from Options import ( DefaultOnToggle , Toggle , StartInventoryPool , Choice , Range , TextChoice , PlandoConnections ,
PerGameCommonOptions , OptionGroup )
from . er_data import portal_mapping
2024-01-12 14:32:15 -05:00
class SwordProgression ( DefaultOnToggle ) :
2024-05-21 18:12:52 -04:00
"""
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 .
"""
2024-01-12 14:32:15 -05:00
internal_name = " sword_progression "
display_name = " Sword Progression "
class StartWithSword ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Start with a sword in the player ' s inventory. Does not count towards Sword Progression.
"""
2024-01-12 14:32:15 -05:00
internal_name = " start_with_sword "
display_name = " Start With Sword "
class KeysBehindBosses ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Places the three hexagon keys behind their respective boss fight in your world .
"""
2024-01-12 14:32:15 -05:00
internal_name = " keys_behind_bosses "
display_name = " Keys Behind Bosses "
class AbilityShuffling ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Locks the usage of Prayer , Holy Cross * , and the Icebolt combo until the relevant pages of the manual have been found .
2024-03-21 11:50:07 -04:00
If playing Hexagon Quest , abilities are instead randomly unlocked after obtaining 25 % , 50 % , and 75 % of the required Hexagon goal amount .
2024-05-21 18:12:52 -04:00
* Certain Holy Cross usages are still allowed , such as the free bomb codes , the seeking spell , and other player - facing codes .
2024-01-12 14:32:15 -05:00
"""
internal_name = " ability_shuffling "
2024-03-15 08:53:41 -04:00
display_name = " Shuffle Abilities "
2024-01-12 14:32:15 -05:00
class LogicRules ( Choice ) :
2024-03-21 11:50:07 -04:00
"""
Set which logic rules to use for your world .
2024-01-12 14:32:15 -05:00
Restricted : Standard logic , no glitches .
2024-02-16 17:24:25 -05:00
No Major Glitches : Sneaky Laurels zips , ice grapples through doors , shooting the west bell , and boss quick kills are included in logic .
* Ice grappling through the Ziggurat door is not in logic since you will get stuck in there without Prayer .
2024-01-12 14:32:15 -05:00
Unrestricted : Logic in No Major Glitches , as well as ladder storage to get to certain places early .
2024-05-21 18:12:52 -04:00
* Torch is given to the player at the start of the game due to the high softlock potential with various tricks . Using the torch is not required in logic .
* 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.
2024-03-21 11:50:07 -04:00
"""
2024-01-12 14:32:15 -05:00
internal_name = " logic_rules "
display_name = " Logic Rules "
option_restricted = 0
option_no_major_glitches = 1
2024-02-16 17:24:25 -05:00
alias_nmg = 1
2024-01-12 14:32:15 -05:00
option_unrestricted = 2
2024-02-16 17:24:25 -05:00
alias_ur = 2
2024-01-12 14:32:15 -05:00
default = 0
class Lanternless ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Choose whether you require the Lantern for dark areas .
When enabled , the Lantern is marked as Useful instead of Progression .
"""
2024-01-12 14:32:15 -05:00
internal_name = " lanternless "
display_name = " Lanternless "
class Maskless ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Choose whether you require the Scavenger ' s Mask for Lower Quarry.
When enabled , the Scavenger ' s Mask is marked as Useful instead of Progression.
"""
2024-01-12 14:32:15 -05:00
internal_name = " maskless "
display_name = " Maskless "
class FoolTraps ( Choice ) :
2024-05-21 18:12:52 -04:00
"""
Replaces low - to - medium value money rewards in the item pool with fool traps , which cause random negative effects to the player .
"""
2024-01-12 14:32:15 -05:00
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 ) :
2024-05-21 18:12:52 -04:00
"""
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 .
"""
2024-01-12 14:32:15 -05:00
internal_name = " hexagon_quest "
display_name = " Hexagon Quest "
class HexagonGoal ( Range ) :
2024-05-21 18:12:52 -04:00
"""
How many Gold Questagons are required to complete the game on Hexagon Quest .
"""
2024-01-12 14:32:15 -05:00
internal_name = " hexagon_goal "
display_name = " Gold Hexagons Required "
range_start = 15
range_end = 50
default = 20
class ExtraHexagonPercentage ( Range ) :
2024-05-21 18:12:52 -04:00
"""
How many extra Gold Questagons are shuffled into the item pool , taken as a percentage of the goal amount .
"""
2024-01-12 14:32:15 -05:00
internal_name = " extra_hexagon_percentage "
display_name = " Percentage of Extra Gold Hexagons "
range_start = 0
range_end = 100
default = 50
2024-03-15 12:52:05 -04:00
class EntranceRando ( TextChoice ) :
2024-03-21 11:50:07 -04:00
"""
Randomize the connections between scenes .
A small , very lost fox on a big adventure .
2024-05-03 01:21:27 -04:00
If you set this option ' s value to a string, it will be used as a custom seed.
Every player who uses the same custom seed will have the same entrances , choosing the most restrictive settings among these players for the purpose of pairing entrances .
2024-03-21 11:50:07 -04:00
"""
2024-01-12 14:32:15 -05:00
internal_name = " entrance_rando "
display_name = " Entrance Rando "
2024-03-15 12:52:05 -04:00
alias_false = 0
option_no = 0
alias_true = 1
option_yes = 1
default = 0
2024-01-12 14:32:15 -05:00
class FixedShop ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Forces the Windmill entrance to lead to a shop , and removes the remaining shops from the pool .
2024-05-19 19:01:24 -04:00
Adds another entrance in Rooted Ziggurat Lower to keep an even number of entrances .
2024-05-21 18:12:52 -04:00
Has no effect if Entrance Rando is not enabled .
"""
2024-01-12 14:32:15 -05:00
internal_name = " fixed_shop "
2024-03-15 08:53:41 -04:00
display_name = " Fewer Shops in Entrance Rando "
2024-01-12 14:32:15 -05:00
class LaurelsLocation ( Choice ) :
2024-05-21 18:12:52 -04:00
"""
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 .
"""
2024-01-12 14:32:15 -05:00
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
2024-03-21 11:50:07 -04:00
class ShuffleLadders ( Toggle ) :
2024-05-21 18:12:52 -04:00
"""
Turns several ladders in the game into items that must be found before they can be climbed on .
2024-03-21 11:50:07 -04:00
Adds more layers of progression to the game by blocking access to many areas early on .
2024-05-21 18:12:52 -04:00
" Ladders were a mistake. "
— Andrew Shouldice
"""
2024-03-21 11:50:07 -04:00
internal_name = " shuffle_ladders "
display_name = " Shuffle Ladders "
2024-06-01 06:34:41 -05:00
class TUNICPlandoConnections ( PlandoConnections ) :
entrances = { * ( portal . name for portal in portal_mapping ) , " Shop " , " Shop Portal " }
exits = { * ( portal . name for portal in portal_mapping ) , " Shop " , " Shop Portal " }
duplicate_exits = True
2024-03-21 11:50:07 -04:00
2024-01-12 14:32:15 -05:00
@dataclass
class TunicOptions ( PerGameCommonOptions ) :
2024-05-19 19:01:24 -04:00
start_inventory_from_pool : StartInventoryPool
2024-01-12 14:32:15 -05:00
sword_progression : SwordProgression
start_with_sword : StartWithSword
keys_behind_bosses : KeysBehindBosses
ability_shuffling : AbilityShuffling
2024-03-21 11:50:07 -04:00
shuffle_ladders : ShuffleLadders
2024-01-12 14:32:15 -05:00
entrance_rando : EntranceRando
fixed_shop : FixedShop
2024-03-21 11:50:07 -04:00
logic_rules : LogicRules
2024-01-12 14:32:15 -05:00
fool_traps : FoolTraps
hexagon_quest : HexagonQuest
hexagon_goal : HexagonGoal
extra_hexagon_percentage : ExtraHexagonPercentage
lanternless : Lanternless
maskless : Maskless
laurels_location : LaurelsLocation
2024-06-01 06:34:41 -05:00
plando_connections : TUNICPlandoConnections
2024-05-21 18:12:52 -04:00
tunic_option_groups = [
OptionGroup ( " Logic Options " , [
LogicRules ,
Lanternless ,
Maskless ,
] )
]
2024-05-22 20:12:59 -04:00
tunic_option_presets : Dict [ str , Dict [ str , Any ] ] = {
" Sync " : {
" ability_shuffling " : True ,
} ,
" Async " : {
" progression_balancing " : 0 ,
" ability_shuffling " : True ,
" shuffle_ladders " : True ,
" laurels_location " : " 10_fairies " ,
} ,
" Glace Mode " : {
" accessibility " : " minimal " ,
" ability_shuffling " : True ,
" entrance_rando " : " yes " ,
" fool_traps " : " onslaught " ,
" logic_rules " : " unrestricted " ,
" maskless " : True ,
" lanternless " : True ,
} ,
}