#include "soh/ObjectExtension/ObjectExtension.h"
#include "item_category_adj.h"
#include "particle_cmc.h"
#include "soh/frame_interpolation.h"
#include "soh/OTRGlobals.h"
#include "soh/Enhancements/randomizer/randomizer.h"
#include "soh/Enhancements/randomizer/RCToRandInf.h"

extern "C" {
#include "functions.h"
#include "overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.h"
#include "objects/object_tk/object_tk.h"
extern PlayState* gPlayState;
}

struct StalactiteDropped {};
static ObjectExtension::Register<StalactiteDropped> StalactiteDroppedRegister;

extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play);

extern "C" void DrawItemHalo(Actor* icicleActor) {
    // If the regrowing stalactite has already dropped, return
    if (ObjectExtension::GetInstance().Has<StalactiteDropped>(icicleActor)) {
        return;
    }

    GetItemCategory getItemCategory;
    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 icicleIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(icicleActor);

    GetItemEntry icicleItem =
        Rando::Context::GetInstance()->GetFinalGIEntry(icicleIdentity->randomizerCheck, true, GI_NONE);
    getItemCategory = Randomizer_AdjustItemCategory(icicleItem);

    if (isNotCMC) {
        getItemCategory = ITEM_CATEGORY_MAJOR;
    }
    Color_RGBA8 primColor = Randomizer_GetParticleCMCColor(getItemCategory, COLOR_PRIMARY);

    // Align halo to center of icicles
    // Ice Cavern HP room is slightly different for stalactites
    f32 yOffset = (icicleActor->params == 0) ? 135.0f : 45.0f;
    f32 xOffset = -23.0f;
    f32 zOffset = (icicleActor->params == 0)                                                            ? 5.0f
                  : (gPlayState->sceneNum == SCENE_ICE_CAVERN && gPlayState->roomCtx.curRoom.num == 11) ? 4.0f
                                                                                                        : 2.0f;

    // Rotate and draw halo with CMC colors
    Matrix_Translate(icicleActor->world.pos.x + xOffset, icicleActor->world.pos.y + yOffset,
                     icicleActor->world.pos.z + zOffset, MTXMODE_NEW);
    Matrix_RotateZ(static_cast<f32>(-M_PI / 2), MTXMODE_APPLY);
    Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY);
    OPEN_DISPS(gPlayState->state.gfxCtx);
    gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gPlayState->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
    gDPSetGrayscaleColor(POLY_OPA_DISP++, primColor.r, primColor.g, primColor.b, 175);
    gSPGrayscale(POLY_OPA_DISP++, true);
    gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gDampeHaloDL);
    gSPGrayscale(POLY_OPA_DISP++, false);
    CLOSE_DISPS(gPlayState->state.gfxCtx);
}

uint8_t BgIceTurara_RandomizerHoldsItem(Actor* actor) {
    const auto icicleIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(actor);
    if (icicleIdentity == nullptr) {
        return false;
    }

    RandomizerCheck rc = icicleIdentity->randomizerCheck;

    // Don't pull randomized item if icicle isn't randomized or is already checked
    if (!IS_RANDO || Flags_GetRandomizerInf(icicleIdentity->randomizerInf) ||
        icicleIdentity->randomizerCheck == RC_UNKNOWN_CHECK) {
        return false;
    } else {
        return true;
    }
}

void BgIceTurara_RandomizerSpawnCollectible(void* actor) {
    BgIceTurara* icicleActor = (BgIceTurara*)actor;
    const auto icicleIdentity = ObjectExtension::GetInstance().Get<CheckIdentity>(&icicleActor->dyna.actor);

    EnItem00* item00 =
        (EnItem00*)Item_DropCollectible2(gPlayState, &icicleActor->dyna.actor.world.pos, ITEM00_SOH_DUMMY);
    item00->randoInf = icicleIdentity->randomizerInf;
    item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(icicleIdentity->randomizerCheck, true, GI_NONE);
    item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem;
    item00->actor.velocity.y = 8.0f;
    item00->actor.speedXZ = 2.0f;
    item00->actor.world.rot.y = static_cast<int16_t>(Rand_CenteredFloat(65536.0f));
}

static CheckIdentity IdentifyIcicle(s32 sceneNum, s32 posX, s32 posZ) {
    struct CheckIdentity icicleIdentity;
    uint32_t icicleSceneNum = sceneNum;

    icicleIdentity.randomizerInf = RAND_INF_MAX;
    icicleIdentity.randomizerCheck = RC_UNKNOWN_CHECK;

    s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ);

    Rando::Location* location =
        OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_BG_ICE_TURARA, icicleSceneNum, actorParams);

    if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) {
        LUSLOG_WARN("IdentifyIcicle did not receive a valid RC value (%d).", location->GetRandomizerCheck());
        assert(false);
    } else {
        icicleIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()];
        icicleIdentity.randomizerCheck = location->GetRandomizerCheck();
    }

    return icicleIdentity;
}

void RegisterShuffleIcicles() {
    bool shouldRegister = IS_RANDO && Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_ICICLES).Get();

    COND_ID_HOOK(OnActorInit, ACTOR_BG_ICE_TURARA, shouldRegister, [](void* actorRef) {
        Actor* actor = static_cast<Actor*>(actorRef);
        BgIceTurara* icicleActor = static_cast<BgIceTurara*>(actorRef);

        auto icicleIdentity = IdentifyIcicle(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z);
        ObjectExtension::GetInstance().Set<CheckIdentity>(actor, std::move(icicleIdentity));
    });

    // Draw halo around icicles
    COND_VB_SHOULD(VB_ICICLE_SETUP_DRAW, shouldRegister, {
        BgIceTurara* icicleActor = va_arg(args, BgIceTurara*);
        if (BgIceTurara_RandomizerHoldsItem(&icicleActor->dyna.actor) &&
            !ObjectExtension::GetInstance().Has<StalactiteDropped>(&icicleActor->dyna.actor)) {
            DrawItemHalo(&icicleActor->dyna.actor);
        }
    });

    // Drop item for stalagmites
    COND_VB_SHOULD(VB_STALAGMITE_DROP_ITEM, shouldRegister, {
        BgIceTurara* icicleActor = va_arg(args, BgIceTurara*);

        if (*should) {
            if (BgIceTurara_RandomizerHoldsItem(&icicleActor->dyna.actor)) {
                BgIceTurara_RandomizerSpawnCollectible(&icicleActor->dyna.actor);
            }
        }
    });

    // Drop item for stalactites
    COND_VB_SHOULD(VB_STALACTITE_DROP_ITEM, shouldRegister, {
        BgIceTurara* icicleActor = va_arg(args, BgIceTurara*);

        if (BgIceTurara_RandomizerHoldsItem(&icicleActor->dyna.actor)) {
            // Set and check if regrowing stalactite has already dropped
            if (*should) {
                auto& ext = ObjectExtension::GetInstance();
                if (!ext.Has<StalactiteDropped>(&icicleActor->dyna.actor)) {
                    ext.Set(&icicleActor->dyna.actor, StalactiteDropped{});
                    BgIceTurara_RandomizerSpawnCollectible(&icicleActor->dyna.actor);
                }
            } else {
                BgIceTurara_RandomizerSpawnCollectible(&icicleActor->dyna.actor);
            }
        }
    });

    // Remove the drop indicator when the actor is destroyed
    COND_ID_HOOK(OnActorDestroy, ACTOR_BG_ICE_TURARA, shouldRegister,
                 [](void* actor) { ObjectExtension::GetInstance().Remove<StalactiteDropped>(actor); });
}

void Rando::StaticData::RegisterIcicleLocations() {
    static bool registered = false;
    if (registered)
        return;
    registered = true;
    // clang-format off
    //            Randomizer Check                                                      Randomizer Check                                                                         Quest                Area                               Scene ID                          Params                              Short Name                                     Hint Text Key                          Spoiler Collection Check
    locationTable[RC_ICE_CAVERN_ENTRANCE_LEFT_STALAGMITE]                               = Location::Icicle(RC_ICE_CAVERN_ENTRANCE_LEFT_STALAGMITE,                               RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(295, 2386),        "Entrance Left Stalagmite",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_ENTRANCE_MIDDLE_STALAGMITE]                             = Location::Icicle(RC_ICE_CAVERN_ENTRANCE_MIDDLE_STALAGMITE,                             RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(313, 2446),        "Entrance Middle Stalagmite",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_MIDDLE_STALAGMITE));
    locationTable[RC_ICE_CAVERN_ENTRANCE_RIGHT_STALAGMITE]                              = Location::Icicle(RC_ICE_CAVERN_ENTRANCE_RIGHT_STALAGMITE,                              RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(400, 2443),        "Entrance Right Stalagmite",                   RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_ENTRANCE_STALACTITE_1]                                  = Location::Icicle(RC_ICE_CAVERN_ENTRANCE_STALACTITE_1,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(499, 2229),        "Entrance Stalactite 1",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_ENTRANCE_STALACTITE_2]                                  = Location::Icicle(RC_ICE_CAVERN_ENTRANCE_STALACTITE_2,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(536, 2071),        "Entrance Stalactite 2",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_LOBBY_STALACTITE]                                       = Location::Icicle(RC_ICE_CAVERN_LOBBY_STALACTITE,                                       RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-18, 1760),        "Lobby Stalactite",                            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_STALACTITE));
    locationTable[RC_ICE_CAVERN_LOBBY_LEFT_STALAGMITE]                                  = Location::Icicle(RC_ICE_CAVERN_LOBBY_LEFT_STALAGMITE,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-62, 1642),        "Lobby Left Stalagmite",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_LOBBY_MIDDLE_STALAGMITE]                                = Location::Icicle(RC_ICE_CAVERN_LOBBY_MIDDLE_STALAGMITE,                                RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-19, 1676),        "Lobby Middle Stalagmite",                     RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_MIDDLE_STALAGMITE));
    locationTable[RC_ICE_CAVERN_LOBBY_RIGHT_STALAGMITE]                                 = Location::Icicle(RC_ICE_CAVERN_LOBBY_RIGHT_STALAGMITE,                                 RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(36, 1643),         "Lobby Right Stalagmite",                      RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_AFTER_LOBBY_STALACTITE]                                 = Location::Icicle(RC_ICE_CAVERN_AFTER_LOBBY_STALACTITE,                                 RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-237, 472),        "After Lobby Stalactite",                      RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_AFTER_LOBBY_STALACTITE));
    locationTable[RC_ICE_CAVERN_AFTER_LOBBY_LEFT_STALAGMITE]                            = Location::Icicle(RC_ICE_CAVERN_AFTER_LOBBY_LEFT_STALAGMITE,                            RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-308, 322),        "After Lobby Left Stalagmite",                 RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_AFTER_LOBBY_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_AFTER_LOBBY_CENTER_LEFT_STALAGMITE]                     = Location::Icicle(RC_ICE_CAVERN_AFTER_LOBBY_CENTER_LEFT_STALAGMITE,                     RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-272, 348),        "After Lobby Center Left Stalagmite",          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_AFTER_LOBBY_CENTER_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_AFTER_LOBBY_CENTER_RIGHT_STALAGMITE]                    = Location::Icicle(RC_ICE_CAVERN_AFTER_LOBBY_CENTER_RIGHT_STALAGMITE,                    RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-226, 371),        "After Lobby Center Right Stalagmite",         RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_AFTER_LOBBY_CENTER_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_AFTER_LOBBY_RIGHT_STALAGMITE]                           = Location::Icicle(RC_ICE_CAVERN_AFTER_LOBBY_RIGHT_STALAGMITE,                           RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-187, 395),        "After Lobby Right Stalagmite",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_AFTER_LOBBY_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_SPINNING_BLADE_LEFT_STALAGMITE]                         = Location::Icicle(RC_ICE_CAVERN_SPINNING_BLADE_LEFT_STALAGMITE,                         RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(44, -139),         "Spinning Blade Left Stalagmite",              RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_SPINNING_BLADE_MIDDLE_STALAGMITE]                       = Location::Icicle(RC_ICE_CAVERN_SPINNING_BLADE_MIDDLE_STALAGMITE,                       RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(22, -170),         "Spinning Blade Middle Stalagmite",            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_MIDDLE_STALAGMITE));
    locationTable[RC_ICE_CAVERN_SPINNING_BLADE_RIGHT_STALAGMITE]                        = Location::Icicle(RC_ICE_CAVERN_SPINNING_BLADE_RIGHT_STALAGMITE,                        RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-9, -175),         "Spinning Blade Right Stalagmite",             RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_1]                               = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_1,                               RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1264, -890),       "Map Hallway Stalactite 1",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_2]                               = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_2,                               RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1141, -946),       "Map Hallway Stalactite 2",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_3]                               = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_3,                               RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1229, -1134),      "Map Hallway Stalactite 3",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_STALACTITE_3));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_4]                               = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_4,                               RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1063, -1300),      "Map Hallway Stalactite 4",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_STALACTITE_4));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_5]                               = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_STALACTITE_5,                               RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1088, -1505),      "Map Hallway Stalactite 5",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_STALACTITE_5));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_LEFT_STALAGMITE]                            = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_LEFT_STALAGMITE,                            RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(951, -1217),       "Map Hallway Left Stalagmite",                 RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_MIDDLE_STALAGMITE]                          = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_MIDDLE_STALAGMITE,                          RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1029, -1217),      "Map Hallway Middle Stalagmite",               RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_MIDDLE_STALAGMITE));
    locationTable[RC_ICE_CAVERN_MAP_HALLWAY_RIGHT_STALAGMITE]                           = Location::Icicle(RC_ICE_CAVERN_MAP_HALLWAY_RIGHT_STALAGMITE,                           RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1187, -1217),      "Map Hallway Right Stalagmite",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_HALLWAY_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_1]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_1,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1026, 296),        "Heart Piece Room Center Stalactite 1",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_2]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_2,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1092, 274),        "Heart Piece Room Center Stalactite 2",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_3]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_3,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1058, 369),        "Heart Piece Room Center Stalactite 3",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_3));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_4]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_4,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1148, 347),        "Heart Piece Room Center Stalactite 4",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_4));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_5]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_5,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1252, 356),        "Heart Piece Room Center Stalactite 5",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALACTITE_5));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALACTITE_1]                     = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALACTITE_1,                     RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1187, 66),         "Heart Piece Room Left Stalactite 1",          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALACTITE_2]                     = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALACTITE_2,                     RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1347, 110),        "Heart Piece Room Left Stalactite 2",          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_1]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_1,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1361, 312),        "Heart Piece Room Center Stalagmite 1",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_2]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_2,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1336, 343),        "Heart Piece Room Center Stalagmite 2",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_3]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_3,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1348, 382),        "Heart Piece Room Center Stalagmite 3",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_4]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_4,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1321, 404),        "Heart Piece Room Center Stalagmite 4",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_4));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_5]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_5,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1341, 438),        "Heart Piece Room Center Stalagmite 5",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_5));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_6]                   = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_6,                   RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1317, 470),        "Heart Piece Room Center Stalagmite 6",        RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_CENTER_STALAGMITE_6));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_1]                     = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_1,                     RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1223, 195),        "Heart Piece Room Left Stalagmite 1",          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_2]                     = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_2,                     RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1257, 202),        "Heart Piece Room Left Stalagmite 2",          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_3]                     = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_3,                     RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1297, 200),        "Heart Piece Room Left Stalagmite 3",          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_LEFT_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_1]                    = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_1,                    RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1159, 552),        "Heart Piece Room Right Stalagmite 1",         RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_2]                    = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_2,                    RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1191, 565),        "Heart Piece Room Right Stalagmite 2",         RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_3]                    = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_3,                    RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1227, 549),        "Heart Piece Room Right Stalagmite 3",         RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_4]                    = Location::Icicle(RC_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_4,                    RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1267, 559),        "Heart Piece Room Right Stalagmite 4",         RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HEART_PIECE_ROOM_RIGHT_STALAGMITE_4));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_LEFT_STALAGMITE]                        = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_LEFT_STALAGMITE,                        RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-518, -601),       "Push Block Hall Left Stalagmite",             RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_LEFT_STALAGMITE]                 = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_LEFT_STALAGMITE,                 RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-487, -600),       "Push Block Hall Center Left Stalagmite",      RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_LEFT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_STALAGMITE]                      = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_STALAGMITE,                      RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-451, -604),       "Push Block Hall Center Stalagmite",           RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_STALAGMITE));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_RIGHT_STALAGMITE]                = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_RIGHT_STALAGMITE,                RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-414, -610),       "Push Block Hall Center Right Stalagmite",     RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_CENTER_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_RIGHT_STALAGMITE]                       = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_RIGHT_STALAGMITE,                       RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-373, -605),       "Push Block Hall Right Stalagmite",            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_RIGHT_STALAGMITE));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_1]                           = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_1,                           RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-385, -686),       "Push Block Hall Stalactite 1",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_2]                           = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_2,                           RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-314, -768),       "Push Block Hall Stalactite 2",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_3]                           = Location::Icicle(RC_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_3,                           RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-359, -862),       "Push Block Hall Stalactite 3",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_PUSH_BLOCK_HALL_STALACTITE_3));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALACTITE_1]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALACTITE_1,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1231, 170),       "Near End Stalactite 1",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALACTITE_2]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALACTITE_2,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1328, 215),       "Near End Stalactite 2",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALACTITE_3]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALACTITE_3,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1412, 246),       "Near End Stalactite 3",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALACTITE_3));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALACTITE_4]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALACTITE_4,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1571, 422),       "Near End Stalactite 4",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALACTITE_4));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_1]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_1,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1288, 184),       "Near End Stalagmite 1",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_2]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_2,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1367, 206),       "Near End Stalagmite 2",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_3]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_3,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1349, 270),       "Near End Stalagmite 3",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_4]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_4,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1514, 307),       "Near End Stalagmite 4",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_4));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_5]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_5,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1507, 443),       "Near End Stalagmite 5",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_5));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_6]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_6,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1624, 431),       "Near End Stalagmite 6",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_6));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_7]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_7,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1587, 497),       "Near End Stalagmite 7",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_7));
    locationTable[RC_ICE_CAVERN_NEAR_END_STALAGMITE_8]                                  = Location::Icicle(RC_ICE_CAVERN_NEAR_END_STALAGMITE_8,                                  RCQUEST_VANILLA,     RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1595, 600),       "Near End Stalagmite 8",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_STALAGMITE_8));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_1]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_1,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1687, -859),       "Water Trial Stalagmite 1",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_1));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_2]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_2,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1706, -884),       "Water Trial Stalagmite 2",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_2));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_3]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_3,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1735, -898),       "Water Trial Stalagmite 3",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_3));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_4]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_4,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1761, -887),       "Water Trial Stalagmite 4",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_4));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_5]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_5,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1787, -871),       "Water Trial Stalagmite 5",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_5));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_6]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_6,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1783, -833),       "Water Trial Stalagmite 6",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_6));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_7]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_7,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1770, -798),       "Water Trial Stalagmite 7",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_7));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_8]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_8,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1737, -787),       "Water Trial Stalagmite 8",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_8));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_9]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_9,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1698, -797),       "Water Trial Stalagmite 9",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_9));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_10]                           = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_10,                           RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1683, -828),       "Water Trial Stalagmite 10",                   RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALAGMITE_10));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_LEFT_STALAGMITE_1]                       = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_STALAGMITE_1,                       RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1966, -1089),      "Water Trial Left Stalagmite 1",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_LEFT_STALAGMITE_1));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_LEFT_STALAGMITE_2]                       = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_STALAGMITE_2,                       RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(2040, -1015),      "Water Trial Left Stalagmite 2",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_LEFT_STALAGMITE_2));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_STALAGMITE_1]                      = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_STALAGMITE_1,                      RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1980, -590),       "Water Trial Right Stalagmite 1",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_RIGHT_STALAGMITE_1));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_STALAGMITE_2]                      = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_STALAGMITE_2,                      RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(2058, -655),       "Water Trial Right Stalagmite 2",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_RIGHT_STALAGMITE_2));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_1]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_1,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1549, -836),       "Water Trial Stalactite 1",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_1));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_2]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_2,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1611, -843),       "Water Trial Stalactite 2",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_2));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_3]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_3,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1657, -882),       "Water Trial Stalactite 3",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_3));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_4]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_4,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1651, -805),       "Water Trial Stalactite 4",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_4));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_5]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_5,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1761, -949),       "Water Trial Stalactite 5",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_5));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_6]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_6,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1714, -757),       "Water Trial Stalactite 6",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_6));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_7]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_7,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1811, -905),       "Water Trial Stalactite 7",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_7));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_8]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_8,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1769, -761),       "Water Trial Stalactite 8",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_8));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_9]                            = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_9,                            RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1821, -817),       "Water Trial Stalactite 9",                    RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_9));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_10]                           = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_10,                           RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1996, -1033),      "Water Trial Stalactite 10",                   RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_10));
    locationTable[RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_11]                           = Location::Icicle(RC_GANONS_CASTLE_WATER_TRIAL_STALACTITE_11,                           RCQUEST_VANILLA,     RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1995, -648),       "Water Trial Stalactite 11",                   RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_STALACTITE_11));
    locationTable[RC_ICE_CAVERN_MQ_ENTRANCE_STALAGMITE_1]                               = Location::Icicle(RC_ICE_CAVERN_MQ_ENTRANCE_STALAGMITE_1,                               RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(287, 2346),        "Entrance Stalagmite 1",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_ENTRANCE_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_ENTRANCE_STALAGMITE_2]                               = Location::Icicle(RC_ICE_CAVERN_MQ_ENTRANCE_STALAGMITE_2,                               RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(324, 2280),        "Entrance Stalagmite 2",                       RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_ENTRANCE_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_LOBBY_STALACTITE_1]                                  = Location::Icicle(RC_ICE_CAVERN_MQ_LOBBY_STALACTITE_1,                                  RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(268, 980),         "Lobby Stalactite 1",                          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_LOBBY_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_MQ_LOBBY_STALACTITE_2]                                  = Location::Icicle(RC_ICE_CAVERN_MQ_LOBBY_STALACTITE_2,                                  RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(204, 910),         "Lobby Stalactite 2",                          RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_LOBBY_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_1]                            = Location::Icicle(RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_1,                            RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-351, 423),        "After Lobby Stalagmite 1",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_2]                            = Location::Icicle(RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_2,                            RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-288, 402),        "After Lobby Stalagmite 2",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_3]                            = Location::Icicle(RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_3,                            RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-258, 461),        "After Lobby Stalagmite 3",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_4]                            = Location::Icicle(RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_4,                            RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-212, 398),        "After Lobby Stalagmite 4",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_4));
    locationTable[RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_5]                            = Location::Icicle(RC_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_5,                            RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-19, 193),         "After Lobby Stalagmite 5",                    RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_AFTER_LOBBY_STALAGMITE_5));
    locationTable[RC_ICE_CAVERN_MQ_HUB_STALAGMITE_1]                                    = Location::Icicle(RC_ICE_CAVERN_MQ_HUB_STALAGMITE_1,                                    RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(607, -170),        "Hub Stalagmite 1",                            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_HUB_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_HUB_STALAGMITE_2]                                    = Location::Icicle(RC_ICE_CAVERN_MQ_HUB_STALAGMITE_2,                                    RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(598, -213),        "Hub Stalagmite 2",                            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_HUB_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_HUB_STALAGMITE_3]                                    = Location::Icicle(RC_ICE_CAVERN_MQ_HUB_STALAGMITE_3,                                    RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(597, -256),        "Hub Stalagmite 3",                            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_HUB_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_MQ_HUB_STALAGMITE_4]                                    = Location::Icicle(RC_ICE_CAVERN_MQ_HUB_STALAGMITE_4,                                    RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(614, -292),        "Hub Stalagmite 4",                            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_HUB_STALAGMITE_4));
    locationTable[RC_ICE_CAVERN_MQ_HUB_STALAGMITE_5]                                    = Location::Icicle(RC_ICE_CAVERN_MQ_HUB_STALAGMITE_5,                                    RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(640, -312),        "Hub Stalagmite 5",                            RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_HUB_STALAGMITE_5));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_LEFT_STALAGMITE_1]                          = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_LEFT_STALAGMITE_1,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1170, 97),         "Map Room Left Stalagmite 1",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_LEFT_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_LEFT_STALAGMITE_2]                          = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_LEFT_STALAGMITE_2,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1149, 64),         "Map Room Left Stalagmite 2",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_LEFT_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_1]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_1,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1334, 473),        "Map Room Center Stalagmite 1",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_2]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_2,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1327, 442),        "Map Room Center Stalagmite 2",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_3]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_3,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1321, 410),        "Map Room Center Stalagmite 3",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_3));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_4]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_4,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1325, 369),        "Map Room Center Stalagmite 4",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_4));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_5]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_5,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1344, 332),        "Map Room Center Stalagmite 5",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_5));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_6]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_6,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1375, 291),        "Map Room Center Stalagmite 6",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_6));
    locationTable[RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_7]                        = Location::Icicle(RC_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_7,                        RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(1345, 260),        "Map Room Center Stalagmite 7",                RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_MAP_ROOM_CENTER_STALAGMITE_7));
    locationTable[RC_ICE_CAVERN_MQ_COMPASS_LEFT_STALAGMITE_1]                           = Location::Icicle(RC_ICE_CAVERN_MQ_COMPASS_LEFT_STALAGMITE_1,                           RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(742, -2464),       "Compass Left Stalagmite 1",                   RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_LEFT_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_COMPASS_LEFT_STALAGMITE_2]                           = Location::Icicle(RC_ICE_CAVERN_MQ_COMPASS_LEFT_STALAGMITE_2,                           RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(783, -2453),       "Compass Left Stalagmite 2",                   RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_LEFT_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_COMPASS_RIGHT_STALAGMITE_1]                          = Location::Icicle(RC_ICE_CAVERN_MQ_COMPASS_RIGHT_STALAGMITE_1,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(903, -2353),       "Compass Right Stalagmite 1",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_RIGHT_STALAGMITE_1));
    locationTable[RC_ICE_CAVERN_MQ_COMPASS_RIGHT_STALAGMITE_2]                          = Location::Icicle(RC_ICE_CAVERN_MQ_COMPASS_RIGHT_STALAGMITE_2,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(929, -2303),       "Compass Right Stalagmite 2",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_RIGHT_STALAGMITE_2));
    locationTable[RC_ICE_CAVERN_MQ_BEFORE_SCARECROW_STALAGMITE]                         = Location::Icicle(RC_ICE_CAVERN_MQ_BEFORE_SCARECROW_STALAGMITE,                         RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-261, -840),       "Before Scarecrow Stalagmite",                 RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_BEFORE_SCARECROW_STALAGMITE));
    locationTable[RC_ICE_CAVERN_MQ_SCARECROW_ROOM_STALACTITE]                           = Location::Icicle(RC_ICE_CAVERN_MQ_SCARECROW_ROOM_STALACTITE,                           RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-763, -896),       "Scarecrow Room Stalactite",                   RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_SCARECROW_ROOM_STALACTITE));
    locationTable[RC_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_1]                          = Location::Icicle(RC_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_1,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1524, 326),       "West Corridor Stalactite 1",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_1));
    locationTable[RC_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_2]                          = Location::Icicle(RC_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_2,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1583, 609),       "West Corridor Stalactite 2",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_2));
    locationTable[RC_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_3]                          = Location::Icicle(RC_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_3,                          RCQUEST_MQ,          RCAREA_ICE_CAVERN,                 SCENE_ICE_CAVERN,                 TWO_ACTOR_PARAMS(-1487, 569),       "West Corridor Stalactite 3",                  RHT_ICE_CAVERN_ICICLE,                 SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_WEST_CORRIDOR_STALACTITE_3));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_1]               = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_1,               RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1265, -2067),     "Boulder Room Stalagmite 1",                   RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_1));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_2]               = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_2,               RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1235, -2054),     "Boulder Room Stalagmite 2",                   RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_2));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_3]               = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_3,               RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1205, -2080),     "Boulder Room Stalagmite 3",                   RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_3));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_4]               = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_4,               RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1170, -2080),     "Boulder Room Stalagmite 4",                   RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_4));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_5]               = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_5,               RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1183, -2132),     "Boulder Room Stalagmite 5",                   RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_STALAGMITE_5));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_1]         = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_1,         RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1261, -1001),     "Boulder Room Right Stalactite 1",             RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_1));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_2]         = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_2,         RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1247, -1096),     "Boulder Room Right Stalactite 2",             RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_2));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_3]         = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_3,         RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1182, -1181),     "Boulder Room Right Stalactite 3",             RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_3));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_4]         = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_4,         RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1255, -1273),     "Boulder Room Right Stalactite 4",             RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_RIGHT_STALACTITE_4));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_LEFT_STALACTITE]            = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_LEFT_STALACTITE,            RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1884, -1024),     "Boulder Room Left Stalactite",                RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_LEFT_STALACTITE));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_1]     = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_1,     RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1263, -2028),     "Boulder Room Top Right Stalactite 1",         RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_1));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_2]     = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_2,     RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1216, -2029),     "Boulder Room Top Right Stalactite 2",         RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_2));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_3]     = Location::Icicle(RC_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_3,     RCQUEST_MQ,          RCAREA_GERUDO_TRAINING_GROUND,     SCENE_GERUDO_TRAINING_GROUND,     TWO_ACTOR_PARAMS(-1168, -2028),     "Boulder Room Top Right Stalactite 3",         RHT_GERUDO_TRAINING_GROUND_ICICLE,     SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM_TOP_RIGHT_STALACTITE_3));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_1]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_1,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1791, -1141),      "Water Trial Left Stalactite 1",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_1));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_2]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_2,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1890, -1068),      "Water Trial Left Stalactite 2",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_2));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_3]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_3,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(2002, -1068),      "Water Trial Left Stalactite 3",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALACTITE_3));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_1]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_1,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1864, -568),       "Water Trial Right Stalactite 1",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_1));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_2]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_2,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1937, -658),       "Water Trial Right Stalactite 2",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_2));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_3]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_3,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(2054, -667),       "Water Trial Right Stalactite 3",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALACTITE_3));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_1]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_1,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1868, -1175),      "Water Trial Left Stalagmite 1",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_1));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_2]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_2,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1908, -1151),      "Water Trial Left Stalagmite 2",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_2));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_3]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_3,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1960, -1123),      "Water Trial Left Stalagmite 3",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_3));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_4]                    = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_4,                    RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(2008, -1115),      "Water Trial Left Stalagmite 4",               RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_LEFT_STALAGMITE_4));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_1]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_1,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1916, -511),       "Water Trial Right Stalagmite 1",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_1));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_2]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_2,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1936, -551),       "Water Trial Right Stalagmite 2",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_2));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_3]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_3,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(1984, -567),       "Water Trial Right Stalagmite 3",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_3));
    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_4]                   = Location::Icicle(RC_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_4,                   RCQUEST_MQ,          RCAREA_GANONS_CASTLE,              SCENE_INSIDE_GANONS_CASTLE,       TWO_ACTOR_PARAMS(2044, -591),       "Water Trial Right Stalagmite 4",              RHT_GANONS_CASTLE_ICICLE,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_RIGHT_STALAGMITE_4));
    // clang-format on
}

static RegisterShipInitFunc initFunc_ShuffleIcicles(RegisterShuffleIcicles, { "IS_RANDO" });
static RegisterShipInitFunc registerIcicleLocations(Rando::StaticData::RegisterIcicleLocations);