mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-07 15:13:52 -08:00
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:
@@ -1281,6 +1281,25 @@ exclusion_table = {
|
|||||||
LocationName.HadesCupTrophyParadoxCups,
|
LocationName.HadesCupTrophyParadoxCups,
|
||||||
LocationName.MusicalOrichalcumPlus,
|
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": {
|
"Cups": {
|
||||||
LocationName.ProtectBeltPainandPanicCup,
|
LocationName.ProtectBeltPainandPanicCup,
|
||||||
LocationName.SerenityGemPainandPanicCup,
|
LocationName.SerenityGemPainandPanicCup,
|
||||||
@@ -1357,3 +1376,8 @@ location_groups = {
|
|||||||
Region_Name: [loc for loc in Region_Locs if "Event" not in loc]
|
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]
|
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"]
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ class BountyRequired(Range):
|
|||||||
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
|
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
|
||||||
display_name = "Bounties Required"
|
display_name = "Bounties Required"
|
||||||
range_start = 1
|
range_start = 1
|
||||||
range_end = 26
|
range_end = 42
|
||||||
default = 7
|
default = 7
|
||||||
|
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ class BountyAmount(Range):
|
|||||||
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
|
If Goal is not Hitlist or Lucky Emblem and Hitlist this does nothing."""
|
||||||
display_name = "Bounties Available"
|
display_name = "Bounties Available"
|
||||||
range_start = 1
|
range_start = 1
|
||||||
range_end = 26
|
range_end = 42
|
||||||
default = 10
|
default = 10
|
||||||
|
|
||||||
|
|
||||||
@@ -293,6 +293,12 @@ class BountyStartHint(Toggle):
|
|||||||
default = False
|
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):
|
class WeaponSlotStartHint(Toggle):
|
||||||
"""Start with Weapon Slots' Hinted"""
|
"""Start with Weapon Slots' Hinted"""
|
||||||
display_name = "Start with Weapon Slots Hinted"
|
display_name = "Start with Weapon Slots Hinted"
|
||||||
@@ -365,6 +371,7 @@ class KingdomHearts2Options(PerGameCommonOptions):
|
|||||||
Visitlocking: Visitlocking
|
Visitlocking: Visitlocking
|
||||||
RandomVisitLockingItem: RandomVisitLockingItem
|
RandomVisitLockingItem: RandomVisitLockingItem
|
||||||
SuperBosses: SuperBosses
|
SuperBosses: SuperBosses
|
||||||
|
CasualBounties: CasualBounties
|
||||||
Cups: Cups
|
Cups: Cups
|
||||||
SummonLevelLocationToggle: SummonLevelLocationToggle
|
SummonLevelLocationToggle: SummonLevelLocationToggle
|
||||||
AtlanticaToggle: AtlanticaToggle
|
AtlanticaToggle: AtlanticaToggle
|
||||||
|
|||||||
@@ -601,7 +601,6 @@ KH2REGIONS: typing.Dict[str, typing.List[str]] = {
|
|||||||
LocationName.OasisAPBoost,
|
LocationName.OasisAPBoost,
|
||||||
LocationName.CircleofLife,
|
LocationName.CircleofLife,
|
||||||
LocationName.Hyenas1,
|
LocationName.Hyenas1,
|
||||||
|
|
||||||
LocationName.GoofyHyenas1
|
LocationName.GoofyHyenas1
|
||||||
],
|
],
|
||||||
RegionName.Scar: [
|
RegionName.Scar: [
|
||||||
|
|||||||
@@ -249,6 +249,8 @@ class KH2World(World):
|
|||||||
# hitlist
|
# hitlist
|
||||||
if self.options.Goal not in ["lucky_emblem_hunt", "three_proofs"]:
|
if self.options.Goal not in ["lucky_emblem_hunt", "three_proofs"]:
|
||||||
self.random_super_boss_list.extend(exclusion_table["Hitlist"])
|
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_amount = self.options.BountyAmount.value
|
||||||
self.bounties_required = self.options.BountyRequired.value
|
self.bounties_required = self.options.BountyRequired.value
|
||||||
|
|
||||||
@@ -484,6 +486,20 @@ class KH2World(World):
|
|||||||
if location in self.random_super_boss_list:
|
if location in self.random_super_boss_list:
|
||||||
self.random_super_boss_list.remove(location)
|
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:
|
if not self.options.SummonLevelLocationToggle and LocationName.Summonlvl7 in self.random_super_boss_list:
|
||||||
self.random_super_boss_list.remove(LocationName.Summonlvl7)
|
self.random_super_boss_list.remove(LocationName.Summonlvl7)
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,29 @@ The list of possible locations that can contain a bounty:
|
|||||||
- Transport to Remembrance
|
- Transport to Remembrance
|
||||||
- Goddess of Fate cup and Hades Paradox cup
|
- 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:
|
## Quality of life:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user