Archipelago/worlds/kh2/Options.py

373 lines
9.6 KiB
Python
Raw Normal View History

from dataclasses import dataclass
2023-03-20 16:19:55 +00:00
from Options import Choice, Range, Toggle, ItemDict, PerGameCommonOptions, StartInventoryPool
2024-01-10 23:56:43 +00:00
from . import default_itempool_option
2023-03-20 16:19:55 +00:00
class SoraEXP(Range):
"""Sora Level Exp Multiplier"""
display_name = "Sora Level EXP"
range_start = 1
range_end = 10
default = 5
class FinalEXP(Range):
"""Final Form Exp Multiplier"""
display_name = "Final Form EXP"
range_start = 1
range_end = 10
default = 3
class MasterEXP(Range):
"""Master Form Exp Multiplier"""
display_name = "Master Form EXP"
range_start = 1
range_end = 10
default = 3
class LimitEXP(Range):
"""Limit Form Exp Multiplier"""
display_name = "Limit Form EXP"
range_start = 1
range_end = 10
default = 3
class WisdomEXP(Range):
"""Wisdom Form Exp Multiplier"""
display_name = "Wisdom Form EXP"
range_start = 1
range_end = 10
default = 3
class ValorEXP(Range):
"""Valor Form Exp Multiplier"""
display_name = "Valor Form EXP"
range_start = 1
range_end = 10
default = 3
class SummonEXP(Range):
"""Summon Exp Multiplier"""
display_name = "Summon level EXP"
range_start = 1
range_end = 10
default = 5
class Schmovement(Choice):
"""Level of Progressive Movement Abilities You Start With"""
2023-03-20 16:19:55 +00:00
display_name = "Schmovement"
option_level_0 = 0
option_level_1 = 1
option_level_2 = 2
option_level_3 = 3
option_level_4 = 4
default = 1
class RandomGrowth(Range):
"""Amount of Random Progressive Movement Abilities You Start With"""
2023-03-20 16:19:55 +00:00
display_name = "Random Starting Growth"
range_start = 0
range_end = 20
default = 0
class KeybladeMin(Range):
"""Minimum Stats for Keyblades"""
2023-03-20 16:19:55 +00:00
display_name = "Keyblade Minimum Stats"
range_start = 0
range_end = 20
default = 3
class KeybladeMax(Range):
"""Maximum Stats for Keyblades"""
2023-03-20 16:19:55 +00:00
display_name = "Keyblade Max Stats"
range_start = 0
range_end = 20
default = 7
class Visitlocking(Choice):
"""Determines the level of visit locking
No Visit Locking: Start with all 25 visit locking items.
Second Visit Locking: Start with 13 visit locking items for every first visit.
First and Second Visit Locking: One item for First Visit Two For Second Visit"""
2023-03-20 16:19:55 +00:00
display_name = "Visit locking"
option_no_visit_locking = 0 # starts with 25 visit locking
option_second_visit_locking = 1 # starts with 12 visit locking
2023-03-20 16:19:55 +00:00
option_first_and_second_visit_locking = 2 # starts with nothing
default = 2
class FightLogic(Choice):
"""
The level of logic to use when determining what fights in each KH2 world are beatable.
Easy: For Players not very comfortable doing things without a lot of tools.
Normal: For Players somewhat comfortable doing fights with some of the tools.
Hard: For Players comfortable doing fights with almost no tools.
"""
display_name = "Fight Logic"
option_easy = 0
option_normal = 1
option_hard = 2
default = 1
class FinalFormLogic(Choice):
"""Determines forcing final form logic
No Light and Darkness: Light and Darkness is not in logic.
Light And Darkness: Final Forcing with light and darkness is in logic.
Just a Form: All that requires final forcing is another form.
"""
display_name = "Final Form Logic"
option_no_light_and_darkness = 0
option_light_and_darkness = 1
option_just_a_form = 2
default = 1
class AutoFormLogic(Toggle):
""" Have Auto Forms levels in logic.
"""
display_name = "Auto Form Logic"
default = False
2023-03-20 16:19:55 +00:00
class RandomVisitLockingItem(Range):
2023-03-27 17:17:06 +00:00
"""Start with random amount of visit locking items."""
2023-03-20 16:19:55 +00:00
display_name = "Random Visit Locking Item"
range_start = 0
2023-03-27 17:17:06 +00:00
range_end = 25
default = 0
2023-03-20 16:19:55 +00:00
class SuperBosses(Toggle):
"""Terra Sephiroth and Data Fights Toggle."""
2023-03-20 16:19:55 +00:00
display_name = "Super Bosses"
default = True
2023-03-20 16:19:55 +00:00
class Cups(Choice):
"""Olympus Cups Toggles
No Cups: All Cups are placed into Excluded Locations.
Cups: Hades Paradox Cup is placed into Excluded Locations
2023-03-20 16:19:55 +00:00
Cups and Hades Paradox: Has Every Cup On."""
display_name = "Olympus Cups"
option_no_cups = 0
option_cups = 1
option_cups_and_hades_paradox = 2
default = 0
2023-03-20 16:19:55 +00:00
class LevelDepth(Choice):
"""Determines How many locations you want on levels
Level 50: 23 checks spread through 50 levels.
Level 99: 23 checks spread through 99 levels.
Level 50 sanity: 49 checks spread through 50 levels.
Level 99 sanity: 98 checks spread through 99 levels.
2023-03-20 16:19:55 +00:00
Level 1: no checks on levels(checks are replaced with stats)"""
display_name = "Level Depth"
option_level_50 = 0
option_level_99 = 1
option_level_50_sanity = 2
option_level_99_sanity = 3
option_level_1 = 4
default = 0
class DonaldGoofyStatsanity(Toggle):
"""Toggles if on Donald and Goofy's Get Bonus locations can be any item"""
display_name = "Donald & Goofy Statsanity"
default = True
2023-03-20 16:19:55 +00:00
class AtlanticaToggle(Toggle):
"""Atlantica Toggle"""
display_name = "Atlantica Toggle"
default = False
class PromiseCharm(Toggle):
"""Add Promise Charm to the pool"""
display_name = "Promise Charm"
default = False
2023-03-20 16:19:55 +00:00
class AntiForm(Toggle):
"""Add Anti Form to the pool"""
display_name = "Anti Form"
default = False
2023-03-20 16:19:55 +00:00
2023-03-20 16:19:55 +00:00
class Goal(Choice):
"""Win Condition
Three Proofs: Find the 3 Proofs to unlock the final door.
Lucky Emblem Hunt: Find required amount of Lucky Emblems.
Hitlist (Bounty Hunt): Find required amount of Bounties.
Lucky Emblem and Hitlist: Find the required amount of Lucky Emblems and Bounties."""
2023-03-20 16:19:55 +00:00
display_name = "Goal"
option_three_proofs = 0
option_lucky_emblem_hunt = 1
option_hitlist = 2
option_hitlist_and_lucky_emblem = 3
default = 1
2023-03-20 16:19:55 +00:00
class FinalXemnas(Toggle):
"""Kill Final Xemnas to Beat the Game.
This is in addition to your Goal.
I.E. get three proofs+kill final Xemnas"""
2023-03-20 16:19:55 +00:00
display_name = "Final Xemnas"
default = True
class LuckyEmblemsRequired(Range):
"""Number of Lucky Emblems to collect to Win/Unlock Final Xemnas' Door.
If Goal is not Lucky Emblem Hunt or Lucky Emblem and Hitlist this does nothing."""
2023-03-20 16:19:55 +00:00
display_name = "Lucky Emblems Required"
2023-03-27 17:17:06 +00:00
range_start = 1
2023-03-20 16:19:55 +00:00
range_end = 60
default = 35
2023-03-20 16:19:55 +00:00
class LuckyEmblemsAmount(Range):
"""Number of Lucky Emblems that are in the pool.
If Goal is not Lucky Emblem Hunt or Lucky Emblem and Hitlist this does nothing."""
2023-03-20 16:19:55 +00:00
display_name = "Lucky Emblems Available"
2023-03-27 17:17:06 +00:00
range_start = 1
2023-03-20 16:19:55 +00:00
range_end = 60
default = 40
class BountyRequired(Range):
"""Number of Bounties to collect to Win/Unlock Final Xemnas Door.
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
2023-03-20 16:19:55 +00:00
display_name = "Bounties Required"
2023-03-27 17:17:06 +00:00
range_start = 1
range_end = 26
2023-03-20 16:19:55 +00:00
default = 7
class BountyAmount(Range):
"""Number of Bounties that are in the pool.
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
2023-03-20 16:19:55 +00:00
display_name = "Bounties Available"
2023-03-27 17:17:06 +00:00
range_start = 1
range_end = 26
default = 10
class BountyStartHint(Toggle):
"""Start with Bounties Hinted"""
display_name = "Start with Bounties Hinted"
default = False
class WeaponSlotStartHint(Toggle):
"""Start with Weapon Slots' Hinted"""
display_name = "Start with Weapon Slots Hinted"
default = False
class CorSkipToggle(Toggle):
"""Toggle for Cor skip.
Tools depend on which difficulty was chosen on Fight Difficulty.
Toggle does not negate fight logic but is an alternative.
Final Chest is also can be put into logic with this skip.
"""
display_name = "CoR Skip Toggle."
default = False
class CustomItemPoolQuantity(ItemDict):
"""Add more of an item into the itempool. Note: You cannot take out items from the pool."""
display_name = "Custom Item Pool"
verify_item_name = True
default = default_itempool_option
class FillerItemsLocal(Toggle):
"""Make all dynamic filler classified items local. Recommended when playing with games with fewer locations than kh2"""
display_name = "Local Filler Items"
default = True
class SummonLevelLocationToggle(Toggle):
"""Toggle Summon levels to have locations."""
display_name = "Summon Level Locations"
default = False
# shamelessly stolen from the messanger
@dataclass
class KingdomHearts2Options(PerGameCommonOptions):
start_inventory: StartInventoryPool
LevelDepth: LevelDepth
Sora_Level_EXP: SoraEXP
Valor_Form_EXP: ValorEXP
Wisdom_Form_EXP: WisdomEXP
Limit_Form_EXP: LimitEXP
Master_Form_EXP: MasterEXP
Final_Form_EXP: FinalEXP
Summon_EXP: SummonEXP
Schmovement: Schmovement
RandomGrowth: RandomGrowth
AntiForm: AntiForm
Promise_Charm: PromiseCharm
Goal: Goal
FinalXemnas: FinalXemnas
LuckyEmblemsAmount: LuckyEmblemsAmount
LuckyEmblemsRequired: LuckyEmblemsRequired
BountyAmount: BountyAmount
BountyRequired: BountyRequired
BountyStartingHintToggle: BountyStartHint
Keyblade_Minimum: KeybladeMin
Keyblade_Maximum: KeybladeMax
WeaponSlotStartHint: WeaponSlotStartHint
FightLogic: FightLogic
FinalFormLogic: FinalFormLogic
AutoFormLogic: AutoFormLogic
DonaldGoofyStatsanity: DonaldGoofyStatsanity
FillerItemsLocal: FillerItemsLocal
Visitlocking: Visitlocking
RandomVisitLockingItem: RandomVisitLockingItem
SuperBosses: SuperBosses
Cups: Cups
SummonLevelLocationToggle: SummonLevelLocationToggle
AtlanticaToggle: AtlanticaToggle
CorSkipToggle: CorSkipToggle
CustomItemPoolQuantity: CustomItemPoolQuantity