diff --git a/worlds/kh2/Locations.py b/worlds/kh2/Locations.py index a73b747f03..3b5a6e7e69 100644 --- a/worlds/kh2/Locations.py +++ b/worlds/kh2/Locations.py @@ -1281,6 +1281,25 @@ exclusion_table = { LocationName.HadesCupTrophyParadoxCups, LocationName.MusicalOrichalcumPlus, ], + "HitlistCasual": { + LocationName.FuturePete, + LocationName.BetwixtandBetweenBondofFlame, + LocationName.GrimReaper2, + LocationName.ThousandHeartless, + LocationName.WinnersProof, + LocationName.Experiment, + LocationName.Groundshaker, + LocationName.Hades, + LocationName.GenieJafar, + LocationName.Xaldin, + LocationName.StormRider, + LocationName.MansionBasementCorridorHiPotion, + LocationName.Xemnas1SecretAnsemReport13, + LocationName.XigbarSecretAnsemReport3, + LocationName.MCP, + LocationName.Lvl50, + LocationName.Lvl99 + }, "Cups": { LocationName.ProtectBeltPainandPanicCup, LocationName.SerenityGemPainandPanicCup, @@ -1357,3 +1376,8 @@ location_groups = { Region_Name: [loc for loc in Region_Locs if "Event" not in loc] for Region_Name, Region_Locs in KH2REGIONS.items() if Region_Locs and "Event" not in Region_Locs[0] } + +# This seems like the not-correct way to handle these location groups, but making these sets regions so the above works +# causes not enough items to be generated for some reason. +location_groups["Casual Bounties"] = exclusion_table["HitlistCasual"] +location_groups["General Bounties"] = exclusion_table["Hitlist"] diff --git a/worlds/kh2/Options.py b/worlds/kh2/Options.py index ddaf36ebcb..b4978339aa 100644 --- a/worlds/kh2/Options.py +++ b/worlds/kh2/Options.py @@ -273,7 +273,7 @@ class BountyRequired(Range): If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing.""" display_name = "Bounties Required" range_start = 1 - range_end = 26 + range_end = 42 default = 7 @@ -283,7 +283,7 @@ class BountyAmount(Range): If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing.""" display_name = "Bounties Available" range_start = 1 - range_end = 26 + range_end = 42 default = 10 @@ -293,6 +293,12 @@ class BountyStartHint(Toggle): default = False +class CasualBounties(Toggle): + """Adds more casual and generic locations that aren't superbosses to expand the bounty pool. (World Bosses, etc.)""" + display_name = "Add Casual Bounties" + default = False + + class WeaponSlotStartHint(Toggle): """Start with Weapon Slots' Hinted""" display_name = "Start with Weapon Slots Hinted" @@ -365,6 +371,7 @@ class KingdomHearts2Options(PerGameCommonOptions): Visitlocking: Visitlocking RandomVisitLockingItem: RandomVisitLockingItem SuperBosses: SuperBosses + CasualBounties: CasualBounties Cups: Cups SummonLevelLocationToggle: SummonLevelLocationToggle AtlanticaToggle: AtlanticaToggle diff --git a/worlds/kh2/Regions.py b/worlds/kh2/Regions.py index 72b3c95b09..2104a0092e 100644 --- a/worlds/kh2/Regions.py +++ b/worlds/kh2/Regions.py @@ -601,7 +601,6 @@ KH2REGIONS: typing.Dict[str, typing.List[str]] = { LocationName.OasisAPBoost, LocationName.CircleofLife, LocationName.Hyenas1, - LocationName.GoofyHyenas1 ], RegionName.Scar: [ diff --git a/worlds/kh2/__init__.py b/worlds/kh2/__init__.py index d8b9059ab8..042e6daf16 100644 --- a/worlds/kh2/__init__.py +++ b/worlds/kh2/__init__.py @@ -249,6 +249,8 @@ class KH2World(World): # hitlist if self.options.Goal not in ["lucky_emblem_hunt", "three_proofs"]: self.random_super_boss_list.extend(exclusion_table["Hitlist"]) + if self.options.CasualBounties: + self.random_super_boss_list.extend(exclusion_table["HitlistCasual"]) self.bounties_amount = self.options.BountyAmount.value self.bounties_required = self.options.BountyRequired.value @@ -484,6 +486,20 @@ class KH2World(World): if location in self.random_super_boss_list: self.random_super_boss_list.remove(location) + if self.options.LevelDepth == "level_1": + if LocationName.Lvl50 in self.random_super_boss_list: + self.random_super_boss_list.remove(LocationName.Lvl50) + if LocationName.Lvl99 in self.random_super_boss_list: + self.random_super_boss_list.remove(LocationName.Lvl99) + + # We only want the bounty corresponding to our max level, remove the other level bounty + if self.options.LevelDepth in ["level_50", "level_50_sanity"] and LocationName.Lvl99 in self.random_super_boss_list: + self.random_super_boss_list.remove(LocationName.Lvl99) + + # We only want the bounty corresponding to our max level, remove the other level bounty + if self.options.LevelDepth in ["level_99", "level_99_sanity"] and LocationName.Lvl50 in self.random_super_boss_list: + self.random_super_boss_list.remove(LocationName.Lvl50) + if not self.options.SummonLevelLocationToggle and LocationName.Summonlvl7 in self.random_super_boss_list: self.random_super_boss_list.remove(LocationName.Summonlvl7) diff --git a/worlds/kh2/docs/en_Kingdom Hearts 2.md b/worlds/kh2/docs/en_Kingdom Hearts 2.md index 7e690ff051..6328b2ad8e 100644 --- a/worlds/kh2/docs/en_Kingdom Hearts 2.md +++ b/worlds/kh2/docs/en_Kingdom Hearts 2.md @@ -82,6 +82,29 @@ The list of possible locations that can contain a bounty: - Transport to Remembrance - Goddess of Fate cup and Hades Paradox cup +For players looking for a more casual experience with the Hitlist goal, there is an "Add Casual Bounties" option to introduce more bounty locations.
+The list of possible bounty locations that get added with this setting enabled: + +- Future Pete +- TT3 Bond of Flame +- Grim Reaper 2 +- 1000 Heartless +- Winner's Proof +- Experiment +- Groundshaker +- Hades +- Genie Jafar +- Xaldin +- Storm Rider +- MCP +- STT Post Axel 2 Chest +- Xemnas 1 +- Xigbar +- Level 50 (Depending on choice of level checks.) +- Level 99 (Depending on choice of level checks.) + +For those who only want the casual bounty locations, you can effectively disable the normal bounty locations by excluding the "General Bounties" location group. + ## Quality of life: