KH2: Version 2 (#2009)

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Joe Prochaska <prochaska.joseph@gmail.com>
This commit is contained in:
JaredWeakStrike
2023-11-25 09:46:00 -05:00
committed by GitHub
parent c138918400
commit 2ccf11f3d7
24 changed files with 6341 additions and 4882 deletions

View File

@@ -1,7 +1,8 @@
from Options import Choice, Option, Range, Toggle, OptionSet
import typing
from dataclasses import dataclass
from worlds.kh2 import SupportAbility_Table, ActionAbility_Table
from Options import Choice, Range, Toggle, ItemDict, PerGameCommonOptions, StartInventoryPool
from worlds.kh2 import default_itempool_option
class SoraEXP(Range):
@@ -107,23 +108,61 @@ class Visitlocking(Choice):
First and Second Visit Locking: One item for First Visit Two For Second Visit"""
display_name = "Visit locking"
option_no_visit_locking = 0 # starts with 25 visit locking
option_second_visit_locking = 1 # starts with 13 (no icecream/picture)
option_second_visit_locking = 1 # starts with 12 visit locking
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
class RandomVisitLockingItem(Range):
"""Start with random amount of visit locking items."""
display_name = "Random Visit Locking Item"
range_start = 0
range_end = 25
default = 3
default = 0
class SuperBosses(Toggle):
"""Terra, Sephiroth and Data Fights Toggle."""
"""Terra Sephiroth and Data Fights Toggle."""
display_name = "Super Bosses"
default = False
default = True
class Cups(Choice):
@@ -135,7 +174,7 @@ class Cups(Choice):
option_no_cups = 0
option_cups = 1
option_cups_and_hades_paradox = 2
default = 1
default = 0
class LevelDepth(Choice):
@@ -157,67 +196,71 @@ class LevelDepth(Choice):
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
class AtlanticaToggle(Toggle):
"""Atlantica Toggle"""
display_name = "Atlantica Toggle"
default = False
class PromiseCharm(Toggle):
"""Add Promise Charm to the Pool"""
"""Add Promise Charm to the pool"""
display_name = "Promise Charm"
default = False
class KeybladeAbilities(Choice):
"""
Action: Action Abilities in the Keyblade Slot Pool.
Support: Support Abilities in the Keyblade Slot Pool.
Both: Action and Support Abilities in the Keyblade Slot Pool."""
display_name = "Keyblade Abilities"
option_support = 0
option_action = 1
option_both = 2
default = 0
class BlacklistKeyblade(OptionSet):
"""Black List these Abilities on Keyblades"""
display_name = "Blacklist Keyblade Abilities"
valid_keys = set(SupportAbility_Table.keys()).union(ActionAbility_Table.keys())
class AntiForm(Toggle):
"""Add Anti Form to the pool"""
display_name = "Anti Form"
default = False
class Goal(Choice):
"""Win Condition
Three Proofs: Get a Gold Crown on Sora's Head.
Three Proofs: Find the 3 Proofs to unlock the final door.
Lucky Emblem Hunt: Find Required Amount of Lucky Emblems .
Lucky Emblem Hunt: Find required amount of Lucky Emblems.
Hitlist (Bounty Hunt): Find Required Amount of Bounties"""
Hitlist (Bounty Hunt): Find required amount of Bounties.
Lucky Emblem and Hitlist: Find the required amount of Lucky Emblems and Bounties."""
display_name = "Goal"
option_three_proofs = 0
option_lucky_emblem_hunt = 1
option_hitlist = 2
default = 0
option_hitlist_and_lucky_emblem = 3
default = 1
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"""
This is in addition to your Goal.
I.E. get three proofs+kill final Xemnas"""
display_name = "Final Xemnas"
default = True
class LuckyEmblemsRequired(Range):
"""Number of Lucky Emblems to collect to Win/Unlock Final Xemnas Door.
"""Number of Lucky Emblems to collect to Win/Unlock Final Xemnas' Door.
If Goal is not Lucky Emblem Hunt this does nothing."""
If Goal is not Lucky Emblem Hunt or Lucky Emblem and Hitlist this does nothing."""
display_name = "Lucky Emblems Required"
range_start = 1
range_end = 60
default = 30
default = 35
class LuckyEmblemsAmount(Range):
"""Number of Lucky Emblems that are in the pool.
If Goal is not Lucky Emblem Hunt this does nothing."""
If Goal is not Lucky Emblem Hunt or Lucky Emblem and Hitlist this does nothing."""
display_name = "Lucky Emblems Available"
range_start = 1
range_end = 60
@@ -227,48 +270,103 @@ class LuckyEmblemsAmount(Range):
class BountyRequired(Range):
"""Number of Bounties to collect to Win/Unlock Final Xemnas Door.
If Goal is not Hitlist this does nothing."""
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
display_name = "Bounties Required"
range_start = 1
range_end = 24
range_end = 26
default = 7
class BountyAmount(Range):
"""Number of Bounties that are in the pool.
If Goal is not Hitlist this does nothing."""
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
display_name = "Bounties Available"
range_start = 1
range_end = 24
default = 13
range_end = 26
default = 10
KH2_Options: typing.Dict[str, type(Option)] = {
"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,
"Promise_Charm": PromiseCharm,
"Goal": Goal,
"FinalXemnas": FinalXemnas,
"LuckyEmblemsAmount": LuckyEmblemsAmount,
"LuckyEmblemsRequired": LuckyEmblemsRequired,
"BountyAmount": BountyAmount,
"BountyRequired": BountyRequired,
"Keyblade_Minimum": KeybladeMin,
"Keyblade_Maximum": KeybladeMax,
"Visitlocking": Visitlocking,
"RandomVisitLockingItem": RandomVisitLockingItem,
"SuperBosses": SuperBosses,
"KeybladeAbilities": KeybladeAbilities,
"BlacklistKeyblade": BlacklistKeyblade,
"Cups": Cups,
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