mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-26 08:05:21 -07:00
Split "CarpenterRescue"
This commit is contained in:
parent
74e10183da
commit
4d70ac5d2c
4 changed files with 96 additions and 72 deletions
|
@ -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();}),
|
||||||
|
|
|
@ -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)),
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue