Files
dockipelago/worlds/khbbs/Options.py
Jonathan Tinney 7971961166
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
add schedule I, sonic 1/frontiers/heroes, spirit island
2026-04-02 23:46:36 -07:00

207 lines
5.4 KiB
Python

from dataclasses import dataclass
from Options import Toggle, Range, NamedRange, PerGameCommonOptions, StartInventoryPool, OptionGroup
class StartingWorlds(Range):
"""
Number of random worlds to start with.
"""
display_name = "Starting Worlds"
default = 0
range_start = 0
range_end = 11
class EXPMultiplier(NamedRange):
"""
Determines the multiplier to apply to EXP gained
"""
display_name = "EXP Multiplier"
default = 48
range_start = 16 // 4
range_end = 160
special_range_names = {
"0.25x": 16 // 4,
"0.5x": 16 // 2,
"1x": 16,
"2x": 16 * 2,
"3x": 16 * 3,
"4x": 16 * 4,
"8x": 16 * 8,
"10x": 16 * 10,
}
class Character(NamedRange):
"""
Determines the expected player character.
0: Ventus
1: Aqua
2: Terra
"""
display_name = "Character"
default = 2
range_start = 0
range_end = 2
special_range_names = {
"ventus": 0,
"aqua": 1,
"terra": 2,
}
class FinalTerraXehanortII(Toggle):
"""
Determines if Aqua will need to defeat Final Terra Xehanort II to complete her seed.
Does nothing if the player chooses a character other than Aqua
"""
display_name = "Final Terra Xehanort II"
class MirageArena(Toggle):
"""
Determines if Mirage Arena battle locations should be included.
"""
display_name = "Mirage Arena Battles"
class CommandBoard(Toggle):
"""
Determines if Mirage Arena Command Board locations should be included.
"""
display_name = "Command Board"
class SuperBosses(Toggle):
"""
Determines if Super Boss locations should be included.
"""
display_name = "Super Bosses"
class MaxHPIncreases(Range):
"""
Number of Max HP Increases are in the item pool.
"""
display_name = "Max HP Increases"
default = 8
range_start = 0
range_end = 9
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 STR Bonus"
default = 2
range_start = 2
range_end = 10
class KeybladeMaxStrength(Range):
"""
Determines the maximum Strength bonus a keyblade can have.
"""
display_name = "Keyblade Maximum STR Bonus"
default = 10
range_start = 2
range_end = 10
class KeybladeMinMagic(Range):
"""
Determines the minimum Magic bonus a keyblade can have.
"""
display_name = "Keyblade Minimum MP Bonus"
default = -2
range_start = -2
range_end = 10
class KeybladeMaxMagic(Range):
"""
Determines the maximum Magic bonus a keyblade can have.
"""
display_name = "Keyblade Maximum MP Bonus"
default = 7
range_start = -2
range_end = 10
class RealmOfDarkness(Toggle):
"""
If your character is Aqua, determines if Realm of Darkness is included as a world.
"""
display_name = "Realm of Darkness"
class AdvancedLogic(Toggle):
"""
If enabled, using commands for tricky movement and precise jumps will be required to reach many locations
"""
display_name = "Advanced Logic"
class Minigames(Toggle):
"""
Determines whether to include locations for the Disney Town minigames and the racing minigames in Mirage Arena
"""
display_name = "Minigames"
class ArenaMedals(Toggle):
"""
Determines if there should be locations for Mirage Arena medal collecting. Currently these have no logic or shortcuts beyond having Mirage Arena.
"""
display_name = "Mirage Arena Medals"
class ArenaGlobalLocations(Toggle):
"""
Determines if there should be locations for the Mirage Arena missions that require beating the game with each character
Also enables Combined Threat and Monster of the Deep without their respective worlds
If playing on a fresh save leave this off or you'll have unreachable locations!
"""
display_name = "Mirage Arena Global Locations"
@dataclass
class KHBBSOptions(PerGameCommonOptions):
character: Character
starting_worlds: StartingWorlds
exp_multiplier: EXPMultiplier
final_terra_xehanort_ii: FinalTerraXehanortII
mirage_arena: MirageArena
command_board: CommandBoard
super_bosses: SuperBosses
max_hp_increases: MaxHPIncreases
randomize_keyblade_stats: RandomizeKeybladeStats
keyblade_min_str: KeybladeMinStrength
keyblade_max_str: KeybladeMaxStrength
keyblade_min_mgc: KeybladeMinMagic
keyblade_max_mgc: KeybladeMaxMagic
realm_of_darkness: RealmOfDarkness
advanced_logic: AdvancedLogic
minigames: Minigames
arena_medals: ArenaMedals
arena_global_locations: ArenaGlobalLocations
start_inventory_from_pool: StartInventoryPool
khbbs_option_groups = [
OptionGroup("Locations",[
Character,
FinalTerraXehanortII,
RealmOfDarkness,
MirageArena,
ArenaGlobalLocations,
CommandBoard,
ArenaMedals,
Minigames,
SuperBosses,
]),
OptionGroup("Stats",[
EXPMultiplier,
MaxHPIncreases,
]),
OptionGroup("Keyblades",[
RandomizeKeybladeStats,
KeybladeMinStrength,
KeybladeMaxStrength,
KeybladeMinMagic,
KeybladeMaxMagic,
]),
OptionGroup("Misc",[
StartingWorlds,
AdvancedLogic,
]),
]