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
382 lines
14 KiB
Python
382 lines
14 KiB
Python
from dataclasses import dataclass
|
|
|
|
from Options import Range, Toggle, DefaultOnToggle, OptionSet, PerGameCommonOptions, StartInventoryPool, OptionGroup
|
|
|
|
class StartingCure(DefaultOnToggle):
|
|
"""
|
|
Toggle whether you should start with a Card Set Cure
|
|
"""
|
|
display_name = "Starting Cure"
|
|
|
|
class AttackPower(Range):
|
|
"""
|
|
Modifier for Sora's strike power. Default is 10
|
|
"""
|
|
display_name = "Attack Power"
|
|
range_start = 1
|
|
range_end = 100
|
|
default = 10
|
|
|
|
class DaysLocations(Toggle):
|
|
"""
|
|
Toggle whether locations not available to the player until they watch 358/2 Days are included in the locations list.
|
|
"""
|
|
display_name = "Days Locations"
|
|
|
|
class StartingWorlds(Range):
|
|
"""
|
|
Number of random world cards to start with in addition to Traverse Town, which is always available.
|
|
"""
|
|
display_name = "Starting Worlds"
|
|
default = 0
|
|
range_start = 0
|
|
range_end = 11
|
|
|
|
class ChecksBehindLeon(Toggle):
|
|
"""
|
|
Toggle whether to include checks behind the Leon sleight tutorial. If left off, the player can safely skip that room.
|
|
"""
|
|
display_name = "Checks Behind Leon"
|
|
|
|
class ChecksBehindMinigames(Toggle):
|
|
"""
|
|
Toggle whether to include checks behind 100 Acre Woods Minigames.
|
|
"""
|
|
display_name = "Checks Behind Minigames"
|
|
|
|
class ChecksBehindSleightsLevels(Toggle):
|
|
"""
|
|
Toggle whether to include checks behind Sleights received from Leveling Up.
|
|
"""
|
|
display_name = "Checks Behind Level Up Sleights"
|
|
|
|
class EXPMultiplier(Range):
|
|
"""
|
|
Multiplier to apply to XP received.
|
|
"""
|
|
display_name = "EXP Multiplier"
|
|
range_start = 1
|
|
range_end = 10
|
|
default = 1
|
|
|
|
class Value0On(Range):
|
|
"""
|
|
Determines which consecutive card set 0 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "0 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value1On(Range):
|
|
"""
|
|
Determines which consecutive card set 1 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "1 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value2On(Range):
|
|
"""
|
|
Determines which consecutive card set 2 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "2 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value3On(Range):
|
|
"""
|
|
Determines which consecutive card set 3 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "3 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value4On(Range):
|
|
"""
|
|
Determines which consecutive card set 4 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "4 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value5On(Range):
|
|
"""
|
|
Determines which consecutive card set 5 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "5 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value6On(Range):
|
|
"""
|
|
Determines which consecutive card set 6 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "6 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value7On(Range):
|
|
"""
|
|
Determines which consecutive card set 7 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "7 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value8On(Range):
|
|
"""
|
|
Determines which consecutive card set 8 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "8 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value9On(Range):
|
|
"""
|
|
Determines which consecutive card set 9 value cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "9 Value Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 1
|
|
|
|
class Value0POn(Range):
|
|
"""
|
|
Determines which consecutive card set 0 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "0 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value1POn(Range):
|
|
"""
|
|
Determines which consecutive card set 1 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "1 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value2POn(Range):
|
|
"""
|
|
Determines which consecutive card set 2 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "2 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value3POn(Range):
|
|
"""
|
|
Determines which consecutive card set 3 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "3 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value4POn(Range):
|
|
"""
|
|
Determines which consecutive card set 4 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "4 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value5POn(Range):
|
|
"""
|
|
Determines which consecutive card set 5 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "5 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value6POn(Range):
|
|
"""
|
|
Determines which consecutive card set 6 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "6 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value7POn(Range):
|
|
"""
|
|
Determines which consecutive card set 7 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "7 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value8POn(Range):
|
|
"""
|
|
Determines which consecutive card set 8 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "8 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class Value9POn(Range):
|
|
"""
|
|
Determines which consecutive card set 9 value premium cards are found on. Set to 0 if you would like it be impossible to receive this value.
|
|
"""
|
|
display_name = "9 Value Premium Cards on Card Set Number"
|
|
range_start = 0
|
|
range_end = 20
|
|
default = 0
|
|
|
|
class EnemyCardAmount(Range):
|
|
"""
|
|
Determines the number of enemy cards shuffled into the pool. There are 57 unique enemy cards in the game.
|
|
If this value is less than 57, the enemy cards chosen to be shuffled in will be random."""
|
|
display_name = "Enemy Cards Shuffled In"
|
|
range_start = 0
|
|
range_end = 57
|
|
default = 57
|
|
|
|
class SleightAmount(Range):
|
|
"""
|
|
Determines the number of sleights shuffled into the pool. There are 83 unique sleights in the game.
|
|
If this value is less than 83, the sleights chosen to be shuffled in will be random."""
|
|
display_name = "Sleights Shuffled In"
|
|
range_start = 0
|
|
range_end = 83
|
|
default = 83
|
|
|
|
class ExcludeCards(OptionSet):
|
|
"""
|
|
Determines which attack, magic, item, or summon cards are to be exluded from the pool, if any.
|
|
"""
|
|
display_name = "Excluded Cards"
|
|
valid_keys = ["Three Wishes", "Crabclaw", "Pumpkinhead", "Fairy Harp", "Wishing Star", "Spellbinder", "Metal Chocobo", "Olympia", "Lionheart", "Lady Luck",
|
|
"Divine Rose", "Oathkeeper", "Oblivion", "Ultima Weapon", "Diamond Dust", "One Winged Angel", "Soul Eater", "Star Seeker", "Total Eclipse", "Midnight Roar",
|
|
"Maverick Flare", "Two Become One", "Bond of Flame", "Fire", "Blizzard", "Thunder", "Cure", "Gravity", "Stop", "Aero", "Simba", "Genie", "Bambi", "Dumbo",
|
|
"Tinker Bell", "Mushu", "Cloud", "Potion", "Hi-Potion", "Mega-Potion", "Ether", "Mega-Ether", "Elixir", "Megalixir"]
|
|
default = ["Ultima Weapon", "Diamond Dust", "One Winged Angel", "Soul Eater", "Star Seeker", "Total Eclipse", "Midnight Roar", "Maverick Flare", "Two Become One", "Bond of Flame"]
|
|
|
|
class ExcludeEnemyCards(OptionSet):
|
|
"""
|
|
Determines which enemy cards should be excluded from the pool, if any.
|
|
"""
|
|
display_name = "Excluded Enemy Cards"
|
|
valid_keys = ["Shadow", "Soldier", "Large Body", "Red Nocturne", "Blue Rhapsody", "Yellow Opera", "Green Requiem", "Powerwild", "Bouncywild", "Air Soldier", "Bandit",
|
|
"Fat Bandit", "Barrel Spider", "Search Ghost", "Sea Neon", "Screwdiver", "Aquatank", "Wight Knight", "Gargoyle", "Pirate", "Air Pirate", "Darkball", "Defender",
|
|
"Wyvern", "Wizard", "Neoshadow", "White Mushroom", "Black Fungus", "Creeper Plant", "Tornado Step", "Crescendo", "Guard Armor", "Parasite Cage", "Trickmaster",
|
|
"Darkside", "Card Soldier", "Hades", "Jafar", "Oogie Boogie", "Ursula", "Hook", "Dragon Maleficent", "Riku", "Axel", "Larxene", "Vexen", "Marluxia", "Lexaeus",
|
|
"Ansem", "Zexion", "Xemnas", "Xigbar", "Xaldin", "Saix", "Demyx", "Luxord", "Roxas"]
|
|
default = ["Lexaeus", "Ansem", "Zexion", "Xemnas", "Xigbar", "Xaldin", "Saix", "Demyx", "Luxord", "Roxas"]
|
|
|
|
class ExcludeSleights(OptionSet):
|
|
"""
|
|
Detmerines which sleights should be excluded from the pool, if any.
|
|
"""
|
|
display_name = "Exclude Sleights"
|
|
valid_keys = ["Sliding Dash", "Blitz", "Stun Impact", "Zantetsuken", "Strike Raid", "Sonic Blade", "Ars Arcanum", "Ragnarok", "Trinity Limit", "Fira", "Blizzara",
|
|
"Thundara", "Cura", "Gravira", "Stopra", "Aerora", "Firaga", "Blizzaga", "Thundaga", "Curaga", "Graviga", "Stopga", "Aeroga", "Fire Raid", "Blizzard Raid",
|
|
"Thunder Raid", "Reflect Raid", "Judgement", "Firaga Burst", "Raging Storm", "Mega Flare", "Freeze", "Homing Blizzara", "Aqua Splash", "Magnet Spiral",
|
|
"Lethal Frame", "Shock Impact", "Tornado", "Quake", "Warpinator", "Warp", "Bind", "Confuse", "Terror", "Synchro", "Gifted Miracle", "Teleport", "Holy",
|
|
"Proud Roar LV2", "Proud Roar LV3", "Splash LV2", "Splash LV3", "Paradise LV2", "Paradise LV3", "Idyll Romp", "Flare Breath LV2", "Flare Breath LV3",
|
|
"Showtime LV2", "Showtime LV3", "Twinkle LV2", "Twinkle LV3", "Cross-slash", "Omnislash", "Cross-slash+", "Magic LV2", "Magic LV3", "Stardust Blitz",
|
|
"Goofy Tornado LV2", "Goofy Tornado LV3", "Goofy Smash", "Wild Crush", "Sandstorm LV2", "Sandstorm LV3", "Surprise! LV2", "Surprise! LV3", "Spiral Wave LV2",
|
|
"Spiral Wave LV3", "Hummingbird LV2", "Hummingbird LV3", "Furious Volley LV2", "Furious Volley LV3", "Lucky Bounty LV2", "Lucky Bounty LV3"]
|
|
default = []
|
|
|
|
@dataclass
|
|
class KHRECOMOptions(PerGameCommonOptions):
|
|
starting_cure: StartingCure
|
|
days_locations: DaysLocations
|
|
checks_behind_leon: ChecksBehindLeon
|
|
exp_multiplier: EXPMultiplier
|
|
minigames: ChecksBehindMinigames
|
|
levels: ChecksBehindSleightsLevels
|
|
attack_power: AttackPower
|
|
starting_worlds: StartingWorlds
|
|
enemy_card_amount: EnemyCardAmount
|
|
sleight_amount: SleightAmount
|
|
value_0_on: Value0On
|
|
value_1_on: Value1On
|
|
value_2_on: Value2On
|
|
value_3_on: Value3On
|
|
value_4_on: Value4On
|
|
value_5_on: Value5On
|
|
value_6_on: Value6On
|
|
value_7_on: Value7On
|
|
value_8_on: Value8On
|
|
value_9_on: Value9On
|
|
value_0_p_on: Value0POn
|
|
value_1_p_on: Value1POn
|
|
value_2_p_on: Value2POn
|
|
value_3_p_on: Value3POn
|
|
value_4_p_on: Value4POn
|
|
value_5_p_on: Value5POn
|
|
value_6_p_on: Value6POn
|
|
value_7_p_on: Value7POn
|
|
value_8_p_on: Value8POn
|
|
value_9_p_on: Value9POn
|
|
exclude_cards: ExcludeCards
|
|
exclude_enemy_cards: ExcludeEnemyCards
|
|
exclude_sleights: ExcludeSleights
|
|
start_inventory_from_pool: StartInventoryPool
|
|
|
|
khrecom_option_groups = [
|
|
OptionGroup("Starting", [
|
|
StartingCure,
|
|
StartingWorlds
|
|
]),
|
|
OptionGroup("Locations", [
|
|
DaysLocations,
|
|
ChecksBehindLeon,
|
|
ChecksBehindMinigames,
|
|
ChecksBehindSleightsLevels
|
|
]),
|
|
OptionGroup("Stats", [
|
|
EXPMultiplier,
|
|
AttackPower
|
|
]),
|
|
OptionGroup("Cards", [
|
|
Value0On,
|
|
Value1On,
|
|
Value2On,
|
|
Value3On,
|
|
Value4On,
|
|
Value5On,
|
|
Value6On,
|
|
Value7On,
|
|
Value8On,
|
|
Value9On,
|
|
Value0POn,
|
|
Value1POn,
|
|
Value2POn,
|
|
Value3POn,
|
|
Value4POn,
|
|
Value5POn,
|
|
Value6POn,
|
|
Value7POn,
|
|
Value8POn,
|
|
Value9POn,
|
|
]),
|
|
OptionGroup("Sleights and Enemy Card Counts", [
|
|
SleightAmount,
|
|
EnemyCardAmount
|
|
]),
|
|
OptionGroup("Exclusions", [
|
|
ExcludeCards,
|
|
ExcludeEnemyCards,
|
|
ExcludeSleights
|
|
]),
|
|
]
|