KH2: Add a new "CasualBounties" Setting (#4877)

* KH2: casual bounties option

* Casual Bounty: Adjust level bounty logic to correspond with max level check setting

* Bugfix: We have one less possible bounty with corresponding level bounty logic

* Casual Bounty: Move option to better spot

* Bugfix: Prevent possible .remove() crash

* Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic"

This reverts commit 3c929e00db.

* Bugfix: Typo in conditional

* Casual Bounties: Remove Scar, add MCP

I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit

* Casual Bounties: Add some clarity to the CasualBounty setting

* Docs: Update docs to reflect new CasualBounty setting

* KH2: Add bounty locations as location groups

Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly
It does function as intended though

* KH2: Update docs
This commit is contained in:
PIEisFANTASTIC
2026-02-04 19:11:40 -05:00
committed by GitHub
parent 3e032e6cd6
commit 39e7ee315e
5 changed files with 72 additions and 3 deletions

View File

@@ -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"]

View File

@@ -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

View File

@@ -601,7 +601,6 @@ KH2REGIONS: typing.Dict[str, typing.List[str]] = {
LocationName.OasisAPBoost,
LocationName.CircleofLife,
LocationName.Hyenas1,
LocationName.GoofyHyenas1
],
RegionName.Scar: [

View File

@@ -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)

View File

@@ -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.<br>
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: