mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-04-28 13:17:58 +03:00
MQ fixes
This commit is contained in:
parent
f2501fa9ac
commit
92b01444f0
4 changed files with 31 additions and 9 deletions
|
@ -285,6 +285,8 @@ std::map<RandomizerRegion, SpiritLogicData> Region::spiritLogicData = {
|
|||
{RR_SPIRIT_TEMPLE_MQ_INNER_WEST_HAND, {7, 7, 0, []{return logic->CanHitSwitch() && logic->MQSpiritWestToPots()/* && logic->CanClimbHigh()*/;}, []{return logic->MQSpiritWestToPots()/* && logic->Climb*/;}, []{return /*logic->CanUse(RG_HOVER_BOOTS) || (logic->CanClimb() && */logic->MQSpiritWestToPots()/*)*/;}}},
|
||||
{RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, {7, 7, 0, []{return logic->CanHitSwitch()/* && logic->CanClimbHigh()*/;}, []{return true;}, []{return true;}}},
|
||||
{RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, {7, 7, 0, []{return logic->CanHitSwitch() && logic->MQSpiritStatueToSunBlock()/* && logic->CanClimbHigh()*/;}, []{return logic->MQSpiritStatueToSunBlock()/* && logic->Climb*/;}, []{return logic->MQSpiritStatueToSunBlock()/* && (logic->CanClimb() || logic->CanUse(RG_HOVER_BOOTS))*/;}}},
|
||||
{RR_SPIRIT_TEMPLE_MQ_OUTER_WEST_HAND, {7, 7, 4, []{return logic->CanHitSwitch() && logic->MQSpiritStatueToSunBlock() //For the purpose of shared, adult needs to get to west side via BOTH possible routes for it to count //Only using HasItem here for adult items so child can pass this check
|
||||
/* && logic->CanClimbHigh() && str0*/;}, []{return logic->MQSpirit4KeyWestHand();}, []{return logic->CouldMQSpirit4KeyWestHand();}}},
|
||||
{RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, {7, 7, 0, []{return logic->CanHitSwitch() &&
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH].Here([]{return logic->MQSpiritStatueSouthDoor();})
|
||||
/* && logic->CanClimbHigh()*/;}, []{return true;}, []{return areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH].Here([]{return logic->MQSpiritStatueSouthDoor();});}}},
|
||||
|
|
|
@ -320,7 +320,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_WEST_HAND_EXIT, []{return true;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return SpiritCertainAccess(RR_SPIRIT_TEMPLE_OUTER_WEST_HAND);}),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_STATUE_ROOM_EAST] = Region("Spirit Temple Statue Room East", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
|
@ -773,7 +773,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
//Locations
|
||||
//We don't need Shared here because If we are checking as child, universe 2 adult access needs nothing so it always passes, and if we are checking as adult, it is Certain Access
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, SpiritShared(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return true/*str0*/;})),
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, SpiritShared(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_GS) && logic->CanUse(RG_BOOMERANG));})),
|
||||
// RT_SPIRIT_MQ_SUN_BLOCK_GS should probably be expanded to cover all ground based methods when str0 is added, as it can be hit with longshot because the skull hitbox is larger than the model
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, SpiritShared(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return (logic->CanUse(RG_HOOKSHOT)/* && (str0 || SunlightArrows())*/) ||
|
||||
(ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_GS) && logic->CanUse(RG_BOOMERANG));})),
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, SpiritShared(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})),
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, SpiritShared(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})),
|
||||
}, {
|
||||
|
@ -785,8 +787,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
areaTable[RR_SPIRIT_TEMPLE_MQ_SKULLTULA_STAIRS] = Region("Spirit Temple MQ Skulltula Stairs", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return true;}),
|
||||
//This door causes the Universes to merge as it requires 7 keys for both ages
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_THRONE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_THRONE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4);}),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_THRONE] = Region("Spirit Temple MQ West Throne", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
|
@ -803,12 +804,12 @@ void RegionTable_Init_SpiritTemple() {
|
|||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_OUTER_WEST_HAND] = Region("Spirit Temple MQ Outer West Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, true),
|
||||
LOCATION(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, SpiritShared(RR_SPIRIT_TEMPLE_MQ_OUTER_WEST_HAND, []{return true;})),
|
||||
}, {
|
||||
//Exits
|
||||
//If it is ever relevent for 1 age to spawn the mirror shield chest for the other can longshot across, it needs an eventAccess
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_HAND_EXIT, []{return true;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return SpiritCertainAccess(RR_SPIRIT_TEMPLE_MQ_OUTER_WEST_HAND);}),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH] = Region("Spirit Temple MQ Block Room South", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
|
@ -850,12 +851,13 @@ void RegionTable_Init_SpiritTemple() {
|
|||
logic->CanUse(RG_HOOKSHOT);}),
|
||||
//!QUANTUM LOGIC!
|
||||
//Continuing from above, if we also have a longshot, we can go from the East hand to the West hand, meaning we always have access to East Hand
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_OUTER_WEST_HAND, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) &&
|
||||
/*
|
||||
logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) &&
|
||||
logic->CanJumpslash() && /*(str0 || SunlightArrows) &&*/
|
||||
logic->CanJumpslash() && /*(str0 || SunlightArrows) &&
|
||||
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) &&
|
||||
logic->CanKillEnemy(RE_IRON_KNUCKLE) &&
|
||||
logic->CanUse(RG_LONGSHOT);}),
|
||||
logic->CanUse(RG_LONGSHOT) */
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_OUTER_WEST_HAND, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->MQSpirit4KeyWestHand();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5);}),
|
||||
// RT_SPIRIT_PLATFORM_HOOKSHOT is currently disabled
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_PLATFORM, []{return logic->SpiritPlatformLowered &&
|
||||
|
|
|
@ -2404,6 +2404,22 @@ bool Logic::MQSpiritStatueSouthDoor() {
|
|||
CanUse(RG_SONG_OF_TIME) /* && CanClimb()*/);
|
||||
}
|
||||
|
||||
bool Logic::MQSpirit4KeyWestHand() {
|
||||
return CanAvoidEnemy(RE_BEAMOS, true, 4) && CanUse(RG_SONG_OF_TIME) &&
|
||||
CanJumpslash() && /*(str0 || SunlightArrows) &&*/
|
||||
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || CanUse(RG_LENS_OF_TRUTH)) && CanKillEnemy(RE_IRON_KNUCKLE) &&
|
||||
CanUse(RG_LONGSHOT);
|
||||
}
|
||||
// This version of the function handles reaching there as child, based on what adult could do if they existed
|
||||
bool Logic::CouldMQSpirit4KeyWestHand() {
|
||||
return CanAvoidEnemy(RE_BEAMOS, true, 4) && CanUse(RG_SONG_OF_TIME) && HasItem(RG_MASTER_SWORD) ||
|
||||
HasItem(RG_BIGGORON_SWORD) ||
|
||||
HasItem(RG_MEGATON_HAMMER) &&
|
||||
/*(str0 || SunlightArrows) &&*/
|
||||
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || CanUse(RG_LENS_OF_TRUTH)) && CanKillEnemy(RE_IRON_KNUCKLE) &&
|
||||
HasItem(RG_LONGSHOT);
|
||||
}
|
||||
|
||||
void Logic::Reset() {
|
||||
NewSaveContext();
|
||||
StartPerformanceTimer(PT_LOGIC_RESET);
|
||||
|
|
|
@ -311,6 +311,8 @@ class Logic {
|
|||
bool MQSpiritWestToPots();
|
||||
bool MQSpiritStatueToSunBlock();
|
||||
bool MQSpiritStatueSouthDoor();
|
||||
bool MQSpirit4KeyWestHand();
|
||||
bool CouldMQSpirit4KeyWestHand();
|
||||
|
||||
private:
|
||||
std::shared_ptr<Context> ctx;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue