summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEblo <7004497+Eblo@users.noreply.github.com>2026-02-22 08:10:51 -0500
committerGitHub <noreply@github.com>2026-02-22 07:10:51 -0600
commitab95bc38b5cc65533f601567c8bd03699b1a475e (patch)
tree208a0eb419a65a20f3c6e79c77a7a6d518f26a87
parentf62f5735b90878ad97556e47341b881c9c81f78b (diff)
Merge pull request #1550 from Eblo/southern-swamp-octorok-drop
[Rando] Revise kill/drop logic for some enemies
-rw-r--r--mm/2s2h/Rando/Logic/Logic.h5
-rw-r--r--mm/2s2h/Rando/Logic/Regions/East.cpp2
-rw-r--r--mm/2s2h/Rando/Logic/Regions/GreatBayTemple.cpp2
-rw-r--r--mm/2s2h/Rando/Logic/Regions/South.cpp4
-rw-r--r--mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp4
5 files changed, 8 insertions, 9 deletions
diff --git a/mm/2s2h/Rando/Logic/Logic.h b/mm/2s2h/Rando/Logic/Logic.h
index 92df13e64..313442607 100644
--- a/mm/2s2h/Rando/Logic/Logic.h
+++ b/mm/2s2h/Rando/Logic/Logic.h
@@ -723,8 +723,6 @@ inline bool CanKillEnemy(ActorId EnemyId) {
return (CAN_BE_ZORA && HAS_MAGIC);
case ACTOR_EN_KAME: // Snapper (non Gekko Miniboss)
return (CAN_USE_EXPLOSIVE || CAN_BE_GORON);
- case ACTOR_EN_SB: // Shellblade
- return (CAN_BE_ZORA && HAS_MAGIC);
case ACTOR_EN_OKUTA: // Octorok
case ACTOR_EN_EGOL: // Eyegore
return (CAN_USE_PROJECTILE);
@@ -738,7 +736,8 @@ inline bool CanKillEnemy(ActorId EnemyId) {
HAS_ITEM(ITEM_DEKU_STICK) || HAS_ITEM(ITEM_HOOKSHOT));
case ACTOR_EN_PR: // Desbreko
case ACTOR_EN_PR2: // Skull fish
- return (CAN_BE_ZORA && HAS_MAGIC);
+ case ACTOR_EN_SB: // Shellblade
+ return (CAN_BE_ZORA && HAS_MAGIC && CAN_USE_ABILITY(SWIM));
case ACTOR_BOSS_05: // Bio Deku Baba
return CAN_BE_ZORA && CAN_USE_ABILITY(SWIM);
case ACTOR_EN_BEE: // Giant Bee
diff --git a/mm/2s2h/Rando/Logic/Regions/East.cpp b/mm/2s2h/Rando/Logic/Regions/East.cpp
index bff5e8d3a..f4f975715 100644
--- a/mm/2s2h/Rando/Logic/Regions/East.cpp
+++ b/mm/2s2h/Rando/Logic/Regions/East.cpp
@@ -143,7 +143,7 @@ static RegisterShipInitFunc initFunc([]() {
CHECK(RC_IKANA_CANYON_SCRUB_PIECE_OF_HEART, Flags_GetRandoInf(RANDO_INF_OBTAINED_DEED_OCEAN) && CAN_BE_ZORA && CAN_BE_DEKU),
CHECK(RC_IKANA_CANYON_SCRUB_HUGE_RUPEE, Flags_GetRandoInf(RANDO_INF_OBTAINED_DEED_OCEAN) && CAN_BE_ZORA),
CHECK(RC_IKANA_CANYON_SCRUB_POTION_REFILL, CUR_UPG_VALUE(UPG_WALLET) >= 1),
- CHECK(RC_ENEMY_DROP_OCTOROK, CanKillEnemy(ACTOR_EN_OKUTA)),
+ CHECK(RC_ENEMY_DROP_OCTOROK, CanKillEnemy(ACTOR_EN_OKUTA) && CAN_USE_ABILITY(SWIM)),
CHECK(RC_ENEMY_DROP_GARO, CanKillEnemy(ACTOR_EN_JSO)),
},
.exits = { // TO FROM
diff --git a/mm/2s2h/Rando/Logic/Regions/GreatBayTemple.cpp b/mm/2s2h/Rando/Logic/Regions/GreatBayTemple.cpp
index 59bc244c3..bcfb1a109 100644
--- a/mm/2s2h/Rando/Logic/Regions/GreatBayTemple.cpp
+++ b/mm/2s2h/Rando/Logic/Regions/GreatBayTemple.cpp
@@ -286,7 +286,7 @@ static RegisterShipInitFunc initFunc([]() {
CHECK(RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_03, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
CHECK(RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_04, CAN_BE_ZORA && CAN_USE_ABILITY(SWIM)),
CHECK(RC_ENEMY_DROP_SHELLBLADE, CanKillEnemy(ACTOR_EN_SB)),
- CHECK(RC_ENEMY_DROP_OCTOROK, CanKillEnemy(ACTOR_EN_OKUTA)),
+ CHECK(RC_ENEMY_DROP_OCTOROK, CanKillEnemy(ACTOR_EN_OKUTA) && CAN_USE_ABILITY(SWIM) && CAN_BE_ZORA),
CHECK(RC_ENEMY_DROP_SKULLFISH, CanKillEnemy(ACTOR_EN_PR2)),
},
.connections = {
diff --git a/mm/2s2h/Rando/Logic/Regions/South.cpp b/mm/2s2h/Rando/Logic/Regions/South.cpp
index c4916c721..5e9a25499 100644
--- a/mm/2s2h/Rando/Logic/Regions/South.cpp
+++ b/mm/2s2h/Rando/Logic/Regions/South.cpp
@@ -354,7 +354,7 @@ static RegisterShipInitFunc initFunc([]() {
CHECK(RC_SOUTHERN_SWAMP_FROG, HAS_ITEM(ITEM_MASK_DON_GERO)),
CHECK(RC_SOUTHERN_SWAMP_FREESTANDING_RUPEE_01, CAN_BE_DEKU || CAN_BE_ZORA),
CHECK(RC_SOUTHERN_SWAMP_FREESTANDING_RUPEE_02, CAN_BE_DEKU || CAN_BE_ZORA),
- CHECK(RC_ENEMY_DROP_OCTOROK, CanKillEnemy(ACTOR_EN_OKUTA) && CAN_TRAVERSE_WAIST_DEEP_WATER),
+ CHECK(RC_ENEMY_DROP_OCTOROK, CanKillEnemy(ACTOR_EN_OKUTA) && (CAN_USE_ABILITY(SWIM) || CAN_BE_ZORA || CAN_BE_GORON)),
},
.connections = {
CONNECTION(RR_SOUTHERN_SWAMP_SOUTH, CanGetPastBigOctoWithoutBoat()),
@@ -586,7 +586,7 @@ static RegisterShipInitFunc initFunc([]() {
CHECK(RC_WOODS_OF_MYSTERY_GRASS_21, SECOND_DAY()),
CHECK(RC_WOODS_OF_MYSTERY_GRASS_22, FINAL_DAY()),
CHECK(RC_WOODS_OF_MYSTERY_GRASS_23, FINAL_DAY()),
- CHECK(RC_ENEMY_DROP_SNAPPER, CAN_BE_DEKU || CanKillEnemy(ACTOR_EN_KAME)),
+ CHECK(RC_ENEMY_DROP_SNAPPER, CAN_BE_DEKU && CanKillEnemy(ACTOR_EN_KAME)),
},
.exits = { // TO FROM
EXIT(ENTRANCE(SOUTHERN_SWAMP_POISONED, 7), ENTRANCE(WOODS_OF_MYSTERY, 0), true),
diff --git a/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp b/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp
index 7495286b0..87fc7b7ed 100644
--- a/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp
+++ b/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp
@@ -132,8 +132,8 @@ static RegisterShipInitFunc initFunc([]() {
};
Regions[RR_WOODFALL_TEMPLE_MAP_ROOM] = RandoRegion{ .name = "Map Room", .sceneId = SCENE_MITURIN,
.checks = {
- CHECK(RC_WOODFALL_TEMPLE_MAP_CHEST, CAN_BE_DEKU || CanKillEnemy(ACTOR_EN_KAME)),
- CHECK(RC_ENEMY_DROP_SNAPPER, CAN_BE_DEKU || CanKillEnemy(ACTOR_EN_KAME)),
+ CHECK(RC_WOODFALL_TEMPLE_MAP_CHEST, CAN_BE_DEKU && CanKillEnemy(ACTOR_EN_KAME)),
+ CHECK(RC_ENEMY_DROP_SNAPPER, CAN_BE_DEKU && CanKillEnemy(ACTOR_EN_KAME)),
},
.connections = {
CONNECTION(RR_WOODFALL_TEMPLE_WATER_ROOM, true),