mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-03-03 02:01:47 -05:00
Fix generation errors exposed by loccacc refactor (#4861)
* Fix generation errors exposed by loccacc refactor * oops
This commit is contained in:
parent
61de721fe5
commit
66f5e6c26c
@ -391,14 +391,14 @@ void ApplyOrStoreItem(Rando::ItemLocation* loc, GetAccessibleLocationsStruct& ga
|
||||
}
|
||||
|
||||
// Adds the contents of a location to the current progression and optionally playthrough
|
||||
bool AddCheckToLogic(LocationAccess& locPair, GetAccessibleLocationsStruct& gals, RandomizerGet ignore, bool stopOnBeatable, bool addToPlaythrough=false){
|
||||
bool AddCheckToLogic(LocationAccess& locPair, GetAccessibleLocationsStruct& gals, RandomizerGet ignore, bool stopOnBeatable, Region* parentRegion, bool addToPlaythrough=false){
|
||||
auto ctx = Rando::Context::GetInstance();
|
||||
StartPerformanceTimer(PT_LOCATION_LOGIC);
|
||||
RandomizerCheck loc = locPair.GetLocation();
|
||||
Rando::ItemLocation* location = ctx->GetItemLocation(loc);
|
||||
RandomizerGet locItem = location->GetPlacedRandomizerGet();
|
||||
|
||||
if (!location->IsAddedToPool() && locPair.ConditionsMet()) {
|
||||
if (!location->IsAddedToPool() && locPair.ConditionsMet(parentRegion)) {
|
||||
location->AddToPool();
|
||||
|
||||
if (locItem == RG_NONE) {
|
||||
@ -486,7 +486,7 @@ void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, Randomize
|
||||
|
||||
PropagateTimeTravel(gals, ignore, stopOnBeatable, addToPlaythrough);
|
||||
for (size_t k = 0; k < region->locations.size(); k++) {
|
||||
if(AddCheckToLogic(region->locations[k], gals, ignore, stopOnBeatable, addToPlaythrough)){
|
||||
if(AddCheckToLogic(region->locations[k], gals, ignore, stopOnBeatable, region, addToPlaythrough)){
|
||||
Rando::Context::GetInstance()->playthroughBeatable = true;
|
||||
return;
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ void ItemLocation::SetParentRegion(const RandomizerRegion region) {
|
||||
parentRegion = region;
|
||||
}
|
||||
|
||||
//RANDOTODO only used in tracker now, could possibly be removed
|
||||
RandomizerRegion ItemLocation::GetParentRegionKey() const {
|
||||
return parentRegion;
|
||||
}
|
||||
|
@ -27,11 +27,10 @@ bool LocationAccess::CheckConditionAtAgeTime(bool& age, bool& time) const {
|
||||
return GetConditionsMet();
|
||||
}
|
||||
|
||||
bool LocationAccess::ConditionsMet() const {
|
||||
bool LocationAccess::ConditionsMet(Region* parentRegion) const {
|
||||
//WARNING enterance validation can run this after resetting the access for sphere 0 validation
|
||||
//When refactoring ToD access, either fix the above or do not assume that we
|
||||
//have any access at all just because this is being run
|
||||
Region* parentRegion = RegionTable(Rando::Context::GetInstance()->GetItemLocation(location)->GetParentRegionKey());
|
||||
bool conditionsMet = false;
|
||||
|
||||
if (
|
||||
|
@ -15,6 +15,8 @@ typedef bool (*ConditionFn)();
|
||||
extern Rando::Context* ctx;
|
||||
extern std::shared_ptr<Rando::Logic> logic;
|
||||
|
||||
class Region;
|
||||
|
||||
class EventAccess {
|
||||
public:
|
||||
explicit EventAccess(bool* event_, ConditionFn condition_function_) : event(event_), condition_function(condition_function_) {}
|
||||
@ -81,7 +83,7 @@ class LocationAccess {
|
||||
|
||||
bool CheckConditionAtAgeTime(bool& age, bool& time) const;
|
||||
|
||||
bool ConditionsMet() const;
|
||||
bool ConditionsMet(Region* parentRegion) const;
|
||||
|
||||
RandomizerCheck GetLocation() const {
|
||||
return location;
|
||||
|
@ -426,21 +426,21 @@ void RegionTable_Init_FireTemple() {
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return logic->OpenedLowestGoronCage;}),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM] = Region("Fire Temple MQ Near Boss Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM] = Region("Fire Temple MQ Near Boss Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
//If we're using the south torch as the initial torch, or using FAs, we either have to cross to the north to remove the crate, or use a trick to ignore it
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->FireTimer() > 25 && ctx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && (logic->CanUse(RG_FIRE_ARROWS) || (logic->IsAdult && logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_FAIRY_BOW))))
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return true;}),
|
||||
//Child cannot make it to the north side torches without a hook without specifically bunny hood speed + hover boots
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM_NORTH, []{return logic->FireTimer() > 32 && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY) && logic->FireTimer() >= 15 && ((logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->CanUse(RG_HOVER_BOOTS))) || (logic->IsAdult && logic->HitFireTemplePlatform) || (logic->HitFireTemplePlatform && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH, []{return logic->FireTimer() > 32 && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY) && logic->FireTimer() >= 15 && ((logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->CanUse(RG_HOVER_BOOTS))) || (logic->IsAdult && logic->HitFireTemplePlatform) || (logic->HitFireTemplePlatform && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
});
|
||||
|
||||
//This room assumes tunic logic is handled on entry.
|
||||
//Covers the upper section too, as all methods to reach this can climb up somehow
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM_NORTH] = Region("Fire Temple MQ Near Boss Room North", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH] = Region("Fire Temple MQ Near Boss Room North", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
//If we have FAs, we can just remove the crate and use those to light the torches.
|
||||
//otherwise, with Dins, we first light them with dins and then either use a bow shot or to cross back over to light the other torch
|
||||
@ -616,7 +616,7 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR, []{return logic->HitFireTemplePlatform;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HitFireTemplePlatform;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
//Hover boots get there via the platforms
|
||||
@ -699,7 +699,7 @@ void RegionTable_Init_FireTemple() {
|
||||
areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] = Region("Fire Temple Boss Entryway", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ROOM, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -666,7 +666,6 @@ typedef enum {
|
||||
|
||||
RR_FIRE_TEMPLE_FIRST_ROOM,
|
||||
RR_FIRE_TEMPLE_NEAR_BOSS_ROOM,
|
||||
RR_FIRE_TEMPLE_NEAR_BOSS_ROOM_NORTH,
|
||||
RR_FIRE_TEMPLE_LOOP_ENEMIES,
|
||||
RR_FIRE_TEMPLE_LOOP_TILES,
|
||||
RR_FIRE_TEMPLE_LOOP_FLARE_DANCER,
|
||||
@ -709,7 +708,8 @@ typedef enum {
|
||||
RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER,
|
||||
RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH,
|
||||
RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE,
|
||||
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR,
|
||||
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM,
|
||||
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH,
|
||||
RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM,
|
||||
RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM,
|
||||
RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM,
|
||||
|
Loading…
x
Reference in New Issue
Block a user