diff options
Diffstat (limited to 'mm/2s2h/Rando/Logic')
| -rw-r--r-- | mm/2s2h/Rando/Logic/Logic.h | 3 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/BeneathTheWell.cpp | 14 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/Central.cpp | 10 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/East.cpp | 38 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/IkanaCastle.cpp | 12 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/MilkRoad.cpp | 13 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/North.cpp | 10 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/SnowheadTemple.cpp | 10 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/South.cpp | 8 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp | 9 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp | 50 |
11 files changed, 177 insertions, 0 deletions
diff --git a/mm/2s2h/Rando/Logic/Logic.h b/mm/2s2h/Rando/Logic/Logic.h index 4e4cf2393..582c91a19 100644 --- a/mm/2s2h/Rando/Logic/Logic.h +++ b/mm/2s2h/Rando/Logic/Logic.h @@ -195,6 +195,9 @@ void ValidateRegionTimeOwnership(RandoRegionId regionId, RandoCheckId checkId, u (HAS_ITEM(ITEM_MASK_BLAST) && GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) > EQUIP_VALUE_SHIELD_NONE)) #define CAN_USE_HUMAN_SWORD (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) >= EQUIP_VALUE_SWORD_KOKIRI) #define CAN_USE_SWORD (CAN_USE_HUMAN_SWORD || HAS_ITEM(ITEM_SWORD_GREAT_FAIRY) || CAN_BE_DEITY) +#define CAN_FULLY_CUT_KEATON_GRASS \ + (HAS_MAGIC && (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) >= EQUIP_VALUE_SWORD_RAZOR) && \ + CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_GREAT_SPIN_ATTACK)) // Be careful here, as some checks require you to play the song as a specific form #define CAN_PLAY_SONG(song) \ (HAS_ITEM(ITEM_OCARINA_OF_TIME) && CHECK_QUEST_ITEM(QUEST_SONG_##song) && \ diff --git a/mm/2s2h/Rando/Logic/Regions/BeneathTheWell.cpp b/mm/2s2h/Rando/Logic/Regions/BeneathTheWell.cpp index 21f459385..319276d9f 100644 --- a/mm/2s2h/Rando/Logic/Regions/BeneathTheWell.cpp +++ b/mm/2s2h/Rando/Logic/Regions/BeneathTheWell.cpp @@ -52,6 +52,9 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_BENEATH_THE_WELL_COW_ROOM] = RandoRegion{ .name = "Cow Room", .sceneId = SCENE_REDEAD, .checks = { + CHECK(RC_BENEATH_THE_WELL_COW_ROOM_GRASS_01, true), + CHECK(RC_BENEATH_THE_WELL_COW_ROOM_GRASS_02, true), + CHECK(RC_BENEATH_THE_WELL_COW_ROOM_GRASS_03, true), CHECK(RC_BENEATH_THE_WELL_COW, CAN_PLAY_SONG(EPONA)), CHECK(RC_BENEATH_THE_WELL_TREE, true), }, @@ -91,6 +94,11 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_BENEATH_THE_WELL_FOUR_SPIKED_BARS] = RandoRegion{ .name = "Four Spikes Room", .sceneId = SCENE_REDEAD, .checks = { + CHECK(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_01, true), + CHECK(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_02, true), + CHECK(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_03, true), + CHECK(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_04, true), + CHECK(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_05, true), CHECK(RC_ENEMY_DROP_SKULLTULA, CanKillEnemy(ACTOR_EN_ST)), CHECK(RC_ENEMY_DROP_WALLMASTER, CanKillEnemy(ACTOR_EN_WALLMAS)), }, @@ -139,6 +147,10 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_BENEATH_THE_WELL_RIGHT_FIRE_KEESE] = RandoRegion{ .name = "Right Fire Keese Room", .sceneId = SCENE_REDEAD, .checks = { + CHECK(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_01, true), + CHECK(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_02, true), + CHECK(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_03, true), + CHECK(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_04, true), CHECK(RC_ENEMY_DROP_KEESE, CanKillEnemy(ACTOR_EN_FIREFLY)), }, .connections = { @@ -172,6 +184,8 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_BENEATH_THE_WELL_TWO_SPIKED_BARS] = RandoRegion{ .name = "Two Spikes Room", .sceneId = SCENE_REDEAD, .checks = { + CHECK(RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_01, true), + CHECK(RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_02, true), CHECK(RC_BENEATH_THE_WELL_LEFT_SIDE_POT_01, CAN_LIGHT_TORCH_NEAR_ANOTHER), CHECK(RC_BENEATH_THE_WELL_LEFT_SIDE_POT_02, CAN_LIGHT_TORCH_NEAR_ANOTHER), CHECK(RC_BENEATH_THE_WELL_LEFT_SIDE_POT_03, CAN_LIGHT_TORCH_NEAR_ANOTHER), diff --git a/mm/2s2h/Rando/Logic/Regions/Central.cpp b/mm/2s2h/Rando/Logic/Regions/Central.cpp index c4b811850..168fe2c2a 100644 --- a/mm/2s2h/Rando/Logic/Regions/Central.cpp +++ b/mm/2s2h/Rando/Logic/Regions/Central.cpp @@ -157,6 +157,16 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_CLOCK_TOWN_NORTH] = RandoRegion{ .sceneId = SCENE_BACKTOWN, .checks = { + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_01, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_02, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_03, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_04, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_05, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_06, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_07, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_08, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_09, true), + CHECK(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_WONDER_ITEM, CAN_FULLY_CUT_KEATON_GRASS), CHECK(RC_CLOCK_TOWN_NORTH_TINGLE_MAP_01, CAN_USE_PROJECTILE && CAN_AFFORD(RC_CLOCK_TOWN_NORTH_TINGLE_MAP_01) && IS_DAY()), CHECK(RC_CLOCK_TOWN_NORTH_TINGLE_MAP_02, CAN_USE_PROJECTILE && CAN_AFFORD(RC_CLOCK_TOWN_NORTH_TINGLE_MAP_02) && IS_DAY()), CHECK(RC_CLOCK_TOWN_NORTH_TREE_PIECE_OF_HEART, true), diff --git a/mm/2s2h/Rando/Logic/Regions/East.cpp b/mm/2s2h/Rando/Logic/Regions/East.cpp index 541f65420..5592f5e24 100644 --- a/mm/2s2h/Rando/Logic/Regions/East.cpp +++ b/mm/2s2h/Rando/Logic/Regions/East.cpp @@ -168,6 +168,10 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_IKANA_CANYON_UPPER] = RandoRegion{ .name = "Upper", .sceneId = SCENE_IKANA, .checks = { + CHECK(RC_IKANA_CANYON_GRASS_01, true), + CHECK(RC_IKANA_CANYON_GRASS_02, true), + CHECK(RC_IKANA_CANYON_GRASS_03, true), + CHECK(RC_IKANA_CANYON_GRASS_04, true), CHECK(RC_IKANA_CANYON_OWL_STATUE, CAN_USE_SWORD), CHECK(RC_IKANA_CANYON_TINGLE_MAP_01, CAN_USE_PROJECTILE && CAN_AFFORD(RC_IKANA_CANYON_TINGLE_MAP_01)), CHECK(RC_IKANA_CANYON_TINGLE_MAP_02, CAN_USE_PROJECTILE && CAN_AFFORD(RC_IKANA_CANYON_TINGLE_MAP_02)), @@ -219,6 +223,11 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_IKANA_GRAVEYARD_LOWER] = RandoRegion{ .name = "Lower", .sceneId = SCENE_BOTI, .checks = { + CHECK(RC_IKANA_GRAVEYARD_LOWER_GRASS_01, true), + CHECK(RC_IKANA_GRAVEYARD_LOWER_GRASS_02, true), + CHECK(RC_IKANA_GRAVEYARD_LOWER_GRASS_03, true), + CHECK(RC_IKANA_GRAVEYARD_LOWER_GRASS_04, true), + CHECK(RC_IKANA_GRAVEYARD_LOWER_GRASS_05, true), CHECK(RC_IKANA_GRAVEYARD_GRASS_01, true), CHECK(RC_IKANA_GRAVEYARD_GRASS_02, true), CHECK(RC_IKANA_GRAVEYARD_GRASS_03, true), @@ -368,6 +377,12 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_SECRET_SHRINE_ENTRANCE] = RandoRegion{ .name = "Entrance", .sceneId = SCENE_RANDOM, .checks = { + CHECK(RC_SECRET_SHRINE_ENTRANCE_GRASS_01, true), + CHECK(RC_SECRET_SHRINE_ENTRANCE_GRASS_02, true), + CHECK(RC_SECRET_SHRINE_ENTRANCE_GRASS_03, true), + CHECK(RC_SECRET_SHRINE_ENTRANCE_GRASS_04, true), + CHECK(RC_SECRET_SHRINE_ENTRANCE_GRASS_05, true), + CHECK(RC_SECRET_SHRINE_ENTRANCE_GRASS_06, true), CHECK(RC_SECRET_SHRINE_FREESTANDING_RUPEE_01, CAN_GROW_BEAN_PLANT || CAN_BE_ZORA), CHECK(RC_SECRET_SHRINE_FREESTANDING_RUPEE_02, CAN_GROW_BEAN_PLANT || CAN_BE_ZORA), CHECK(RC_SECRET_SHRINE_FREESTANDING_RUPEE_03, CAN_GROW_BEAN_PLANT || CAN_BE_ZORA), @@ -398,6 +413,29 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_SECRET_SHRINE] = RandoRegion{ .sceneId = SCENE_RANDOM, .checks = { + CHECK(RC_SECRET_SHRINE_DINOLFOS_GRASS_01, true), + CHECK(RC_SECRET_SHRINE_DINOLFOS_GRASS_02, true), + CHECK(RC_SECRET_SHRINE_DINOLFOS_GRASS_03, true), + CHECK(RC_SECRET_SHRINE_DINOLFOS_GRASS_04, true), + CHECK(RC_SECRET_SHRINE_WIZZROBE_GRASS_01, true), + CHECK(RC_SECRET_SHRINE_WIZZROBE_GRASS_02, true), + CHECK(RC_SECRET_SHRINE_WIZZROBE_GRASS_03, true), + CHECK(RC_SECRET_SHRINE_WIZZROBE_GRASS_04, true), + CHECK(RC_SECRET_SHRINE_WIZZROBE_GRASS_05, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_01, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_02, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_03, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_04, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_05, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_06, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_07, true), + CHECK(RC_SECRET_SHRINE_WART_GRASS_08, true), + CHECK(RC_SECRET_SHRINE_GARO_MASTER_GRASS_01, true), + CHECK(RC_SECRET_SHRINE_GARO_MASTER_GRASS_02, true), + CHECK(RC_SECRET_SHRINE_GARO_MASTER_GRASS_03, true), + CHECK(RC_SECRET_SHRINE_GARO_MASTER_GRASS_04, true), + CHECK(RC_SECRET_SHRINE_GARO_MASTER_GRASS_05, true), + CHECK(RC_SECRET_SHRINE_GARO_MASTER_GRASS_06, true), CHECK(RC_SECRET_SHRINE_DINOLFOS_CHEST, RANDO_EVENTS[RE_SECRET_SHRINE_DINOLFOS]), CHECK(RC_SECRET_SHRINE_WIZZROBE_CHEST, RANDO_EVENTS[RE_SECRET_SHRINE_WIZZROBE]), CHECK(RC_SECRET_SHRINE_WART_CHEST, RANDO_EVENTS[RE_SECRET_SHRINE_WART]), diff --git a/mm/2s2h/Rando/Logic/Regions/IkanaCastle.cpp b/mm/2s2h/Rando/Logic/Regions/IkanaCastle.cpp index 87cf46421..d36f4c7f3 100644 --- a/mm/2s2h/Rando/Logic/Regions/IkanaCastle.cpp +++ b/mm/2s2h/Rando/Logic/Regions/IkanaCastle.cpp @@ -38,6 +38,18 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_IKANA_CASTLE_COURTYARD] = RandoRegion{ .name = "Courtyard", .sceneId = SCENE_CASTLE, .checks = { + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_01, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_02, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_03, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_04, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_05, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_06, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_07, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_08, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_09, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_10, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_11, true), + CHECK(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_12, true), CHECK(RC_ANCIENT_CASTLE_OF_IKANA_EXTERIOR_POT, true), CHECK(RC_ENEMY_DROP_GUAY, CanKillEnemy(ACTOR_EN_CROW)), CHECK(RC_ENEMY_DROP_GARO, CanKillEnemy(ACTOR_EN_JSO)), diff --git a/mm/2s2h/Rando/Logic/Regions/MilkRoad.cpp b/mm/2s2h/Rando/Logic/Regions/MilkRoad.cpp index 75b7ae574..d7c58d228 100644 --- a/mm/2s2h/Rando/Logic/Regions/MilkRoad.cpp +++ b/mm/2s2h/Rando/Logic/Regions/MilkRoad.cpp @@ -118,6 +118,19 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_MILK_ROAD] = RandoRegion{ .sceneId = SCENE_ROMANYMAE, .checks = { + CHECK(RC_MILK_ROAD_GRASS_01, true), + CHECK(RC_MILK_ROAD_GRASS_02, true), + CHECK(RC_MILK_ROAD_GRASS_03, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_01, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_02, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_03, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_04, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_05, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_06, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_07, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_08, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_09, true), + CHECK(RC_MILK_ROAD_KEATON_GRASS_WONDER_ITEM, CAN_FULLY_CUT_KEATON_GRASS), CHECK(RC_KEATON_QUIZ, HAS_ITEM(ITEM_MASK_KEATON)), CHECK(RC_MILK_ROAD_OWL_STATUE, CAN_USE_SWORD), CHECK(RC_MILK_ROAD_TINGLE_MAP_01, CAN_USE_PROJECTILE && CAN_AFFORD(RC_MILK_ROAD_TINGLE_MAP_01)), diff --git a/mm/2s2h/Rando/Logic/Regions/North.cpp b/mm/2s2h/Rando/Logic/Regions/North.cpp index 5bbe65931..5e4d5aae1 100644 --- a/mm/2s2h/Rando/Logic/Regions/North.cpp +++ b/mm/2s2h/Rando/Logic/Regions/North.cpp @@ -225,6 +225,16 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_MOUNTAIN_VILLAGE] = RandoRegion{ .sceneId = SCENE_10YUKIYAMANOMURA, .checks = { + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_01, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_02, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_03, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_04, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_05, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_06, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_07, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_08, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_09, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE]), + CHECK(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_WONDER_ITEM, RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE] && CAN_FULLY_CUT_KEATON_GRASS), CHECK(RC_KEATON_QUIZ, HAS_ITEM(ITEM_MASK_KEATON)), CHECK(RC_MOUNTAIN_VILLAGE_DON_GERO_MASK, RANDO_EVENTS[RE_SPAWN_SIRLOIN]), // TODO: For entrance rando we need to find a way to ensure the Rock Sirloin can be "walked" here CHECK(RC_MOUNTAIN_VILLAGE_FROG_CHOIR, HAS_ITEM(ITEM_MASK_DON_GERO) && RANDO_EVENTS[RE_CLEARED_SNOWHEAD_TEMPLE] && FOUND_ALL_FROGS), diff --git a/mm/2s2h/Rando/Logic/Regions/SnowheadTemple.cpp b/mm/2s2h/Rando/Logic/Regions/SnowheadTemple.cpp index 8d1540704..f8d22474b 100644 --- a/mm/2s2h/Rando/Logic/Regions/SnowheadTemple.cpp +++ b/mm/2s2h/Rando/Logic/Regions/SnowheadTemple.cpp @@ -103,6 +103,16 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM] = RandoRegion{ .sceneId = SCENE_HAKUGIN, .checks = { + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_01, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_02, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_03, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_04, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_05, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_06, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_07, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_08, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_09, true), + CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_10, true), CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_CHEST, CAN_BE_GORON), CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_POT_01, true), CHECK(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_POT_02, true), diff --git a/mm/2s2h/Rando/Logic/Regions/South.cpp b/mm/2s2h/Rando/Logic/Regions/South.cpp index 323ae3276..4962a5f50 100644 --- a/mm/2s2h/Rando/Logic/Regions/South.cpp +++ b/mm/2s2h/Rando/Logic/Regions/South.cpp @@ -331,6 +331,10 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_SOUTHERN_SWAMP_NORTH] = RandoRegion{ .name = "North Tourist Section", .sceneId = SCENE_20SICHITAI, .checks = { + CHECK(RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_01, true), + CHECK(RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_02, true), + CHECK(RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_01, RANDO_EVENTS[RE_CLEARED_WOODFALL_TEMPLE]), + CHECK(RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_02, RANDO_EVENTS[RE_CLEARED_WOODFALL_TEMPLE]), CHECK(RC_SOUTHERN_SWAMP_PIECE_OF_HEART, CAN_BE_DEKU && Flags_GetRandoInf(RANDO_INF_OBTAINED_DEED_LAND)), CHECK(RC_SOUTHERN_SWAMP_SCRUB_DEED, Flags_GetRandoInf(RANDO_INF_OBTAINED_DEED_LAND)), CHECK(RC_SOUTHERN_SWAMP_SCRUB_BEANS, CAN_BE_DEKU), @@ -403,6 +407,10 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_SOUTHERN_SWAMP_NEAR_WOODS] = RandoRegion{ .name = "North Woods Section", .sceneId = SCENE_20SICHITAI, .checks = { + CHECK(RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_01, RANDO_EVENTS[RE_CLEARED_WOODFALL_TEMPLE]), + CHECK(RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_02, RANDO_EVENTS[RE_CLEARED_WOODFALL_TEMPLE]), + CHECK(RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_01, true), + CHECK(RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_02, true), CHECK(RC_SOUTHERN_SWAMP_POISON_POT_01, true), CHECK(RC_SOUTHERN_SWAMP_POISON_POT_02, true), CHECK(RC_SOUTHERN_SWAMP_POISON_POT_03, true), diff --git a/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp b/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp index cd300a0af..05aabfc38 100644 --- a/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp +++ b/mm/2s2h/Rando/Logic/Regions/StoneTowerTemple.cpp @@ -10,6 +10,9 @@ static RegisterShipInitFunc initFunc([]() { // Rightside Temple. Regions[RR_STONE_TOWER_TEMPLE_ENTRANCE] = RandoRegion{ .name = "Entrace", .sceneId = SCENE_INISIE_N, .checks = { + CHECK(RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_01, true), + CHECK(RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_02, true), + CHECK(RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_03, true), CHECK(RC_STONE_TOWER_TEMPLE_ENTRANCE_CHEST, HAS_ITEM(ITEM_BOW)), CHECK(RC_STONE_TOWER_TEMPLE_ENTRANCE_SMALL_CRATE_01, true), CHECK(RC_STONE_TOWER_TEMPLE_ENTRANCE_SMALL_CRATE_02, true), @@ -32,6 +35,12 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_STONE_TOWER_TEMPLE_SWITCH_ROOM] = RandoRegion{ .name = "Switch Room", .sceneId = SCENE_INISIE_N, .checks = { + CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_01, true), + CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_02, true), + CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_03, true), + CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_04, true), + CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_05, true), + CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_06, true), CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_01, true), CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_02, true), CHECK(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_03, true), diff --git a/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp b/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp index 2b949fb61..f6d07e07d 100644 --- a/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp +++ b/mm/2s2h/Rando/Logic/Regions/WoodfallTemple.cpp @@ -24,6 +24,22 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_BOSS_ROOM] = RandoRegion{ .sceneId = SCENE_MITURIN_BS, .checks = { + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_02, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_03, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_04, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_05, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_06, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_07, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_08, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_09, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_10, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_11, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_12, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_13, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_14, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_15, true), + CHECK(RC_WOODFALL_TEMPLE_BOSS_GRASS_16, true), CHECK(RC_WOODFALL_TEMPLE_BOSS_CONTAINER, CanKillEnemy(ACTOR_BOSS_01)), CHECK(RC_WOODFALL_TEMPLE_BOSS_WARP, CanKillEnemy(ACTOR_BOSS_01)), CHECK(RC_GIANTS_CHAMBER_OATH_TO_ORDER, CanKillEnemy(ACTOR_BOSS_01)), @@ -49,6 +65,9 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_COMPASS_ROOM] = RandoRegion{ .name = "Compass Room", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_02, true), + CHECK(RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_03, true), CHECK(RC_WOODFALL_TEMPLE_COMPASS_CHEST, CanKillEnemy(ACTOR_EN_GRASSHOPPER)), CHECK(RC_ENEMY_DROP_DRAGONFLY, CanKillEnemy(ACTOR_EN_GRASSHOPPER)), }, @@ -79,6 +98,11 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_ENTRANCE] = RandoRegion{ .name = "Entrance", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_02, true), + CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_03, true), + CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_04, CAN_BE_DEKU || HAS_ITEM(ITEM_HOOKSHOT)), + CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_05, CAN_BE_DEKU || HAS_ITEM(ITEM_HOOKSHOT)), CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_CHEST, CAN_BE_DEKU || HAS_ITEM(ITEM_HOOKSHOT)), CHECK(RC_WOODFALL_TEMPLE_SF_ENTRANCE, CAN_USE_PROJECTILE), CHECK(RC_WOODFALL_TEMPLE_ENTRANCE_POT, CAN_BE_DEKU), @@ -95,6 +119,18 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_MAIN_ROOM_UPPER] = RandoRegion{ .name = "Main Room Upper", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_02, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_03, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_04, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_05, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_06, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_07, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_08, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_09, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_10, true), + CHECK(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_11, true), CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_POT_01, true), CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_POT_02, true), CHECK(RC_WOODFALL_TEMPLE_SF_MAIN_BUBBLE, true), @@ -113,6 +149,8 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_MAIN_ROOM] = RandoRegion{ .name = "Main Room", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_02, true), CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_01, true), CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_02, true), CHECK(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_03, true), @@ -133,6 +171,11 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_MAP_ROOM] = RandoRegion{ .name = "Map Room", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_02, true), + CHECK(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_03, true), + CHECK(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_04, true), + CHECK(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_05, true), 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)), }, @@ -161,6 +204,11 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_PRE_BOSS_ROOM] = RandoRegion{ .name = "Pre Boss Room", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_01, true), + CHECK(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_02, true), + CHECK(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_03, true), + CHECK(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_04, true), + CHECK(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_05, true), CHECK(RC_WOODFALL_TEMPLE_SF_PRE_BOSS_BOTTOM_RIGHT, CAN_BE_DEKU), CHECK(RC_WOODFALL_TEMPLE_SF_PRE_BOSS_LEFT, CAN_BE_DEKU), CHECK(RC_WOODFALL_TEMPLE_SF_PRE_BOSS_TOP_RIGHT, CAN_BE_DEKU), @@ -199,6 +247,8 @@ static RegisterShipInitFunc initFunc([]() { }; Regions[RR_WOODFALL_TEMPLE_WATER_ROOM] = RandoRegion{ .name = "Water Room", .sceneId = SCENE_MITURIN, .checks = { + CHECK(RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_01, CAN_BE_DEKU), + CHECK(RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_02, CAN_BE_DEKU), CHECK(RC_WOODFALL_TEMPLE_WATER_CHEST, CAN_BE_DEKU || HAS_ITEM(ITEM_HOOKSHOT)), CHECK(RC_WOODFALL_TEMPLE_SF_WATER_ROOM_BEEHIVE, ( // Can they break it, leaving the fairy up high? // TODO: Trick for bombs & chus here |
