This commit is contained in:
Philip Dubé 2025-04-23 17:13:37 -04:00 committed by GitHub
commit 51c12c1247
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
44 changed files with 2449 additions and 58 deletions

View file

@ -1091,6 +1091,307 @@ const std::vector<FlagTable> flagTables = {
"RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1" },
{ RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2,
"RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2" },
{ RAND_INF_KF_CIRCLE_ROCK_1, "RAND_INF_KF_CIRCLE_ROCK_1" },
{ RAND_INF_KF_CIRCLE_ROCK_2, "RAND_INF_KF_CIRCLE_ROCK_2" },
{ RAND_INF_KF_CIRCLE_ROCK_3, "RAND_INF_KF_CIRCLE_ROCK_3" },
{ RAND_INF_KF_CIRCLE_ROCK_4, "RAND_INF_KF_CIRCLE_ROCK_4" },
{ RAND_INF_KF_CIRCLE_ROCK_5, "RAND_INF_KF_CIRCLE_ROCK_5" },
{ RAND_INF_KF_CIRCLE_ROCK_6, "RAND_INF_KF_CIRCLE_ROCK_6" },
{ RAND_INF_KF_CIRCLE_ROCK_7, "RAND_INF_KF_CIRCLE_ROCK_7" },
{ RAND_INF_KF_CIRCLE_ROCK_8, "RAND_INF_KF_CIRCLE_ROCK_8" },
{ RAND_INF_KF_ROCK_BY_SARIAS_HOUSE, "RAND_INF_KF_ROCK_BY_SARIAS_HOUSE" },
{ RAND_INF_KF_ROCK_BEHIND_SARIAS_HOUSE, "RAND_INF_KF_ROCK_BEHIND_SARIAS_HOUSE" },
{ RAND_INF_KF_ROCK_BY_MIDOS_HOUSE, "RAND_INF_KF_ROCK_BY_MIDOS_HOUSE" },
{ RAND_INF_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE, "RAND_INF_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE" },
{ RAND_INF_LW_BOULDER_BY_GORON_CITY, "RAND_INF_LW_BOULDER_BY_GORON_CITY" },
{ RAND_INF_LW_BOULDER_BY_SACRED_FOREST_MEADOW, "RAND_INF_LW_BOULDER_BY_SACRED_FOREST_MEADOW" },
{ RAND_INF_LW_RUPEE_BOULDER, "RAND_INF_LW_RUPEE_BOULDER" },
{ RAND_INF_HC_ROCK_1, "RAND_INF_HC_ROCK_1" },
{ RAND_INF_HC_ROCK_2, "RAND_INF_HC_ROCK_2" },
{ RAND_INF_HC_ROCK_3, "RAND_INF_HC_ROCK_3" },
{ RAND_INF_HC_BOULDER, "RAND_INF_HC_BOULDER" },
{ RAND_INF_OGC_BRONZE_BOULDER_1, "RAND_INF_OGC_BRONZE_BOULDER_1" },
{ RAND_INF_OGC_BRONZE_BOULDER_2, "RAND_INF_OGC_BRONZE_BOULDER_2" },
{ RAND_INF_OGC_BRONZE_BOULDER_3, "RAND_INF_OGC_BRONZE_BOULDER_3" },
{ RAND_INF_OGC_SILVER_BOULDER_1, "RAND_INF_OGC_SILVER_BOULDER_1" },
{ RAND_INF_OGC_SILVER_BOULDER_2, "RAND_INF_OGC_SILVER_BOULDER_2" },
{ RAND_INF_OGC_SILVER_BOULDER_3, "RAND_INF_OGC_SILVER_BOULDER_3" },
{ RAND_INF_OGC_SILVER_BOULDER_4, "RAND_INF_OGC_SILVER_BOULDER_4" },
{ RAND_INF_DMC_CIRCLE_ROCK_1, "RAND_INF_DMC_CIRCLE_ROCK_1" },
{ RAND_INF_DMC_CIRCLE_ROCK_2, "RAND_INF_DMC_CIRCLE_ROCK_2" },
{ RAND_INF_DMC_CIRCLE_ROCK_3, "RAND_INF_DMC_CIRCLE_ROCK_3" },
{ RAND_INF_DMC_CIRCLE_ROCK_4, "RAND_INF_DMC_CIRCLE_ROCK_4" },
{ RAND_INF_DMC_CIRCLE_ROCK_5, "RAND_INF_DMC_CIRCLE_ROCK_5" },
{ RAND_INF_DMC_CIRCLE_ROCK_6, "RAND_INF_DMC_CIRCLE_ROCK_6" },
{ RAND_INF_DMC_CIRCLE_ROCK_7, "RAND_INF_DMC_CIRCLE_ROCK_7" },
{ RAND_INF_DMC_CIRCLE_ROCK_8, "RAND_INF_DMC_CIRCLE_ROCK_8" },
{ RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_1, "RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_1" },
{ RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_2, "RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_2" },
{ RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_3, "RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_3" },
{ RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_4, "RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_4" },
{ RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_5, "RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_5" },
{ RAND_INF_DMC_GOSSIP_ROCK_1, "RAND_INF_DMC_GOSSIP_ROCK_1" },
{ RAND_INF_DMC_GOSSIP_ROCK_2, "RAND_INF_DMC_GOSSIP_ROCK_2" },
{ RAND_INF_DMC_BOULDER_1, "RAND_INF_DMC_BOULDER_1" },
{ RAND_INF_DMC_BOULDER_2, "RAND_INF_DMC_BOULDER_2" },
{ RAND_INF_DMC_BOULDER_3, "RAND_INF_DMC_BOULDER_3" },
{ RAND_INF_DMC_BRONZE_BOULDER_1, "RAND_INF_DMC_BRONZE_BOULDER_1" },
{ RAND_INF_DMC_BRONZE_BOULDER_2, "RAND_INF_DMC_BRONZE_BOULDER_2" },
{ RAND_INF_DMC_BRONZE_BOULDER_3, "RAND_INF_DMC_BRONZE_BOULDER_3" },
{ RAND_INF_DMC_BRONZE_BOULDER_4, "RAND_INF_DMC_BRONZE_BOULDER_4" },
{ RAND_INF_GV_SILVER_BOULDER, "RAND_INF_GV_SILVER_BOULDER" },
{ RAND_INF_GV_ROCK_1, "RAND_INF_GV_ROCK_1" },
{ RAND_INF_GV_ROCK_2, "RAND_INF_GV_ROCK_2" },
{ RAND_INF_GV_ROCK_3, "RAND_INF_GV_ROCK_3" },
{ RAND_INF_GV_UNDERWATER_ROCK_1, "RAND_INF_GV_UNDERWATER_ROCK_1" },
{ RAND_INF_GV_UNDERWATER_ROCK_2, "RAND_INF_GV_UNDERWATER_ROCK_2" },
{ RAND_INF_GV_UNDERWATER_ROCK_3, "RAND_INF_GV_UNDERWATER_ROCK_3" },
{ RAND_INF_GV_ROCK_ACROSS_BRIDGE_1, "RAND_INF_GV_ROCK_ACROSS_BRIDGE_1" },
{ RAND_INF_GV_ROCK_ACROSS_BRIDGE_2, "RAND_INF_GV_ROCK_ACROSS_BRIDGE_2" },
{ RAND_INF_GV_ROCK_ACROSS_BRIDGE_3, "RAND_INF_GV_ROCK_ACROSS_BRIDGE_3" },
{ RAND_INF_GV_ROCK_ACROSS_BRIDGE_4, "RAND_INF_GV_ROCK_ACROSS_BRIDGE_4" },
{ RAND_INF_GV_BOULDER_1, "RAND_INF_GV_BOULDER_1" },
{ RAND_INF_GV_BOULDER_2, "RAND_INF_GV_BOULDER_2" },
{ RAND_INF_GV_BOULDER_ACROSS_BRIDGE, "RAND_INF_GV_BOULDER_ACROSS_BRIDGE" },
{ RAND_INF_GV_BRONZE_BOULDER_1, "RAND_INF_GV_BRONZE_BOULDER_1" },
{ RAND_INF_GV_BRONZE_BOULDER_2, "RAND_INF_GV_BRONZE_BOULDER_2" },
{ RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1, "RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1" },
{ RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2, "RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2" },
{ RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3, "RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3" },
{ RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4, "RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4" },
{ RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5, "RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5" },
{ RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6, "RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6" },
{ RAND_INF_HF_SILVER_BOULDER, "RAND_INF_HF_SILVER_BOULDER" },
{ RAND_INF_HF_ROCK_1, "RAND_INF_HF_ROCK_1" },
{ RAND_INF_HF_ROCK_2, "RAND_INF_HF_ROCK_2" },
{ RAND_INF_HF_ROCK_3, "RAND_INF_HF_ROCK_3" },
{ RAND_INF_HF_ROCK_4, "RAND_INF_HF_ROCK_4" },
{ RAND_INF_HF_ROCK_5, "RAND_INF_HF_ROCK_5" },
{ RAND_INF_HF_ROCK_6, "RAND_INF_HF_ROCK_6" },
{ RAND_INF_HF_ROCK_7, "RAND_INF_HF_ROCK_7" },
{ RAND_INF_HF_ROCK_8, "RAND_INF_HF_ROCK_8" },
{ RAND_INF_HF_BOULDER_NORTH, "RAND_INF_HF_BOULDER_NORTH" },
{ RAND_INF_HF_BOULDER_BY_MARKET, "RAND_INF_HF_BOULDER_BY_MARKET" },
{ RAND_INF_HF_BOULDER_SOUTH, "RAND_INF_HF_BOULDER_SOUTH" },
{ RAND_INF_HF_BRONZE_BOULDER_1, "RAND_INF_HF_BRONZE_BOULDER_1" },
{ RAND_INF_HF_BRONZE_BOULDER_2, "RAND_INF_HF_BRONZE_BOULDER_2" },
{ RAND_INF_HF_BRONZE_BOULDER_3, "RAND_INF_HF_BRONZE_BOULDER_3" },
{ RAND_INF_HF_BRONZE_BOULDER_4, "RAND_INF_HF_BRONZE_BOULDER_4" },
{ RAND_INF_KAK_SILVER_BOULDER, "RAND_INF_KAK_SILVER_BOULDER" },
{ RAND_INF_KAK_ROCK_1, "RAND_INF_KAK_ROCK_1" },
{ RAND_INF_KAK_ROCK_2, "RAND_INF_KAK_ROCK_2" },
{ RAND_INF_GY_ROCK, "RAND_INF_GY_ROCK" },
{ RAND_INF_LA_ROCK, "RAND_INF_LA_ROCK" },
{ RAND_INF_ZD_CIRCLE_ROCK_1, "RAND_INF_ZD_CIRCLE_ROCK_1" },
{ RAND_INF_ZD_CIRCLE_ROCK_2, "RAND_INF_ZD_CIRCLE_ROCK_2" },
{ RAND_INF_ZD_CIRCLE_ROCK_3, "RAND_INF_ZD_CIRCLE_ROCK_3" },
{ RAND_INF_ZD_CIRCLE_ROCK_4, "RAND_INF_ZD_CIRCLE_ROCK_4" },
{ RAND_INF_ZD_CIRCLE_ROCK_5, "RAND_INF_ZD_CIRCLE_ROCK_5" },
{ RAND_INF_ZD_CIRCLE_ROCK_6, "RAND_INF_ZD_CIRCLE_ROCK_6" },
{ RAND_INF_ZD_CIRCLE_ROCK_7, "RAND_INF_ZD_CIRCLE_ROCK_7" },
{ RAND_INF_ZD_CIRCLE_ROCK_8, "RAND_INF_ZD_CIRCLE_ROCK_8" },
{ RAND_INF_ZF_BOULDER, "RAND_INF_ZF_BOULDER" },
{ RAND_INF_ZF_SILVER_BOULDER, "RAND_INF_ZF_SILVER_BOULDER" },
{ RAND_INF_ZF_UNDERGROUND_BOULDER, "RAND_INF_ZF_UNDERGROUND_BOULDER" },
{ RAND_INF_ZR_BOULDER_1, "RAND_INF_ZR_BOULDER_1" },
{ RAND_INF_ZR_BOULDER_2, "RAND_INF_ZR_BOULDER_2" },
{ RAND_INF_ZR_BOULDER_3, "RAND_INF_ZR_BOULDER_3" },
{ RAND_INF_ZR_BOULDER_4, "RAND_INF_ZR_BOULDER_4" },
{ RAND_INF_ZR_CIRCLE_ROCK_1, "RAND_INF_ZR_CIRCLE_ROCK_1" },
{ RAND_INF_ZR_CIRCLE_ROCK_2, "RAND_INF_ZR_CIRCLE_ROCK_2" },
{ RAND_INF_ZR_CIRCLE_ROCK_3, "RAND_INF_ZR_CIRCLE_ROCK_3" },
{ RAND_INF_ZR_CIRCLE_ROCK_4, "RAND_INF_ZR_CIRCLE_ROCK_4" },
{ RAND_INF_ZR_CIRCLE_ROCK_5, "RAND_INF_ZR_CIRCLE_ROCK_5" },
{ RAND_INF_ZR_CIRCLE_ROCK_6, "RAND_INF_ZR_CIRCLE_ROCK_6" },
{ RAND_INF_ZR_CIRCLE_ROCK_7, "RAND_INF_ZR_CIRCLE_ROCK_7" },
{ RAND_INF_ZR_CIRCLE_ROCK_8, "RAND_INF_ZR_CIRCLE_ROCK_8" },
{ RAND_INF_ZR_UPPER_CIRCLE_BOULDER, "RAND_INF_ZR_UPPER_CIRCLE_BOULDER" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_1, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_1" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_2, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_2" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_3, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_3" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_4, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_4" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_5, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_5" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_6, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_6" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_7, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_7" },
{ RAND_INF_ZR_UPPER_CIRCLE_ROCK_8, "RAND_INF_ZR_UPPER_CIRCLE_ROCK_8" },
{ RAND_INF_ZR_ROCK, "RAND_INF_ZR_ROCK" },
{ RAND_INF_ZR_UNDERWATER_ROCK_1, "RAND_INF_ZR_UNDERWATER_ROCK_1" },
{ RAND_INF_ZR_UNDERWATER_ROCK_2, "RAND_INF_ZR_UNDERWATER_ROCK_2" },
{ RAND_INF_ZR_UNDERWATER_ROCK_3, "RAND_INF_ZR_UNDERWATER_ROCK_3" },
{ RAND_INF_ZR_UNDERWATER_ROCK_4, "RAND_INF_ZR_UNDERWATER_ROCK_4" },
{ RAND_INF_DMT_ROCK_1, "RAND_INF_DMT_ROCK_1" },
{ RAND_INF_DMT_ROCK_2, "RAND_INF_DMT_ROCK_2" },
{ RAND_INF_DMT_ROCK_3, "RAND_INF_DMT_ROCK_3" },
{ RAND_INF_DMT_ROCK_4, "RAND_INF_DMT_ROCK_4" },
{ RAND_INF_DMT_ROCK_5, "RAND_INF_DMT_ROCK_5" },
{ RAND_INF_DMT_SUMMIT_ROCK, "RAND_INF_DMT_SUMMIT_ROCK" },
{ RAND_INF_DMT_CIRCLE_ROCK_1, "RAND_INF_DMT_CIRCLE_ROCK_1" },
{ RAND_INF_DMT_CIRCLE_ROCK_2, "RAND_INF_DMT_CIRCLE_ROCK_2" },
{ RAND_INF_DMT_CIRCLE_ROCK_3, "RAND_INF_DMT_CIRCLE_ROCK_3" },
{ RAND_INF_DMT_CIRCLE_ROCK_4, "RAND_INF_DMT_CIRCLE_ROCK_4" },
{ RAND_INF_DMT_CIRCLE_ROCK_5, "RAND_INF_DMT_CIRCLE_ROCK_5" },
{ RAND_INF_DMT_CIRCLE_ROCK_6, "RAND_INF_DMT_CIRCLE_ROCK_6" },
{ RAND_INF_DMT_CIRCLE_ROCK_7, "RAND_INF_DMT_CIRCLE_ROCK_7" },
{ RAND_INF_DMT_CIRCLE_ROCK_8, "RAND_INF_DMT_CIRCLE_ROCK_8" },
{ RAND_INF_DMT_BOULDER_1, "RAND_INF_DMT_BOULDER_1" },
{ RAND_INF_DMT_BOULDER_2, "RAND_INF_DMT_BOULDER_2" },
{ RAND_INF_DMT_BOULDER_3, "RAND_INF_DMT_BOULDER_3" },
{ RAND_INF_DMT_COW_BOULDER, "RAND_INF_DMT_COW_BOULDER" },
{ RAND_INF_DMT_BRONZE_BOULDER_1, "RAND_INF_DMT_BRONZE_BOULDER_1" },
{ RAND_INF_DMT_BRONZE_BOULDER_2, "RAND_INF_DMT_BRONZE_BOULDER_2" },
{ RAND_INF_DMT_BRONZE_BOULDER_3, "RAND_INF_DMT_BRONZE_BOULDER_3" },
{ RAND_INF_DMT_BRONZE_BOULDER_4, "RAND_INF_DMT_BRONZE_BOULDER_4" },
{ RAND_INF_DMT_BRONZE_BOULDER_5, "RAND_INF_DMT_BRONZE_BOULDER_5" },
{ RAND_INF_DMT_BRONZE_BOULDER_6, "RAND_INF_DMT_BRONZE_BOULDER_6" },
{ RAND_INF_DMT_BRONZE_BOULDER_7, "RAND_INF_DMT_BRONZE_BOULDER_7" },
{ RAND_INF_DMT_BRONZE_BOULDER_8, "RAND_INF_DMT_BRONZE_BOULDER_8" },
{ RAND_INF_DMT_BRONZE_BOULDER_9, "RAND_INF_DMT_BRONZE_BOULDER_9" },
{ RAND_INF_DMT_BRONZE_BOULDER_10, "RAND_INF_DMT_BRONZE_BOULDER_10" },
{ RAND_INF_DMT_BRONZE_BOULDER_11, "RAND_INF_DMT_BRONZE_BOULDER_11" },
{ RAND_INF_GC_LW_BOULDER_1, "RAND_INF_GC_LW_BOULDER_1" },
{ RAND_INF_GC_LW_BOULDER_2, "RAND_INF_GC_LW_BOULDER_2" },
{ RAND_INF_GC_LW_BOULDER_3, "RAND_INF_GC_LW_BOULDER_3" },
{ RAND_INF_GC_ENTRANCE_BOULDER_1, "RAND_INF_GC_ENTRANCE_BOULDER_1" },
{ RAND_INF_GC_ENTRANCE_BOULDER_2, "RAND_INF_GC_ENTRANCE_BOULDER_2" },
{ RAND_INF_GC_ENTRANCE_BOULDER_3, "RAND_INF_GC_ENTRANCE_BOULDER_3" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_1, "RAND_INF_GC_MAZE_SILVER_BOULDER_1" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_2, "RAND_INF_GC_MAZE_SILVER_BOULDER_2" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_3, "RAND_INF_GC_MAZE_SILVER_BOULDER_3" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_4, "RAND_INF_GC_MAZE_SILVER_BOULDER_4" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_5, "RAND_INF_GC_MAZE_SILVER_BOULDER_5" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_6, "RAND_INF_GC_MAZE_SILVER_BOULDER_6" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_7, "RAND_INF_GC_MAZE_SILVER_BOULDER_7" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_8, "RAND_INF_GC_MAZE_SILVER_BOULDER_8" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_9, "RAND_INF_GC_MAZE_SILVER_BOULDER_9" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_10, "RAND_INF_GC_MAZE_SILVER_BOULDER_10" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_11, "RAND_INF_GC_MAZE_SILVER_BOULDER_11" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_12, "RAND_INF_GC_MAZE_SILVER_BOULDER_12" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_13, "RAND_INF_GC_MAZE_SILVER_BOULDER_13" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_14, "RAND_INF_GC_MAZE_SILVER_BOULDER_14" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_15, "RAND_INF_GC_MAZE_SILVER_BOULDER_15" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_16, "RAND_INF_GC_MAZE_SILVER_BOULDER_16" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_17, "RAND_INF_GC_MAZE_SILVER_BOULDER_17" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_18, "RAND_INF_GC_MAZE_SILVER_BOULDER_18" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_19, "RAND_INF_GC_MAZE_SILVER_BOULDER_19" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_20, "RAND_INF_GC_MAZE_SILVER_BOULDER_20" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_21, "RAND_INF_GC_MAZE_SILVER_BOULDER_21" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_22, "RAND_INF_GC_MAZE_SILVER_BOULDER_22" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_23, "RAND_INF_GC_MAZE_SILVER_BOULDER_23" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_24, "RAND_INF_GC_MAZE_SILVER_BOULDER_24" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_25, "RAND_INF_GC_MAZE_SILVER_BOULDER_25" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_26, "RAND_INF_GC_MAZE_SILVER_BOULDER_26" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_27, "RAND_INF_GC_MAZE_SILVER_BOULDER_27" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_28, "RAND_INF_GC_MAZE_SILVER_BOULDER_28" },
{ RAND_INF_GC_MAZE_SILVER_BOULDER_29, "RAND_INF_GC_MAZE_SILVER_BOULDER_29" },
{ RAND_INF_GC_MAZE_BOULDER_1, "RAND_INF_GC_MAZE_BOULDER_1" },
{ RAND_INF_GC_MAZE_BOULDER_2, "RAND_INF_GC_MAZE_BOULDER_2" },
{ RAND_INF_GC_MAZE_BOULDER_3, "RAND_INF_GC_MAZE_BOULDER_3" },
{ RAND_INF_GC_MAZE_BOULDER_4, "RAND_INF_GC_MAZE_BOULDER_4" },
{ RAND_INF_GC_MAZE_BOULDER_5, "RAND_INF_GC_MAZE_BOULDER_5" },
{ RAND_INF_GC_MAZE_BOULDER_6, "RAND_INF_GC_MAZE_BOULDER_6" },
{ RAND_INF_GC_MAZE_BOULDER_7, "RAND_INF_GC_MAZE_BOULDER_7" },
{ RAND_INF_GC_MAZE_BOULDER_8, "RAND_INF_GC_MAZE_BOULDER_8" },
{ RAND_INF_GC_MAZE_BOULDER_9, "RAND_INF_GC_MAZE_BOULDER_9" },
{ RAND_INF_GC_MAZE_BOULDER_10, "RAND_INF_GC_MAZE_BOULDER_10" },
{ RAND_INF_GC_MAZE_BRONZE_BOULDER_1, "RAND_INF_GC_MAZE_BRONZE_BOULDER_1" },
{ RAND_INF_GC_MAZE_BRONZE_BOULDER_2, "RAND_INF_GC_MAZE_BRONZE_BOULDER_2" },
{ RAND_INF_GC_MAZE_BRONZE_BOULDER_3, "RAND_INF_GC_MAZE_BRONZE_BOULDER_3" },
{ RAND_INF_GC_MAZE_BRONZE_BOULDER_4, "RAND_INF_GC_MAZE_BRONZE_BOULDER_4" },
{ RAND_INF_GC_MAZE_BRONZE_BOULDER_5, "RAND_INF_GC_MAZE_BRONZE_BOULDER_5" },
{ RAND_INF_GC_MAZE_ROCK, "RAND_INF_GC_MAZE_ROCK" },
{ RAND_INF_COLOSSUS_SILVER_BOULDER, "RAND_INF_COLOSSUS_SILVER_BOULDER" },
{ RAND_INF_COLOSSUS_ROCK, "RAND_INF_COLOSSUS_ROCK" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_1, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_1" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_2, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_2" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_3, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_3" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_4, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_4" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_5, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_5" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_6, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_6" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_7, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_7" },
{ RAND_INF_COLOSSUS_CIRCLE_1_ROCK_8, "RAND_INF_COLOSSUS_CIRCLE_1_ROCK_8" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_1, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_1" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_2, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_2" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_3, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_3" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_4, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_4" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_5, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_5" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_6, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_6" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_7, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_7" },
{ RAND_INF_COLOSSUS_CIRCLE_2_ROCK_8, "RAND_INF_COLOSSUS_CIRCLE_2_ROCK_8" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_1, "RAND_INF_HC_STORMS_GROTTO_ROCK_1" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_2, "RAND_INF_HC_STORMS_GROTTO_ROCK_2" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_3, "RAND_INF_HC_STORMS_GROTTO_ROCK_3" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_4, "RAND_INF_HC_STORMS_GROTTO_ROCK_4" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_5, "RAND_INF_HC_STORMS_GROTTO_ROCK_5" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_6, "RAND_INF_HC_STORMS_GROTTO_ROCK_6" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_7, "RAND_INF_HC_STORMS_GROTTO_ROCK_7" },
{ RAND_INF_HC_STORMS_GROTTO_ROCK_8, "RAND_INF_HC_STORMS_GROTTO_ROCK_8" },
{ RAND_INF_BOTW_BOULDER_1, "RAND_INF_BOTW_BOULDER_1" },
{ RAND_INF_BOTW_BOULDER_2, "RAND_INF_BOTW_BOULDER_2" },
{ RAND_INF_BOTW_BOULDER_3, "RAND_INF_BOTW_BOULDER_3" },
{ RAND_INF_BOTW_BOULDER_4, "RAND_INF_BOTW_BOULDER_4" },
{ RAND_INF_BOTW_BOULDER_5, "RAND_INF_BOTW_BOULDER_5" },
{ RAND_INF_BOTW_BOULDER_6, "RAND_INF_BOTW_BOULDER_6" },
{ RAND_INF_DEKU_TREE_MQ_BOULDER_1, "RAND_INF_DEKU_TREE_MQ_BOULDER_1" },
{ RAND_INF_DEKU_TREE_MQ_BOULDER_2, "RAND_INF_DEKU_TREE_MQ_BOULDER_2" },
{ RAND_INF_DEKU_TREE_MQ_BOULDER_3, "RAND_INF_DEKU_TREE_MQ_BOULDER_3" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1, "RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2, "RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2" },
{ RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1,
"RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1" },
{ RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2,
"RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2" },
{ RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3,
"RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3" },
{ RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1" },
{ RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11" },
{ RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12,
"RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER, "RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1, "RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2, "RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1,
"RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2,
"RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3,
"RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1,
"RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2,
"RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER, "RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER" },
{ RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER,
"RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER" },
{ RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1" },
{ RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2" },
{ RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3" },
{ RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER" },
{ RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER, "RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER" },
{ RAND_INF_BOTW_MQ_BOULDER_1, "RAND_INF_BOTW_MQ_BOULDER_1" },
{ RAND_INF_BOTW_MQ_BOULDER_2, "RAND_INF_BOTW_MQ_BOULDER_2" },
{ RAND_INF_BOTW_MQ_BOULDER_3, "RAND_INF_BOTW_MQ_BOULDER_3" },
{ RAND_INF_CAUGHT_LOACH, "RAND_INF_CAUGHT_LOACH" },

View file

@ -228,6 +228,15 @@ typedef enum {
// - `*Actor` (interactRangeActor)
VB_BOTTLE_ACTOR,
// #### `result`
// Actor is ACTOR_OBJ_BOMBIWA, or ACTOR_OBJ_HAMISHI
// ```c
// Flags_GetSwitch(play, this->actor.params & 0x3F)
// ```
// #### `args`
// - `*Actor` (interactRangeActor)
VB_BOULDER_BREAK_FLAG,
// #### `result`
// ```c
// ((this->actor.params == DNS_TYPE_HEART_PIECE) && (Flags_GetItemGetInf(ITEMGETINF_DEKU_SCRUB_HEART_PIECE))) ||
@ -1635,6 +1644,14 @@ typedef enum {
// - None
VB_REVERT_SPOILING_ITEMS,
// #### `result`
// ```c
// false
// ```
// #### `args`
// - `*EnIshi`
VB_ROCK_DROP_ITEM,
// #### `result`
// ```c
// !Flags_GetInfTable(INFTABLE_145)

View file

@ -131,6 +131,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Deku-Baum# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans l'Arbre Mojo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DEKU_BOULDER] = HintText(CustomMessage("They say that a #boulder in the Deku Tree# contains #[[1]]#.",
/*german*/ "!!!",
/*french*/ "!!!", {QM_RED, QM_GREEN}));
/*--------------------------
| DODONGOS CAVERN |
---------------------------*/
@ -313,6 +317,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste in Dodongos Höhle# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans la Caverne Dodongo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DODONGOS_BOULDER] = HintText(CustomMessage("They say that a #boulder in Dodongo's Cavern# contains #[[1]]#.",
/*german*/ "!!!",
/*french*/ "!!!", {QM_RED, QM_GREEN}));
/*--------------------------
| JABU JABUS BELLY |
---------------------------*/
@ -480,6 +488,9 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste in Jabu-Jabus Bauch# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans le Ventre de Jabu-Jabu# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_JABU_BOULDER] = HintText(CustomMessage("They say that a #boulder in Jabu Jabu's Belly# contains #[[1]]#.",
/*german*/ "!!!",
/*french*/ "!!!", {QM_RED, QM_GREEN}));
/*--------------------------
| FOREST TEMPLE |
---------------------------*/
@ -1322,6 +1333,9 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Geistertempel# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans le Temple de l'Esprit# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_SPIRIT_TEMPLE_BOULDER] = HintText(CustomMessage("They say that a #boulder in the Spirit Temple# contains #[[1]]#.",
/*german*/ "!!!",
/*french*/ "!!!", {QM_RED, QM_GREEN}));
/*--------------------------
| SHADOW TEMPLE |
---------------------------*/
@ -1735,6 +1749,9 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß etwas #Gras auf dem Grund des Brunnens# #[[1]]# verstecke.",
/*french*/ "Selon moi, de l'#herbe dans le Puits# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_BOTW_BOULDER] = HintText(CustomMessage("They say that a #boulder in Bottom of the Well# contains #[[1]]#.",
/*german*/ "!!!",
/*french*/ "!!!", {QM_RED, QM_GREEN}));
/*--------------------------
| ICE CAVERN |

View file

@ -2053,6 +2053,127 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Laboratorium# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans un laboratoire# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a royal tomb# reveals #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_KF_ROCK] = HintText(CustomMessage("They say that a #rock in Kokiri Forest# contains #[[1]]#.",
/*german*/ "",
/*french*/ "Selon moi, une #roche dans la Fôret Kokiri# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_LW_BOULDER] = HintText(CustomMessage("They say that a #boulder in the Lost Woods# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_HC_ROCK] = HintText(CustomMessage("They say that a #rock at Hyrule Castle# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_HC_BOULDER] = HintText(CustomMessage("They say that a #boulder at Hyrule Castle# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_OGC_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder outside Ganon's Castle# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_OGC_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder outside Ganon's Castle# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMC_ROCK] = HintText(CustomMessage("They say that a #rock in Death Mountain Crater# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMC_BOULDER] = HintText(CustomMessage("They say that a #boulder in Death Mountain Crater# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMC_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder in Death Mountain Crater# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in Gerudo Valley# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_ROCK] = HintText(CustomMessage("They say that a #rock in Gerudo Valley# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_BOULDER] = HintText(CustomMessage("They say that a #boulder in Gerudo Valley# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder in Gerudo Valley# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder on Hyrule Field# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_ROCK] = HintText(CustomMessage("They say that a #rock on Hyrule Field# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_BOULDER] = HintText(CustomMessage("They say that a #boulder on Hyrule Field# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder on Hyrule Field# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_KAK_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder at Kakariko Village# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_KAK_ROCK] = HintText(CustomMessage("They say that a #rock at Kakariko Village# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GY_ROCK] = HintText(CustomMessage("They say that a #rock in a graveyard# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_LA_ROCK] = HintText(CustomMessage("They say that a #rock at Lake Hylia# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZD_ROCK] = HintText(CustomMessage("They say that a #rock in Zora's Domain# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZF_BOULDER] = HintText(CustomMessage("They say that a #boulder in Zora's Fountain# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZF_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in Zora's Fountain# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZR_ROCK] = HintText(CustomMessage("They say that a #rock along a river# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZR_BOULDER] = HintText(CustomMessage("They say that a #boulder along a river# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMT_ROCK] = HintText(CustomMessage("They say that a #rock on Death Mountain Trail# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMT_BOULDER] = HintText(CustomMessage("They say that a #boulder on Death Mountain Trail# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMT_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder on Death Mountain Trail# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_ROCK] = HintText(CustomMessage("They say that a #rock in Goron City# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_BOULDER] = HintText(CustomMessage("They say that a #boulder in Goron City# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder in Goron City# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in Goron City# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_COLOSSUS_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in a desert# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
hintTextTable[RHT_COLOSSUS_ROCK] = HintText(CustomMessage("They say that a #rock in a desert# contains #[[1]]#.",
/*german*/ "",
/*french*/ "", {QM_RED, QM_GREEN}));
// clang-format on
}
} // namespace Rando

View file

@ -616,6 +616,17 @@ void GenerateItemPool() {
PlaceItemsForType(RCTYPE_NLCRATE, overworldNLCratesActive, dungeonCratesActive);
PlaceItemsForType(RCTYPE_SMALL_CRATE, overworldCratesActive, dungeonCratesActive);
// Shuffle Rocks
bool rocksActive = ctx->GetOption(RSK_SHUFFLE_ROCKS).Get();
PlaceItemsForType(RCTYPE_ROCK, rocksActive, rocksActive);
// Shuffle Boulders
bool overworldBouldersActive = ctx->GetOption(RSK_SHUFFLE_BOULDERS).Is(RO_SHUFFLE_BOULDERS_OVERWORLD) ||
ctx->GetOption(RSK_SHUFFLE_BOULDERS).Is(RO_SHUFFLE_BOULDERS_ALL);
bool dungeonBouldersActive = ctx->GetOption(RSK_SHUFFLE_BOULDERS).Is(RO_SHUFFLE_BOULDERS_DUNGEONS) ||
ctx->GetOption(RSK_SHUFFLE_BOULDERS).Is(RO_SHUFFLE_BOULDERS_ALL);
PlaceItemsForType(RCTYPE_BOULDER, overworldBouldersActive, dungeonBouldersActive);
auto fsMode = ctx->GetOption(RSK_FISHSANITY);
if (fsMode.IsNot(RO_FISHSANITY_OFF)) {
if (fsMode.Is(RO_FISHSANITY_POND) || fsMode.Is(RO_FISHSANITY_BOTH)) {

View file

@ -0,0 +1,630 @@
#include "ShuffleRocks.h"
#include "soh_assets.h"
#include "static_data.h"
extern "C" {
#include "variables.h"
#include "overlays/actors/ovl_En_Ishi/z_en_ishi.h"
#include "overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h"
#include "overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "objects/object_bombiwa/object_bombiwa.h"
extern PlayState* gPlayState;
}
#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get()
extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play);
extern "C" void EnIshi_RandomizerDraw(Actor* thisx, PlayState* play) {
auto rockActor = ((EnIshi*)thisx);
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetGrayscaleColor(POLY_OPA_DISP++, 175, 255, 0, 255);
if (rockActor->rockIdentity.randomizerCheck != RC_MAX &&
Flags_GetRandomizerInf(rockActor->rockIdentity.randomizerInf) == 0) {
gSPGrayscale(POLY_OPA_DISP++, true);
}
if (rockActor->actor.params & 1) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gSilverRockDL);
} else {
Gfx_DrawDListOpa(play, (Gfx*)gFieldKakeraDL);
}
gSPGrayscale(POLY_OPA_DISP++, false);
CLOSE_DISPS(play->state.gfxCtx);
}
extern "C" void ObjBombiwa_RandomizerDraw(Actor* thisx, PlayState* play) {
auto rockActor = ((ObjBombiwa*)thisx);
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetGrayscaleColor(POLY_OPA_DISP++, 175, 255, 0, 255);
if (rockActor->rockIdentity.randomizerCheck != RC_MAX &&
Flags_GetRandomizerInf(rockActor->rockIdentity.randomizerInf) == 0) {
gSPGrayscale(POLY_OPA_DISP++, true);
}
Gfx_DrawDListOpa(play, (Gfx*)object_bombiwa_DL_0009E0);
gSPGrayscale(POLY_OPA_DISP++, false);
CLOSE_DISPS(play->state.gfxCtx);
}
extern "C" void ObjHamishi_RandomizerDraw(Actor* thisx, PlayState* play) {
auto rockActor = ((ObjHamishi*)thisx);
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetGrayscaleColor(POLY_OPA_DISP++, 175, 255, 0, 255);
if (rockActor->rockIdentity.randomizerCheck != RC_MAX &&
Flags_GetRandomizerInf(rockActor->rockIdentity.randomizerInf) == 0) {
gSPGrayscale(POLY_OPA_DISP++, true);
}
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 170, 130, 255);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gSilverRockDL);
gSPGrayscale(POLY_OPA_DISP++, false);
CLOSE_DISPS(play->state.gfxCtx);
}
uint8_t Rock_RandomizerHoldsItem(RockIdentity rockIdentity, PlayState* play, bool isBoulder) {
RandomizerCheck rc = rockIdentity.randomizerCheck;
if (rc == RC_MAX)
return false;
uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon();
uint8_t setting =
Rando::Context::GetInstance()->GetOption(isBoulder ? RSK_SHUFFLE_BOULDERS : RSK_SHUFFLE_ROCKS).Get();
// Don't pull randomized item if rock isn't randomized or is already checked
return IS_RANDO &&
((!isBoulder && setting) || (isBoulder && (setting == RO_SHUFFLE_BOULDERS_ALL ||
(isDungeon && setting == RO_SHUFFLE_BOULDERS_DUNGEONS) ||
(!isDungeon && setting == RO_SHUFFLE_BOULDERS_OVERWORLD)))) &&
!Flags_GetRandomizerInf(rockIdentity.randomizerInf) && rockIdentity.randomizerCheck != RC_UNKNOWN_CHECK;
}
void Rock_RandomizerSpawnCollectible(Actor* actor, RockIdentity rockIdentity, PlayState* play) {
LUSLOG_INFO("ROCKdrop %d\t:\t%d, %d", rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &actor->world.pos, ITEM00_SOH_DUMMY);
item00->randoInf = rockIdentity.randomizerInf;
item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rockIdentity.randomizerCheck, true, GI_NONE);
item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem;
item00->actor.velocity.y = 9.0f;
item00->actor.speedXZ = 2.0f;
item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f);
}
void EnIshi_RandomizerInit(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
if (actor->id != ACTOR_EN_ISHI)
return;
EnIshi* rockActor = static_cast<EnIshi*>(actorRef);
rockActor->rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(
gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z);
if (rockActor->rockIdentity.randomizerCheck == RC_MAX) {
LUSLOG_WARN("ROCK ishi %d\t:\t%d, %d", rockActor->rockIdentity.randomizerCheck, actor->params & 1,
(s16)actor->world.pos.x, (s16)actor->world.pos.z);
} else {
LUSLOG_INFO("ROCK ishi%d %d\t:\t%d, %d", rockActor->rockIdentity.randomizerCheck, actor->params & 1,
(s16)actor->world.pos.x, (s16)actor->world.pos.z);
}
if (Rock_RandomizerHoldsItem(rockActor->rockIdentity, gPlayState, actor->params & 1)) {
rockActor->actor.draw = EnIshi_RandomizerDraw;
}
}
void ObjBombiwa_RandomizerInit(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
if (actor->id != ACTOR_OBJ_BOMBIWA)
return;
ObjBombiwa* rockActor = static_cast<ObjBombiwa*>(actorRef);
rockActor->rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(
gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z);
if (rockActor->rockIdentity.randomizerCheck == RC_MAX) {
LUSLOG_INFO("ROCK bombiwa\t:\t%d, %d", rockActor->rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
} else {
LUSLOG_INFO("ROCK bombiwa%d\t:\t%d, %d", rockActor->rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
}
if (Rock_RandomizerHoldsItem(rockActor->rockIdentity, gPlayState, true)) {
rockActor->actor.draw = ObjBombiwa_RandomizerDraw;
}
}
void ObjHamishi_RandomizerInit(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
if (actor->id != ACTOR_OBJ_HAMISHI)
return;
ObjHamishi* rockActor = static_cast<ObjHamishi*>(actorRef);
rockActor->rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(
gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z);
if (rockActor->rockIdentity.randomizerCheck == RC_MAX) {
LUSLOG_WARN("ROCK hamishi\t:\t%d, %d", rockActor->rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
} else {
LUSLOG_INFO("ROCK hamishi%d\t:\t%d, %d", rockActor->rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
}
if (Rock_RandomizerHoldsItem(rockActor->rockIdentity, gPlayState, true)) {
rockActor->actor.draw = ObjHamishi_RandomizerDraw;
}
}
void ObjBombiwa_RandomizerKill(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
if (actor->id != ACTOR_OBJ_BOMBIWA)
return;
ObjBombiwa* rockActor = static_cast<ObjBombiwa*>(actorRef);
if (Rock_RandomizerHoldsItem(rockActor->rockIdentity, gPlayState, true)) {
Rock_RandomizerSpawnCollectible(&rockActor->actor, rockActor->rockIdentity, gPlayState);
rockActor->rockIdentity.randomizerCheck = RC_MAX;
rockActor->rockIdentity.randomizerInf = RAND_INF_MAX;
}
}
void ObjHamishi_RandomizerKill(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
if (actor->id != ACTOR_OBJ_HAMISHI)
return;
ObjHamishi* rockActor = static_cast<ObjHamishi*>(actorRef);
if (Rock_RandomizerHoldsItem(rockActor->rockIdentity, gPlayState, true)) {
Rock_RandomizerSpawnCollectible(&rockActor->actor, rockActor->rockIdentity, gPlayState);
rockActor->rockIdentity.randomizerCheck = RC_MAX;
rockActor->rockIdentity.randomizerInf = RAND_INF_MAX;
}
}
void RegisterShuffleRock() {
bool shouldRegister = IS_RANDO && (RAND_GET_OPTION(RSK_SHUFFLE_ROCKS) || RAND_GET_OPTION(RSK_SHUFFLE_BOULDERS));
COND_ID_HOOK(OnActorInit, ACTOR_EN_ISHI, shouldRegister, EnIshi_RandomizerInit);
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_BOMBIWA, shouldRegister, ObjBombiwa_RandomizerInit);
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_HAMISHI, shouldRegister, ObjHamishi_RandomizerInit);
COND_ID_HOOK(OnActorKill, ACTOR_OBJ_BOMBIWA, shouldRegister, ObjBombiwa_RandomizerKill);
COND_ID_HOOK(OnActorKill, ACTOR_OBJ_HAMISHI, shouldRegister, ObjHamishi_RandomizerKill);
COND_VB_SHOULD(VB_ROCK_DROP_ITEM, shouldRegister, {
EnIshi* rockActor = va_arg(args, EnIshi*);
if (Rock_RandomizerHoldsItem(rockActor->rockIdentity, gPlayState, rockActor->actor.params & 1)) {
Rock_RandomizerSpawnCollectible(&rockActor->actor, rockActor->rockIdentity, gPlayState);
rockActor->rockIdentity.randomizerCheck = RC_MAX;
rockActor->rockIdentity.randomizerInf = RAND_INF_MAX;
*should = false;
}
});
COND_VB_SHOULD(VB_BOULDER_BREAK_FLAG, shouldRegister, {
Actor* rockActor = va_arg(args, Actor*);
auto rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(
gPlayState->sceneNum, (s16)rockActor->world.pos.x, (s16)rockActor->world.pos.z);
if (Rock_RandomizerHoldsItem(rockIdentity, gPlayState, true)) {
Flags_UnsetSwitch(gPlayState, rockActor->params & 0x3F);
*should = false;
}
});
}
static RegisterShipInitFunc initFunc(RegisterShuffleRock, { "IS_RANDO" });
void Rando::StaticData::RegisterRockLocations() {
#define ROCKLOC(id, area, scene, hint, x, z) \
(locationTable[RC_##id] = Location::Rock(RC_##id, RCQUEST_BOTH, area, scene, TWO_ACTOR_PARAMS(x, z), #id, hint, \
RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_##id)))
#define BOLDLOC(id, area, scene, hint, x, z) \
(locationTable[RC_##id] = Location::Boulder(RC_##id, RCQUEST_BOTH, area, scene, TWO_ACTOR_PARAMS(x, z), #id, hint, \
SpoilerCollectionCheck::RandomizerInf(RAND_INF_##id)))
ROCKLOC(KF_CIRCLE_ROCK_1, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -292, -350);
ROCKLOC(KF_CIRCLE_ROCK_2, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -235, -373);
ROCKLOC(KF_CIRCLE_ROCK_3, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -212, -430);
ROCKLOC(KF_CIRCLE_ROCK_4, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -235, -486);
ROCKLOC(KF_CIRCLE_ROCK_5, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -292, -510);
ROCKLOC(KF_CIRCLE_ROCK_6, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -348, -486);
ROCKLOC(KF_CIRCLE_ROCK_7, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -372, -430);
ROCKLOC(KF_CIRCLE_ROCK_8, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -348, -373);
ROCKLOC(KF_ROCK_BY_SARIAS_HOUSE, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, 248, 601);
ROCKLOC(KF_ROCK_BEHIND_SARIAS_HOUSE, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, 726, 961);
ROCKLOC(KF_ROCK_BY_MIDOS_HOUSE, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -672, -623);
ROCKLOC(KF_ROCK_BY_KNOW_IT_ALLS_HOUSE, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, RHT_KF_ROCK, -1361, 145);
BOLDLOC(LW_BOULDER_BY_GORON_CITY, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, RHT_LW_BOULDER, 915, -925);
BOLDLOC(LW_BOULDER_BY_SACRED_FOREST_MEADOW, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, RHT_LW_BOULDER, 670, -2520);
BOLDLOC(LW_RUPEE_BOULDER, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, RHT_LW_BOULDER, 1720, -2510);
locationTable[RC_HC_ROCK_1] = Location::Rock(
RC_HC_ROCK_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-216, 2977),
"HC Rock 1", RHT_HC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_1));
locationTable[RC_HC_ROCK_2] = Location::Rock(
RC_HC_ROCK_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-110, 3006),
"HC Rock 2", RHT_HC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_2));
locationTable[RC_HC_ROCK_3] = Location::Rock(
RC_HC_ROCK_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-129, 2897),
"HC Rock 3", RHT_HC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_3));
BOLDLOC(HC_BOULDER, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, RHT_HC_BOULDER, 2730, 2540);
BOLDLOC(OGC_BRONZE_BOULDER_1, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_BRONZE_BOULDER, 2324, 533);
BOLDLOC(OGC_BRONZE_BOULDER_2, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_BRONZE_BOULDER, 1590, 787);
BOLDLOC(OGC_BRONZE_BOULDER_3, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_BRONZE_BOULDER, 1661, 748);
BOLDLOC(OGC_SILVER_BOULDER_1, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_SILVER_BOULDER, 1606, 685);
BOLDLOC(OGC_SILVER_BOULDER_2, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_SILVER_BOULDER, 1766, 726);
BOLDLOC(OGC_SILVER_BOULDER_3, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_SILVER_BOULDER, 1701, 661);
BOLDLOC(OGC_SILVER_BOULDER_4, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, RHT_OGC_SILVER_BOULDER, 2260, 560);
ROCKLOC(DMC_ROCK_BY_FIRE_TEMPLE_1, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, -50,
-714);
ROCKLOC(DMC_ROCK_BY_FIRE_TEMPLE_2, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, -26,
-807);
ROCKLOC(DMC_ROCK_BY_FIRE_TEMPLE_3, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 61,
-763);
ROCKLOC(DMC_ROCK_BY_FIRE_TEMPLE_4, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 71,
-610);
ROCKLOC(DMC_ROCK_BY_FIRE_TEMPLE_5, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 79,
-700);
ROCKLOC(DMC_CIRCLE_ROCK_1, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 40, 1850);
ROCKLOC(DMC_CIRCLE_ROCK_2, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 96, 1826);
ROCKLOC(DMC_CIRCLE_ROCK_3, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 120, 1770);
ROCKLOC(DMC_CIRCLE_ROCK_4, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 96, 1713);
ROCKLOC(DMC_CIRCLE_ROCK_5, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 40, 1690);
ROCKLOC(DMC_CIRCLE_ROCK_6, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, -16, 1713);
ROCKLOC(DMC_CIRCLE_ROCK_7, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, -40, 1770);
ROCKLOC(DMC_CIRCLE_ROCK_8, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, -16, 1826);
ROCKLOC(DMC_GOSSIP_ROCK_1, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 1261, 1533);
ROCKLOC(DMC_GOSSIP_ROCK_2, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_ROCK, 1356, 1541);
BOLDLOC(DMC_BOULDER_1, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BOULDER, -504, 1070);
BOLDLOC(DMC_BOULDER_2, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BOULDER, 236, 1199);
BOLDLOC(DMC_BOULDER_3, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BOULDER, 40, 1770);
BOLDLOC(DMC_BRONZE_BOULDER_1, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BRONZE_BOULDER,
-1699, -472);
BOLDLOC(DMC_BRONZE_BOULDER_2, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BRONZE_BOULDER,
-1332, 921);
BOLDLOC(DMC_BRONZE_BOULDER_3, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BRONZE_BOULDER,
-1303, 975);
BOLDLOC(DMC_BRONZE_BOULDER_4, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, RHT_DMC_BRONZE_BOULDER,
-1060, 944);
BOLDLOC(GV_SILVER_BOULDER, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_SILVER_BOULDER, 280, 1470);
ROCKLOC(GV_ROCK_1, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, 2738, 297);
ROCKLOC(GV_ROCK_2, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, 2715, 316);
ROCKLOC(GV_ROCK_3, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, 2699, 275);
ROCKLOC(GV_UNDERWATER_ROCK_1, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, 1559, -63);
ROCKLOC(GV_UNDERWATER_ROCK_2, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, 1605, 26);
ROCKLOC(GV_UNDERWATER_ROCK_3, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, 1686, -33);
ROCKLOC(GV_ROCK_ACROSS_BRIDGE_1, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, -666, -899);
ROCKLOC(GV_ROCK_ACROSS_BRIDGE_2, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, -526, -890);
ROCKLOC(GV_ROCK_ACROSS_BRIDGE_3, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, -607, -791);
ROCKLOC(GV_ROCK_ACROSS_BRIDGE_4, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_ROCK, -458, -782);
BOLDLOC(GV_BOULDER_1, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BOULDER, 751, 569);
BOLDLOC(GV_BOULDER_2, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BOULDER, 545, -510);
BOLDLOC(GV_BOULDER_ACROSS_BRIDGE, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BOULDER, -954, 577);
BOLDLOC(GV_BRONZE_BOULDER_1, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, 861, -778);
BOLDLOC(GV_BRONZE_BOULDER_2, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, 735, 375);
BOLDLOC(GV_BRONZE_BOULDER_ACROSS_BRIDGE_1, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, -1352,
767);
BOLDLOC(GV_BRONZE_BOULDER_ACROSS_BRIDGE_2, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, -1695,
-350);
BOLDLOC(GV_BRONZE_BOULDER_ACROSS_BRIDGE_3, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, -1001,
637);
BOLDLOC(GV_BRONZE_BOULDER_ACROSS_BRIDGE_4, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, -1291,
787);
BOLDLOC(GV_BRONZE_BOULDER_ACROSS_BRIDGE_5, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, -1416,
778);
BOLDLOC(GV_BRONZE_BOULDER_ACROSS_BRIDGE_6, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, RHT_GV_BRONZE_BOULDER, -1256,
856);
BOLDLOC(HF_SILVER_BOULDER, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_SILVER_BOULDER, 674, 8256);
ROCKLOC(HF_ROCK_1, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7875, 6995);
ROCKLOC(HF_ROCK_2, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7818, 6971);
ROCKLOC(HF_ROCK_3, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7795, 6915);
ROCKLOC(HF_ROCK_4, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7818, 6858);
ROCKLOC(HF_ROCK_5, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7875, 6835);
ROCKLOC(HF_ROCK_6, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7931, 6858);
ROCKLOC(HF_ROCK_7, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7955, 6915);
ROCKLOC(HF_ROCK_8, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_ROCK, -7931, 6971);
BOLDLOC(HF_BOULDER_NORTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BOULDER, -4450, -425);
BOLDLOC(HF_BOULDER_BY_MARKET, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BOULDER, -1425, 810);
BOLDLOC(HF_BOULDER_SOUTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BOULDER, -270, 12350);
BOLDLOC(HF_BRONZE_BOULDER_1, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BRONZE_BOULDER, -7870, 6920);
BOLDLOC(HF_BRONZE_BOULDER_2, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BRONZE_BOULDER, -7804, 7983);
BOLDLOC(HF_BRONZE_BOULDER_3, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BRONZE_BOULDER, -8397, 7947);
BOLDLOC(HF_BRONZE_BOULDER_4, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, RHT_HF_BRONZE_BOULDER, -6461, 8220);
BOLDLOC(KAK_SILVER_BOULDER, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, RHT_KAK_SILVER_BOULDER, 1436, 1361);
ROCKLOC(KAK_ROCK_1, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, RHT_KAK_ROCK, 220, -1236);
ROCKLOC(KAK_ROCK_2, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, RHT_KAK_ROCK, -664, 1288);
ROCKLOC(GY_ROCK, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, RHT_GY_ROCK, -1193, 693);
ROCKLOC(LA_ROCK, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, RHT_LA_ROCK, 1222, 3953);
ROCKLOC(ZD_CIRCLE_ROCK_1, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 462, -696);
ROCKLOC(ZD_CIRCLE_ROCK_2, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 518, -719);
ROCKLOC(ZD_CIRCLE_ROCK_3, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 542, -776);
ROCKLOC(ZD_CIRCLE_ROCK_4, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 518, -832);
ROCKLOC(ZD_CIRCLE_ROCK_5, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 462, -856);
ROCKLOC(ZD_CIRCLE_ROCK_6, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 405, -832);
ROCKLOC(ZD_CIRCLE_ROCK_7, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 382, -776);
ROCKLOC(ZD_CIRCLE_ROCK_8, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, RHT_ZD_ROCK, 405, -719);
BOLDLOC(ZF_BOULDER, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, RHT_ZF_BOULDER, 189, 2586);
BOLDLOC(ZF_SILVER_BOULDER, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, RHT_ZF_SILVER_BOULDER, 316, 2634);
BOLDLOC(ZF_UNDERGROUND_BOULDER, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, RHT_ZF_BOULDER, 317, 2631);
BOLDLOC(ZR_BOULDER_1, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_BOULDER, -1456, 434);
BOLDLOC(ZR_BOULDER_2, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_BOULDER, -1518, 435);
BOLDLOC(ZR_BOULDER_3, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_BOULDER, -1576, 430);
BOLDLOC(ZR_BOULDER_4, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_BOULDER, -1400, 482);
ROCKLOC(ZR_CIRCLE_ROCK_1, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1635, -53);
ROCKLOC(ZR_CIRCLE_ROCK_2, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1578, -76);
ROCKLOC(ZR_CIRCLE_ROCK_3, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1555, -133);
ROCKLOC(ZR_CIRCLE_ROCK_4, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1578, -189);
ROCKLOC(ZR_CIRCLE_ROCK_5, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1635, -213);
ROCKLOC(ZR_CIRCLE_ROCK_6, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1691, -189);
ROCKLOC(ZR_CIRCLE_ROCK_7, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1715, -133);
ROCKLOC(ZR_CIRCLE_ROCK_8, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, -1691, -76);
ROCKLOC(ZR_UPPER_CIRCLE_BOULDER, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_BOULDER, 672, -366);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_1, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 668, -290);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_2, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 724, -313);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_3, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 748, -370);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_4, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 724, -426);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_5, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 668, -450);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_6, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 611, -426);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_7, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 588, -370);
ROCKLOC(ZR_UPPER_CIRCLE_ROCK_8, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 611, -313);
ROCKLOC(ZR_ROCK, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 2044, -786);
ROCKLOC(ZR_UNDERWATER_ROCK_1, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 2425, -446);
ROCKLOC(ZR_UNDERWATER_ROCK_2, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 2425, -524);
ROCKLOC(ZR_UNDERWATER_ROCK_3, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 2503, -571);
ROCKLOC(ZR_UNDERWATER_ROCK_4, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, RHT_ZR_ROCK, 2550, -415);
// 5 rocks by dc
ROCKLOC(DMT_ROCK_1, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -1816, -513);
ROCKLOC(DMT_ROCK_2, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -1831, -614);
ROCKLOC(DMT_ROCK_3, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -1857, -536);
ROCKLOC(DMT_ROCK_4, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -1878, -465);
ROCKLOC(DMT_ROCK_5, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -1787, -550);
// child only
ROCKLOC(DMT_SUMMIT_ROCK, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -327, -4286);
// ring in front of gc
ROCKLOC(DMT_CIRCLE_ROCK_1, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -383, -1126);
ROCKLOC(DMT_CIRCLE_ROCK_2, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -326, -1149);
ROCKLOC(DMT_CIRCLE_ROCK_3, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -303, -1206);
ROCKLOC(DMT_CIRCLE_ROCK_4, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -326, -1262);
ROCKLOC(DMT_CIRCLE_ROCK_5, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -383, -1286);
ROCKLOC(DMT_CIRCLE_ROCK_6, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -439, -1262);
ROCKLOC(DMT_CIRCLE_ROCK_7, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -463, -1206);
ROCKLOC(DMT_CIRCLE_ROCK_8, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_ROCK, -439, -1149);
BOLDLOC(DMT_BOULDER_1, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BOULDER, -625, -55);
BOLDLOC(DMT_BOULDER_2, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BOULDER, -808, -59);
BOLDLOC(DMT_BOULDER_3, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BOULDER, -1060, -51);
BOLDLOC(DMT_COW_BOULDER, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BOULDER, -688, -285);
BOLDLOC(DMT_BRONZE_BOULDER_1, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1175, -803);
BOLDLOC(DMT_BRONZE_BOULDER_2, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1948, 1706);
BOLDLOC(DMT_BRONZE_BOULDER_3, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-2019, 1101);
BOLDLOC(DMT_BRONZE_BOULDER_4, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1658, -88);
BOLDLOC(DMT_BRONZE_BOULDER_5, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1753, 445);
BOLDLOC(DMT_BRONZE_BOULDER_6, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1018, 1283);
BOLDLOC(DMT_BRONZE_BOULDER_7, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1986, 727);
BOLDLOC(DMT_BRONZE_BOULDER_8, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER, -23,
-3196);
BOLDLOC(DMT_BRONZE_BOULDER_9, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER, -343,
-2794);
BOLDLOC(DMT_BRONZE_BOULDER_10, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-154, -2484);
BOLDLOC(DMT_BRONZE_BOULDER_11, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, RHT_DMT_BRONZE_BOULDER,
-1590, -402);
BOLDLOC(GC_LW_BOULDER_1, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, 416, 1049);
BOLDLOC(GC_LW_BOULDER_2, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, 470, 1031);
BOLDLOC(GC_LW_BOULDER_3, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, 367, 1078);
BOLDLOC(GC_ENTRANCE_BOULDER_1, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -670, 470);
BOLDLOC(GC_ENTRANCE_BOULDER_2, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -607, 419);
BOLDLOC(GC_ENTRANCE_BOULDER_3, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -756, 474);
BOLDLOC(GC_MAZE_SILVER_BOULDER_1, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1479, -794);
BOLDLOC(GC_MAZE_SILVER_BOULDER_2, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1478, -855);
BOLDLOC(GC_MAZE_SILVER_BOULDER_3, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1474, -624);
BOLDLOC(GC_MAZE_SILVER_BOULDER_4, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1471, -993);
BOLDLOC(GC_MAZE_SILVER_BOULDER_5, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1467, -1064);
BOLDLOC(GC_MAZE_SILVER_BOULDER_6, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1460, -1121);
BOLDLOC(GC_MAZE_SILVER_BOULDER_7, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1451, -567);
BOLDLOC(GC_MAZE_SILVER_BOULDER_8, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1448, -672);
BOLDLOC(GC_MAZE_SILVER_BOULDER_9, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1440, -1174);
BOLDLOC(GC_MAZE_SILVER_BOULDER_10, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1437, -1342);
BOLDLOC(GC_MAZE_SILVER_BOULDER_11, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1424, -1245);
BOLDLOC(GC_MAZE_SILVER_BOULDER_12, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1424, -609);
BOLDLOC(GC_MAZE_SILVER_BOULDER_13, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1399, -1300);
BOLDLOC(GC_MAZE_SILVER_BOULDER_14, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1394, -654);
BOLDLOC(GC_MAZE_SILVER_BOULDER_15, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1343, -698);
BOLDLOC(GC_MAZE_SILVER_BOULDER_16, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1319, -1086);
BOLDLOC(GC_MAZE_SILVER_BOULDER_17, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1312, -1039);
BOLDLOC(GC_MAZE_SILVER_BOULDER_18, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1306, -837);
BOLDLOC(GC_MAZE_SILVER_BOULDER_19, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1279, -656);
BOLDLOC(GC_MAZE_SILVER_BOULDER_20, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1255, -840);
BOLDLOC(GC_MAZE_SILVER_BOULDER_21, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1246, -1075);
BOLDLOC(GC_MAZE_SILVER_BOULDER_22, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1244, -589);
BOLDLOC(GC_MAZE_SILVER_BOULDER_23, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1210, -852);
BOLDLOC(GC_MAZE_SILVER_BOULDER_24, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1206, -627);
BOLDLOC(GC_MAZE_SILVER_BOULDER_25, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1187, -896);
BOLDLOC(GC_MAZE_SILVER_BOULDER_26, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1157, -954);
BOLDLOC(GC_MAZE_SILVER_BOULDER_27, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1130, -1137);
BOLDLOC(GC_MAZE_SILVER_BOULDER_28, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1120, -1001);
BOLDLOC(GC_MAZE_SILVER_BOULDER_29, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_SILVER_BOULDER, -1179, -1098);
BOLDLOC(GC_MAZE_BOULDER_1, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1342, -628);
BOLDLOC(GC_MAZE_BOULDER_2, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1456, -501);
BOLDLOC(GC_MAZE_BOULDER_3, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1233, -511);
BOLDLOC(GC_MAZE_BOULDER_4, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1137, -657);
BOLDLOC(GC_MAZE_BOULDER_5, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1124, -913);
BOLDLOC(GC_MAZE_BOULDER_6, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1326, -771);
BOLDLOC(GC_MAZE_BOULDER_7, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1469, -737);
BOLDLOC(GC_MAZE_BOULDER_8, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1476, -921);
BOLDLOC(GC_MAZE_BOULDER_9, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1391, -1087);
BOLDLOC(GC_MAZE_BOULDER_10, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BOULDER, -1222, -997);
BOLDLOC(GC_MAZE_BRONZE_BOULDER_1, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BRONZE_BOULDER, -1541, -631);
BOLDLOC(GC_MAZE_BRONZE_BOULDER_2, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BRONZE_BOULDER, -1536, -861);
BOLDLOC(GC_MAZE_BRONZE_BOULDER_3, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BRONZE_BOULDER, -1536, -1102);
BOLDLOC(GC_MAZE_BRONZE_BOULDER_4, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BRONZE_BOULDER, -1534, -752);
BOLDLOC(GC_MAZE_BRONZE_BOULDER_5, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_BRONZE_BOULDER, -1536, -991);
ROCKLOC(GC_MAZE_ROCK, RCAREA_GORON_CITY, SCENE_GORON_CITY, RHT_GC_ROCK, -1197, -1329);
BOLDLOC(COLOSSUS_SILVER_BOULDER, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_SILVER_BOULDER, 61,
-1301);
ROCKLOC(COLOSSUS_ROCK, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, 1537, 667);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_1, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -250, -1272);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_2, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -193, -1295);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_3, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -170, -1352);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_4, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -193, -1408);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_5, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -250, -1432);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_6, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -306, -1408);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_7, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -330, -1352);
ROCKLOC(COLOSSUS_CIRCLE_1_ROCK_8, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -306, -1295);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_1, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -834, -766);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_2, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -777, -789);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_3, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -754, -846);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_4, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -777, -902);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_5, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -834, -926);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_6, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -890, -902);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_7, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -914, -846);
ROCKLOC(COLOSSUS_CIRCLE_2_ROCK_8, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, RHT_COLOSSUS_ROCK, -890, -789);
ROCKLOC(HC_STORMS_GROTTO_ROCK_1, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1811, 813);
ROCKLOC(HC_STORMS_GROTTO_ROCK_2, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1867, 789);
ROCKLOC(HC_STORMS_GROTTO_ROCK_3, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1891, 733);
ROCKLOC(HC_STORMS_GROTTO_ROCK_4, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1867, 676);
ROCKLOC(HC_STORMS_GROTTO_ROCK_5, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1811, 653);
ROCKLOC(HC_STORMS_GROTTO_ROCK_6, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1754, 676);
ROCKLOC(HC_STORMS_GROTTO_ROCK_7, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1731, 733);
ROCKLOC(HC_STORMS_GROTTO_ROCK_8, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, RHT_HC_STORMS_GROTTO_ROCK, 1754, 789);
locationTable[RC_BOTW_BOULDER_1] =
Location::Boulder(RC_BOTW_BOULDER_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL,
TWO_ACTOR_PARAMS(-684, -734), "BOTW Boulder 1", RHT_BOTW_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_BOULDER_1));
locationTable[RC_BOTW_BOULDER_2] =
Location::Boulder(RC_BOTW_BOULDER_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL,
TWO_ACTOR_PARAMS(-632, -805), "BOTW Boulder 2", RHT_BOTW_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_BOULDER_2));
locationTable[RC_BOTW_BOULDER_3] =
Location::Boulder(RC_BOTW_BOULDER_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL,
TWO_ACTOR_PARAMS(333, -681), "BOTW Boulder 3", RHT_BOTW_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_BOULDER_3));
locationTable[RC_BOTW_BOULDER_4] =
Location::Boulder(RC_BOTW_BOULDER_4, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL,
TWO_ACTOR_PARAMS(409, -637), "BOTW Boulder 4", RHT_BOTW_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_BOULDER_4));
locationTable[RC_BOTW_BOULDER_5] =
Location::Boulder(RC_BOTW_BOULDER_5, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL,
TWO_ACTOR_PARAMS(334, -8), "BOTW Boulder 5", RHT_BOTW_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_BOULDER_5));
locationTable[RC_BOTW_BOULDER_6] =
Location::Boulder(RC_BOTW_BOULDER_6, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL,
TWO_ACTOR_PARAMS(312, 64), "BOTW Boulder 6", RHT_BOTW_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_BOULDER_6));
#define MQBOLD(id, area, hint, x, z) \
(locationTable[RC_##id] = \
Location::Boulder(RC_##id, RCQUEST_MQ, RCAREA_##area, SCENE_##area, TWO_ACTOR_PARAMS(x, z), #id, hint, \
SpoilerCollectionCheck::RandomizerInf(RAND_INF_##id)))
MQBOLD(DEKU_TREE_MQ_BOULDER_1, DEKU_TREE, RHT_DEKU_BOULDER, -1237, 1558);
MQBOLD(DEKU_TREE_MQ_BOULDER_2, DEKU_TREE, RHT_DEKU_BOULDER, -1183, 1522);
MQBOLD(DEKU_TREE_MQ_BOULDER_3, DEKU_TREE, RHT_DEKU_BOULDER, -1129, 1469);
MQBOLD(DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, -435, -1720);
MQBOLD(DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 432, -1719);
MQBOLD(DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 807, -874);
MQBOLD(DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 802, -972);
MQBOLD(DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 783, -923);
MQBOLD(DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 2464, -402);
MQBOLD(DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 2942, -495);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4219, -1651);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4178, -1602);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4162, -1581);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4133, -1561);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4091, -1510);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4067, -1487);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 4028, -1472);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 3965, -1473);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 3898, -1467);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 3832, -1437);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 3799, -1383);
MQBOLD(DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12, DODONGOS_CAVERN, RHT_DODONGOS_BOULDER, 3760, -1318);
locationTable[RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER] =
Location::Boulder(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(-1, -296), "RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER));
locationTable[RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(350, -3533), "RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(-192, -3211), "RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(245, -2792), "RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(220, -2790), "RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(274, -2790), "RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3));
locationTable[RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(31, -5177), "RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(-37, -5173), "RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(-885, -5907), "RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER));
locationTable[RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER] = Location::Boulder(
RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU,
TWO_ACTOR_PARAMS(-411, -5682), "RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER", RHT_JABU_BOULDER,
SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER));
// skip spirit temple boulder, so adult can clear without collecting check for child to pass
MQBOLD(SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1, SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOULDER, -160, 270);
MQBOLD(SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2, SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOULDER, 160, 270);
MQBOLD(SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3, SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOULDER, 350, 220);
MQBOLD(SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER, SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOULDER, 0, -60);
MQBOLD(SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER, SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOULDER, 1070, -290);
MQBOLD(BOTW_MQ_BOULDER_1, BOTTOM_OF_THE_WELL, RHT_BOTW_BOULDER, -370, -160);
MQBOLD(BOTW_MQ_BOULDER_2, BOTTOM_OF_THE_WELL, RHT_BOTW_BOULDER, -521, -353);
MQBOLD(BOTW_MQ_BOULDER_3, BOTTOM_OF_THE_WELL, RHT_BOTW_BOULDER, -541, -404);
}
static RegisterShipInitFunc initFunc2(Rando::StaticData::RegisterRockLocations);

View file

@ -0,0 +1,15 @@
#ifndef SHUFFLEROCKS_H
#define SHUFFLEROCKS_H
#include <z64.h>
#include <soh/OTRGlobals.h>
#ifdef __cplusplus
extern "C" {
#endif
void EnIshi_RandomizerInit(void* actorRef);
#ifdef __cplusplus
};
#endif
#endif // SHUFFLEROCKS_H

View file

@ -46,6 +46,8 @@ Context::Context() {
&mOptions[RSK_SHUFFLE_COWS],
&mOptions[RSK_SHUFFLE_POTS],
&mOptions[RSK_SHUFFLE_CRATES],
&mOptions[RSK_SHUFFLE_ROCKS],
&mOptions[RSK_SHUFFLE_BOULDERS],
&mOptions[RSK_SHUFFLE_FREESTANDING],
&mOptions[RSK_SHUFFLE_MERCHANTS],
&mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES],
@ -189,6 +191,8 @@ void Context::GenerateLocationPool() {
(location.GetRCType() == RCTYPE_NLCRATE && (mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OFF) ||
!mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC))) ||
(location.GetRCType() == RCTYPE_SMALL_CRATE && mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OFF)) ||
(location.GetRCType() == RCTYPE_ROCK && !mOptions[RSK_SHUFFLE_ROCKS]) ||
(location.GetRCType() == RCTYPE_BOULDER && mOptions[RSK_SHUFFLE_BOULDERS].Is(RO_SHUFFLE_BOULDERS_OFF)) ||
(location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) ||
(location.GetRCType() == RCTYPE_FREESTANDING &&
mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) ||
@ -208,7 +212,9 @@ void Context::GenerateLocationPool() {
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS) &&
mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC)) ||
(location.GetRCType() == RCTYPE_SMALL_CRATE &&
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS))) {
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS)) &&
(location.GetRCType() == RCTYPE_BOULDER &&
mOptions[RSK_SHUFFLE_BOULDERS].Is(RO_SHUFFLE_BOULDERS_DUNGEONS))) {
continue;
}
// If we've gotten past all the conditions where an overworld location should not be
@ -229,7 +235,9 @@ void Context::GenerateLocationPool() {
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD) &&
mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC)) ||
(location.GetRCType() == RCTYPE_SMALL_CRATE &&
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD))) {
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD)) &&
(location.GetRCType() == RCTYPE_BOULDER &&
mOptions[RSK_SHUFFLE_BOULDERS].Is(RO_SHUFFLE_BOULDERS_OVERWORLD))) {
continue;
}
// also add to that dungeon's location list.

View file

@ -566,6 +566,23 @@ Rando::Location Rando::Location::SmallCrate(RandomizerCheck rc, RandomizerCheckQ
false, collectionCheck };
}
Rando::Location Rando::Location::Rock(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_,
RandomizerHintTextKey hintKey, RandomizerGet vanillaItem,
SpoilerCollectionCheck collectionCheck) {
return { rc, quest_, RCTYPE_ROCK, area_, ACTOR_EN_ISHI,
scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem,
false, collectionCheck };
}
Rando::Location Rando::Location::Boulder(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_,
RandomizerHintTextKey hintKey, SpoilerCollectionCheck collectionCheck) {
return { rc, quest_, RCTYPE_BOULDER, area_, ACTOR_EN_ISHI,
scene_, actorParams_, std::move(shortName_), hintKey, RG_BOMBS_5,
false, collectionCheck };
}
Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_) {
return { rc, quest_, RCTYPE_GOSSIP_STONE, area_, ACTOR_EN_GS,

View file

@ -67,15 +67,7 @@ class Location {
actorParams(actorParams_), shortName(std::move(shortName_)), spoilerName(std::move(spoilerName_)),
hintKey(hintKey_), vanillaItem(vanillaItem_), isVanillaCompletion(isVanillaCompletion_),
collectionCheck(collectionCheck_), vanillaPrice(vanillaPrice_) {
if (spoilerName.length() < 23) {
excludedOption = LocationOption(rc, spoilerName);
} else {
const size_t lastSpace = spoilerName.rfind(' ', 23);
std::string settingText = spoilerName;
settingText.replace(lastSpace, 1, "\n ");
excludedOption = LocationOption(rc, spoilerName);
}
}
Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_,
@ -87,15 +79,7 @@ class Location {
actorParams(actorParams_), shortName(shortName_), spoilerName(SpoilerNameFromShortName(shortName_, area_)),
hintKey(hintKey_), vanillaItem(vanillaItem_), isVanillaCompletion(isVanillaCompletion_),
collectionCheck(collectionCheck_), vanillaPrice(vanillaPrice_) {
if (spoilerName.length() < 23) {
excludedOption = LocationOption(rc, spoilerName);
} else {
const size_t lastSpace = spoilerName.rfind(' ', 23);
std::string settingText = spoilerName;
settingText.replace(lastSpace, 1, "\n ");
excludedOption = LocationOption(rc, spoilerName);
}
}
static std::string SpoilerNameFromShortName(std::string shortName, RandomizerCheckArea area) {
@ -246,6 +230,14 @@ class Location {
RandomizerHintTextKey hintKey, RandomizerGet vanillaItem,
SpoilerCollectionCheck collectionCheck);
static Location Rock(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_,
int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey,
RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck);
static Location Boulder(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_,
int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey,
SpoilerCollectionCheck collectionCheck);
static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_);

View file

@ -157,6 +157,12 @@ void RegionTable_Init_BottomOfTheWell() {
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, logic->CanCutShrubs() && logic->BlastOrSmash()),
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, logic->CanCutShrubs() && logic->BlastOrSmash()),
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, logic->CanCutShrubs() && logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_3, logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE) || (logic->CanUse(RG_STICKS) && ctx->GetTrickOption(RT_BOTW_BASEMENT))),
LOCATION(RC_BOTW_BOULDER_4, logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_5, logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_6, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
@ -169,6 +175,12 @@ void RegionTable_Init_BottomOfTheWell() {
//Locations
//Assumes RR_BOTTOM_OF_THE_WELL_BASEMENT access
LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_BOTW_BOULDER_1, logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_BOTW_BOULDER_2, logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_BOTW_BOULDER_3, logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_BOTW_BOULDER_4, logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_BOTW_BOULDER_5, logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_BOTW_BOULDER_6, logic->HasItem(RG_GORONS_BRACELET)),
}, {
//Exits
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return logic->CanDetonateUprightBombFlower();}),
@ -204,6 +216,9 @@ void RegionTable_Init_BottomOfTheWell() {
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets()),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, logic->HasExplosives()),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, logic->HasExplosives()),
LOCATION(RC_BOTW_MQ_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_3, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild;}),

View file

@ -286,6 +286,9 @@ void RegionTable_Init_DekuTree() {
//Locations
LOCATION(RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
LOCATION(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, true),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_1, true),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_2, true),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_3, true),
}, {
//Exits
Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->BlastOrSmash();}),

View file

@ -266,6 +266,8 @@ void RegionTable_Init_DodongosCavern() {
LOCATION(RC_DODONGOS_CAVERN_MQ_MAP_CHEST, logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, logic->CanStunDeku()),
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1, logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET)),
LOCATION(RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2, logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET)),
}, {
//Exits
Entrance(RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
@ -292,7 +294,12 @@ void RegionTable_Init_DodongosCavern() {
areaTable[RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE] = Region("Dodongos Cavern MQ Mouth Side Bridge", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {
//Events
EventAccess(&logic->ClearMQDCUpperLobbyRocks, []{return logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE);}),
}, {}, {
}, {
//Locations
LOCATION(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1, logic->ClearMQDCUpperLobbyRocks),
LOCATION(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2, logic->ClearMQDCUpperLobbyRocks),
LOCATION(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3, logic->ClearMQDCUpperLobbyRocks),
}, {
//Exits
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->ClearMQDCUpperLobbyRocks;}),
@ -419,6 +426,18 @@ void RegionTable_Init_DodongosCavern() {
LOCATION(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, logic->CanBreakPots()),
LOCATION(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, logic->CanBreakPots()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, logic->BlastOrSmash()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5, logic->BlastOrSmash()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6, logic->BlastOrSmash()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11, logic->BlastOrSmash() && logic->TakeDamage()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12, logic->BlastOrSmash() && logic->TakeDamage()),
}, {
//Exits
//Falling down gets you stuck with nothing there, not a useful exit for logic
@ -460,6 +479,8 @@ void RegionTable_Init_DodongosCavern() {
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, logic->CanBreakPots()),
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, logic->CanBreakPots()),
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, logic->CanBreakPots()),
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1, logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET) || logic->CanUse(RG_DINS_FIRE)),
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2, logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET)),
}, {
//Exits
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),

View file

@ -177,6 +177,7 @@ void RegionTable_Init_JabuJabusBelly() {
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}),
@ -229,6 +230,11 @@ void RegionTable_Init_JabuJabusBelly() {
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1, logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2, logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3, logic->HasExplosives()),
}, {
//Exits
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}),
@ -267,6 +273,8 @@ void RegionTable_Init_JabuJabusBelly() {
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}),
@ -280,6 +288,8 @@ void RegionTable_Init_JabuJabusBelly() {
}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, Here(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return logic->HasExplosives();}) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER, logic->HasExplosives()),
}, {
//Exits
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),

View file

@ -162,6 +162,10 @@ void RegionTable_Init_SpiritTemple() {
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3, logic->BlastOrSmash()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER, logic->CanUse(RG_BOMBCHU_5)),
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
@ -179,6 +183,7 @@ void RegionTable_Init_SpiritTemple() {
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, logic->CanHitEyeTargets()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, logic->CanHitEyeTargets()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, logic->MQSpiritTimeTravelChest),
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);});}),
@ -394,6 +399,7 @@ void RegionTable_Init_SpiritTemple() {
//Locations
LOCATION(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->CanUse(RG_MEGATON_HAMMER);}),

View file

@ -27,6 +27,10 @@ void RegionTable_Init_CastleGrounds() {
LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_HC_ROCK_1, true),
LOCATION(RC_HC_ROCK_2, true),
LOCATION(RC_HC_ROCK_3, true),
LOCATION(RC_HC_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_HC_MALON_GOSSIP_STONE, true),
LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE, true),
LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()),
@ -80,6 +84,14 @@ void RegionTable_Init_CastleGrounds() {
LOCATION(RC_HC_STORMS_GROTTO_POT_2, logic->CanBreakPots()),
LOCATION(RC_HC_STORMS_GROTTO_POT_3, logic->CanBreakPots()),
LOCATION(RC_HC_STORMS_GROTTO_POT_4, logic->CanBreakPots()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_1, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_2, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_3, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_4, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_5, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_6, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_7, true),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_8, true),
}, {
//Exits
Entrance(RR_HC_STORMS_GROTTO, []{return true;}),
@ -91,6 +103,13 @@ void RegionTable_Init_CastleGrounds() {
}, {
//Locations
LOCATION(RC_OGC_GS, logic->CanJumpslashExceptHammer() || logic->CanUseProjectile() || (logic->CanShield() && logic->CanUse(RG_MEGATON_HAMMER)) || logic->CanUse(RG_DINS_FIRE)),
LOCATION(RC_OGC_BRONZE_BOULDER_1, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_OGC_BRONZE_BOULDER_2, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_OGC_BRONZE_BOULDER_3, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_OGC_SILVER_BOULDER_1, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_OGC_SILVER_BOULDER_2, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_OGC_SILVER_BOULDER_3, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_OGC_SILVER_BOULDER_4, logic->CanUse(RG_SILVER_GAUNTLETS)),
}, {
//Exits
Entrance(RR_CASTLE_GROUNDS, []{return logic->AtNight;}),

View file

@ -5,7 +5,21 @@ using namespace Rando;
void RegionTable_Init_DeathMountainCrater() {
// clang-format off
areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", "Death Mountain Crater", {RA_DEATH_MOUNTAIN_CRATER}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", "Death Mountain Crater", {RA_DEATH_MOUNTAIN_CRATER}, NO_DAY_NIGHT_CYCLE, {}, {
LOCATION(RC_DMC_CIRCLE_ROCK_1, true),
LOCATION(RC_DMC_CIRCLE_ROCK_2, true),
LOCATION(RC_DMC_CIRCLE_ROCK_3, true),
LOCATION(RC_DMC_CIRCLE_ROCK_4, true),
LOCATION(RC_DMC_CIRCLE_ROCK_5, true),
LOCATION(RC_DMC_CIRCLE_ROCK_6, true),
LOCATION(RC_DMC_CIRCLE_ROCK_7, true),
LOCATION(RC_DMC_CIRCLE_ROCK_8, true),
LOCATION(RC_DMC_GOSSIP_ROCK_1, logic->IsChild),
LOCATION(RC_DMC_GOSSIP_ROCK_2, logic->IsChild),
LOCATION(RC_DMC_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_DMC_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_DMC_BOULDER_3, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_DMC_UPPER_LOCAL, []{return logic->FireTimer() >= 48;}),
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
@ -48,6 +62,10 @@ void RegionTable_Init_DeathMountainCrater() {
LOCATION(RC_DMC_NEAR_GC_POT_2, logic->CanBreakPots()),
LOCATION(RC_DMC_NEAR_GC_POT_3, logic->CanBreakPots()),
LOCATION(RC_DMC_NEAR_GC_POT_4, logic->CanBreakPots()),
LOCATION(RC_DMC_BRONZE_BOULDER_1, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMC_BRONZE_BOULDER_2, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMC_BRONZE_BOULDER_3, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMC_BRONZE_BOULDER_4, logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//Exits
Entrance(RR_DMC_LOWER_LOCAL, []{return logic->FireTimer() >= 48;}),
@ -90,6 +108,11 @@ void RegionTable_Init_DeathMountainCrater() {
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
LOCATION(RC_DMC_ROCK_BY_FIRE_TEMPLE_1, logic->IsAdult),
LOCATION(RC_DMC_ROCK_BY_FIRE_TEMPLE_2, logic->IsAdult),
LOCATION(RC_DMC_ROCK_BY_FIRE_TEMPLE_3, logic->IsAdult),
LOCATION(RC_DMC_ROCK_BY_FIRE_TEMPLE_4, logic->IsAdult),
LOCATION(RC_DMC_ROCK_BY_FIRE_TEMPLE_5, logic->IsAdult),
}, {
//Exits
Entrance(RR_DMC_CENTRAL_NEARBY, []{return true;}),

View file

@ -21,6 +21,33 @@ void RegionTable_Init_DeathMountainTrail() {
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
LOCATION(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
LOCATION(RC_DMT_ROCK_1, true),
LOCATION(RC_DMT_ROCK_2, true),
LOCATION(RC_DMT_ROCK_3, true),
LOCATION(RC_DMT_ROCK_4, true),
LOCATION(RC_DMT_ROCK_5, true),
LOCATION(RC_DMT_CIRCLE_ROCK_1, true),
LOCATION(RC_DMT_CIRCLE_ROCK_2, true),
LOCATION(RC_DMT_CIRCLE_ROCK_3, true),
LOCATION(RC_DMT_CIRCLE_ROCK_4, true),
LOCATION(RC_DMT_CIRCLE_ROCK_5, true),
LOCATION(RC_DMT_CIRCLE_ROCK_6, true),
LOCATION(RC_DMT_CIRCLE_ROCK_7, true),
LOCATION(RC_DMT_CIRCLE_ROCK_8, true),
LOCATION(RC_DMT_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_DMT_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_DMT_BOULDER_3, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_BRONZE_BOULDER_1, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_2, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_3, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_4, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_5, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_6, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_7, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_8, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_9, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_10, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_BRONZE_BOULDER_11, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//Exits
Entrance(RR_KAK_BEHIND_GATE, []{return true;}),
@ -42,6 +69,8 @@ void RegionTable_Init_DeathMountainTrail() {
LOCATION(RC_DMT_GS_FALLING_ROCKS_PATH, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || ctx->GetTrickOption(RT_DMT_UPPER_GS)) && logic->CanGetNightTimeGS()),
LOCATION(RC_DMT_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
LOCATION(RC_DMT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_DMT_COW_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_DMT_SUMMIT_ROCK, logic->IsChild),
LOCATION(RC_DMT_GOSSIP_STONE, true),
}, {
//Exits

View file

@ -20,6 +20,24 @@ void RegionTable_Init_DesertColossus() {
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_COLOSSUS_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_COLOSSUS_ROCK, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_1, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_2, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_3, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_4, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_5, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_6, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_7, true),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_8, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_1, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_2, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_3, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_4, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_5, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_6, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_7, true),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_8, true),
LOCATION(RC_COLOSSUS_GOSSIP_STONE, true),
}, {
//Exits

View file

@ -11,6 +11,16 @@ void RegionTable_Init_GerudoValley() {
}, {
//Locations
LOCATION(RC_GV_GS_SMALL_BRIDGE, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_GV_ROCK_1, true),
LOCATION(RC_GV_ROCK_2, true),
LOCATION(RC_GV_ROCK_3, true),
LOCATION(RC_GV_UNDERWATER_ROCK_1, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_GV_UNDERWATER_ROCK_2, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_GV_UNDERWATER_ROCK_3, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_GV_BOULDER_1, logic->IsAdult && logic->BlastOrSmash()),
LOCATION(RC_GV_BOULDER_2, logic->IsAdult && logic->BlastOrSmash()),
LOCATION(RC_GV_BRONZE_BOULDER_1, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_BRONZE_BOULDER_2, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//Exits
Entrance(RR_HYRULE_FIELD, []{return true;}),
@ -48,7 +58,10 @@ void RegionTable_Init_GerudoValley() {
Entrance(RR_LAKE_HYLIA, []{return true;}),
});
areaTable[RR_GV_GROTTO_LEDGE] = Region("GV Grotto Ledge", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_GV_GROTTO_LEDGE] = Region("GV Grotto Ledge", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_GV_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
}, {
//Exits
Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),
Entrance(RR_GV_LOWER_STREAM, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
@ -76,6 +89,21 @@ void RegionTable_Init_GerudoValley() {
LOCATION(RC_GV_CRATE_BRIDGE_2, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_GV_CRATE_BRIDGE_3, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_GV_CHEST, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)),
LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_GV_ROCK_ACROSS_BRIDGE_1, logic->IsAdult),
LOCATION(RC_GV_ROCK_ACROSS_BRIDGE_2, logic->IsAdult),
LOCATION(RC_GV_ROCK_ACROSS_BRIDGE_3, logic->IsAdult),
LOCATION(RC_GV_ROCK_ACROSS_BRIDGE_4, logic->IsAdult),
LOCATION(RC_GV_BOULDER_ACROSS_BRIDGE, logic->IsAdult && logic->BlastOrSmash()),
LOCATION(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//Exits
Entrance(RR_GERUDO_FORTRESS, []{return true;}),

View file

@ -34,7 +34,57 @@ void RegionTable_Init_GoronCity() {
LOCATION(RC_GC_UPPER_STAIRCASE_POT_2, logic->CanBreakPots()),
LOCATION(RC_GC_UPPER_STAIRCASE_POT_3, logic->CanBreakPots()),
LOCATION(RC_GC_MAZE_CRATE, logic->BlastOrSmash() || (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanBreakCrates())),
LOCATION(RC_GC_ENTRANCE_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_GC_ENTRANCE_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_GC_ENTRANCE_BOULDER_3, logic->BlastOrSmash()),
LOCATION(RC_GC_LW_BOULDER_1, logic->GCWoodsWarpOpen),
LOCATION(RC_GC_LW_BOULDER_2, logic->GCWoodsWarpOpen),
LOCATION(RC_GC_LW_BOULDER_3, logic->GCWoodsWarpOpen),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_1, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_2, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_3, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_4, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_5, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_6, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_7, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_8, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_9, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_10, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_11, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_12, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_13, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_14, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_15, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_16, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_17, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_18, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_19, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_20, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_21, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_22, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_23, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_24, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_25, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_26, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_27, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_28, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_SILVER_BOULDER_29, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_GC_MAZE_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_3, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_4, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_5, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_6, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_7, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_8, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_9, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BOULDER_10, logic->BlastOrSmash()),
LOCATION(RC_GC_MAZE_BRONZE_BOULDER_1, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GC_MAZE_BRONZE_BOULDER_2, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GC_MAZE_BRONZE_BOULDER_3, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GC_MAZE_BRONZE_BOULDER_4, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GC_MAZE_BRONZE_BOULDER_5, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_GC_MAZE_ROCK, logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)),
}, {
//Exits
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),

View file

@ -32,6 +32,7 @@ void RegionTable_Init_Graveyard() {
LOCATION(RC_GY_GRASS_11, logic->CanCutShrubs()),
LOCATION(RC_GY_GRASS_12, logic->CanCutShrubs()),
LOCATION(RC_GRAVEYARD_CRATE, ((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()),
LOCATION(RC_GY_ROCK, true),
}, {
//Exits
Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->IsAdult || logic->AtNight;}),

View file

@ -61,6 +61,22 @@ void RegionTable_Init_HyruleField() {
LOCATION(RC_HF_NEAR_KF_GRASS_10, logic->CanCutShrubs()),
LOCATION(RC_HF_NEAR_KF_GRASS_11, logic->CanCutShrubs()),
LOCATION(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()),
LOCATION(RC_HF_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_HF_ROCK_1, true),
LOCATION(RC_HF_ROCK_2, true),
LOCATION(RC_HF_ROCK_3, true),
LOCATION(RC_HF_ROCK_4, true),
LOCATION(RC_HF_ROCK_5, true),
LOCATION(RC_HF_ROCK_6, true),
LOCATION(RC_HF_ROCK_7, true),
LOCATION(RC_HF_ROCK_8, true),
LOCATION(RC_HF_BOULDER_NORTH, logic->BlastOrSmash()),
LOCATION(RC_HF_BOULDER_BY_MARKET, logic->BlastOrSmash()),
LOCATION(RC_HF_BOULDER_SOUTH, logic->BlastOrSmash()),
LOCATION(RC_HF_BRONZE_BOULDER_1, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_HF_BRONZE_BOULDER_2, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_HF_BRONZE_BOULDER_3, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_HF_BRONZE_BOULDER_4, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//Exits
Entrance(RR_LW_BRIDGE, []{return true;}),

View file

@ -57,6 +57,9 @@ void RegionTable_Init_Kakariko() {
LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_KAK_SILVER_BOULDER, logic->IsAdult && logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_KAK_ROCK_1, true),
LOCATION(RC_KAK_ROCK_2, true),
}, {
//Exits
Entrance(RR_HYRULE_FIELD, []{return true;}),

View file

@ -75,6 +75,18 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_ADULT_GRASS_18, logic->IsAdult && logic->CanCutShrubs()),
LOCATION(RC_KF_ADULT_GRASS_19, logic->IsAdult && logic->CanCutShrubs()),
LOCATION(RC_KF_ADULT_GRASS_20, logic->IsAdult && logic->CanCutShrubs()),
LOCATION(RC_KF_CIRCLE_ROCK_1, true),
LOCATION(RC_KF_CIRCLE_ROCK_2, true),
LOCATION(RC_KF_CIRCLE_ROCK_3, true),
LOCATION(RC_KF_CIRCLE_ROCK_4, true),
LOCATION(RC_KF_CIRCLE_ROCK_5, true),
LOCATION(RC_KF_CIRCLE_ROCK_6, true),
LOCATION(RC_KF_CIRCLE_ROCK_7, true),
LOCATION(RC_KF_CIRCLE_ROCK_8, true),
LOCATION(RC_KF_ROCK_BY_SARIAS_HOUSE, logic->IsChild),
LOCATION(RC_KF_ROCK_BEHIND_SARIAS_HOUSE, logic->IsChild),
LOCATION(RC_KF_ROCK_BY_MIDOS_HOUSE, logic->IsChild),
LOCATION(RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE, logic->IsChild),
}, {
//Exits
Entrance(RR_KF_LINKS_HOUSE, []{return true;}),

View file

@ -92,7 +92,10 @@ void RegionTable_Init_LakeHylia() {
Entrance(RR_LH_GROTTO, []{return true;}),
});
areaTable[RR_LH_FISHING_ISLAND] = Region("LH Fishing Island", "Lake Hylia", {RA_LAKE_HYLIA}, DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_LH_FISHING_ISLAND] = Region("LH Fishing Island", "Lake Hylia", {RA_LAKE_HYLIA}, DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_LA_ROCK, true),
}, {
//Exits
Entrance(RR_LAKE_HYLIA, []{return logic->HasItem(RG_BRONZE_SCALE);}),
Entrance(RR_LH_FISHING_POND, []{return logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY);}),

View file

@ -48,6 +48,7 @@ void RegionTable_Init_LostWoods() {
LOCATION(RC_LW_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
LOCATION(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_LW_BOULDER_BY_GORON_CITY, logic->BlastOrSmash()),
LOCATION(RC_LW_GOSSIP_STONE, true),
LOCATION(RC_LW_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_LW_GRASS_2, logic->CanCutShrubs()),
@ -81,6 +82,8 @@ void RegionTable_Init_LostWoods() {
LOCATION(RC_LW_GRASS_7, logic->CanCutShrubs()),
LOCATION(RC_LW_GRASS_8, logic->CanCutShrubs()),
LOCATION(RC_LW_GRASS_9, logic->CanCutShrubs()),
LOCATION(RC_LW_BOULDER_BY_SACRED_FOREST_MEADOW, logic->BlastOrSmash()),
LOCATION(RC_LW_RUPEE_BOULDER, logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_LW_FOREST_EXIT, []{return true;}),

View file

@ -35,6 +35,14 @@ void RegionTable_Init_ZorasDomain() {
LOCATION(RC_ZD_NEAR_SHOP_POT_3, logic->CanBreakPots()),
LOCATION(RC_ZD_NEAR_SHOP_POT_4, logic->CanBreakPots()),
LOCATION(RC_ZD_NEAR_SHOP_POT_5, logic->CanBreakPots()),
LOCATION(RC_ZD_CIRCLE_ROCK_1, true),
LOCATION(RC_ZD_CIRCLE_ROCK_2, true),
LOCATION(RC_ZD_CIRCLE_ROCK_3, true),
LOCATION(RC_ZD_CIRCLE_ROCK_4, true),
LOCATION(RC_ZD_CIRCLE_ROCK_5, true),
LOCATION(RC_ZD_CIRCLE_ROCK_6, true),
LOCATION(RC_ZD_CIRCLE_ROCK_7, true),
LOCATION(RC_ZD_CIRCLE_ROCK_8, true),
}, {
//Exits
Entrance(RR_ZR_BEHIND_WATERFALL, []{return true;}),

View file

@ -23,6 +23,9 @@ void RegionTable_Init_ZorasFountain() {
LOCATION(RC_ZF_NEAR_JABU_POT_2, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_ZF_NEAR_JABU_POT_3, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_ZF_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_ZF_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_ZF_UNDERGROUND_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_ZD_BEHIND_KING_ZORA, []{return true;}),

View file

@ -20,6 +20,10 @@ void RegionTable_Init_ZoraRiver() {
LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()),
LOCATION(RC_ZR_BOULDER_1, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_ZR_BOULDER_2, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_ZR_BOULDER_3, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_ZR_BOULDER_4, logic->IsChild && logic->BlastOrSmash()),
}, {
//Exits
Entrance(RR_ZORAS_RIVER, []{return logic->IsAdult || logic->BlastOrSmash();}),
@ -58,6 +62,28 @@ void RegionTable_Init_ZoraRiver() {
LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_ZR_CIRCLE_ROCK_1, true),
LOCATION(RC_ZR_CIRCLE_ROCK_2, true),
LOCATION(RC_ZR_CIRCLE_ROCK_3, true),
LOCATION(RC_ZR_CIRCLE_ROCK_4, true),
LOCATION(RC_ZR_CIRCLE_ROCK_5, true),
LOCATION(RC_ZR_CIRCLE_ROCK_6, true),
LOCATION(RC_ZR_CIRCLE_ROCK_7, true),
LOCATION(RC_ZR_CIRCLE_ROCK_8, true),
LOCATION(RC_ZR_UPPER_CIRCLE_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_1, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_2, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_3, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_4, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_5, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_6, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_7, true),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_8, true),
LOCATION(RC_ZR_ROCK, true),
LOCATION(RC_ZR_UNDERWATER_ROCK_1, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_ZR_UNDERWATER_ROCK_2, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_ZR_UNDERWATER_ROCK_3, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_ZR_UNDERWATER_ROCK_4, logic->IsAdult || logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true),
LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true),
LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanCutShrubs()),

View file

@ -484,6 +484,8 @@ void Settings::CreateOptionDescriptions() {
"Overworld - Only shuffle grass/bushes that are outside of dungeons.\n"
"\n"
"All Grass/Bushes - Shuffle all grass/bushes.";
mOptionDescriptions[RSK_SHUFFLE_ROCKS] = "Shuffle rock locations.";
mOptionDescriptions[RSK_SHUFFLE_BOULDERS] = "Shuffle boulder locations.";
mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS] =
"Shuffles the location of Spiritual Stones and medallions.\n"
"Vanilla - Spiritual Stones and medallions will be given from their respective boss.\n"

View file

@ -3123,6 +3123,286 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE,
RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE,
},
{ RC_KF_CIRCLE_ROCK_1, RAND_INF_KF_CIRCLE_ROCK_1 },
{ RC_KF_CIRCLE_ROCK_2, RAND_INF_KF_CIRCLE_ROCK_2 },
{ RC_KF_CIRCLE_ROCK_3, RAND_INF_KF_CIRCLE_ROCK_3 },
{ RC_KF_CIRCLE_ROCK_4, RAND_INF_KF_CIRCLE_ROCK_4 },
{ RC_KF_CIRCLE_ROCK_5, RAND_INF_KF_CIRCLE_ROCK_5 },
{ RC_KF_CIRCLE_ROCK_6, RAND_INF_KF_CIRCLE_ROCK_6 },
{ RC_KF_CIRCLE_ROCK_7, RAND_INF_KF_CIRCLE_ROCK_7 },
{ RC_KF_CIRCLE_ROCK_8, RAND_INF_KF_CIRCLE_ROCK_8 },
{ RC_KF_ROCK_BY_SARIAS_HOUSE, RAND_INF_KF_ROCK_BY_SARIAS_HOUSE },
{ RC_KF_ROCK_BEHIND_SARIAS_HOUSE, RAND_INF_KF_ROCK_BEHIND_SARIAS_HOUSE },
{ RC_KF_ROCK_BY_MIDOS_HOUSE, RAND_INF_KF_ROCK_BY_MIDOS_HOUSE },
{ RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE, RAND_INF_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE },
{ RC_LW_BOULDER_BY_GORON_CITY, RAND_INF_LW_BOULDER_BY_GORON_CITY },
{ RC_LW_BOULDER_BY_SACRED_FOREST_MEADOW, RAND_INF_LW_BOULDER_BY_SACRED_FOREST_MEADOW },
{ RC_LW_RUPEE_BOULDER, RAND_INF_LW_RUPEE_BOULDER },
{ RC_HC_ROCK_1, RAND_INF_HC_ROCK_1 },
{ RC_HC_ROCK_2, RAND_INF_HC_ROCK_2 },
{ RC_HC_ROCK_3, RAND_INF_HC_ROCK_3 },
{ RC_HC_BOULDER, RAND_INF_HC_BOULDER },
{ RC_OGC_BRONZE_BOULDER_1, RAND_INF_OGC_BRONZE_BOULDER_1 },
{ RC_OGC_BRONZE_BOULDER_2, RAND_INF_OGC_BRONZE_BOULDER_2 },
{ RC_OGC_BRONZE_BOULDER_3, RAND_INF_OGC_BRONZE_BOULDER_3 },
{ RC_OGC_SILVER_BOULDER_1, RAND_INF_OGC_SILVER_BOULDER_1 },
{ RC_OGC_SILVER_BOULDER_2, RAND_INF_OGC_SILVER_BOULDER_2 },
{ RC_OGC_SILVER_BOULDER_3, RAND_INF_OGC_SILVER_BOULDER_3 },
{ RC_OGC_SILVER_BOULDER_4, RAND_INF_OGC_SILVER_BOULDER_4 },
{ RC_DMC_CIRCLE_ROCK_1, RAND_INF_DMC_CIRCLE_ROCK_1 },
{ RC_DMC_CIRCLE_ROCK_2, RAND_INF_DMC_CIRCLE_ROCK_2 },
{ RC_DMC_CIRCLE_ROCK_3, RAND_INF_DMC_CIRCLE_ROCK_3 },
{ RC_DMC_CIRCLE_ROCK_4, RAND_INF_DMC_CIRCLE_ROCK_4 },
{ RC_DMC_CIRCLE_ROCK_5, RAND_INF_DMC_CIRCLE_ROCK_5 },
{ RC_DMC_CIRCLE_ROCK_6, RAND_INF_DMC_CIRCLE_ROCK_6 },
{ RC_DMC_CIRCLE_ROCK_7, RAND_INF_DMC_CIRCLE_ROCK_7 },
{ RC_DMC_CIRCLE_ROCK_8, RAND_INF_DMC_CIRCLE_ROCK_8 },
{ RC_DMC_ROCK_BY_FIRE_TEMPLE_1, RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_1 },
{ RC_DMC_ROCK_BY_FIRE_TEMPLE_2, RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_2 },
{ RC_DMC_ROCK_BY_FIRE_TEMPLE_3, RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_3 },
{ RC_DMC_ROCK_BY_FIRE_TEMPLE_4, RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_4 },
{ RC_DMC_ROCK_BY_FIRE_TEMPLE_5, RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_5 },
{ RC_DMC_GOSSIP_ROCK_1, RAND_INF_DMC_GOSSIP_ROCK_1 },
{ RC_DMC_GOSSIP_ROCK_2, RAND_INF_DMC_GOSSIP_ROCK_2 },
{ RC_DMC_BOULDER_1, RAND_INF_DMC_BOULDER_1 },
{ RC_DMC_BOULDER_2, RAND_INF_DMC_BOULDER_2 },
{ RC_DMC_BOULDER_3, RAND_INF_DMC_BOULDER_3 },
{ RC_DMC_BRONZE_BOULDER_1, RAND_INF_DMC_BRONZE_BOULDER_1 },
{ RC_DMC_BRONZE_BOULDER_2, RAND_INF_DMC_BRONZE_BOULDER_2 },
{ RC_DMC_BRONZE_BOULDER_3, RAND_INF_DMC_BRONZE_BOULDER_3 },
{ RC_DMC_BRONZE_BOULDER_4, RAND_INF_DMC_BRONZE_BOULDER_4 },
{ RC_GV_SILVER_BOULDER, RAND_INF_GV_SILVER_BOULDER },
{ RC_GV_ROCK_1, RAND_INF_GV_ROCK_1 },
{ RC_GV_ROCK_2, RAND_INF_GV_ROCK_2 },
{ RC_GV_ROCK_3, RAND_INF_GV_ROCK_3 },
{ RC_GV_UNDERWATER_ROCK_1, RAND_INF_GV_UNDERWATER_ROCK_1 },
{ RC_GV_UNDERWATER_ROCK_2, RAND_INF_GV_UNDERWATER_ROCK_2 },
{ RC_GV_UNDERWATER_ROCK_3, RAND_INF_GV_UNDERWATER_ROCK_3 },
{ RC_GV_ROCK_ACROSS_BRIDGE_1, RAND_INF_GV_ROCK_ACROSS_BRIDGE_1 },
{ RC_GV_ROCK_ACROSS_BRIDGE_2, RAND_INF_GV_ROCK_ACROSS_BRIDGE_2 },
{ RC_GV_ROCK_ACROSS_BRIDGE_3, RAND_INF_GV_ROCK_ACROSS_BRIDGE_3 },
{ RC_GV_ROCK_ACROSS_BRIDGE_4, RAND_INF_GV_ROCK_ACROSS_BRIDGE_4 },
{ RC_GV_BOULDER_1, RAND_INF_GV_BOULDER_1 },
{ RC_GV_BOULDER_2, RAND_INF_GV_BOULDER_2 },
{ RC_GV_BOULDER_ACROSS_BRIDGE, RAND_INF_GV_BOULDER_ACROSS_BRIDGE },
{ RC_GV_BRONZE_BOULDER_1, RAND_INF_GV_BRONZE_BOULDER_1 },
{ RC_GV_BRONZE_BOULDER_2, RAND_INF_GV_BRONZE_BOULDER_2 },
{ RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1, RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1 },
{ RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2, RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2 },
{ RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3, RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3 },
{ RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4, RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4 },
{ RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5, RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5 },
{ RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6, RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6 },
{ RC_HF_SILVER_BOULDER, RAND_INF_HF_SILVER_BOULDER },
{ RC_HF_ROCK_1, RAND_INF_HF_ROCK_1 },
{ RC_HF_ROCK_2, RAND_INF_HF_ROCK_2 },
{ RC_HF_ROCK_3, RAND_INF_HF_ROCK_3 },
{ RC_HF_ROCK_4, RAND_INF_HF_ROCK_4 },
{ RC_HF_ROCK_5, RAND_INF_HF_ROCK_5 },
{ RC_HF_ROCK_6, RAND_INF_HF_ROCK_6 },
{ RC_HF_ROCK_7, RAND_INF_HF_ROCK_7 },
{ RC_HF_ROCK_8, RAND_INF_HF_ROCK_8 },
{ RC_HF_BOULDER_NORTH, RAND_INF_HF_BOULDER_NORTH },
{ RC_HF_BOULDER_BY_MARKET, RAND_INF_HF_BOULDER_BY_MARKET },
{ RC_HF_BOULDER_SOUTH, RAND_INF_HF_BOULDER_SOUTH },
{ RC_HF_BRONZE_BOULDER_1, RAND_INF_HF_BRONZE_BOULDER_1 },
{ RC_HF_BRONZE_BOULDER_2, RAND_INF_HF_BRONZE_BOULDER_2 },
{ RC_HF_BRONZE_BOULDER_3, RAND_INF_HF_BRONZE_BOULDER_3 },
{ RC_HF_BRONZE_BOULDER_4, RAND_INF_HF_BRONZE_BOULDER_4 },
{ RC_KAK_SILVER_BOULDER, RAND_INF_KAK_SILVER_BOULDER },
{ RC_KAK_ROCK_1, RAND_INF_KAK_ROCK_1 },
{ RC_KAK_ROCK_2, RAND_INF_KAK_ROCK_2 },
{ RC_GY_ROCK, RAND_INF_GY_ROCK },
{ RC_LA_ROCK, RAND_INF_LA_ROCK },
{ RC_ZD_CIRCLE_ROCK_1, RAND_INF_ZD_CIRCLE_ROCK_1 },
{ RC_ZD_CIRCLE_ROCK_2, RAND_INF_ZD_CIRCLE_ROCK_2 },
{ RC_ZD_CIRCLE_ROCK_3, RAND_INF_ZD_CIRCLE_ROCK_3 },
{ RC_ZD_CIRCLE_ROCK_4, RAND_INF_ZD_CIRCLE_ROCK_4 },
{ RC_ZD_CIRCLE_ROCK_5, RAND_INF_ZD_CIRCLE_ROCK_5 },
{ RC_ZD_CIRCLE_ROCK_6, RAND_INF_ZD_CIRCLE_ROCK_6 },
{ RC_ZD_CIRCLE_ROCK_7, RAND_INF_ZD_CIRCLE_ROCK_7 },
{ RC_ZD_CIRCLE_ROCK_8, RAND_INF_ZD_CIRCLE_ROCK_8 },
{ RC_ZF_BOULDER, RAND_INF_ZF_BOULDER },
{ RC_ZF_SILVER_BOULDER, RAND_INF_ZF_SILVER_BOULDER },
{ RC_ZF_UNDERGROUND_BOULDER, RAND_INF_ZF_UNDERGROUND_BOULDER },
{ RC_ZR_BOULDER_1, RAND_INF_ZR_BOULDER_1 },
{ RC_ZR_BOULDER_2, RAND_INF_ZR_BOULDER_2 },
{ RC_ZR_BOULDER_3, RAND_INF_ZR_BOULDER_3 },
{ RC_ZR_BOULDER_4, RAND_INF_ZR_BOULDER_4 },
{ RC_ZR_CIRCLE_ROCK_1, RAND_INF_ZR_CIRCLE_ROCK_1 },
{ RC_ZR_CIRCLE_ROCK_2, RAND_INF_ZR_CIRCLE_ROCK_2 },
{ RC_ZR_CIRCLE_ROCK_3, RAND_INF_ZR_CIRCLE_ROCK_3 },
{ RC_ZR_CIRCLE_ROCK_4, RAND_INF_ZR_CIRCLE_ROCK_4 },
{ RC_ZR_CIRCLE_ROCK_5, RAND_INF_ZR_CIRCLE_ROCK_5 },
{ RC_ZR_CIRCLE_ROCK_6, RAND_INF_ZR_CIRCLE_ROCK_6 },
{ RC_ZR_CIRCLE_ROCK_7, RAND_INF_ZR_CIRCLE_ROCK_7 },
{ RC_ZR_CIRCLE_ROCK_8, RAND_INF_ZR_CIRCLE_ROCK_8 },
{ RC_ZR_UPPER_CIRCLE_BOULDER, RAND_INF_ZR_UPPER_CIRCLE_BOULDER },
{ RC_ZR_UPPER_CIRCLE_ROCK_1, RAND_INF_ZR_UPPER_CIRCLE_ROCK_1 },
{ RC_ZR_UPPER_CIRCLE_ROCK_2, RAND_INF_ZR_UPPER_CIRCLE_ROCK_2 },
{ RC_ZR_UPPER_CIRCLE_ROCK_3, RAND_INF_ZR_UPPER_CIRCLE_ROCK_3 },
{ RC_ZR_UPPER_CIRCLE_ROCK_4, RAND_INF_ZR_UPPER_CIRCLE_ROCK_4 },
{ RC_ZR_UPPER_CIRCLE_ROCK_5, RAND_INF_ZR_UPPER_CIRCLE_ROCK_5 },
{ RC_ZR_UPPER_CIRCLE_ROCK_6, RAND_INF_ZR_UPPER_CIRCLE_ROCK_6 },
{ RC_ZR_UPPER_CIRCLE_ROCK_7, RAND_INF_ZR_UPPER_CIRCLE_ROCK_7 },
{ RC_ZR_UPPER_CIRCLE_ROCK_8, RAND_INF_ZR_UPPER_CIRCLE_ROCK_8 },
{ RC_ZR_ROCK, RAND_INF_ZR_ROCK },
{ RC_ZR_UNDERWATER_ROCK_1, RAND_INF_ZR_UNDERWATER_ROCK_1 },
{ RC_ZR_UNDERWATER_ROCK_2, RAND_INF_ZR_UNDERWATER_ROCK_2 },
{ RC_ZR_UNDERWATER_ROCK_3, RAND_INF_ZR_UNDERWATER_ROCK_3 },
{ RC_ZR_UNDERWATER_ROCK_4, RAND_INF_ZR_UNDERWATER_ROCK_4 },
{ RC_DMT_ROCK_1, RAND_INF_DMT_ROCK_1 },
{ RC_DMT_ROCK_2, RAND_INF_DMT_ROCK_2 },
{ RC_DMT_ROCK_3, RAND_INF_DMT_ROCK_3 },
{ RC_DMT_ROCK_4, RAND_INF_DMT_ROCK_4 },
{ RC_DMT_ROCK_5, RAND_INF_DMT_ROCK_5 },
{ RC_DMT_SUMMIT_ROCK, RAND_INF_DMT_SUMMIT_ROCK },
{ RC_DMT_CIRCLE_ROCK_1, RAND_INF_DMT_CIRCLE_ROCK_1 },
{ RC_DMT_CIRCLE_ROCK_2, RAND_INF_DMT_CIRCLE_ROCK_2 },
{ RC_DMT_CIRCLE_ROCK_3, RAND_INF_DMT_CIRCLE_ROCK_3 },
{ RC_DMT_CIRCLE_ROCK_4, RAND_INF_DMT_CIRCLE_ROCK_4 },
{ RC_DMT_CIRCLE_ROCK_5, RAND_INF_DMT_CIRCLE_ROCK_5 },
{ RC_DMT_CIRCLE_ROCK_6, RAND_INF_DMT_CIRCLE_ROCK_6 },
{ RC_DMT_CIRCLE_ROCK_7, RAND_INF_DMT_CIRCLE_ROCK_7 },
{ RC_DMT_CIRCLE_ROCK_8, RAND_INF_DMT_CIRCLE_ROCK_8 },
{ RC_DMT_BOULDER_1, RAND_INF_DMT_BOULDER_1 },
{ RC_DMT_BOULDER_2, RAND_INF_DMT_BOULDER_2 },
{ RC_DMT_BOULDER_3, RAND_INF_DMT_BOULDER_3 },
{ RC_DMT_COW_BOULDER, RAND_INF_DMT_COW_BOULDER },
{ RC_DMT_BRONZE_BOULDER_1, RAND_INF_DMT_BRONZE_BOULDER_1 },
{ RC_DMT_BRONZE_BOULDER_2, RAND_INF_DMT_BRONZE_BOULDER_2 },
{ RC_DMT_BRONZE_BOULDER_3, RAND_INF_DMT_BRONZE_BOULDER_3 },
{ RC_DMT_BRONZE_BOULDER_4, RAND_INF_DMT_BRONZE_BOULDER_4 },
{ RC_DMT_BRONZE_BOULDER_5, RAND_INF_DMT_BRONZE_BOULDER_5 },
{ RC_DMT_BRONZE_BOULDER_6, RAND_INF_DMT_BRONZE_BOULDER_6 },
{ RC_DMT_BRONZE_BOULDER_7, RAND_INF_DMT_BRONZE_BOULDER_7 },
{ RC_DMT_BRONZE_BOULDER_8, RAND_INF_DMT_BRONZE_BOULDER_8 },
{ RC_DMT_BRONZE_BOULDER_9, RAND_INF_DMT_BRONZE_BOULDER_9 },
{ RC_DMT_BRONZE_BOULDER_10, RAND_INF_DMT_BRONZE_BOULDER_10 },
{ RC_DMT_BRONZE_BOULDER_11, RAND_INF_DMT_BRONZE_BOULDER_11 },
{ RC_GC_LW_BOULDER_1, RAND_INF_GC_LW_BOULDER_1 },
{ RC_GC_LW_BOULDER_2, RAND_INF_GC_LW_BOULDER_2 },
{ RC_GC_LW_BOULDER_3, RAND_INF_GC_LW_BOULDER_3 },
{ RC_GC_ENTRANCE_BOULDER_1, RAND_INF_GC_ENTRANCE_BOULDER_1 },
{ RC_GC_ENTRANCE_BOULDER_2, RAND_INF_GC_ENTRANCE_BOULDER_2 },
{ RC_GC_ENTRANCE_BOULDER_3, RAND_INF_GC_ENTRANCE_BOULDER_3 },
{ RC_GC_MAZE_SILVER_BOULDER_1, RAND_INF_GC_MAZE_SILVER_BOULDER_1 },
{ RC_GC_MAZE_SILVER_BOULDER_2, RAND_INF_GC_MAZE_SILVER_BOULDER_2 },
{ RC_GC_MAZE_SILVER_BOULDER_3, RAND_INF_GC_MAZE_SILVER_BOULDER_3 },
{ RC_GC_MAZE_SILVER_BOULDER_4, RAND_INF_GC_MAZE_SILVER_BOULDER_4 },
{ RC_GC_MAZE_SILVER_BOULDER_5, RAND_INF_GC_MAZE_SILVER_BOULDER_5 },
{ RC_GC_MAZE_SILVER_BOULDER_6, RAND_INF_GC_MAZE_SILVER_BOULDER_6 },
{ RC_GC_MAZE_SILVER_BOULDER_7, RAND_INF_GC_MAZE_SILVER_BOULDER_7 },
{ RC_GC_MAZE_SILVER_BOULDER_8, RAND_INF_GC_MAZE_SILVER_BOULDER_8 },
{ RC_GC_MAZE_SILVER_BOULDER_9, RAND_INF_GC_MAZE_SILVER_BOULDER_9 },
{ RC_GC_MAZE_SILVER_BOULDER_10, RAND_INF_GC_MAZE_SILVER_BOULDER_10 },
{ RC_GC_MAZE_SILVER_BOULDER_11, RAND_INF_GC_MAZE_SILVER_BOULDER_11 },
{ RC_GC_MAZE_SILVER_BOULDER_12, RAND_INF_GC_MAZE_SILVER_BOULDER_12 },
{ RC_GC_MAZE_SILVER_BOULDER_13, RAND_INF_GC_MAZE_SILVER_BOULDER_13 },
{ RC_GC_MAZE_SILVER_BOULDER_14, RAND_INF_GC_MAZE_SILVER_BOULDER_14 },
{ RC_GC_MAZE_SILVER_BOULDER_15, RAND_INF_GC_MAZE_SILVER_BOULDER_15 },
{ RC_GC_MAZE_SILVER_BOULDER_16, RAND_INF_GC_MAZE_SILVER_BOULDER_16 },
{ RC_GC_MAZE_SILVER_BOULDER_17, RAND_INF_GC_MAZE_SILVER_BOULDER_17 },
{ RC_GC_MAZE_SILVER_BOULDER_18, RAND_INF_GC_MAZE_SILVER_BOULDER_18 },
{ RC_GC_MAZE_SILVER_BOULDER_19, RAND_INF_GC_MAZE_SILVER_BOULDER_19 },
{ RC_GC_MAZE_SILVER_BOULDER_20, RAND_INF_GC_MAZE_SILVER_BOULDER_20 },
{ RC_GC_MAZE_SILVER_BOULDER_21, RAND_INF_GC_MAZE_SILVER_BOULDER_21 },
{ RC_GC_MAZE_SILVER_BOULDER_22, RAND_INF_GC_MAZE_SILVER_BOULDER_22 },
{ RC_GC_MAZE_SILVER_BOULDER_23, RAND_INF_GC_MAZE_SILVER_BOULDER_23 },
{ RC_GC_MAZE_SILVER_BOULDER_24, RAND_INF_GC_MAZE_SILVER_BOULDER_24 },
{ RC_GC_MAZE_SILVER_BOULDER_25, RAND_INF_GC_MAZE_SILVER_BOULDER_25 },
{ RC_GC_MAZE_SILVER_BOULDER_26, RAND_INF_GC_MAZE_SILVER_BOULDER_26 },
{ RC_GC_MAZE_SILVER_BOULDER_27, RAND_INF_GC_MAZE_SILVER_BOULDER_27 },
{ RC_GC_MAZE_SILVER_BOULDER_28, RAND_INF_GC_MAZE_SILVER_BOULDER_28 },
{ RC_GC_MAZE_SILVER_BOULDER_29, RAND_INF_GC_MAZE_SILVER_BOULDER_29 },
{ RC_GC_MAZE_BOULDER_1, RAND_INF_GC_MAZE_BOULDER_1 },
{ RC_GC_MAZE_BOULDER_2, RAND_INF_GC_MAZE_BOULDER_2 },
{ RC_GC_MAZE_BOULDER_3, RAND_INF_GC_MAZE_BOULDER_3 },
{ RC_GC_MAZE_BOULDER_4, RAND_INF_GC_MAZE_BOULDER_4 },
{ RC_GC_MAZE_BOULDER_5, RAND_INF_GC_MAZE_BOULDER_5 },
{ RC_GC_MAZE_BOULDER_6, RAND_INF_GC_MAZE_BOULDER_6 },
{ RC_GC_MAZE_BOULDER_7, RAND_INF_GC_MAZE_BOULDER_7 },
{ RC_GC_MAZE_BOULDER_8, RAND_INF_GC_MAZE_BOULDER_8 },
{ RC_GC_MAZE_BOULDER_9, RAND_INF_GC_MAZE_BOULDER_9 },
{ RC_GC_MAZE_BOULDER_10, RAND_INF_GC_MAZE_BOULDER_10 },
{ RC_GC_MAZE_BRONZE_BOULDER_1, RAND_INF_GC_MAZE_BRONZE_BOULDER_1 },
{ RC_GC_MAZE_BRONZE_BOULDER_2, RAND_INF_GC_MAZE_BRONZE_BOULDER_2 },
{ RC_GC_MAZE_BRONZE_BOULDER_3, RAND_INF_GC_MAZE_BRONZE_BOULDER_3 },
{ RC_GC_MAZE_BRONZE_BOULDER_4, RAND_INF_GC_MAZE_BRONZE_BOULDER_4 },
{ RC_GC_MAZE_BRONZE_BOULDER_5, RAND_INF_GC_MAZE_BRONZE_BOULDER_5 },
{ RC_GC_MAZE_ROCK, RAND_INF_GC_MAZE_ROCK },
{ RC_COLOSSUS_SILVER_BOULDER, RAND_INF_COLOSSUS_SILVER_BOULDER },
{ RC_COLOSSUS_ROCK, RAND_INF_COLOSSUS_ROCK },
{ RC_COLOSSUS_CIRCLE_1_ROCK_1, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_1 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_2, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_2 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_3, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_3 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_4, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_4 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_5, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_5 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_6, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_6 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_7, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_7 },
{ RC_COLOSSUS_CIRCLE_1_ROCK_8, RAND_INF_COLOSSUS_CIRCLE_1_ROCK_8 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_1, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_1 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_2, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_2 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_3, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_3 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_4, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_4 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_5, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_5 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_6, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_6 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_7, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_7 },
{ RC_COLOSSUS_CIRCLE_2_ROCK_8, RAND_INF_COLOSSUS_CIRCLE_2_ROCK_8 },
{ RC_HC_STORMS_GROTTO_ROCK_1, RAND_INF_HC_STORMS_GROTTO_ROCK_1 },
{ RC_HC_STORMS_GROTTO_ROCK_2, RAND_INF_HC_STORMS_GROTTO_ROCK_2 },
{ RC_HC_STORMS_GROTTO_ROCK_3, RAND_INF_HC_STORMS_GROTTO_ROCK_3 },
{ RC_HC_STORMS_GROTTO_ROCK_4, RAND_INF_HC_STORMS_GROTTO_ROCK_4 },
{ RC_HC_STORMS_GROTTO_ROCK_5, RAND_INF_HC_STORMS_GROTTO_ROCK_5 },
{ RC_HC_STORMS_GROTTO_ROCK_6, RAND_INF_HC_STORMS_GROTTO_ROCK_6 },
{ RC_HC_STORMS_GROTTO_ROCK_7, RAND_INF_HC_STORMS_GROTTO_ROCK_7 },
{ RC_HC_STORMS_GROTTO_ROCK_8, RAND_INF_HC_STORMS_GROTTO_ROCK_8 },
{ RC_BOTW_BOULDER_1, RAND_INF_BOTW_BOULDER_1 },
{ RC_BOTW_BOULDER_2, RAND_INF_BOTW_BOULDER_2 },
{ RC_BOTW_BOULDER_3, RAND_INF_BOTW_BOULDER_3 },
{ RC_BOTW_BOULDER_4, RAND_INF_BOTW_BOULDER_4 },
{ RC_BOTW_BOULDER_5, RAND_INF_BOTW_BOULDER_5 },
{ RC_BOTW_BOULDER_6, RAND_INF_BOTW_BOULDER_6 },
{ RC_DEKU_TREE_MQ_BOULDER_1, RAND_INF_DEKU_TREE_MQ_BOULDER_1 },
{ RC_DEKU_TREE_MQ_BOULDER_2, RAND_INF_DEKU_TREE_MQ_BOULDER_2 },
{ RC_DEKU_TREE_MQ_BOULDER_3, RAND_INF_DEKU_TREE_MQ_BOULDER_3 },
{ RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1, RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1 },
{ RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2, RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2 },
{ RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1, RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1 },
{ RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2, RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2 },
{ RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3, RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3 },
{ RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1 },
{ RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11 },
{ RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12, RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12 },
{ RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER, RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER },
{ RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1, RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1 },
{ RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2, RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2 },
{ RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1, RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1 },
{ RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2, RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2 },
{ RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3, RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3 },
{ RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1, RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1 },
{ RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2, RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2 },
{ RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER, RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER },
{ RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER, RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER },
{ RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1 },
{ RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2 },
{ RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3 },
{ RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER },
{ RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER, RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER },
{ RC_BOTW_MQ_BOULDER_1, RAND_INF_BOTW_MQ_BOULDER_1 },
{ RC_BOTW_MQ_BOULDER_2, RAND_INF_BOTW_MQ_BOULDER_2 },
{ RC_BOTW_MQ_BOULDER_3, RAND_INF_BOTW_MQ_BOULDER_3 },
};
BeehiveIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) {
@ -3148,7 +3428,6 @@ BeehiveIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 res
}
Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum, s32 actorParams = 0x00) {
auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity();
RandomizerCheck specialRc = RC_UNKNOWN_CHECK;
// TODO: Migrate these special cases into table, or at least document why they are special
switch (sceneNum) {
@ -3544,6 +3823,22 @@ SmallCrateIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 po
return smallCrateIdentity;
}
RockIdentity Randomizer::IdentifyRock(s32 sceneNum, s32 posX, s32 posZ) {
struct RockIdentity rockIdentity;
rockIdentity.randomizerInf = RAND_INF_MAX;
rockIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_ISHI, sceneNum, TWO_ACTOR_PARAMS(posX, posZ));
if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) {
rockIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()];
rockIdentity.randomizerCheck = location->GetRandomizerCheck();
}
return rockIdentity;
}
u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) {
return Rando::Context::GetInstance()->GetOption(randoSettingKey).Get();
}

View file

@ -57,6 +57,7 @@ class Randomizer {
GrassIdentity IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge);
CrateIdentity IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ);
SmallCrateIdentity IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ);
RockIdentity IdentifyRock(s32 sceneNum, s32 posX, s32 posZ);
GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId,
bool checkObtainability = true);
GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId,

View file

@ -298,6 +298,8 @@ typedef enum {
RCTYPE_FREESTANDING, // Freestanding rupees and hearts
RCTYPE_FAIRY, // Fairies
RCTYPE_GRASS, // Grass
RCTYPE_ROCK, // Rocks
RCTYPE_BOULDER, // Boulders
} RandomizerCheckType;
typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest;
@ -3470,6 +3472,287 @@ typedef enum {
RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8,
// End Grass
RC_KF_CIRCLE_ROCK_1,
RC_KF_CIRCLE_ROCK_2,
RC_KF_CIRCLE_ROCK_3,
RC_KF_CIRCLE_ROCK_4,
RC_KF_CIRCLE_ROCK_5,
RC_KF_CIRCLE_ROCK_6,
RC_KF_CIRCLE_ROCK_7,
RC_KF_CIRCLE_ROCK_8,
RC_KF_ROCK_BY_SARIAS_HOUSE,
RC_KF_ROCK_BEHIND_SARIAS_HOUSE,
RC_KF_ROCK_BY_MIDOS_HOUSE,
RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE,
RC_LW_BOULDER_BY_GORON_CITY,
RC_LW_BOULDER_BY_SACRED_FOREST_MEADOW,
RC_LW_RUPEE_BOULDER,
RC_HC_ROCK_1,
RC_HC_ROCK_2,
RC_HC_ROCK_3,
RC_HC_BOULDER,
RC_OGC_BRONZE_BOULDER_1,
RC_OGC_BRONZE_BOULDER_2,
RC_OGC_BRONZE_BOULDER_3,
RC_OGC_SILVER_BOULDER_1,
RC_OGC_SILVER_BOULDER_2,
RC_OGC_SILVER_BOULDER_3,
RC_OGC_SILVER_BOULDER_4,
RC_DMC_CIRCLE_ROCK_1,
RC_DMC_CIRCLE_ROCK_2,
RC_DMC_CIRCLE_ROCK_3,
RC_DMC_CIRCLE_ROCK_4,
RC_DMC_CIRCLE_ROCK_5,
RC_DMC_CIRCLE_ROCK_6,
RC_DMC_CIRCLE_ROCK_7,
RC_DMC_CIRCLE_ROCK_8,
RC_DMC_ROCK_BY_FIRE_TEMPLE_1,
RC_DMC_ROCK_BY_FIRE_TEMPLE_2,
RC_DMC_ROCK_BY_FIRE_TEMPLE_3,
RC_DMC_ROCK_BY_FIRE_TEMPLE_4,
RC_DMC_ROCK_BY_FIRE_TEMPLE_5,
RC_DMC_GOSSIP_ROCK_1,
RC_DMC_GOSSIP_ROCK_2,
RC_DMC_BOULDER_1,
RC_DMC_BOULDER_2,
RC_DMC_BOULDER_3,
RC_DMC_BRONZE_BOULDER_1,
RC_DMC_BRONZE_BOULDER_2,
RC_DMC_BRONZE_BOULDER_3,
RC_DMC_BRONZE_BOULDER_4,
RC_GV_SILVER_BOULDER,
RC_GV_ROCK_1,
RC_GV_ROCK_2,
RC_GV_ROCK_3,
RC_GV_UNDERWATER_ROCK_1,
RC_GV_UNDERWATER_ROCK_2,
RC_GV_UNDERWATER_ROCK_3,
RC_GV_ROCK_ACROSS_BRIDGE_1,
RC_GV_ROCK_ACROSS_BRIDGE_2,
RC_GV_ROCK_ACROSS_BRIDGE_3,
RC_GV_ROCK_ACROSS_BRIDGE_4,
RC_GV_BOULDER_1,
RC_GV_BOULDER_2,
RC_GV_BOULDER_ACROSS_BRIDGE,
RC_GV_BRONZE_BOULDER_1,
RC_GV_BRONZE_BOULDER_2,
RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1,
RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2,
RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3,
RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4,
RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5,
RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6,
RC_HF_SILVER_BOULDER,
RC_HF_ROCK_1,
RC_HF_ROCK_2,
RC_HF_ROCK_3,
RC_HF_ROCK_4,
RC_HF_ROCK_5,
RC_HF_ROCK_6,
RC_HF_ROCK_7,
RC_HF_ROCK_8,
RC_HF_BOULDER_NORTH,
RC_HF_BOULDER_BY_MARKET,
RC_HF_BOULDER_SOUTH,
RC_HF_BRONZE_BOULDER_1,
RC_HF_BRONZE_BOULDER_2,
RC_HF_BRONZE_BOULDER_3,
RC_HF_BRONZE_BOULDER_4,
RC_KAK_SILVER_BOULDER,
RC_KAK_ROCK_1,
RC_KAK_ROCK_2,
RC_GY_ROCK,
RC_LA_ROCK,
RC_ZD_CIRCLE_ROCK_1,
RC_ZD_CIRCLE_ROCK_2,
RC_ZD_CIRCLE_ROCK_3,
RC_ZD_CIRCLE_ROCK_4,
RC_ZD_CIRCLE_ROCK_5,
RC_ZD_CIRCLE_ROCK_6,
RC_ZD_CIRCLE_ROCK_7,
RC_ZD_CIRCLE_ROCK_8,
RC_ZF_BOULDER,
RC_ZF_SILVER_BOULDER,
RC_ZF_UNDERGROUND_BOULDER,
RC_ZR_BOULDER_1,
RC_ZR_BOULDER_2,
RC_ZR_BOULDER_3,
RC_ZR_BOULDER_4,
RC_ZR_CIRCLE_ROCK_1,
RC_ZR_CIRCLE_ROCK_2,
RC_ZR_CIRCLE_ROCK_3,
RC_ZR_CIRCLE_ROCK_4,
RC_ZR_CIRCLE_ROCK_5,
RC_ZR_CIRCLE_ROCK_6,
RC_ZR_CIRCLE_ROCK_7,
RC_ZR_CIRCLE_ROCK_8,
RC_ZR_UPPER_CIRCLE_BOULDER,
RC_ZR_UPPER_CIRCLE_ROCK_1,
RC_ZR_UPPER_CIRCLE_ROCK_2,
RC_ZR_UPPER_CIRCLE_ROCK_3,
RC_ZR_UPPER_CIRCLE_ROCK_4,
RC_ZR_UPPER_CIRCLE_ROCK_5,
RC_ZR_UPPER_CIRCLE_ROCK_6,
RC_ZR_UPPER_CIRCLE_ROCK_7,
RC_ZR_UPPER_CIRCLE_ROCK_8,
RC_ZR_ROCK,
RC_ZR_UNDERWATER_ROCK_1,
RC_ZR_UNDERWATER_ROCK_2,
RC_ZR_UNDERWATER_ROCK_3,
RC_ZR_UNDERWATER_ROCK_4,
RC_DMT_ROCK_1,
RC_DMT_ROCK_2,
RC_DMT_ROCK_3,
RC_DMT_ROCK_4,
RC_DMT_ROCK_5,
RC_DMT_SUMMIT_ROCK,
RC_DMT_CIRCLE_ROCK_1,
RC_DMT_CIRCLE_ROCK_2,
RC_DMT_CIRCLE_ROCK_3,
RC_DMT_CIRCLE_ROCK_4,
RC_DMT_CIRCLE_ROCK_5,
RC_DMT_CIRCLE_ROCK_6,
RC_DMT_CIRCLE_ROCK_7,
RC_DMT_CIRCLE_ROCK_8,
RC_DMT_BOULDER_1,
RC_DMT_BOULDER_2,
RC_DMT_BOULDER_3,
RC_DMT_COW_BOULDER,
RC_DMT_BRONZE_BOULDER_1,
RC_DMT_BRONZE_BOULDER_2,
RC_DMT_BRONZE_BOULDER_3,
RC_DMT_BRONZE_BOULDER_4,
RC_DMT_BRONZE_BOULDER_5,
RC_DMT_BRONZE_BOULDER_6,
RC_DMT_BRONZE_BOULDER_7,
RC_DMT_BRONZE_BOULDER_8,
RC_DMT_BRONZE_BOULDER_9,
RC_DMT_BRONZE_BOULDER_10,
RC_DMT_BRONZE_BOULDER_11,
RC_GC_LW_BOULDER_1,
RC_GC_LW_BOULDER_2,
RC_GC_LW_BOULDER_3,
RC_GC_ENTRANCE_BOULDER_1,
RC_GC_ENTRANCE_BOULDER_2,
RC_GC_ENTRANCE_BOULDER_3,
RC_GC_MAZE_SILVER_BOULDER_1,
RC_GC_MAZE_SILVER_BOULDER_2,
RC_GC_MAZE_SILVER_BOULDER_3,
RC_GC_MAZE_SILVER_BOULDER_4,
RC_GC_MAZE_SILVER_BOULDER_5,
RC_GC_MAZE_SILVER_BOULDER_6,
RC_GC_MAZE_SILVER_BOULDER_7,
RC_GC_MAZE_SILVER_BOULDER_8,
RC_GC_MAZE_SILVER_BOULDER_9,
RC_GC_MAZE_SILVER_BOULDER_10,
RC_GC_MAZE_SILVER_BOULDER_11,
RC_GC_MAZE_SILVER_BOULDER_12,
RC_GC_MAZE_SILVER_BOULDER_13,
RC_GC_MAZE_SILVER_BOULDER_14,
RC_GC_MAZE_SILVER_BOULDER_15,
RC_GC_MAZE_SILVER_BOULDER_16,
RC_GC_MAZE_SILVER_BOULDER_17,
RC_GC_MAZE_SILVER_BOULDER_18,
RC_GC_MAZE_SILVER_BOULDER_19,
RC_GC_MAZE_SILVER_BOULDER_20,
RC_GC_MAZE_SILVER_BOULDER_21,
RC_GC_MAZE_SILVER_BOULDER_22,
RC_GC_MAZE_SILVER_BOULDER_23,
RC_GC_MAZE_SILVER_BOULDER_24,
RC_GC_MAZE_SILVER_BOULDER_25,
RC_GC_MAZE_SILVER_BOULDER_26,
RC_GC_MAZE_SILVER_BOULDER_27,
RC_GC_MAZE_SILVER_BOULDER_28,
RC_GC_MAZE_SILVER_BOULDER_29,
RC_GC_MAZE_BOULDER_1,
RC_GC_MAZE_BOULDER_2,
RC_GC_MAZE_BOULDER_3,
RC_GC_MAZE_BOULDER_4,
RC_GC_MAZE_BOULDER_5,
RC_GC_MAZE_BOULDER_6,
RC_GC_MAZE_BOULDER_7,
RC_GC_MAZE_BOULDER_8,
RC_GC_MAZE_BOULDER_9,
RC_GC_MAZE_BOULDER_10,
RC_GC_MAZE_BRONZE_BOULDER_1,
RC_GC_MAZE_BRONZE_BOULDER_2,
RC_GC_MAZE_BRONZE_BOULDER_3,
RC_GC_MAZE_BRONZE_BOULDER_4,
RC_GC_MAZE_BRONZE_BOULDER_5,
RC_GC_MAZE_ROCK,
RC_COLOSSUS_SILVER_BOULDER,
RC_COLOSSUS_ROCK,
RC_COLOSSUS_CIRCLE_1_ROCK_1,
RC_COLOSSUS_CIRCLE_1_ROCK_2,
RC_COLOSSUS_CIRCLE_1_ROCK_3,
RC_COLOSSUS_CIRCLE_1_ROCK_4,
RC_COLOSSUS_CIRCLE_1_ROCK_5,
RC_COLOSSUS_CIRCLE_1_ROCK_6,
RC_COLOSSUS_CIRCLE_1_ROCK_7,
RC_COLOSSUS_CIRCLE_1_ROCK_8,
RC_COLOSSUS_CIRCLE_2_ROCK_1,
RC_COLOSSUS_CIRCLE_2_ROCK_2,
RC_COLOSSUS_CIRCLE_2_ROCK_3,
RC_COLOSSUS_CIRCLE_2_ROCK_4,
RC_COLOSSUS_CIRCLE_2_ROCK_5,
RC_COLOSSUS_CIRCLE_2_ROCK_6,
RC_COLOSSUS_CIRCLE_2_ROCK_7,
RC_COLOSSUS_CIRCLE_2_ROCK_8,
RC_HC_STORMS_GROTTO_ROCK_1,
RC_HC_STORMS_GROTTO_ROCK_2,
RC_HC_STORMS_GROTTO_ROCK_3,
RC_HC_STORMS_GROTTO_ROCK_4,
RC_HC_STORMS_GROTTO_ROCK_5,
RC_HC_STORMS_GROTTO_ROCK_6,
RC_HC_STORMS_GROTTO_ROCK_7,
RC_HC_STORMS_GROTTO_ROCK_8,
RC_BOTW_BOULDER_1,
RC_BOTW_BOULDER_2,
RC_BOTW_BOULDER_3,
RC_BOTW_BOULDER_4,
RC_BOTW_BOULDER_5,
RC_BOTW_BOULDER_6,
RC_DEKU_TREE_MQ_BOULDER_1,
RC_DEKU_TREE_MQ_BOULDER_2,
RC_DEKU_TREE_MQ_BOULDER_3,
RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1,
RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2,
RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1,
RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2,
RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3,
RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1,
RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11,
RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12,
RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER,
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1,
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2,
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1,
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2,
RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3,
RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1,
RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2,
RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER,
RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER,
RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1,
RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2,
RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3,
RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER,
RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER,
RC_BOTW_MQ_BOULDER_1,
RC_BOTW_MQ_BOULDER_2,
RC_BOTW_MQ_BOULDER_3,
RC_MAX
} RandomizerCheck;
@ -5592,6 +5875,48 @@ typedef enum {
RHT_DODONGOS_CAVERN_GRASS,
RHT_BOTTOM_OF_THE_WELL_GRASS,
RHT_JABU_JABUS_BELLY_GRASS,
RHT_KF_ROCK,
RHT_LW_BOULDER,
RHT_HC_ROCK,
RHT_HC_BOULDER,
RHT_OGC_BRONZE_BOULDER,
RHT_OGC_SILVER_BOULDER,
RHT_DMC_ROCK,
RHT_DMC_BOULDER,
RHT_DMC_BRONZE_BOULDER,
RHT_GV_SILVER_BOULDER,
RHT_GV_ROCK,
RHT_GV_BOULDER,
RHT_GV_BRONZE_BOULDER,
RHT_HF_SILVER_BOULDER,
RHT_HF_ROCK,
RHT_HF_BOULDER,
RHT_HF_BRONZE_BOULDER,
RHT_KAK_SILVER_BOULDER,
RHT_KAK_ROCK,
RHT_GY_ROCK,
RHT_LA_ROCK,
RHT_ZD_ROCK,
RHT_ZF_BOULDER,
RHT_ZF_SILVER_BOULDER,
RHT_ZR_BOULDER,
RHT_ZR_ROCK,
RHT_DMT_ROCK,
RHT_DMT_BOULDER,
RHT_DMT_BRONZE_BOULDER,
RHT_GC_BOULDER,
RHT_GC_SILVER_BOULDER,
RHT_GC_BRONZE_BOULDER,
RHT_GC_ROCK,
RHT_COLOSSUS_SILVER_BOULDER,
RHT_COLOSSUS_ROCK,
RHT_HC_STORMS_GROTTO_ROCK,
RHT_BOTW_BOULDER,
RHT_DEKU_BOULDER,
RHT_DODONGOS_BOULDER,
RHT_JABU_BOULDER,
RHT_SPIRIT_TEMPLE_BOULDER,
// MAX
RHT_MAX,
} RandomizerHintTextKey;
@ -5885,6 +6210,8 @@ typedef enum {
RSK_SHUFFLE_FAIRIES,
RSK_LOCK_OVERWORLD_DOORS,
RSK_SHUFFLE_GRASS,
RSK_SHUFFLE_ROCKS,
RSK_SHUFFLE_BOULDERS,
RSK_MAX
} RandomizerSettingKey;
@ -6247,6 +6574,14 @@ typedef enum {
RO_SHUFFLE_CRATES_ALL,
} RandoOptionShuffleCrates;
// Shuffle Boulder settings (off, dungeons, overworld, all)
typedef enum {
RO_SHUFFLE_BOULDERS_OFF,
RO_SHUFFLE_BOULDERS_DUNGEONS,
RO_SHUFFLE_BOULDERS_OVERWORLD,
RO_SHUFFLE_BOULDERS_ALL,
} RandoOptionShuffleBoulders;
// Link's Pocket Settings (dungeon reward, advancement, anything, nothing)
typedef enum {
RO_LINKS_POCKET_DUNGEON_REWARD,
@ -6357,6 +6692,11 @@ typedef struct SmallCrateIdentity {
RandomizerCheck randomizerCheck;
} SmallCrateIdentity;
typedef struct RockIdentity {
RandomizerInf randomizerInf;
RandomizerCheck randomizerCheck;
} RockIdentity;
typedef enum {
TRACKER_WINDOW_FLOATING,
TRACKER_WINDOW_WINDOW,

View file

@ -67,6 +67,9 @@ bool showOverworldGrass;
bool showDungeonGrass;
bool showOverworldCrates;
bool showDungeonCrates;
bool showRocks;
bool showOverworldBoulders;
bool showDungeonBoulders;
bool showFrogSongRupees;
bool showFairies;
bool showStartingMapsCompasses;
@ -1428,6 +1431,27 @@ void LoadSettings() {
showDungeonCrates = false;
break;
}
showRocks = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ROCKS);
switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BOULDERS)) {
case RO_SHUFFLE_BOULDERS_ALL:
showOverworldBoulders = true;
showDungeonBoulders = true;
break;
case RO_SHUFFLE_BOULDERS_OVERWORLD:
showOverworldBoulders = true;
showDungeonBoulders = false;
break;
case RO_SHUFFLE_BOULDERS_DUNGEONS:
showOverworldBoulders = false;
showDungeonBoulders = true;
break;
default:
showOverworldBoulders = false;
showDungeonBoulders = false;
break;
}
} else { // Vanilla
showOverworldTokens = true;
showDungeonTokens = true;
@ -1437,6 +1461,9 @@ void LoadSettings() {
showDungeonGrass = false;
showOverworldCrates = false;
showDungeonCrates = false;
showRocks = false;
showOverworldBoulders = false;
showDungeonBoulders = false;
}
fortressFast = false;
@ -1527,6 +1554,10 @@ bool IsCheckShuffled(RandomizerCheck rc) {
(loc->GetRCType() != RCTYPE_SMALL_CRATE ||
(showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) ||
(showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) &&
(loc->GetRCType() != RCTYPE_ROCK || showRocks) &&
(loc->GetRCType() != RCTYPE_BOULDER ||
(showOverworldBoulders && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) ||
(showDungeonBoulders && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) &&
(loc->GetRCType() != RCTYPE_COW || showCows) &&
(loc->GetRCType() != RCTYPE_FISH ||
OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) &&

View file

@ -1529,6 +1529,287 @@ typedef enum {
RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY,
RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY,
RAND_INF_KF_CIRCLE_ROCK_1,
RAND_INF_KF_CIRCLE_ROCK_2,
RAND_INF_KF_CIRCLE_ROCK_3,
RAND_INF_KF_CIRCLE_ROCK_4,
RAND_INF_KF_CIRCLE_ROCK_5,
RAND_INF_KF_CIRCLE_ROCK_6,
RAND_INF_KF_CIRCLE_ROCK_7,
RAND_INF_KF_CIRCLE_ROCK_8,
RAND_INF_KF_ROCK_BY_SARIAS_HOUSE,
RAND_INF_KF_ROCK_BEHIND_SARIAS_HOUSE,
RAND_INF_KF_ROCK_BY_MIDOS_HOUSE,
RAND_INF_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE,
RAND_INF_LW_BOULDER_BY_GORON_CITY,
RAND_INF_LW_BOULDER_BY_SACRED_FOREST_MEADOW,
RAND_INF_LW_RUPEE_BOULDER,
RAND_INF_HC_ROCK_1,
RAND_INF_HC_ROCK_2,
RAND_INF_HC_ROCK_3,
RAND_INF_HC_BOULDER,
RAND_INF_OGC_BRONZE_BOULDER_1,
RAND_INF_OGC_BRONZE_BOULDER_2,
RAND_INF_OGC_BRONZE_BOULDER_3,
RAND_INF_OGC_SILVER_BOULDER_1,
RAND_INF_OGC_SILVER_BOULDER_2,
RAND_INF_OGC_SILVER_BOULDER_3,
RAND_INF_OGC_SILVER_BOULDER_4,
RAND_INF_DMC_CIRCLE_ROCK_1,
RAND_INF_DMC_CIRCLE_ROCK_2,
RAND_INF_DMC_CIRCLE_ROCK_3,
RAND_INF_DMC_CIRCLE_ROCK_4,
RAND_INF_DMC_CIRCLE_ROCK_5,
RAND_INF_DMC_CIRCLE_ROCK_6,
RAND_INF_DMC_CIRCLE_ROCK_7,
RAND_INF_DMC_CIRCLE_ROCK_8,
RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_1,
RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_2,
RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_3,
RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_4,
RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_5,
RAND_INF_DMC_GOSSIP_ROCK_1,
RAND_INF_DMC_GOSSIP_ROCK_2,
RAND_INF_DMC_BOULDER_1,
RAND_INF_DMC_BOULDER_2,
RAND_INF_DMC_BOULDER_3,
RAND_INF_DMC_BRONZE_BOULDER_1,
RAND_INF_DMC_BRONZE_BOULDER_2,
RAND_INF_DMC_BRONZE_BOULDER_3,
RAND_INF_DMC_BRONZE_BOULDER_4,
RAND_INF_GV_SILVER_BOULDER,
RAND_INF_GV_ROCK_1,
RAND_INF_GV_ROCK_2,
RAND_INF_GV_ROCK_3,
RAND_INF_GV_UNDERWATER_ROCK_1,
RAND_INF_GV_UNDERWATER_ROCK_2,
RAND_INF_GV_UNDERWATER_ROCK_3,
RAND_INF_GV_ROCK_ACROSS_BRIDGE_1,
RAND_INF_GV_ROCK_ACROSS_BRIDGE_2,
RAND_INF_GV_ROCK_ACROSS_BRIDGE_3,
RAND_INF_GV_ROCK_ACROSS_BRIDGE_4,
RAND_INF_GV_BOULDER_1,
RAND_INF_GV_BOULDER_2,
RAND_INF_GV_BOULDER_ACROSS_BRIDGE,
RAND_INF_GV_BRONZE_BOULDER_1,
RAND_INF_GV_BRONZE_BOULDER_2,
RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1,
RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2,
RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3,
RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4,
RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5,
RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6,
RAND_INF_HF_SILVER_BOULDER,
RAND_INF_HF_ROCK_1,
RAND_INF_HF_ROCK_2,
RAND_INF_HF_ROCK_3,
RAND_INF_HF_ROCK_4,
RAND_INF_HF_ROCK_5,
RAND_INF_HF_ROCK_6,
RAND_INF_HF_ROCK_7,
RAND_INF_HF_ROCK_8,
RAND_INF_HF_BOULDER_NORTH,
RAND_INF_HF_BOULDER_BY_MARKET,
RAND_INF_HF_BOULDER_SOUTH,
RAND_INF_HF_BRONZE_BOULDER_1,
RAND_INF_HF_BRONZE_BOULDER_2,
RAND_INF_HF_BRONZE_BOULDER_3,
RAND_INF_HF_BRONZE_BOULDER_4,
RAND_INF_KAK_SILVER_BOULDER,
RAND_INF_KAK_ROCK_1,
RAND_INF_KAK_ROCK_2,
RAND_INF_GY_ROCK,
RAND_INF_LA_ROCK,
RAND_INF_ZD_CIRCLE_ROCK_1,
RAND_INF_ZD_CIRCLE_ROCK_2,
RAND_INF_ZD_CIRCLE_ROCK_3,
RAND_INF_ZD_CIRCLE_ROCK_4,
RAND_INF_ZD_CIRCLE_ROCK_5,
RAND_INF_ZD_CIRCLE_ROCK_6,
RAND_INF_ZD_CIRCLE_ROCK_7,
RAND_INF_ZD_CIRCLE_ROCK_8,
RAND_INF_ZF_BOULDER,
RAND_INF_ZF_SILVER_BOULDER,
RAND_INF_ZF_UNDERGROUND_BOULDER,
RAND_INF_ZR_BOULDER_1,
RAND_INF_ZR_BOULDER_2,
RAND_INF_ZR_BOULDER_3,
RAND_INF_ZR_BOULDER_4,
RAND_INF_ZR_CIRCLE_ROCK_1,
RAND_INF_ZR_CIRCLE_ROCK_2,
RAND_INF_ZR_CIRCLE_ROCK_3,
RAND_INF_ZR_CIRCLE_ROCK_4,
RAND_INF_ZR_CIRCLE_ROCK_5,
RAND_INF_ZR_CIRCLE_ROCK_6,
RAND_INF_ZR_CIRCLE_ROCK_7,
RAND_INF_ZR_CIRCLE_ROCK_8,
RAND_INF_ZR_UPPER_CIRCLE_BOULDER,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_1,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_2,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_3,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_4,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_5,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_6,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_7,
RAND_INF_ZR_UPPER_CIRCLE_ROCK_8,
RAND_INF_ZR_ROCK,
RAND_INF_ZR_UNDERWATER_ROCK_1,
RAND_INF_ZR_UNDERWATER_ROCK_2,
RAND_INF_ZR_UNDERWATER_ROCK_3,
RAND_INF_ZR_UNDERWATER_ROCK_4,
RAND_INF_DMT_ROCK_1,
RAND_INF_DMT_ROCK_2,
RAND_INF_DMT_ROCK_3,
RAND_INF_DMT_ROCK_4,
RAND_INF_DMT_ROCK_5,
RAND_INF_DMT_SUMMIT_ROCK,
RAND_INF_DMT_CIRCLE_ROCK_1,
RAND_INF_DMT_CIRCLE_ROCK_2,
RAND_INF_DMT_CIRCLE_ROCK_3,
RAND_INF_DMT_CIRCLE_ROCK_4,
RAND_INF_DMT_CIRCLE_ROCK_5,
RAND_INF_DMT_CIRCLE_ROCK_6,
RAND_INF_DMT_CIRCLE_ROCK_7,
RAND_INF_DMT_CIRCLE_ROCK_8,
RAND_INF_DMT_BOULDER_1,
RAND_INF_DMT_BOULDER_2,
RAND_INF_DMT_BOULDER_3,
RAND_INF_DMT_COW_BOULDER,
RAND_INF_DMT_BRONZE_BOULDER_1,
RAND_INF_DMT_BRONZE_BOULDER_2,
RAND_INF_DMT_BRONZE_BOULDER_3,
RAND_INF_DMT_BRONZE_BOULDER_4,
RAND_INF_DMT_BRONZE_BOULDER_5,
RAND_INF_DMT_BRONZE_BOULDER_6,
RAND_INF_DMT_BRONZE_BOULDER_7,
RAND_INF_DMT_BRONZE_BOULDER_8,
RAND_INF_DMT_BRONZE_BOULDER_9,
RAND_INF_DMT_BRONZE_BOULDER_10,
RAND_INF_DMT_BRONZE_BOULDER_11,
RAND_INF_GC_LW_BOULDER_1,
RAND_INF_GC_LW_BOULDER_2,
RAND_INF_GC_LW_BOULDER_3,
RAND_INF_GC_ENTRANCE_BOULDER_1,
RAND_INF_GC_ENTRANCE_BOULDER_2,
RAND_INF_GC_ENTRANCE_BOULDER_3,
RAND_INF_GC_MAZE_SILVER_BOULDER_1,
RAND_INF_GC_MAZE_SILVER_BOULDER_2,
RAND_INF_GC_MAZE_SILVER_BOULDER_3,
RAND_INF_GC_MAZE_SILVER_BOULDER_4,
RAND_INF_GC_MAZE_SILVER_BOULDER_5,
RAND_INF_GC_MAZE_SILVER_BOULDER_6,
RAND_INF_GC_MAZE_SILVER_BOULDER_7,
RAND_INF_GC_MAZE_SILVER_BOULDER_8,
RAND_INF_GC_MAZE_SILVER_BOULDER_9,
RAND_INF_GC_MAZE_SILVER_BOULDER_10,
RAND_INF_GC_MAZE_SILVER_BOULDER_11,
RAND_INF_GC_MAZE_SILVER_BOULDER_12,
RAND_INF_GC_MAZE_SILVER_BOULDER_13,
RAND_INF_GC_MAZE_SILVER_BOULDER_14,
RAND_INF_GC_MAZE_SILVER_BOULDER_15,
RAND_INF_GC_MAZE_SILVER_BOULDER_16,
RAND_INF_GC_MAZE_SILVER_BOULDER_17,
RAND_INF_GC_MAZE_SILVER_BOULDER_18,
RAND_INF_GC_MAZE_SILVER_BOULDER_19,
RAND_INF_GC_MAZE_SILVER_BOULDER_20,
RAND_INF_GC_MAZE_SILVER_BOULDER_21,
RAND_INF_GC_MAZE_SILVER_BOULDER_22,
RAND_INF_GC_MAZE_SILVER_BOULDER_23,
RAND_INF_GC_MAZE_SILVER_BOULDER_24,
RAND_INF_GC_MAZE_SILVER_BOULDER_25,
RAND_INF_GC_MAZE_SILVER_BOULDER_26,
RAND_INF_GC_MAZE_SILVER_BOULDER_27,
RAND_INF_GC_MAZE_SILVER_BOULDER_28,
RAND_INF_GC_MAZE_SILVER_BOULDER_29,
RAND_INF_GC_MAZE_BOULDER_1,
RAND_INF_GC_MAZE_BOULDER_2,
RAND_INF_GC_MAZE_BOULDER_3,
RAND_INF_GC_MAZE_BOULDER_4,
RAND_INF_GC_MAZE_BOULDER_5,
RAND_INF_GC_MAZE_BOULDER_6,
RAND_INF_GC_MAZE_BOULDER_7,
RAND_INF_GC_MAZE_BOULDER_8,
RAND_INF_GC_MAZE_BOULDER_9,
RAND_INF_GC_MAZE_BOULDER_10,
RAND_INF_GC_MAZE_BRONZE_BOULDER_1,
RAND_INF_GC_MAZE_BRONZE_BOULDER_2,
RAND_INF_GC_MAZE_BRONZE_BOULDER_3,
RAND_INF_GC_MAZE_BRONZE_BOULDER_4,
RAND_INF_GC_MAZE_BRONZE_BOULDER_5,
RAND_INF_GC_MAZE_ROCK,
RAND_INF_COLOSSUS_SILVER_BOULDER,
RAND_INF_COLOSSUS_ROCK,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_1,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_2,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_3,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_4,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_5,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_6,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_7,
RAND_INF_COLOSSUS_CIRCLE_1_ROCK_8,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_1,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_2,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_3,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_4,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_5,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_6,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_7,
RAND_INF_COLOSSUS_CIRCLE_2_ROCK_8,
RAND_INF_HC_STORMS_GROTTO_ROCK_1,
RAND_INF_HC_STORMS_GROTTO_ROCK_2,
RAND_INF_HC_STORMS_GROTTO_ROCK_3,
RAND_INF_HC_STORMS_GROTTO_ROCK_4,
RAND_INF_HC_STORMS_GROTTO_ROCK_5,
RAND_INF_HC_STORMS_GROTTO_ROCK_6,
RAND_INF_HC_STORMS_GROTTO_ROCK_7,
RAND_INF_HC_STORMS_GROTTO_ROCK_8,
RAND_INF_BOTW_BOULDER_1,
RAND_INF_BOTW_BOULDER_2,
RAND_INF_BOTW_BOULDER_3,
RAND_INF_BOTW_BOULDER_4,
RAND_INF_BOTW_BOULDER_5,
RAND_INF_BOTW_BOULDER_6,
RAND_INF_DEKU_TREE_MQ_BOULDER_1,
RAND_INF_DEKU_TREE_MQ_BOULDER_2,
RAND_INF_DEKU_TREE_MQ_BOULDER_3,
RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1,
RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2,
RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1,
RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2,
RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3,
RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1,
RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11,
RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12,
RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER,
RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1,
RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2,
RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1,
RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2,
RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3,
RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1,
RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2,
RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER,
RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER,
RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1,
RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2,
RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_3,
RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER,
RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER,
RAND_INF_BOTW_MQ_BOULDER_1,
RAND_INF_BOTW_MQ_BOULDER_2,
RAND_INF_BOTW_MQ_BOULDER_3,
RAND_INF_GUARD_HOUSE_UNLOCKED,
RAND_INF_GUARD_HOUSE_KEY_OBTAINED,
RAND_INF_MARKET_BAZAAR_UNLOCKED,

View file

@ -216,6 +216,8 @@ void Settings::CreateOptions() {
OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF);
OPT_U8(RSK_SHUFFLE_GRASS, "Shuffle Grass", {"Off", "Dungeons", "Overworld", "All Grass/Bushes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleGrass"), mOptionDescriptions[RSK_SHUFFLE_GRASS], WidgetType::Combobox, RO_SHUFFLE_GRASS_OFF);
OPT_U8(RSK_SHUFFLE_CRATES, "Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_CRATES], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF);
OPT_BOOL(RSK_SHUFFLE_ROCKS, "Shuffle Rocks", CVAR_RANDOMIZER_SETTING("ShuffleRocks"), mOptionDescriptions[RSK_SHUFFLE_ROCKS]);
OPT_U8(RSK_SHUFFLE_BOULDERS, "Shuffle Boulders", {"Off", "Dungeons", "Overworld", "All Boulders"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleBoulders"), mOptionDescriptions[RSK_SHUFFLE_BOULDERS], WidgetType::Combobox, RO_SHUFFLE_BOULDERS_OFF);
OPT_BOOL(RSK_SHUFFLE_FISHING_POLE, "Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]);
OPT_U8(RSK_SHUFFLE_MERCHANTS, "Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE);
OPT_U8(RSK_MERCHANT_PRICES, "Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE);
@ -1255,6 +1257,8 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHUFFLE_COWS],
&mOptions[RSK_SHUFFLE_POTS],
&mOptions[RSK_SHUFFLE_CRATES],
&mOptions[RSK_SHUFFLE_ROCKS],
&mOptions[RSK_SHUFFLE_BOULDERS],
&mOptions[RSK_SHUFFLE_MERCHANTS],
&mOptions[RSK_MERCHANT_PRICES],
&mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE],

View file

@ -56,6 +56,7 @@ class StaticData {
static void RegisterFreestandingLocations();
static void RegisterGrassLocations();
static void RegisterCrateLocations();
static void RegisterRockLocations();
static void InitHashMaps();
static std::array<std::pair<RandomizerCheck, RandomizerCheck>, 17> randomizerFishingPondFish;
static std::unordered_map<int8_t, RandomizerCheck> randomizerGrottoFishMap;

View file

@ -8,6 +8,7 @@
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "soh/OTRGlobals.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "vt.h"
@ -251,6 +252,10 @@ void EnIshi_SpawnDustLarge(EnIshi* this, PlayState* play) {
void EnIshi_DropCollectible(EnIshi* this, PlayState* play) {
s16 dropParams;
if (!GameInteractor_Should(VB_ROCK_DROP_ITEM, true, this)) {
return;
}
if ((this->actor.params & 1) == ROCK_SMALL) {
dropParams = (this->actor.params >> 8) & 0xF;

View file

@ -19,6 +19,7 @@ typedef struct EnIshi {
/* 0x0000 */ Actor actor;
/* 0x014C */ EnIshiActionFunc actionFunc;
/* 0x0150 */ ColliderCylinder collider;
/* */ RockIdentity rockIdentity;
} EnIshi; // size = 0x019C
#endif

View file

@ -7,6 +7,7 @@
#include "z_obj_bombiwa.h"
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
#include "objects/object_bombiwa/object_bombiwa.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#define FLAGS 0
@ -75,7 +76,7 @@ void ObjBombiwa_InitCollision(Actor* thisx, PlayState* play) {
void ObjBombiwa_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(thisx, sInitChain);
ObjBombiwa_InitCollision(thisx, play);
if ((Flags_GetSwitch(play, thisx->params & 0x3F) != 0)) {
if (GameInteractor_Should(VB_BOULDER_BREAK_FLAG, Flags_GetSwitch(play, thisx->params & 0x3F), thisx)) {
Actor_Kill(thisx);
} else {
CollisionCheck_SetInfo(&thisx->colChkInfo, NULL, &sColChkInfoInit);

View file

@ -9,6 +9,7 @@ struct ObjBombiwa;
typedef struct ObjBombiwa {
/* 0x0000 */ Actor actor;
/* 0x014C */ ColliderCylinder collider;
/* */ RockIdentity rockIdentity;
} ObjBombiwa; // size = 0x0198
#endif

View file

@ -6,6 +6,7 @@
#include "z_obj_hamishi.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#define FLAGS 0
@ -150,7 +151,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) {
ObjHamishi_InitCollision(&this->actor, play);
CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
if (Flags_GetSwitch(play, this->actor.params & 0x3F)) {
if (GameInteractor_Should(VB_BOULDER_BREAK_FLAG, Flags_GetSwitch(play, this->actor.params & 0x3F), this)) {
Actor_Kill(&this->actor);
return;
}

View file

@ -15,6 +15,7 @@ typedef struct ObjHamishi {
/* 0x01A2 */ s16 shakePosPhase;
/* 0x01A4 */ s16 shakeRotPhase;
/* 0x01A6 */ s16 hitCount;
/* */ RockIdentity rockIdentity;
} ObjHamishi; // size = 0x01A8
#endif