Split "CarpenterRescue"

This commit is contained in:
Pepe20129 2025-03-15 19:57:27 +01:00
commit 4d70ac5d2c
4 changed files with 96 additions and 72 deletions

View file

@ -16,7 +16,7 @@ void RegionTable_Init_GerudoValley() {
Entrance(RR_GV_UPPER_STREAM, []{return logic->IsChild || logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}), Entrance(RR_GV_UPPER_STREAM, []{return logic->IsChild || logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
Entrance(RR_GV_CRATE_LEDGE, []{return logic->IsChild || logic->CanUse(RG_LONGSHOT);}), Entrance(RR_GV_CRATE_LEDGE, []{return logic->IsChild || logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GV_GROTTO_LEDGE, []{return true;}), Entrance(RR_GV_GROTTO_LEDGE, []{return true;}),
Entrance(RR_GV_FORTRESS_SIDE, []{return (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->CarpenterRescue)) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT));}), Entrance(RR_GV_FORTRESS_SIDE, []{return (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->CanFinishGerudoFortress())) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT));}),
Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child
}); });
@ -73,7 +73,7 @@ void RegionTable_Init_GerudoValley() {
//Exits //Exits
Entrance(RR_GF_GROUND_BOTTOM, []{return true;}), Entrance(RR_GF_GROUND_BOTTOM, []{return true;}),
Entrance(RR_GV_UPPER_STREAM, []{return true;}), Entrance(RR_GV_UPPER_STREAM, []{return true;}),
Entrance(RR_GERUDO_VALLEY, []{return logic->IsChild || logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->CarpenterRescue;}), Entrance(RR_GERUDO_VALLEY, []{return logic->IsChild || logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->CanFinishGerudoFortress();}),
Entrance(RR_GV_CARPENTER_TENT, []{return logic->IsAdult;}), Entrance(RR_GV_CARPENTER_TENT, []{return logic->IsAdult;}),
Entrance(RR_GV_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}), Entrance(RR_GV_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
Entrance(RR_GV_CRATE_LEDGE, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}), Entrance(RR_GV_CRATE_LEDGE, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),

View file

@ -6,7 +6,7 @@ using namespace Rando;
void RegionTable_Init_ThievesHideout() { void RegionTable_Init_ThievesHideout() {
areaTable[RR_TH_NORTH_F1_CARPENTER_AREA] = Region("Thieves Hideout North F1 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { areaTable[RR_TH_NORTH_F1_CARPENTER_AREA] = Region("Thieves Hideout North F1 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events //Events
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}), EventAccess(&logic->TH_RescuedF1NorthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
}, { }, {
//Locations //Locations
LOCATION(RC_TH_NORTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), LOCATION(RC_TH_NORTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
@ -22,7 +22,7 @@ void RegionTable_Init_ThievesHideout() {
areaTable[RR_TH_SOUTH_F1_CARPENTER_AREA] = Region("Thieves Hideout South F1 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { areaTable[RR_TH_SOUTH_F1_CARPENTER_AREA] = Region("Thieves Hideout South F1 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events //Events
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}), EventAccess(&logic->TH_RescuedF1SouthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
}, { }, {
//Locations //Locations
LOCATION(RC_TH_SOUTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), LOCATION(RC_TH_SOUTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
@ -42,7 +42,7 @@ void RegionTable_Init_ThievesHideout() {
areaTable[RR_TH_NORTH_F2_CARPENTER_AREA] = Region("Thieves Hideout North F2 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { areaTable[RR_TH_NORTH_F2_CARPENTER_AREA] = Region("Thieves Hideout North F2 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events //Events
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}), EventAccess(&logic->TH_RescuedF2NorhCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
}, { }, {
//Locations //Locations
LOCATION(RC_TH_NORTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), LOCATION(RC_TH_NORTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
@ -56,7 +56,7 @@ void RegionTable_Init_ThievesHideout() {
areaTable[RR_TH_SOUTH_F2_CARPENTER_AREA] = Region("Thieves Hideout South F2 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { areaTable[RR_TH_SOUTH_F2_CARPENTER_AREA] = Region("Thieves Hideout South F2 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events //Events
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}), EventAccess(&logic->TH_RescuedF2SouthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
}, { }, {
//Locations //Locations
LOCATION(RC_TH_SOUTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), LOCATION(RC_TH_SOUTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),

View file

@ -1216,10 +1216,28 @@ namespace Rando {
return hasState; return hasState;
} }
bool Logic::CanFinishGerudoFortress(){ bool Logic::CanFinishGerudoFortress() {
return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && SmallKeys(RR_GF_GROUND_BOTTOM, 4) && CanKillEnemy(RE_GERUDO_WARRIOR) && (HasItem(RG_GERUDO_MEMBERSHIP_CARD) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_TH_KITCHEN))) || switch (ctx->GetOption(RSK_GERUDO_FORTRESS).Get()) {
(ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST) && SmallKeys(RR_GF_GROUND_BOTTOM, 1) && CanKillEnemy(RE_GERUDO_WARRIOR)) || case RO_GF_CARPENTERS_NORMAL:
ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE); return SmallKeys(RR_GF_GROUND_BOTTOM, 4) &&
TH_RescuedF1NorthCarpenter &&
TH_RescuedF1SouthCarpenter &&
TH_RescuedF2NorthCarpenter &&
TH_RescuedF2SouthCarpenter;
case RO_GF_CARPENTERS_FAST:
return SmallKeys(RR_GF_GROUND_BOTTOM, 1) &&
(
TH_RescuedF1NorthCarpenter ||
TH_RescuedF1SouthCarpenter ||
TH_RescuedF2NorthCarpenter ||
TH_RescuedF2SouthCarpenter
);
case RO_GF_CARPENTERS_FREE:
return true;
default:
assert(false);
return true;
}
} }
bool Logic::CanStandingShield(){ bool Logic::CanStandingShield(){
@ -2283,67 +2301,70 @@ namespace Rando {
GetSaveContext()->linkAge = !ctx->GetOption(RSK_SELECTED_STARTING_AGE).Get(); GetSaveContext()->linkAge = !ctx->GetOption(RSK_SELECTED_STARTING_AGE).Get();
//Events //Events
ShowedMidoSwordAndShield = false; ShowedMidoSwordAndShield = false;
CarpenterRescue = false; TH_RescuedF1NorthCarpenter = false;
GF_GateOpen = false; TH_RescuedF1SouthCarpenter = false;
GtG_GateOpen = false; TH_RescuedF2NorthCarpenter = false;
DampesWindmillAccess = false; TH_RescuedF2SouthCarpenter = false;
DrainWell = false; GF_GateOpen = false;
GoronCityChildFire = false; GtG_GateOpen = false;
GCWoodsWarpOpen = false; DampesWindmillAccess = false;
GCDaruniasDoorOpenChild = false; DrainWell = false;
StopGCRollingGoronAsAdult = false; GoronCityChildFire = false;
CanWaterTempleLowFromHigh = false; GCWoodsWarpOpen = false;
CanWaterTempleLowFromMid = false; GCDaruniasDoorOpenChild = false;
CanWaterTempleMiddle = false; StopGCRollingGoronAsAdult = false;
CanWaterTempleHigh = false; CanWaterTempleLowFromHigh = false;
KakarikoVillageGateOpen = false; CanWaterTempleLowFromMid = false;
KingZoraThawed = false; CanWaterTempleMiddle = false;
ForestTempleJoelle = false; CanWaterTempleHigh = false;
ForestTempleBeth = false; KakarikoVillageGateOpen = false;
ForestTempleAmy = false; KingZoraThawed = false;
ForestTempleMeg = false; ForestTempleJoelle = false;
FireLoopSwitch = false; ForestTempleBeth = false;
LinksCow = false; ForestTempleAmy = false;
DeliverLetter = false; ForestTempleMeg = false;
ClearMQDCUpperLobbyRocks = false; FireLoopSwitch = false;
LoweredWaterInsideBotw = false; LinksCow = false;
OpenedWestRoomMQBotw = false; DeliverLetter = false;
OpenedMiddleHoleMQBotw = false; ClearMQDCUpperLobbyRocks = false;
BrokeDeku1FWeb = false; LoweredWaterInsideBotw = false;
ClearedMQDekuSERoom = false; OpenedWestRoomMQBotw = false;
MQDekuWaterRoomTorches = false; OpenedMiddleHoleMQBotw = false;
PushedDekuBasementBlock = false; BrokeDeku1FWeb = false;
OpenedLowestGoronCage = false; ClearedMQDekuSERoom = false;
OpenedUpperFireShortcut = false; MQDekuWaterRoomTorches = false;
HitFireTemplePlatform = false; PushedDekuBasementBlock = false;
OpenedFireMQFireMazeDoor = false; OpenedLowestGoronCage = false;
MQForestBlockRoomTargets = false; OpenedUpperFireShortcut = false;
ForestCanTwistHallway = false; HitFireTemplePlatform = false;
ForestClearBelowBowChest = false; OpenedFireMQFireMazeDoor = false;
ForestOpenBossCorridor = false; MQForestBlockRoomTargets = false;
ShadowTrialFirstChest = false; ForestCanTwistHallway = false;
MQGTGMazeSwitch = false; ForestClearBelowBowChest = false;
GTGPlatformSilverRupees = false; ForestOpenBossCorridor = false;
MQJabuHolesRoomDoor = false; ShadowTrialFirstChest = false;
JabuWestTentacle = false; MQGTGMazeSwitch = false;
JabuEastTentacle = false; GTGPlatformSilverRupees = false;
JabuNorthTentacle = false; MQJabuHolesRoomDoor = false;
LoweredJabuPath = false; JabuWestTentacle = false;
MQJabuLiftRoomCow = false; JabuEastTentacle = false;
MQShadowFloorSpikeRupees = false; JabuNorthTentacle = false;
ShadowShortcutBlock = false; LoweredJabuPath = false;
MQWaterStalfosPit = false; MQJabuLiftRoomCow = false;
MQWaterDragonTorches = false; MQShadowFloorSpikeRupees = false;
MQWaterB1Switch = false; ShadowShortcutBlock = false;
//MQWaterPillarSoTBlock = false; MQWaterStalfosPit = false;
MQWaterOpenedPillarB1 = false; MQWaterDragonTorches = false;
MQSpiritCrawlBoulder = false; MQWaterB1Switch = false;
MQSpiritMapRoomEnemies = false; //MQWaterPillarSoTBlock = false;
MQSpirit3SunsEnemies = false; MQWaterOpenedPillarB1 = false;
Spirit1FSilverRupees = false; MQSpiritCrawlBoulder = false;
JabuRutoInB1 = false; MQSpiritMapRoomEnemies = false;
JabuRutoIn1F = false; MQSpirit3SunsEnemies = false;
Spirit1FSilverRupees = false;
JabuRutoInB1 = false;
JabuRutoIn1F = false;
StopPerformanceTimer(PT_LOGIC_RESET); StopPerformanceTimer(PT_LOGIC_RESET);
} }

View file

@ -112,7 +112,10 @@ class Logic {
// Events // Events
bool ShowedMidoSwordAndShield = false; bool ShowedMidoSwordAndShield = false;
bool CarpenterRescue = false; bool TH_RescuedF1NorthCarpenter = false;
bool TH_RescuedF1SouthCarpenter = false;
bool TH_RescuedF2NorthCarpenter = false;
bool TH_RescuedF2SouthCarpenter = false;
bool GF_GateOpen = false; bool GF_GateOpen = false;
bool GtG_GateOpen = false; bool GtG_GateOpen = false;
bool DampesWindmillAccess = false; bool DampesWindmillAccess = false;