forked from mirror/Archipelago
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
285 lines
7.9 KiB
Python
285 lines
7.9 KiB
Python
#Blank options file; not ready for customization yet
|
|
from dataclasses import dataclass
|
|
from Options import Choice, Toggle, PerGameCommonOptions, StartInventoryPool, NamedRange, Range
|
|
|
|
class StartingWorlds(Range):
|
|
"""
|
|
Number of random worlds to start with
|
|
"""
|
|
display_name = "Starting Worlds"
|
|
default = 1
|
|
range_start = 1
|
|
range_end = 10
|
|
|
|
class Character(Choice):
|
|
"""
|
|
Determines whether to play as Sora, Riku, or Both
|
|
0: Both
|
|
1: Sora Only
|
|
2: Riku Only
|
|
"""
|
|
display_name = "Character"
|
|
default = 0
|
|
option_both = 0
|
|
option_sora = 1
|
|
option_riku = 2
|
|
|
|
class Goal(Choice):
|
|
"""
|
|
Win Condition
|
|
0: Defeat the Final Boss (Xemnas for Sora and Young Xehanort for Riku
|
|
1: Defeat All Superbosses (Secret Portals and Julius)
|
|
"""
|
|
display_name = "Goal"
|
|
default = 0
|
|
option_final_boss = 0
|
|
option_superbosses = 1
|
|
|
|
class AVN(Toggle):
|
|
"""
|
|
If enabled, the win condition for the Final Boss goal is moved to AVN instead of Young Xehanort
|
|
This is ignored if the goal is Superbosses or the player chooses Sora as their character
|
|
"""
|
|
display_name = "Armored Ventus Nightmare"
|
|
|
|
class RecipeReqs(Range):
|
|
"""
|
|
Number of Recipes needed to beat the game
|
|
Meow Wow and Komory Bat recipes are always required
|
|
"""
|
|
display_name = "Recipes Required"
|
|
default = 2
|
|
range_start = 2
|
|
range_end = 54
|
|
|
|
class RecipesInPool(Range):
|
|
"""
|
|
Number of Recipes in the Item Pool
|
|
Always includes Meow Wow and Komory Bat recipes
|
|
"""
|
|
display_name = "Recipes in the Item Pool"
|
|
default = 54
|
|
range_start = 2
|
|
range_end = 54
|
|
|
|
class Superbosses(Toggle):
|
|
"""
|
|
Determines whether Secret Portals and Julius are checks
|
|
This option is ignored if the Goal is Superbosses
|
|
"""
|
|
|
|
class LordKyroo(Toggle):
|
|
display_name = "Lord Kyroo"
|
|
"""
|
|
Determines whether fighting Lord Kyroo is needed for checks.
|
|
Each unique location he can be fought grants a check, as well
|
|
as granting an additional check for defeating him.
|
|
"""
|
|
default = True
|
|
|
|
#####################################
|
|
#########Quality of Life#############
|
|
#####################################
|
|
class ExpMultiplier(Range):
|
|
"""
|
|
Determines the multiplier to apply to EXP gained
|
|
"""
|
|
display_name = "Exp Multiplier"
|
|
default = 2
|
|
range_start = 1
|
|
range_end = 10
|
|
|
|
class StatBonusAmount(Range):
|
|
"""
|
|
Determines how many points each stat increase grants.
|
|
Only applies to Strength, Defense, and Magic increases.
|
|
"""
|
|
display_name = "Stat Bonus Amount"
|
|
default = 2
|
|
range_start = 1
|
|
range_end = 5
|
|
|
|
class StrengthInPool(Range):
|
|
"""
|
|
Determines how many strength increases per character are in the item pool.
|
|
Does nothing if Stats On Levels is enabled.
|
|
"""
|
|
display_name = "Strength in Pool"
|
|
default = 18
|
|
range_start = 0
|
|
range_end = 50
|
|
|
|
class MagicInPool(Range):
|
|
"""
|
|
Determines how many magic increases per character are in the item pool.
|
|
Does nothing if Stats On Levels is enabled.
|
|
"""
|
|
display_name = "Magic in Pool"
|
|
default = 18
|
|
range_start = 0
|
|
range_end = 50
|
|
|
|
class DefenseInPool(Range):
|
|
"""
|
|
Determines how many defense increases per character are in the item pool.
|
|
Does nothing if Stats On Levels is enabled.
|
|
"""
|
|
display_name = "Defense in Pool"
|
|
default = 15
|
|
range_start = 0
|
|
range_end = 50
|
|
|
|
class PlayDestinyIslands(Toggle):
|
|
"""
|
|
Allows you to play the Ursula battle at the start of the run.
|
|
This grants 5 additional checks.
|
|
Does nothing if the player chooses Riku as their character.
|
|
|
|
NOTE: Need to connect to the server during the intro cutscene
|
|
with Braig in order for this to take effect.
|
|
"""
|
|
display_name = "Play Ursula Battle"
|
|
|
|
class SkipLightCycle(Toggle):
|
|
"""
|
|
Allows you to skip the Light Cycle section of Riku's Grid.
|
|
Skipping will still grant the check for clearing the Light Cycle minigame.
|
|
Does nothing if the player chooses Sora as their character.
|
|
"""
|
|
display_name = "Skip Light Cycle"
|
|
default = True
|
|
|
|
class FastGoMode(Toggle):
|
|
"""
|
|
When enabled, the save point for Young Xehanort is
|
|
activated after collecting the necessary key items,
|
|
allowing you to do the final fight instantly without
|
|
having to play the entirety of The World That Never Was.
|
|
|
|
Does nothing if the goal is Superbosses or the player
|
|
chooses Sora as their character.
|
|
"""
|
|
display_name = "Fast Go Mode"
|
|
|
|
#####################################
|
|
##########Extra Features#############
|
|
#####################################
|
|
class RandomizeKeybladeStats(Toggle):
|
|
"""
|
|
Determines if Keyblade stats should be randomized
|
|
"""
|
|
display_name = "Randomize Keyblade Stats"
|
|
|
|
class KeybladeMinStrength(Range):
|
|
"""
|
|
Determines the minimum Strength bonus a keyblade can have
|
|
"""
|
|
display_name = "Keyblade Minimum Strength"
|
|
default = 2
|
|
range_start = 0
|
|
range_end = 10
|
|
|
|
class KeybladeMaxStrength(Range):
|
|
"""
|
|
Determines the maximum Strength bonus a keyblade can have
|
|
"""
|
|
display_name = "Keyblade Maximum Strength"
|
|
default = 18
|
|
range_start = 11
|
|
range_end = 18
|
|
|
|
class KeybladeMinMagic(Range):
|
|
"""
|
|
Determines the minimum Magic bonus a keyblade can have
|
|
"""
|
|
display_name = "Keyblade Minimum Magic"
|
|
default = 2
|
|
range_start = 0
|
|
range_end = 10
|
|
|
|
class KeybladeMaxMagic(Range):
|
|
"""
|
|
Determines the maximum Magic bonus a keyblade can have
|
|
"""
|
|
display_name = "Keyblade Maximum Magic"
|
|
default = 16
|
|
range_start = 11
|
|
range_end = 18
|
|
|
|
class InstantDropTrapChance(Range):
|
|
"""
|
|
Determines the % chance a filler item gets replaced by an instant drop trap.
|
|
"""
|
|
display_name = "Instant Drop Trap Chance"
|
|
default = 0
|
|
range_start = 0
|
|
range_end = 25
|
|
|
|
class StatsOnLevels(Toggle):
|
|
"""
|
|
Determines whether level checks contain only stat increases.
|
|
"""
|
|
display_name = "Stats On Levels"
|
|
|
|
class SingleFlowmotion(Toggle):
|
|
"""
|
|
If enabled, all flowmotion is obtained as a single item
|
|
"""
|
|
display_name = "Flowmotion is One Item"
|
|
|
|
class ReceivedItemNotifications(Choice):
|
|
"""
|
|
Determine how received item notifications are handled
|
|
0: Display a notification for every received item
|
|
1: Display a notification for received progressive items only
|
|
2: Do not display received item notifications
|
|
"""
|
|
display_name = "Local Item Notifications"
|
|
default = 0
|
|
option_display_received_all = 0
|
|
option_display_received_progressive = 1
|
|
option_display_received_none = 2
|
|
|
|
class SentItemNotifications(Choice):
|
|
"""
|
|
Determine how sent item notifications are handled
|
|
0: Display a notification for every sent item
|
|
1: Display a notification for sent progressive items only
|
|
2: Do not display sent item notifications
|
|
"""
|
|
display_name = "Sent Item Notifications"
|
|
default = 0
|
|
option_display_sent_all = 0
|
|
option_display_sent_progressive = 1
|
|
option_display_sent_none = 2
|
|
|
|
@dataclass
|
|
class KHDDDOptions(PerGameCommonOptions):
|
|
character: Character
|
|
goal: Goal
|
|
armored_ventus_nightmare: AVN
|
|
recipe_reqs: RecipeReqs
|
|
recipes_in_pool: RecipesInPool
|
|
starting_worlds: StartingWorlds
|
|
superbosses: Superbosses
|
|
lord_kyroo: LordKyroo
|
|
play_destiny_islands: PlayDestinyIslands
|
|
skip_light_cycle: SkipLightCycle
|
|
fast_go_mode: FastGoMode
|
|
exp_multiplier: ExpMultiplier
|
|
stat_bonus: StatBonusAmount
|
|
strength_in_pool: StrengthInPool
|
|
magic_in_pool: MagicInPool
|
|
defense_in_pool: DefenseInPool
|
|
randomize_keyblade_stats: RandomizeKeybladeStats
|
|
keyblade_min_str: KeybladeMinStrength
|
|
keyblade_max_str: KeybladeMaxStrength
|
|
keyblade_min_mag: KeybladeMinMagic
|
|
keyblade_max_mag: KeybladeMaxMagic
|
|
instant_drop_trap_chance: InstantDropTrapChance
|
|
stats_on_levels: StatsOnLevels
|
|
single_flowmotion: SingleFlowmotion
|
|
received_notifications: ReceivedItemNotifications
|
|
sent_notifications: SentItemNotifications
|
|
|
|
start_inventory_from_pool: StartInventoryPool |