Skip to content

Commit

Permalink
DCMQ
Browse files Browse the repository at this point in the history
  • Loading branch information
serprex committed Mar 7, 2025
1 parent e059bb0 commit 14f892a
Show file tree
Hide file tree
Showing 9 changed files with 151 additions and 66 deletions.
2 changes: 1 addition & 1 deletion soh/soh/Enhancements/randomizer/context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ Door* Context::MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY,

auto overrides = GetEntranceShuffler()->entranceOverrides.data();
for (int i = 0; i < ENTRANCE_OVERRIDES_MAX_COUNT; i++) {
if (overrides[i].type == (uint16_t)EntranceType::Door) {
if (overrides[i].type >= (uint16_t)EntranceType::DoorDekuTree && overrides[i].type <= (uint16_t)EntranceType::DoorGanonsTower) {
mDoorTable[overrides[i].index - ENTRANCE_DOOR_START] = (overrides[i].override^1) - ENTRANCE_DOOR_START;
if (!GetOption(RSK_DECOUPLED_ENTRANCES)) {
mDoorTable[(overrides[i].override^1) - ENTRANCE_DOOR_START] = overrides[i].index - ENTRANCE_DOOR_START;
Expand Down
109 changes: 72 additions & 37 deletions soh/soh/Enhancements/randomizer/entrance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -352,12 +352,14 @@ std::vector<Entrance*> EntranceShuffler::AssumeEntrancePool(std::vector<Entrance

static bool AreEntrancesCompatible(Entrance* entrance, Entrance* target, std::vector<EntrancePair>& rollbacks) {
// Door shuffle only supported within same scene
if (entrance->GetType() == EntranceType::Door) {
if (entrance->GetType() >= EntranceType::DoorDekuTree &&
entrance->GetType() <= EntranceType::DoorGanonsTower
) {
// avoid room leading to itself, causes duplicate actors
if (target->GetType() == EntranceType::None) {
return true;
}
if (target->GetType() != EntranceType::Door) {
if (target->GetType() != entrance->GetType()) {
return false;
}
auto entranceDoor = DoorsList[entrance->GetIndex() - ENTRANCE_DOOR_START];
Expand Down Expand Up @@ -1180,43 +1182,75 @@ int EntranceShuffler::ShuffleAllEntrances() {

if (ctx->GetDungeon(Rando::DEKU_TREE)->IsVanilla()) {
entranceShuffleTable.insert(entranceShuffleTable.end(), {
{ { EntranceType::Door, RR_DEKU_TREE_LOBBY, RR_DEKU_TREE_2F_MIDDLE_ROOM, ENTRANCE_DOOR(1) },
{ EntranceType::Door, RR_DEKU_TREE_2F_MIDDLE_ROOM, RR_DEKU_TREE_LOBBY, ENTRANCE_DOOR(0) } },
{ { EntranceType::Door, RR_DEKU_TREE_2F_MIDDLE_ROOM, RR_DEKU_TREE_SLINGSHOT_ROOM, ENTRANCE_DOOR(3) },
{ EntranceType::Door, RR_DEKU_TREE_SLINGSHOT_ROOM, RR_DEKU_TREE_2F_MIDDLE_ROOM, ENTRANCE_DOOR(2) } },
{ { EntranceType::Door, RR_DEKU_TREE_LOBBY, RR_DEKU_TREE_COMPASS_ROOM, ENTRANCE_DOOR(5) },
{ EntranceType::Door, RR_DEKU_TREE_COMPASS_ROOM, RR_DEKU_TREE_LOBBY, ENTRANCE_DOOR(4) } },
{ { EntranceType::Door, RR_DEKU_TREE_BASEMENT_LOWER, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, ENTRANCE_DOOR(7) },
{ EntranceType::Door, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, RR_DEKU_TREE_BASEMENT_LOWER, ENTRANCE_DOOR(6) } },
{ { EntranceType::Door, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, ENTRANCE_DOOR(9) },
{ EntranceType::Door, RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, ENTRANCE_DOOR(8) } },
{ { EntranceType::Door, RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, ENTRANCE_DOOR(11) },
{ EntranceType::Door, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, ENTRANCE_DOOR(10) } },
{ { EntranceType::Door, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, ENTRANCE_DOOR(13) },
{ EntranceType::Door, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, ENTRANCE_DOOR(12) } },
{ { EntranceType::Door, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, RR_DEKU_TREE_BASEMENT_BACK_ROOM, ENTRANCE_DOOR(15) },
{ EntranceType::Door, RR_DEKU_TREE_BASEMENT_BACK_ROOM, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, ENTRANCE_DOOR(14) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_LOBBY, RR_DEKU_TREE_2F_MIDDLE_ROOM, ENTRANCE_DOOR(1) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_2F_MIDDLE_ROOM, RR_DEKU_TREE_LOBBY, ENTRANCE_DOOR(0) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_2F_MIDDLE_ROOM, RR_DEKU_TREE_SLINGSHOT_ROOM, ENTRANCE_DOOR(3) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_SLINGSHOT_ROOM, RR_DEKU_TREE_2F_MIDDLE_ROOM, ENTRANCE_DOOR(2) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_LOBBY, RR_DEKU_TREE_COMPASS_ROOM, ENTRANCE_DOOR(5) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_COMPASS_ROOM, RR_DEKU_TREE_LOBBY, ENTRANCE_DOOR(4) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_LOWER, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, ENTRANCE_DOOR(7) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, RR_DEKU_TREE_BASEMENT_LOWER, ENTRANCE_DOOR(6) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, ENTRANCE_DOOR(9) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, ENTRANCE_DOOR(8) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, ENTRANCE_DOOR(11) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, ENTRANCE_DOOR(10) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, ENTRANCE_DOOR(13) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, ENTRANCE_DOOR(12) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, RR_DEKU_TREE_BASEMENT_BACK_ROOM, ENTRANCE_DOOR(15) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_BACK_ROOM, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, ENTRANCE_DOOR(14) } },
});
} else {
entranceShuffleTable.insert(entranceShuffleTable.end(), {
// TODO logic has multiple routes to eye target room through same door
// similarly logic thinks you can get to water room from basement without going through southeast
{ { EntranceType::Door, RR_DEKU_TREE_MQ_2F, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, ENTRANCE_DOOR(1) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, RR_DEKU_TREE_MQ_2F, ENTRANCE_DOOR(0) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, RR_DEKU_TREE_MQ_COMPASS_ROOM, ENTRANCE_DOOR(3) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_COMPASS_ROOM, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, ENTRANCE_DOOR(2) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_3F, RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, ENTRANCE_DOOR(5) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, RR_DEKU_TREE_MQ_3F, ENTRANCE_DOOR(4) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, ENTRANCE_DOOR(7) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, RR_DEKU_TREE_MQ_BASEMENT, ENTRANCE_DOOR(6) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, ENTRANCE_DOOR(9) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, ENTRANCE_DOOR(8) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, ENTRANCE_DOOR(11) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, ENTRANCE_DOOR(10) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, ENTRANCE_DOOR(13) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, ENTRANCE_DOOR(12) } },
{ { EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, ENTRANCE_DOOR(15) },
{ EntranceType::Door, RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, ENTRANCE_DOOR(14) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_2F, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, ENTRANCE_DOOR(1) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, RR_DEKU_TREE_MQ_2F, ENTRANCE_DOOR(0) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, RR_DEKU_TREE_MQ_COMPASS_ROOM, ENTRANCE_DOOR(3) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_COMPASS_ROOM, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, ENTRANCE_DOOR(2) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_3F, RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, ENTRANCE_DOOR(5) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, RR_DEKU_TREE_MQ_3F, ENTRANCE_DOOR(4) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, ENTRANCE_DOOR(7) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, RR_DEKU_TREE_MQ_BASEMENT, ENTRANCE_DOOR(6) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, ENTRANCE_DOOR(9) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, ENTRANCE_DOOR(8) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, ENTRANCE_DOOR(11) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, ENTRANCE_DOOR(10) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, ENTRANCE_DOOR(13) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, ENTRANCE_DOOR(12) } },
{ { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, ENTRANCE_DOOR(15) },
{ EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, ENTRANCE_DOOR(14) } },
});
}

if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsVanilla()) {
} else {
entranceShuffleTable.insert(entranceShuffleTable.end(), {
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOBBY, RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, ENTRANCE_DOOR(17) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, RR_DODONGOS_CAVERN_MQ_LOBBY, ENTRANCE_DOOR(16) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, ENTRANCE_DOOR(19) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, ENTRANCE_DOOR(18) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOBBY, RR_DODONGOS_CAVERN_MQ_POES_ROOM, ENTRANCE_DOOR(21) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_POES_ROOM, RR_DODONGOS_CAVERN_MQ_LOBBY, ENTRANCE_DOOR(20) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_POES_ROOM, RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, ENTRANCE_DOOR(23) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, RR_DODONGOS_CAVERN_MQ_POES_ROOM, ENTRANCE_DOOR(22) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_POES_ROOM, RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, ENTRANCE_DOOR(25) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, RR_DODONGOS_CAVERN_MQ_POES_ROOM, ENTRANCE_DOOR(24) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, ENTRANCE_DOOR(27) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, RR_DODONGOS_CAVERN_MQ_LOBBY, ENTRANCE_DOOR(26) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB, ENTRANCE_DOOR(29) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, ENTRANCE_DOOR(28) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOBBY, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, ENTRANCE_DOOR(31) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, RR_DODONGOS_CAVERN_MQ_LOBBY, ENTRANCE_DOOR(30) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, ENTRANCE_DOOR(33) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, ENTRANCE_DOOR(32) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, ENTRANCE_DOOR(35) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, ENTRANCE_DOOR(34) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, ENTRANCE_DOOR(37) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, ENTRANCE_DOOR(36) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, ENTRANCE_DOOR(39) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, ENTRANCE_DOOR(38) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, ENTRANCE_DOOR(41) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, ENTRANCE_DOOR(40) } },
{ { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, ENTRANCE_DOOR(43) },
{ EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, ENTRANCE_DOOR(42) } },
});
}

Expand Down Expand Up @@ -1367,7 +1401,8 @@ int EntranceShuffler::ShuffleAllEntrances() {

// door entrances
if (ctx->GetOption(RSK_SHUFFLE_DOORS)) {
entrancePools[EntranceType::Door] = GetShuffleableEntrances(EntranceType::Door);
entrancePools[EntranceType::DoorDekuTree] = GetShuffleableEntrances(EntranceType::DoorDekuTree);
entrancePools[EntranceType::DoorDodongosCavern] = GetShuffleableEntrances(EntranceType::DoorDodongosCavern);
}

// Set shuffled entrances as such
Expand Down
13 changes: 12 additions & 1 deletion soh/soh/Enhancements/randomizer/entrance.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,18 @@ enum class EntranceType {
GrottoGrave,
GrottoGraveReverse,
Overworld,
Door,
DoorDekuTree,
DoorDodongosCavern,
DoorJabuJabu,
DoorForest,
DoorFire,
DoorWater,
DoorShadow,
DoorSpirit,
DoorBottomOfTheWell,
DoorGerudoTrainingGround,
DoorGanonsCastle,
DoorGanonsTower,
Extra,
Mixed,
All,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,20 +180,19 @@ void RegionTable_Init_DekuTree() {
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
//Will need canAvoid logic with enemy shuffle
Entrance(RR_DEKU_TREE_MQ_3F, []{return true;}),
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource();});}),
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource() || (logic->MQDeku3FSwitch && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW)));});}),
});

areaTable[RR_DEKU_TREE_MQ_3F] = Region("Deku Tree MQ 3F", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {
//Events
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
EventAccess(&logic->BrokeDeku1FWeb, []{return true;}),
EventAccess(&logic->MQDeku3FSwitch, []{return true;}),
}, {}, {
//Exits
Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}),
Entrance(RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, []{return true;}),
//Assumes RR_DEKU_TREE_MQ_2F access
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_3F, []{return logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW);});}),
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}),
});

Expand Down Expand Up @@ -247,7 +246,7 @@ void RegionTable_Init_DekuTree() {
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();});}),
//includes RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM Access, other fire sources clear directly from there
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);});}),
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return !ctx->GetOption(RSK_SHUFFLE_DOORS) && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);});}),
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return ctx->GetTrickOption(RT_DEKU_B1_SKIP) || logic->PushedDekuBasementBlock || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS);}),
});

Expand Down
Loading

0 comments on commit 14f892a

Please sign in to comment.