summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEblo <7004497+Eblo@users.noreply.github.com>2026-01-28 22:16:44 -0500
committerGitHub <noreply@github.com>2026-01-28 21:16:44 -0600
commit9801ddac411000cb5d5f7f3323457862cbb1c485 (patch)
tree0d47e1c55fbc4f7b7b8f1e7e502ed00562f2374d
parent22518984e1c437b78c895bbd6c24572a767f6233 (diff)
[Rando] Stone Tower Temple water logic fixes (#1512)
* Require swim, light arrows for STT water rooms * Tweak regions and events * alphabetize
-rw-r--r--mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp39
-rw-r--r--mm/2s2h/Rando/Types.h2
2 files changed, 29 insertions, 12 deletions
diff --git a/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp b/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp
index c70fb2b75..cd300a0af 100644
--- a/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp
+++ b/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp
@@ -78,10 +78,10 @@ static RegisterShipInitFunc initFunc([]() {
Regions[RR_STONE_TOWER_TEMPLE_SHALLOW_POOL_ROOM] = RandoRegion{ .name = "Shallow Pool Room", .sceneId = SCENE_INISIE_N,
.checks = {
// IF you get this check you must be Zora to leave, but you could in theory get this as Human too without the Zora mask...kinda iffy to me
- CHECK(RC_STONE_TOWER_TEMPLE_CENTER_ACROSS_WATER_CHEST, CAN_BE_ZORA),
- CHECK(RC_STONE_TOWER_TEMPLE_CENTER_SUN_BLOCK_CHEST, CAN_BE_ZORA && CAN_USE_MAGIC_ARROW(LIGHT)),
+ CHECK(RC_STONE_TOWER_TEMPLE_CENTER_ACROSS_WATER_CHEST, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_STONE_TOWER_TEMPLE_CENTER_SUN_BLOCK_CHEST, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM) && CAN_USE_MAGIC_ARROW(LIGHT)),
CHECK(RC_STONE_TOWER_TEMPLE_CENTER_FREESTANDING_RUPEE_01, CAN_USE_MAGIC_ARROW(LIGHT)),
- CHECK(RC_STONE_TOWER_TEMPLE_CENTER_FREESTANDING_RUPEE_02, CAN_USE_MAGIC_ARROW(LIGHT) && CAN_BE_ZORA),
+ CHECK(RC_STONE_TOWER_TEMPLE_CENTER_FREESTANDING_RUPEE_02, CAN_USE_MAGIC_ARROW(LIGHT) && CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
CHECK(RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_01, true),
CHECK(RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_02, true),
CHECK(RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_03, true),
@@ -90,7 +90,7 @@ static RegisterShipInitFunc initFunc([]() {
},
.connections = {
CONNECTION(RR_STONE_TOWER_TEMPLE_OUTSIDE_SWITCH_ROOM, KEY_COUNT(STONE_TOWER_TEMPLE) >= 1),
- CONNECTION(RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM, CAN_BE_ZORA)
+ CONNECTION(RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM_UNDERWATER, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM))
},
};
Regions[RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM] = RandoRegion{ .name = "Deep Pool Room", .sceneId = SCENE_INISIE_N,
@@ -99,19 +99,31 @@ static RegisterShipInitFunc initFunc([]() {
CHECK(RC_STONE_TOWER_TEMPLE_COMPASS_CHEST, (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) >= EQUIP_VALUE_SHIELD_MIRROR) || CAN_USE_MAGIC_ARROW(LIGHT)),
CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_BRIDGE_POT_01, true),
CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_BRIDGE_POT_02, true),
- CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_01, CAN_BE_ZORA),
- CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_02, CAN_BE_ZORA),
- CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_03, CAN_BE_ZORA),
- CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_01, CAN_BE_ZORA),
- CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_02, CAN_BE_ZORA),
- CHECK(RC_STONE_TOWER_TEMPLE_WATER_SUN_SWITCH_CHEST, CAN_BE_ZORA),
- CHECK(RC_ENEMY_DROP_BIO_DEKU_BABA, CanKillEnemy(ACTOR_BOSS_05)),
},
.connections = {
- CONNECTION(RR_STONE_TOWER_TEMPLE_SHALLOW_POOL_ROOM, CAN_BE_ZORA),
+ CONNECTION(RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM_UNDERWATER, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
CONNECTION(RR_STONE_TOWER_TEMPLE_ENTRANCE, (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) >= EQUIP_VALUE_SHIELD_MIRROR) || CAN_USE_MAGIC_ARROW(LIGHT)),
CONNECTION(RR_STONE_TOWER_TEMPLE_MIRROR_PILLAR_ROOM, KEY_COUNT(STONE_TOWER_TEMPLE) >= 2),
},
+ .events = {
+ // Can only be shot at an angle from the water, and can only use arrows there if standing on ice platform
+ EVENT(RE_STONE_TOWER_TEMPLE_DEEP_POOL_SUN_SWITCH, CAN_USE_MAGIC_ARROW(LIGHT) && CAN_USE_MAGIC_ARROW(ICE)),
+ },
+ };
+ Regions[RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM_UNDERWATER] = RandoRegion{ .name = "Deep Pool Room Underwater", .sceneId = SCENE_INISIE_N,
+ .checks = {
+ CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_01, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_02, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_03, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_01, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_02, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_STONE_TOWER_TEMPLE_WATER_SUN_SWITCH_CHEST, RANDO_EVENTS[RE_STONE_TOWER_TEMPLE_DEEP_POOL_SUN_SWITCH] && CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CHECK(RC_ENEMY_DROP_BIO_DEKU_BABA, CanKillEnemy(ACTOR_BOSS_05)),
+ },
+ .connections = {
+ CONNECTION(RR_STONE_TOWER_TEMPLE_SHALLOW_POOL_ROOM, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ CONNECTION(RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
+ },
};
Regions[RR_STONE_TOWER_TEMPLE_MIRROR_PILLAR_ROOM] = RandoRegion{ .name = "Mirror Pillar Room", .sceneId = SCENE_INISIE_N,
.checks = {
@@ -246,6 +258,9 @@ static RegisterShipInitFunc initFunc([]() {
CONNECTION(RR_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE, true),
CONNECTION(RR_STONE_TOWER_TEMPLE_INVERTED_LAVA_FLIP_ROOM, KEY_COUNT(STONE_TOWER_TEMPLE) >= 3 && CAN_BE_DEKU),
},
+ .events = {
+ EVENT(RE_STONE_TOWER_TEMPLE_DEEP_POOL_SUN_SWITCH, CAN_USE_MAGIC_ARROW(LIGHT)),
+ },
};
Regions[RR_STONE_TOWER_TEMPLE_INVERTED_LAVA_FLIP_ROOM] = RandoRegion{ .name = "Flipped Lava Room", .sceneId = SCENE_INISIE_R,
.connections = {
diff --git a/mm/2s2h/Rando/Types.h b/mm/2s2h/Rando/Types.h
index 340c9a84d..89433292f 100644
--- a/mm/2s2h/Rando/Types.h
+++ b/mm/2s2h/Rando/Types.h
@@ -2833,6 +2833,7 @@ typedef enum {
RR_STONE_TOWER_TEMPLE_BOSS_ROOM,
RR_STONE_TOWER_TEMPLE_BRIDGE,
RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM,
+ RR_STONE_TOWER_TEMPLE_DEEP_POOL_ROOM_UNDERWATER,
RR_STONE_TOWER_TEMPLE_ENTRANCE,
RR_STONE_TOWER_TEMPLE_GARO_MASTER_ROOM,
RR_STONE_TOWER_TEMPLE_INVERTED,
@@ -3151,6 +3152,7 @@ typedef enum {
RE_GREAT_BAY_RED_SWITCH_1,
RE_GREAT_BAY_RED_SWITCH_2,
RE_STONE_TOWER_STRAY_FAIRY_INVERTED_ENTRANCE,
+ RE_STONE_TOWER_TEMPLE_DEEP_POOL_SUN_SWITCH,
RE_STONE_TOWER_TEMPLE_ENTRANCE_SWITCH_CHEST,
RE_TERMINA_FIELD_SCRUB_ENTERED_GROTTO,
RE_ACCESS_FROG_CYAN,