#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;
    Vec3f velocity = { 0.0f, -0.05f, 0.0f };
    Vec3f accel = { 0.0f, -0.025f, 0.0f };

    // Draw particles at tag spots if applicable, otherwise at wonder item actor location
    if (wonderActor->wonderMode == WONDERITEM_MULTITAG_ORDERED) {
        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) {
    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));

    const auto wonderIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(refActor);
    if (wonderIdentity == nullptr) {
        return;
    }

    GetItemEntry wonderItem =
        Rando::Context::GetInstance()->GetFinalGIEntry(wonderIdentity->randomizerCheck, true, GI_NONE);
    GetItemCategory getItemCategory = isNotCMC ? ITEM_CATEGORY_MAJOR : Randomizer_AdjustItemCategory(wonderItem);

    Color_RGBA8 primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);
    Color_RGBA8 secColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_SECONDARY);
    Color_RGBA8 envColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_FLARE);
    EnWonderItem_RandomizerDraw(wonderActor, &primColor, &secColor, &envColor, wonderIdentity);
}

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);