KH2: Add missing indirect conditions for Final region access (#3923)
* KH2: Add missing indirect conditions for Final region access Entrances to the Final region require being able to reach any one of a number of locations, but for a location to be reachable, its parent region must also be reachable, so indirect conditions must be added for these regions. * Use World.get_location Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Use World.get_location, for real this time --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This commit is contained in:
parent
b6ab91fe4b
commit
81b9a53a37
|
@ -355,6 +355,16 @@ class KH2FormRules(KH2Rules):
|
|||
RegionName.Master: lambda state: self.multi_form_region_access(),
|
||||
RegionName.Final: lambda state: self.final_form_region_access(state)
|
||||
}
|
||||
# Accessing Final requires being able to reach one of the locations in final_leveling_access, but reaching a
|
||||
# location requires being able to reach the region the location is in, so an indirect condition is required.
|
||||
# The access rules of each of the locations in final_leveling_access do not check for being able to reach other
|
||||
# locations or other regions, so it is only the parent region of each location that needs to be added as an
|
||||
# indirect condition.
|
||||
self.form_region_indirect_condition_regions = {
|
||||
RegionName.Final: {
|
||||
self.world.get_location(location).parent_region for location in final_leveling_access
|
||||
}
|
||||
}
|
||||
|
||||
def final_form_region_access(self, state: CollectionState) -> bool:
|
||||
"""
|
||||
|
@ -388,12 +398,15 @@ class KH2FormRules(KH2Rules):
|
|||
for region_name in drive_form_list:
|
||||
if region_name == RegionName.Summon and not self.world.options.SummonLevelLocationToggle:
|
||||
continue
|
||||
indirect_condition_regions = self.form_region_indirect_condition_regions.get(region_name, ())
|
||||
# could get the location of each of these, but I feel like that would be less optimal
|
||||
region = self.multiworld.get_region(region_name, self.player)
|
||||
# if region_name in form_region_rules
|
||||
if region_name != RegionName.Summon:
|
||||
for entrance in region.entrances:
|
||||
entrance.access_rule = self.form_region_rules[region_name]
|
||||
for indirect_condition_region in indirect_condition_regions:
|
||||
self.multiworld.register_indirect_condition(indirect_condition_region, entrance)
|
||||
for loc in region.locations:
|
||||
loc.access_rule = self.form_rules[loc.name]
|
||||
|
||||
|
|
Loading…
Reference in New Issue