diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2026-07-30 18:38:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-30 18:38:29 -0500 |
| commit | dd5a36d60a0f29dd500cb0e826e3d41780f46944 (patch) | |
| tree | d60044f48d8059093a4d99a256611882b3861049 /mm/2s2h/Rando | |
| parent | 630536f681e0b362f58793cd1d8d003c817621bf (diff) | |
Shuffle keaton grass and some more missed grass (#1822)
Diffstat (limited to 'mm/2s2h/Rando')
| -rw-r--r-- | mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp | 375 | ||||
| -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 | ||||
| -rw-r--r-- | mm/2s2h/Rando/StaticData/Checks.cpp | 174 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Types.h | 174 |
14 files changed, 859 insertions, 41 deletions
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp b/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp index 08e245124..3651e46c4 100644 --- a/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp +++ b/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp @@ -14,13 +14,21 @@ extern "C" { #include "variables.h" #include "overlays/actors/ovl_Obj_Grass/z_obj_grass.h" #include "overlays/actors/ovl_En_Kusa/z_en_kusa.h" +#include "overlays/actors/ovl_En_Kusa2/z_en_kusa2.h" #include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h" #include "overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h" void ObjGrass_OverrideMatrixCurrent(MtxF* matrix); +void EnKusa_DrawGrass(Actor* thisx, PlayState* play); extern ObjGrass* sGrassManager; } +struct KeatonGrassRing { + RandoCheckId baseCheckId = RC_UNKNOWN; + RandoCheckId wonderItemCheckId = RC_UNKNOWN; +}; +static ObjectExtension::Register<KeatonGrassRing> keatonGrassRingRegister; + // clang-format off // For large swathes of grass that share a singular actor std::map<std::tuple<s16, u8>, std::tuple<s16, RandoCheckId>> grassObjMap = { @@ -118,6 +126,160 @@ std::map<std::tuple<s16, s16, s16>, RandoCheckId> enKusaMap = { { { SCENE_KAKUSIANA, 2, 4 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_05 }, { { SCENE_KAKUSIANA, 11, 0 }, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_01 }, { { SCENE_KAKUSIANA, 11, 3 }, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_02 }, + // Sprout grass + { { SCENE_20SICHITAI, 0, 45 }, RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_01 }, + { { SCENE_20SICHITAI, 0, 46 }, RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_02 }, + { { SCENE_20SICHITAI, 2, 17 }, RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_01 }, + { { SCENE_20SICHITAI, 2, 18 }, RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_02 }, + { { SCENE_20SICHITAI2, 0, 39 }, RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_01 }, + { { SCENE_20SICHITAI2, 0, 40 }, RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_02 }, + { { SCENE_BOTI, 0, 16 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_04 }, + { { SCENE_BOTI, 0, 17 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_03 }, + { { SCENE_BOTI, 0, 18 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_01 }, + { { SCENE_BOTI, 0, 19 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_02 }, + { { SCENE_BOTI, 0, 20 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_05 }, + { { SCENE_BOTI, 0, 31 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_01 }, + { { SCENE_BOTI, 0, 39 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_02 }, + { { SCENE_BOTI, 0, 40 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_03 }, + { { SCENE_BOTI, 0, 41 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_04 }, + { { SCENE_BOTI, 0, 42 }, RC_IKANA_GRAVEYARD_LOWER_GRASS_05 }, + { { SCENE_CASTLE, 0, 32 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_01 }, + { { SCENE_CASTLE, 0, 33 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_02 }, + { { SCENE_CASTLE, 0, 34 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_03 }, + { { SCENE_CASTLE, 0, 35 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_04 }, + { { SCENE_CASTLE, 0, 36 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_05 }, + { { SCENE_CASTLE, 0, 37 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_06 }, + { { SCENE_CASTLE, 0, 38 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_07 }, + { { SCENE_CASTLE, 0, 39 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_08 }, + { { SCENE_CASTLE, 0, 40 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_09 }, + { { SCENE_CASTLE, 0, 41 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_10 }, + { { SCENE_CASTLE, 0, 42 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_11 }, + { { SCENE_CASTLE, 0, 43 }, RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_12 }, + { { SCENE_HAKUGIN, 4, 60 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_01 }, + { { SCENE_HAKUGIN, 4, 61 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_02 }, + { { SCENE_HAKUGIN, 4, 62 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_03 }, + { { SCENE_HAKUGIN, 4, 63 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_04 }, + { { SCENE_HAKUGIN, 4, 64 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_05 }, + { { SCENE_HAKUGIN, 4, 65 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_06 }, + { { SCENE_HAKUGIN, 4, 66 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_07 }, + { { SCENE_HAKUGIN, 4, 67 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_08 }, + { { SCENE_HAKUGIN, 4, 68 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_09 }, + { { SCENE_HAKUGIN, 4, 69 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_10 }, + { { SCENE_IKANA, 0, 29 }, RC_IKANA_CANYON_GRASS_01 }, + { { SCENE_IKANA, 0, 30 }, RC_IKANA_CANYON_GRASS_02 }, + { { SCENE_IKANA, 0, 31 }, RC_IKANA_CANYON_GRASS_03 }, + { { SCENE_IKANA, 0, 32 }, RC_IKANA_CANYON_GRASS_04 }, + { { SCENE_IKANA, 0, 59 }, RC_IKANA_CANYON_GRASS_01 }, + { { SCENE_IKANA, 0, 60 }, RC_IKANA_CANYON_GRASS_02 }, + { { SCENE_IKANA, 0, 61 }, RC_IKANA_CANYON_GRASS_03 }, + { { SCENE_IKANA, 0, 62 }, RC_IKANA_CANYON_GRASS_04 }, + { { SCENE_INISIE_N, 0, 10 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_01 }, + { { SCENE_INISIE_N, 0, 11 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_02 }, + { { SCENE_INISIE_N, 0, 12 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_03 }, + { { SCENE_INISIE_N, 2, 18 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_01 }, + { { SCENE_INISIE_N, 2, 19 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_02 }, + { { SCENE_INISIE_N, 2, 20 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_03 }, + { { SCENE_INISIE_N, 2, 21 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_04 }, + { { SCENE_INISIE_N, 2, 22 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_05 }, + { { SCENE_INISIE_N, 2, 23 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_06 }, + { { SCENE_MITURIN, 0, 30 }, RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_01 }, + { { SCENE_MITURIN, 0, 31 }, RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_02 }, + { { SCENE_MITURIN, 0, 32 }, RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_03 }, + { { SCENE_MITURIN, 0, 33 }, RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_04 }, + { { SCENE_MITURIN, 0, 34 }, RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_05 }, + { { SCENE_MITURIN, 1, 30 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_01 }, + { { SCENE_MITURIN, 1, 32 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_02 }, + { { SCENE_MITURIN, 1, 31 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_GRASS_01 }, + { { SCENE_MITURIN, 2, 23 }, RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_01 }, + { { SCENE_MITURIN, 2, 24 }, RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_02 }, + { { SCENE_MITURIN, 2, 25 }, RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_04 }, + { { SCENE_MITURIN, 2, 26 }, RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_05 }, + { { SCENE_MITURIN, 2, 27 }, RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_03 }, + { { SCENE_MITURIN, 4, 5 }, RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_01 }, + { { SCENE_MITURIN, 4, 6 }, RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_02 }, + { { SCENE_MITURIN, 4, 7 }, RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_03 }, + { { SCENE_MITURIN, 5, 18 }, RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_01 }, + { { SCENE_MITURIN, 5, 19 }, RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_02 }, + { { SCENE_MITURIN, 6, 6 }, RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_01 }, + { { SCENE_MITURIN, 6, 7 }, RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_02 }, + { { SCENE_MITURIN, 6, 8 }, RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_03 }, + { { SCENE_MITURIN, 6, 9 }, RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_04 }, + { { SCENE_MITURIN, 6, 10 }, RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_05 }, + { { SCENE_MITURIN, 10, 6 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_01 }, + { { SCENE_MITURIN, 10, 7 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_02 }, + { { SCENE_MITURIN, 10, 8 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_03 }, + { { SCENE_MITURIN, 10, 9 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_04 }, + { { SCENE_MITURIN, 10, 10 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_05 }, + { { SCENE_MITURIN, 10, 11 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_06 }, + { { SCENE_MITURIN, 10, 12 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_07 }, + { { SCENE_MITURIN, 10, 13 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_08 }, + { { SCENE_MITURIN, 10, 14 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_09 }, + { { SCENE_MITURIN, 10, 15 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_10 }, + { { SCENE_MITURIN, 10, 16 }, RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_11 }, + { { SCENE_MITURIN_BS, 0, 10 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_01 }, + { { SCENE_MITURIN_BS, 0, 11 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_02 }, + { { SCENE_MITURIN_BS, 0, 12 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_03 }, + { { SCENE_MITURIN_BS, 0, 13 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_04 }, + { { SCENE_MITURIN_BS, 0, 14 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_05 }, + { { SCENE_MITURIN_BS, 0, 15 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_06 }, + { { SCENE_MITURIN_BS, 0, 16 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_07 }, + { { SCENE_MITURIN_BS, 0, 17 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_08 }, + { { SCENE_MITURIN_BS, 0, 18 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_09 }, + { { SCENE_MITURIN_BS, 0, 19 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_10 }, + { { SCENE_MITURIN_BS, 0, 20 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_11 }, + { { SCENE_MITURIN_BS, 0, 21 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_12 }, + { { SCENE_MITURIN_BS, 0, 22 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_13 }, + { { SCENE_MITURIN_BS, 0, 23 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_14 }, + { { SCENE_MITURIN_BS, 0, 24 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_15 }, + { { SCENE_MITURIN_BS, 0, 25 }, RC_WOODFALL_TEMPLE_BOSS_GRASS_16 }, + { { SCENE_RANDOM, 0, 26 }, RC_SECRET_SHRINE_ENTRANCE_GRASS_01 }, + { { SCENE_RANDOM, 0, 27 }, RC_SECRET_SHRINE_ENTRANCE_GRASS_02 }, + { { SCENE_RANDOM, 0, 28 }, RC_SECRET_SHRINE_ENTRANCE_GRASS_03 }, + { { SCENE_RANDOM, 0, 29 }, RC_SECRET_SHRINE_ENTRANCE_GRASS_04 }, + { { SCENE_RANDOM, 0, 30 }, RC_SECRET_SHRINE_ENTRANCE_GRASS_05 }, + { { SCENE_RANDOM, 0, 31 }, RC_SECRET_SHRINE_ENTRANCE_GRASS_06 }, + { { SCENE_RANDOM, 2, 4 }, RC_SECRET_SHRINE_DINOLFOS_GRASS_01 }, + { { SCENE_RANDOM, 2, 5 }, RC_SECRET_SHRINE_DINOLFOS_GRASS_02 }, + { { SCENE_RANDOM, 2, 6 }, RC_SECRET_SHRINE_DINOLFOS_GRASS_03 }, + { { SCENE_RANDOM, 2, 7 }, RC_SECRET_SHRINE_DINOLFOS_GRASS_04 }, + { { SCENE_RANDOM, 3, 6 }, RC_SECRET_SHRINE_WIZZROBE_GRASS_01 }, + { { SCENE_RANDOM, 3, 7 }, RC_SECRET_SHRINE_WIZZROBE_GRASS_02 }, + { { SCENE_RANDOM, 3, 8 }, RC_SECRET_SHRINE_WIZZROBE_GRASS_03 }, + { { SCENE_RANDOM, 3, 9 }, RC_SECRET_SHRINE_WIZZROBE_GRASS_04 }, + { { SCENE_RANDOM, 3, 10 }, RC_SECRET_SHRINE_WIZZROBE_GRASS_05 }, + { { SCENE_RANDOM, 4, 5 }, RC_SECRET_SHRINE_WART_GRASS_01 }, + { { SCENE_RANDOM, 4, 6 }, RC_SECRET_SHRINE_WART_GRASS_02 }, + { { SCENE_RANDOM, 4, 7 }, RC_SECRET_SHRINE_WART_GRASS_03 }, + { { SCENE_RANDOM, 4, 8 }, RC_SECRET_SHRINE_WART_GRASS_04 }, + { { SCENE_RANDOM, 4, 9 }, RC_SECRET_SHRINE_WART_GRASS_05 }, + { { SCENE_RANDOM, 4, 10 }, RC_SECRET_SHRINE_WART_GRASS_06 }, + { { SCENE_RANDOM, 4, 11 }, RC_SECRET_SHRINE_WART_GRASS_07 }, + { { SCENE_RANDOM, 4, 12 }, RC_SECRET_SHRINE_WART_GRASS_08 }, + { { SCENE_RANDOM, 5, 2 }, RC_SECRET_SHRINE_GARO_MASTER_GRASS_01 }, + { { SCENE_RANDOM, 5, 3 }, RC_SECRET_SHRINE_GARO_MASTER_GRASS_02 }, + { { SCENE_RANDOM, 5, 4 }, RC_SECRET_SHRINE_GARO_MASTER_GRASS_03 }, + { { SCENE_RANDOM, 5, 5 }, RC_SECRET_SHRINE_GARO_MASTER_GRASS_04 }, + { { SCENE_RANDOM, 5, 6 }, RC_SECRET_SHRINE_GARO_MASTER_GRASS_05 }, + { { SCENE_RANDOM, 5, 7 }, RC_SECRET_SHRINE_GARO_MASTER_GRASS_06 }, + { { SCENE_ROMANYMAE, 0, 17 }, RC_MILK_ROAD_GRASS_01 }, + { { SCENE_ROMANYMAE, 0, 18 }, RC_MILK_ROAD_GRASS_02 }, + { { SCENE_ROMANYMAE, 0, 19 }, RC_MILK_ROAD_GRASS_03 }, + { { SCENE_20SICHITAI2, 2, 14 }, RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_01 }, + { { SCENE_20SICHITAI2, 2, 15 }, RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_02 }, + { { SCENE_REDEAD, 3, 9 }, RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_01 }, + { { SCENE_REDEAD, 3, 10 }, RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_02 }, + { { SCENE_REDEAD, 3, 11 }, RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_03 }, + { { SCENE_REDEAD, 3, 12 }, RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_04 }, + { { SCENE_REDEAD, 5, 22 }, RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_01 }, + { { SCENE_REDEAD, 5, 23 }, RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_02 }, + { { SCENE_REDEAD, 7, 19 }, RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_01 }, + { { SCENE_REDEAD, 7, 20 }, RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_02 }, + { { SCENE_REDEAD, 7, 21 }, RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_03 }, + { { SCENE_REDEAD, 7, 22 }, RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_04 }, + { { SCENE_REDEAD, 7, 23 }, RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_05 }, + { { SCENE_REDEAD, 9, 6 }, RC_BENEATH_THE_WELL_COW_ROOM_GRASS_01 }, + { { SCENE_REDEAD, 9, 7 }, RC_BENEATH_THE_WELL_COW_ROOM_GRASS_02 }, + { { SCENE_REDEAD, 9, 8 }, RC_BENEATH_THE_WELL_COW_ROOM_GRASS_03 }, }; // For lone grass actors spawned in chest grottos @@ -145,6 +307,16 @@ std::map<std::tuple<u16, u8, s16>, RandoCheckId> objMure2GrassMap = { { { SCENE_10YUKIYAMANOMURA2, 0, 30 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_13 }, { { SCENE_10YUKIYAMANOMURA2, 0, 31 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_22 }, { { SCENE_BOTI, 1, 47 }, RC_IKANA_GRAVEYARD_GRASS_01 }, + { { SCENE_BOTI, 1, 7 }, RC_IKANA_GRAVEYARD_GRASS_01 }, // Night layer +}; + +// For rings of Keaton grass, mapped by their manager actor to the first RC of the ring and the RC of its bonus reward +std::map<std::tuple<s16, s16, s16>, KeatonGrassRing> keatonGrassMap = { + { { SCENE_BACKTOWN, 0, 16 }, { RC_CLOCK_TOWN_NORTH_KEATON_GRASS_01, RC_CLOCK_TOWN_NORTH_KEATON_GRASS_WONDER_ITEM } }, + { { SCENE_BACKTOWN, 0, 28 }, { RC_CLOCK_TOWN_NORTH_KEATON_GRASS_01, RC_CLOCK_TOWN_NORTH_KEATON_GRASS_WONDER_ITEM } }, + { { SCENE_ROMANYMAE, 0, 6 }, { RC_MILK_ROAD_KEATON_GRASS_01, RC_MILK_ROAD_KEATON_GRASS_WONDER_ITEM } }, + { { SCENE_10YUKIYAMANOMURA2, 0, 44 }, { RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_01, RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_WONDER_ITEM } }, + { { SCENE_10YUKIYAMANOMURA2, 0, 50 }, { RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_01, RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_WONDER_ITEM } }, }; // clang-format on @@ -165,53 +337,51 @@ void SpawnGrassDrop(Vec3f pos, RandoCheckId randoCheckId) { }); } -void EnKusaBush_RandoDraw(Actor* actor, PlayState* play) { +Gfx* GetObjGrassDList(RandoCheckId randoCheckId) { if (!CVarGetInteger("gRando.CSMC", 0)) { - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushDL); - return; + return (Gfx*)gRandoBushDL; } - RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor); RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId); RandoItemType randoItemType = Rando::StaticData::Items[randoItemId].randoItemType; switch (randoItemType) { case RITYPE_BOSS_KEY: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushBossKeyDL); + return (Gfx*)gRandoBushBossKeyDL; break; case RITYPE_HEALTH: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushHeartDL); + return (Gfx*)gRandoBushHeartDL; break; case RITYPE_LESSER: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushMinorDL); + return (Gfx*)gRandoBushMinorDL; break; case RITYPE_MAJOR: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushMajorDL); + return (Gfx*)gRandoBushMajorDL; break; case RITYPE_MASK: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushMaskDL); + return (Gfx*)gRandoBushMaskDL; break; case RITYPE_SKULLTULA_TOKEN: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushTokenDL); + return (Gfx*)gRandoBushTokenDL; break; case RITYPE_SMALL_KEY: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushSmallKeyDL); + return (Gfx*)gRandoBushSmallKeyDL; break; case RITYPE_STRAY_FAIRY: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushFairyDL); + return (Gfx*)gRandoBushFairyDL; break; case RITYPE_JUNK: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushJunkDL); + return (Gfx*)gRandoBushJunkDL; break; default: - Gfx_DrawDListOpa(play, (Gfx*)gRandoBushDL); + return (Gfx*)gRandoBushDL; break; } } -Gfx* GetObjGrassDList(RandoCheckId randoCheckId) { +Gfx* GetObjGrassXluDList(RandoCheckId randoCheckId) { if (!CVarGetInteger("gRando.CSMC", 0)) { - return (Gfx*)gRandoBushDL; + return (Gfx*)gRandoBushXluDL; } RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId); @@ -219,41 +389,42 @@ Gfx* GetObjGrassDList(RandoCheckId randoCheckId) { switch (randoItemType) { case RITYPE_BOSS_KEY: - return (Gfx*)gRandoBushBossKeyDL; + return (Gfx*)gRandoBushBossKeyXluDL; break; case RITYPE_HEALTH: - return (Gfx*)gRandoBushHeartDL; + return (Gfx*)gRandoBushHeartXluDL; break; case RITYPE_LESSER: - return (Gfx*)gRandoBushMinorDL; + return (Gfx*)gRandoBushMinorXluDL; break; case RITYPE_MAJOR: - return (Gfx*)gRandoBushMajorDL; + return (Gfx*)gRandoBushMajorXluDL; break; case RITYPE_MASK: - return (Gfx*)gRandoBushMaskDL; + return (Gfx*)gRandoBushMaskXluDL; break; case RITYPE_SKULLTULA_TOKEN: - return (Gfx*)gRandoBushTokenDL; + return (Gfx*)gRandoBushTokenXluDL; break; case RITYPE_SMALL_KEY: - return (Gfx*)gRandoBushSmallKeyDL; + return (Gfx*)gRandoBushSmallKeyXluDL; break; case RITYPE_STRAY_FAIRY: - return (Gfx*)gRandoBushFairyDL; + return (Gfx*)gRandoBushFairyXluDL; break; case RITYPE_JUNK: - return (Gfx*)gRandoBushJunkDL; + return (Gfx*)gRandoBushJunkXluDL; break; default: - return (Gfx*)gRandoBushDL; + return (Gfx*)gRandoBushXluDL; break; } } -Gfx* GetObjGrassXluDList(RandoCheckId randoCheckId) { +// Cuttable grass has its own set of models, as the bush ones above are far too large to stand in for a sprout. +Gfx* GetCuttableGrassDList(RandoCheckId randoCheckId) { if (!CVarGetInteger("gRando.CSMC", 0)) { - return (Gfx*)gRandoBushXluDL; + return (Gfx*)gRandoCuttableGrassRandomDL; } RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId); @@ -261,34 +432,34 @@ Gfx* GetObjGrassXluDList(RandoCheckId randoCheckId) { switch (randoItemType) { case RITYPE_BOSS_KEY: - return (Gfx*)gRandoBushBossKeyXluDL; + return (Gfx*)gRandoCuttableGrassBossKeyDL; break; case RITYPE_HEALTH: - return (Gfx*)gRandoBushHeartXluDL; + return (Gfx*)gRandoCuttableGrassHeartDL; break; case RITYPE_LESSER: - return (Gfx*)gRandoBushMinorXluDL; + return (Gfx*)gRandoCuttableGrassMinorDL; break; case RITYPE_MAJOR: - return (Gfx*)gRandoBushMajorXluDL; + return (Gfx*)gRandoCuttableGrassMajorDL; break; case RITYPE_MASK: - return (Gfx*)gRandoBushMaskXluDL; + return (Gfx*)gRandoCuttableGrassMaskDL; break; case RITYPE_SKULLTULA_TOKEN: - return (Gfx*)gRandoBushTokenXluDL; + return (Gfx*)gRandoCuttableGrassTokenDL; break; case RITYPE_SMALL_KEY: - return (Gfx*)gRandoBushSmallKeyXluDL; + return (Gfx*)gRandoCuttableGrassSmallKeyDL; break; case RITYPE_STRAY_FAIRY: - return (Gfx*)gRandoBushFairyXluDL; + return (Gfx*)gRandoCuttableGrassFairyDL; break; case RITYPE_JUNK: - return (Gfx*)gRandoBushJunkXluDL; + return (Gfx*)gRandoCuttableGrassJunkDL; break; default: - return (Gfx*)gRandoBushXluDL; + return (Gfx*)gRandoCuttableGrassRandomDL; break; } } @@ -323,6 +494,52 @@ void ObjGrass_RandoDrawXlu(ObjGrass* objGrass, ObjGrassElement* grassElem, Rando CLOSE_DISPS(gPlayState->state.gfxCtx); } +void EnKusaBush_RandoDraw(Actor* actor, PlayState* play) { + Gfx_DrawDListOpa(play, GetObjGrassDList(Rando::ActorBehavior::GetObjectRandoCheckId(actor))); +} + +void EnKusaGrass_RandoDraw(Actor* actor, PlayState* play) { + EnKusa* grass = (EnKusa*)actor; + RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor); + + if (RANDO_SAVE_CHECKS[randoCheckId].obtained) { + actor->draw = EnKusa_DrawGrass; + EnKusa_DrawGrass(actor, play); + return; + } + + if (grass->isCut) { + EnKusa_DrawGrass(actor, play); + return; + } + + Gfx_DrawDListOpa(play, GetCuttableGrassDList(randoCheckId)); +} + +void KeatonGrassRing_DrawWonderItemSparkle(EnKusa2* grassRingActor) { + static Vec3f sVelocity = { 0.0f, 1.2f, 0.0f }; + static Vec3f sAccel = { 0.0f, -0.05f, 0.0f }; + static Color_RGBA8 sPrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sEnvColor = { 255, 200, 64, 255 }; + + if (gGameState->frames % 4 != 0) { + return; + } + + EnKusa2* grassBush = grassRingActor->unk_194[(s32)Rand_ZeroFloat(ARRAY_COUNT(grassRingActor->unk_194))]; + if (grassBush == nullptr) { + return; + } + + Vec3f pos = { + Rand_CenteredFloat(20.0f) + grassBush->actor.world.pos.x, + (Rand_ZeroOne() * 25.0f) + grassBush->actor.world.pos.y, + Rand_CenteredFloat(20.0f) + grassBush->actor.world.pos.z, + }; + + EffectSsKirakira_SpawnDispersed(gPlayState, &pos, &sVelocity, &sAccel, &sPrimColor, &sEnvColor, 1600, 16); +} + void Rando::ActorBehavior::InitObjGrassBehavior() { /* * Identify directly spawned actor grass by scene ID, room, and actor list index. If this is a common chest grotto, @@ -360,9 +577,40 @@ void Rando::ActorBehavior::InitObjGrassBehavior() { }); /* + * Identify the manager actor of a ring of Keaton grass by scene ID, room, and actor list index, and remember which + * RCs the ring owns. Its bushes are spawned later, and each of them claims one of those RCs as it attaches. + */ + COND_ID_HOOK(OnActorInit, ACTOR_EN_KUSA2, IS_RANDO, [](Actor* actor) { + if (ENKUSA2_GET_1(actor)) { // This is one of the ring's bushes, not the manager + return; + } + + auto it = keatonGrassMap.find({ gPlayState->sceneId, actor->room, GetActorListIndex(actor) }); + if (it == keatonGrassMap.end()) { + return; + } + + ObjectExtension::GetInstance().Set<KeatonGrassRing>(actor, KeatonGrassRing{ it->second }); + }); + + // Only a ring's manager actor is given this extension, so this skips the ring's bushes along with all other grass. + COND_ID_HOOK(OnActorUpdate, ACTOR_EN_KUSA2, IS_RANDO, [](Actor* actor) { + KeatonGrassRing* grassRing = ObjectExtension::GetInstance().Get<KeatonGrassRing>(actor); + if (grassRing == nullptr) { + return; + } + + RandoSaveCheck& randoSaveCheck = RANDO_SAVE_CHECKS[grassRing->wonderItemCheckId]; + if (randoSaveCheck.shuffled && !randoSaveCheck.obtained) { + KeatonGrassRing_DrawWonderItemSparkle((EnKusa2*)actor); + } + }); + + /* * Identify actor grass that was spawned by a spawner actor, by scene ID, room, and the spawner's actor list index. * The RCs and child grass are contiguous, so they can increment the base value to get their target RC. */ + COND_VB_SHOULD(VB_OBJ_MURE2_SET_CHILD_ROOM, IS_RANDO, { Actor* actor = va_arg(args, Actor*); ObjMure2* objMure2 = (ObjMure2*)actor; @@ -449,12 +697,42 @@ void Rando::ActorBehavior::InitObjGrassBehavior() { } }); - COND_VB_SHOULD(VB_KUSA_BUSH_DRAW_BE_OVERRIDDEN, IS_RANDO, { + COND_VB_SHOULD(VB_KUSA_DRAW_BE_OVERRIDDEN, IS_RANDO, { Actor* actor = va_arg(args, Actor*); RandoCheckId randoCheckId = GetObjectRandoCheckId(actor); if (randoCheckId != RC_UNKNOWN && !RANDO_SAVE_CHECKS[randoCheckId].obtained) { *should = false; - actor->draw = EnKusaBush_RandoDraw; + actor->draw = KUSA_GET_TYPE(actor) == ENKUSA_TYPE_BUSH ? EnKusaBush_RandoDraw : EnKusaGrass_RandoDraw; + } + }); + + /* + * A ring's bushes always spawn in the same positions, so a bush's index within the ring is enough to tie it to a + * specific RC. The RCs are contiguous, so the ring's base value can just be incremented. + */ + COND_VB_SHOULD(VB_KEATON_GRASS_ATTACH_CHILD, IS_RANDO, { + EnKusa2* grassBush = va_arg(args, EnKusa2*); + s32 i = va_arg(args, s32); + KeatonGrassRing* grassRing = ObjectExtension::GetInstance().Get<KeatonGrassRing>(grassBush->unk_1C0); + + if (grassRing == nullptr) { + return; + } + + RandoCheckId randoCheckId = static_cast<RandoCheckId>(grassRing->baseCheckId + i); + if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) { + return; + } + + SetObjectRandoCheckId(grassBush, randoCheckId); + }); + + COND_VB_SHOULD(VB_KEATON_GRASS_DRAW, IS_RANDO, { + EnKusa2* grassBush = va_arg(args, EnKusa2*); + RandoCheckId randoCheckId = GetObjectRandoCheckId(grassBush); + if (randoCheckId != RC_UNKNOWN && !RANDO_SAVE_CHECKS[randoCheckId].obtained) { + *should = false; + Gfx_DrawDListOpa(gPlayState, GetObjGrassDList(randoCheckId)); } }); @@ -494,7 +772,7 @@ void Rando::ActorBehavior::InitObjGrassBehavior() { COND_VB_SHOULD(VB_GRASS_DROP_COLLECTIBLE, IS_RANDO, { auto actorId = static_cast<ActorId>(va_arg(args, int32_t)); Vec3f collectiblePos = gZeroVec3f; - RandoCheckId randoCheckId; + RandoCheckId randoCheckId = RC_UNKNOWN; if (actorId == ACTOR_OBJ_GRASS) { ObjGrassElement* grassElemActor = va_arg(args, ObjGrassElement*); @@ -508,6 +786,21 @@ void Rando::ActorBehavior::InitObjGrassBehavior() { ObjGrassCarry* grassCarryActor = va_arg(args, ObjGrassCarry*); collectiblePos = grassCarryActor->actor.world.pos; randoCheckId = GetObjectRandoCheckId(grassCarryActor); + } else if (actorId == ACTOR_EN_KUSA2) { + EnKusa2* grassBush = va_arg(args, EnKusa2*); + collectiblePos = grassBush->actor.world.pos; + randoCheckId = GetObjectRandoCheckId(grassBush); + + // This bush is the one vanilla would have dropped the ring's red rupee from, so it also owes the check + // that took that reward's place. + EnKusa2* grassRingActor = grassBush->unk_1C0; + KeatonGrassRing* grassRing = ObjectExtension::GetInstance().Get<KeatonGrassRing>(grassRingActor); + if (grassRing != nullptr && grassRingActor->unk_1BC == 8 && + RANDO_SAVE_CHECKS[grassRing->wonderItemCheckId].shuffled && + !RANDO_SAVE_CHECKS[grassRing->wonderItemCheckId].cycleObtained) { + SpawnGrassDrop(collectiblePos, grassRing->wonderItemCheckId); + *should = false; + } } if (randoCheckId == RC_UNKNOWN) { 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 diff --git a/mm/2s2h/Rando/StaticData/Checks.cpp b/mm/2s2h/Rando/StaticData/Checks.cpp index cfb0e9126..03d619e8d 100644 --- a/mm/2s2h/Rando/StaticData/Checks.cpp +++ b/mm/2s2h/Rando/StaticData/Checks.cpp @@ -1400,9 +1400,44 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_WOODFALL_TEMPLE_GEKKO_FROG, RCTYPE_FROG, SCENE_MITURIN, FLAG_NONE, 0x00, RI_FROG_CYAN), // Grass // + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_01, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_02, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_03, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_04, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_05, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_06, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_07, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_08, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_09, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_10, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_11, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_12, RCTYPE_GRASS, SCENE_CASTLE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_COW_ROOM_GRASS_01, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_COW_ROOM_GRASS_02, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_COW_ROOM_GRASS_03, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_01, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_02, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_03, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_04, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_05, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_01, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_02, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_03, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_04, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_01, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_02, RCTYPE_GRASS, SCENE_REDEAD, FLAG_NONE, 0x0, RI_JUNK), RC(RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_01, RCTYPE_GRASS, SCENE_ALLEY, FLAG_NONE, 0x0, RI_JUNK), RC(RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_02, RCTYPE_GRASS, SCENE_ALLEY, FLAG_NONE, 0x0, RI_JUNK), RC(RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_03, RCTYPE_GRASS, SCENE_ALLEY, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_01, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_02, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_03, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_04, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_05, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_06, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_07, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_08, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_09, RCTYPE_GRASS, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_JUNK), RC(RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_03, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), @@ -1530,6 +1565,10 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_GREAT_BAY_COAST_GRASS_03, RCTYPE_GRASS, SCENE_30GYOSON, FLAG_NONE, 0x0, RI_JUNK), RC(RC_GREAT_BAY_COAST_GRASS_04, RCTYPE_GRASS, SCENE_30GYOSON, FLAG_NONE, 0x0, RI_JUNK), RC(RC_GREAT_BAY_COAST_GRASS_05, RCTYPE_GRASS, SCENE_30GYOSON, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_CANYON_GRASS_01, RCTYPE_GRASS, SCENE_IKANA, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_CANYON_GRASS_02, RCTYPE_GRASS, SCENE_IKANA, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_CANYON_GRASS_03, RCTYPE_GRASS, SCENE_IKANA, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_CANYON_GRASS_04, RCTYPE_GRASS, SCENE_IKANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_IKANA_CANYON_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_IKANA_CANYON_GROTTO_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_IKANA_CANYON_GROTTO_GRASS_03, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), @@ -1567,6 +1606,11 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_IKANA_GRAVEYARD_GROTTO_GRASS_12, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_IKANA_GRAVEYARD_GROTTO_GRASS_13, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_IKANA_GRAVEYARD_GROTTO_GRASS_14, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_GRAVEYARD_LOWER_GRASS_01, RCTYPE_GRASS, SCENE_BOTI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_GRAVEYARD_LOWER_GRASS_02, RCTYPE_GRASS, SCENE_BOTI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_GRAVEYARD_LOWER_GRASS_03, RCTYPE_GRASS, SCENE_BOTI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_GRAVEYARD_LOWER_GRASS_04, RCTYPE_GRASS, SCENE_BOTI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_IKANA_GRAVEYARD_LOWER_GRASS_05, RCTYPE_GRASS, SCENE_BOTI, FLAG_NONE, 0x0, RI_JUNK), RC(RC_LONE_PEAK_SHRINE_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_LONE_PEAK_SHRINE_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_LONE_PEAK_SHRINE_GRASS_03, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), @@ -1591,6 +1635,18 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_LONE_PEAK_SHRINE_GRASS_22, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_LONE_PEAK_SHRINE_GRASS_23, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_LONE_PEAK_SHRINE_GRASS_24, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_GRASS_01, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_GRASS_02, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_GRASS_03, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_01, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_02, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_03, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_04, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_05, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_06, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_07, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_08, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MILK_ROAD_KEATON_GRASS_09, RCTYPE_GRASS, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_SPRING_GRASS_01, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_SPRING_GRASS_02, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_SPRING_GRASS_03, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), @@ -1621,6 +1677,15 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_MOUNTAIN_VILLAGE_SPRING_GRASS_28, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_SPRING_GRASS_29, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_SPRING_GRASS_30, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_01, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_02, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_03, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_04, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_05, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_06, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_07, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_08, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_09, RCTYPE_GRASS, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_03, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), @@ -1754,6 +1819,45 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_ROMANI_RANCH_GRASS_55, RCTYPE_GRASS, SCENE_F01, FLAG_NONE, 0x0, RI_JUNK), RC(RC_ROMANI_RANCH_GRASS_56, RCTYPE_GRASS, SCENE_F01, FLAG_NONE, 0x0, RI_JUNK), RC(RC_ROMANI_RANCH_GRASS_57, RCTYPE_GRASS, SCENE_F01, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_DINOLFOS_GRASS_01, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_DINOLFOS_GRASS_02, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_DINOLFOS_GRASS_03, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_DINOLFOS_GRASS_04, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_ENTRANCE_GRASS_01, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_ENTRANCE_GRASS_02, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_ENTRANCE_GRASS_03, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_ENTRANCE_GRASS_04, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_ENTRANCE_GRASS_05, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_ENTRANCE_GRASS_06, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_GARO_MASTER_GRASS_01, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_GARO_MASTER_GRASS_02, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_GARO_MASTER_GRASS_03, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_GARO_MASTER_GRASS_04, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_GARO_MASTER_GRASS_05, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_GARO_MASTER_GRASS_06, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_01, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_02, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_03, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_04, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_05, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_06, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_07, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WART_GRASS_08, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WIZZROBE_GRASS_01, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WIZZROBE_GRASS_02, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WIZZROBE_GRASS_03, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WIZZROBE_GRASS_04, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SECRET_SHRINE_WIZZROBE_GRASS_05, RCTYPE_GRASS, SCENE_RANDOM, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_01, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_02, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_03, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_04, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_05, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_06, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_07, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_08, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_09, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_10, RCTYPE_GRASS, SCENE_HAKUGIN, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_CLEARED_GRASS_01, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_CLEARED_GRASS_02, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_CLEARED_GRASS_03, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), @@ -1784,6 +1888,10 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_SOUTHERN_SWAMP_CLEARED_GRASS_28, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_CLEARED_GRASS_29, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_CLEARED_GRASS_30, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_01, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_02, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_01, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_02, RCTYPE_GRASS, SCENE_20SICHITAI2, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_GROTTO_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_GROTTO_GRASS_03, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), @@ -1829,6 +1937,19 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_SOUTHERN_SWAMP_POISON_GRASS_28, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_POISON_GRASS_29, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), RC(RC_SOUTHERN_SWAMP_POISON_GRASS_30, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_01, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_02, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_01, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_02, RCTYPE_GRASS, SCENE_20SICHITAI, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_01, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_02, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_03, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_01, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_02, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_03, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_04, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_05, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_06, RCTYPE_GRASS, SCENE_INISIE_N, FLAG_NONE, 0x0, RI_JUNK), RC(RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), RC(RC_TERMINA_FIELD_COW_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK), @@ -2202,6 +2323,56 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_WOODFALL_GRASS_04, RCTYPE_GRASS, SCENE_21MITURINMAE, FLAG_NONE, 0x0, RI_JUNK), RC(RC_WOODFALL_GRASS_05, RCTYPE_GRASS, SCENE_21MITURINMAE, FLAG_NONE, 0x0, RI_JUNK), RC(RC_WOODFALL_GRASS_06, RCTYPE_GRASS, SCENE_21MITURINMAE, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_03, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_04, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_05, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_06, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_07, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_08, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_09, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_10, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_11, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_12, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_13, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_14, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_15, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_BOSS_GRASS_16, RCTYPE_GRASS, SCENE_MITURIN_BS, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_03, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_03, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_04, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_05, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_03, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_04, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_05, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_03, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_04, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_05, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_03, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_04, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_05, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_06, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_07, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_08, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_09, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_10, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_11, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_01, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), + RC(RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_02, RCTYPE_GRASS, SCENE_MITURIN, FLAG_NONE, 0x0, RI_JUNK), RC(RC_WOODS_OF_MYSTERY_GRASS_01, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK), RC(RC_WOODS_OF_MYSTERY_GRASS_02, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK), RC(RC_WOODS_OF_MYSTERY_GRASS_03, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK), @@ -2405,6 +2576,7 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_CLOCK_TOWN_EAST_WONDER_ITEM_07, RCTYPE_WONDER_ITEM, SCENE_TOWN, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_CLOCK_TOWN_EAST_WONDER_ITEM_08, RCTYPE_WONDER_ITEM, SCENE_TOWN, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_CLOCK_TOWN_EAST_WONDER_ITEM_09, RCTYPE_WONDER_ITEM, SCENE_TOWN, FLAG_NONE, 0x0, RI_RUPEE_GREEN), + RC(RC_CLOCK_TOWN_NORTH_KEATON_GRASS_WONDER_ITEM, RCTYPE_WONDER_ITEM, SCENE_BACKTOWN, FLAG_NONE, 0x0, RI_RUPEE_RED), RC(RC_CLOCK_TOWN_SOUTH_WONDER_ITEM_01, RCTYPE_WONDER_ITEM, SCENE_CLOCKTOWER, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_CLOCK_TOWN_SOUTH_WONDER_ITEM_02, RCTYPE_WONDER_ITEM, SCENE_CLOCKTOWER, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_CLOCK_TOWN_SOUTH_WONDER_ITEM_03, RCTYPE_WONDER_ITEM, SCENE_CLOCKTOWER, FLAG_NONE, 0x0, RI_RUPEE_GREEN), @@ -2426,6 +2598,8 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = { RC(RC_IKANA_GRAVEYARD_WONDER_ITEM_10, RCTYPE_WONDER_ITEM, SCENE_BOTI, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_IKANA_GRAVEYARD_WONDER_ITEM_11, RCTYPE_WONDER_ITEM, SCENE_BOTI, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_IKANA_GRAVEYARD_WONDER_ITEM_12, RCTYPE_WONDER_ITEM, SCENE_BOTI, FLAG_NONE, 0x0, RI_RUPEE_GREEN), + RC(RC_MILK_ROAD_KEATON_GRASS_WONDER_ITEM, RCTYPE_WONDER_ITEM, SCENE_ROMANYMAE, FLAG_NONE, 0x0, RI_RUPEE_RED), + RC(RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_WONDER_ITEM, RCTYPE_WONDER_ITEM, SCENE_10YUKIYAMANOMURA2, FLAG_NONE, 0x0, RI_RUPEE_RED), RC(RC_OCEAN_SPIDER_HOUSE_WONDER_ITEM_01, RCTYPE_WONDER_ITEM, SCENE_KINDAN2, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_OCEAN_SPIDER_HOUSE_WONDER_ITEM_02, RCTYPE_WONDER_ITEM, SCENE_KINDAN2, FLAG_NONE, 0x0, RI_RUPEE_GREEN), RC(RC_OCEAN_SPIDER_HOUSE_WONDER_ITEM_03, RCTYPE_WONDER_ITEM, SCENE_KINDAN2, FLAG_NONE, 0x0, RI_RUPEE_GREEN), diff --git a/mm/2s2h/Rando/Types.h b/mm/2s2h/Rando/Types.h index 3000cade9..078634a67 100644 --- a/mm/2s2h/Rando/Types.h +++ b/mm/2s2h/Rando/Types.h @@ -1408,9 +1408,44 @@ typedef enum { RC_WOODFALL_TEMPLE_GEKKO_FROG, // Grass // + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_01, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_02, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_03, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_04, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_05, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_06, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_07, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_08, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_09, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_10, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_11, + RC_ANCIENT_CASTLE_OF_IKANA_COURTYARD_GRASS_12, + RC_BENEATH_THE_WELL_COW_ROOM_GRASS_01, + RC_BENEATH_THE_WELL_COW_ROOM_GRASS_02, + RC_BENEATH_THE_WELL_COW_ROOM_GRASS_03, + RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_01, + RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_02, + RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_03, + RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_04, + RC_BENEATH_THE_WELL_FOUR_SPIKED_BARS_GRASS_05, + RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_01, + RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_02, + RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_03, + RC_BENEATH_THE_WELL_RIGHT_FIRE_KEESE_GRASS_04, + RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_01, + RC_BENEATH_THE_WELL_TWO_SPIKED_BARS_GRASS_02, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_01, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_02, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_03, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_01, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_02, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_03, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_04, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_05, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_06, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_07, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_08, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_09, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_01, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_02, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_03, @@ -1538,6 +1573,10 @@ typedef enum { RC_GREAT_BAY_COAST_GRASS_03, RC_GREAT_BAY_COAST_GRASS_04, RC_GREAT_BAY_COAST_GRASS_05, + RC_IKANA_CANYON_GRASS_01, + RC_IKANA_CANYON_GRASS_02, + RC_IKANA_CANYON_GRASS_03, + RC_IKANA_CANYON_GRASS_04, RC_IKANA_CANYON_GROTTO_GRASS_01, RC_IKANA_CANYON_GROTTO_GRASS_02, RC_IKANA_CANYON_GROTTO_GRASS_03, @@ -1575,6 +1614,11 @@ typedef enum { RC_IKANA_GRAVEYARD_GROTTO_GRASS_12, RC_IKANA_GRAVEYARD_GROTTO_GRASS_13, RC_IKANA_GRAVEYARD_GROTTO_GRASS_14, + RC_IKANA_GRAVEYARD_LOWER_GRASS_01, + RC_IKANA_GRAVEYARD_LOWER_GRASS_02, + RC_IKANA_GRAVEYARD_LOWER_GRASS_03, + RC_IKANA_GRAVEYARD_LOWER_GRASS_04, + RC_IKANA_GRAVEYARD_LOWER_GRASS_05, RC_LONE_PEAK_SHRINE_GRASS_01, RC_LONE_PEAK_SHRINE_GRASS_02, RC_LONE_PEAK_SHRINE_GRASS_03, @@ -1599,6 +1643,18 @@ typedef enum { RC_LONE_PEAK_SHRINE_GRASS_22, RC_LONE_PEAK_SHRINE_GRASS_23, RC_LONE_PEAK_SHRINE_GRASS_24, + RC_MILK_ROAD_GRASS_01, + RC_MILK_ROAD_GRASS_02, + RC_MILK_ROAD_GRASS_03, + RC_MILK_ROAD_KEATON_GRASS_01, + RC_MILK_ROAD_KEATON_GRASS_02, + RC_MILK_ROAD_KEATON_GRASS_03, + RC_MILK_ROAD_KEATON_GRASS_04, + RC_MILK_ROAD_KEATON_GRASS_05, + RC_MILK_ROAD_KEATON_GRASS_06, + RC_MILK_ROAD_KEATON_GRASS_07, + RC_MILK_ROAD_KEATON_GRASS_08, + RC_MILK_ROAD_KEATON_GRASS_09, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_01, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_02, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_03, @@ -1629,6 +1685,15 @@ typedef enum { RC_MOUNTAIN_VILLAGE_SPRING_GRASS_28, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_29, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_30, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_01, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_02, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_03, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_04, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_05, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_06, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_07, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_08, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_09, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_01, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_02, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_03, @@ -1762,6 +1827,45 @@ typedef enum { RC_ROMANI_RANCH_GRASS_55, RC_ROMANI_RANCH_GRASS_56, RC_ROMANI_RANCH_GRASS_57, + RC_SECRET_SHRINE_DINOLFOS_GRASS_01, + RC_SECRET_SHRINE_DINOLFOS_GRASS_02, + RC_SECRET_SHRINE_DINOLFOS_GRASS_03, + RC_SECRET_SHRINE_DINOLFOS_GRASS_04, + RC_SECRET_SHRINE_ENTRANCE_GRASS_01, + RC_SECRET_SHRINE_ENTRANCE_GRASS_02, + RC_SECRET_SHRINE_ENTRANCE_GRASS_03, + RC_SECRET_SHRINE_ENTRANCE_GRASS_04, + RC_SECRET_SHRINE_ENTRANCE_GRASS_05, + RC_SECRET_SHRINE_ENTRANCE_GRASS_06, + RC_SECRET_SHRINE_GARO_MASTER_GRASS_01, + RC_SECRET_SHRINE_GARO_MASTER_GRASS_02, + RC_SECRET_SHRINE_GARO_MASTER_GRASS_03, + RC_SECRET_SHRINE_GARO_MASTER_GRASS_04, + RC_SECRET_SHRINE_GARO_MASTER_GRASS_05, + RC_SECRET_SHRINE_GARO_MASTER_GRASS_06, + RC_SECRET_SHRINE_WART_GRASS_01, + RC_SECRET_SHRINE_WART_GRASS_02, + RC_SECRET_SHRINE_WART_GRASS_03, + RC_SECRET_SHRINE_WART_GRASS_04, + RC_SECRET_SHRINE_WART_GRASS_05, + RC_SECRET_SHRINE_WART_GRASS_06, + RC_SECRET_SHRINE_WART_GRASS_07, + RC_SECRET_SHRINE_WART_GRASS_08, + RC_SECRET_SHRINE_WIZZROBE_GRASS_01, + RC_SECRET_SHRINE_WIZZROBE_GRASS_02, + RC_SECRET_SHRINE_WIZZROBE_GRASS_03, + RC_SECRET_SHRINE_WIZZROBE_GRASS_04, + RC_SECRET_SHRINE_WIZZROBE_GRASS_05, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_01, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_02, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_03, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_04, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_05, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_06, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_07, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_08, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_09, + RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_GRASS_10, RC_SOUTHERN_SWAMP_CLEARED_GRASS_01, RC_SOUTHERN_SWAMP_CLEARED_GRASS_02, RC_SOUTHERN_SWAMP_CLEARED_GRASS_03, @@ -1792,6 +1896,10 @@ typedef enum { RC_SOUTHERN_SWAMP_CLEARED_GRASS_28, RC_SOUTHERN_SWAMP_CLEARED_GRASS_29, RC_SOUTHERN_SWAMP_CLEARED_GRASS_30, + RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_01, + RC_SOUTHERN_SWAMP_CLEARED_TOURIST_GRASS_02, + RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_01, + RC_SOUTHERN_SWAMP_CLEARED_WOODS_GRASS_02, RC_SOUTHERN_SWAMP_GROTTO_GRASS_01, RC_SOUTHERN_SWAMP_GROTTO_GRASS_02, RC_SOUTHERN_SWAMP_GROTTO_GRASS_03, @@ -1837,6 +1945,19 @@ typedef enum { RC_SOUTHERN_SWAMP_POISON_GRASS_28, RC_SOUTHERN_SWAMP_POISON_GRASS_29, RC_SOUTHERN_SWAMP_POISON_GRASS_30, + RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_01, + RC_SOUTHERN_SWAMP_POISON_TOURIST_GRASS_02, + RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_01, + RC_SOUTHERN_SWAMP_POISON_WOODS_GRASS_02, + RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_01, + RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_02, + RC_STONE_TOWER_TEMPLE_ENTRANCE_GRASS_03, + RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_01, + RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_02, + RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_03, + RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_04, + RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_05, + RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_GRASS_06, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_01, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_02, RC_TERMINA_FIELD_COW_GROTTO_GRASS_01, @@ -2210,6 +2331,56 @@ typedef enum { RC_WOODFALL_GRASS_04, RC_WOODFALL_GRASS_05, RC_WOODFALL_GRASS_06, + RC_WOODFALL_TEMPLE_BOSS_GRASS_01, + RC_WOODFALL_TEMPLE_BOSS_GRASS_02, + RC_WOODFALL_TEMPLE_BOSS_GRASS_03, + RC_WOODFALL_TEMPLE_BOSS_GRASS_04, + RC_WOODFALL_TEMPLE_BOSS_GRASS_05, + RC_WOODFALL_TEMPLE_BOSS_GRASS_06, + RC_WOODFALL_TEMPLE_BOSS_GRASS_07, + RC_WOODFALL_TEMPLE_BOSS_GRASS_08, + RC_WOODFALL_TEMPLE_BOSS_GRASS_09, + RC_WOODFALL_TEMPLE_BOSS_GRASS_10, + RC_WOODFALL_TEMPLE_BOSS_GRASS_11, + RC_WOODFALL_TEMPLE_BOSS_GRASS_12, + RC_WOODFALL_TEMPLE_BOSS_GRASS_13, + RC_WOODFALL_TEMPLE_BOSS_GRASS_14, + RC_WOODFALL_TEMPLE_BOSS_GRASS_15, + RC_WOODFALL_TEMPLE_BOSS_GRASS_16, + RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_01, + RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_02, + RC_WOODFALL_TEMPLE_COMPASS_ROOM_GRASS_03, + RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_01, + RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_02, + RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_03, + RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_04, + RC_WOODFALL_TEMPLE_ENTRANCE_GRASS_05, + RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_01, + RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_GRASS_02, + RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_GRASS_01, + RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_01, + RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_02, + RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_03, + RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_04, + RC_WOODFALL_TEMPLE_MAP_ROOM_GRASS_05, + RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_01, + RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_02, + RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_03, + RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_04, + RC_WOODFALL_TEMPLE_PRE_BOSS_GRASS_05, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_01, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_02, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_03, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_04, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_05, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_06, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_07, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_08, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_09, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_10, + RC_WOODFALL_TEMPLE_UPPER_WALKWAY_GRASS_11, + RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_01, + RC_WOODFALL_TEMPLE_WATER_ROOM_GRASS_02, RC_WOODS_OF_MYSTERY_GRASS_01, RC_WOODS_OF_MYSTERY_GRASS_02, RC_WOODS_OF_MYSTERY_GRASS_03, @@ -2408,6 +2579,7 @@ typedef enum { RC_CLOCK_TOWN_EAST_WONDER_ITEM_07, RC_CLOCK_TOWN_EAST_WONDER_ITEM_08, RC_CLOCK_TOWN_EAST_WONDER_ITEM_09, + RC_CLOCK_TOWN_NORTH_KEATON_GRASS_WONDER_ITEM, RC_CLOCK_TOWN_SOUTH_WONDER_ITEM_01, RC_CLOCK_TOWN_SOUTH_WONDER_ITEM_02, RC_CLOCK_TOWN_SOUTH_WONDER_ITEM_03, @@ -2429,6 +2601,8 @@ typedef enum { RC_IKANA_GRAVEYARD_WONDER_ITEM_10, RC_IKANA_GRAVEYARD_WONDER_ITEM_11, RC_IKANA_GRAVEYARD_WONDER_ITEM_12, + RC_MILK_ROAD_KEATON_GRASS_WONDER_ITEM, + RC_MOUNTAIN_VILLAGE_SPRING_KEATON_GRASS_WONDER_ITEM, RC_OCEAN_SPIDER_HOUSE_WONDER_ITEM_01, RC_OCEAN_SPIDER_HOUSE_WONDER_ITEM_02, RC_OCEAN_SPIDER_HOUSE_WONDER_ITEM_03, |
