[Rando] Shuffle Wonder Items (#6342)

This commit is contained in:
A Green Spoon 2026-04-01 09:32:57 +09:00 committed by GitHub
parent 7363e1c264
commit 412e9e262f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
54 changed files with 1977 additions and 273 deletions

View file

@ -2419,6 +2419,42 @@ typedef enum {
// - None
VB_WIN_GORON_POT,
// #### `result`
// ```c
// true
// ```
// #### `args`
// - `*EnWonderItem`
VB_WONDER_DROP_ITEM,
// #### `result`
// ```c
// true
// ```
// #### `args`
// - 'Vec3f' pos
// - 'f32' rotY
VB_WONDER_HEISHI_ITEM,
// #### `result`
// ```c
// (gSaveContext.dayTime < 0xB888 || IS_DAY) && ((!IS_RANDO &&
// !Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE)) || (IS_RANDO && !metZelda))
// (gSaveContext.dayTime >= 0xB889) || !IS_DAY || (!IS_RANDO &&
// Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE)) || (IS_RANDO && metZelda)
// ```
// #### `args`
// - EnHeishi1*
VB_WONDER_HEISHI_PATROLLING,
// #### `result`
// ```c
// (this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)
// ```
// #### `args`
// - `None`
VB_WONDER_SPAWN,
// #### `result`
// ```c
// true

View file

@ -131,6 +131,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Deku-Baum# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans l'Arbre Mojo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_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}));
/*--------------------------
| DODONGOS CAVERN |
---------------------------*/
@ -484,6 +488,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_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}));
/*--------------------------
| FOREST TEMPLE |
---------------------------*/
@ -926,6 +934,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Feuertempel# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans le Temple du Feu# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_FIRE_TEMPLE] = HintText(CustomMessage("They say that a #wonder item in Fire Temple# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Feuertempel# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Temple du Feu# cache #[[1]]#.", {QM_RED, QM_GREEN}));
/*--------------------------
| WATER TEMPLE |
---------------------------*/
@ -1077,6 +1089,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste im Wassertempel# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans le Temple de l'Eau# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_WATER_TEMPLE] = HintText(CustomMessage("They say that a #wonder item in Water Temple# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Wassertempel# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Temple de l'Eau# cache #[[1]]#.", {QM_RED, QM_GREEN}));
/*--------------------------
| SPIRIT TEMPLE |
---------------------------*/
@ -1326,6 +1342,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_WONDER_ITEM_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that a #wonder item in Spirit Temple# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Geistertempel# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Temple de l'Esprit# cache #[[1]]#.", {QM_RED, QM_GREEN}));
/*--------------------------
| SHADOW TEMPLE |
---------------------------*/
@ -1597,6 +1617,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß das #Lesen eines Schildes im Schattentempel# #[[1]]# enthülle.",
/*french*/ "Selon moi, #lire un panneau dans le Temple de l'Ombre# révèle #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_SHADOW_TEMPLE] = HintText(CustomMessage("They say that a #wonder item in Shadow Temple# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Schattentempel# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Temple de l'Ombre# cache #[[1]]#.", {QM_RED, QM_GREEN}));
/*--------------------------
| BOTTOM OF THE WELL |
---------------------------*/
@ -1743,6 +1767,9 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß etwas #Gras auf dem Grund des Brunnens# #[[1]]# verstecke.",
/*french*/ "Selon moi, de l'#herbe dans le Puits# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_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}));
/*--------------------------
| ICE CAVERN |
@ -2024,6 +2051,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß eine #Kiste in der Gerudo-Trainingsarena# #[[1]]# enthielte.",
/*french*/ "Selon moi, une #caisse dans le Gymnase Gerudo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND] = HintText(CustomMessage("They say that a #wonder item in Gerudo Training Ground# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in der Gerudo-Trainingsarena# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Gymnase Gerudo# cache #[[1]]#.", {QM_RED, QM_GREEN}));
/*--------------------------
| GANONS CASTLE |
---------------------------*/
@ -2233,6 +2264,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
/*german*/ "Man erzählt sich, daß ein #Herz in Ganons Schloß# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #coeur dans le Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_GANONS_CASTLE_WONDER_ITEM] = HintText(CustomMessage("They say that a #wonder item in Ganon's Castle# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in Ganons Schloß# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN}));
// clang-format on
}
} // namespace Rando

View file

@ -2247,6 +2247,74 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
hintTextTable[RHT_SIGN_HAUNTED_WASTELAND] = HintText(CustomMessage("They say that #reading a sign in Haunted Wasteland# reveals #[[1]]#.",
/*german*/ "Man erzählt sich, daß das #Lesen eines Schildes in der Gespensterwüste# #[[1]]# enthülle.",
/*french*/ "Selon moi, #lire un panneau dans le Désert Hanté# révèle #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_KOKIRI_FOREST] = HintText(CustomMessage("They say that a #wonder item in Kokiri Forest# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Kokiri-Wald# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans la Fôret Kokiri# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_HYRULE_FIELD] = HintText(CustomMessage("They say that a #wonder item in Hyrule Field# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in der Ebene von Hyrule# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans la Plaine d'Hyrule# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_MARKET] = HintText(CustomMessage("They say that a #wonder item in the Market# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand auf dem Markt# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans la Place du Marché# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_LON_LON_RANCH] = HintText(CustomMessage("They say that a #wonder item in Lon Lon Ranch# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand auf der Lon Lon-Farm# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Ranch Lon Lon# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_HYRULE_CASTLE] = HintText(CustomMessage("They say that a #wonder item in Hyrule Castle# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Schloss von Hyrule# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux au Château d'Hyrule# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_CASTLE_COURTYARD_ZELDA] = HintText(CustomMessage("They say that #shooting a window in a castle# reveals #[[1]]#.",
/*german*/ "Man erzählt sich, daß das #Schießen auf ein Fenster in einem Schloss# #[[1]]# enthülle.",
/*french*/ "Selon moi, #tirer sur une fenêtre dans un château# donne #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_LOST_WOODS] = HintText(CustomMessage("They say that a #wonder item in the woods# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in den Wäldern# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans des bois# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_SACRED_FOREST_MEADOW] = HintText(CustomMessage("They say that a #wonder item in a forest meadow# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand auf einer Waldlichtung# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le sanctuaire des bois# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_KAKARIKO_VILLAGE] = HintText(CustomMessage("They say that a #wonder item in Kakariko Village# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in Kakariko# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans le Village de Cocorico# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_DAMPES_GRAVE] = HintText(CustomMessage("They say that a #wonder item in a gravekeeper's tomb# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Grab des Totengräbers# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans la tombe du fossoyeur# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_DEATH_MOUNTAIN_CRATER] = HintText(CustomMessage("They say that a #wonder item in Death Mountain's Crater# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Todeskrater# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux sur le Mont du Péril# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_ZORAS_RIVER] = HintText(CustomMessage("They say that a #wonder item in a river# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in einem Fluss# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans une rivière# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_ZORAS_RIVER] = HintText(CustomMessage("They say that a #wonder item in Zora's Fountain# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in Zoras Quelle# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans la Fontaine Zora# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_GERUDO_VALLEY] = HintText(CustomMessage("They say that a #wonder item in Gerudo Valley# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Gerudotal# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans une vallée# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_GERUDOS_FORTRESS] = HintText(CustomMessage("They say that a #wonder item in Gerudo Fortress# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand in der Gerudo-Festung# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans la Forteresse Gerudo# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_THIEVES_HIDEOUT] = HintText(CustomMessage("They say that a #wonder item in Thieve's Hideout# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand im Versteck der Diebe# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux dans a Cachette des Voleurs# cache #[[1]]#.", {QM_RED, QM_GREEN}));
hintTextTable[RHT_WONDER_ITEM_DESERT_COLOSSUS] = HintText(CustomMessage("They say that a #wonder item near the temple of the sand# hides #[[1]]#.",
/*german*/ "Man erzählt sich, daß sich ein #Wunder-Gegenstand nahe des Tempels des Sandes# #[[1]]# verstecke.",
/*french*/ "Selon moi, un #objet merveilleux près du temple du sable# cache #[[1]]#.", {QM_RED, QM_GREEN}));
// clang-format on
}
} // namespace Rando

View file

@ -447,6 +447,13 @@ void GenerateItemPool() {
bool bushesActive = (bool)ctx->GetOption(RSK_SHUFFLE_BUSHES);
PlaceItemsForType(RCTYPE_BUSH, bushesActive, false);
// Shuffle Wonder Items
bool overworldWonderItemsActive = ctx->GetOption(RSK_SHUFFLE_WONDER_ITEMS).Is(RO_SHUFFLE_WONDER_ITEMS_OVERWORLD) ||
ctx->GetOption(RSK_SHUFFLE_WONDER_ITEMS).Is(RO_SHUFFLE_WONDER_ITEMS_ALL);
bool dungeonWonderItemsActive = ctx->GetOption(RSK_SHUFFLE_WONDER_ITEMS).Is(RO_SHUFFLE_WONDER_ITEMS_DUNGEONS) ||
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);

View file

@ -217,6 +217,8 @@ void Context::GenerateLocationPool() {
(!mOptions[RSK_SHUFFLE_TREES] || mOptions[RSK_LOGIC_RULES].IsNot(RO_LOGIC_NO_LOGIC))) ||
(location.GetRCType() == RCTYPE_BUSH && !mOptions[RSK_SHUFFLE_BUSHES]) ||
(location.GetRCType() == RCTYPE_SIGN && mOptions[RSK_SHUFFLE_SIGNS].Is(RO_SHUFFLE_SIGNS_OFF)) ||
(location.GetRCType() == RCTYPE_WONDER_ITEM &&
mOptions[RSK_SHUFFLE_WONDER_ITEMS].Is(RO_SHUFFLE_WONDER_ITEMS_OFF)) ||
(location.GetRCType() == RCTYPE_FREESTANDING &&
mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) ||
(location.GetRCType() == RCTYPE_BEEHIVE && !mOptions[RSK_SHUFFLE_BEEHIVES])) {
@ -229,6 +231,8 @@ void Context::GenerateLocationPool() {
mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_GRASS && mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_WONDER_ITEM &&
mOptions[RSK_SHUFFLE_WONDER_ITEMS].Is(RO_SHUFFLE_WONDER_ITEMS_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_CRATE && mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS)) ||
(location.GetRCType() == RCTYPE_NLCRATE &&
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS) &&
@ -250,6 +254,8 @@ void Context::GenerateLocationPool() {
(location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD)) ||
(location.GetRCType() == RCTYPE_GRASS &&
mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_OVERWORLD)) ||
(location.GetRCType() == RCTYPE_WONDER_ITEM &&
mOptions[RSK_SHUFFLE_WONDER_ITEMS].Is(RO_SHUFFLE_WONDER_ITEMS_OVERWORLD)) ||
(location.GetRCType() == RCTYPE_CRATE &&
mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD)) ||
(location.GetRCType() == RCTYPE_NLCRATE &&

View file

@ -1,6 +1,7 @@
#include <soh/OTRGlobals.h>
#include "soh/ObjectExtension/ObjectExtension.h"
#include "item_category_adj.h"
#include "particle_cmc.h"
extern "C" {
extern PlayState* gPlayState;
#include "overlays/actors/ovl_En_Kanban/z_en_kanban.h"
@ -9,16 +10,6 @@ extern PlayState* gPlayState;
#include "overlays/actors/ovl_En_Wonder_Talk2/z_en_wonder_talk2.h"
}
typedef enum {
PARTICLE_MAJOR,
PARTICLE_SKULLTULA_TOKEN,
PARTICLE_SMALL_KEY,
PARTICLE_BOSS_KEY,
PARTICLE_HEALTH,
PARTICLE_LESSER,
PARTICLE_JUNK,
} SignCMCColors;
uint8_t Sign_RandomizerHoldsItem(Actor* actor, PlayState* play) {
const auto signIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(actor);
if (signIdentity == nullptr) {
@ -69,40 +60,6 @@ void Sign_RandomizerDrawSetup(void* actor) {
int isNotCMC = !cmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY));
// Color of the circle for the particles
static Color_RGBA8 mainColors[7][3] = {
{ 250, 185, 40 }, // Major
{ 0, 0, 0 }, // Skulltula Token
{ 180, 180, 180 }, // Small Key
{ 255, 255, 0 }, // Boss Key
{ 250, 0, 0 }, // Health
{ 170, 50, 0 }, // Lesser
{ 255, 255, 255 } // Junk
};
// Secondary color of the circle for the particles
static Color_RGBA8 secColors[7][3] = {
{ 255, 220, 135 }, // Major
{ 255, 250, 190 }, // Skulltula Token
{ 130, 130, 130 }, // Small Key
{ 0, 200, 255 }, // Boss Key
{ 0, 0, 255 }, // Health
{ 250, 75, 0 }, // Lesser
{ 255, 255, 255 } // Junk
};
// Color of the faded flares stretching off the particles
static Color_RGBA8 flareColors[7][3] = {
{ 250, 220, 180 }, // Major
{ 255, 255, 255 }, // Skulltula Token
{ 100, 100, 100 }, // Small Key
{ 0, 200, 255 }, // Boss Key
{ 255, 125, 125 }, // Health
{ 255, 160, 100 }, // Lesser
{ 135, 135, 135 } // Junk
};
s16 colorIndex;
Color_RGBA8 primColor;
Color_RGBA8 secColor;
Color_RGBA8 envColor;
@ -117,42 +74,11 @@ void Sign_RandomizerDrawSetup(void* actor) {
getItemCategory = Randomizer_AdjustItemCategory(signItem);
if (isNotCMC) {
colorIndex = PARTICLE_MAJOR;
Color_RGBA8_Copy(&primColor, mainColors[colorIndex]);
Color_RGBA8_Copy(&secColor, secColors[colorIndex]);
Color_RGBA8_Copy(&envColor, flareColors[colorIndex]);
Sign_RandomizerDraw(signActor, &primColor, &secColor, &envColor);
return;
getItemCategory = ITEM_CATEGORY_MAJOR;
}
// Change particle color for CMC
switch (getItemCategory) {
case ITEM_CATEGORY_MAJOR:
colorIndex = PARTICLE_MAJOR;
break;
case ITEM_CATEGORY_SKULLTULA_TOKEN:
colorIndex = PARTICLE_SKULLTULA_TOKEN;
break;
case ITEM_CATEGORY_SMALL_KEY:
colorIndex = PARTICLE_SMALL_KEY;
break;
case ITEM_CATEGORY_BOSS_KEY:
colorIndex = PARTICLE_BOSS_KEY;
break;
case ITEM_CATEGORY_HEALTH:
colorIndex = PARTICLE_HEALTH;
break;
case ITEM_CATEGORY_LESSER:
colorIndex = PARTICLE_LESSER;
break;
case ITEM_CATEGORY_JUNK:
default:
colorIndex = PARTICLE_JUNK;
break;
}
Color_RGBA8_Copy(&primColor, mainColors[colorIndex]);
Color_RGBA8_Copy(&secColor, secColors[colorIndex]);
Color_RGBA8_Copy(&envColor, flareColors[colorIndex]);
primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
secColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_SECONDARY);
envColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_FLARE);
Sign_RandomizerDraw(signActor, &primColor, &secColor, &envColor);
}

View file

@ -0,0 +1,524 @@
#include <soh/OTRGlobals.h>
#include <soh/GameVersions.h>
#include "soh/ResourceManagerHelpers.h"
#include "soh/ObjectExtension/ObjectExtension.h"
#include "soh/ObjectExtension/ActorListIndex.h"
#include "item_category_adj.h"
#include "particle_cmc.h"
extern "C" {
#include "overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.h"
#include "overlays/actors/ovl_En_Heishi1/z_en_heishi1.h"
extern PlayState* gPlayState;
extern Vec3f sTagPointsFree[9];
extern Vec3f sTagPointsOrdered[9];
}
extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play);
// Many wonder items spawn on top of each other, offset position to make them all distinct
static std::unordered_map<RandomizerCheck, Vec3f> sStackedWonderOffsets = {
{ RC_COLOSSUS_WONDER_OASIS_TREE_1, { 8.0f, 0.0f, -8.0f } },
{ RC_COLOSSUS_WONDER_OASIS_TREE_2, { 5.0f, 0.0f, -8.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1, { 6.0f, 15.0f, 6.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2, { 12.0f, 0.0f, 0.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3, { -4.0f, -2.0f, 25.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1, { -6.0f, -14.0f, 2.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2, { 5.0f, 0.0f, -10.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3, { 4.0f, -2.0f, 5.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1, { 5.0f, 6.0f, 0.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2, { 0.0f, 0.0f, 0.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3, { 0.0f, 0.0f, 0.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1, { -2.0f, 0.0f, 15.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2, { 1.0f, -11.0f, -5.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3, { 0.0f, -12.0f, 0.0f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1, { -7.5f, 0.0f, -7.5f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2, { -7.5f, 0.0f, 7.5f } },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3, { 7.5f, 0.0f, 7.5f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1, { -7.5f, 0.0f, -7.5f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2, { -7.5f, 0.0f, 7.5f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3, { 7.5f, 0.0f, 7.5f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT, { 0.0f, 0.0f, -8.0f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW, { 0.0f, 0.0f, 8.0f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1, { -8.0f, 0.0f, 0.0f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2, { 8.0f, 0.0f, 0.0f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1, { 0.0f, 0.0f, -8.0f } },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2, { 0.0f, 0.0f, 8.0f } },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1, { -5.0f, 1.0f, -5.0f } },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2, { 0.0f, -3.0f, -11.0f } },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3, { 0.0f, -14.0f, -15.0f } },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1, { 0.0f, 9.0f, 10.0f } },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2, { 0.0f, -7.0f, 10.0f } },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3, { 0.0f, 0.0f, 10.0f } },
{ RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER, { 0.0f, 0.0f, -8.0f } },
{ RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH, { 0.0f, 0.0f, 8.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1, { -22.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2, { -7.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3, { 7.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4, { 22.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1, { -22.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2, { -7.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3, { 7.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4, { 22.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1, { -22.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2, { -7.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3, { 7.5f, 0.0f, 0.0f } },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4, { 22.5f, 0.0f, 0.0f } },
};
static Vec3f GetStackOffset(RandomizerCheck rc) {
auto it = sStackedWonderOffsets.find(rc);
return it != sStackedWonderOffsets.end() ? it->second : Vec3f{ 0.0f, 0.0f, 0.0f };
}
void SpawnNTSC10WonderItem() {
if (LINK_IS_ADULT && gPlayState->sceneNum == SCENE_ZORAS_FOUNTAIN) {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_WONDER_ITEM, -667, 320, 1053, 0, 0, 1, 4799);
} else if (LINK_IS_ADULT && gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_CRATER) {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_WONDER_ITEM, 6, 311, -640, 0, 0, 1, 4799);
}
}
uint8_t EnWonderItem_RandomizerHoldsItem(EnWonderItem* wonderActor, PlayState* play) {
const CheckIdentity* wonderIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(&wonderActor->actor);
if (wonderIdentity == nullptr) {
Actor* actor = &wonderActor->actor;
s16 actorIndex = GetActorListIndex(actor);
bool isDungeonScene = (play->sceneNum >= SCENE_DEKU_TREE && play->sceneNum <= SCENE_GERUDO_TRAINING_GROUND) ||
play->sceneNum == SCENE_INSIDE_GANONS_CASTLE;
// For dungeons, use room Id and actor index. For overworld, use xz coordinates.
auto newIdentity = isDungeonScene ? OTRGlobals::Instance->gRandomizer->IdentifyWonderItem(
play->sceneNum, (s16)play->roomCtx.curRoom.num, actorIndex)
: OTRGlobals::Instance->gRandomizer->IdentifyWonderItem(
play->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z);
ObjectExtension::GetInstance().Set<CheckIdentity>(actor, std::move(newIdentity));
wonderIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(actor);
if (wonderIdentity == nullptr) {
return false;
}
}
RandomizerCheck rc = wonderIdentity->randomizerCheck;
uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon();
auto wonderSetting = RAND_GET_OPTION(RSK_SHUFFLE_WONDER_ITEMS);
if (!IS_RANDO || (wonderSetting.Is(RO_SHUFFLE_WONDER_ITEMS_OVERWORLD) && isDungeon) ||
(wonderSetting.Is(RO_SHUFFLE_WONDER_ITEMS_DUNGEONS) && !isDungeon) ||
Flags_GetRandomizerInf(wonderIdentity->randomizerInf) || wonderIdentity->randomizerCheck == RC_UNKNOWN_CHECK) {
return false;
} else {
return true;
}
}
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;
// Draw particles at tag spots if applicable, otherwise at wonder item actor location
if (wonderActor->wonderMode == WONDERITEM_MULTITAG_ORDERED) {
for (s32 i = 0, mask = 1; i < wonderActor->numTagPoints; i++, mask <<= 1) {
if (!(wonderActor->tagFlags & mask)) {
pos.x = Rand_CenteredFloat(1.0f) + sTagPointsOrdered[i].x;
pos.y = (Rand_ZeroOne() * 25.0f) + sTagPointsOrdered[i].y + 10;
pos.z = Rand_CenteredFloat(1.0f) + sTagPointsOrdered[i].z;
EffectSsKiraKira_SpawnFocused(gPlayState, &pos, &velocity, &accel, secColor, envColor, 2000, 100);
EffectSsKiraKira_SpawnFocused(gPlayState, &pos, &velocity, &accel, primColor, envColor, 2000, 100);
}
}
} else if (wonderActor->wonderMode == WONDERITEM_MULTITAG_FREE) {
for (s32 i = 0, mask = 1; i < wonderActor->numTagPoints; i++, mask <<= 1) {
if (!(wonderActor->tagFlags & mask)) {
pos.x = Rand_CenteredFloat(1.0f) + sTagPointsFree[i].x;
pos.y = (Rand_ZeroOne() * 25.0f) + sTagPointsFree[i].y + 10;
pos.z = Rand_CenteredFloat(1.0f) + sTagPointsFree[i].z;
EffectSsKiraKira_SpawnFocused(gPlayState, &pos, &velocity, &accel, secColor, envColor, 2000, 100);
EffectSsKiraKira_SpawnFocused(gPlayState, &pos, &velocity, &accel, primColor, envColor, 2000, 100);
}
}
} else {
Vec3f offset = GetStackOffset(wonderIdentity->randomizerCheck);
pos.x = Rand_CenteredFloat(1.0f) + wonderActor->actor.world.pos.x + offset.x;
pos.y = (Rand_ZeroOne() * 25.0f) + wonderActor->actor.world.pos.y + 10 + offset.y;
pos.z = Rand_CenteredFloat(1.0f) + wonderActor->actor.world.pos.z + offset.z;
EffectSsKiraKira_SpawnFocused(gPlayState, &pos, &velocity, &accel, secColor, envColor, 2000, 100);
EffectSsKiraKira_SpawnFocused(gPlayState, &pos, &velocity, &accel, primColor, envColor, 2000, 100);
}
}
void EnWonderItem_RandomizerDrawSetup(void* refActor) {
GetItemCategory getItemCategory;
EnWonderItem* wonderActor = static_cast<EnWonderItem*>(refActor);
// If not a randomized item or too far, don't draw.
// If item is unshuffled or collected, kill wonder actor if switch flag is set.
if (!EnWonderItem_RandomizerHoldsItem(wonderActor, gPlayState)) {
if ((wonderActor->switchFlag >= 0) && Flags_GetSwitch(gPlayState, wonderActor->switchFlag)) {
Actor_Kill(&wonderActor->actor);
}
return;
} else if (wonderActor->actor.xzDistToPlayer > 1000.0f) {
return;
}
bool cmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0);
int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0);
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;
}
GetItemEntry wonderItem =
Rando::Context::GetInstance()->GetFinalGIEntry(wonderIdentity->randomizerCheck, true, GI_NONE);
getItemCategory = 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);
EnWonderItem_RandomizerDraw(wonderActor, &primColor, &secColor, &envColor, wonderIdentity);
}
void EnWonderItem_RandomizerSpawnCollectible(EnWonderItem* wonderActor, PlayState* play) {
const auto wonderIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(&wonderActor->actor);
EnItem00* item00;
Player* player = GET_PLAYER(gPlayState);
// Hyrule courtyard left window handled separately to replace the bomb the guard throws
if (wonderIdentity == nullptr || wonderIdentity->randomizerCheck == RC_HC_WONDER_COURTYARD_LEFT_WINDOW) {
return;
}
// if activated via tag points, autocollect the check, otherwise spawn the item toward the player
// Water Temple MQ hookshot staircase can easily spawn unreachable items, autocollect
// Jabu MQ holes cow always spawns the item OOB (vanilla bug), autocollect
if (wonderActor->wonderMode == WONDERITEM_MULTITAG_FREE || wonderActor->wonderMode == WONDERITEM_PROXIMITY_DROP ||
wonderActor->wonderMode == WONDERITEM_MULTITAG_ORDERED ||
(wonderIdentity->randomizerCheck >= RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1 &&
wonderIdentity->randomizerCheck <= RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3) ||
wonderIdentity->randomizerCheck == RC_JABU_JABUS_BELLY_MQ_HOLES_COW) {
Flags_SetRandomizerInf(wonderIdentity->randomizerInf);
} else {
item00 = (EnItem00*)Item_DropCollectible(play, &wonderActor->actor.world.pos, ITEM00_SOH_DUMMY);
item00->randoInf = wonderIdentity->randomizerInf;
item00->itemEntry =
Rando::Context::GetInstance()->GetFinalGIEntry(wonderIdentity->randomizerCheck, true, GI_NONE);
item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem;
if (gPlayState->sceneNum != SCENE_INSIDE_GANONS_CASTLE) {
item00->actor.velocity.y = 3.0f;
item00->actor.speedXZ = 3.0f;
item00->actor.world.rot.y =
Math_Vec3f_Yaw(&item00->actor.world.pos, &player->actor.world.pos) + (s16)Rand_CenteredFloat(16384.0f);
}
}
}
void WonderHeishi_RandomizerSpawnCollectible(PlayState* play, Vec3f pos, f32 rotY) {
EnItem00* item00;
Player* player = GET_PLAYER(gPlayState);
item00 = (EnItem00*)Item_DropCollectible(play, &pos, ITEM00_SOH_DUMMY);
item00->randoInf = RAND_INF_HC_WONDER_COURTYARD_LEFT_WINDOW;
item00->itemEntry =
Rando::Context::GetInstance()->GetFinalGIEntry(RC_HC_WONDER_COURTYARD_LEFT_WINDOW, true, GI_NONE);
item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem;
item00->actor.velocity.y = Rand_CenteredFloat(5.0f) + 10.0f;
item00->actor.speedXZ = Rand_CenteredFloat(5.0f) + 10.0f;
item00->actor.world.rot.y = rotY;
}
void RegisterShuffleWonderItems() {
bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_WONDER_ITEMS);
bool isNtscUs10 = false;
for (uint32_t i = 0; i < ResourceMgr_GetNumGameVersions(); i++) {
if (ResourceMgr_GetGameVersion(i) == OOT_NTSC_US_10) {
isNtscUs10 = true;
}
}
bool shouldRegisterOverworld = RAND_GET_OPTION(RSK_SHUFFLE_WONDER_ITEMS).Is(RO_SHUFFLE_WONDER_ITEMS_ALL) ||
RAND_GET_OPTION(RSK_SHUFFLE_WONDER_ITEMS).Is(RO_SHUFFLE_WONDER_ITEMS_OVERWORLD);
bool shouldRegisterNTSC10 = shouldRegister && isNtscUs10 && shouldRegisterOverworld;
// Draw particle effect in wonder item spot to indicate a randomized item
COND_ID_HOOK(OnActorUpdate, ACTOR_EN_WONDER_ITEM, shouldRegister, EnWonderItem_RandomizerDrawSetup);
// Spawn missing wonder items for NTSC 1.0
COND_HOOK(OnSceneSpawnActors, shouldRegisterNTSC10, SpawnNTSC10WonderItem);
// Prevent or delay actor kill until EnWonderItem_RandomizerDrawSetup in case item isn't yet collected
COND_VB_SHOULD(VB_WONDER_SPAWN, shouldRegister, { *should = false; });
// Do not spawn vanilla wonder item, instead spawn the randomized item
COND_VB_SHOULD(VB_WONDER_DROP_ITEM, shouldRegister, {
EnWonderItem* wonderActor = va_arg(args, EnWonderItem*);
if (EnWonderItem_RandomizerHoldsItem(wonderActor, gPlayState)) {
EnWonderItem_RandomizerSpawnCollectible(wonderActor, gPlayState);
*should = false;
}
});
// Do not spawn castle courtyard guard bomb, instead spawn the randomized item
COND_VB_SHOULD(VB_WONDER_HEISHI_ITEM, shouldRegisterOverworld, {
if (!Flags_GetRandomizerInf(RAND_INF_HC_WONDER_COURTYARD_LEFT_WINDOW)) {
Vec3f* pos = va_arg(args, Vec3f*);
f32 rotY = (f32)va_arg(args, double);
WonderHeishi_RandomizerSpawnCollectible(gPlayState, *pos, rotY);
*should = false;
}
});
// If courtyard items are uncollected, keep guards patrolling
COND_VB_SHOULD(VB_WONDER_HEISHI_PATROLLING, shouldRegisterOverworld, {
EnHeishi1* guardActor = va_arg(args, EnHeishi1*);
if (!Flags_GetRandomizerInf(RAND_INF_HC_WONDER_COURTYARD_LEFT_WINDOW) ||
!Flags_GetRandomizerInf(RAND_INF_HC_WONDER_COURTYARD_RIGHT_WINDOW)) {
*should = guardActor->type != 5;
}
});
}
void Rando::StaticData::RegisterWonderItemLocations() {
static bool registered = false;
if (registered)
return;
registered = true;
// clang-format off
// Overworld Wonder Items
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
locationTable[RC_KF_WONDER_TRAINING_1] = Location::WonderItem(RC_KF_WONDER_TRAINING_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-747, 951), "Wonder Training 1", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_TRAINING_1));
locationTable[RC_KF_WONDER_TRAINING_2] = Location::WonderItem(RC_KF_WONDER_TRAINING_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-677, 899), "Wonder Training 2", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_TRAINING_2));
locationTable[RC_KF_WONDER_TRAINING_3] = Location::WonderItem(RC_KF_WONDER_TRAINING_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-698, 830), "Wonder Training 3", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_TRAINING_3));
locationTable[RC_KF_WONDER_SHOP] = Location::WonderItem(RC_KF_WONDER_SHOP, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_SHOP, TWO_ACTOR_PARAMS(146, -97), "Wonder Shop", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_SHOP));
locationTable[RC_KF_WONDER_SIGN] = Location::WonderItem(RC_KF_WONDER_SIGN, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-488, 600), "Wonder Sign", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_SIGN));
locationTable[RC_KF_WONDER_PLATFORMS_1] = Location::WonderItem(RC_KF_WONDER_PLATFORMS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(364, 28), "Wonder Platforms 1", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_PLATFORMS_1));
locationTable[RC_KF_WONDER_PLATFORMS_2] = Location::WonderItem(RC_KF_WONDER_PLATFORMS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1074, 178), "Wonder Platforms 2", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_PLATFORMS_2));
locationTable[RC_KF_WONDER_CRAWL_GRASS_1] = Location::WonderItem(RC_KF_WONDER_CRAWL_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-590, 1635), "Wonder Crawl Grass 1", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_CRAWL_GRASS_1));
locationTable[RC_KF_WONDER_CRAWL_GRASS_2] = Location::WonderItem(RC_KF_WONDER_CRAWL_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-584, 1762), "Wonder Crawl Grass 2", RHT_WONDER_ITEM_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_WONDER_CRAWL_GRASS_2));
locationTable[RC_HF_WONDER_BRIDGE_1] = Location::WonderItem(RC_HF_WONDER_BRIDGE_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-99, 662), "Wonder Bridge Left", RHT_WONDER_ITEM_HYRULE_FIELD, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_WONDER_BRIDGE_1));
locationTable[RC_HF_WONDER_BRIDGE_2] = Location::WonderItem(RC_HF_WONDER_BRIDGE_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1, 665), "Wonder Bridge Center", RHT_WONDER_ITEM_HYRULE_FIELD, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_WONDER_BRIDGE_2));
locationTable[RC_HF_WONDER_BRIDGE_3] = Location::WonderItem(RC_HF_WONDER_BRIDGE_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(93, 659), "Wonder Bridge Right", RHT_WONDER_ITEM_HYRULE_FIELD, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_WONDER_BRIDGE_3));
locationTable[RC_MKT_WONDER_DAY_1] = Location::WonderItem(RC_MKT_WONDER_DAY_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-523, -340), "Wonder Day Balcony 1", RHT_WONDER_ITEM_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_DAY_1));
locationTable[RC_MKT_WONDER_DAY_2] = Location::WonderItem(RC_MKT_WONDER_DAY_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-523, -224), "Wonder Day Balcony 2", RHT_WONDER_ITEM_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_DAY_2));
locationTable[RC_MKT_WONDER_DAY_3] = Location::WonderItem(RC_MKT_WONDER_DAY_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-521, -113), "Wonder Day Balcony 3", RHT_WONDER_ITEM_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_DAY_3));
locationTable[RC_MKT_WONDER_DAY_4] = Location::WonderItem(RC_MKT_WONDER_DAY_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-521, -2), "Wonder Day Balcony 4", RHT_WONDER_ITEM_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_DAY_4));
locationTable[RC_MKT_WONDER_DAY_5] = Location::WonderItem(RC_MKT_WONDER_DAY_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-516, 117), "Wonder Day Balcony 5", RHT_WONDER_ITEM_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_DAY_5));
locationTable[RC_MKT_WONDER_NIGHT_1] = Location::WonderItem(RC_MKT_WONDER_NIGHT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_NIGHT, TWO_ACTOR_PARAMS(-524, -246), "Wonder Night Balcony 1", RHT_WONDER_ITEM_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_NIGHT_1));
locationTable[RC_MKT_WONDER_NIGHT_2] = Location::WonderItem(RC_MKT_WONDER_NIGHT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_NIGHT, TWO_ACTOR_PARAMS(-521, 27), "Wonder Night Balcony 2", RHT_WONDER_ITEM_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MKT_WONDER_NIGHT_2));
locationTable[RC_LLR_WONDER_BIG_FENCE] = Location::WonderItem(RC_LLR_WONDER_BIG_FENCE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(-443, -311), "Wonder Big Fence", RHT_WONDER_ITEM_LON_LON_RANCH, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_WONDER_BIG_FENCE));
locationTable[RC_LLR_WONDER_SMALL_FENCE] = Location::WonderItem(RC_LLR_WONDER_SMALL_FENCE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(295, -979), "Wonder Small Fence", RHT_WONDER_ITEM_LON_LON_RANCH, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_WONDER_SMALL_FENCE));
locationTable[RC_HC_WONDER_LEFT_TORCH] = Location::WonderItem(RC_HC_WONDER_LEFT_TORCH, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-502, 468), "Wonder Left Torch", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_LEFT_TORCH));
locationTable[RC_HC_WONDER_RIGHT_TORCH] = Location::WonderItem(RC_HC_WONDER_RIGHT_TORCH, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-72, 468), "Wonder Right Torch", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_RIGHT_TORCH));
locationTable[RC_HC_WONDER_MOAT_1] = Location::WonderItem(RC_HC_WONDER_MOAT_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(706, -663), "Wonder Moat Past Boxes", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_1));
locationTable[RC_HC_WONDER_MOAT_2] = Location::WonderItem(RC_HC_WONDER_MOAT_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(755, -118), "Wonder Moat Past Gate 1", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_2));
locationTable[RC_HC_WONDER_MOAT_3] = Location::WonderItem(RC_HC_WONDER_MOAT_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(725, 112), "Wonder Moat Past Gate 2", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_3));
locationTable[RC_HC_WONDER_MOAT_4] = Location::WonderItem(RC_HC_WONDER_MOAT_4, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(754, 395), "Wonder Moat Before Gate 1", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_4));
locationTable[RC_HC_WONDER_MOAT_5] = Location::WonderItem(RC_HC_WONDER_MOAT_5, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(403, 587), "Wonder Moat Before Gate 2", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_5));
locationTable[RC_HC_WONDER_MOAT_6] = Location::WonderItem(RC_HC_WONDER_MOAT_6, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(62, 555), "Wonder Moat Before Gate 3", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_6));
locationTable[RC_HC_WONDER_MOAT_7] = Location::WonderItem(RC_HC_WONDER_MOAT_7, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-256, 598), "Wonder Moat Before Gate 4", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_7));
locationTable[RC_HC_WONDER_MOAT_8] = Location::WonderItem(RC_HC_WONDER_MOAT_8, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-557, 568), "Wonder Moat Before Gate 5", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_8));
locationTable[RC_HC_WONDER_MOAT_9] = Location::WonderItem(RC_HC_WONDER_MOAT_9, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-819, 613), "Wonder Moat Before Gate 6", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_9));
locationTable[RC_HC_WONDER_MOAT_10] = Location::WonderItem(RC_HC_WONDER_MOAT_10, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(-1190, 561), "Wonder Moat Before Gate 7", RHT_WONDER_ITEM_HYRULE_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_MOAT_10));
locationTable[RC_HC_WONDER_COURTYARD_RIGHT_WINDOW] = Location::WonderItem(RC_HC_WONDER_COURTYARD_RIGHT_WINDOW, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_CASTLE_COURTYARD_ZELDA, TWO_ACTOR_PARAMS(0, -481), "Wonder Courtyard Right Window", RHT_WONDER_ITEM_CASTLE_COURTYARD_ZELDA, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_COURTYARD_RIGHT_WINDOW));
locationTable[RC_HC_WONDER_COURTYARD_LEFT_WINDOW] = Location::WonderItem(RC_HC_WONDER_COURTYARD_LEFT_WINDOW, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_CASTLE_COURTYARD_ZELDA, TWO_ACTOR_PARAMS(0, 476), "Wonder Courtyard Left Window", RHT_WONDER_ITEM_CASTLE_COURTYARD_ZELDA, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_WONDER_COURTYARD_LEFT_WINDOW));
locationTable[RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_1] = Location::WonderItem(RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1371, 497), "Wonder Back Skull Kids Grass 1", RHT_WONDER_ITEM_LOST_WOODS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_WONDER_BACK_SKULL_KIDS_GRASS_1));
locationTable[RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_2] = Location::WonderItem(RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1038, 557), "Wonder Back Skull Kids Grass 2", RHT_WONDER_ITEM_LOST_WOODS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_WONDER_BACK_SKULL_KIDS_GRASS_2));
locationTable[RC_LW_WONDER_FRONT_SKULL_KIDS_GRASS] = Location::WonderItem(RC_LW_WONDER_FRONT_SKULL_KIDS_GRASS, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1256, 194), "Wonder Front Skull Kids Grass", RHT_WONDER_ITEM_LOST_WOODS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_WONDER_FRONT_SKULL_KIDS_GRASS));
locationTable[RC_SFM_WONDER_ENTRANCE] = Location::WonderItem(RC_SFM_WONDER_ENTRANCE, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(-351, 2121), "Wonder Entrance Grass", RHT_WONDER_ITEM_SACRED_FOREST_MEADOW, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_WONDER_ENTRANCE));
locationTable[RC_SFM_WONDER_MAZE_1] = Location::WonderItem(RC_SFM_WONDER_MAZE_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(100, 1375), "Wonder First Row Grass", RHT_WONDER_ITEM_SACRED_FOREST_MEADOW, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_WONDER_MAZE_1));
locationTable[RC_SFM_WONDER_MAZE_2] = Location::WonderItem(RC_SFM_WONDER_MAZE_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(100, 1084), "Wonder Second Row Grass 1", RHT_WONDER_ITEM_SACRED_FOREST_MEADOW, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_WONDER_MAZE_2));
locationTable[RC_SFM_WONDER_MAZE_3] = Location::WonderItem(RC_SFM_WONDER_MAZE_3, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(-204, 1283), "Wonder Second Row Grass 2", RHT_WONDER_ITEM_SACRED_FOREST_MEADOW, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_WONDER_MAZE_3));
locationTable[RC_SFM_WONDER_MAZE_4] = Location::WonderItem(RC_SFM_WONDER_MAZE_4, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(-199, 177), "Wonder End of Maze Grass 1", RHT_WONDER_ITEM_SACRED_FOREST_MEADOW, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_WONDER_MAZE_4));
locationTable[RC_SFM_WONDER_MAZE_5] = Location::WonderItem(RC_SFM_WONDER_MAZE_5, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(299, 285), "Wonder End of Maze Grass 2", RHT_WONDER_ITEM_SACRED_FOREST_MEADOW, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_WONDER_MAZE_5));
locationTable[RC_KAK_WONDER_UNDER_CONSTRUCTION] = Location::WonderItem(RC_KAK_WONDER_UNDER_CONSTRUCTION, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(148, 1165), "Wonder Under Construction", RHT_WONDER_ITEM_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_WONDER_UNDER_CONSTRUCTION));
locationTable[RC_KAK_WONDER_ABOVE_COW] = Location::WonderItem(RC_KAK_WONDER_ABOVE_COW, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_IMPAS_HOUSE, TWO_ACTOR_PARAMS(153, -266), "Wonder Above Impa's Cow", RHT_WONDER_ITEM_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_WONDER_ABOVE_COW));
locationTable[RC_GY_WONDER_DAMPE_RACE_1] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(391, -2681), "Wonder Dampe's Grave 1", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_1));
locationTable[RC_GY_WONDER_DAMPE_RACE_2] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(394, -2588), "Wonder Dampe's Grave 2", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_2));
locationTable[RC_GY_WONDER_DAMPE_RACE_3] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(475, -2591), "Wonder Dampe's Grave 3", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_3));
locationTable[RC_GY_WONDER_DAMPE_RACE_4] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(562, -2588), "Wonder Dampe's Grave 4", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_4));
locationTable[RC_GY_WONDER_DAMPE_RACE_5] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(621, -3219), "Wonder Dampe's Grave 5", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_5));
locationTable[RC_GY_WONDER_DAMPE_RACE_6] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(570, -5778), "Wonder Dampe's Grave 6", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_6));
locationTable[RC_GY_WONDER_DAMPE_RACE_7] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_7, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(353, -5825), "Wonder Dampe's Grave 7", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_7));
locationTable[RC_GY_WONDER_DAMPE_RACE_8] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_8, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(1666, -5736), "Wonder Dampe's Grave 8", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_8));
locationTable[RC_GY_WONDER_DAMPE_RACE_9] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_9, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2549, -4598), "Wonder Dampe's Grave 9", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_9));
locationTable[RC_GY_WONDER_DAMPE_RACE_10] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_10, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2547, -4847), "Wonder Dampe's Grave 10", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_10));
locationTable[RC_GY_WONDER_DAMPE_RACE_11] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_11, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2726, -3634), "Wonder Dampe's Grave 11", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_11));
locationTable[RC_GY_WONDER_DAMPE_RACE_12] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_12, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2728, -3500), "Wonder Dampe's Grave 12", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_12));
locationTable[RC_GY_WONDER_DAMPE_RACE_13] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_13, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2633, -3394), "Wonder Dampe's Grave 13", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_13));
locationTable[RC_GY_WONDER_DAMPE_RACE_14] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_14, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2377, -3398), "Wonder Dampe's Grave 14", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_14));
locationTable[RC_GY_WONDER_DAMPE_RACE_15] = Location::WonderItem(RC_GY_WONDER_DAMPE_RACE_15, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(1308, -3125), "Wonder Dampe's Grave 15", RHT_WONDER_ITEM_DAMPES_GRAVE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_WONDER_DAMPE_RACE_15));
locationTable[RC_DMC_WONDER_BENEATH_BRIDGE_PLATFORM] = Location::WonderItem(RC_DMC_WONDER_BENEATH_BRIDGE_PLATFORM, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(6, -640), "Wonder Beneath Bridge Platform", RHT_WONDER_ITEM_DEATH_MOUNTAIN_CRATER, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_WONDER_BENEATH_BRIDGE_PLATFORM));
locationTable[RC_ZR_WONDER_NEAR_DOMAIN_1] = Location::WonderItem(RC_ZR_WONDER_NEAR_DOMAIN_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(3329, -1499), "Wonder Near Domain 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_DOMAIN_1));
locationTable[RC_ZR_WONDER_NEAR_DOMAIN_2] = Location::WonderItem(RC_ZR_WONDER_NEAR_DOMAIN_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(3161, -1493), "Wonder Near Domain 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_DOMAIN_2));
locationTable[RC_ZR_WONDER_NEAR_DOMAIN_3] = Location::WonderItem(RC_ZR_WONDER_NEAR_DOMAIN_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2987, -1499), "Wonder Near Domain 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_DOMAIN_3));
locationTable[RC_ZR_WONDER_NEAR_DOMAIN_4] = Location::WonderItem(RC_ZR_WONDER_NEAR_DOMAIN_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(2831, -1421), "Wonder Near Domain 4", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_DOMAIN_4));
locationTable[RC_ZR_WONDER_BEFORE_LADDER_1] = Location::WonderItem(RC_ZR_WONDER_BEFORE_LADDER_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(1287, -363), "Wonder Before Ladder 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_BEFORE_LADDER_1));
locationTable[RC_ZR_WONDER_BEFORE_LADDER_2] = Location::WonderItem(RC_ZR_WONDER_BEFORE_LADDER_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(1144, -296), "Wonder Before Ladder 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_BEFORE_LADDER_2));
locationTable[RC_ZR_WONDER_BEFORE_LADDER_3] = Location::WonderItem(RC_ZR_WONDER_BEFORE_LADDER_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(1021, -224), "Wonder Before Ladder 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_BEFORE_LADDER_3));
locationTable[RC_ZR_WONDER_BEFORE_LADDER_4] = Location::WonderItem(RC_ZR_WONDER_BEFORE_LADDER_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(902, -150), "Wonder Before Ladder 4", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_BEFORE_LADDER_4));
locationTable[RC_ZR_WONDER_BEFORE_LADDER_5] = Location::WonderItem(RC_ZR_WONDER_BEFORE_LADDER_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(786, -74), "Wonder Before Ladder 5", RHT_WONDER_ITEM_ZORAS_RIVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_BEFORE_LADDER_5));
locationTable[RC_ZR_WONDER_BEFORE_LADDER_6] = Location::WonderItem(RC_ZR_WONDER_BEFORE_LADDER_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(670, 3), "Wonder Before Ladder 6", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_BEFORE_LADDER_6));
locationTable[RC_ZR_WONDER_AFTER_LADDER_1] = Location::WonderItem(RC_ZR_WONDER_AFTER_LADDER_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(520, 12), "Wonder After Ladder 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_AFTER_LADDER_1));
locationTable[RC_ZR_WONDER_AFTER_LADDER_2] = Location::WonderItem(RC_ZR_WONDER_AFTER_LADDER_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(353, 9), "Wonder After Ladder 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_AFTER_LADDER_2));
locationTable[RC_ZR_WONDER_AFTER_LADDER_3] = Location::WonderItem(RC_ZR_WONDER_AFTER_LADDER_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(158, 6), "Wonder After Ladder 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_AFTER_LADDER_3));
locationTable[RC_ZR_WONDER_FROG_BRIDGE_1] = Location::WonderItem(RC_ZR_WONDER_FROG_BRIDGE_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(1204, -608), "Wonder Frog Bridge 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_FROG_BRIDGE_1));
locationTable[RC_ZR_WONDER_FROG_BRIDGE_2] = Location::WonderItem(RC_ZR_WONDER_FROG_BRIDGE_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(1124, -803), "Wonder Frog Bridge 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_FROG_BRIDGE_2));
locationTable[RC_ZR_WONDER_FROG_BRIDGE_3] = Location::WonderItem(RC_ZR_WONDER_FROG_BRIDGE_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(1020, -973), "Wonder Frog Bridge 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_FROG_BRIDGE_3));
locationTable[RC_ZR_WONDER_PILLARS_1] = Location::WonderItem(RC_ZR_WONDER_PILLARS_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(509, -1223), "Wonder Pillars 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_PILLARS_1));
locationTable[RC_ZR_WONDER_PILLARS_2] = Location::WonderItem(RC_ZR_WONDER_PILLARS_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(269, -1018), "Wonder Pillars 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_PILLARS_2));
locationTable[RC_ZR_WONDER_PILLARS_3] = Location::WonderItem(RC_ZR_WONDER_PILLARS_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(9, -1158), "Wonder Pillars 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_PILLARS_3));
locationTable[RC_ZR_WONDER_PILLARS_4] = Location::WonderItem(RC_ZR_WONDER_PILLARS_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-145, -938), "Wonder Pillars 4", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_PILLARS_4));
locationTable[RC_ZR_WONDER_LOWER_LAND_BRIDGE_1] = Location::WonderItem(RC_ZR_WONDER_LOWER_LAND_BRIDGE_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-147, -736), "Wonder Lower Land Bridge 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_1));
locationTable[RC_ZR_WONDER_LOWER_LAND_BRIDGE_2] = Location::WonderItem(RC_ZR_WONDER_LOWER_LAND_BRIDGE_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-141, -588), "Wonder Lower Land Bridge 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_2));
locationTable[RC_ZR_WONDER_LOWER_LAND_BRIDGE_3] = Location::WonderItem(RC_ZR_WONDER_LOWER_LAND_BRIDGE_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-142, -383), "Wonder Lower Land Bridge 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_3));
locationTable[RC_ZR_WONDER_LOWER_LAND_BRIDGE_4] = Location::WonderItem(RC_ZR_WONDER_LOWER_LAND_BRIDGE_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-141, -218), "Wonder Lower Land Bridge 4", RHT_WONDER_ITEM_ZORAS_RIVER, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_4));
locationTable[RC_ZR_WONDER_NEAR_CUCCO_1] = Location::WonderItem(RC_ZR_WONDER_NEAR_CUCCO_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-860, -38), "Wonder Near Cucco 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_CUCCO_1));
locationTable[RC_ZR_WONDER_NEAR_CUCCO_2] = Location::WonderItem(RC_ZR_WONDER_NEAR_CUCCO_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1063, -4), "Wonder Near Cucco 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_CUCCO_2));
locationTable[RC_ZR_WONDER_NEAR_CUCCO_3] = Location::WonderItem(RC_ZR_WONDER_NEAR_CUCCO_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1296, 242), "Wonder Near Cucco 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_NEAR_CUCCO_3));
locationTable[RC_ZR_WONDER_LOWER_RIVER_1] = Location::WonderItem(RC_ZR_WONDER_LOWER_RIVER_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1287, 457), "Wonder Lower River 1", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_RIVER_1));
locationTable[RC_ZR_WONDER_LOWER_RIVER_2] = Location::WonderItem(RC_ZR_WONDER_LOWER_RIVER_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1288, 668), "Wonder Lower River 2", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_RIVER_2));
locationTable[RC_ZR_WONDER_LOWER_RIVER_3] = Location::WonderItem(RC_ZR_WONDER_LOWER_RIVER_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1290, 862), "Wonder Lower River 3", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_RIVER_3));
locationTable[RC_ZR_WONDER_LOWER_RIVER_4] = Location::WonderItem(RC_ZR_WONDER_LOWER_RIVER_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1288, 1052), "Wonder Lower River 4", RHT_WONDER_ITEM_ZORAS_RIVER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_WONDER_LOWER_RIVER_4));
locationTable[RC_ZF_WONDER_ROCK] = Location::WonderItem(RC_ZF_WONDER_ROCK, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-667, 1053), "Wonder Scarecrow Rock", RHT_WONDER_ITEM_ZORAS_FOUNTAIN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_WONDER_ROCK));
locationTable[RC_GV_WONDER_LOWER_WATERFALL] = Location::WonderItem(RC_GV_WONDER_LOWER_WATERFALL, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-45, -298), "Wonder Lower Waterfall", RHT_WONDER_ITEM_GERUDO_VALLEY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_WONDER_LOWER_WATERFALL));
locationTable[RC_GV_WONDER_UPPER_WATERFALL] = Location::WonderItem(RC_GV_WONDER_UPPER_WATERFALL, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(47, -2620), "Wonder Upper Waterfall", RHT_WONDER_ITEM_GERUDO_VALLEY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_WONDER_UPPER_WATERFALL));
locationTable[RC_GF_WONDER_ENTRANCE_SIGN] = Location::WonderItem(RC_GF_WONDER_ENTRANCE_SIGN, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-814, -810), "Wonder Entrance Sign", RHT_WONDER_ITEM_GERUDOS_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_WONDER_ENTRANCE_SIGN));
locationTable[RC_GF_WONDER_ARCHERY_SIGN] = Location::WonderItem(RC_GF_WONDER_ARCHERY_SIGN, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(1094, -412), "Wonder Archery Sign", RHT_WONDER_ITEM_GERUDOS_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_WONDER_ARCHERY_SIGN));
locationTable[RC_TH_WONDER_1_TORCH_1] = Location::WonderItem(RC_TH_WONDER_1_TORCH_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-305, -2633), "Wonder 1 Torch Outer Exit Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_1_TORCH_1));
locationTable[RC_TH_WONDER_1_TORCH_2] = Location::WonderItem(RC_TH_WONDER_1_TORCH_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-307, -2200), "Wonder 1 Torch Inner Exit Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_1_TORCH_2));
locationTable[RC_TH_WONDER_STEEP_SLOPE_LOWER_EXIT] = Location::WonderItem(RC_TH_WONDER_STEEP_SLOPE_LOWER_EXIT, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(71, -928), "Wonder Steep Slope Lower Exit Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_STEEP_SLOPE_LOWER_EXIT));
locationTable[RC_TH_WONDER_STEEP_SLOPE_UPPER_EXIT] = Location::WonderItem(RC_TH_WONDER_STEEP_SLOPE_UPPER_EXIT, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(77, -1345), "Wonder Steep Slope Upper Exit Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_STEEP_SLOPE_UPPER_EXIT));
locationTable[RC_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT] = Location::WonderItem(RC_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-65, 173), "Wonder Double Jail Lower Exit Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT));
locationTable[RC_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT] = Location::WonderItem(RC_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(709, 180), "Wonder Double Jail Upper Exit Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT));
locationTable[RC_TH_WONDER_KITCHEN_SKULL] = Location::WonderItem(RC_TH_WONDER_KITCHEN_SKULL, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1204, -610), "Wonder Kitchen Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_KITCHEN_SKULL));
locationTable[RC_TH_WONDER_KITCHEN_SOUP] = Location::WonderItem(RC_TH_WONDER_KITCHEN_SOUP, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1940, -585), "Wonder Kitchen Soup", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_KITCHEN_SOUP));
locationTable[RC_TH_WONDER_DEAD_END_SKULL_ENTRANCE] = Location::WonderItem(RC_TH_WONDER_DEAD_END_SKULL_ENTRANCE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1666, -2323), "Wonder Dead End Entrance Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_DEAD_END_SKULL_ENTRANCE));
locationTable[RC_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL] = Location::WonderItem(RC_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1378, -2829), "Wonder Dead End Near Jail Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL));
locationTable[RC_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL] = Location::WonderItem(RC_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(820, -3511), "Wonder Break Room Bottom Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL));
locationTable[RC_TH_WONDER_BREAK_ROOM_TOP_SKULL] = Location::WonderItem(RC_TH_WONDER_BREAK_ROOM_TOP_SKULL, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(38, -3509), "Wonder Break Room Top Skull", RHT_WONDER_ITEM_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_WONDER_BREAK_ROOM_TOP_SKULL));
locationTable[RC_COLOSSUS_WONDER_OASIS_TREE_1] = Location::WonderItem(RC_COLOSSUS_WONDER_OASIS_TREE_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(1161, 2383), "Wonder Oasis Tree 1", RHT_WONDER_ITEM_DESERT_COLOSSUS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_WONDER_OASIS_TREE_1));
locationTable[RC_COLOSSUS_WONDER_OASIS_TREE_2] = Location::WonderItem(RC_COLOSSUS_WONDER_OASIS_TREE_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(1113, 2581), "Wonder Oasis Tree 2", RHT_WONDER_ITEM_DESERT_COLOSSUS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_WONDER_OASIS_TREE_2));
locationTable[RC_COLOSSUS_WONDER_OASIS_CHILD_TREE] = Location::WonderItem(RC_COLOSSUS_WONDER_OASIS_CHILD_TREE, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(456, 2325), "Wonder Oasis Child Tree", RHT_WONDER_ITEM_DESERT_COLOSSUS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_WONDER_OASIS_CHILD_TREE));
locationTable[RC_COLOSSUS_WONDER_GF_TREE_1] = Location::WonderItem(RC_COLOSSUS_WONDER_GF_TREE_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(2406, -1407), "Wonder Great Fairy Tree 1", RHT_WONDER_ITEM_DESERT_COLOSSUS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_WONDER_GF_TREE_1));
locationTable[RC_COLOSSUS_WONDER_GF_TREE_2] = Location::WonderItem(RC_COLOSSUS_WONDER_GF_TREE_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(2098, -1402), "Wonder Great Fairy Tree 2", RHT_WONDER_ITEM_DESERT_COLOSSUS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_WONDER_GF_TREE_2));
// Dungeon Wonder Items
locationTable[RC_SHADOW_TEMPLE_WONDER_THREE_POTS] = Location::WonderItem(RC_SHADOW_TEMPLE_WONDER_THREE_POTS, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(12, 1), "Wonder Three Pots Sign", RHT_WONDER_ITEM_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WONDER_THREE_POTS));
locationTable[RC_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM] = Location::WonderItem(RC_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM, RCQUEST_VANILLA, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(7, 12), "Wonder Beamos Sign", RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM));
locationTable[RC_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM] = Location::WonderItem(RC_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM, RCQUEST_VANILLA, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(4, 2), "Wonder Top of Eye Statue", RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM));
locationTable[RC_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM] = Location::WonderItem(RC_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM, RCQUEST_VANILLA, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(5, 16), "Wonder Torch Slug Sign", RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM));
// MQ Dungeon Wonder Items
locationTable[RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1] = Location::WonderItem(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(7, 12), "MQ Wonder Basement Grave 1", RHT_WONDER_ITEM_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1));
locationTable[RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2] = Location::WonderItem(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(7, 11), "MQ Wonder Basement Grave 2", RHT_WONDER_ITEM_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2));
locationTable[RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3] = Location::WonderItem(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(7, 10), "MQ Wonder Basement Grave 3", RHT_WONDER_ITEM_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3));
locationTable[RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4] = Location::WonderItem(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(7, 9), "MQ Wonder Basement Grave 4", RHT_WONDER_ITEM_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(0, 13), "MQ Wonder Entrance Cow Left", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(0, 14), "MQ Wonder Entrance Cow Right", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1, 19), "MQ Wonder Elevator Cow", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW));
locationTable[RC_JABU_JABUS_BELLY_MQ_HOLES_COW] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_HOLES_COW, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(2, 13), "MQ Wonder Holes Cow", RHT_WONDER_ITEM_JABU_JABU, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_COW));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(3, 15), "MQ Wonder Basement Right Cow 1", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(3, 13), "MQ Wonder Basement Right Cow 2", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(3, 14), "MQ Wonder Basement Right Cow 3", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(3, 18), "MQ Wonder Basement Left Cow 1", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(3, 16), "MQ Wonder Basement Left Cow 2", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(3, 17), "MQ Wonder Basement Left Cow 3", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(6, 7), "MQ Wonder After Big Octo Cow", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(4, 13), "MQ Wonder Jigglies Cow", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 21), "MQ Wonder Like Like Right Cow 1", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 20), "MQ Wonder Like Like Right Cow 2", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 19), "MQ Wonder Like Like Right Cow 3", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 24), "MQ Wonder Like Like Left Cow 1", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 23), "MQ Wonder Like Like Left Cow 2", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 22), "MQ Wonder Like Like Left Cow 3", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 29), "MQ Wonder Like Like Grass 1", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 28), "MQ Wonder Like Like Grass 2", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(11, 27), "MQ Wonder Like Like Grass 3", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(5, 10), "MQ Wonder Before Boss Left Cow", RHT_WONDER_ITEM_JABU_JABU, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(5, 9), "MQ Wonder Before Boss Right Cow 1", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1));
locationTable[RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2] = Location::WonderItem(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(5, 11), "MQ Wonder Before Boss Right Cow 2", RHT_WONDER_ITEM_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(4, 6), "MQ Wonder Shortcut Room 1", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(4, 7), "MQ Wonder Shortcut Room 2", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(4, 8), "MQ Wonder Shortcut Room 3", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(19, 9), "MQ Wonder Boss Key Room Hookshot", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(19, 10), "MQ Wonder Boss Key Room Bow", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(5, 19), "MQ Wonder Lizalfos Maze", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(7, 6), "MQ Wonder East Tower Large Face 1", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(7, 7), "MQ Wonder East Tower Large Face 2", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(7, 4), "MQ Wonder East Tower Small Face 1", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(7, 5), "MQ Wonder East Tower Small Face 2", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(16, 0), "MQ Wonder Torch Room", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(10, 42), "MQ Wonder Fire Maze", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(12, 0), "MQ Wonder After Flare Dancer", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER));
locationTable[RC_FIRE_TEMPLE_MQ_WONDER_STAIRCASE] = Location::WonderItem(RC_FIRE_TEMPLE_MQ_WONDER_STAIRCASE, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(14, 1), "MQ Wonder Hammer Staircase", RHT_WONDER_ITEM_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_WONDER_STAIRCASE));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(19, 5), "MQ Wonder Lizalfos Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(17, 7), "MQ Wonder Longshot Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(18, 3), "MQ Wonder Stalfos Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(5, 4), "MQ Wonder Hookshot Staircase Right 1", RHT_WONDER_ITEM_WATER_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(5, 3), "MQ Wonder Hookshot Staircase Right 2", RHT_WONDER_ITEM_WATER_TEMPLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(5, 2), "MQ Wonder Hookshot Staircase Right 3", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(5, 11), "MQ Wonder Hookshot Staircase Left 1", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(5, 10), "MQ Wonder Hookshot Staircase Left 2", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(5, 9), "MQ Wonder Hookshot Staircase Left 3", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(7, 0), "MQ Wonder After Dark Link", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(8, 4), "MQ Wonder Dragon Room Left Eye", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(8, 6), "MQ Wonder Dragon Room Right Eye", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(8, 5), "MQ Wonder Dragon Room Portrait", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(3, 3), "MQ Wonder Triple Torches Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(15, 0), "MQ Wonder Water Sprouts 1", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(15, 1), "MQ Wonder Water Sprouts 2", RHT_WONDER_ITEM_WATER_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(16, 0), "MQ Wonder Freestanding Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, 1), "MQ Wonder Before Boss 1", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, 0), "MQ Wonder Before Boss 2", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(2, 24), "MQ Wonder Under Pillar Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(20, 2), "MQ Wonder Lizalfos Hallway", RHT_WONDER_ITEM_WATER_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY));
locationTable[RC_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM] = Location::WonderItem(RC_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(10, 1), "MQ Wonder GS Storage Room", RHT_WONDER_ITEM_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM));
locationTable[RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER] = Location::WonderItem(RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(18, 8), "MQ Wonder Chest Hammer", RHT_WONDER_ITEM_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER));
locationTable[RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH] = Location::WonderItem(RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(18, 9), "MQ Wonder Chest Sword", RHT_WONDER_ITEM_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH));
locationTable[RC_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS] = Location::WonderItem(RC_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(12, 1), "MQ Wonder Three Pots Sign", RHT_WONDER_ITEM_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 5), "MQ Wonder Main Room West Sign 1", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 6), "MQ Wonder Main Room West Sign 2", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 8), "MQ Wonder Main Room West Sign 3", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 10), "MQ Wonder Main Room West Sign 4", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 12), "MQ Wonder Main Room East Sign 1", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 11), "MQ Wonder Main Room East Sign 2", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 9), "MQ Wonder Main Room East Sign 3", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0, 7), "MQ Wonder Main Room East Sign 4", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(5, 0), "MQ Wonder East Room Sign 1", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(5, 1), "MQ Wonder East Room Sign 2", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(5, 2), "MQ Wonder East Room Sign 3", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3));
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4] = Location::WonderItem(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(5, 3), "MQ Wonder East Room Sign 4", RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4));
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM] = Location::WonderItem(RC_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(7, 9), "MQ Wonder Dinolfos Sign", RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM));
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE] = Location::WonderItem(RC_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(4, 4), "MQ Wonder Top of Eye Statue", RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE));
locationTable[RC_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL] = Location::WonderItem(RC_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(12, 12), "MQ Wonder Shadow Trial Bombflower", RHT_GANONS_CASTLE_WONDER_ITEM, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL));
// clang-format on
}
static RegisterShipInitFunc registerShuffleWonderItems(RegisterShuffleWonderItems, { "IS_RANDO" });
static RegisterShipInitFunc registerWonderItemLocations(Rando::StaticData::RegisterWonderItemLocations);

View file

@ -397,8 +397,8 @@ void SetAllEntrancesData() {
{ EntranceType::ThievesHideout, RR_TH_KITCHEN_OPPOSITE_CORRIDOR, RR_GF_NEAR_GS, ENTR_GERUDOS_FORTRESS_10 } },
{ { EntranceType::ThievesHideout, RR_GF_BELOW_CHEST, RR_TH_BREAK_ROOM, ENTR_THIEVES_HIDEOUT_10 },
{ EntranceType::ThievesHideout, RR_TH_BREAK_ROOM, RR_GF_BELOW_CHEST, ENTR_GERUDOS_FORTRESS_11 } },
{ { EntranceType::ThievesHideout, RR_GF_ABOVE_JAIL, RR_TH_BREAK_ROOM_CORRIDOR, ENTR_THIEVES_HIDEOUT_11 },
{ EntranceType::ThievesHideout, RR_TH_BREAK_ROOM_CORRIDOR, RR_GF_ABOVE_JAIL, ENTR_GERUDOS_FORTRESS_12 } },
{ { EntranceType::ThievesHideout, RR_GF_ABOVE_JAIL, RR_TH_BREAK_ROOM_UPPER_CORRIDOR, ENTR_THIEVES_HIDEOUT_11 },
{ EntranceType::ThievesHideout, RR_TH_BREAK_ROOM_UPPER_CORRIDOR, RR_GF_ABOVE_JAIL, ENTR_GERUDOS_FORTRESS_12 } },
{ { EntranceType::ThievesHideout, RR_GF_BELOW_GS, RR_TH_DEAD_END_CELL, ENTR_THIEVES_HIDEOUT_12 },
{ EntranceType::ThievesHideout, RR_TH_DEAD_END_CELL, RR_GF_BELOW_GS, ENTR_GERUDOS_FORTRESS_13 } },

View file

@ -590,6 +590,15 @@ Rando::Location Rando::Location::Bush(RandomizerCheck rc, RandomizerCheckQuest q
false, collectionCheck };
}
Rando::Location Rando::Location::WonderItem(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_,
RandomizerHintTextKey hintKey, RandomizerGet vanillaItem,
SpoilerCollectionCheck collectionCheck) {
return { rc, quest_, RCTYPE_WONDER_ITEM, area_, ACTOR_EN_WONDER_ITEM,
scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem,
false, collectionCheck };
}
Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_) {
return { rc, quest_, RCTYPE_GOSSIP_STONE, area_, ACTOR_EN_GS,

View file

@ -261,6 +261,11 @@ class Location {
int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey,
ActorID actorId_, SpoilerCollectionCheck collectionCheck);
static Location WonderItem(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
SceneID scene_, int32_t actorParams_, std::string&& shortName_,
RandomizerHintTextKey hintKey, RandomizerGet vanillaItem,
SpoilerCollectionCheck collectionCheck);
static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_,
ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_);

View file

@ -280,10 +280,18 @@ void RegionTable_Init_BottomOfTheWell() {
//Instead of blowing up the boulder, you can aim through the lower left side with sling(either age) or as child with bow
//Not even bow extension seems to get adult's bow to work
//this would be a trick
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, (AnyAgeTime([]{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets()) ||
(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_OUTER_LOBBY_POT, (AnyAgeTime([]{return logic->BlastOrSmash();}) && logic->CanHitEyeTargets()) ||
(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_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)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_BOTW_ENTRYWAY, logic->CanUse(RG_CRAWL) && (logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT))),
@ -321,6 +329,10 @@ void RegionTable_Init_BottomOfTheWell() {
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, logic->CanBreakPots()),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, logic->CanBreakPots()),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, logic->CanBreakPots()),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_BOTW_MQ_MIDDLE, true),

View file

@ -421,6 +421,10 @@ void RegionTable_Init_DekuTree() {
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1, logic->CanJumpslashExceptHammer()),
LOCATION(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2, logic->CanJumpslashExceptHammer()),
LOCATION(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3, logic->CanJumpslashExceptHammer()),
LOCATION(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4, logic->CanJumpslashExceptHammer()),
}, {
//Exits
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, logic->CanUse(RG_CRAWL) && AnyAgeTime([]{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);})),

View file

@ -626,9 +626,11 @@ void RegionTable_Init_FireTemple() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanUse(RG_HOOKSHOT)),
}, {
//Locations
LOCATION(RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, logic->HookshotOrBoomerang()),
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, logic->HookshotOrBoomerang()),
LOCATION(RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, logic->HookshotOrBoomerang()),
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, logic->HookshotOrBoomerang()),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW, logic->HookshotOrBoomerang() && logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, true),
@ -676,7 +678,12 @@ void RegionTable_Init_FireTemple() {
ENTRANCE(RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_LOWER, true),
});
areaTable[RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_LOWER] = Region("Fire Temple MQ Shortcut Room Lower", SCENE_FIRE_TEMPLE, {}, {}, {
areaTable[RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_LOWER] = Region("Fire Temple MQ Shortcut Room Lower", SCENE_FIRE_TEMPLE, {}, {
//Locations
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3, logic->CanUse(RG_MEGATON_HAMMER)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_MID, (logic->HasFireSource() && (logic->IsAdult || (logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_CLIMB)))) ||
(ctx->GetTrickOption(RT_FIRE_MQ_CLIMB) && logic->CanUse(RG_HOVER_BOOTS) && logic->HasItem(RG_CLIMB))),
@ -697,7 +704,10 @@ void RegionTable_Init_FireTemple() {
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE, true),
});
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE] = Region("Fire Temple MQ Lower Lizalfos Maze", SCENE_FIRE_TEMPLE, {}, {}, {
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE] = Region("Fire Temple MQ Lower Lizalfos Maze", SCENE_FIRE_TEMPLE, {}, {
//Locations
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_LOWER, true),
//Explosives can also reach this room. Chus is relatively simple, they need to detonate on the first horizontal bar up from the floor while horizontally near the switch, but bombs are much harder
@ -797,7 +807,13 @@ void RegionTable_Init_FireTemple() {
areaTable[RR_FIRE_TEMPLE_MQ_TORCH_SLUG_CLIMB] = Region("Fire Temple MQ Torch Slug Climb", SCENE_FIRE_TEMPLE, {
//Events
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanUse(RG_HOOKSHOT)),
}, {}, {
}, {
//Locations
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_ABOVE_MAZE, true),
ENTRANCE(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_CLIMB)),
@ -842,6 +858,7 @@ void RegionTable_Init_FireTemple() {
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates() && logic->FireTimer() >= 16),
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, logic->CanBreakSmallCrates() && logic->FireTimer() >= 24),
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, logic->CanBreakSmallCrates() && logic->FireTimer() >= 16),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM, logic->CanUse(RG_HOOKSHOT) && logic->FireTimer() >= 16),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_ABOVE_CAGE, (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)) && logic->FireTimer() >= 24),
@ -945,6 +962,7 @@ void RegionTable_Init_FireTemple() {
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, logic->CanUse(RG_BOOMERANG)),
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, logic->CanBreakPots()),
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanBreakPots()),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE, logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOOMERANG)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_GS_LIZALFOS_ROOM, true),
@ -972,6 +990,7 @@ void RegionTable_Init_FireTemple() {
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, logic->CanBreakPots()),
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, logic->CanBreakPots()),
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanUse(RG_BOOMERANG)),
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_3F_FLARE_DANCER, true),
@ -992,7 +1011,10 @@ void RegionTable_Init_FireTemple() {
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB, true),
});
areaTable[RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB] = Region("Fire Temple MQ Locked Climb", SCENE_FIRE_TEMPLE, {}, {}, {
areaTable[RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB] = Region("Fire Temple MQ Locked Climb", SCENE_FIRE_TEMPLE, {}, {
//Locations
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_3F_FLARE_DANCER, true),
ENTRANCE(RR_FIRE_TEMPLE_MQ_NARROW_STAIRS_ROOM, logic->SmallKeys(SCENE_FIRE_TEMPLE, 4) && logic->HasItem(RG_CLIMB)),
@ -1032,7 +1054,10 @@ void RegionTable_Init_FireTemple() {
ENTRANCE(RR_FIRE_TEMPLE_MQ_NARROW_STAIRS_4F, logic->SmallKeys(SCENE_FIRE_TEMPLE, 5)),
});
areaTable[RR_FIRE_TEMPLE_MQ_BASE_OF_COLLAPSING_STAIRS] = Region("Fire Temple MQ Base of Collapsing Stairs", SCENE_FIRE_TEMPLE, {}, {}, {
areaTable[RR_FIRE_TEMPLE_MQ_BASE_OF_COLLAPSING_STAIRS] = Region("Fire Temple MQ Base of Collapsing Stairs", SCENE_FIRE_TEMPLE, {}, {
//Locations
LOCATION(RC_FIRE_TEMPLE_MQ_WONDER_STAIRCASE, logic->Get(LOGIC_FIRE_HIT_STAIRS) && logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_FIRE_TEMPLE_MQ_TOP_OF_COLLAPSING_STAIRS, logic->Get(LOGIC_FIRE_HIT_STAIRS) && logic->IsAdult),
ENTRANCE(RR_FIRE_TEMPLE_MQ_ABOVE_FIRE_MAZE, logic->CanUse(RG_HOOKSHOT)),

View file

@ -564,7 +564,10 @@ void RegionTable_Init_GanonsCastle() {
//Events
//A torch run from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE is possible but tight, so would be a trick
EVENT_ACCESS(LOGIC_SHADOW_TRIAL_FIRST_CHEST, logic->CanDetonateUprightBombFlower()),
}, {}, {
}, {
//Locations
LOCATION(RC_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL, (logic->CanDetonateBombFlowers() || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE))) && (logic->TakeDamage() || logic->CanUse(RG_NAYRUS_LOVE))),
}, {
//Exits
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, logic->IsAdult || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, true),

View file

@ -107,7 +107,10 @@ void RegionTable_Init_GerudoTrainingGround() {
ENTRANCE(RR_GERUDO_TRAINING_GROUND_BEHIND_HEAVY_BLOCK, true),
});
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", SCENE_GERUDO_TRAINING_GROUND, {}, {
//Locations
LOCATION(RC_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM, logic->CanUse(RG_HOVER_BOOTS)), //RANDOTODO: add trick for jump+jumpslash and jump only to pillar
}, {
//Exits
ENTRANCE(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, true),
ENTRANCE(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM_UPPER, true),
@ -137,6 +140,7 @@ void RegionTable_Init_GerudoTrainingGround() {
//Locations
LOCATION(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, logic->CanAttack() && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, (logic->CanUse(RG_MEGATON_HAMMER) || (logic->TakeDamage() && ctx->GetTrickOption(RT_FIRE_RINGS))) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_FAIRY_BOW)),
@ -172,6 +176,7 @@ void RegionTable_Init_GerudoTrainingGround() {
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true),
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true),
LOCATION(RC_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_GERUDO_TRAINING_GROUND_LOBBY, true),
@ -275,7 +280,10 @@ void RegionTable_Init_GerudoTrainingGround() {
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, true),
});
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE] = Region("Gerudo Training Ground MQ Statue Room Ledge", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE] = Region("Gerudo Training Ground MQ Statue Room Ledge", SCENE_GERUDO_TRAINING_GROUND, {}, {
//Locations
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE, logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
}, {
//Exits
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, true),
//implies dropping down to hit the switch. Using swords, especially master, is a bit awkward, may be trick worthy, but is only relevant with other tricks
@ -400,7 +408,8 @@ void RegionTable_Init_GerudoTrainingGround() {
//is logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true) && logic->CanKillEnemy(RE_ARMOS, ED_CLOSE, true, 1, true) broken down to exclude sticks, as it takes too many to clear the room
//Proper enemy kill room ammo logic is needed to handle this room
//some combinations may be impossible without taking damage, keep an eye out for issues here
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, true),

View file

@ -266,12 +266,14 @@ void RegionTable_Init_JabuJabusBelly() {
EVENT_ACCESS(LOGIC_NUT_ACCESS, logic->CanBreakPots()),
}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, logic->BlastOrSmash() && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, logic->BlastOrSmash() && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_ENTRYWAY, true),
@ -283,12 +285,13 @@ void RegionTable_Init_JabuJabusBelly() {
EVENT_ACCESS(LOGIC_JABU_MQ_LIFT_ROOM_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, true),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, true),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, true),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, true),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW, logic->CanUse(RG_FAIRY_SLINGSHOT) && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_BEGINNING, true),
@ -322,6 +325,7 @@ void RegionTable_Init_JabuJabusBelly() {
//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)),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, true),
@ -345,6 +349,12 @@ void RegionTable_Init_JabuJabusBelly() {
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, logic->HasItem(RG_CLIMB)),
@ -435,12 +445,21 @@ void RegionTable_Init_JabuJabusBelly() {
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_EAST] = Region("Jabu Jabus Belly MQ Fork North East", SCENE_JABU_JABU, {}, {
//Locations
//Implies CanKillEnemy(RE_LIKE_LIKE)
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1, logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2, logic->HasExplosives()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3, logic->HasExplosives()),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, true),
@ -492,6 +511,7 @@ void RegionTable_Init_JabuJabusBelly() {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_JIGGLIES_ROOM, true),
@ -504,6 +524,7 @@ void RegionTable_Init_JabuJabusBelly() {
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_GRASS, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_1, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO, true),
@ -541,11 +562,14 @@ void RegionTable_Init_JabuJabusBelly() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanBreakPots()),
}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, (logic->HasItem(RG_CLIMB) && (logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT)))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_LONGSHOT))),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, (logic->HasItem(RG_CLIMB) && (logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT)))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_LONGSHOT))),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_TO_NEAR_BOSS_ROOM, true),

View file

@ -344,6 +344,7 @@ void RegionTable_Init_ShadowTemple() {
areaTable[RR_SHADOW_TEMPLE_THREE_SKULL_JARS] = Region("Shadow Temple Three Skull Jars", SCENE_SHADOW_TEMPLE, {}, {
//Locations
LOCATION(RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, logic->HasItem(RG_GORONS_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)),
LOCATION(RC_SHADOW_TEMPLE_WONDER_THREE_POTS, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_SHADOW_TEMPLE_MAZE, true),
@ -740,7 +741,8 @@ void RegionTable_Init_ShadowTemple() {
areaTable[RR_SHADOW_TEMPLE_MQ_THREE_SKULL_JARS] = Region("Shadow Temple MQ Three Skull Jars", SCENE_SHADOW_TEMPLE, {}, {
//Locations
LOCATION(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, true),
LOCATION(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, true),
LOCATION(RC_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, true),

View file

@ -984,6 +984,8 @@ void RegionTable_Init_SpiritTemple() {
//Locations
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
LOCATION(RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER, logic->CanUse(RG_MEGATON_HAMMER)),
LOCATION(RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH, logic->CanJumpslashExceptHammer()),
}, {
//Exits
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, true),

View file

@ -760,7 +760,11 @@ void RegionTable_Init_WaterTemple() {
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP, true),
});
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP] = Region("Water Temple MQ Boss Door Ramp", SCENE_WATER_TEMPLE, {}, {}, {
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP] = Region("Water Temple MQ Boss Door Ramp", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_RISING_TARGET_LEDGE, true),
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_DOOR, logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE)),
@ -789,7 +793,8 @@ void RegionTable_Init_WaterTemple() {
areaTable[RR_WATER_TEMPLE_MQ_SIDE_TOWER_2F] = Region("Water Temple MQ Side Tower 2F", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, logic->CanUse(RG_HOOKSHOT) && ((logic->WaterLevel(WL_MID) && logic->HasItem(RG_OPEN_CHEST)) || logic->CanOpenUnderwaterChest())),
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, logic->CanUse(RG_HOOKSHOT) && ((logic->WaterLevel(WL_MID) && logic->HasItem(RG_OPEN_CHEST)) || logic->CanOpenUnderwaterChest())),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM, logic->CanUse(RG_HOOKSHOT) && (logic->WaterLevel(WL_MID) || logic->CanUse(RG_IRON_BOOTS))),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_SIDE_TOWER_1F, logic->WaterLevel(WL_LOW) || logic->CanUse(RG_IRON_BOOTS)),
@ -810,7 +815,8 @@ void RegionTable_Init_WaterTemple() {
areaTable[RR_WATER_TEMPLE_MQ_3_STALFOS_ROOM] = Region("Water Temple MQ 3 Stalfos Room", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_LOW_EMBLEM, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 4)),
@ -821,7 +827,8 @@ void RegionTable_Init_WaterTemple() {
EVENT_ACCESS(LOGIC_WATER_MQ_SIDE_TOWER_TARGETS, logic->CanKillEnemy(RE_LIZALFOS) && logic->CanKillEnemy(RE_SPIKE)),
}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, logic->Get(LOGIC_WATER_MQ_SIDE_TOWER_TARGETS) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, logic->Get(LOGIC_WATER_MQ_SIDE_TOWER_TARGETS) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_SIDE_TOWER_1F, true),
@ -901,7 +908,8 @@ void RegionTable_Init_WaterTemple() {
areaTable[RR_WATER_TEMPLE_MQ_PILLAR_B1_FINAL] = Region("Water Temple MQ Central Pillar B1 Final", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM, logic->CanUse(RG_HOOKSHOT)),
}, {});
areaTable[RR_WATER_TEMPLE_MQ_STORAGE_ROOM] = Region("Water Temple MQ Storage Room", SCENE_WATER_TEMPLE, {}, {
@ -944,6 +952,7 @@ void RegionTable_Init_WaterTemple() {
LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, logic->CanBreakSmallCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
@ -978,6 +987,7 @@ void RegionTable_Init_WaterTemple() {
LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL_A, logic->CanUse(RG_HOOKSHOT)),
@ -1024,13 +1034,29 @@ void RegionTable_Init_WaterTemple() {
ENTRANCE(RR_WATER_TEMPLE_MQ_2F_CENTRAL_H, logic->WaterLevel(WL_HIGH) && logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS)),
});
areaTable[RR_WATER_TEMPLE_MQ_WATERFALL] = Region("Water Temple Waterfall", SCENE_WATER_TEMPLE, {}, {}, {
areaTable[RR_WATER_TEMPLE_MQ_WATERFALL] = Region("Water Temple Waterfall", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1, logic->CanUse(RG_LONGSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2, logic->CanUse(RG_LONGSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3, logic->CanUse(RG_LONGSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1, logic->CanUse(RG_LONGSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2, logic->CanUse(RG_LONGSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3, logic->CanUse(RG_LONGSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_OUTSIDE_WATERFALL, logic->SmallKeys(SCENE_WATER_TEMPLE, 1)),
ENTRANCE(RR_WATER_TEMPLE_MQ_WATERFALL_TOP, logic->CanUse(RG_LONGSHOT)),
});
areaTable[RR_WATER_TEMPLE_MQ_WATERFALL_TOP] = Region("Water Temple Waterfall Top", SCENE_WATER_TEMPLE, {}, {}, {
areaTable[RR_WATER_TEMPLE_MQ_WATERFALL_TOP] = Region("Water Temple Waterfall Top", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_WATERFALL, logic->CanUse(RG_LONGSHOT) && logic->CanHitSwitch(ED_FAR)),
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT, true),
@ -1097,8 +1123,9 @@ void RegionTable_Init_WaterTemple() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanBreakPots()),
}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, true),
@ -1138,6 +1165,8 @@ void RegionTable_Init_WaterTemple() {
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE, logic->CanUse(RG_HOOKSHOT)),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_POTS, logic->CanUse(RG_LONGSHOT)),
@ -1155,6 +1184,7 @@ void RegionTable_Init_WaterTemple() {
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, logic->CanBreakSmallCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
@ -1164,8 +1194,10 @@ void RegionTable_Init_WaterTemple() {
areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", SCENE_WATER_TEMPLE, {},
{
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE, logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 8),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE, logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 8),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_POTS, logic->CanUse(RG_LONGSHOT)),
@ -1261,6 +1293,8 @@ void RegionTable_Init_WaterTemple() {
LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, logic->CanBreakCrates()),
// A vanilla bug causes a glitched damage value on hardware and undefined behavior in SOH. Matching the resulting damage triggers with an additional array entry.
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES, logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW)),
}, {});
areaTable[RR_WATER_TEMPLE_MQ_SPIKE_MOAT] = Region("Water Temple MQ Spike Moat", SCENE_WATER_TEMPLE, {}, {}, {
@ -1309,9 +1343,9 @@ void RegionTable_Init_WaterTemple() {
areaTable[RR_WATER_TEMPLE_MQ_CANAL_ALCOVE] = Region("Water Temple MQ Canal Alcove", SCENE_WATER_TEMPLE, {}, {}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_3_JETS_ROOM, logic->SmallKeys(SCENE_WATER_TEMPLE, 2)),
ENTRANCE(RR_WATER_TEMPLE_MQ_SCARECROW_CANAL, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
ENTRANCE(RR_WATER_TEMPLE_MQ_BEHIND_CANAL, logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->HasItem(RG_BRONZE_SCALE)),
ENTRANCE(RR_WATER_TEMPLE_MQ_3_JETS_ROOM_SWITCH_SIDE, logic->SmallKeys(SCENE_WATER_TEMPLE, 2)),
ENTRANCE(RR_WATER_TEMPLE_MQ_SCARECROW_CANAL, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
ENTRANCE(RR_WATER_TEMPLE_MQ_BEHIND_CANAL, logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->HasItem(RG_BRONZE_SCALE)),
});
areaTable[RR_WATER_TEMPLE_MQ_BEHIND_CANAL] = Region("Water Temple MQ Behind Canal", SCENE_WATER_TEMPLE, {}, {}, {
@ -1322,23 +1356,38 @@ void RegionTable_Init_WaterTemple() {
areaTable[RR_WATER_TEMPLE_MQ_FREESTANDING_ROOM] = Region("Water Temple MQ Freestanding Room", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, logic->CanBreakCrates()),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_BEHIND_CANAL, AnyAgeTime([]{return logic->CanKillEnemy(RE_STALFOS);})),
});
areaTable[RR_WATER_TEMPLE_MQ_3_JETS_ROOM] = Region("Water Temple MQ 3 Jets Room", SCENE_WATER_TEMPLE, {}, {}, {
areaTable[RR_WATER_TEMPLE_MQ_3_JETS_ROOM_SWITCH_SIDE] = Region("Water Temple MQ 3 Jets Room Switch Side", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1, true),
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2, logic->CanHitSwitch()),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_CANAL_ALCOVE, logic->SmallKeys(SCENE_WATER_TEMPLE, 2) && logic->CanHitSwitch(ED_BOOMERANG)),
ENTRANCE(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, logic->CanHitSwitch() && logic->HasFireSource()),
ENTRANCE(RR_WATER_TEMPLE_MQ_CANAL_ALCOVE, logic->SmallKeys(SCENE_WATER_TEMPLE, 2)),
ENTRANCE(RR_WATER_TEMPLE_MQ_3_JETS_ROOM_NO_SWITCH_SIDE, logic->CanHitSwitch()),
// No Switch Side requires CanHitSwitch(ED_BOOMERANG) to get to this entrance. This is covered by No Switch -> Switch entrance.
ENTRANCE(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, logic->CanHitSwitch(ED_BOOMERANG) && logic->HasFireSource()),
});
areaTable[RR_WATER_TEMPLE_MQ_3_JETS_ROOM_NO_SWITCH_SIDE] = Region("Water Temple MQ 3 Jets Room No Switch Side", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2, logic->IsAdult),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_3_JETS_ROOM_SWITCH_SIDE, logic->CanHitSwitch(ED_BOOMERANG) || (ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && logic->CanHammerRecoilHover())),
});
areaTable[RR_WATER_TEMPLE_MQ_DODONGO_ROOM] = Region("Water Temple MQ Dodongo Room", SCENE_WATER_TEMPLE, {}, {
@ -1352,8 +1401,8 @@ void RegionTable_Init_WaterTemple() {
LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_3_JETS_ROOM, (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && AnyAgeTime([]{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);})),
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATE_VORTEX_CAGE, (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && AnyAgeTime([]{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);})),
ENTRANCE(RR_WATER_TEMPLE_MQ_3_JETS_ROOM_NO_SWITCH_SIDE, (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && AnyAgeTime([]{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);})),
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATE_VORTEX_CAGE, (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && AnyAgeTime([]{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);})),
});
areaTable[RR_WATER_TEMPLE_MQ_CRATE_VORTEX_CAGE] = Region("Water Temple MQ Crate Vortex Cage", SCENE_WATER_TEMPLE, {}, {

View file

@ -93,9 +93,21 @@ void RegionTable_Init_CastleGrounds() {
areaTable[RR_HC_MOAT] = Region("Hyrule Castle Grounds", SCENE_HYRULE_CASTLE, {}, {
//Locations
LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_HC_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_HC_GROTTO_TREE, logic->CanBonkTrees()),
LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_HC_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_HC_GROTTO_TREE, logic->CanBonkTrees()),
LOCATION(RC_HC_WONDER_LEFT_TORCH, logic->CanUse(RG_FAIRY_SLINGSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_HC_WONDER_RIGHT_TORCH, logic->CanUse(RG_FAIRY_SLINGSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_HC_WONDER_MOAT_1, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // RANDOTODO: Add trick for swimless
LOCATION(RC_HC_WONDER_MOAT_2, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_3, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_4, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
LOCATION(RC_HC_WONDER_MOAT_5, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_6, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_7, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_8, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_9, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
LOCATION(RC_HC_WONDER_MOAT_10, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)), // Requires backflip with Iron Boots
}, {
//Exits
ENTRANCE(RR_HC_GATE, true),
@ -112,8 +124,10 @@ void RegionTable_Init_CastleGrounds() {
areaTable[RR_HC_GARDEN] = Region("HC Garden", SCENE_CASTLE_COURTYARD_ZELDA, {}, {
//Locations
LOCATION(RC_HC_ZELDAS_LETTER, logic->HasItem(RG_SPEAK_HYLIAN)),
LOCATION(RC_SONG_FROM_IMPA, logic->HasItem(RG_SPEAK_HYLIAN)),
LOCATION(RC_HC_ZELDAS_LETTER, logic->HasItem(RG_SPEAK_HYLIAN)),
LOCATION(RC_SONG_FROM_IMPA, logic->HasItem(RG_SPEAK_HYLIAN)),
LOCATION(RC_HC_WONDER_COURTYARD_RIGHT_WINDOW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
LOCATION(RC_HC_WONDER_COURTYARD_LEFT_WINDOW, logic->CanUse(RG_FAIRY_SLINGSHOT)),
}, {
//Exits
ENTRANCE(RR_HC_DRAIN_LEDGE, true), // if this ever gets shuffled leaving garden area should come out crawlspace

View file

@ -303,19 +303,22 @@ void RegionTable_Init_DeathMountainCrater() {
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DEATH_MOUNTAIN_CRATER_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
}, {
//Locations
LOCATION(RC_SHEIK_IN_CRATER, logic->IsAdult),
LOCATION(RC_DMC_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DEATH_MOUNTAIN_CRATER_BEAN_SOUL) && logic->CanKillEnemy(RE_GOLD_SKULLTULA)),
LOCATION(RC_DMC_NEAR_PLATFORM_RED_RUPEE, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, logic->IsChild),
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_SHEIK_IN_CRATER, logic->IsAdult),
LOCATION(RC_DMC_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DEATH_MOUNTAIN_CRATER_BEAN_SOUL) && logic->CanKillEnemy(RE_GOLD_SKULLTULA)),
LOCATION(RC_DMC_NEAR_PLATFORM_RED_RUPEE, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, logic->IsChild),
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, logic->IsChild),
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)),
// 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))),
}, {});

View file

@ -10,16 +10,21 @@ void RegionTable_Init_DesertColossus() {
EVENT_ACCESS(LOGIC_BUG_ACCESS, logic->HasItem(RG_POWER_BRACELET)),
}, {
//Locations
LOCATION(RC_COLOSSUS_FREESTANDING_POH, logic->IsAdult && CanPlantBean(RR_DESERT_COLOSSUS, RG_DESERT_COLOSSUS_BEAN_SOUL)),
LOCATION(RC_COLOSSUS_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanAttack()),
LOCATION(RC_COLOSSUS_GS_TREE, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_COLOSSUS_GS_HILL, logic->IsAdult && ((CanPlantBean(RR_DESERT_COLOSSUS, RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanAttack()) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_COLOSSUS_GS) && logic->CanUse(RG_HOOKSHOT))) && logic->CanGetNightTimeGS()),
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
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_FREESTANDING_POH, logic->IsAdult && CanPlantBean(RR_DESERT_COLOSSUS, RG_DESERT_COLOSSUS_BEAN_SOUL)),
LOCATION(RC_COLOSSUS_GS_BEAN_PATCH, logic->CanSpawnSoilSkull(RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanAttack()),
LOCATION(RC_COLOSSUS_GS_TREE, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_COLOSSUS_GS_HILL, logic->IsAdult && ((CanPlantBean(RR_DESERT_COLOSSUS, RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanAttack()) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_COLOSSUS_GS) && logic->CanUse(RG_HOOKSHOT))) && logic->CanGetNightTimeGS()),
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->HasItem(RG_DESERT_COLOSSUS_BEAN_SOUL) && logic->CanUse(RG_SONG_OF_STORMS)),
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_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))),
}, {
//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

View file

@ -12,6 +12,7 @@ void RegionTable_Init_GerudoFortress() {
LOCATION(RC_GF_OUTSKIRTS_NE_CRATE, (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)) && logic->CanBreakCrates()),
LOCATION(RC_GF_OUTSKIRTS_NW_CRATE, (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)) && logic->CanBreakCrates()),
LOCATION(RC_GF_EAST_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_GF_WONDER_ENTRANCE_SIGN, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_GV_FORTRESS_SIDE, true),
@ -207,13 +208,13 @@ void RegionTable_Init_GerudoFortress() {
//there's a trick to reach RR_GF_LONG_ROOF
//For some reason, you take fall damage if you backflip onto the fortress but not onto the sand
//It's unintuitive to avoid being caught on landing, but that sends you to the same place anyway...
ENTRANCE(RR_GF_OUTSKIRTS, true),
ENTRANCE(RR_GF_NEAR_CHEST, logic->CanUse(RG_LONGSHOT)),
ENTRANCE(RR_GF_BELOW_CHEST, logic->TakeDamage()),
ENTRANCE(RR_GF_JAIL_WINDOW, logic->CanUse(RG_HOOKSHOT)),
ENTRANCE(RR_TH_BREAK_ROOM_CORRIDOR, true),
ENTRANCE(RR_GF_TOWER, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)),
ENTRANCE(RR_GF_OUTSIDE_GATE, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash()),
ENTRANCE(RR_GF_OUTSKIRTS, ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->TakeDamage()),
ENTRANCE(RR_GF_NEAR_CHEST, logic->CanUse(RG_LONGSHOT)),
ENTRANCE(RR_GF_BELOW_CHEST, logic->TakeDamage()),
ENTRANCE(RR_GF_JAIL_WINDOW, logic->CanUse(RG_HOOKSHOT)),
ENTRANCE(RR_TH_BREAK_ROOM_UPPER_CORRIDOR, true),
ENTRANCE(RR_GF_TOWER, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)),
ENTRANCE(RR_GF_OUTSIDE_GATE, ctx->GetTrickOption(RT_GF_ADULT_SKIP_WASTELAND_GATE) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash()),
});
areaTable[RR_GF_JAIL_WINDOW] = Region("GF Jail Window", SCENE_GERUDOS_FORTRESS, {}, {}, {
@ -245,6 +246,7 @@ void RegionTable_Init_GerudoFortress() {
LOCATION(RC_GF_SOUTH_TARGET_EAST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_SOUTH_TARGET_WEST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RECTANGLE_SIGN, logic->IsAdult && logic->CanRead()),
LOCATION(RC_GF_WONDER_ARCHERY_SIGN, logic->CanUse(RG_HOOKSHOT)),
}, {
//Exits
ENTRANCE(RR_GF_OUTSIDE_GTG, logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)),

View file

@ -40,6 +40,8 @@ void RegionTable_Init_GerudoValley() {
LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_GV_GOSSIP_STONE, true),
LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_GV_WONDER_LOWER_WATERFALL, logic->IsAdult),
LOCATION(RC_GV_WONDER_UPPER_WATERFALL, logic->IsAdult && CanPlantBean(RR_GV_UPPER_STREAM, RG_GERUDO_VALLEY_BEAN_SOUL)),
}, {
//Exits
ENTRANCE(RR_GV_UPPER_STREAM_WATER, true),
@ -62,6 +64,7 @@ void RegionTable_Init_GerudoValley() {
areaTable[RR_GV_WATERFALL_ALCOVE] = Region("GV Waterfall Alcove", SCENE_GERUDO_VALLEY, {}, {
//Locations
LOCATION(RC_GV_WATERFALL_FREESTANDING_POH, true),
LOCATION(RC_GV_WONDER_UPPER_WATERFALL, logic->IsAdult),
}, {
//Exits
ENTRANCE(RR_GV_UPPER_STREAM, logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)),

View file

@ -112,6 +112,21 @@ void RegionTable_Init_Graveyard() {
LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, true),
LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, true),
LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_1, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_2, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_3, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_4, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_5, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_6, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_7, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_8, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_9, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_10, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_11, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_12, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_13, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_14, true),
LOCATION(RC_GY_WONDER_DAMPE_RACE_15, true),
}, {
//Exits
ENTRANCE(RR_THE_GRAVEYARD, true),

View file

@ -175,6 +175,9 @@ void RegionTable_Init_HyruleField() {
LOCATION(RC_HF_CENTER_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_HF_RIVER_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_HF_STAIRS_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_HF_WONDER_BRIDGE_1, logic->IsChild),
LOCATION(RC_HF_WONDER_BRIDGE_2, logic->IsChild),
LOCATION(RC_HF_WONDER_BRIDGE_3, logic->IsChild),
}, {
//Exits
ENTRANCE(RR_LW_BRIDGE, true),

View file

@ -64,6 +64,7 @@ void RegionTable_Init_Kakariko() {
LOCATION(RC_KAK_WELL_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KAK_SOUTHEAST_EXIT_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_KAK_FRONT_GATE_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_KAK_WONDER_UNDER_CONSTRUCTION, logic->IsChild),
}, {
//Exits
ENTRANCE(RR_HYRULE_FIELD, true),
@ -166,7 +167,8 @@ void RegionTable_Init_Kakariko() {
areaTable[RR_KAK_IMPAS_HOUSE] = Region("Kak Impas House", SCENE_IMPAS_HOUSE, {}, {
//Locations
LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
LOCATION(RC_KAK_WONDER_ABOVE_COW, true),
}, {
//Exits
ENTRANCE(RR_KAKARIKO_VILLAGE, true),

View file

@ -82,6 +82,12 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_TRAINING_CENTER_ENTRANCE_ARROW_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KF_INNER_TRAINING_CENTER_ARROW_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KF_KNOW_IT_ALL_BROTHERS_HOUSE_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_KF_WONDER_TRAINING_1, logic->IsChild),
LOCATION(RC_KF_WONDER_TRAINING_2, logic->IsChild),
LOCATION(RC_KF_WONDER_TRAINING_3, logic->IsChild),
LOCATION(RC_KF_WONDER_SIGN, logic->IsChild && logic->CanJumpslashExceptHammer()),
LOCATION(RC_KF_WONDER_PLATFORMS_1, logic->IsChild),
LOCATION(RC_KF_WONDER_PLATFORMS_2, logic->IsChild),
}, {
//Exits
ENTRANCE(RR_KF_BOULDER_LOOP, logic->CanUse(RG_CRAWL)),
@ -108,6 +114,8 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_CHILD_GRASS_MAZE_2, logic->IsChild && logic->CanCutShrubs()),
LOCATION(RC_KF_CHILD_GRASS_MAZE_3, logic->IsChild && logic->CanCutShrubs()),
LOCATION(RC_KF_AFTER_CRAWLSPACE_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_KF_WONDER_CRAWL_GRASS_1, logic->IsChild),
LOCATION(RC_KF_WONDER_CRAWL_GRASS_2, logic->IsChild),
}, {
//Exits
ENTRANCE(RR_KOKIRI_FOREST, logic->CanUse(RG_CRAWL)),
@ -198,6 +206,7 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_SHOP_ITEM_6, logic->HasItem(RG_SPEAK_KOKIRI) && GetCheckPrice() <= GetWalletCapacity()),
LOCATION(RC_KF_SHOP_ITEM_7, logic->HasItem(RG_SPEAK_KOKIRI) && GetCheckPrice() <= GetWalletCapacity()),
LOCATION(RC_KF_SHOP_ITEM_8, logic->HasItem(RG_SPEAK_KOKIRI) && GetCheckPrice() <= GetWalletCapacity()),
LOCATION(RC_KF_WONDER_SHOP, true),
}, {
//Exits
ENTRANCE(RR_KOKIRI_FOREST, true),

View file

@ -11,20 +11,22 @@ void RegionTable_Init_LonLonRanch() {
EVENT_ACCESS(LOGIC_LINKS_COW, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_SPEAK_HYLIAN) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay),
}, {
//Locations
LOCATION(RC_SONG_FROM_MALON, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER) && logic->HasItem(RG_SPEAK_HYLIAN) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
LOCATION(RC_LLR_GS_TREE, logic->IsChild && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_FRONT_POT_2, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_FRONT_POT_3, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_FRONT_POT_4, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_LLR_TREE, logic->IsChild && logic->CanBonkTrees()),
LOCATION(RC_SONG_FROM_MALON, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER) && logic->HasItem(RG_SPEAK_HYLIAN) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
LOCATION(RC_LLR_GS_TREE, logic->IsChild && logic->CanBonkTrees() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
LOCATION(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
LOCATION(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_FRONT_POT_2, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_FRONT_POT_3, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_FRONT_POT_4, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()),
LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()),
LOCATION(RC_LLR_TREE, logic->IsChild && logic->CanBonkTrees()),
LOCATION(RC_LLR_WONDER_BIG_FENCE, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && (logic->HasItem(RG_CHILD_WALLET) || logic->Get(LOGIC_FREED_EPONA))),
LOCATION(RC_LLR_WONDER_SMALL_FENCE, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && (logic->HasItem(RG_CHILD_WALLET) || logic->Get(LOGIC_FREED_EPONA))),
}, {
//Exits
ENTRANCE(RR_HYRULE_FIELD, true),

View file

@ -48,6 +48,9 @@ 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_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),
}, {
//Exits
ENTRANCE(RR_LW_FOREST_EXIT, true),

View file

@ -28,6 +28,13 @@ void RegionTable_Init_Market() {
LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_1, logic->IsChild /*&& logic->CanRoll()*/),
LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, logic->IsChild /*&& logic->CanRoll()*/),
LOCATION(RC_MARKET_TREE, logic->IsChild && logic->CanBonkTrees()),
LOCATION(RC_MKT_WONDER_DAY_1, logic->IsChild && logic->AtDay),
LOCATION(RC_MKT_WONDER_DAY_2, logic->IsChild && logic->AtDay),
LOCATION(RC_MKT_WONDER_DAY_3, logic->IsChild && logic->AtDay),
LOCATION(RC_MKT_WONDER_DAY_4, logic->IsChild && logic->AtDay),
LOCATION(RC_MKT_WONDER_DAY_5, logic->IsChild && logic->AtDay),
LOCATION(RC_MKT_WONDER_NIGHT_1, logic->IsChild && logic->AtNight),
LOCATION(RC_MKT_WONDER_NIGHT_2, logic->IsChild && logic->AtNight),
}, {
//Exits
ENTRANCE(RR_MARKET_ENTRANCE, true),

View file

@ -5,7 +5,10 @@ using namespace Rando;
void RegionTable_Init_SacredForestMeadow() {
// clang-format off
areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", SCENE_SACRED_FOREST_MEADOW, {}, {}, {
areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", SCENE_SACRED_FOREST_MEADOW, {}, {
//Locations
LOCATION(RC_SFM_WONDER_ENTRANCE, true),
}, {
//Exits
ENTRANCE(RR_LW_BEYOND_MIDO, true),
ENTRANCE(RR_SACRED_FOREST_MEADOW, logic->IsAdult || logic->CanKillEnemy(RE_WOLFOS)),
@ -41,6 +44,11 @@ void RegionTable_Init_SacredForestMeadow() {
LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
LOCATION(RC_SFM_SARIA_GOSSIP_STONE, true),
LOCATION(RC_SFM_WONDER_MAZE_1, true),
LOCATION(RC_SFM_WONDER_MAZE_2, true),
LOCATION(RC_SFM_WONDER_MAZE_3, true),
LOCATION(RC_SFM_WONDER_MAZE_4, true),
LOCATION(RC_SFM_WONDER_MAZE_5, true),
}, {
//Exits
ENTRANCE(RR_FOREST_TEMPLE_ENTRYWAY, logic->CanUse(RG_HOOKSHOT)),

View file

@ -17,6 +17,8 @@ void RegionTable_Init_ThievesHideout() {
LOCATION(RC_TH_1_TORCH_CELL_MID_POT, logic->CanBreakPots()),
LOCATION(RC_TH_1_TORCH_CELL_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_1_TORCH_CELL_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_WONDER_1_TORCH_1, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_WONDER_1_TORCH_2, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
}, {
//Exits
@ -30,17 +32,19 @@ void RegionTable_Init_ThievesHideout() {
EVENT_ACCESS(LOGIC_TH_RESCUED_ALL_CARPENTERS, logic->SmallKeys(SCENE_THIEVES_HIDEOUT, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && logic->Get(LOGIC_TH_COULD_FREE_1_TORCH_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_DOUBLE_CELL_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_DEAD_END_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_SLOPE_CARPENTER)),
}, {
//Locations
LOCATION(RC_TH_DOUBLE_CELL_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_MID_POT, logic->CanBreakPots()),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_RIGHTMOST_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_RIGHT_MIDDLE_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_LEFT_MIDDLE_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_LEFTMOST_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_DOUBLE_CELL_LEFT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_DOUBLE_CELL_RIGHT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
LOCATION(RC_TH_DOUBLE_CELL_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_MID_POT, logic->CanBreakPots()),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_RIGHTMOST_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_RIGHT_MIDDLE_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_LEFT_MIDDLE_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_LEFTMOST_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_DOUBLE_CELL_LEFT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_DOUBLE_CELL_RIGHT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
}, {
//Exits
ENTRANCE(RR_GF_OUTSKIRTS, true),
@ -54,9 +58,11 @@ void RegionTable_Init_ThievesHideout() {
EVENT_ACCESS(LOGIC_TH_RESCUED_ALL_CARPENTERS, logic->SmallKeys(SCENE_THIEVES_HIDEOUT, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && logic->Get(LOGIC_TH_COULD_FREE_1_TORCH_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_DOUBLE_CELL_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_DEAD_END_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_SLOPE_CARPENTER)),
}, {
//Locations
LOCATION(RC_TH_DEAD_END_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_DEAD_END_CELL_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
LOCATION(RC_TH_DEAD_END_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_DEAD_END_CELL_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_WONDER_DEAD_END_SKULL_ENTRANCE, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
}, {
//Exits
ENTRANCE(RR_GF_BELOW_GS, true),
@ -68,10 +74,12 @@ void RegionTable_Init_ThievesHideout() {
EVENT_ACCESS(LOGIC_TH_RESCUED_ALL_CARPENTERS, logic->SmallKeys(SCENE_THIEVES_HIDEOUT, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && logic->Get(LOGIC_TH_COULD_FREE_1_TORCH_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_DOUBLE_CELL_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_DEAD_END_CARPENTER) && logic->Get(LOGIC_TH_COULD_FREE_SLOPE_CARPENTER)),
}, {
//Locations
LOCATION(RC_TH_STEEP_SLOPE_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_STEEP_SLOPE_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_STEEP_SLOPE_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
LOCATION(RC_TH_STEEP_SLOPE_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_STEEP_SLOPE_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_STEEP_SLOPE_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_WONDER_STEEP_SLOPE_LOWER_EXIT, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_WONDER_STEEP_SLOPE_UPPER_EXIT, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_FREED_CARPENTERS, logic->Get(LOGIC_TH_RESCUED_ALL_CARPENTERS)),
}, {
//Exits
ENTRANCE(RR_GF_BOTTOM_OF_LOWER_VINES, true),
@ -93,10 +101,12 @@ void RegionTable_Init_ThievesHideout() {
areaTable[RR_TH_KITCHEN_MAIN] = Region("Thieves Hideout Kitchen Bottom", SCENE_THIEVES_HIDEOUT, {}, {
//Locations
LOCATION(RC_TH_KITCHEN_POT_1, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_POT_2, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_CRATE, logic->CanBreakCrates() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_SUN_FAIRY, logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG)),
LOCATION(RC_TH_KITCHEN_POT_1, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_POT_2, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_CRATE, logic->CanBreakCrates() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_SUN_FAIRY, logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG)),
LOCATION(RC_TH_WONDER_KITCHEN_SKULL, logic->CanUse(RG_FAIRY_BOW)),
LOCATION(RC_TH_WONDER_KITCHEN_SOUP, (logic->TakeDamage() || logic->IsAdult || logic->CanUse(RG_GORON_TUNIC)) && logic->CanPassEnemy(RE_GERUDO_GUARD)),
}, {
//Exits
ENTRANCE(RR_TH_KITCHEN_CORRIDOR, logic->CanPassEnemy(RE_GERUDO_GUARD)),
@ -142,14 +152,25 @@ void RegionTable_Init_ThievesHideout() {
(logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))),
}, {
//Exits
ENTRANCE(RR_GF_BELOW_CHEST, logic->CanPassEnemy(RE_GERUDO_GUARD)),
//Implies logic->CanPassEnemy(RE_GERUDO_GUARD)
ENTRANCE(RR_TH_BREAK_ROOM_CORRIDOR, logic->CanUse(RG_HOOKSHOT)),
ENTRANCE(RR_GF_BELOW_CHEST, logic->CanPassEnemy(RE_GERUDO_GUARD)),
ENTRANCE(RR_TH_BREAK_ROOM_LOWER_CORRIDOR, logic->CanPassEnemy(RE_GERUDO_GUARD)),
});
areaTable[RR_TH_BREAK_ROOM_CORRIDOR] = Region("Thieves Hideout Break Room", SCENE_THIEVES_HIDEOUT, {}, {}, {
areaTable[RR_TH_BREAK_ROOM_LOWER_CORRIDOR] = Region("Thieves Hideout Break Room", SCENE_THIEVES_HIDEOUT, {}, {
//Locations
LOCATION(RC_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_TH_BREAK_ROOM, logic->CanPassEnemy(RE_GERUDO_GUARD)),
ENTRANCE(RR_TH_BREAK_ROOM_UPPER_CORRIDOR, logic->CanUse(RG_HOOKSHOT)),
});
areaTable[RR_TH_BREAK_ROOM_UPPER_CORRIDOR] = Region("Thieves Hideout Break Room", SCENE_THIEVES_HIDEOUT, {}, {
//Locations
LOCATION(RC_TH_WONDER_BREAK_ROOM_TOP_SKULL, logic->CanUse(RG_FAIRY_BOW)),
}, {
//Exits
ENTRANCE(RR_TH_BREAK_ROOM, logic->CanUse(RG_HOOKSHOT)),
ENTRANCE(RR_TH_BREAK_ROOM_LOWER_CORRIDOR, logic->CanUse(RG_HOOKSHOT)),
ENTRANCE(RR_GF_ABOVE_JAIL, true),
});
}

View file

@ -32,6 +32,7 @@ void RegionTable_Init_ZorasFountain() {
LOCATION(RC_ZF_LOG_BUTTERFLY_FAIRY, logic->IsChild && logic->AtDay && logic->CanUse(RG_STICKS)),
LOCATION(RC_ZF_JABU_JABU_PLATFORM_RECTANGLE_SIGN, logic->IsChild && logic->CanRead()),
LOCATION(RC_ZF_ENTRANCE_ARROW_SIGN, logic->CanRead()),
LOCATION(RC_ZF_WONDER_ROCK, logic->IsAdult && logic->ReachScarecrow()),
}, {
//Exits
ENTRANCE(RR_ZD_BEHIND_KING_ZORA, true),

View file

@ -7,20 +7,25 @@ void RegionTable_Init_ZoraRiver() {
// clang-format off
areaTable[RR_ZR_FRONT] = Region("ZR Front", SCENE_ZORAS_RIVER, {}, {
//Locations
LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE) && logic->CanBonkTrees()),
LOCATION(RC_ZR_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_4, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_5, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_6, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_7, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_8, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_9, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()),
LOCATION(RC_ZR_TREE, logic->IsChild && logic->CanBonkTrees()),
LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE) && logic->CanBonkTrees()),
LOCATION(RC_ZR_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_4, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_5, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_6, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_7, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_8, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_9, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()),
LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()),
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))),
LOCATION(RC_ZR_WONDER_LOWER_RIVER_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_LOWER_RIVER_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_LOWER_RIVER_4, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
}, {
//Exits
ENTRANCE(RR_ZORAS_RIVER, logic->IsAdult || logic->BlastOrSmash() || logic->CanUse(RG_HOVER_BOOTS)),
@ -59,6 +64,33 @@ void RegionTable_Init_ZoraRiver() {
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)),
LOCATION(RC_ZR_SLEEPLESS_WATERFALL_PLAQUE, logic->CanRead()),
LOCATION(RC_ZR_WONDER_NEAR_DOMAIN_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))), // RANDOTODO: Add trick for swimless
LOCATION(RC_ZR_WONDER_NEAR_DOMAIN_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_NEAR_DOMAIN_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_NEAR_DOMAIN_4, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_BEFORE_LADDER_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_BEFORE_LADDER_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_BEFORE_LADDER_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_BEFORE_LADDER_4, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_BEFORE_LADDER_5, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_BEFORE_LADDER_6, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_AFTER_LADDER_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_AFTER_LADDER_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_AFTER_LADDER_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_FROG_BRIDGE_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_FROG_BRIDGE_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_FROG_BRIDGE_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_PILLARS_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_PILLARS_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_PILLARS_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_PILLARS_4, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_LOWER_LAND_BRIDGE_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))), // Requires backflip with Iron Boots
LOCATION(RC_ZR_WONDER_LOWER_LAND_BRIDGE_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_LOWER_LAND_BRIDGE_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_LOWER_LAND_BRIDGE_4, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
LOCATION(RC_ZR_WONDER_NEAR_CUCCO_1, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))), // Requires backflip with Iron Boots
LOCATION(RC_ZR_WONDER_NEAR_CUCCO_2, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))), // Requires backflip with Iron Boots
LOCATION(RC_ZR_WONDER_NEAR_CUCCO_3, logic->IsChild && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
}, {
//Exits
ENTRANCE(RR_ZR_FRONT, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_POWER_BRACELET) || logic->BlastOrSmash() || logic->HasItem(RG_HOVER_BOOTS)),

View file

@ -323,6 +323,17 @@ void Settings::CreateOptionDescriptions() {
"Overworld - Only shuffle signs that are outside of dungeons.\n"
"\n"
"All Signs - Shuffle all signs.";
mOptionDescriptions[RSK_SHUFFLE_WONDER_ITEMS] =
"Wonder items will drop a randomized item the first time they're collected. "
"Wonder items will be marked with swirling particles.\n"
"\n"
"Off - Wonder items will not be shuffled.\n"
"\n"
"Dungeons - Only shuffle wonder items that are within dungeons.\n"
"\n"
"Overworld - Only shuffle wonder items that are outside of dungeons.\n"
"\n"
"All Wonder Items - Shuffle all wonder items.";
mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE] = "Shuffles the fishing pole into the item pool.\n"
"\n"
"The fishing pole is required to play the fishing pond minigame.";

View file

@ -0,0 +1,47 @@
#include "particle_cmc.h"
// Color of the circle for the particles
static Color_RGBA8 mainColors[7] = {
{ 255, 255, 255, 255 }, // Junk
{ 170, 50, 0, 255 }, // Lesser
{ 250, 0, 0, 255 }, // Health
{ 255, 255, 0, 255 }, // Boss Key
{ 180, 180, 180, 255 }, // Small Key
{ 0, 0, 0, 255 }, // Skulltula Token
{ 250, 185, 40, 255 }, // Major
};
// Secondary color of the circle for the particles
static Color_RGBA8 secColors[7] = {
{ 255, 255, 255, 255 }, // Junk
{ 250, 75, 0, 255 }, // Lesser
{ 0, 0, 255, 255 }, // Health
{ 0, 200, 255, 255 }, // Boss Key
{ 130, 130, 130, 255 }, // Small Key
{ 255, 250, 190, 255 }, // Skulltula Token
{ 255, 220, 135, 255 }, // Major
};
// Color of the faded flares stretching off the particles
static Color_RGBA8 flareColors[7] = {
{ 135, 135, 135, 255 }, // Junk
{ 255, 160, 100, 255 }, // Lesser
{ 255, 125, 125, 255 }, // Health
{ 0, 200, 255, 255 }, // Boss Key
{ 100, 100, 100, 255 }, // Small Key
{ 255, 255, 255, 255 }, // Skulltula Token
{ 250, 220, 180, 255 }, // Major
};
Color_RGBA8 Randomizer_GetParticleCMCColor(GetItemCategory colorIndex, ParticleCMCColorType colorType) {
switch (colorType) {
case COLOR_PRIMARY:
return mainColors[colorIndex];
case COLOR_SECONDARY:
return secColors[colorIndex];
case COLOR_FLARE:
return flareColors[colorIndex];
default:
return mainColors[colorIndex];
}
}

View file

@ -0,0 +1,24 @@
#pragma once
#include "soh/OTRGlobals.h"
#ifndef PARTICLE_CMC_H
#define PARTICLE_CMC_H
typedef enum {
COLOR_PRIMARY,
COLOR_SECONDARY,
COLOR_FLARE,
} ParticleCMCColorType;
#ifdef __cplusplus
extern "C" {
#endif
Color_RGBA8 Randomizer_GetParticleCMCColor(GetItemCategory colorIndex, ParticleCMCColorType colorType);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -3054,6 +3054,222 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
{ RC_DODONGOS_CAVERN_TOP_FLOOR_PEDESTAL, RAND_INF_DODONGOS_CAVERN_TOP_FLOOR_PEDESTAL },
{ RC_SHADOW_TEMPLE_TRUTHSPINNER_RECTANGLE_SIGN, RAND_INF_SHADOW_TEMPLE_TRUTHSPINNER_RECTANGLE_SIGN },
{ RC_SHADOW_TEMPLE_MQ_LOWER_PIT_RECTANGLE_SIGN, RAND_INF_SHADOW_TEMPLE_MQ_LOWER_PIT_RECTANGLE_SIGN },
// Wonder Items
{ RC_KF_WONDER_TRAINING_1, RAND_INF_KF_WONDER_TRAINING_1 },
{ RC_KF_WONDER_TRAINING_2, RAND_INF_KF_WONDER_TRAINING_2 },
{ RC_KF_WONDER_TRAINING_3, RAND_INF_KF_WONDER_TRAINING_3 },
{ RC_KF_WONDER_SHOP, RAND_INF_KF_WONDER_SHOP },
{ RC_KF_WONDER_SIGN, RAND_INF_KF_WONDER_SIGN },
{ RC_KF_WONDER_PLATFORMS_1, RAND_INF_KF_WONDER_PLATFORMS_1 },
{ RC_KF_WONDER_PLATFORMS_2, RAND_INF_KF_WONDER_PLATFORMS_2 },
{ RC_KF_WONDER_CRAWL_GRASS_1, RAND_INF_KF_WONDER_CRAWL_GRASS_1 },
{ RC_KF_WONDER_CRAWL_GRASS_2, RAND_INF_KF_WONDER_CRAWL_GRASS_2 },
{ RC_HF_WONDER_BRIDGE_1, RAND_INF_HF_WONDER_BRIDGE_1 },
{ RC_HF_WONDER_BRIDGE_2, RAND_INF_HF_WONDER_BRIDGE_2 },
{ RC_HF_WONDER_BRIDGE_3, RAND_INF_HF_WONDER_BRIDGE_3 },
{ RC_MKT_WONDER_DAY_1, RAND_INF_MKT_WONDER_DAY_1 },
{ RC_MKT_WONDER_DAY_2, RAND_INF_MKT_WONDER_DAY_2 },
{ RC_MKT_WONDER_DAY_3, RAND_INF_MKT_WONDER_DAY_3 },
{ RC_MKT_WONDER_DAY_4, RAND_INF_MKT_WONDER_DAY_4 },
{ RC_MKT_WONDER_DAY_5, RAND_INF_MKT_WONDER_DAY_5 },
{ RC_MKT_WONDER_NIGHT_1, RAND_INF_MKT_WONDER_NIGHT_1 },
{ RC_MKT_WONDER_NIGHT_2, RAND_INF_MKT_WONDER_NIGHT_2 },
{ RC_LLR_WONDER_BIG_FENCE, RAND_INF_LLR_WONDER_BIG_FENCE },
{ RC_LLR_WONDER_SMALL_FENCE, RAND_INF_LLR_WONDER_SMALL_FENCE },
{ RC_HC_WONDER_LEFT_TORCH, RAND_INF_HC_WONDER_LEFT_TORCH },
{ RC_HC_WONDER_RIGHT_TORCH, RAND_INF_HC_WONDER_RIGHT_TORCH },
{ RC_HC_WONDER_MOAT_1, RAND_INF_HC_WONDER_MOAT_1 },
{ RC_HC_WONDER_MOAT_2, RAND_INF_HC_WONDER_MOAT_2 },
{ RC_HC_WONDER_MOAT_3, RAND_INF_HC_WONDER_MOAT_3 },
{ RC_HC_WONDER_MOAT_4, RAND_INF_HC_WONDER_MOAT_4 },
{ RC_HC_WONDER_MOAT_5, RAND_INF_HC_WONDER_MOAT_5 },
{ RC_HC_WONDER_MOAT_6, RAND_INF_HC_WONDER_MOAT_6 },
{ RC_HC_WONDER_MOAT_7, RAND_INF_HC_WONDER_MOAT_7 },
{ RC_HC_WONDER_MOAT_8, RAND_INF_HC_WONDER_MOAT_8 },
{ RC_HC_WONDER_MOAT_9, RAND_INF_HC_WONDER_MOAT_9 },
{ RC_HC_WONDER_MOAT_10, RAND_INF_HC_WONDER_MOAT_10 },
{ RC_HC_WONDER_COURTYARD_RIGHT_WINDOW, RAND_INF_HC_WONDER_COURTYARD_RIGHT_WINDOW },
{ RC_HC_WONDER_COURTYARD_LEFT_WINDOW, RAND_INF_HC_WONDER_COURTYARD_LEFT_WINDOW },
{ RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_1, RAND_INF_LW_WONDER_BACK_SKULL_KIDS_GRASS_1 },
{ RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_2, RAND_INF_LW_WONDER_BACK_SKULL_KIDS_GRASS_2 },
{ RC_LW_WONDER_FRONT_SKULL_KIDS_GRASS, RAND_INF_LW_WONDER_FRONT_SKULL_KIDS_GRASS },
{ RC_SFM_WONDER_ENTRANCE, RAND_INF_SFM_WONDER_ENTRANCE },
{ RC_SFM_WONDER_MAZE_1, RAND_INF_SFM_WONDER_MAZE_1 },
{ RC_SFM_WONDER_MAZE_2, RAND_INF_SFM_WONDER_MAZE_2 },
{ RC_SFM_WONDER_MAZE_3, RAND_INF_SFM_WONDER_MAZE_3 },
{ RC_SFM_WONDER_MAZE_4, RAND_INF_SFM_WONDER_MAZE_4 },
{ RC_SFM_WONDER_MAZE_5, RAND_INF_SFM_WONDER_MAZE_5 },
{ RC_KAK_WONDER_UNDER_CONSTRUCTION, RAND_INF_KAK_WONDER_UNDER_CONSTRUCTION },
{ RC_KAK_WONDER_ABOVE_COW, RAND_INF_KAK_WONDER_ABOVE_COW },
{ RC_GY_WONDER_DAMPE_RACE_1, RAND_INF_GY_WONDER_DAMPE_RACE_1 },
{ RC_GY_WONDER_DAMPE_RACE_2, RAND_INF_GY_WONDER_DAMPE_RACE_2 },
{ RC_GY_WONDER_DAMPE_RACE_3, RAND_INF_GY_WONDER_DAMPE_RACE_3 },
{ RC_GY_WONDER_DAMPE_RACE_4, RAND_INF_GY_WONDER_DAMPE_RACE_4 },
{ RC_GY_WONDER_DAMPE_RACE_5, RAND_INF_GY_WONDER_DAMPE_RACE_5 },
{ RC_GY_WONDER_DAMPE_RACE_6, RAND_INF_GY_WONDER_DAMPE_RACE_6 },
{ RC_GY_WONDER_DAMPE_RACE_7, RAND_INF_GY_WONDER_DAMPE_RACE_7 },
{ RC_GY_WONDER_DAMPE_RACE_8, RAND_INF_GY_WONDER_DAMPE_RACE_8 },
{ RC_GY_WONDER_DAMPE_RACE_9, RAND_INF_GY_WONDER_DAMPE_RACE_9 },
{ RC_GY_WONDER_DAMPE_RACE_10, RAND_INF_GY_WONDER_DAMPE_RACE_10 },
{ RC_GY_WONDER_DAMPE_RACE_11, RAND_INF_GY_WONDER_DAMPE_RACE_11 },
{ RC_GY_WONDER_DAMPE_RACE_12, RAND_INF_GY_WONDER_DAMPE_RACE_12 },
{ RC_GY_WONDER_DAMPE_RACE_13, RAND_INF_GY_WONDER_DAMPE_RACE_13 },
{ RC_GY_WONDER_DAMPE_RACE_14, RAND_INF_GY_WONDER_DAMPE_RACE_14 },
{ RC_GY_WONDER_DAMPE_RACE_15, RAND_INF_GY_WONDER_DAMPE_RACE_15 },
{ RC_DMC_WONDER_BENEATH_BRIDGE_PLATFORM, RAND_INF_DMC_WONDER_BENEATH_BRIDGE_PLATFORM },
{ RC_ZR_WONDER_NEAR_DOMAIN_1, RAND_INF_ZR_WONDER_NEAR_DOMAIN_1 },
{ RC_ZR_WONDER_NEAR_DOMAIN_2, RAND_INF_ZR_WONDER_NEAR_DOMAIN_2 },
{ RC_ZR_WONDER_NEAR_DOMAIN_3, RAND_INF_ZR_WONDER_NEAR_DOMAIN_3 },
{ RC_ZR_WONDER_NEAR_DOMAIN_4, RAND_INF_ZR_WONDER_NEAR_DOMAIN_4 },
{ RC_ZR_WONDER_BEFORE_LADDER_1, RAND_INF_ZR_WONDER_BEFORE_LADDER_1 },
{ RC_ZR_WONDER_BEFORE_LADDER_2, RAND_INF_ZR_WONDER_BEFORE_LADDER_2 },
{ RC_ZR_WONDER_BEFORE_LADDER_3, RAND_INF_ZR_WONDER_BEFORE_LADDER_3 },
{ RC_ZR_WONDER_BEFORE_LADDER_4, RAND_INF_ZR_WONDER_BEFORE_LADDER_4 },
{ RC_ZR_WONDER_BEFORE_LADDER_5, RAND_INF_ZR_WONDER_BEFORE_LADDER_5 },
{ RC_ZR_WONDER_BEFORE_LADDER_6, RAND_INF_ZR_WONDER_BEFORE_LADDER_6 },
{ RC_ZR_WONDER_AFTER_LADDER_1, RAND_INF_ZR_WONDER_AFTER_LADDER_1 },
{ RC_ZR_WONDER_AFTER_LADDER_2, RAND_INF_ZR_WONDER_AFTER_LADDER_2 },
{ RC_ZR_WONDER_AFTER_LADDER_3, RAND_INF_ZR_WONDER_AFTER_LADDER_3 },
{ RC_ZR_WONDER_FROG_BRIDGE_1, RAND_INF_ZR_WONDER_FROG_BRIDGE_1 },
{ RC_ZR_WONDER_FROG_BRIDGE_2, RAND_INF_ZR_WONDER_FROG_BRIDGE_2 },
{ RC_ZR_WONDER_FROG_BRIDGE_3, RAND_INF_ZR_WONDER_FROG_BRIDGE_3 },
{ RC_ZR_WONDER_PILLARS_1, RAND_INF_ZR_WONDER_PILLARS_1 },
{ RC_ZR_WONDER_PILLARS_2, RAND_INF_ZR_WONDER_PILLARS_2 },
{ RC_ZR_WONDER_PILLARS_3, RAND_INF_ZR_WONDER_PILLARS_3 },
{ RC_ZR_WONDER_PILLARS_4, RAND_INF_ZR_WONDER_PILLARS_4 },
{ RC_ZR_WONDER_LOWER_LAND_BRIDGE_1, RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_1 },
{ RC_ZR_WONDER_LOWER_LAND_BRIDGE_2, RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_2 },
{ RC_ZR_WONDER_LOWER_LAND_BRIDGE_3, RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_3 },
{ RC_ZR_WONDER_LOWER_LAND_BRIDGE_4, RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_4 },
{ RC_ZR_WONDER_NEAR_CUCCO_1, RAND_INF_ZR_WONDER_NEAR_CUCCO_1 },
{ RC_ZR_WONDER_NEAR_CUCCO_2, RAND_INF_ZR_WONDER_NEAR_CUCCO_2 },
{ RC_ZR_WONDER_NEAR_CUCCO_3, RAND_INF_ZR_WONDER_NEAR_CUCCO_3 },
{ RC_ZR_WONDER_LOWER_RIVER_1, RAND_INF_ZR_WONDER_LOWER_RIVER_1 },
{ RC_ZR_WONDER_LOWER_RIVER_2, RAND_INF_ZR_WONDER_LOWER_RIVER_2 },
{ RC_ZR_WONDER_LOWER_RIVER_3, RAND_INF_ZR_WONDER_LOWER_RIVER_3 },
{ RC_ZR_WONDER_LOWER_RIVER_4, RAND_INF_ZR_WONDER_LOWER_RIVER_4 },
{ RC_ZF_WONDER_ROCK, RAND_INF_ZF_WONDER_ROCK },
{ RC_GV_WONDER_LOWER_WATERFALL, RAND_INF_GV_WONDER_LOWER_WATERFALL },
{ RC_GV_WONDER_UPPER_WATERFALL, RAND_INF_GV_WONDER_UPPER_WATERFALL },
{ RC_GF_WONDER_ENTRANCE_SIGN, RAND_INF_GF_WONDER_ENTRANCE_SIGN },
{ RC_GF_WONDER_ARCHERY_SIGN, RAND_INF_GF_WONDER_ARCHERY_SIGN },
{ RC_TH_WONDER_1_TORCH_1, RAND_INF_TH_WONDER_1_TORCH_1 },
{ RC_TH_WONDER_1_TORCH_2, RAND_INF_TH_WONDER_1_TORCH_2 },
{ RC_TH_WONDER_STEEP_SLOPE_LOWER_EXIT, RAND_INF_TH_WONDER_STEEP_SLOPE_LOWER_EXIT },
{ RC_TH_WONDER_STEEP_SLOPE_UPPER_EXIT, RAND_INF_TH_WONDER_STEEP_SLOPE_UPPER_EXIT },
{ RC_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT, RAND_INF_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT },
{ RC_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT, RAND_INF_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT },
{ RC_TH_WONDER_KITCHEN_SKULL, RAND_INF_TH_WONDER_KITCHEN_SKULL },
{ RC_TH_WONDER_KITCHEN_SOUP, RAND_INF_TH_WONDER_KITCHEN_SOUP },
{ RC_TH_WONDER_DEAD_END_SKULL_ENTRANCE, RAND_INF_TH_WONDER_DEAD_END_SKULL_ENTRANCE },
{ RC_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL, RAND_INF_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL },
{ RC_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL, RAND_INF_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL },
{ RC_TH_WONDER_BREAK_ROOM_TOP_SKULL, RAND_INF_TH_WONDER_BREAK_ROOM_TOP_SKULL },
{ RC_COLOSSUS_WONDER_OASIS_TREE_1, RAND_INF_COLOSSUS_WONDER_OASIS_TREE_1 },
{ RC_COLOSSUS_WONDER_OASIS_TREE_2, RAND_INF_COLOSSUS_WONDER_OASIS_TREE_2 },
{ RC_COLOSSUS_WONDER_OASIS_CHILD_TREE, RAND_INF_COLOSSUS_WONDER_OASIS_CHILD_TREE },
{ RC_COLOSSUS_WONDER_GF_TREE_1, RAND_INF_COLOSSUS_WONDER_GF_TREE_1 },
{ RC_COLOSSUS_WONDER_GF_TREE_2, RAND_INF_COLOSSUS_WONDER_GF_TREE_2 },
{ RC_SHADOW_TEMPLE_WONDER_THREE_POTS, RAND_INF_SHADOW_TEMPLE_WONDER_THREE_POTS },
{ RC_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM, RAND_INF_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM },
{ RC_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM, RAND_INF_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM },
{ RC_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM, RAND_INF_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM },
{ RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1, RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1 },
{ RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2, RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2 },
{ RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3, RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3 },
{ RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4, RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW },
{ RC_JABU_JABUS_BELLY_MQ_HOLES_COW, RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_COW },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW, RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1 },
{ RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2,
RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2 },
{ RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1, RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1 },
{ RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2, RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2 },
{ RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3, RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3 },
{ RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT, RAND_INF_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT },
{ RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW, RAND_INF_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW },
{ RC_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE, RAND_INF_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1, RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1 },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2, RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2 },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1, RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1 },
{ RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2, RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2 },
{ RC_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM, RAND_INF_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM },
{ RC_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE, RAND_INF_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE },
{ RC_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER, RAND_INF_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER },
{ RC_FIRE_TEMPLE_MQ_WONDER_STAIRCASE, RAND_INF_FIRE_TEMPLE_MQ_WONDER_STAIRCASE },
{ RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM, RAND_INF_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM },
{ RC_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM, RAND_INF_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM },
{ RC_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM, RAND_INF_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1,
RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1 },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2,
RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2 },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3,
RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3 },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1, RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1 },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2, RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2 },
{ RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3, RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3 },
{ RC_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK, RAND_INF_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK },
{ RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE, RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE },
{ RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE, RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE },
{ RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT, RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT },
{ RC_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES, RAND_INF_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES },
{ RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1, RAND_INF_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1 },
{ RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2, RAND_INF_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2 },
{ RC_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM, RAND_INF_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM },
{ RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1, RAND_INF_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1 },
{ RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2, RAND_INF_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2 },
{ RC_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM, RAND_INF_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM },
{ RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY, RAND_INF_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY },
{ RC_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM, RAND_INF_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM },
{ RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER, RAND_INF_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER },
{ RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH, RAND_INF_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH },
{ RC_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS, RAND_INF_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3 },
{ RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4, RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4 },
{ RC_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM, RAND_INF_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM },
{ RC_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE, RAND_INF_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE },
{ RC_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL, RAND_INF_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL },
};
CheckIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) {
@ -3567,6 +3783,38 @@ CheckIdentity Randomizer::IdentifySign(s32 sceneNum, s32 posX, s32 posZ, s32 id)
return signIdentity;
}
CheckIdentity Randomizer::IdentifyWonderItem(s32 sceneNum, s32 par1, s32 par2) {
struct CheckIdentity wonderIdentity;
uint32_t wonderSceneNum = sceneNum;
// align oasis trees in colossus between child/adult
if (sceneNum == SCENE_DESERT_COLOSSUS && LINK_IS_ADULT) {
if (par1 == 1157 && par2 == 2388) {
par1 = 1161;
par2 = 2383;
} else if (par1 == 1114 && par2 == 2580) {
par1 = 1113;
par2 = 2581;
}
}
wonderIdentity.randomizerInf = RAND_INF_MAX;
wonderIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
s32 actorParams = TWO_ACTOR_PARAMS(par1, par2);
Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_WONDER_ITEM, wonderSceneNum, actorParams);
if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) {
LUSLOG_WARN("IdentifyWonderItem did not receive a valid RC value (%d).", location->GetRandomizerCheck());
} else {
wonderIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()];
wonderIdentity.randomizerCheck = location->GetRandomizerCheck();
}
return wonderIdentity;
}
u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) {
return Rando::Context::GetInstance()->GetOption(randoSettingKey).Get();
}

View file

@ -44,6 +44,7 @@ class Randomizer {
CheckIdentity IdentifySmallCrate(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);
GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId,
bool checkObtainability = true);
GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId,

View file

@ -1998,6 +1998,213 @@ RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART)
RANDO_ENUM_ITEM(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART)
RANDO_ENUM_ITEM(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART)
RANDO_ENUM_ITEM(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART)
// Overworld Wonder Items
RANDO_ENUM_ITEM(RC_KF_WONDER_TRAINING_1)
RANDO_ENUM_ITEM(RC_KF_WONDER_TRAINING_2)
RANDO_ENUM_ITEM(RC_KF_WONDER_TRAINING_3)
RANDO_ENUM_ITEM(RC_KF_WONDER_SHOP)
RANDO_ENUM_ITEM(RC_KF_WONDER_SIGN)
RANDO_ENUM_ITEM(RC_KF_WONDER_PLATFORMS_1)
RANDO_ENUM_ITEM(RC_KF_WONDER_PLATFORMS_2)
RANDO_ENUM_ITEM(RC_KF_WONDER_CRAWL_GRASS_1)
RANDO_ENUM_ITEM(RC_KF_WONDER_CRAWL_GRASS_2)
RANDO_ENUM_ITEM(RC_HF_WONDER_BRIDGE_1)
RANDO_ENUM_ITEM(RC_HF_WONDER_BRIDGE_2)
RANDO_ENUM_ITEM(RC_HF_WONDER_BRIDGE_3)
RANDO_ENUM_ITEM(RC_MKT_WONDER_DAY_1)
RANDO_ENUM_ITEM(RC_MKT_WONDER_DAY_2)
RANDO_ENUM_ITEM(RC_MKT_WONDER_DAY_3)
RANDO_ENUM_ITEM(RC_MKT_WONDER_DAY_4)
RANDO_ENUM_ITEM(RC_MKT_WONDER_DAY_5)
RANDO_ENUM_ITEM(RC_MKT_WONDER_NIGHT_1)
RANDO_ENUM_ITEM(RC_MKT_WONDER_NIGHT_2)
RANDO_ENUM_ITEM(RC_LLR_WONDER_BIG_FENCE)
RANDO_ENUM_ITEM(RC_LLR_WONDER_SMALL_FENCE)
RANDO_ENUM_ITEM(RC_HC_WONDER_LEFT_TORCH)
RANDO_ENUM_ITEM(RC_HC_WONDER_RIGHT_TORCH)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_1)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_2)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_3)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_4)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_5)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_6)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_7)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_8)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_9)
RANDO_ENUM_ITEM(RC_HC_WONDER_MOAT_10)
RANDO_ENUM_ITEM(RC_HC_WONDER_COURTYARD_RIGHT_WINDOW)
RANDO_ENUM_ITEM(RC_HC_WONDER_COURTYARD_LEFT_WINDOW)
RANDO_ENUM_ITEM(RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_1)
RANDO_ENUM_ITEM(RC_LW_WONDER_BACK_SKULL_KIDS_GRASS_2)
RANDO_ENUM_ITEM(RC_LW_WONDER_FRONT_SKULL_KIDS_GRASS)
RANDO_ENUM_ITEM(RC_SFM_WONDER_ENTRANCE)
RANDO_ENUM_ITEM(RC_SFM_WONDER_MAZE_1)
RANDO_ENUM_ITEM(RC_SFM_WONDER_MAZE_2)
RANDO_ENUM_ITEM(RC_SFM_WONDER_MAZE_3)
RANDO_ENUM_ITEM(RC_SFM_WONDER_MAZE_4)
RANDO_ENUM_ITEM(RC_SFM_WONDER_MAZE_5)
RANDO_ENUM_ITEM(RC_KAK_WONDER_UNDER_CONSTRUCTION)
RANDO_ENUM_ITEM(RC_KAK_WONDER_ABOVE_COW)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_1)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_2)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_3)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_4)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_5)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_6)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_7)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_8)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_9)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_10)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_11)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_12)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_13)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_14)
RANDO_ENUM_ITEM(RC_GY_WONDER_DAMPE_RACE_15)
RANDO_ENUM_ITEM(RC_DMC_WONDER_BENEATH_BRIDGE_PLATFORM)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_DOMAIN_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_DOMAIN_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_DOMAIN_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_DOMAIN_4)
RANDO_ENUM_ITEM(RC_ZR_WONDER_BEFORE_LADDER_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_BEFORE_LADDER_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_BEFORE_LADDER_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_BEFORE_LADDER_4)
RANDO_ENUM_ITEM(RC_ZR_WONDER_BEFORE_LADDER_5)
RANDO_ENUM_ITEM(RC_ZR_WONDER_BEFORE_LADDER_6)
RANDO_ENUM_ITEM(RC_ZR_WONDER_AFTER_LADDER_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_AFTER_LADDER_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_AFTER_LADDER_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_FROG_BRIDGE_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_FROG_BRIDGE_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_FROG_BRIDGE_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_PILLARS_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_PILLARS_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_PILLARS_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_PILLARS_4)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_LAND_BRIDGE_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_LAND_BRIDGE_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_LAND_BRIDGE_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_LAND_BRIDGE_4)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_CUCCO_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_CUCCO_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_NEAR_CUCCO_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_RIVER_1)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_RIVER_2)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_RIVER_3)
RANDO_ENUM_ITEM(RC_ZR_WONDER_LOWER_RIVER_4)
RANDO_ENUM_ITEM(RC_ZF_WONDER_ROCK)
RANDO_ENUM_ITEM(RC_GV_WONDER_LOWER_WATERFALL)
RANDO_ENUM_ITEM(RC_GV_WONDER_UPPER_WATERFALL)
RANDO_ENUM_ITEM(RC_GF_WONDER_ENTRANCE_SIGN)
RANDO_ENUM_ITEM(RC_GF_WONDER_ARCHERY_SIGN)
RANDO_ENUM_ITEM(RC_TH_WONDER_1_TORCH_1)
RANDO_ENUM_ITEM(RC_TH_WONDER_1_TORCH_2)
RANDO_ENUM_ITEM(RC_TH_WONDER_STEEP_SLOPE_LOWER_EXIT)
RANDO_ENUM_ITEM(RC_TH_WONDER_STEEP_SLOPE_UPPER_EXIT)
RANDO_ENUM_ITEM(RC_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT)
RANDO_ENUM_ITEM(RC_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT)
RANDO_ENUM_ITEM(RC_TH_WONDER_KITCHEN_SKULL)
RANDO_ENUM_ITEM(RC_TH_WONDER_KITCHEN_SOUP)
RANDO_ENUM_ITEM(RC_TH_WONDER_DEAD_END_SKULL_ENTRANCE)
RANDO_ENUM_ITEM(RC_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL)
RANDO_ENUM_ITEM(RC_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL)
RANDO_ENUM_ITEM(RC_TH_WONDER_BREAK_ROOM_TOP_SKULL)
RANDO_ENUM_ITEM(RC_COLOSSUS_WONDER_OASIS_TREE_1)
RANDO_ENUM_ITEM(RC_COLOSSUS_WONDER_OASIS_TREE_2)
RANDO_ENUM_ITEM(RC_COLOSSUS_WONDER_OASIS_CHILD_TREE)
RANDO_ENUM_ITEM(RC_COLOSSUS_WONDER_GF_TREE_1)
RANDO_ENUM_ITEM(RC_COLOSSUS_WONDER_GF_TREE_2)
// Dungeon Wonder Items
RANDO_ENUM_ITEM(RC_SHADOW_TEMPLE_WONDER_THREE_POTS)
RANDO_ENUM_ITEM(RC_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM)
RANDO_ENUM_ITEM(RC_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM)
RANDO_ENUM_ITEM(RC_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM)
// MQ Dungeon Wonder Items
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1)
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2)
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3)
RANDO_ENUM_ITEM(RC_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_HOLES_COW)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1)
RANDO_ENUM_ITEM(RC_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER)
RANDO_ENUM_ITEM(RC_FIRE_TEMPLE_MQ_WONDER_STAIRCASE)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY)
RANDO_ENUM_ITEM(RC_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER)
RANDO_ENUM_ITEM(RC_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH)
RANDO_ENUM_ITEM(RC_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3)
RANDO_ENUM_ITEM(RC_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4)
RANDO_ENUM_ITEM(RC_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM)
RANDO_ENUM_ITEM(RC_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE)
RANDO_ENUM_ITEM(RC_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL)
// End Wonder Items
RANDO_ENUM_ITEM(RC_SFM_FAIRY_GROTTO_FAIRY_1)
RANDO_ENUM_ITEM(RC_SFM_FAIRY_GROTTO_FAIRY_2)
RANDO_ENUM_ITEM(RC_SFM_FAIRY_GROTTO_FAIRY_3)

View file

@ -1368,6 +1368,33 @@ RANDO_ENUM_ITEM(RHT_TREE_LON_LON_RANCH)
RANDO_ENUM_ITEM(RHT_TREE_KAKARIKO)
RANDO_ENUM_ITEM(RHT_BUSH_HYRULE_FIELD)
RANDO_ENUM_ITEM(RHT_BUSH_ZORAS_FOUNTAIN)
// Shuffle Wonder Items
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_KOKIRI_FOREST)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_HYRULE_FIELD)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_MARKET)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_LON_LON_RANCH)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_HYRULE_CASTLE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_CASTLE_COURTYARD_ZELDA)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_LOST_WOODS)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_SACRED_FOREST_MEADOW)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_KAKARIKO_VILLAGE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_DAMPES_GRAVE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_DEATH_MOUNTAIN_CRATER)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_ZORAS_RIVER)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_ZORAS_FOUNTAIN)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_GERUDO_VALLEY)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_GERUDOS_FORTRESS)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_THIEVES_HIDEOUT)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_DESERT_COLOSSUS)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_DEKU_TREE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_JABU_JABU)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_FIRE_TEMPLE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_WATER_TEMPLE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_SPIRIT_TEMPLE)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_SHADOW_TEMPLE)
RANDO_ENUM_ITEM(RHT_BOTTOM_OF_THE_WELL_WONDER_ITEM)
RANDO_ENUM_ITEM(RHT_WONDER_ITEM_GERUDO_TRAINING_GROUND)
RANDO_ENUM_ITEM(RHT_GANONS_CASTLE_WONDER_ITEM)
// Ganon Line
RANDO_ENUM_ITEM(RHT_GANON_JOKE01)
RANDO_ENUM_ITEM(RHT_GANON_JOKE02)

View file

@ -1484,6 +1484,212 @@ RANDO_ENUM_ITEM(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART)
RANDO_ENUM_ITEM(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART)
RANDO_ENUM_ITEM(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART)
// Overworld Wonder Items
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_TRAINING_1)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_TRAINING_2)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_TRAINING_3)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_SHOP)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_SIGN)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_PLATFORMS_1)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_PLATFORMS_2)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_CRAWL_GRASS_1)
RANDO_ENUM_ITEM(RAND_INF_KF_WONDER_CRAWL_GRASS_2)
RANDO_ENUM_ITEM(RAND_INF_HF_WONDER_BRIDGE_1)
RANDO_ENUM_ITEM(RAND_INF_HF_WONDER_BRIDGE_2)
RANDO_ENUM_ITEM(RAND_INF_HF_WONDER_BRIDGE_3)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_DAY_1)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_DAY_2)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_DAY_3)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_DAY_4)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_DAY_5)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_NIGHT_1)
RANDO_ENUM_ITEM(RAND_INF_MKT_WONDER_NIGHT_2)
RANDO_ENUM_ITEM(RAND_INF_LLR_WONDER_BIG_FENCE)
RANDO_ENUM_ITEM(RAND_INF_LLR_WONDER_SMALL_FENCE)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_LEFT_TORCH)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_RIGHT_TORCH)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_1)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_2)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_3)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_4)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_5)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_6)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_7)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_8)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_9)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_MOAT_10)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_COURTYARD_RIGHT_WINDOW)
RANDO_ENUM_ITEM(RAND_INF_HC_WONDER_COURTYARD_LEFT_WINDOW)
RANDO_ENUM_ITEM(RAND_INF_LW_WONDER_BACK_SKULL_KIDS_GRASS_1)
RANDO_ENUM_ITEM(RAND_INF_LW_WONDER_BACK_SKULL_KIDS_GRASS_2)
RANDO_ENUM_ITEM(RAND_INF_LW_WONDER_FRONT_SKULL_KIDS_GRASS)
RANDO_ENUM_ITEM(RAND_INF_SFM_WONDER_ENTRANCE)
RANDO_ENUM_ITEM(RAND_INF_SFM_WONDER_MAZE_1)
RANDO_ENUM_ITEM(RAND_INF_SFM_WONDER_MAZE_2)
RANDO_ENUM_ITEM(RAND_INF_SFM_WONDER_MAZE_3)
RANDO_ENUM_ITEM(RAND_INF_SFM_WONDER_MAZE_4)
RANDO_ENUM_ITEM(RAND_INF_SFM_WONDER_MAZE_5)
RANDO_ENUM_ITEM(RAND_INF_KAK_WONDER_UNDER_CONSTRUCTION)
RANDO_ENUM_ITEM(RAND_INF_KAK_WONDER_ABOVE_COW)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_1)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_2)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_3)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_4)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_5)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_6)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_7)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_8)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_9)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_10)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_11)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_12)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_13)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_14)
RANDO_ENUM_ITEM(RAND_INF_GY_WONDER_DAMPE_RACE_15)
RANDO_ENUM_ITEM(RAND_INF_DMC_WONDER_BENEATH_BRIDGE_PLATFORM)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_DOMAIN_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_DOMAIN_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_DOMAIN_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_DOMAIN_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_BEFORE_LADDER_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_BEFORE_LADDER_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_BEFORE_LADDER_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_BEFORE_LADDER_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_BEFORE_LADDER_5)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_BEFORE_LADDER_6)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_AFTER_LADDER_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_AFTER_LADDER_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_AFTER_LADDER_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_FROG_BRIDGE_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_FROG_BRIDGE_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_FROG_BRIDGE_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_PILLARS_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_PILLARS_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_PILLARS_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_PILLARS_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_LAND_BRIDGE_4)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_CUCCO_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_CUCCO_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_NEAR_CUCCO_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_RIVER_1)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_RIVER_2)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_RIVER_3)
RANDO_ENUM_ITEM(RAND_INF_ZR_WONDER_LOWER_RIVER_4)
RANDO_ENUM_ITEM(RAND_INF_ZF_WONDER_ROCK)
RANDO_ENUM_ITEM(RAND_INF_GV_WONDER_LOWER_WATERFALL)
RANDO_ENUM_ITEM(RAND_INF_GV_WONDER_UPPER_WATERFALL)
RANDO_ENUM_ITEM(RAND_INF_GF_WONDER_ENTRANCE_SIGN)
RANDO_ENUM_ITEM(RAND_INF_GF_WONDER_ARCHERY_SIGN)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_1_TORCH_1)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_1_TORCH_2)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_STEEP_SLOPE_LOWER_EXIT)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_STEEP_SLOPE_UPPER_EXIT)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_DOUBLE_JAIL_LOWER_EXIT)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_DOUBLE_JAIL_UPPER_EXIT)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_KITCHEN_SKULL)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_KITCHEN_SOUP)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_DEAD_END_SKULL_ENTRANCE)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_DEAD_END_SKULL_NEAR_JAIL)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_BREAK_ROOM_BOTTOM_SKULL)
RANDO_ENUM_ITEM(RAND_INF_TH_WONDER_BREAK_ROOM_TOP_SKULL)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_WONDER_OASIS_TREE_1)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_WONDER_OASIS_TREE_2)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_WONDER_OASIS_CHILD_TREE)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_WONDER_GF_TREE_1)
RANDO_ENUM_ITEM(RAND_INF_COLOSSUS_WONDER_GF_TREE_2)
// Dungeon Wonder Items
RANDO_ENUM_ITEM(RAND_INF_SHADOW_TEMPLE_WONDER_THREE_POTS)
RANDO_ENUM_ITEM(RAND_INF_GERUDO_TRAINING_GROUND_WONDER_BEAMOS_ROOM)
RANDO_ENUM_ITEM(RAND_INF_GERUDO_TRAINING_GROUND_WONDER_EYE_STATUE_ROOM)
RANDO_ENUM_ITEM(RAND_INF_GERUDO_TRAINING_GROUND_WONDER_TORCH_SLUGS_ROOM)
// MQ Dungeon Wonder Items
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_1)
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_2)
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_3)
RANDO_ENUM_ITEM(RAND_INF_DEKU_TREE_MQ_WONDER_BASEMENT_GRAVE_4)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_LEFT_COW)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ENTRANCE_RIGHT_COW)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_ELEVATOR_COW)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_HOLES_COW)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_RIGHT_COW_3)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BASEMENT_LEFT_COW_3)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_AFTER_BIG_OCTO)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_JIGGLIES_COW)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_RIGHT_3)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_COW_LEFT_3)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_2)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_FALLING_LIKE_LIKES_EXPLOSION_3)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_LEFT_COW)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_1)
RANDO_ENUM_ITEM(RAND_INF_JABU_JABUS_BELLY_MQ_WONDER_BEFORE_BOSS_RIGHT_COW_2)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_1)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_2)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_SHORTCUT_ROOM_3)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_HOOKSHOT)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_BOSS_KEY_ROOM_BOW)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_LIZALFOS_MAZE)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_1)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_LARGE_FACE_2)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_1)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_EAST_TOWER_SMALL_FACE_2)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_TORCH_ROOM)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_FIRE_MAZE)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_AFTER_FLARE_DANCER)
RANDO_ENUM_ITEM(RAND_INF_FIRE_TEMPLE_MQ_WONDER_STAIRCASE)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_LIZALFOS_ROOM)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_LONGSHOT_ROOM)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_STALFOS_ROOM)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_1)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_2)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_RIGHT_3)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_1)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_2)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_HOOKSHOT_STAIRCASE_LEFT_3)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_AFTER_DARK_LINK)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_LEFT_EYE)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_RIGHT_EYE)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_DRAGON_ROOM_PORTRAIT)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_TRIPLE_TORCHES)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_1)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_WATER_SPROUTS_2)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_FREESTANDING_ROOM)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_1)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_BEFORE_BOSS_2)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_UNDER_PILLAR_ROOM)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_LIZALFOS_HALLWAY)
RANDO_ENUM_ITEM(RAND_INF_WATER_TEMPLE_MQ_WONDER_GS_STORAGE_ROOM)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_WONDER_CHEST_HAMMER)
RANDO_ENUM_ITEM(RAND_INF_SPIRIT_TEMPLE_MQ_WONDER_CHEST_SLASH)
RANDO_ENUM_ITEM(RAND_INF_SHADOW_TEMPLE_MQ_WONDER_THREE_POTS)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_1)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_2)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_3)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_LEFT_4)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_1)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_2)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_3)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_MAIN_ROOM_RIGHT_4)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_1)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_2)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_3)
RANDO_ENUM_ITEM(RAND_INF_BOTTOM_OF_THE_WELL_MQ_WONDER_SIDE_ROOM_4)
RANDO_ENUM_ITEM(RAND_INF_GERUDO_TRAINING_GROUND_MQ_WONDER_DINOLFOS_ROOM)
RANDO_ENUM_ITEM(RAND_INF_GERUDO_TRAINING_GROUND_MQ_WONDER_EYE_STATUE)
RANDO_ENUM_ITEM(RAND_INF_GANONS_CASTLE_MQ_WONDER_SHADOW_TRIAL)
// End Wonder Items
RANDO_ENUM_ITEM(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)
RANDO_ENUM_ITEM(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2)
RANDO_ENUM_ITEM(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3)

View file

@ -119,6 +119,7 @@ RANDO_ENUM_ITEM(RCTYPE_SMALL_CRATE) // Small crates
RANDO_ENUM_ITEM(RCTYPE_TREE) // Trees
RANDO_ENUM_ITEM(RCTYPE_NLTREE) // NL Trees
RANDO_ENUM_ITEM(RCTYPE_BUSH) // Bushes
RANDO_ENUM_ITEM(RCTYPE_WONDER_ITEM) // Wonder Items
RANDO_ENUM_ITEM(RCTYPE_DUNGEON_REWARD) // Dungeon rewards (blue warps)
RANDO_ENUM_ITEM(RCTYPE_OCARINA) // Ocarina locations
RANDO_ENUM_ITEM(RCTYPE_BEEHIVE) // Beehives

View file

@ -365,6 +365,14 @@ RANDO_ENUM_ITEM(RO_SHUFFLE_FREESTANDING_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_FREESTANDING_ALL)
RANDO_ENUM_END(RandoOptionFreestanding)
// Wonder Items settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionWonderItems)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_OFF)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_DUNGEONS)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_OVERWORLD)
RANDO_ENUM_ITEM(RO_SHUFFLE_WONDER_ITEMS_ALL)
RANDO_ENUM_END(RandoOptionWonderItems)
// Shuffle Pots settings (off, dungeons, overworld, all)
RANDO_ENUM_BEGIN(RandoOptionShufflePots)
RANDO_ENUM_ITEM(RO_SHUFFLE_POTS_OFF)

View file

@ -114,7 +114,8 @@ RANDO_ENUM_ITEM(RR_TH_KITCHEN_MAIN)
RANDO_ENUM_ITEM(RR_TH_KITCHEN_BY_CORRIDOR)
RANDO_ENUM_ITEM(RR_TH_KITCHEN_OPPOSITE_CORRIDOR)
RANDO_ENUM_ITEM(RR_TH_BREAK_ROOM)
RANDO_ENUM_ITEM(RR_TH_BREAK_ROOM_CORRIDOR)
RANDO_ENUM_ITEM(RR_TH_BREAK_ROOM_LOWER_CORRIDOR)
RANDO_ENUM_ITEM(RR_TH_BREAK_ROOM_UPPER_CORRIDOR)
RANDO_ENUM_ITEM(RR_WASTELAND_NEAR_FORTRESS)
RANDO_ENUM_ITEM(RR_HAUNTED_WASTELAND)
RANDO_ENUM_ITEM(RR_WASTELAND_NEAR_COLOSSUS)
@ -710,7 +711,8 @@ RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_SCARECROW_CANAL)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_CANAL_ALCOVE)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_BEHIND_CANAL)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_FREESTANDING_ROOM)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_3_JETS_ROOM)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_3_JETS_ROOM_SWITCH_SIDE)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_3_JETS_ROOM_NO_SWITCH_SIDE)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_DODONGO_ROOM)
RANDO_ENUM_ITEM(RR_WATER_TEMPLE_MQ_CRATE_VORTEX_CAGE)

View file

@ -237,6 +237,7 @@ RANDO_ENUM_ITEM(RSK_SKELETON_KEY)
RANDO_ENUM_ITEM(RSK_SHUFFLE_DEKU_STICK_BAG)
RANDO_ENUM_ITEM(RSK_SHUFFLE_DEKU_NUT_BAG)
RANDO_ENUM_ITEM(RSK_SHUFFLE_FREESTANDING)
RANDO_ENUM_ITEM(RSK_SHUFFLE_WONDER_ITEMS)
RANDO_ENUM_ITEM(RSK_SHUFFLE_FOUNTAIN_FAIRIES)
RANDO_ENUM_ITEM(RSK_SHUFFLE_STONE_FAIRIES)
RANDO_ENUM_ITEM(RSK_SHUFFLE_BEAN_FAIRIES)

View file

@ -199,6 +199,8 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() {
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleTrees"), RO_GENERIC_NO)) &&
(location.GetRCType() != RCTYPE_SIGN ||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSigns"), RO_GENERIC_NO)) &&
(location.GetRCType() != RCTYPE_WONDER_ITEM ||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleWonderItems"), RO_GENERIC_NO)) &&
(location.GetRCType() != RCTYPE_FISH ||
ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) &&
(location.GetRCType() != RCTYPE_ADULT_TRADE ||

View file

@ -81,6 +81,8 @@ bool showTrees;
bool showBushes;
bool showOverworldSigns;
bool showDungeonSigns;
bool showOverworldWonderItems;
bool showDungeonWonderItems;
bool showFrogSongRupees;
bool showFountainFairies;
bool showStoneFairies;
@ -1491,6 +1493,25 @@ void LoadSettings() {
}
showTrees = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TREES);
showBushes = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BUSHES);
switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_WONDER_ITEMS)) {
case RO_SHUFFLE_WONDER_ITEMS_ALL:
showOverworldWonderItems = true;
showDungeonWonderItems = true;
break;
case RO_SHUFFLE_WONDER_ITEMS_OVERWORLD:
showOverworldWonderItems = true;
showDungeonWonderItems = false;
break;
case RO_SHUFFLE_WONDER_ITEMS_DUNGEONS:
showOverworldWonderItems = false;
showDungeonWonderItems = true;
break;
default:
showOverworldWonderItems = false;
showDungeonWonderItems = false;
break;
}
} else { // Vanilla
showOverworldTokens = true;
showDungeonTokens = true;
@ -1504,6 +1525,8 @@ void LoadSettings() {
showDungeonSigns = false;
showTrees = false;
showBushes = false;
showOverworldWonderItems = false;
showDungeonWonderItems = false;
}
fortressFast = false;
@ -1624,6 +1647,9 @@ bool IsCheckShuffled(RandomizerCheck rc) {
(loc->GetRCType() != RCTYPE_SIGN ||
(showOverworldSigns && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) ||
(showDungeonSigns && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) &&
(loc->GetRCType() != RCTYPE_WONDER_ITEM ||
(showOverworldWonderItems && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) ||
(showDungeonWonderItems && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) &&
(loc->GetRCType() != RCTYPE_FISH ||
OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) &&
(loc->GetRCType() != RCTYPE_FREESTANDING ||

View file

@ -1039,6 +1039,7 @@ void Settings::CreateOptions() {
}
});
OPT_U8(RSK_SHUFFLE_FREESTANDING, "Shuffle Freestanding Items", {"Off", "Dungeons", "Overworld", "All Items"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), mOptionDescriptions[RSK_SHUFFLE_FREESTANDING], WIDGET_CVAR_COMBOBOX, RO_SHUFFLE_FREESTANDING_OFF);
OPT_U8(RSK_SHUFFLE_WONDER_ITEMS, "Shuffle Wonder Items", {"Off", "Dungeons", "Overworld", "All Items"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleWonderItems"), mOptionDescriptions[RSK_SHUFFLE_WONDER_ITEMS], WIDGET_CVAR_COMBOBOX, RO_SHUFFLE_WONDER_ITEMS_OFF);
OPT_U8(RSK_FISHSANITY, "Fishsanity", {"Off", "Shuffle only Hyrule Loach", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Fishsanity"), mOptionDescriptions[RSK_FISHSANITY], WIDGET_CVAR_COMBOBOX, RO_FISHSANITY_OFF);
OPT_CALLBACK(RSK_FISHSANITY, {
// Hide fishing pond settings if we aren't shuffling the fishing pond
@ -1850,6 +1851,7 @@ void Settings::CreateOptions() {
&mOptions[RSK_FISHSANITY_POND_COUNT],
&mOptions[RSK_FISHSANITY_AGE_SPLIT],
&mOptions[RSK_SHUFFLE_FREESTANDING],
&mOptions[RSK_SHUFFLE_WONDER_ITEMS],
&mOptions[RSK_SHUFFLE_BEEHIVES],
&mOptions[RSK_SHUFFLE_COWS],
&mOptions[RSK_SHUFFLE_POTS],
@ -2172,6 +2174,7 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHUFFLE_DEKU_STICK_BAG],
&mOptions[RSK_SHUFFLE_DEKU_NUT_BAG],
&mOptions[RSK_SHUFFLE_FREESTANDING],
&mOptions[RSK_SHUFFLE_WONDER_ITEMS],
&mOptions[RSK_SHUFFLE_FOUNTAIN_FAIRIES],
&mOptions[RSK_SHUFFLE_STONE_FAIRIES],
&mOptions[RSK_SHUFFLE_BEAN_FAIRIES],

View file

@ -63,6 +63,7 @@ class StaticData {
static void RegisterCrateLocations();
static void RegisterTreeLocations();
static void RegisterSignLocations();
static void RegisterWonderItemLocations();
static void InitHashMaps();
static std::array<std::pair<RandomizerCheck, RandomizerCheck>, 17> randomizerFishingPondFish;
static std::unordered_map<int8_t, RandomizerCheck> randomizerGrottoFishMap;

View file

@ -8,6 +8,7 @@
#include "objects/object_sd/object_sd.h"
#include "vt.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
@ -124,15 +125,21 @@ void EnHeishi1_Init(Actor* thisx, PlayState* play) {
(Flags_GetEventChkInf(EVENTCHKINF_LEARNED_ZELDAS_LULLABY));
if (this->type != 5) {
if ((gSaveContext.dayTime < 0xB888 || IS_DAY) &&
((!IS_RANDO && !Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE)) || (IS_RANDO && !metZelda))) {
if (GameInteractor_Should(VB_WONDER_HEISHI_PATROLLING,
(gSaveContext.dayTime < 0xB888 || IS_DAY) &&
((!IS_RANDO && !Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE)) ||
(IS_RANDO && !metZelda)),
this)) {
this->actionFunc = EnHeishi1_SetupWalk;
} else {
Actor_Kill(&this->actor);
}
} else {
if ((gSaveContext.dayTime >= 0xB889) || !IS_DAY ||
(!IS_RANDO && Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE)) || (IS_RANDO && metZelda)) {
if (GameInteractor_Should(VB_WONDER_HEISHI_PATROLLING,
(gSaveContext.dayTime >= 0xB889) || !IS_DAY ||
(!IS_RANDO && Flags_GetEventChkInf(EVENTCHKINF_ZELDA_FLED_HYRULE_CASTLE)) ||
(IS_RANDO && metZelda),
this)) {
this->actionFunc = EnHeishi1_SetupWaitNight;
} else {
Actor_Kill(&this->actor);

View file

@ -679,10 +679,12 @@ void func_80A5455C(EnHeishi2* this, PlayState* play) {
pos.y = Rand_CenteredFloat(20.0f) + (this->unk_274.y - 40.0f);
pos.z = Rand_CenteredFloat(20.0f) + (this->unk_274.z - 20.0f);
rotY = Rand_CenteredFloat(7000.0f) + this->actor.yawTowardsPlayer;
bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, pos.x, pos.y, pos.z, 0, rotY, 0, 0);
if (bomb != NULL) {
bomb->actor.speedXZ = Rand_CenteredFloat(5.0f) + 10.0f;
bomb->actor.velocity.y = Rand_CenteredFloat(5.0f) + 10.0f;
if (GameInteractor_Should(VB_WONDER_HEISHI_ITEM, true, &pos, rotY)) {
bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, pos.x, pos.y, pos.z, 0, rotY, 0, 0);
if (bomb != NULL) {
bomb->actor.speedXZ = Rand_CenteredFloat(5.0f) + 10.0f;
bomb->actor.velocity.y = Rand_CenteredFloat(5.0f) + 10.0f;
}
}
// "This is down!"

View file

@ -6,6 +6,7 @@
#include "z_en_wonder_item.h"
#include "vt.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#define FLAGS 0
@ -54,8 +55,8 @@ const ActorInit En_Wonder_Item_InitVars = {
NULL,
};
static Vec3f sTagPointsFree[9];
static Vec3f sTagPointsOrdered[9];
Vec3f sTagPointsFree[9]; // SOH [Randomizer] remove static to use in ShuffleWonderItems
Vec3f sTagPointsOrdered[9]; // SOH [Randomizer] remove static to use in ShuffleWonderItems
void EnWonderItem_Destroy(Actor* thisx, PlayState* play) {
s32 pad;
@ -75,24 +76,26 @@ void EnWonderItem_DropCollectible(EnWonderItem* this, PlayState* play, s32 autoC
s32 i;
s32 randomDrop;
Sfx_PlaySfxCentered(NA_SE_SY_GET_ITEM);
if (GameInteractor_Should(VB_WONDER_DROP_ITEM, true, this)) {
Sfx_PlaySfxCentered(NA_SE_SY_GET_ITEM);
if (this->dropCount == 0) {
this->dropCount++;
}
for (i = this->dropCount; i > 0; i--) {
if (this->itemDrop < WONDERITEM_DROP_RANDOM) {
if ((this->itemDrop == WONDERITEM_DROP_FLEXIBLE) || !autoCollect) {
Item_DropCollectible(play, &this->actor.world.pos, dropTable[this->itemDrop]);
if (this->dropCount == 0) {
this->dropCount++;
}
for (i = this->dropCount; i > 0; i--) {
if (this->itemDrop < WONDERITEM_DROP_RANDOM) {
if ((this->itemDrop == WONDERITEM_DROP_FLEXIBLE) || !autoCollect) {
Item_DropCollectible(play, &this->actor.world.pos, dropTable[this->itemDrop]);
} else {
Item_DropCollectible(play, &this->actor.world.pos, dropTable[this->itemDrop] | 0x8000);
}
} else {
Item_DropCollectible(play, &this->actor.world.pos, dropTable[this->itemDrop] | 0x8000);
}
} else {
randomDrop = this->itemDrop - WONDERITEM_DROP_RANDOM;
if (!autoCollect) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, randomDrop);
} else {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, randomDrop | 0x8000);
randomDrop = this->itemDrop - WONDERITEM_DROP_RANDOM;
if (!autoCollect) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, randomDrop);
} else {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, randomDrop | 0x8000);
}
}
}
}
@ -104,9 +107,10 @@ void EnWonderItem_DropCollectible(EnWonderItem* this, PlayState* play, s32 autoC
void EnWonderItem_Init(Actor* thisx, PlayState* play) {
static u32 collisionTypes[] = {
0x00000702 /* sword slash */, 0x0001F820 /* arrow */, 0x00000040 /* hammer */, 0x00000008 /* bomb */,
0x00000004 /* slingshot */, 0x00000010 /* boomerang */, 0x00000080 /* hookshot */,
};
0x00000702 /* sword slash */, 0x0001F820 /* arrow */, 0x00000040 /* hammer */,
0x00000008 /* bomb */, 0x00000004 /* slingshot */, 0x00000010 /* boomerang */,
0x00000080 /* hookshot */, 0x0001F820 | 0x00000080 /* arrow or hookshot */
}; // SOH [Port] add final array entry to avoid OOB behavior on Water MQ Torches room wonder item
s32 pad;
s16 colTypeIndex;
EnWonderItem* this = (EnWonderItem*)thisx;
@ -125,7 +129,7 @@ void EnWonderItem_Init(Actor* thisx, PlayState* play) {
this->switchFlag = -1;
}
this->actor.targetMode = 1;
if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
if (GameInteractor_Should(VB_WONDER_SPAWN, (this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag))) {
osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag);
Actor_Kill(&this->actor);
return;
@ -312,7 +316,7 @@ void EnWonderItem_BombSoldier(EnWonderItem* this, PlayState* play) {
// "Careless soldier spawned"
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ うっかり兵セット完了 ☆☆☆☆☆ \n" VT_RST);
}
if (this->switchFlag >= 0) {
if (GameInteractor_Should(VB_WONDER_DROP_ITEM, this->switchFlag >= 0, this)) {
Flags_SetSwitch(play, this->switchFlag);
}
Actor_Kill(&this->actor);