rocksanity (#5015)

Co-authored-by: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com>
This commit is contained in:
Philip Dubé
2026-04-22 14:50:14 +00:00
committed by GitHub
parent f3d60e0ddd
commit eeca7626d8
52 changed files with 2250 additions and 151 deletions
+10 -2
View File
@@ -198,6 +198,14 @@
"- Water Temple near boss key chest Gold Skulltula\n",
"- Shadow MQ after boat and before boss Gold Skulltulas"
]
},
"bomb_detonation": {
"name": "Precise Bomb Detonation",
"description": [
"This trick enables methods that rely on precisely timing the detonation of bombs, ",
"such as detonating bombs on the surface of the water to destroy underwater rocks ",
"or getting the Gold Skulltula in the first room of forest temple as Child."
]
},
"kf_adult_gs": {
"name": "Adult Kokiri Forest GS with Hover Boots",
@@ -596,8 +604,8 @@
"description": "Boomerang can fish the item out of the rubble without needing explosives to blow it up."
},
"forest_first_gs": {
"name": "Forest Temple First Room GS with Difficult-to-Use Weapons",
"description": "Allows killing this Skulltula with Sword or Sticks by jumpslashing it as you let go from the vines. You can avoid taking fall damage by recoiling onto the tree. Also allows killing it as Child with a Bomb throw. It's much more difficult to use a Bomb as child due to Child Link's shorter height."
"name": "Forest Temple First Room GS with Melee Weapons",
"description": "Allows killing this Skulltula with Sword or Sticks by jumpslashing it as you let go from the vines."
},
"forest_courtyard_east_gs": {
"name": "Forest Temple East Courtyard GS with Boomerang",
@@ -268,6 +268,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
// true
@@ -2049,6 +2058,14 @@ typedef enum {
// - None
VB_REVERT_SPOILING_ITEMS,
// #### `result`
// ```c
// varies
// ```
// #### `args`
// - `*EnIshi`, `*ObjBombiwa`, or `*ObjHamishi`
VB_ROCK_DROP_ITEM,
// #### `result`
// ```c
// !Flags_GetInfTable(INFTABLE_145)
@@ -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*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_DEKU_TREE] = HintText(CustomMessage("They say that a #wonder item in the Deku Tree# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Deku-Baum# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans l'Arbre Mojo# cache #[[1]]#.", {QM_RED, QM_GREEN}));
@@ -317,6 +321,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*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_SIGN_DODONGOS_CAVERN] = HintText(CustomMessage("They say that #reading a pedestal in Dodongo's Cavern# reveals #[[1]]#.",
/*german*/ "Man erzählt sich, daß das #Lesen eines Podests in Dodongos Höhle# #[[1]]# enthülle.",
/*french*/ "Selon moi, #lire un piédestal dans la Caverne Dodongo# révèle #[[1]]#.", {QM_RED, QM_GREEN}));
@@ -488,6 +496,10 @@ 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*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_JABU_JABU] = HintText(CustomMessage("They say that a #wonder item in Jabu Jabu's Belly# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in Jabu-Jabus Bauch# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Ventre de Jabu-Jabu# cache #[[1]]#.", {QM_RED, QM_GREEN}));
@@ -1342,6 +1354,10 @@ 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*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_SIGN_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that #reading a statue in Spirit Temple# reveals #[[1]]#.",
/*german*/ "Man erzählt sich, daß das #Lesen einer Statue im Geistertempel# #[[1]]# enthülle.",
/*french*/ "Selon moi, #lire une statue dans le Temple de l'Esprit# révèle #[[1]]#.", {QM_RED, QM_GREEN}));
@@ -1771,6 +1787,10 @@ 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*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM] = HintText(CustomMessage("They say that a #wonder item in the Bottom of the Well# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand auf dem Grund des Brunnens# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Puits# cache #[[1]]#.", {QM_RED, QM_GREEN}));
@@ -2102,38 +2102,159 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Labor am See# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans un laboratoire# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_KF_ROCK] = HintText(CustomMessage("They say that a #rock in Kokiri Forest# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*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*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_HC_ROCK] = HintText(CustomMessage("They say that a #rock at Hyrule Castle# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_HC_BOULDER] = HintText(CustomMessage("They say that a #boulder at Hyrule Castle# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_OGC_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder outside Ganon's Castle# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_OGC_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder outside Ganon's Castle# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMC_ROCK] = HintText(CustomMessage("They say that a #rock in Death Mountain Crater# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMC_BOULDER] = HintText(CustomMessage("They say that a #boulder in Death Mountain Crater# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMC_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder in Death Mountain Crater# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in Gerudo Valley# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_ROCK] = HintText(CustomMessage("They say that a #rock in Gerudo Valley# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_BOULDER] = HintText(CustomMessage("They say that a #boulder in Gerudo Valley# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GV_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder in Gerudo Valley# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder on Hyrule Field# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_ROCK] = HintText(CustomMessage("They say that a #rock on Hyrule Field# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_BOULDER] = HintText(CustomMessage("They say that a #boulder on Hyrule Field# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_HF_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder on Hyrule Field# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_KAK_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder at Kakariko Village# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_KAK_ROCK] = HintText(CustomMessage("They say that a #rock at Kakariko Village# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GY_ROCK] = HintText(CustomMessage("They say that a #rock in a graveyard# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_LH_ROCK] = HintText(CustomMessage("They say that a #rock at Lake Hylia# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZD_ROCK] = HintText(CustomMessage("They say that a #rock in Zora's Domain# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZF_BOULDER] = HintText(CustomMessage("They say that a #boulder in Zora's Fountain# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZF_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in Zora's Fountain# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZR_ROCK] = HintText(CustomMessage("They say that a #rock along a river# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_ZR_BOULDER] = HintText(CustomMessage("They say that a #boulder along a river# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMT_ROCK] = HintText(CustomMessage("They say that a #rock on Death Mountain Trail# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMT_BOULDER] = HintText(CustomMessage("They say that a #boulder on Death Mountain Trail# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_DMT_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder on Death Mountain Trail# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_ROCK] = HintText(CustomMessage("They say that a #rock in Goron City# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_BOULDER] = HintText(CustomMessage("They say that a #boulder in Goron City# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_BRONZE_BOULDER] = HintText(CustomMessage("They say that a #bronze boulder in Goron City# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_GC_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in Goron City# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_COLOSSUS_SILVER_BOULDER] = HintText(CustomMessage("They say that a #silver boulder in a desert# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_COLOSSUS_ROCK] = HintText(CustomMessage("They say that a #rock in a desert# contains #[[1]]#.",
/*german*/ TODO_TRANSLATE,
/*french*/ TODO_TRANSLATE, {QM_RED, QM_GREEN}));
hintTextTable[RHT_TREE_HYRULE_FIELD] =
HintText(CustomMessage("They say that a #tree in Hyrule Field# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #arbre dans la Plaine d'Hyrule# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_TREE_MARKET] =
HintText(CustomMessage("They say that a #tree in Hyrule Market# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #arbre sur la Place du Marché# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_TREE_HYRULE_CASTLE] =
HintText(CustomMessage("They say that a #tree in Hyrule Castle# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #arbre au Château d'Hyrule# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_TREE_ZORAS_RIVER] =
HintText(CustomMessage("They say that a #tree in Zora's River# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #arbre à la Rivière Zora# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_TREE_ZORAS_FOUNTAIN] =
HintText(CustomMessage("They say that a #tree in Zora's Fountain# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #arbre à la Fontaine Zora# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_TREE_LON_LON_RANCH] =
HintText(CustomMessage("They say that a #tree in Lon Lon Ranch# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #arbre au Ranch Lon Lon# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_BUSH_HYRULE_FIELD] =
HintText(CustomMessage("They say that a #bush in Hyrle Field# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #buisson dans la Plaine d'Hyrule# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_BUSH_ZORAS_FOUNTAIN] =
HintText(CustomMessage("They say that a #bush in Zora's Fountain# contains #[[1]]#.",
/*german*/ "",
/*german*/ TODO_TRANSLATE,
/*french*/ "Selon moi, un #buisson à la Fontaine Zora# cache #[[1]]#.", { QM_RED, QM_GREEN }));
hintTextTable[RHT_BUTTERFLY_FAIRY_HYRULE_CASTLE] = HintText(CustomMessage("They say that a #butterfly near the castle# reveals #[[1]]#.",
@@ -436,6 +436,27 @@ void GenerateItemPool() {
ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL);
PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive);
// Shuffle Crates
bool overworldCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) ||
ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL);
bool dungeonCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) ||
ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL);
PlaceItemsForType(RCTYPE_CRATE, overworldCratesActive, dungeonCratesActive);
PlaceItemsForType(RCTYPE_NLCRATE, ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) && overworldCratesActive,
ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) && 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);
// Shuffle Trees
bool treesActive = (bool)ctx->GetOption(RSK_SHUFFLE_TREES);
PlaceItemsForType(RCTYPE_TREE, treesActive, false);
@@ -454,16 +475,6 @@ void GenerateItemPool() {
ctx->GetOption(RSK_SHUFFLE_WONDER_ITEMS).Is(RO_SHUFFLE_WONDER_ITEMS_ALL);
PlaceItemsForType(RCTYPE_WONDER_ITEM, overworldWonderItemsActive, dungeonWonderItemsActive);
// Shuffle Crates
bool overworldCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) ||
ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL);
bool dungeonCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) ||
ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL);
PlaceItemsForType(RCTYPE_CRATE, overworldCratesActive, dungeonCratesActive);
PlaceItemsForType(RCTYPE_NLCRATE, ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) && overworldCratesActive,
ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) && dungeonCratesActive);
PlaceItemsForType(RCTYPE_SMALL_CRATE, overworldCratesActive, dungeonCratesActive);
if (ctx->GetOption(RSK_FISHSANITY).Is(RO_FISHSANITY_HYRULE_LOACH)) {
AddFixedItemToPool(RG_PURPLE_RUPEE, 1);
} else {
@@ -50,6 +50,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],
@@ -208,6 +210,8 @@ void Context::GenerateLocationPool() {
(location.GetRCType() == RCTYPE_NLCRATE && (mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OFF) ||
mOptions[RSK_LOGIC_RULES].IsNot(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_FOUNTAIN_FAIRY && !mOptions[RSK_SHUFFLE_FOUNTAIN_FAIRIES]) ||
(location.GetRCType() == RCTYPE_STONE_FAIRY && !mOptions[RSK_SHUFFLE_STONE_FAIRIES]) ||
(location.GetRCType() == RCTYPE_BEAN_FAIRY && !mOptions[RSK_SHUFFLE_BEAN_FAIRIES]) ||
@@ -242,6 +246,8 @@ void Context::GenerateLocationPool() {
mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC)) ||
(location.GetRCType() == RCTYPE_SMALL_CRATE &&
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_BOULDER &&
mOptions[RSK_SHUFFLE_BOULDERS].Is(RO_SHUFFLE_BOULDERS_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_SIGN && mOptions[RSK_SHUFFLE_SIGNS].Is(RO_SHUFFLE_SIGNS_DUNGEONS))) {
continue;
}
@@ -266,6 +272,8 @@ void Context::GenerateLocationPool() {
mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC)) ||
(location.GetRCType() == RCTYPE_SMALL_CRATE &&
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD)) ||
(location.GetRCType() == RCTYPE_BOULDER &&
mOptions[RSK_SHUFFLE_BOULDERS].Is(RO_SHUFFLE_BOULDERS_OVERWORLD)) ||
(location.GetRCType() == RCTYPE_SIGN &&
mOptions[RSK_SHUFFLE_SIGNS].Is(RO_SHUFFLE_SIGNS_OVERWORLD))) {
continue;
@@ -1,12 +1,11 @@
#include "soh/OTRGlobals.h"
#include "soh/ObjectExtension/ObjectExtension.h"
#include "item_category_adj.h"
#include "particle_cmc.h"
#include "soh/frame_interpolation.h"
extern "C" {
#include "functions.h"
#include "overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.h"
#include "objects/object_ice_objects/object_ice_objects.h"
#include "objects/object_tk/object_tk.h"
extern PlayState* gPlayState;
}
@@ -0,0 +1,612 @@
#include "ShuffleRocks.h"
#include "static_data.h"
#include "soh/ObjectExtension/ObjectExtension.h"
#include "item_category_adj.h"
#include "particle_cmc.h"
#include "soh/frame_interpolation.h"
extern "C" {
#include "variables.h"
#include "macros.h"
#include "functions.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"
#include "objects/object_tk/object_tk.h"
extern PlayState* gPlayState;
}
extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play);
static void Sparkles(PlayState* play, Actor* actor, bool boulder, CheckIdentity rockIdentity) {
GraphicsContext* __gfxCtx = play->state.gfxCtx;
int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0);
int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0);
GetItemCategory getItemCategory;
if (csmc && (!requiresStoneAgony || (requiresStoneAgony && CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)))) {
auto itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rockIdentity.randomizerCheck, true, GI_NONE);
getItemCategory = Randomizer_AdjustItemCategory(itemEntry);
} else {
getItemCategory = ITEM_CATEGORY_MAJOR;
}
Color_RGBA8 primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
f32 yOffset = !boulder ? 40.0f : actor->id == ACTOR_OBJ_BOMBIWA ? 160.0f : 180.0f;
f32 xOffset = !boulder ? -24.0f : actor->id == ACTOR_OBJ_BOMBIWA ? -90.0f : -90.0f;
f32 zOffset = !boulder ? 4.0f : actor->id == ACTOR_OBJ_BOMBIWA ? 14.5f : 14.5f;
// Rotate and draw halo with CMC colors
if (rockIdentity.randomizerCheck == RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER ||
rockIdentity.randomizerCheck == RC_ZF_UNDERGROUND_BOULDER) {
yOffset = -114.0f;
xOffset = -165.0f;
zOffset = 19.0f;
Matrix_Translate(actor->world.pos.x + xOffset, actor->world.pos.y + yOffset, actor->world.pos.z + zOffset,
MTXMODE_NEW);
Matrix_Scale(0.055f, 0.055f, 0.055f, MTXMODE_APPLY);
} else {
Matrix_Translate(actor->world.pos.x + xOffset, actor->world.pos.y + yOffset, actor->world.pos.z + zOffset,
MTXMODE_NEW);
Matrix_RotateZ(-M_PI / 2, MTXMODE_APPLY);
if (boulder) {
Matrix_Scale(0.04f, 0.04f, 0.04f, MTXMODE_APPLY);
} else {
Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY);
}
}
OPEN_DISPS(gPlayState->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gPlayState->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetGrayscaleColor(POLY_OPA_DISP++, primColor.r, primColor.g, primColor.b, 175);
gSPGrayscale(POLY_OPA_DISP++, true);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gDampeHaloDL);
gSPGrayscale(POLY_OPA_DISP++, false);
CLOSE_DISPS(gPlayState->state.gfxCtx);
}
extern "C" void EnIshi_RandomizerDraw(Actor* thisx, PlayState* play) {
auto rockActor = ((EnIshi*)thisx);
const auto rockIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(thisx);
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
if (rockActor->actor.params & 1) {
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);
}
CLOSE_DISPS(play->state.gfxCtx);
if (rockIdentity != nullptr && rockIdentity->randomizerCheck != RC_MAX &&
Flags_GetRandomizerInf(rockIdentity->randomizerInf) == 0) {
Sparkles(play, &rockActor->actor, !!(rockActor->actor.params & 1), *rockIdentity);
}
}
extern "C" void ObjBombiwa_RandomizerDraw(Actor* thisx, PlayState* play) {
auto rockActor = ((ObjBombiwa*)thisx);
const auto rockIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(thisx);
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Gfx_DrawDListOpa(play, (Gfx*)object_bombiwa_DL_0009E0);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)object_bombiwa_DL_0009E0);
CLOSE_DISPS(play->state.gfxCtx);
if (rockIdentity != nullptr && rockIdentity->randomizerCheck != RC_MAX &&
Flags_GetRandomizerInf(rockIdentity->randomizerInf) == 0) {
Sparkles(play, &rockActor->actor, true, *rockIdentity);
}
}
extern "C" void ObjHamishi_RandomizerDraw(Actor* thisx, PlayState* play) {
auto rockActor = ((ObjHamishi*)thisx);
const auto rockIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(thisx);
OPEN_DISPS(play->state.gfxCtx);
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);
CLOSE_DISPS(play->state.gfxCtx);
if (rockIdentity != nullptr && rockIdentity->randomizerCheck != RC_MAX &&
Flags_GetRandomizerInf(rockIdentity->randomizerInf) == 0) {
Sparkles(play, &rockActor->actor, true, *rockIdentity);
}
}
uint8_t Rock_RandomizerHoldsItem(CheckIdentity rockIdentity, PlayState* play, bool isBoulder) {
RandomizerCheck rc = rockIdentity.randomizerCheck;
if (rc == RC_MAX || rc == RC_UNKNOWN_CHECK)
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);
}
void Rock_RandomizerSpawnCollectible(Actor* actor, CheckIdentity 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);
switch (rockIdentity.randomizerCheck) {
case RC_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER:
item00->actor.world.rot.y = 0x8000;
break;
case RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW:
item00->actor.velocity.y = 15.0f;
[[fallthrough]];
case RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH:
item00->actor.world.rot.y = 0x0;
item00->actor.speedXZ = 8.0f;
break;
case RC_GC_MAZE_BOULDER_1:
case RC_GC_MAZE_BOULDER_2:
case RC_GC_MAZE_BOULDER_3:
case RC_GC_MAZE_BOULDER_4:
case RC_GC_MAZE_BOULDER_5:
case RC_GC_MAZE_BOULDER_6:
case RC_GC_MAZE_BOULDER_7:
case RC_GC_MAZE_BOULDER_8:
case RC_GC_MAZE_BOULDER_9:
case RC_GC_MAZE_BOULDER_10:
case RC_GC_MAZE_BRONZE_BOULDER_1:
case RC_GC_MAZE_BRONZE_BOULDER_2:
case RC_GC_MAZE_BRONZE_BOULDER_3:
case RC_GC_MAZE_BRONZE_BOULDER_4:
case RC_GC_MAZE_BRONZE_BOULDER_5:
case RC_DMC_BRONZE_BOULDER_SHORTCUT:
case RC_ZF_UNDERGROUND_BOULDER:
case RC_DEKU_TREE_MQ_BOULDER_1:
case RC_DEKU_TREE_MQ_BOULDER_2:
case RC_DEKU_TREE_MQ_BOULDER_3:
case RC_ZR_BOULDER_4:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11:
case RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12:
case RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER:
case RC_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER:
item00->actor.speedXZ = 0.0f;
break;
default:;
}
}
void EnIshi_RandomizerInit(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
EnIshi* rockActor = static_cast<EnIshi*>(actorRef);
auto rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(gPlayState->sceneNum, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
if (rockIdentity.randomizerCheck == RC_MAX) {
LUSLOG_WARN("ROCK ishi %d\t:\t%d, %d", 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", rockIdentity.randomizerCheck, actor->params & 1,
(s16)actor->world.pos.x, (s16)actor->world.pos.z);
}
if (Rock_RandomizerHoldsItem(rockIdentity, gPlayState, actor->params & 1) && rockActor->actor.draw != nullptr) {
ObjectExtension::GetInstance().Set<CheckIdentity>(actor, std::move(rockIdentity));
rockActor->actor.draw = EnIshi_RandomizerDraw;
}
}
void ObjBombiwa_RandomizerInit(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
ObjBombiwa* rockActor = static_cast<ObjBombiwa*>(actorRef);
auto rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(gPlayState->sceneNum, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
if (rockIdentity.randomizerCheck == RC_MAX) {
LUSLOG_INFO("ROCK bombiwa\t:\t%d, %d", rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
} else {
LUSLOG_INFO("ROCK bombiwa%d\t:\t%d, %d", rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
}
if (Rock_RandomizerHoldsItem(rockIdentity, gPlayState, true) && rockActor->actor.draw != nullptr) {
ObjectExtension::GetInstance().Set<CheckIdentity>(actor, std::move(rockIdentity));
rockActor->actor.draw = ObjBombiwa_RandomizerDraw;
}
}
void ObjHamishi_RandomizerInit(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);
ObjHamishi* rockActor = static_cast<ObjHamishi*>(actorRef);
auto rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(gPlayState->sceneNum, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
if (rockIdentity.randomizerCheck == RC_MAX) {
LUSLOG_WARN("ROCK hamishi\t:\t%d, %d", rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
} else {
LUSLOG_INFO("ROCK hamishi%d\t:\t%d, %d", rockIdentity.randomizerCheck, (s16)actor->world.pos.x,
(s16)actor->world.pos.z);
}
if (Rock_RandomizerHoldsItem(rockIdentity, gPlayState, true) && rockActor->actor.draw != nullptr) {
ObjectExtension::GetInstance().Set<CheckIdentity>(actor, std::move(rockIdentity));
rockActor->actor.draw = ObjHamishi_RandomizerDraw;
}
}
void RegisterShuffleRock() {
bool shouldRegister = IS_RANDO && (RAND_GET_OPTION(RSK_SHUFFLE_ROCKS) || RAND_GET_OPTION(RSK_SHUFFLE_BOULDERS));
bool shouldRegisterBoulder = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_BOULDERS);
COND_ID_HOOK(OnActorInit, ACTOR_EN_ISHI, shouldRegister, EnIshi_RandomizerInit);
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_BOMBIWA, shouldRegisterBoulder, ObjBombiwa_RandomizerInit);
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_HAMISHI, shouldRegisterBoulder, ObjHamishi_RandomizerInit);
COND_VB_SHOULD(VB_ROCK_DROP_ITEM, shouldRegister, {
Actor* rockActor = va_arg(args, Actor*);
const auto rockIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(rockActor);
if (rockIdentity != nullptr &&
Rock_RandomizerHoldsItem(*rockIdentity, gPlayState,
rockActor->id == ACTOR_OBJ_BOMBIWA || rockActor->id == ACTOR_OBJ_HAMISHI ||
rockActor->params & 1)) {
Rock_RandomizerSpawnCollectible(rockActor, *rockIdentity, gPlayState);
rockIdentity->randomizerCheck = RC_MAX;
rockIdentity->randomizerInf = RAND_INF_MAX;
*should = false;
}
});
COND_VB_SHOULD(VB_BOULDER_BREAK_FLAG, shouldRegisterBoulder, {
if (*should) {
Actor* rockActor = va_arg(args, Actor*);
// hook called before OnActorInit sets up object extension
auto rockIdentity = OTRGlobals::Instance->gRandomizer->IdentifyRock(
gPlayState->sceneNum, (s16)rockActor->world.pos.x, (s16)rockActor->world.pos.z);
if (Rock_RandomizerHoldsItem(rockIdentity, gPlayState, true)) {
Rock_RandomizerSpawnCollectible(rockActor, rockIdentity, gPlayState);
}
}
});
}
void Rando::StaticData::RegisterRockLocations() {
static bool registered = false;
if (registered)
return;
registered = true;
// clang-format off
locationTable[RC_KF_CIRCLE_ROCK_1] = Location::Rock(RC_KF_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-292, -350), "KF Circle Rock 1", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_1));
locationTable[RC_KF_CIRCLE_ROCK_2] = Location::Rock(RC_KF_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-235, -373), "KF Circle Rock 2", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_2));
locationTable[RC_KF_CIRCLE_ROCK_3] = Location::Rock(RC_KF_CIRCLE_ROCK_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-212, -430), "KF Circle Rock 3", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_3));
locationTable[RC_KF_CIRCLE_ROCK_4] = Location::Rock(RC_KF_CIRCLE_ROCK_4, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-235, -486), "KF Circle Rock 4", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_4));
locationTable[RC_KF_CIRCLE_ROCK_5] = Location::Rock(RC_KF_CIRCLE_ROCK_5, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-292, -510), "KF Circle Rock 5", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_5));
locationTable[RC_KF_CIRCLE_ROCK_6] = Location::Rock(RC_KF_CIRCLE_ROCK_6, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-348, -486), "KF Circle Rock 6", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_6));
locationTable[RC_KF_CIRCLE_ROCK_7] = Location::Rock(RC_KF_CIRCLE_ROCK_7, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-372, -430), "KF Circle Rock 7", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_7));
locationTable[RC_KF_CIRCLE_ROCK_8] = Location::Rock(RC_KF_CIRCLE_ROCK_8, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-348, -373), "KF Circle Rock 8", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CIRCLE_ROCK_8));
locationTable[RC_KF_ROCK_BY_SARIAS_HOUSE] = Location::Rock(RC_KF_ROCK_BY_SARIAS_HOUSE, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(248, 601), "Sarias House Rock KF", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ROCK_BY_SARIAS_HOUSE));
locationTable[RC_KF_ROCK_BEHIND_SARIAS_HOUSE] = Location::Rock(RC_KF_ROCK_BEHIND_SARIAS_HOUSE, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(726, 961), "Behind Sarias House Rock KF", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ROCK_BEHIND_SARIAS_HOUSE));
locationTable[RC_KF_ROCK_BY_MIDOS_HOUSE] = Location::Rock(RC_KF_ROCK_BY_MIDOS_HOUSE, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-672, -623), "Midos House Rock KF", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ROCK_BY_MIDOS_HOUSE));
locationTable[RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE] = Location::Rock(RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-1361, 145), "Know It Alls House Rock KF", RHT_KF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE));
locationTable[RC_LW_BOULDER_BY_GORON_CITY] = Location::Boulder(RC_LW_BOULDER_BY_GORON_CITY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(915, -925), "Goron City Boulder LW", RHT_LW_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BOULDER_BY_GORON_CITY));
locationTable[RC_LW_BOULDER_BY_SACRED_FOREST_MEADOW] = Location::Boulder(RC_LW_BOULDER_BY_SACRED_FOREST_MEADOW, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(670, -2520), "Sacred Forest Meadow Boulder LW", RHT_LW_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BOULDER_BY_SACRED_FOREST_MEADOW));
locationTable[RC_LW_RUPEE_BOULDER] = Location::Boulder(RC_LW_RUPEE_BOULDER, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1720, -2510), "Rupee Boulder LW", RHT_LW_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_RUPEE_BOULDER));
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));
locationTable[RC_HC_BOULDER] = Location::Boulder(RC_HC_BOULDER, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(2730, 2540), "HC Boulder", RHT_HC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_BOULDER));
locationTable[RC_OGC_BRONZE_BOULDER_1] = Location::Boulder(RC_OGC_BRONZE_BOULDER_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2324, 533), "OGC Bronze Boulder 1", RHT_OGC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_BRONZE_BOULDER_1));
locationTable[RC_OGC_BRONZE_BOULDER_2] = Location::Boulder(RC_OGC_BRONZE_BOULDER_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1590, 787), "OGC Bronze Boulder 2", RHT_OGC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_BRONZE_BOULDER_2));
locationTable[RC_OGC_BRONZE_BOULDER_3] = Location::Boulder(RC_OGC_BRONZE_BOULDER_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1661, 748), "OGC Bronze Boulder 3", RHT_OGC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_BRONZE_BOULDER_3));
locationTable[RC_OGC_SILVER_BOULDER_1] = Location::Boulder(RC_OGC_SILVER_BOULDER_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1606, 685), "OGC Silver Boulder 1", RHT_OGC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_SILVER_BOULDER_1));
locationTable[RC_OGC_SILVER_BOULDER_2] = Location::Boulder(RC_OGC_SILVER_BOULDER_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1766, 726), "OGC Silver Boulder 2", RHT_OGC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_SILVER_BOULDER_2));
locationTable[RC_OGC_SILVER_BOULDER_3] = Location::Boulder(RC_OGC_SILVER_BOULDER_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1701, 661), "OGC Silver Boulder 3", RHT_OGC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_SILVER_BOULDER_3));
locationTable[RC_OGC_SILVER_BOULDER_4] = Location::Boulder(RC_OGC_SILVER_BOULDER_4, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_OUTSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2260, 560), "OGC Silver Boulder 4", RHT_OGC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_SILVER_BOULDER_4));
locationTable[RC_DMC_ROCK_BY_FIRE_TEMPLE_1] = Location::Rock(RC_DMC_ROCK_BY_FIRE_TEMPLE_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-50, -714), "DMC Fire Temple Rock 1", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_1));
locationTable[RC_DMC_ROCK_BY_FIRE_TEMPLE_2] = Location::Rock(RC_DMC_ROCK_BY_FIRE_TEMPLE_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-26, -807), "DMC Fire Temple Rock 2", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_2));
locationTable[RC_DMC_ROCK_BY_FIRE_TEMPLE_3] = Location::Rock(RC_DMC_ROCK_BY_FIRE_TEMPLE_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(61, -763), "DMC Fire Temple Rock 3", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_3));
locationTable[RC_DMC_ROCK_BY_FIRE_TEMPLE_4] = Location::Rock(RC_DMC_ROCK_BY_FIRE_TEMPLE_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(71, -610), "DMC Fire Temple Rock 4", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_4));
locationTable[RC_DMC_ROCK_BY_FIRE_TEMPLE_5] = Location::Rock(RC_DMC_ROCK_BY_FIRE_TEMPLE_5, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(79, -700), "DMC Fire Temple Rock 5", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_5));
locationTable[RC_DMC_CIRCLE_ROCK_1] = Location::Rock(RC_DMC_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(40, 1850), "DMC Circle Rock 1", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_1));
locationTable[RC_DMC_CIRCLE_ROCK_2] = Location::Rock(RC_DMC_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(96, 1826), "DMC Circle Rock 2", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_2));
locationTable[RC_DMC_CIRCLE_ROCK_3] = Location::Rock(RC_DMC_CIRCLE_ROCK_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(120, 1770), "DMC Circle Rock 3", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_3));
locationTable[RC_DMC_CIRCLE_ROCK_4] = Location::Rock(RC_DMC_CIRCLE_ROCK_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(96, 1713), "DMC Circle Rock 4", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_4));
locationTable[RC_DMC_CIRCLE_ROCK_5] = Location::Rock(RC_DMC_CIRCLE_ROCK_5, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(40, 1690), "DMC Circle Rock 5", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_5));
locationTable[RC_DMC_CIRCLE_ROCK_6] = Location::Rock(RC_DMC_CIRCLE_ROCK_6, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-16, 1713), "DMC Circle Rock 6", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_6));
locationTable[RC_DMC_CIRCLE_ROCK_7] = Location::Rock(RC_DMC_CIRCLE_ROCK_7, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-40, 1770), "DMC Circle Rock 7", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_7));
locationTable[RC_DMC_CIRCLE_ROCK_8] = Location::Rock(RC_DMC_CIRCLE_ROCK_8, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-16, 1826), "DMC Circle Rock 8", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CIRCLE_ROCK_8));
locationTable[RC_DMC_GOSSIP_ROCK_1] = Location::Rock(RC_DMC_GOSSIP_ROCK_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1261, 1533), "DMC Gossip Rock 1", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GOSSIP_ROCK_1));
locationTable[RC_DMC_GOSSIP_ROCK_2] = Location::Rock(RC_DMC_GOSSIP_ROCK_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1356, 1541), "DMC Gossip Rock 2", RHT_DMC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GOSSIP_ROCK_2));
locationTable[RC_DMC_BOULDER_1] = Location::Boulder(RC_DMC_BOULDER_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-504, 1070), "DMC Boulder 1", RHT_DMC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BOULDER_1));
locationTable[RC_DMC_BOULDER_2] = Location::Boulder(RC_DMC_BOULDER_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(236, 1199), "DMC Boulder 2", RHT_DMC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BOULDER_2));
locationTable[RC_DMC_BOULDER_3] = Location::Boulder(RC_DMC_BOULDER_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(40, 1770), "DMC Boulder 3", RHT_DMC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BOULDER_3));
locationTable[RC_DMC_BRONZE_BOULDER_1] = Location::Boulder(RC_DMC_BRONZE_BOULDER_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1699, -472), "DMC Bronze Boulder 1", RHT_DMC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BRONZE_BOULDER_1));
locationTable[RC_DMC_BRONZE_BOULDER_2] = Location::Boulder(RC_DMC_BRONZE_BOULDER_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1332, 921), "DMC Bronze Boulder 2", RHT_DMC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BRONZE_BOULDER_2));
locationTable[RC_DMC_BRONZE_BOULDER_3] = Location::Boulder(RC_DMC_BRONZE_BOULDER_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1303, 975), "DMC Bronze Boulder 3", RHT_DMC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BRONZE_BOULDER_3));
locationTable[RC_DMC_BRONZE_BOULDER_SHORTCUT] = Location::Boulder(RC_DMC_BRONZE_BOULDER_SHORTCUT, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1060, 944), "DMC Bronze Shortcut Boulder", RHT_DMC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BRONZE_BOULDER_SHORTCUT));
locationTable[RC_GV_SILVER_BOULDER] = Location::Boulder(RC_GV_SILVER_BOULDER, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(280, 1470), "GV Silver Boulder", RHT_GV_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_SILVER_BOULDER));
locationTable[RC_GV_ROCK_1] = Location::Rock(RC_GV_ROCK_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(2738, 297), "GV Rock 1", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_1));
locationTable[RC_GV_ROCK_2] = Location::Rock(RC_GV_ROCK_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(2715, 316), "GV Rock 2", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_2));
locationTable[RC_GV_ROCK_3] = Location::Rock(RC_GV_ROCK_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(2699, 275), "GV Rock 3", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_3));
locationTable[RC_GV_UNDERWATER_ROCK_1] = Location::Rock(RC_GV_UNDERWATER_ROCK_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(1559, -63), "GV Underwater Rock 1", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_UNDERWATER_ROCK_1));
locationTable[RC_GV_UNDERWATER_ROCK_2] = Location::Rock(RC_GV_UNDERWATER_ROCK_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(1605, 26), "GV Underwater Rock 2", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_UNDERWATER_ROCK_2));
locationTable[RC_GV_UNDERWATER_ROCK_3] = Location::Rock(RC_GV_UNDERWATER_ROCK_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(1686, -33), "GV Underwater Rock 3", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_UNDERWATER_ROCK_3));
locationTable[RC_GV_ROCK_ACROSS_BRIDGE_1] = Location::Rock(RC_GV_ROCK_ACROSS_BRIDGE_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-666, -899), "GV Rock Across Bridge 1", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_ACROSS_BRIDGE_1));
locationTable[RC_GV_ROCK_ACROSS_BRIDGE_2] = Location::Rock(RC_GV_ROCK_ACROSS_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-526, -890), "GV Rock Across Bridge 2", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_ACROSS_BRIDGE_2));
locationTable[RC_GV_ROCK_ACROSS_BRIDGE_3] = Location::Rock(RC_GV_ROCK_ACROSS_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-607, -791), "GV Rock Across Bridge 3", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_ACROSS_BRIDGE_3));
locationTable[RC_GV_ROCK_ACROSS_BRIDGE_4] = Location::Rock(RC_GV_ROCK_ACROSS_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-458, -782), "GV Rock Across Bridge 4", RHT_GV_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_ROCK_ACROSS_BRIDGE_4));
locationTable[RC_GV_BOULDER_1] = Location::Boulder(RC_GV_BOULDER_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(751, 569), "GV Boulder 1", RHT_GV_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BOULDER_1));
locationTable[RC_GV_BOULDER_2] = Location::Boulder(RC_GV_BOULDER_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(545, -510), "GV Boulder 2", RHT_GV_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BOULDER_2));
locationTable[RC_GV_BOULDER_ACROSS_BRIDGE] = Location::Boulder(RC_GV_BOULDER_ACROSS_BRIDGE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-954, 577), "GV Boulder Across Bridge", RHT_GV_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BOULDER_ACROSS_BRIDGE));
locationTable[RC_GV_BRONZE_BOULDER_1] = Location::Boulder(RC_GV_BRONZE_BOULDER_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(861, -778), "GV Bronze Boulder 1", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_1));
locationTable[RC_GV_BRONZE_BOULDER_2] = Location::Boulder(RC_GV_BRONZE_BOULDER_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(735, 375), "GV Bronze Boulder 2", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_2));
locationTable[RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1] = Location::Boulder(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-1352, 767), "GV Bronze Boulder Across Bridge 1", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1));
locationTable[RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2] = Location::Boulder(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-1695, -350), "GV Bronze Boulder Across Bridge 2", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2));
locationTable[RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3] = Location::Boulder(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-1001, 637), "GV Bronze Boulder Across Bridge 3", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3));
locationTable[RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4] = Location::Boulder(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-1291, 787), "GV Bronze Boulder Across Bridge 4", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4));
locationTable[RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5] = Location::Boulder(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-1416, 778), "GV Bronze Boulder Across Bridge 5", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5));
locationTable[RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6] = Location::Boulder(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-1256, 856), "GV Bronze Boulder Across Bridge 6", RHT_GV_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6));
locationTable[RC_HF_SILVER_BOULDER] = Location::Boulder(RC_HF_SILVER_BOULDER, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(674, 8256), "HF Silver Boulder", RHT_HF_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SILVER_BOULDER));
locationTable[RC_HF_ROCK_1] = Location::Rock(RC_HF_ROCK_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7875, 6995), "HF Circle Rock 1", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_1));
locationTable[RC_HF_ROCK_2] = Location::Rock(RC_HF_ROCK_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7818, 6971), "HF Circle Rock 2", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_2));
locationTable[RC_HF_ROCK_3] = Location::Rock(RC_HF_ROCK_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7795, 6915), "HF Circle Rock 3", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_3));
locationTable[RC_HF_ROCK_4] = Location::Rock(RC_HF_ROCK_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7818, 6858), "HF Circle Rock 4", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_4));
locationTable[RC_HF_ROCK_5] = Location::Rock(RC_HF_ROCK_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7875, 6835), "HF Circle Rock 5", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_5));
locationTable[RC_HF_ROCK_6] = Location::Rock(RC_HF_ROCK_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7931, 6858), "HF Circle Rock 6", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_6));
locationTable[RC_HF_ROCK_7] = Location::Rock(RC_HF_ROCK_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7955, 6915), "HF Circle Rock 7", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_7));
locationTable[RC_HF_ROCK_8] = Location::Rock(RC_HF_ROCK_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7931, 6971), "HF Circle Rock 8", RHT_HF_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_ROCK_8));
locationTable[RC_HF_BOULDER_NORTH] = Location::Boulder(RC_HF_BOULDER_NORTH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-4450, -425), "HF Boulder North", RHT_HF_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BOULDER_NORTH));
locationTable[RC_HF_BOULDER_BY_MARKET] = Location::Boulder(RC_HF_BOULDER_BY_MARKET, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1425, 810), "Market Boulder HF", RHT_HF_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BOULDER_BY_MARKET));
locationTable[RC_HF_BOULDER_SOUTH] = Location::Boulder(RC_HF_BOULDER_SOUTH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-270, 12350), "HF Boulder South", RHT_HF_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BOULDER_SOUTH));
locationTable[RC_HF_BRONZE_BOULDER_1] = Location::Boulder(RC_HF_BRONZE_BOULDER_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7870, 6920), "HF Bronze Boulder 1", RHT_HF_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BRONZE_BOULDER_1));
locationTable[RC_HF_BRONZE_BOULDER_2] = Location::Boulder(RC_HF_BRONZE_BOULDER_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-7804, 7983), "HF Bronze Boulder 2", RHT_HF_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BRONZE_BOULDER_2));
locationTable[RC_HF_BRONZE_BOULDER_3] = Location::Boulder(RC_HF_BRONZE_BOULDER_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-8397, 7947), "HF Bronze Boulder 3", RHT_HF_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BRONZE_BOULDER_3));
locationTable[RC_HF_BRONZE_BOULDER_4] = Location::Boulder(RC_HF_BRONZE_BOULDER_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-6461, 8220), "HF Bronze Boulder 4", RHT_HF_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_BRONZE_BOULDER_4));
locationTable[RC_KAK_SILVER_BOULDER] = Location::Boulder(RC_KAK_SILVER_BOULDER, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1436, 1361), "Kak Silver Boulder", RHT_KAK_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_SILVER_BOULDER));
locationTable[RC_KAK_ROCK_1] = Location::Rock(RC_KAK_ROCK_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(220, -1236), "Kak Rock 1", RHT_KAK_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_ROCK_1));
locationTable[RC_KAK_ROCK_2] = Location::Rock(RC_KAK_ROCK_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-664, 1288), "Kak Rock 2", RHT_KAK_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_ROCK_2));
locationTable[RC_GY_ROCK] = Location::Rock(RC_GY_ROCK, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1193, 693), "GY Rock", RHT_GY_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_ROCK));
locationTable[RC_LH_ROCK] = Location::Rock(RC_LH_ROCK, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(1222, 3953), "LA Rock", RHT_LH_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_ROCK));
locationTable[RC_ZD_CIRCLE_ROCK_1] = Location::Rock(RC_ZD_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(462, -696), "ZD Circle Rock 1", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_1));
locationTable[RC_ZD_CIRCLE_ROCK_2] = Location::Rock(RC_ZD_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(518, -719), "ZD Circle Rock 2", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_2));
locationTable[RC_ZD_CIRCLE_ROCK_3] = Location::Rock(RC_ZD_CIRCLE_ROCK_3, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(542, -776), "ZD Circle Rock 3", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_3));
locationTable[RC_ZD_CIRCLE_ROCK_4] = Location::Rock(RC_ZD_CIRCLE_ROCK_4, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(518, -832), "ZD Circle Rock 4", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_4));
locationTable[RC_ZD_CIRCLE_ROCK_5] = Location::Rock(RC_ZD_CIRCLE_ROCK_5, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(462, -856), "ZD Circle Rock 5", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_5));
locationTable[RC_ZD_CIRCLE_ROCK_6] = Location::Rock(RC_ZD_CIRCLE_ROCK_6, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(405, -832), "ZD Circle Rock 6", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_6));
locationTable[RC_ZD_CIRCLE_ROCK_7] = Location::Rock(RC_ZD_CIRCLE_ROCK_7, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(382, -776), "ZD Circle Rock 7", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_7));
locationTable[RC_ZD_CIRCLE_ROCK_8] = Location::Rock(RC_ZD_CIRCLE_ROCK_8, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(405, -719), "ZD Circle Rock 8", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_8));
locationTable[RC_ZF_BOULDER] = Location::Boulder(RC_ZF_BOULDER, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(189, 2586), "ZF Boulder", RHT_ZF_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOULDER));
locationTable[RC_ZF_SILVER_BOULDER] = Location::Boulder(RC_ZF_SILVER_BOULDER, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(316, 2634), "ZF Silver Boulder", RHT_ZF_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_SILVER_BOULDER));
locationTable[RC_ZF_UNDERGROUND_BOULDER] = Location::Boulder(RC_ZF_UNDERGROUND_BOULDER, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(317, 2631), "ZF Underground Boulder", RHT_ZF_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_UNDERGROUND_BOULDER));
locationTable[RC_ZR_BOULDER_1] = Location::Boulder(RC_ZR_BOULDER_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1456, 434), "ZR Boulder 1", RHT_ZR_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BOULDER_1));
locationTable[RC_ZR_BOULDER_2] = Location::Boulder(RC_ZR_BOULDER_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1518, 435), "ZR Boulder 2", RHT_ZR_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BOULDER_2));
locationTable[RC_ZR_BOULDER_3] = Location::Boulder(RC_ZR_BOULDER_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1576, 430), "ZR Boulder 3", RHT_ZR_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BOULDER_3));
locationTable[RC_ZR_BOULDER_4] = Location::Boulder(RC_ZR_BOULDER_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1400, 482), "ZR Boulder 4", RHT_ZR_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BOULDER_4));
locationTable[RC_ZR_CIRCLE_ROCK_1] = Location::Rock(RC_ZR_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1635, -53), "ZR Circle Rock 1", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_1));
locationTable[RC_ZR_CIRCLE_ROCK_2] = Location::Rock(RC_ZR_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1578, -76), "ZR Circle Rock 2", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_2));
locationTable[RC_ZR_CIRCLE_ROCK_3] = Location::Rock(RC_ZR_CIRCLE_ROCK_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1555, -133), "ZR Circle Rock 3", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_3));
locationTable[RC_ZR_CIRCLE_ROCK_4] = Location::Rock(RC_ZR_CIRCLE_ROCK_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1578, -189), "ZR Circle Rock 4", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_4));
locationTable[RC_ZR_CIRCLE_ROCK_5] = Location::Rock(RC_ZR_CIRCLE_ROCK_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1635, -213), "ZR Circle Rock 5", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_5));
locationTable[RC_ZR_CIRCLE_ROCK_6] = Location::Rock(RC_ZR_CIRCLE_ROCK_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1691, -189), "ZR Circle Rock 6", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_6));
locationTable[RC_ZR_CIRCLE_ROCK_7] = Location::Rock(RC_ZR_CIRCLE_ROCK_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1715, -133), "ZR Circle Rock 7", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_7));
locationTable[RC_ZR_CIRCLE_ROCK_8] = Location::Rock(RC_ZR_CIRCLE_ROCK_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1691, -76), "ZR Circle Rock 8", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_CIRCLE_ROCK_8));
locationTable[RC_ZR_UPPER_CIRCLE_BOULDER] = Location::Boulder(RC_ZR_UPPER_CIRCLE_BOULDER, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(672, -366), "ZR Upper Circle Boulder", RHT_ZR_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_BOULDER));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_1] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(668, -290), "ZR Upper Circle Rock 1", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_1));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_2] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(724, -313), "ZR Upper Circle Rock 2", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_2));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_3] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(748, -370), "ZR Upper Circle Rock 3", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_3));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_4] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(724, -426), "ZR Upper Circle Rock 4", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_4));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_5] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(668, -450), "ZR Upper Circle Rock 5", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_5));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_6] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(611, -426), "ZR Upper Circle Rock 6", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_6));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_7] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(588, -370), "ZR Upper Circle Rock 7", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_7));
locationTable[RC_ZR_UPPER_CIRCLE_ROCK_8] = Location::Rock(RC_ZR_UPPER_CIRCLE_ROCK_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(611, -313), "ZR Upper Circle Rock 8", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UPPER_CIRCLE_ROCK_8));
locationTable[RC_ZR_ROCK] = Location::Rock(RC_ZR_ROCK, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2044, -786), "ZR Rock", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_ROCK));
locationTable[RC_ZR_UNDERWATER_ROCK_1] = Location::Rock(RC_ZR_UNDERWATER_ROCK_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2425, -446), "ZR Underwater Rock 1", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UNDERWATER_ROCK_1));
locationTable[RC_ZR_UNDERWATER_ROCK_2] = Location::Rock(RC_ZR_UNDERWATER_ROCK_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2425, -524), "ZR Underwater Rock 2", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UNDERWATER_ROCK_2));
locationTable[RC_ZR_UNDERWATER_ROCK_3] = Location::Rock(RC_ZR_UNDERWATER_ROCK_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2503, -571), "ZR Underwater Rock 3", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UNDERWATER_ROCK_3));
locationTable[RC_ZR_UNDERWATER_ROCK_4] = Location::Rock(RC_ZR_UNDERWATER_ROCK_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2550, -415), "ZR Underwater Rock 4", RHT_ZR_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_UNDERWATER_ROCK_4));
// 5 rocks by dc
locationTable[RC_DMT_ROCK_1] = Location::Rock(RC_DMT_ROCK_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1816, -513), "DMT Rock 1", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_ROCK_1));
locationTable[RC_DMT_ROCK_2] = Location::Rock(RC_DMT_ROCK_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1831, -614), "DMT Rock 2", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_ROCK_2));
locationTable[RC_DMT_ROCK_3] = Location::Rock(RC_DMT_ROCK_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1857, -536), "DMT Rock 3", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_ROCK_3));
locationTable[RC_DMT_ROCK_4] = Location::Rock(RC_DMT_ROCK_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1878, -465), "DMT Rock 4", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_ROCK_4));
locationTable[RC_DMT_ROCK_5] = Location::Rock(RC_DMT_ROCK_5, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1787, -550), "DMT Rock 5", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_ROCK_5));
locationTable[RC_DMT_SUMMIT_ROCK] = Location::Rock(RC_DMT_SUMMIT_ROCK, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-327, -4286), "DMT Summit Rock", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_SUMMIT_ROCK));
locationTable[RC_DMT_CIRCLE_ROCK_1] = Location::Rock(RC_DMT_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-383, -1126), "DMT Circle Rock 1", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_1));
locationTable[RC_DMT_CIRCLE_ROCK_2] = Location::Rock(RC_DMT_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-326, -1149), "DMT Circle Rock 2", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_2));
locationTable[RC_DMT_CIRCLE_ROCK_3] = Location::Rock(RC_DMT_CIRCLE_ROCK_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-303, -1206), "DMT Circle Rock 3", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_3));
locationTable[RC_DMT_CIRCLE_ROCK_4] = Location::Rock(RC_DMT_CIRCLE_ROCK_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-326, -1262), "DMT Circle Rock 4", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_4));
locationTable[RC_DMT_CIRCLE_ROCK_5] = Location::Rock(RC_DMT_CIRCLE_ROCK_5, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-383, -1286), "DMT Circle Rock 5", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_5));
locationTable[RC_DMT_CIRCLE_ROCK_6] = Location::Rock(RC_DMT_CIRCLE_ROCK_6, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-439, -1262), "DMT Circle Rock 6", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_6));
locationTable[RC_DMT_CIRCLE_ROCK_7] = Location::Rock(RC_DMT_CIRCLE_ROCK_7, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-463, -1206), "DMT Circle Rock 7", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_7));
locationTable[RC_DMT_CIRCLE_ROCK_8] = Location::Rock(RC_DMT_CIRCLE_ROCK_8, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-439, -1149), "DMT Circle Rock 8", RHT_DMT_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CIRCLE_ROCK_8));
locationTable[RC_DMT_CHILD_BOULDER] = Location::Boulder(RC_DMT_CHILD_BOULDER, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1060, -51), "DMT Child Boulder", RHT_DMT_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_CHILD_BOULDER));
locationTable[RC_DMT_BOULDER_1] = Location::Boulder(RC_DMT_BOULDER_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-625, -55), "DMT Boulder 1", RHT_DMT_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BOULDER_1));
locationTable[RC_DMT_BOULDER_2] = Location::Boulder(RC_DMT_BOULDER_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-808, -59), "DMT Boulder 2", RHT_DMT_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BOULDER_2));
locationTable[RC_DMT_COW_BOULDER] = Location::Boulder(RC_DMT_COW_BOULDER, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-688, -285), "Cow Boulder", RHT_DMT_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_BOULDER));
locationTable[RC_DMT_BRONZE_BOULDER_1] = Location::Boulder(RC_DMT_BRONZE_BOULDER_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1175, -803), "DMT Bronze Boulder 1", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_1));
locationTable[RC_DMT_BRONZE_BOULDER_2] = Location::Boulder(RC_DMT_BRONZE_BOULDER_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1948, 1706), "DMT Bronze Boulder 2", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_2));
locationTable[RC_DMT_BRONZE_BOULDER_3] = Location::Boulder(RC_DMT_BRONZE_BOULDER_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-2019, 1101), "DMT Bronze Boulder 3", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_3));
locationTable[RC_DMT_BRONZE_BOULDER_4] = Location::Boulder(RC_DMT_BRONZE_BOULDER_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1658, -88), "DMT Bronze Boulder 4", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_4));
locationTable[RC_DMT_BRONZE_BOULDER_5] = Location::Boulder(RC_DMT_BRONZE_BOULDER_5, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1753, 445), "DMT Bronze Boulder 5", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_5));
locationTable[RC_DMT_BRONZE_BOULDER_6] = Location::Boulder(RC_DMT_BRONZE_BOULDER_6, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1018, 1283), "DMT Bronze Boulder 6", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_6));
locationTable[RC_DMT_BRONZE_BOULDER_7] = Location::Boulder(RC_DMT_BRONZE_BOULDER_7, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1986, 727), "DMT Bronze Boulder 7", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_7));
locationTable[RC_DMT_BRONZE_BOULDER_8] = Location::Boulder(RC_DMT_BRONZE_BOULDER_8, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-23, -3196), "DMT Bronze Boulder 8", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_8));
locationTable[RC_DMT_BRONZE_BOULDER_9] = Location::Boulder(RC_DMT_BRONZE_BOULDER_9, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-343, -2794), "DMT Bronze Boulder 9", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_9));
locationTable[RC_DMT_BRONZE_BOULDER_10] = Location::Boulder(RC_DMT_BRONZE_BOULDER_10, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-154, -2484), "DMT Bronze Boulder 10", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_10));
locationTable[RC_DMT_BRONZE_BOULDER_11] = Location::Boulder(RC_DMT_BRONZE_BOULDER_11, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1590, -402), "DMT Bronze Boulder 11", RHT_DMT_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BRONZE_BOULDER_11));
locationTable[RC_GC_LW_BOULDER_1] = Location::Boulder(RC_GC_LW_BOULDER_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(416, 1049), "GC Goron City Boulder 1", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LW_BOULDER_1));
locationTable[RC_GC_LW_BOULDER_2] = Location::Boulder(RC_GC_LW_BOULDER_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(470, 1031), "GC Goron City Boulder 2", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LW_BOULDER_2));
locationTable[RC_GC_LW_BOULDER_3] = Location::Boulder(RC_GC_LW_BOULDER_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(367, 1078), "GC Goron City Boulder 3", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LW_BOULDER_3));
locationTable[RC_GC_ENTRANCE_BOULDER_1] = Location::Boulder(RC_GC_ENTRANCE_BOULDER_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-670, 470), "GC Entrance Boulder 1", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_ENTRANCE_BOULDER_1));
locationTable[RC_GC_ENTRANCE_BOULDER_2] = Location::Boulder(RC_GC_ENTRANCE_BOULDER_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-607, 419), "GC Entrance Boulder 2", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_ENTRANCE_BOULDER_2));
locationTable[RC_GC_ENTRANCE_BOULDER_3] = Location::Boulder(RC_GC_ENTRANCE_BOULDER_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-756, 474), "GC Entrance Boulder 3", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_ENTRANCE_BOULDER_3));
locationTable[RC_GC_MAZE_SILVER_BOULDER_1] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1479, -794), "GC Maze Silver Boulder 1", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_1));
locationTable[RC_GC_MAZE_SILVER_BOULDER_2] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1478, -855), "GC Maze Silver Boulder 2", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_2));
locationTable[RC_GC_MAZE_SILVER_BOULDER_3] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1474, -624), "GC Maze Silver Boulder 3", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_3));
locationTable[RC_GC_MAZE_SILVER_BOULDER_4] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_4, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1471, -993), "GC Maze Silver Boulder 4", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_4));
locationTable[RC_GC_MAZE_SILVER_BOULDER_5] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_5, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1467, -1064), "GC Maze Silver Boulder 5", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_5));
locationTable[RC_GC_MAZE_SILVER_BOULDER_6] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_6, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1460, -1121), "GC Maze Silver Boulder 6", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_6));
locationTable[RC_GC_MAZE_SILVER_BOULDER_7] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_7, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1451, -567), "GC Maze Silver Boulder 7", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_7));
locationTable[RC_GC_MAZE_SILVER_BOULDER_8] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_8, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1448, -672), "GC Maze Silver Boulder 8", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_8));
locationTable[RC_GC_MAZE_SILVER_BOULDER_9] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_9, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1440, -1174), "GC Maze Silver Boulder 9", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_9));
locationTable[RC_GC_MAZE_SILVER_BOULDER_10] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_10, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1437, -1342), "GC Maze Silver Boulder 10", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_10));
locationTable[RC_GC_MAZE_SILVER_BOULDER_11] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_11, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1424, -1245), "GC Maze Silver Boulder 11", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_11));
locationTable[RC_GC_MAZE_SILVER_BOULDER_12] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_12, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1424, -609), "GC Maze Silver Boulder 12", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_12));
locationTable[RC_GC_MAZE_SILVER_BOULDER_13] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_13, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1399, -1300), "GC Maze Silver Boulder 13", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_13));
locationTable[RC_GC_MAZE_SILVER_BOULDER_14] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_14, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1394, -654), "GC Maze Silver Boulder 14", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_14));
locationTable[RC_GC_MAZE_SILVER_BOULDER_15] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_15, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1343, -698), "GC Maze Silver Boulder 15", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_15));
locationTable[RC_GC_MAZE_SILVER_BOULDER_16] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_16, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1319, -1086), "GC Maze Silver Boulder 16", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_16));
locationTable[RC_GC_MAZE_SILVER_BOULDER_17] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_17, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1312, -1039), "GC Maze Silver Boulder 17", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_17));
locationTable[RC_GC_MAZE_SILVER_BOULDER_18] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_18, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1306, -837), "GC Maze Silver Boulder 18", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_18));
locationTable[RC_GC_MAZE_SILVER_BOULDER_19] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_19, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1279, -656), "GC Maze Silver Boulder 19", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_19));
locationTable[RC_GC_MAZE_SILVER_BOULDER_20] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_20, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1255, -840), "GC Maze Silver Boulder 20", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_20));
locationTable[RC_GC_MAZE_SILVER_BOULDER_21] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_21, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1246, -1075), "GC Maze Silver Boulder 21", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_21));
locationTable[RC_GC_MAZE_SILVER_BOULDER_22] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_22, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1244, -589), "GC Maze Silver Boulder 22", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_22));
locationTable[RC_GC_MAZE_SILVER_BOULDER_23] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_23, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1210, -852), "GC Maze Silver Boulder 23", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_23));
locationTable[RC_GC_MAZE_SILVER_BOULDER_24] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_24, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1206, -627), "GC Maze Silver Boulder 24", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_24));
locationTable[RC_GC_MAZE_SILVER_BOULDER_25] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_25, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1187, -896), "GC Maze Silver Boulder 25", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_25));
locationTable[RC_GC_MAZE_SILVER_BOULDER_26] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_26, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1157, -954), "GC Maze Silver Boulder 26", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_26));
locationTable[RC_GC_MAZE_SILVER_BOULDER_27] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_27, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1130, -1137), "GC Maze Silver Boulder 27", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_27));
locationTable[RC_GC_MAZE_SILVER_BOULDER_28] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_28, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1120, -1001), "GC Maze Silver Boulder 28", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_28));
locationTable[RC_GC_MAZE_SILVER_BOULDER_29] = Location::Boulder(RC_GC_MAZE_SILVER_BOULDER_29, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1179, -1098), "GC Maze Silver Boulder 29", RHT_GC_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_SILVER_BOULDER_29));
locationTable[RC_GC_MAZE_BOULDER_1] = Location::Boulder(RC_GC_MAZE_BOULDER_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1342, -628), "GC Maze Boulder 1", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_1));
locationTable[RC_GC_MAZE_BOULDER_2] = Location::Boulder(RC_GC_MAZE_BOULDER_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1456, -501), "GC Maze Boulder 2", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_2));
locationTable[RC_GC_MAZE_BOULDER_3] = Location::Boulder(RC_GC_MAZE_BOULDER_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1233, -511), "GC Maze Boulder 3", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_3));
locationTable[RC_GC_MAZE_BOULDER_4] = Location::Boulder(RC_GC_MAZE_BOULDER_4, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1137, -657), "GC Maze Boulder 4", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_4));
locationTable[RC_GC_MAZE_BOULDER_5] = Location::Boulder(RC_GC_MAZE_BOULDER_5, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1124, -913), "GC Maze Boulder 5", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_5));
locationTable[RC_GC_MAZE_BOULDER_6] = Location::Boulder(RC_GC_MAZE_BOULDER_6, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1326, -771), "GC Maze Boulder 6", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_6));
locationTable[RC_GC_MAZE_BOULDER_7] = Location::Boulder(RC_GC_MAZE_BOULDER_7, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1469, -737), "GC Maze Boulder 7", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_7));
locationTable[RC_GC_MAZE_BOULDER_8] = Location::Boulder(RC_GC_MAZE_BOULDER_8, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1476, -921), "GC Maze Boulder 8", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_8));
locationTable[RC_GC_MAZE_BOULDER_9] = Location::Boulder(RC_GC_MAZE_BOULDER_9, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1391, -1087), "GC Maze Boulder 9", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_9));
locationTable[RC_GC_MAZE_BOULDER_10] = Location::Boulder(RC_GC_MAZE_BOULDER_10, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1222, -997), "GC Maze Boulder 10", RHT_GC_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BOULDER_10));
locationTable[RC_GC_MAZE_BRONZE_BOULDER_1] = Location::Boulder(RC_GC_MAZE_BRONZE_BOULDER_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1541, -631), "GC Maze Bronze Boulder 1", RHT_GC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BRONZE_BOULDER_1));
locationTable[RC_GC_MAZE_BRONZE_BOULDER_2] = Location::Boulder(RC_GC_MAZE_BRONZE_BOULDER_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1536, -861), "GC Maze Bronze Boulder 2", RHT_GC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BRONZE_BOULDER_2));
locationTable[RC_GC_MAZE_BRONZE_BOULDER_3] = Location::Boulder(RC_GC_MAZE_BRONZE_BOULDER_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1536, -1102), "GC Maze Bronze Boulder 3", RHT_GC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BRONZE_BOULDER_3));
locationTable[RC_GC_MAZE_BRONZE_BOULDER_4] = Location::Boulder(RC_GC_MAZE_BRONZE_BOULDER_4, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1534, -752), "GC Maze Bronze Boulder 4", RHT_GC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BRONZE_BOULDER_4));
locationTable[RC_GC_MAZE_BRONZE_BOULDER_5] = Location::Boulder(RC_GC_MAZE_BRONZE_BOULDER_5, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1536, -991), "GC Maze Bronze Boulder 5", RHT_GC_BRONZE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_BRONZE_BOULDER_5));
locationTable[RC_GC_MAZE_ROCK] = Location::Rock(RC_GC_MAZE_ROCK, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1197, -1329), "GC Maze Rock", RHT_GC_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_ROCK));
locationTable[RC_COLOSSUS_SILVER_BOULDER] = Location::Boulder(RC_COLOSSUS_SILVER_BOULDER, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(61, -1301), "Colossus Silver Boulder", RHT_COLOSSUS_SILVER_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_SILVER_BOULDER));
locationTable[RC_COLOSSUS_ROCK] = Location::Rock(RC_COLOSSUS_ROCK, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(1537, 667), "Colossus Rock", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_ROCK));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_1] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-250, -1272), "Colossus Circle 1 Rock 1", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_1));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_2] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-193, -1295), "Colossus Circle 1 Rock 2", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_2));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_3] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-170, -1352), "Colossus Circle 1 Rock 3", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_3));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_4] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_4, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-193, -1408), "Colossus Circle 1 Rock 4", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_4));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_5] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_5, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-250, -1432), "Colossus Circle 1 Rock 5", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_5));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_6] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_6, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-306, -1408), "Colossus Circle 1 Rock 6", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_6));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_7] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_7, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-330, -1352), "Colossus Circle 1 Rock 7", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_7));
locationTable[RC_COLOSSUS_CIRCLE_1_ROCK_8] = Location::Rock(RC_COLOSSUS_CIRCLE_1_ROCK_8, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-306, -1295), "Colossus Circle 1 Rock 8", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_8));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_1] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-834, -766), "Colossus Circle 2 Rock 1", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_1));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_2] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-777, -789), "Colossus Circle 2 Rock 2", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_2));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_3] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-754, -846), "Colossus Circle 2 Rock 3", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_3));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_4] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_4, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-777, -902), "Colossus Circle 2 Rock 4", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_4));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_5] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_5, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-834, -926), "Colossus Circle 2 Rock 5", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_5));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_6] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_6, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-890, -902), "Colossus Circle 2 Rock 6", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_6));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_7] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_7, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-914, -846), "Colossus Circle 2 Rock 7", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_7));
locationTable[RC_COLOSSUS_CIRCLE_2_ROCK_8] = Location::Rock(RC_COLOSSUS_CIRCLE_2_ROCK_8, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(-890, -789), "Colossus Circle 2 Rock 8", RHT_COLOSSUS_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_8));
locationTable[RC_HC_STORMS_GROTTO_ROCK_1] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1811, 813), "HC Storms Grotto Rock 1", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_1));
locationTable[RC_HC_STORMS_GROTTO_ROCK_2] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1867, 789), "HC Storms Grotto Rock 2", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_2));
locationTable[RC_HC_STORMS_GROTTO_ROCK_3] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1891, 733), "HC Storms Grotto Rock 3", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_3));
locationTable[RC_HC_STORMS_GROTTO_ROCK_4] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_4, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1867, 676), "HC Storms Grotto Rock 4", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_4));
locationTable[RC_HC_STORMS_GROTTO_ROCK_5] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_5, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1811, 653), "HC Storms Grotto Rock 5", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_5));
locationTable[RC_HC_STORMS_GROTTO_ROCK_6] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_6, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1754, 676), "HC Storms Grotto Rock 6", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_6));
locationTable[RC_HC_STORMS_GROTTO_ROCK_7] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_7, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1731, 733), "HC Storms Grotto Rock 7", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_7));
locationTable[RC_HC_STORMS_GROTTO_ROCK_8] = Location::Rock(RC_HC_STORMS_GROTTO_ROCK_8, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1754, 789), "HC Storms Grotto Rock 8", RHT_HC_STORMS_GROTTO_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_ROCK_8));
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));
locationTable[RC_DEKU_TREE_MQ_BOULDER_1] = Location::Boulder(RC_DEKU_TREE_MQ_BOULDER_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1237, 1558), "Deku Tree MQ Boulder 1", RHT_DEKU_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BOULDER_1));
locationTable[RC_DEKU_TREE_MQ_BOULDER_2] = Location::Boulder(RC_DEKU_TREE_MQ_BOULDER_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1183, 1522), "Deku Tree MQ Boulder 2", RHT_DEKU_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BOULDER_2));
locationTable[RC_DEKU_TREE_MQ_BOULDER_3] = Location::Boulder(RC_DEKU_TREE_MQ_BOULDER_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1129, 1469), "Deku Tree MQ Boulder 3", RHT_DEKU_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BOULDER_3));
locationTable[RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-435, -1720), "Dodongo's MQ Lobby Boulder 1", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1));
locationTable[RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(432, -1719), "Dodongo's MQ Lobby Boulder 2", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2));
locationTable[RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(807, -874), "Dodongo's MQ Mouth Bridge Boulder 1", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1));
locationTable[RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(802, -972), "Dodongo's MQ Mouth Bridge Boulder 2", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2));
locationTable[RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(783, -923), "Dodongo's MQ Mouth Bridge Boulder 3", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3));
locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2464, -402), "Dodongo's MQ Right Side Boulder 1", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1));
locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2942, -495), "Dodongo's MQ Right Side Boulder 2", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4219, -1651), "Dodongo's MQ Lizalfos Room Boulder 1", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4178, -1602), "Dodongo's MQ Lizalfos Room Boulder 2", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4162, -1581), "Dodongo's MQ Lizalfos Room Boulder 3", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4133, -1561), "Dodongo's MQ Lizalfos Room Boulder 4", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4091, -1510), "Dodongo's MQ Lizalfos Room Boulder 5", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4067, -1487), "Dodongo's MQ Lizalfos Room Boulder 6", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4028, -1472), "Dodongo's MQ Lizalfos Room Boulder 7", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3965, -1473), "Dodongo's MQ Lizalfos Room Boulder 8", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3898, -1467), "Dodongo's MQ Lizalfos Room Boulder 9", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3832, -1437), "Dodongo's MQ Lizalfos Room Boulder 10", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3799, -1383), "Dodongo's MQ Lizalfos Room Boulder 11", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11));
locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3760, -1318), "Dodongo's MQ Lizalfos Room Boulder 12", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12));
locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER] = Location::Boulder(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2737, -1058), "Dodongo's MQ Two Flames Boulder", RHT_DODONGOS_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER));
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), "Jabu 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), "Jabu 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), "Jabu 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), "Jabu MQ Holes 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), "Jabu MQ Holes 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), "Jabu MQ Holes 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), "Jabu 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), "Jabu 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), "Jabu 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), "Jabu 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
locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Spirit MQ Entrance Boulder 1", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1));
locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 270), "Spirit MQ Entrance Boulder 2", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2));
locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(350, 220), "Spirit MQ Entrance Eye Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER));
locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0, -60), "Spirit MQ Entrance Ceiling Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER));
locationTable[RC_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1060, -680), "Spirit MQ Crawlspace Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER));
locationTable[RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-593, -1340), "Spirit MQ Gibdo Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER));
locationTable[RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-421, -1036), "Spirit MQ Gibdo Low Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW));
locationTable[RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-786, -930), "Spirit MQ Gibdo High Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH));
locationTable[RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER] = Location::Boulder(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1070, -290), "Spirit MQ Early Adult Boulder", RHT_SPIRIT_TEMPLE_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER));
locationTable[RC_BOTW_MQ_BOULDER_1] = Location::Boulder(RC_BOTW_MQ_BOULDER_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-370, -160), "BotW MQ Boulder 1", RHT_BOTW_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_MQ_BOULDER_1));
locationTable[RC_BOTW_MQ_BOULDER_2] = Location::Boulder(RC_BOTW_MQ_BOULDER_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-521, -353), "BotW MQ Boulder 2", RHT_BOTW_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_MQ_BOULDER_2));
locationTable[RC_BOTW_MQ_BOULDER_3] = Location::Boulder(RC_BOTW_MQ_BOULDER_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-541, -404), "BotW MQ Boulder 3", RHT_BOTW_BOULDER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_MQ_BOULDER_3));
// clang-format-on
}
static RegisterShipInitFunc initFunc(RegisterShuffleRock, { "IS_RANDO" });
static RegisterShipInitFunc initFunc2(Rando::StaticData::RegisterRockLocations);
@@ -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
@@ -32,13 +32,10 @@ uint8_t Sign_RandomizerHoldsItem(Actor* actor, PlayState* play) {
static void Sign_RandomizerDraw(Actor* actor, Color_RGBA8* primColor, Color_RGBA8* secColor, Color_RGBA8* envColor) {
Vec3f pos;
static Vec3f velocity = { 0.0f, 0.0f, 0.0f };
static Vec3f accel = { 0.0f, 0.0f, 0.0f };
Vec3f velocity = { 0.0f, -0.05f, 0.0f };
Vec3f accel = { 0.0f, -0.025f, 0.0f };
float yKanbanOffset = LINK_IS_CHILD && actor->id == ACTOR_EN_KANBAN ? 15.0f : 0.0f;
velocity.y = -0.05f;
accel.y = -0.025f;
pos.x = Rand_CenteredFloat(10.0f) + actor->world.pos.x;
pos.y = (Rand_ZeroOne() * 10.0f) + actor->world.pos.y + yKanbanOffset;
pos.z = Rand_CenteredFloat(10.0f) + actor->world.pos.z;
@@ -47,7 +44,6 @@ static void Sign_RandomizerDraw(Actor* actor, Color_RGBA8* primColor, Color_RGBA
}
void Sign_RandomizerDrawSetup(void* actor) {
GetItemCategory getItemCategory;
Actor* signActor = (Actor*)actor;
// If not a randomized item or too far, don't draw
@@ -60,10 +56,6 @@ void Sign_RandomizerDrawSetup(void* actor) {
int isNotCMC = !cmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY));
Color_RGBA8 primColor;
Color_RGBA8 secColor;
Color_RGBA8 envColor;
const auto signIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(signActor);
if (signIdentity == nullptr) {
return;
@@ -71,14 +63,11 @@ void Sign_RandomizerDrawSetup(void* actor) {
GetItemEntry signItem =
Rando::Context::GetInstance()->GetFinalGIEntry(signIdentity->randomizerCheck, true, GI_NONE);
getItemCategory = Randomizer_AdjustItemCategory(signItem);
GetItemCategory getItemCategory = isNotCMC ? ITEM_CATEGORY_MAJOR : Randomizer_AdjustItemCategory(signItem);
if (isNotCMC) {
getItemCategory = ITEM_CATEGORY_MAJOR;
}
primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
secColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_SECONDARY);
envColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_FLARE);
Color_RGBA8 primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
Color_RGBA8 secColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_SECONDARY);
Color_RGBA8 envColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_FLARE);
Sign_RandomizerDraw(signActor, &primColor, &secColor, &envColor);
}
@@ -128,11 +128,8 @@ uint8_t EnWonderItem_RandomizerHoldsItem(EnWonderItem* wonderActor, PlayState* p
static void EnWonderItem_RandomizerDraw(EnWonderItem* wonderActor, Color_RGBA8* primColor, Color_RGBA8* secColor,
Color_RGBA8* envColor, CheckIdentity* wonderIdentity) {
Vec3f pos;
static Vec3f velocity = { 0.0f, 0.0f, 0.0f };
static Vec3f accel = { 0.0f, 0.0f, 0.0f };
velocity.y = -0.05f;
accel.y = -0.025f;
Vec3f velocity = { 0.0f, -0.05f, 0.0f };
Vec3f accel = { 0.0f, -0.025f, 0.0f };
// Draw particles at tag spots if applicable, otherwise at wonder item actor location
if (wonderActor->wonderMode == WONDERITEM_MULTITAG_ORDERED) {
@@ -166,7 +163,6 @@ static void EnWonderItem_RandomizerDraw(EnWonderItem* wonderActor, Color_RGBA8*
}
void EnWonderItem_RandomizerDrawSetup(void* refActor) {
GetItemCategory getItemCategory;
EnWonderItem* wonderActor = static_cast<EnWonderItem*>(refActor);
// If not a randomized item or too far, don't draw.
@@ -185,10 +181,6 @@ void EnWonderItem_RandomizerDrawSetup(void* refActor) {
int isNotCMC = !cmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY));
Color_RGBA8 primColor;
Color_RGBA8 secColor;
Color_RGBA8 envColor;
const auto wonderIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(refActor);
if (wonderIdentity == nullptr) {
return;
@@ -196,14 +188,11 @@ void EnWonderItem_RandomizerDrawSetup(void* refActor) {
GetItemEntry wonderItem =
Rando::Context::GetInstance()->GetFinalGIEntry(wonderIdentity->randomizerCheck, true, GI_NONE);
getItemCategory = Randomizer_AdjustItemCategory(wonderItem);
GetItemCategory getItemCategory = isNotCMC ? ITEM_CATEGORY_MAJOR : Randomizer_AdjustItemCategory(wonderItem);
if (isNotCMC) {
getItemCategory = ITEM_CATEGORY_MAJOR;
}
primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
secColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_SECONDARY);
envColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_FLARE);
Color_RGBA8 primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
Color_RGBA8 secColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_SECONDARY);
Color_RGBA8 envColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_FLARE);
EnWonderItem_RandomizerDraw(wonderActor, &primColor, &secColor, &envColor, wonderIdentity);
}
@@ -562,6 +562,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::Tree(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_,
RandomizerHintTextKey hintKey, RandomizerGet vanillaItem,
+10 -18
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);
}
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);
}
excludedOption = LocationOption(rc, spoilerName);
}
static std::string SpoilerNameFromShortName(std::string shortName, RandomizerCheckArea area) {
@@ -245,6 +229,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 Tree(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_,
int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey,
RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck);
@@ -203,6 +203,13 @@ void RegionTable_Init_BottomOfTheWell() {
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, logic->CanCutShrubs()),
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)) ||
(ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_FAIRY_BOW))),
LOCATION(RC_BOTW_BOULDER_4, logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_5, logic->BlastOrSmash()),
LOCATION(RC_BOTW_BOULDER_6, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_BOTW_HIDDEN_POTS, logic->CanClimbHighLadder()),
@@ -213,7 +220,15 @@ void RegionTable_Init_BottomOfTheWell() {
ENTRANCE(RR_BOTW_B3_CHEST_AREA, AnyAgeTime([]{return logic->BlastOrSmash();})),
});
areaTable[RR_BOTW_B3_BOMB_FLOWERS] = Region("Bottom of the Well B3 Bomb Flowers", SCENE_BOTTOM_OF_THE_WELL, {}, {}, {
areaTable[RR_BOTW_B3_BOMB_FLOWERS] = Region("Bottom of the Well B3 Bomb Flowers", SCENE_BOTTOM_OF_THE_WELL, {}, {
//Locations
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->CanDetonateUprightBombFlower()),
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_BOTW_B3_OOZE, logic->CanDetonateUprightBombFlower()),
ENTRANCE(RR_BOTW_B3_BLOCKED_GRASS, logic->HasItem(RG_GORONS_BRACELET)),
@@ -284,7 +299,10 @@ void RegionTable_Init_BottomOfTheWell() {
(ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->IsChild ? logic->CanHitEyeTargets() : logic->CanUse(RG_FAIRY_SLINGSHOT))),
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_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTW_MQ_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_3, logic->BlastOrSmash()),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4, logic->CanUse(RG_FAIRY_SLINGSHOT)),
@@ -362,7 +380,11 @@ void RegionTable_Init_BottomOfTheWell() {
areaTable[RR_BOTW_MQ_PIT_CAGE] = Region("Bottom of the Well MQ Pit Cage", SCENE_BOTTOM_OF_THE_WELL, {
//Events
EVENT_ACCESS(LOGIC_BOTW_MQ_OPENED_WEST_ROOM, true),
}, {}, {
}, {
//Locations
LOCATION(RC_BOTW_MQ_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_BOTW_MQ_BOULDER_3, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_BOTW_MQ_PERIMETER, logic->BlastOrSmash() && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || ctx->GetTrickOption(RT_BOTW_PITS))),
ENTRANCE(RR_BOTW_MQ_MIDDLE, (bool)ctx->GetTrickOption(RT_BOTW_PITS)),
@@ -379,9 +401,9 @@ void RegionTable_Init_BottomOfTheWell() {
areaTable[RR_BOTW_MQ_CRYPT] = Region("Bottom of the Well MQ Crypt", SCENE_BOTTOM_OF_THE_WELL, {}, {
//Locations
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_BOTW_MQ_BEHIND_MOAT, logic->SmallKeys(SCENE_BOTTOM_OF_THE_WELL, 2)),
@@ -318,16 +318,26 @@ void RegionTable_Init_DekuTree() {
LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_1, logic->CanUse(RG_BOOMERANG) &&
AnyAgeTime([]{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)));})),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_2, logic->CanUse(RG_BOOMERANG) &&
AnyAgeTime([]{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)));})),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_3, logic->CanUse(RG_BOOMERANG) &&
AnyAgeTime([]{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)));})),
}, {
//Exits
ENTRANCE(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, true),
ENTRANCE(RR_DEKU_TREE_MQ_PAST_BOULDER_VINES, (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME))) && AnyAgeTime([]{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))) || (logic->CanUse(RG_MEGATON_HAMMER) && ((logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)) || (ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS) && logic->HasItem(RG_CLIMB))));})),
ENTRANCE(RR_DEKU_TREE_MQ_PAST_BOULDER_VINES, (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME))) &&
AnyAgeTime([]{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))) || (logic->CanUse(RG_MEGATON_HAMMER) && ((logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)) || (ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS) && logic->HasItem(RG_CLIMB))));})),
});
areaTable[RR_DEKU_TREE_MQ_PAST_BOULDER_VINES] = Region("Deku Tree MQ Past Boulder Vines", SCENE_DEKU_TREE, {}, {
//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, logic->BlastOrSmash()),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_2, logic->BlastOrSmash()),
LOCATION(RC_DEKU_TREE_MQ_BOULDER_3, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_DEKU_TREE_MQ_COMPASS_ROOM, logic->BlastOrSmash()),
@@ -292,6 +292,8 @@ void RegionTable_Init_DodongosCavern() {
LOCATION(RC_DODONGOS_CAVERN_MQ_MAP_CHEST, (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, logic->CanStunDeku() && logic->HasItem(RG_SPEAK_DEKU) && GetCheckPrice() <= GetWalletCapacity()),
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku() && logic->HasItem(RG_SPEAK_DEKU) && GetCheckPrice() <= GetWalletCapacity()),
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_BEGINNING, true),
@@ -331,7 +333,10 @@ void RegionTable_Init_DodongosCavern() {
EVENT_ACCESS(LOGIC_DC_EYES_LIT, logic->HasExplosives() || (logic->Get(LOGIC_DC_MQ_CLEAR_UPPER_LOBBY_ROCKS) && logic->HasItem(RG_GORONS_BRACELET) && ((logic->IsAdult && ctx->GetTrickOption(RT_DC_MQ_ADULT_EYES)) || (logic->IsChild && ctx->GetTrickOption(RT_DC_MQ_CHILD_EYES))))),
}, {
//Locations
LOCATION(RC_DODONGOS_CAVERN_TOP_FLOOR_PEDESTAL, logic->CanRead()),
LOCATION(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1, logic->Get(LOGIC_DC_MQ_CLEAR_UPPER_LOBBY_ROCKS)),
LOCATION(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2, logic->Get(LOGIC_DC_MQ_CLEAR_UPPER_LOBBY_ROCKS)),
LOCATION(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3, logic->Get(LOGIC_DC_MQ_CLEAR_UPPER_LOBBY_ROCKS)),
LOCATION(RC_DODONGOS_CAVERN_TOP_FLOOR_PEDESTAL, logic->CanRead()),
}, {
//Exits
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
@@ -456,6 +461,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() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4, logic->BlastOrSmash()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5, logic->BlastOrSmash()),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12, logic->BlastOrSmash() && (logic->TakeDamage() || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_BOOMERANG))),
}, {
//Exits
//Falling down gets you stuck with nothing there, not a useful exit for logic
@@ -469,11 +486,12 @@ void RegionTable_Init_DodongosCavern() {
LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()),
LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER, logic->BlastOrSmash() || (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanHitSwitch() || ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP)))),
}, {
//Exits
ENTRANCE(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, true),
//crate platforming skips the puzzle
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, logic->IsAdult || (AnyAgeTime([]{return logic->BlastOrSmash() || (logic->CanAttack() && logic->HasItem(RG_GORONS_BRACELET));}))),
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, logic->IsAdult || (AnyAgeTime([]{return logic->BlastOrSmash() || (logic->CanAttack() && logic->HasItem(RG_GORONS_BRACELET));})) || ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP)),
});
areaTable[RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER] = Region("Dodongos Cavern MQ Torch Puzzle Upper", SCENE_DODONGOS_CAVERN, {
@@ -495,10 +513,12 @@ void RegionTable_Init_DodongosCavern() {
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Region("Dodongos Cavern MQ Lower Right Side", SCENE_DODONGOS_CAVERN, {}, {
//Locations
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, logic->CanBreakPots()),
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_POT_1, logic->CanBreakPots()),
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) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_FAIRY_BOW))),
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2, logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE) && (logic->EffectiveHealth() != 1 || logic->CanUse(RG_NAYRUS_LOVE)))),
}, {
//Exits
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
@@ -21,7 +21,9 @@ void RegionTable_Init_ForestTemple() {
areaTable[RR_FOREST_TEMPLE_TREES] = Region("Forest Temple Trees", SCENE_FOREST_TEMPLE, {}, {
//Locations
LOCATION(RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_LONGSHOT)) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_FOREST_TEMPLE_GS_FIRST_ROOM, (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_LONGSHOT)) && ((logic->IsAdult && logic->CanUse(RG_BOMB_BAG)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOMBCHU_5) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_FOREST_FIRST_GS) && (logic->CanJumpslashExceptHammer() || (logic->IsChild && logic->CanUse(RG_BOMB_BAG)))))),
LOCATION(RC_FOREST_TEMPLE_GS_FIRST_ROOM, (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_LONGSHOT)) &&
(logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOOMERANG) || ((logic->IsAdult || ctx->GetTrickOption(RT_BOMB_DETONATION)) && logic->CanUse(RG_BOMB_BAG)) ||
(ctx->GetTrickOption(RT_FOREST_FIRST_GS) && logic->CanJumpslashExceptHammer()))),
}, {
//Exits
ENTRANCE(RR_FOREST_TEMPLE_ENTRYWAY, true),
@@ -274,6 +274,7 @@ void RegionTable_Init_JabuJabusBelly() {
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_ENTRYWAY, true),
@@ -323,9 +324,14 @@ void RegionTable_Init_JabuJabusBelly() {
EVENT_ACCESS(LOGIC_JABU_MQ_FORKED_ROOM_DOOR, (logic->HasExplosives() || ctx->GetTrickOption(RT_BOULDER_COLLISION)) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, logic->CanCutShrubs() && logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, logic->CanCutShrubs() && logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_COW, (logic->HasExplosives() || ctx->GetTrickOption(RT_BOULDER_COLLISION)) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, logic->CanCutShrubs() && logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, logic->CanCutShrubs() && logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_HOLES_COW, (logic->HasExplosives() || ctx->GetTrickOption(RT_BOULDER_COLLISION)) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
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, true),
@@ -387,7 +393,11 @@ void RegionTable_Init_JabuJabusBelly() {
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, true),
});
areaTable[RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR] = Region("Jabu Jabus Belly MQ Forked Corridor", SCENE_JABU_JABU, {}, {}, {
areaTable[RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR] = Region("Jabu Jabus Belly MQ Forked Corridor", SCENE_JABU_JABU, {}, {
//Locations
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, logic->CanUse(RG_BOOMERANG)),
//If some mode lets an age use sticks and not sling, and other use sling and not sticks, this needs changing
@@ -422,7 +432,9 @@ void RegionTable_Init_JabuJabusBelly() {
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_WEST] = Region("Jabu Jabus Belly MQ Fork North West", SCENE_JABU_JABU, {}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, logic->HasExplosives() && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, logic->BlastOrSmash() && 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->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_TO_FORK_NORTH_WEST, true),
@@ -567,6 +567,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_EYE_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER, logic->CanUse(RG_BOMBCHU_5)),
LOCATION(RC_SPIRIT_TEMPLE_LEFT_SNAKE_STATUE, logic->CanRead()),
LOCATION(RC_SPIRIT_TEMPLE_RIGHT_SNAKE_STATUE, logic->CanRead()),
}, {
@@ -579,7 +583,6 @@ void RegionTable_Init_SpiritTemple() {
areaTable[RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB] = Region("Spirit Temple MQ Child Side Hub", SCENE_SPIRIT_TEMPLE, {
//Events
//not technically a rusted switch, but a boulder through a wall, but is part of the same trick on N64
EVENT_ACCESS(LOGIC_SPIRIT_MQ_CRAWL_BOULDER, logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_VISIBLE_COLLISION) && logic->CanUse(RG_MEGATON_HAMMER))),
}, {
//Locations
@@ -589,9 +592,9 @@ void RegionTable_Init_SpiritTemple() {
(ctx->GetTrickOption(RT_FIRE_RINGS) && ctx->GetTrickOption(RT_VISIBLE_COLLISION) && logic->TakeDamage() && logic->CanJumpslash())),
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, logic->CanHitEyeTargets() || logic->CanUse(RG_BOOMERANG) ||
(ctx->GetTrickOption(RT_FIRE_RINGS) && ctx->GetTrickOption(RT_VISIBLE_COLLISION) && logic->TakeDamage() && logic->CanJumpslash())),
LOCATION(RC_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER, logic->Get(LOGIC_SPIRIT_MQ_CRAWL_BOULDER) && logic->CanUse(RG_CRAWL)),
}, {
//Exits
//Nabooru's legs are technically visible one way collision here, but I'm not sure if this counts
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_FOYER, logic->CanUse(RG_CRAWL)),
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_GIBDO_GRAVES, AnyAgeTime([]{return logic->CanKillEnemy(RE_TORCH_SLUG);})),
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_ANUBIS_BRIDGE_CHEST, AnyAgeTime([]{return logic->CanKillEnemy(RE_TORCH_SLUG);})),
@@ -603,7 +606,11 @@ void RegionTable_Init_SpiritTemple() {
EVENT_ACCESS(LOGIC_SPIRIT_MQ_GIBDOS_CLEARED, logic->HasItem(RG_POWER_BRACELET) &&
((logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets()) || logic->CanUse(RG_HOVER_BOOTS)/* || (IsAdult && CanBunnyJump())*/)
&& logic->CanKillEnemy(RE_GIBDO, ED_CLOSE, true, 3)),
}, {}, {
}, {
//Location
LOCATION(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH, logic->BlastOrSmash()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, true),
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_GIBDO_POTS, logic->HasItem(RG_POWER_BRACELET) &&
@@ -615,6 +622,7 @@ void RegionTable_Init_SpiritTemple() {
//Locations
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, logic->CanBreakPots()),
LOCATION(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_TURNTABLE, logic->Get(LOGIC_SPIRIT_MQ_GIBDOS_CLEARED)),
@@ -916,8 +924,9 @@ void RegionTable_Init_SpiritTemple() {
EVENT_ACCESS(LOGIC_SPIRIT_1F_SILVER_RUPEES, logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//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_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_FOYER, logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanStandingShield() && (logic->CanUseSword() || logic->CanUse(RG_STICKS)))),
@@ -28,6 +28,9 @@ void RegionTable_Init_CastleGrounds() {
}, {
//Locations
LOCATION(RC_HC_MALON_EGG, logic->HasItem(RG_SPEAK_HYLIAN)),
LOCATION(RC_HC_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_HC_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_HC_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_HC_GS_TREE, logic->CanBonkTrees() && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
LOCATION(RC_HC_SKULLTULA_TREE, logic->CanBonkTrees()),
}, {
@@ -56,6 +59,7 @@ void RegionTable_Init_CastleGrounds() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanUse(RG_STICKS)),
}, {
//Locations
LOCATION(RC_HC_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_HC_NEAR_GUARDS_TREE_1, logic->CanBonkTrees()),
LOCATION(RC_HC_NEAR_GUARDS_TREE_2, logic->CanBonkTrees()),
LOCATION(RC_HC_NEAR_GUARDS_TREE_3, logic->CanBonkTrees()),
@@ -68,7 +72,7 @@ void RegionTable_Init_CastleGrounds() {
LOCATION(RC_HC_NEAR_STAIRS_BUTTERFLY_FAIRY, logic->CanUse(RG_STICKS)),
LOCATION(RC_HC_NEAR_BOULDER_PATH_BUTTERFLY_FAIRY, logic->CanUse(RG_STICKS)),
LOCATION(RC_HC_NEAR_ARCHWAY_BUTTERFLY_FAIRY, logic->CanUse(RG_STICKS)),
LOCATION(RC_HC_DEAD_END_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_HC_DEAD_END_RECTANGLE_SIGN, logic->CanRead()),
}, {
//Exits
ENTRANCE(RR_HC_GATE, true),
@@ -165,6 +169,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, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_HC_STORMS_GROTTO_ROCK_8, logic->CanBreakRocks()),
}, {
//Exits
ENTRANCE(RR_HC_STORMS_GROTTO, true),
@@ -180,7 +192,14 @@ void RegionTable_Init_CastleGrounds() {
EVENT_ACCESS(LOGIC_BUILD_RAINBOW_BRIDGE, logic->CanBuildRainbowBridge()),
}, {
//Locations
LOCATION(RC_OGC_GS, logic->HookshotOrBoomerang() || ((logic->CanJumpslashExceptHammer() || logic->CanUseProjectile() || (logic->CanShield() && logic->CanUse(RG_MEGATON_HAMMER)) || logic->CanUse(RG_DINS_FIRE)) && ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))) ,
LOCATION(RC_OGC_GS, logic->HookshotOrBoomerang() || ((logic->CanJumpslashExceptHammer() || logic->CanUseProjectile() || (logic->CanShield() && logic->CanUse(RG_MEGATON_HAMMER)) || logic->CanUse(RG_DINS_FIRE)) && ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))) ,
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, logic->AtNight),
@@ -248,7 +248,22 @@ void RegionTable_Init_DeathMountainCrater() {
ENTRANCE(RR_DEATH_MOUNTAIN_SUMMIT, true),
});
areaTable[RR_DMC_ROCK_GROTTO] = Region("DMC Rock Grotto", SCENE_DEATH_MOUNTAIN_CRATER, {}, {}, {
areaTable[RR_DMC_ROCK_GROTTO] = Region("DMC Rock Grotto", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
//Locations
LOCATION(RC_DMC_CIRCLE_ROCK_1, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_2, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_3, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_4, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_5, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_6, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_7, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
LOCATION(RC_DMC_CIRCLE_ROCK_8, logic->FireTimer() >= 8 && logic->CanBreakRocks()),
//Boulders 1 and 2 are a bit separate, but are in 8 seconds from upper entry and closeer or the same distance
//from all ways to reach upper grotto otherwise, so it works
LOCATION(RC_DMC_BOULDER_1, logic->FireTimer() >= 8 && logic->BlastOrSmash()),
LOCATION(RC_DMC_BOULDER_2, logic->FireTimer() >= 8 && logic->BlastOrSmash()),
LOCATION(RC_DMC_BOULDER_3, logic->FireTimer() >= 8 && logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_DMC_UPPER_GROTTO, AnyAgeTime([]{return logic->BlastOrSmash();})),
});
@@ -260,7 +275,9 @@ void RegionTable_Init_DeathMountainCrater() {
//Locations
LOCATION(RC_DMC_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() && logic->HasExplosives()),
LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) && logic->HasExplosives()),
LOCATION(RC_DMC_GOSSIP_STONE, true && logic->HasExplosives()),
LOCATION(RC_DMC_GOSSIP_ROCK_1, logic->IsChild),
LOCATION(RC_DMC_GOSSIP_ROCK_2, logic->IsChild),
LOCATION(RC_DMC_GOSSIP_STONE, logic->HasExplosives()),
}, {});
areaTable[RR_DMC_SCRUB] = Region("DMC Scrub", SCENE_DEATH_MOUNTAIN_CRATER, {
@@ -282,11 +299,15 @@ void RegionTable_Init_DeathMountainCrater() {
areaTable[RR_DMC_POTS] = Region("DMC Pots", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
// Locations
LOCATION(RC_DMC_NEAR_GC_POT_1, logic->CanBreakPots()),
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_BRIDGE_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_DMC_NEAR_GC_POT_1, logic->CanBreakPots()),
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_SHORTCUT, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMC_BRIDGE_EXIT_ARROW_SIGN, logic->CanRead()),
}, {
//Exits
ENTRANCE(RR_GC_DARUNIAS_CHAMBER, true),
@@ -316,9 +337,13 @@ void RegionTable_Init_DeathMountainCrater() {
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_CRATER_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_CRATER_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_CRATER_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
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),
// RANDOTODO: A number of tricks to reach this: sidehop jumpslash or hookshot + jumpslash from bridge platform, chu+shield damage boost
LOCATION(RC_DMC_WONDER_BENEATH_BRIDGE_PLATFORM, logic->IsAdult && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
}, {});
@@ -10,20 +10,44 @@ void RegionTable_Init_DeathMountainTrail() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
}, {
//Locations
LOCATION(RC_DMT_CHEST, (logic->BlastOrSmash() || (ctx->GetTrickOption(RT_DMT_BOMBABLE) && logic->IsChild && logic->HasItem(RG_GORONS_BRACELET))) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_DMT_FREESTANDING_POH, logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL, RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))),
LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash() && (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->CanGetNightTimeGS() &&
((logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_ITEM_EXTENSION) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DMT_JS_LOWER_GS) && logic->CanJumpslash())) ||
((ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL, RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) &&
(logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || ((ctx->GetTrickOption(RT_BOULDER_COLLISION) || ctx->GetTrickOption(RT_ITEM_EXTENSION)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || logic->CanJumpslash())))),
LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && 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->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && 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_CHEST, (logic->BlastOrSmash() || (ctx->GetTrickOption(RT_DMT_BOMBABLE) && logic->IsChild && logic->HasItem(RG_GORONS_BRACELET))) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_DMT_FREESTANDING_POH, logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL, RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))),
LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash() && (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->CanGetNightTimeGS() &&
((logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_ITEM_EXTENSION) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DMT_JS_LOWER_GS) && logic->CanJumpslash())) ||
((ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL, RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) &&
(logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || ((ctx->GetTrickOption(RT_BOULDER_COLLISION) || ctx->GetTrickOption(RT_ITEM_EXTENSION)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || logic->CanJumpslash())))),
LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && 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->HasItem(RG_DEATH_MOUNTAIN_TRAIL_BEAN_SOUL) && 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, logic->CanBreakRocks()),
LOCATION(RC_DMT_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_DMT_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_DMT_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_DMT_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_DMT_CIRCLE_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_DMT_CHILD_BOULDER, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_BOULDER_1, logic->BlastOrSmash()),
LOCATION(RC_DMT_BOULDER_2, 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_11, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_DMT_ABOVE_DODONGO_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_DMT_ADULT_CENTER_EXIT_ARROW_SIGN, logic->IsAdult && logic->CanRead()),
LOCATION(RC_DMT_CHILD_CENTER_EXIT_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
@@ -47,6 +71,10 @@ void RegionTable_Init_DeathMountainTrail() {
(logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_ITEM_EXTENSION) && logic->CanUse(RG_HOOKSHOT)) ||
(ctx->GetTrickOption(RT_DMT_UPPER_GS) && (logic->CanJumpslash() || logic->CanUse(RG_DINS_FIRE) || logic->HasExplosives() || (ctx->GetTrickOption(RT_ITEM_EXTENSION) && logic->CanUse(RG_FAIRY_SLINGSHOT)) ||
(ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT)))))),
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_COW_BOULDER, logic->BlastOrSmash()),
}, {
//Exits
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, true),
@@ -66,6 +94,7 @@ void RegionTable_Init_DeathMountainTrail() {
LOCATION(RC_DMT_TRADE_CLAIM_CHECK, logic->IsAdult && logic->CanUse(RG_CLAIM_CHECK)),
LOCATION(RC_DMT_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
LOCATION(RC_DMT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_DMT_SUMMIT_ROCK, logic->IsChild && logic->CanBreakRocks()),
LOCATION(RC_DMT_GOSSIP_STONE, true),
LOCATION(RC_BIGGORON_HINT, logic->IsAdult && logic->HasItem(RG_SPEAK_GORON)),
LOCATION(RC_DMT_UPPER_EXIT_ARROW_SIGN, logic->CanRead()),
@@ -19,12 +19,30 @@ void RegionTable_Init_DesertColossus() {
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DESERT_COLOSSUS_BEAN_SOUL) && 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_GOSSIP_STONE, true),
LOCATION(RC_COLOSSUS_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
LOCATION(RC_COLOSSUS_ROCK, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_1_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_CIRCLE_2_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_COLOSSUS_WONDER_OASIS_TREE_1, (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))),
LOCATION(RC_COLOSSUS_WONDER_OASIS_TREE_2, (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))),
LOCATION(RC_COLOSSUS_WONDER_OASIS_CHILD_TREE, logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_COLOSSUS_WONDER_GF_TREE_1, (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))),
LOCATION(RC_COLOSSUS_WONDER_GF_TREE_2, (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))),
LOCATION(RC_COLOSSUS_GOSSIP_STONE, true),
}, {
//Exits
//You can kinda get the fairies without entering the water, but it relies on them cooperating and leevers are jerks. should be a trick
@@ -11,6 +11,20 @@ void RegionTable_Init_GerudoValley() {
}, {
//Locations
LOCATION(RC_GV_GS_SMALL_BRIDGE, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_GV_GS_SMALL_BRIDGE, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_GV_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_GV_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_GV_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_GV_UNDERWATER_ROCK_1, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_VOIDOUT_COLLECTION) && logic->HasItem(RG_POWER_BRACELET)))),
LOCATION(RC_GV_UNDERWATER_ROCK_2, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_VOIDOUT_COLLECTION) && logic->HasItem(RG_POWER_BRACELET)))),
LOCATION(RC_GV_UNDERWATER_ROCK_3, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_VOIDOUT_COLLECTION) && logic->HasItem(RG_POWER_BRACELET)))),
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)),
LOCATION(RC_GV_BRIDGE_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_GV_EAST_EXIT_ARROW_SIGN, logic->CanRead()),
}, {
@@ -71,7 +85,10 @@ void RegionTable_Init_GerudoValley() {
ENTRANCE(RR_GV_UPPER_STREAM_WATER, true),
});
areaTable[RR_GV_GROTTO_LEDGE] = Region("GV Grotto Ledge", SCENE_GERUDO_VALLEY, {}, {}, {
areaTable[RR_GV_GROTTO_LEDGE] = Region("GV Grotto Ledge", SCENE_GERUDO_VALLEY, {}, {
//Locations
LOCATION(RC_GV_SILVER_BOULDER, logic->CanUse(RG_SILVER_GAUNTLETS)),
}, {
//Exits
ENTRANCE(RR_GV_UPPER_STREAM, ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->TakeDamage()),
ENTRANCE(RR_GV_LOWER_STREAM, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
@@ -91,14 +108,25 @@ void RegionTable_Init_GerudoValley() {
areaTable[RR_GV_FORTRESS_SIDE] = Region("GV Fortress Side", SCENE_GERUDO_VALLEY, {}, {
//Locations
LOCATION(RC_GV_CHEST, logic->IsAdult && (logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT))) && logic->HasItem(RG_OPEN_CHEST)),
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_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()),
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) || (ctx->GetTrickOption(RT_BOULDER_COLLISION) && logic->CanUse(RG_LONGSHOT))) && logic->HasItem(RG_OPEN_CHEST)),
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_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()),
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_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_GF_OUTSKIRTS, true),
@@ -35,6 +35,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->Get(LOGIC_GORON_CITY_WOODS_WARP_OPEN)),
LOCATION(RC_GC_LW_BOULDER_2, logic->Get(LOGIC_GORON_CITY_WOODS_WARP_OPEN)),
LOCATION(RC_GC_LW_BOULDER_3, logic->Get(LOGIC_GORON_CITY_WOODS_WARP_OPEN)),
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)),
LOCATION(RC_GC_CHILD_ROLLING_GORON_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
}, {
//Exits
@@ -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, RG_GRAVEYARD_BEAN_SOUL)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()),
LOCATION(RC_GY_ROCK, logic->CanBreakRocks()),
LOCATION(RC_GY_NEAR_HUT_GRAVE_BUTTERFLY_FAIRY, logic->IsChild && logic->AtDay && logic->CanUse(RG_STICKS)),
LOCATION(RC_GY_ENTRANCE_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_GY_ENTRANCE_PLINTH, logic->CanRead()),
@@ -62,6 +62,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, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_HF_ROCK_8, logic->CanBreakRocks()),
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)),
LOCATION(RC_HF_NEAR_LLR_TREE, logic->CanBonkTrees()),
LOCATION(RC_HF_NEAR_LH_TREE, logic->CanBonkTrees()),
LOCATION(RC_HF_CHILD_NEAR_GV_TREE, logic->IsChild && logic->CanBonkTrees()),
@@ -23,7 +23,7 @@ void RegionTable_Init_Kakariko() {
LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS() && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && logic->HasItem(RG_CLIMB) && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && logic->HasItem(RG_CLIMB) && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()),
@@ -59,6 +59,10 @@ 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) &&
(logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOVER_BOOTS) || (logic->HasItem(RG_LONGSHOT) && ((logic->AtDay && logic->HasItem(RG_POWER_BRACELET)) || (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->CanJumpslash() && logic->TakeDamage()))))),
LOCATION(RC_KAK_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_KAK_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_KAK_TREE, logic->CanBonkTrees()),
LOCATION(RC_KAK_GUARD_GATE_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KAK_WELL_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
@@ -67,6 +67,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, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_KF_CIRCLE_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_KF_ROCK_BY_SARIAS_HOUSE, logic->IsChild && logic->CanBreakRocks()),
LOCATION(RC_KF_ROCK_BEHIND_SARIAS_HOUSE, logic->IsChild && logic->CanBreakRocks()),
LOCATION(RC_KF_ROCK_BY_MIDOS_HOUSE, logic->IsChild && logic->CanBreakRocks()),
LOCATION(RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE, logic->IsChild && logic->CanBreakRocks()),
LOCATION(RC_KF_DEKU_TREE_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_KF_STEPPING_STONES_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_KF_LINKS_HOUSE_RECTANGLE_SIGN, logic->CanRead()),
@@ -108,6 +108,7 @@ void RegionTable_Init_LakeHylia() {
areaTable[RR_LH_FISHING_ISLAND] = Region("LH Fishing Island", SCENE_LAKE_HYLIA, {}, {
//Locations
LOCATION(RC_LH_ROCK, logic->CanBreakRocks()),
LOCATION(RC_LH_FISHING_SIGN, logic->CanRead()),
}, {
//Exits
@@ -48,6 +48,7 @@ void RegionTable_Init_LostWoods() {
LOCATION(RC_LW_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_LW_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_LW_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_LW_BOULDER_BY_GORON_CITY, logic->BlastOrSmash()),
LOCATION(RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_1, logic->IsChild),
LOCATION(RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_2, logic->IsChild),
LOCATION(RC_LW_WONDER_FRONT_SKULL_KIDS_GRASS, logic->IsChild),
@@ -96,6 +97,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()),
LOCATION(RC_LW_MEADOW_BUTTERFLY_FAIRY, logic->IsChild && logic->CanUse(RG_STICKS)),
}, {
//Exits
@@ -27,7 +27,6 @@ void RegionTable_Init_ZorasDomain() {
LOCATION(RC_ZD_FISH_5, logic->IsChild && logic->HasBottle()),
LOCATION(RC_ZD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
LOCATION(RC_ZD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_ZD_GOSSIP_STONE, true),
LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, logic->IsChild && logic->CanBreakUpperBeehives()),
LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, logic->IsChild && logic->CanBreakUpperBeehives()),
LOCATION(RC_ZD_NEAR_SHOP_POT_1, logic->CanBreakPots()),
@@ -35,6 +34,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, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_ZD_CIRCLE_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_ZD_SHOP_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_ZD_ENTRANCE_RECTANGLE_SIGN, logic->CanRead()),
LOCATION(RC_ZD_KING_ZORA_PATH_ARROW_SIGN, logic->CanRead()),
@@ -42,6 +49,7 @@ void RegionTable_Init_ZorasDomain() {
LOCATION(RC_ZD_NEAR_KING_ZORA_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_ZD_KING_ZORA_RED_ICE, logic->IsAdult && logic->Get(LOGIC_KING_ZORA_THAWED)),
LOCATION(RC_ZD_ZORA_SHOP_RED_ICE, logic->IsAdult && logic->BlueFire()),
LOCATION(RC_ZD_GOSSIP_STONE, true),
}, {
//Exits
ENTRANCE(RR_ZR_BEHIND_WATERFALL, true),
@@ -22,6 +22,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()),
LOCATION(RC_ZF_TREE, logic->IsChild && logic->CanBonkTrees()),
LOCATION(RC_ZF_BUSH_1, logic->IsChild),
LOCATION(RC_ZF_BUSH_2, logic->IsChild),
@@ -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()),
LOCATION(RC_ZR_TREE, logic->IsChild && logic->CanBonkTrees()),
// Require backflip with Iron Boots
LOCATION(RC_ZR_WONDER_LOWER_RIVER_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
@@ -59,7 +63,23 @@ 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) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true),
LOCATION(RC_ZR_CIRCLE_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_ZR_CIRCLE_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_ZR_ROCK, logic->CanBreakRocks()),
LOCATION(RC_ZR_UNDERWATER_ROCK_1, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_UNDERWATER_ROCK_2, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_UNDERWATER_ROCK_3, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_UNDERWATER_ROCK_4, (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_BOMB_DETONATION)) || (logic->IsAdult && logic->HasItem(RG_POWER_BRACELET))) &&
(logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanUse(RG_BOOMERANG)),
LOCATION(RC_ZR_NEAR_ROCK_CIRCLE_BUTTERFLY_FAIRY, logic->IsChild && logic->CanUse(RG_STICKS)),
LOCATION(RC_ZR_WATERFALL_BUTTERFLY_FAIRY, logic->IsChild && logic->CanUse(RG_STICKS)),
@@ -91,6 +111,7 @@ void RegionTable_Init_ZoraRiver() {
LOCATION(RC_ZR_WONDER_NEAR_CUCCO_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))), // Requires backflip with Iron Boots
LOCATION(RC_ZR_WONDER_NEAR_CUCCO_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))), // Requires backflip with Iron Boots
LOCATION(RC_ZR_WONDER_NEAR_CUCCO_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))),
LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true),
}, {
//Exits
ENTRANCE(RR_ZR_FRONT, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_POWER_BRACELET) || logic->BlastOrSmash() || logic->HasItem(RG_HOVER_BOOTS)),
@@ -109,6 +130,15 @@ void RegionTable_Init_ZoraRiver() {
LOCATION(RC_ZR_GS_NEAR_RAISED_GROTTOS, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && logic->CanGetNightTimeGS()),
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_ZR_UPPER_CIRCLE_BOULDER, logic->BlastOrSmash()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_1, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_2, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_3, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_4, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_5, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_6, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_7, logic->CanBreakRocks()),
LOCATION(RC_ZR_UPPER_CIRCLE_ROCK_8, logic->CanBreakRocks()),
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true),
}, {
//Exits
@@ -1330,6 +1330,10 @@ bool Logic::CanBreakSmallCrates() {
return CanJumpslash() || HasExplosives() || HasItem(RG_POWER_BRACELET);
}
bool Logic::CanBreakRocks() {
return BlastOrSmash() || HasItem(RG_POWER_BRACELET);
}
bool Logic::CanBonkTrees() {
return true;
}
+1
View File
@@ -104,6 +104,7 @@ class Logic {
bool CanBreakPots(EnemyDistance distance = ED_CLOSE, bool wallOrFloor = true, bool inWater = false);
bool CanBreakCrates();
bool CanBreakSmallCrates();
bool CanBreakRocks();
bool CanBonkTrees();
bool CanRead();
bool HasFireSource();
@@ -550,6 +550,8 @@ void Settings::CreateOptionDescriptions() {
"Overworld - Only shuffle grass that are outside of dungeons.\n"
"\n"
"All Grass - Shuffle all grass.";
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"
+309 -11
View File
@@ -2852,6 +2852,287 @@ 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_SHORTCUT, RAND_INF_DMC_BRONZE_BOULDER_SHORTCUT },
{ 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_LH_ROCK, RAND_INF_LH_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_CHILD_BOULDER, RAND_INF_DMT_CHILD_BOULDER },
{ RC_DMT_BOULDER_1, RAND_INF_DMT_BOULDER_1 },
{ RC_DMT_BOULDER_2, RAND_INF_DMT_BOULDER_2 },
{ 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_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER },
{ 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_EYE_BOULDER, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER },
{ 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 },
{ RC_MARKET_TREE, RAND_INF_MARKET_TREE },
{ RC_HC_NEAR_GUARDS_TREE_1, RAND_INF_HC_NEAR_GUARDS_TREE_1 },
{ RC_HC_NEAR_GUARDS_TREE_2, RAND_INF_HC_NEAR_GUARDS_TREE_2 },
@@ -3504,7 +3785,7 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
};
CheckIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) {
struct CheckIdentity beehiveIdentity;
CheckIdentity beehiveIdentity;
beehiveIdentity.randomizerInf = RAND_INF_MAX;
beehiveIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
@@ -3526,7 +3807,6 @@ CheckIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respa
}
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) {
@@ -3750,7 +4030,7 @@ ShopItemIdentity Randomizer::IdentifyShopItem(s32 sceneNum, u8 slotIndex) {
}
CheckIdentity Randomizer::IdentifyCow(s32 sceneNum, s32 posX, s32 posZ) {
struct CheckIdentity cowIdentity;
CheckIdentity cowIdentity;
cowIdentity.randomizerInf = RAND_INF_MAX;
cowIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
@@ -3772,7 +4052,7 @@ CheckIdentity Randomizer::IdentifyCow(s32 sceneNum, s32 posX, s32 posZ) {
}
CheckIdentity Randomizer::IdentifyPot(s32 sceneNum, s32 posX, s32 posZ) {
struct CheckIdentity potIdentity;
CheckIdentity potIdentity;
uint32_t potSceneNum = sceneNum;
if (sceneNum == SCENE_GANONDORF_BOSS) {
@@ -3797,7 +4077,7 @@ CheckIdentity Randomizer::IdentifyPot(s32 sceneNum, s32 posX, s32 posZ) {
}
CheckIdentity Randomizer::IdentifyFish(s32 sceneNum, s32 actorParams) {
struct CheckIdentity fishIdentity;
CheckIdentity fishIdentity;
fishIdentity.randomizerInf = RAND_INF_MAX;
fishIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
@@ -3818,7 +4098,7 @@ CheckIdentity Randomizer::IdentifyFish(s32 sceneNum, s32 actorParams) {
}
CheckIdentity Randomizer::IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge) {
struct CheckIdentity grassIdentity;
CheckIdentity grassIdentity;
grassIdentity.randomizerInf = RAND_INF_MAX;
grassIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
@@ -3880,7 +4160,7 @@ CheckIdentity Randomizer::IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 re
}
CheckIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) {
struct CheckIdentity crateIdentity;
CheckIdentity crateIdentity;
uint32_t crateSceneNum = sceneNum;
// pretend night is day to align crates in market and align GF child/adult crates
@@ -3913,7 +4193,7 @@ CheckIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) {
}
CheckIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ) {
struct CheckIdentity smallCrateIdentity;
CheckIdentity smallCrateIdentity;
uint32_t smallCrateSceneNum = sceneNum;
smallCrateIdentity.randomizerInf = RAND_INF_MAX;
@@ -3934,8 +4214,26 @@ CheckIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ) {
return smallCrateIdentity;
}
CheckIdentity Randomizer::IdentifyRock(s32 sceneNum, s32 posX, s32 posZ) {
CheckIdentity 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();
} else {
LUSLOG_WARN("IdentifyRock did not receive a valid RC value %d,%d.", posX, posZ);
}
return rockIdentity;
}
CheckIdentity Randomizer::IdentifyTree(s32 sceneNum, s32 posX, s32 posZ) {
struct CheckIdentity treeIdentity;
CheckIdentity treeIdentity;
if (sceneNum == SCENE_MARKET_NIGHT) {
sceneNum = SCENE_MARKET_DAY;
@@ -3956,7 +4254,7 @@ CheckIdentity Randomizer::IdentifyTree(s32 sceneNum, s32 posX, s32 posZ) {
}
CheckIdentity Randomizer::IdentifySign(s32 sceneNum, s32 posX, s32 posZ, s32 id) {
struct CheckIdentity signIdentity;
CheckIdentity signIdentity;
uint32_t signSceneNum = sceneNum;
Rando::Location* location = nullptr;
@@ -4015,7 +4313,7 @@ CheckIdentity Randomizer::IdentifySign(s32 sceneNum, s32 posX, s32 posZ, s32 id)
}
CheckIdentity Randomizer::IdentifyWonderItem(s32 sceneNum, s32 par1, s32 par2) {
struct CheckIdentity wonderIdentity;
CheckIdentity wonderIdentity;
uint32_t wonderSceneNum = sceneNum;
// align oasis trees in colossus between child/adult
@@ -42,6 +42,7 @@ class Randomizer {
CheckIdentity IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge);
CheckIdentity IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ);
CheckIdentity IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ);
CheckIdentity IdentifyRock(s32 sceneNum, s32 posX, s32 posZ);
CheckIdentity IdentifyTree(s32 sceneNum, s32 posX, s32 posZ);
CheckIdentity IdentifySign(s32 sceneNum, s32 posX, s32 posZ, s32 id);
CheckIdentity IdentifyWonderItem(s32 sceneNum, s32 par1, s32 par2);
@@ -1563,6 +1563,294 @@ RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)
// End Crates
// Start Rocks
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RC_KF_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RC_KF_ROCK_BY_SARIAS_HOUSE)
RANDO_ENUM_ITEM(RC_KF_ROCK_BEHIND_SARIAS_HOUSE)
RANDO_ENUM_ITEM(RC_KF_ROCK_BY_MIDOS_HOUSE)
RANDO_ENUM_ITEM(RC_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE)
RANDO_ENUM_ITEM(RC_LW_BOULDER_BY_GORON_CITY)
RANDO_ENUM_ITEM(RC_LW_BOULDER_BY_SACRED_FOREST_MEADOW)
RANDO_ENUM_ITEM(RC_LW_RUPEE_BOULDER)
RANDO_ENUM_ITEM(RC_HC_ROCK_1)
RANDO_ENUM_ITEM(RC_HC_ROCK_2)
RANDO_ENUM_ITEM(RC_HC_ROCK_3)
RANDO_ENUM_ITEM(RC_HC_BOULDER)
RANDO_ENUM_ITEM(RC_OGC_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_OGC_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_OGC_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RC_OGC_SILVER_BOULDER_1)
RANDO_ENUM_ITEM(RC_OGC_SILVER_BOULDER_2)
RANDO_ENUM_ITEM(RC_OGC_SILVER_BOULDER_3)
RANDO_ENUM_ITEM(RC_OGC_SILVER_BOULDER_4)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RC_DMC_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RC_DMC_ROCK_BY_FIRE_TEMPLE_1)
RANDO_ENUM_ITEM(RC_DMC_ROCK_BY_FIRE_TEMPLE_2)
RANDO_ENUM_ITEM(RC_DMC_ROCK_BY_FIRE_TEMPLE_3)
RANDO_ENUM_ITEM(RC_DMC_ROCK_BY_FIRE_TEMPLE_4)
RANDO_ENUM_ITEM(RC_DMC_ROCK_BY_FIRE_TEMPLE_5)
RANDO_ENUM_ITEM(RC_DMC_GOSSIP_ROCK_1)
RANDO_ENUM_ITEM(RC_DMC_GOSSIP_ROCK_2)
RANDO_ENUM_ITEM(RC_DMC_BOULDER_1)
RANDO_ENUM_ITEM(RC_DMC_BOULDER_2)
RANDO_ENUM_ITEM(RC_DMC_BOULDER_3)
RANDO_ENUM_ITEM(RC_DMC_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_DMC_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_DMC_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RC_DMC_BRONZE_BOULDER_SHORTCUT)
RANDO_ENUM_ITEM(RC_GV_SILVER_BOULDER)
RANDO_ENUM_ITEM(RC_GV_ROCK_1)
RANDO_ENUM_ITEM(RC_GV_ROCK_2)
RANDO_ENUM_ITEM(RC_GV_ROCK_3)
RANDO_ENUM_ITEM(RC_GV_UNDERWATER_ROCK_1)
RANDO_ENUM_ITEM(RC_GV_UNDERWATER_ROCK_2)
RANDO_ENUM_ITEM(RC_GV_UNDERWATER_ROCK_3)
RANDO_ENUM_ITEM(RC_GV_ROCK_ACROSS_BRIDGE_1)
RANDO_ENUM_ITEM(RC_GV_ROCK_ACROSS_BRIDGE_2)
RANDO_ENUM_ITEM(RC_GV_ROCK_ACROSS_BRIDGE_3)
RANDO_ENUM_ITEM(RC_GV_ROCK_ACROSS_BRIDGE_4)
RANDO_ENUM_ITEM(RC_GV_BOULDER_1)
RANDO_ENUM_ITEM(RC_GV_BOULDER_2)
RANDO_ENUM_ITEM(RC_GV_BOULDER_ACROSS_BRIDGE)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5)
RANDO_ENUM_ITEM(RC_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6)
RANDO_ENUM_ITEM(RC_HF_SILVER_BOULDER)
RANDO_ENUM_ITEM(RC_HF_ROCK_1)
RANDO_ENUM_ITEM(RC_HF_ROCK_2)
RANDO_ENUM_ITEM(RC_HF_ROCK_3)
RANDO_ENUM_ITEM(RC_HF_ROCK_4)
RANDO_ENUM_ITEM(RC_HF_ROCK_5)
RANDO_ENUM_ITEM(RC_HF_ROCK_6)
RANDO_ENUM_ITEM(RC_HF_ROCK_7)
RANDO_ENUM_ITEM(RC_HF_ROCK_8)
RANDO_ENUM_ITEM(RC_HF_BOULDER_NORTH)
RANDO_ENUM_ITEM(RC_HF_BOULDER_BY_MARKET)
RANDO_ENUM_ITEM(RC_HF_BOULDER_SOUTH)
RANDO_ENUM_ITEM(RC_HF_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_HF_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_HF_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RC_HF_BRONZE_BOULDER_4)
RANDO_ENUM_ITEM(RC_KAK_SILVER_BOULDER)
RANDO_ENUM_ITEM(RC_KAK_ROCK_1)
RANDO_ENUM_ITEM(RC_KAK_ROCK_2)
RANDO_ENUM_ITEM(RC_GY_ROCK)
RANDO_ENUM_ITEM(RC_LH_ROCK)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RC_ZD_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RC_ZF_BOULDER)
RANDO_ENUM_ITEM(RC_ZF_SILVER_BOULDER)
RANDO_ENUM_ITEM(RC_ZF_UNDERGROUND_BOULDER)
RANDO_ENUM_ITEM(RC_ZR_BOULDER_1)
RANDO_ENUM_ITEM(RC_ZR_BOULDER_2)
RANDO_ENUM_ITEM(RC_ZR_BOULDER_3)
RANDO_ENUM_ITEM(RC_ZR_BOULDER_4)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RC_ZR_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_BOULDER)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RC_ZR_UPPER_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RC_ZR_ROCK)
RANDO_ENUM_ITEM(RC_ZR_UNDERWATER_ROCK_1)
RANDO_ENUM_ITEM(RC_ZR_UNDERWATER_ROCK_2)
RANDO_ENUM_ITEM(RC_ZR_UNDERWATER_ROCK_3)
RANDO_ENUM_ITEM(RC_ZR_UNDERWATER_ROCK_4)
RANDO_ENUM_ITEM(RC_DMT_ROCK_1)
RANDO_ENUM_ITEM(RC_DMT_ROCK_2)
RANDO_ENUM_ITEM(RC_DMT_ROCK_3)
RANDO_ENUM_ITEM(RC_DMT_ROCK_4)
RANDO_ENUM_ITEM(RC_DMT_ROCK_5)
RANDO_ENUM_ITEM(RC_DMT_SUMMIT_ROCK)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RC_DMT_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RC_DMT_CHILD_BOULDER)
RANDO_ENUM_ITEM(RC_DMT_BOULDER_1)
RANDO_ENUM_ITEM(RC_DMT_BOULDER_2)
RANDO_ENUM_ITEM(RC_DMT_COW_BOULDER)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_4)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_5)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_6)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_7)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_8)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_9)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_10)
RANDO_ENUM_ITEM(RC_DMT_BRONZE_BOULDER_11)
RANDO_ENUM_ITEM(RC_GC_LW_BOULDER_1)
RANDO_ENUM_ITEM(RC_GC_LW_BOULDER_2)
RANDO_ENUM_ITEM(RC_GC_LW_BOULDER_3)
RANDO_ENUM_ITEM(RC_GC_ENTRANCE_BOULDER_1)
RANDO_ENUM_ITEM(RC_GC_ENTRANCE_BOULDER_2)
RANDO_ENUM_ITEM(RC_GC_ENTRANCE_BOULDER_3)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_1)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_2)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_3)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_4)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_5)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_6)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_7)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_8)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_9)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_10)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_11)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_12)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_13)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_14)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_15)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_16)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_17)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_18)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_19)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_20)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_21)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_22)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_23)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_24)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_25)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_26)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_27)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_28)
RANDO_ENUM_ITEM(RC_GC_MAZE_SILVER_BOULDER_29)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_3)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_4)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_5)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_6)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_7)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_8)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_9)
RANDO_ENUM_ITEM(RC_GC_MAZE_BOULDER_10)
RANDO_ENUM_ITEM(RC_GC_MAZE_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RC_GC_MAZE_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RC_GC_MAZE_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RC_GC_MAZE_BRONZE_BOULDER_4)
RANDO_ENUM_ITEM(RC_GC_MAZE_BRONZE_BOULDER_5)
RANDO_ENUM_ITEM(RC_GC_MAZE_ROCK)
RANDO_ENUM_ITEM(RC_COLOSSUS_SILVER_BOULDER)
RANDO_ENUM_ITEM(RC_COLOSSUS_ROCK)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_1)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_2)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_3)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_4)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_5)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_6)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_7)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_1_ROCK_8)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_1)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_2)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_3)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_4)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_5)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_6)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_7)
RANDO_ENUM_ITEM(RC_COLOSSUS_CIRCLE_2_ROCK_8)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_1)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_2)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_3)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_4)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_5)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_6)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_7)
RANDO_ENUM_ITEM(RC_HC_STORMS_GROTTO_ROCK_8)
RANDO_ENUM_ITEM(RC_BOTW_BOULDER_1)
RANDO_ENUM_ITEM(RC_BOTW_BOULDER_2)
RANDO_ENUM_ITEM(RC_BOTW_BOULDER_3)
RANDO_ENUM_ITEM(RC_BOTW_BOULDER_4)
RANDO_ENUM_ITEM(RC_BOTW_BOULDER_5)
RANDO_ENUM_ITEM(RC_BOTW_BOULDER_6)
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_BOULDER_1)
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_BOULDER_2)
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_BOULDER_3)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12)
RANDO_ENUM_ITEM(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER)
RANDO_ENUM_ITEM(RC_BOTW_MQ_BOULDER_1)
RANDO_ENUM_ITEM(RC_BOTW_MQ_BOULDER_2)
RANDO_ENUM_ITEM(RC_BOTW_MQ_BOULDER_3)
// End Rocks
// Start Trees
RANDO_ENUM_ITEM(RC_MARKET_TREE)
RANDO_ENUM_ITEM(RC_HC_NEAR_GUARDS_TREE_1)
@@ -1580,6 +1580,48 @@ RANDO_ENUM_ITEM(RHT_DEKU_TREE_GRASS)
RANDO_ENUM_ITEM(RHT_DODONGOS_CAVERN_GRASS)
RANDO_ENUM_ITEM(RHT_BOTTOM_OF_THE_WELL_GRASS)
RANDO_ENUM_ITEM(RHT_JABU_JABUS_BELLY_GRASS)
// ROCKS
RANDO_ENUM_ITEM(RHT_KF_ROCK)
RANDO_ENUM_ITEM(RHT_LW_BOULDER)
RANDO_ENUM_ITEM(RHT_HC_ROCK)
RANDO_ENUM_ITEM(RHT_HC_BOULDER)
RANDO_ENUM_ITEM(RHT_OGC_BRONZE_BOULDER)
RANDO_ENUM_ITEM(RHT_OGC_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_DMC_ROCK)
RANDO_ENUM_ITEM(RHT_DMC_BOULDER)
RANDO_ENUM_ITEM(RHT_DMC_BRONZE_BOULDER)
RANDO_ENUM_ITEM(RHT_GV_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_GV_ROCK)
RANDO_ENUM_ITEM(RHT_GV_BOULDER)
RANDO_ENUM_ITEM(RHT_GV_BRONZE_BOULDER)
RANDO_ENUM_ITEM(RHT_HF_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_HF_ROCK)
RANDO_ENUM_ITEM(RHT_HF_BOULDER)
RANDO_ENUM_ITEM(RHT_HF_BRONZE_BOULDER)
RANDO_ENUM_ITEM(RHT_KAK_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_KAK_ROCK)
RANDO_ENUM_ITEM(RHT_GY_ROCK)
RANDO_ENUM_ITEM(RHT_LH_ROCK)
RANDO_ENUM_ITEM(RHT_ZD_ROCK)
RANDO_ENUM_ITEM(RHT_ZF_BOULDER)
RANDO_ENUM_ITEM(RHT_ZF_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_ZR_BOULDER)
RANDO_ENUM_ITEM(RHT_ZR_ROCK)
RANDO_ENUM_ITEM(RHT_DMT_ROCK)
RANDO_ENUM_ITEM(RHT_DMT_BOULDER)
RANDO_ENUM_ITEM(RHT_DMT_BRONZE_BOULDER)
RANDO_ENUM_ITEM(RHT_GC_BOULDER)
RANDO_ENUM_ITEM(RHT_GC_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_GC_BRONZE_BOULDER)
RANDO_ENUM_ITEM(RHT_GC_ROCK)
RANDO_ENUM_ITEM(RHT_COLOSSUS_SILVER_BOULDER)
RANDO_ENUM_ITEM(RHT_COLOSSUS_ROCK)
RANDO_ENUM_ITEM(RHT_HC_STORMS_GROTTO_ROCK)
RANDO_ENUM_ITEM(RHT_BOTW_BOULDER)
RANDO_ENUM_ITEM(RHT_DEKU_BOULDER)
RANDO_ENUM_ITEM(RHT_DODONGOS_BOULDER)
RANDO_ENUM_ITEM(RHT_JABU_BOULDER)
RANDO_ENUM_ITEM(RHT_SPIRIT_TEMPLE_BOULDER)
// SIGNS
RANDO_ENUM_ITEM(RHT_SIGN_KOKIRI_FOREST)
RANDO_ENUM_ITEM(RHT_SIGN_LINKS_HOUSE)
@@ -1023,6 +1023,291 @@ RANDO_ENUM_ITEM(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)
RANDO_ENUM_ITEM(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_KF_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_KF_ROCK_BY_SARIAS_HOUSE)
RANDO_ENUM_ITEM(RAND_INF_KF_ROCK_BEHIND_SARIAS_HOUSE)
RANDO_ENUM_ITEM(RAND_INF_KF_ROCK_BY_MIDOS_HOUSE)
RANDO_ENUM_ITEM(RAND_INF_KF_ROCK_BY_KNOW_IT_ALLS_HOUSE)
RANDO_ENUM_ITEM(RAND_INF_LW_BOULDER_BY_GORON_CITY)
RANDO_ENUM_ITEM(RAND_INF_LW_BOULDER_BY_SACRED_FOREST_MEADOW)
RANDO_ENUM_ITEM(RAND_INF_LW_RUPEE_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_HC_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_HC_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_HC_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_HC_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_OGC_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_OGC_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_OGC_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_OGC_SILVER_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_OGC_SILVER_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_OGC_SILVER_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_OGC_SILVER_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_DMC_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_1)
RANDO_ENUM_ITEM(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_2)
RANDO_ENUM_ITEM(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_3)
RANDO_ENUM_ITEM(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_4)
RANDO_ENUM_ITEM(RAND_INF_DMC_ROCK_BY_FIRE_TEMPLE_5)
RANDO_ENUM_ITEM(RAND_INF_DMC_GOSSIP_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_DMC_GOSSIP_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_DMC_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DMC_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DMC_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_DMC_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DMC_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DMC_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_DMC_BRONZE_BOULDER_SHORTCUT)
RANDO_ENUM_ITEM(RAND_INF_GV_SILVER_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_GV_UNDERWATER_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_GV_UNDERWATER_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_GV_UNDERWATER_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_ACROSS_BRIDGE_1)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_ACROSS_BRIDGE_2)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_ACROSS_BRIDGE_3)
RANDO_ENUM_ITEM(RAND_INF_GV_ROCK_ACROSS_BRIDGE_4)
RANDO_ENUM_ITEM(RAND_INF_GV_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GV_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GV_BOULDER_ACROSS_BRIDGE)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_1)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_2)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_3)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_4)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_5)
RANDO_ENUM_ITEM(RAND_INF_GV_BRONZE_BOULDER_ACROSS_BRIDGE_6)
RANDO_ENUM_ITEM(RAND_INF_HF_SILVER_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_HF_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_HF_BOULDER_NORTH)
RANDO_ENUM_ITEM(RAND_INF_HF_BOULDER_BY_MARKET)
RANDO_ENUM_ITEM(RAND_INF_HF_BOULDER_SOUTH)
RANDO_ENUM_ITEM(RAND_INF_HF_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_HF_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_HF_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_HF_BRONZE_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_KAK_SILVER_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_KAK_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_KAK_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_GY_ROCK)
RANDO_ENUM_ITEM(RAND_INF_LH_ROCK)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_ZD_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_ZF_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_ZF_SILVER_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_ZF_UNDERGROUND_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_ZR_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_ZR_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_ZR_UPPER_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_ZR_ROCK)
RANDO_ENUM_ITEM(RAND_INF_ZR_UNDERWATER_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_UNDERWATER_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_UNDERWATER_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_UNDERWATER_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_DMT_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_DMT_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_DMT_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_DMT_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_DMT_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_DMT_SUMMIT_ROCK)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_DMT_CIRCLE_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_DMT_CHILD_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_DMT_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DMT_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DMT_COW_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_5)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_6)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_7)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_8)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_9)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_10)
RANDO_ENUM_ITEM(RAND_INF_DMT_BRONZE_BOULDER_11)
RANDO_ENUM_ITEM(RAND_INF_GC_LW_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GC_LW_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GC_LW_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_GC_ENTRANCE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GC_ENTRANCE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GC_ENTRANCE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_5)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_6)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_7)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_8)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_9)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_10)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_11)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_12)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_13)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_14)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_15)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_16)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_17)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_18)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_19)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_20)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_21)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_22)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_23)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_24)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_25)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_26)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_27)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_28)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_SILVER_BOULDER_29)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_5)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_6)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_7)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_8)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_9)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BOULDER_10)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BRONZE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BRONZE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BRONZE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BRONZE_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_BRONZE_BOULDER_5)
RANDO_ENUM_ITEM(RAND_INF_GC_MAZE_ROCK)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_SILVER_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_ROCK)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_1_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_CIRCLE_2_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_1)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_2)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_3)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_4)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_5)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_6)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_7)
RANDO_ENUM_ITEM(RAND_INF_HC_STORMS_GROTTO_ROCK_8)
RANDO_ENUM_ITEM(RAND_INF_BOTW_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_BOTW_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_BOTW_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_BOTW_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_BOTW_BOULDER_5)
RANDO_ENUM_ITEM(RAND_INF_BOTW_BOULDER_6)
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LOBBY_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_4)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_5)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_6)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_7)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_8)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_9)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_10)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_11)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_BOULDER_12)
RANDO_ENUM_ITEM(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_ROOM_WALL_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_TAILPASARAN_WALL_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_EYE_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_CEILING_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_CRAWLSPACE_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_LOW)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_GIBDO_BOULDER_HIGH)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_BOULDER)
RANDO_ENUM_ITEM(RAND_INF_BOTW_MQ_BOULDER_1)
RANDO_ENUM_ITEM(RAND_INF_BOTW_MQ_BOULDER_2)
RANDO_ENUM_ITEM(RAND_INF_BOTW_MQ_BOULDER_3)
RANDO_ENUM_ITEM(RAND_INF_MARKET_TREE)
RANDO_ENUM_ITEM(RAND_INF_HC_NEAR_GUARDS_TREE_1)
RANDO_ENUM_ITEM(RAND_INF_HC_NEAR_GUARDS_TREE_2)
@@ -116,6 +116,8 @@ RANDO_ENUM_ITEM(RCTYPE_POT) // Pots
RANDO_ENUM_ITEM(RCTYPE_CRATE) // Crates
RANDO_ENUM_ITEM(RCTYPE_NLCRATE) // NL Crates
RANDO_ENUM_ITEM(RCTYPE_SMALL_CRATE) // Small crates
RANDO_ENUM_ITEM(RCTYPE_ROCK) // Rocks
RANDO_ENUM_ITEM(RCTYPE_BOULDER) // Boulders
RANDO_ENUM_ITEM(RCTYPE_TREE) // Trees
RANDO_ENUM_ITEM(RCTYPE_NLTREE) // NL Trees
RANDO_ENUM_ITEM(RCTYPE_BUSH) // Bushes
@@ -398,6 +398,14 @@ RANDO_ENUM_ITEM(RO_SHUFFLE_CRATES_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_CRATES_ALL)
RANDO_ENUM_END(RandoOptionShuffleCrates)
// Shuffle Boulder settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShuffleBoulders)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_BOULDERS_ALL)
RANDO_ENUM_END(RandoOptionShuffleBoulders)
// Shuffle Signs settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShuffleSigns)
RANDO_ENUM_ITEM(RO_SHUFFLE_SIGNS_OFF)
@@ -93,6 +93,8 @@ RANDO_ENUM_ITEM(RSK_SHUFFLE_WEIRD_EGG)
RANDO_ENUM_ITEM(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)
RANDO_ENUM_ITEM(RSK_SHUFFLE_POTS)
RANDO_ENUM_ITEM(RSK_SHUFFLE_CRATES)
RANDO_ENUM_ITEM(RSK_SHUFFLE_ROCKS)
RANDO_ENUM_ITEM(RSK_SHUFFLE_BOULDERS)
RANDO_ENUM_ITEM(RSK_SHUFFLE_TREES)
RANDO_ENUM_ITEM(RSK_SHUFFLE_BUSHES)
RANDO_ENUM_ITEM(RSK_SHUFFLE_FROG_SONG_RUPEES)
@@ -33,6 +33,7 @@ RANDO_ENUM_ITEM(RT_BOULDER_COLLISION)
RANDO_ENUM_ITEM(RT_ITEM_EXTENSION)
RANDO_ENUM_ITEM(RT_SLIDE_JUMP)
RANDO_ENUM_ITEM(RT_VOIDOUT_COLLECTION)
RANDO_ENUM_ITEM(RT_BOMB_DETONATION)
RANDO_ENUM_ITEM(RT_KF_ADULT_GS) // -- location tricks
RANDO_ENUM_ITEM(RT_LW_BRIDGE)
RANDO_ENUM_ITEM(RT_LW_MIDO_BACKFLIP)
@@ -76,6 +76,9 @@ bool showOverworldGrass;
bool showDungeonGrass;
bool showOverworldCrates;
bool showDungeonCrates;
bool showRocks;
bool showOverworldBoulders;
bool showDungeonBoulders;
bool showTrees;
bool showBushes;
bool showOverworldSigns;
@@ -1471,6 +1474,26 @@ void LoadSettings() {
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;
}
switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SIGNS)) {
case RO_SHUFFLE_SIGNS_ALL:
showOverworldSigns = true;
@@ -1489,6 +1512,7 @@ void LoadSettings() {
showDungeonSigns = false;
break;
}
showTrees = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TREES);
showBushes = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BUSHES);
@@ -1522,12 +1546,15 @@ void LoadSettings() {
showDungeonGrass = false;
showOverworldCrates = false;
showDungeonCrates = false;
showOverworldSigns = false;
showDungeonSigns = false;
showRocks = false;
showOverworldBoulders = false;
showDungeonBoulders = false;
showTrees = false;
showBushes = false;
showOverworldWonderItems = false;
showDungeonWonderItems = false;
showOverworldSigns = false;
showDungeonSigns = false;
showBeggar = false;
showIcicles = false;
showRedIce = false;
@@ -1644,6 +1671,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_TREE || showTrees) &&
(loc->GetRCType() != RCTYPE_NLTREE ||
(showTrees &&
@@ -846,6 +846,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], WIDGET_CVAR_COMBOBOX, RO_SHUFFLE_POTS_OFF);
OPT_U8(RSK_SHUFFLE_GRASS, "Shuffle Grass", {"Off", "Dungeons", "Overworld", "All Grass"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleGrass"), mOptionDescriptions[RSK_SHUFFLE_GRASS], WIDGET_CVAR_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], WIDGET_CVAR_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], WIDGET_CVAR_COMBOBOX, RO_SHUFFLE_BOULDERS_OFF);
OPT_BOOL(RSK_SHUFFLE_TREES, "Shuffle Trees", CVAR_RANDOMIZER_SETTING("ShuffleTrees"), mOptionDescriptions[RSK_SHUFFLE_TREES]);
OPT_BOOL(RSK_SHUFFLE_BUSHES, "Shuffle Bushes", CVAR_RANDOMIZER_SETTING("ShuffleBushes"), mOptionDescriptions[RSK_SHUFFLE_BUSHES]);
OPT_BOOL(RSK_SHUFFLE_ICICLES, "Shuffle Icicles", CVAR_RANDOMIZER_SETTING("ShuffleIcicles"), mOptionDescriptions[RSK_SHUFFLE_ICICLES]);
@@ -1474,6 +1476,7 @@ void Settings::CreateOptions() {
"HGrdJmp");
OPT_TRICK(RT_SLIDE_JUMP, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "SldJmp");
OPT_TRICK(RT_VOIDOUT_COLLECTION, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "VdCl");
OPT_TRICK(RT_BOMB_DETONATION, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "BmbDet");
OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE }, "KFGSHB");
OPT_TRICK(RT_LW_BRIDGE, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::EXPERT }, "LWBrgJmp");
OPT_TRICK(RT_LW_MIDO_BACKFLIP, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::NOVICE }, "MidoSkip");
@@ -1869,6 +1872,8 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHUFFLE_POTS],
&mOptions[RSK_SHUFFLE_GRASS],
&mOptions[RSK_SHUFFLE_CRATES],
&mOptions[RSK_SHUFFLE_BOULDERS],
&mOptions[RSK_SHUFFLE_ROCKS],
&mOptions[RSK_SHUFFLE_TREES],
&mOptions[RSK_SHUFFLE_BUSHES],
&mOptions[RSK_SHUFFLE_ICICLES],
@@ -2154,6 +2159,8 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHUFFLE_POTS],
&mOptions[RSK_SHUFFLE_GRASS],
&mOptions[RSK_SHUFFLE_CRATES],
&mOptions[RSK_SHUFFLE_BOULDERS],
&mOptions[RSK_SHUFFLE_ROCKS],
&mOptions[RSK_SHUFFLE_TREES],
&mOptions[RSK_SHUFFLE_BUSHES],
&mOptions[RSK_SHUFFLE_ICICLES],
@@ -61,6 +61,7 @@ class StaticData {
static void RegisterFreestandingLocations();
static void RegisterGrassLocations();
static void RegisterCrateLocations();
static void RegisterRockLocations();
static void RegisterTreeLocations();
static void RegisterSignLocations();
static void RegisterWonderItemLocations();
@@ -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,7 +252,7 @@ void EnIshi_SpawnDustLarge(EnIshi* this, PlayState* play) {
void EnIshi_DropCollectible(EnIshi* this, PlayState* play) {
s16 dropParams;
if ((this->actor.params & 1) == ROCK_SMALL) {
if (GameInteractor_Should(VB_ROCK_DROP_ITEM, (this->actor.params & 1) == ROCK_SMALL, this)) {
dropParams = (this->actor.params >> 8) & 0xF;
if (dropParams >= 0xD) {
@@ -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);
@@ -133,6 +134,7 @@ void ObjBombiwa_Update(Actor* thisx, PlayState* play) {
if (((this->actor.params >> 0xF) & 1) != 0) {
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
}
GameInteractor_Should(VB_ROCK_DROP_ITEM, false, this);
Actor_Kill(&this->actor);
} else {
this->collider.base.acFlags &= ~AC_HIT;
@@ -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;
}
@@ -182,6 +183,7 @@ void ObjHamishi_Update(Actor* thisx, PlayState* play) {
ObjHamishi_Break(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_WALL_BROKEN);
Flags_SetSwitch(play, this->actor.params & 0x3F);
GameInteractor_Should(VB_ROCK_DROP_ITEM, false, this);
Actor_Kill(&this->actor);
}
} else {