#include "ShuffleCrates.h"
#include "soh_assets.h"
#include "static_data.h"
#include <libultraship/libultra.h>
#include "global.h"

extern "C" {
#include "variables.h"
#include "overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h"
#include "objects/object_kibako2/object_kibako2.h"
#include "overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h"
#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "soh/Enhancements/enhancementTypes.h"
#include "soh/ResourceManagerHelpers.h"
extern PlayState* gPlayState;
}

#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get()

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

extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) {
    GetItemCategory getItemCategory;
    auto crateActor = ((ObjKibako2*)thisx);
    int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED);
    int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0);

    int isVanilla =
        csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY));

    if (isVanilla) {
        Gfx_DrawDListOpa(play, (Gfx*)gLargeRandoCrateDL);
        return;
    }

    GetItemEntry crateItem =
        Rando::Context::GetInstance()->GetFinalGIEntry(crateActor->crateIdentity.randomizerCheck, true, GI_NONE);
    getItemCategory = crateItem.getItemCategory;

    // If they have bombchus, don't consider the bombchu item major
    if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU &&
        ((crateItem.modIndex == MOD_RANDOMIZER && crateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) ||
         (crateItem.modIndex == MOD_NONE &&
          (crateItem.getItemId == GI_BOMBCHUS_5 || crateItem.getItemId == GI_BOMBCHUS_10 ||
           crateItem.getItemId == GI_BOMBCHUS_20)))) {
        getItemCategory = ITEM_CATEGORY_JUNK;
        // If it's a bottle and they already have one, consider the item lesser
    } else if ((crateItem.modIndex == MOD_RANDOMIZER && crateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION &&
                crateItem.getItemId <= RG_BOTTLE_WITH_POE) ||
               (crateItem.modIndex == MOD_NONE &&
                (crateItem.getItemId == GI_BOTTLE || crateItem.getItemId == GI_MILK_BOTTLE))) {
        if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) {
            getItemCategory = ITEM_CATEGORY_LESSER;
        }
    }

    // Change texture
    switch (getItemCategory) {
        case ITEM_CATEGORY_MAJOR:
            Gfx_DrawDListOpa(play, (Gfx*)gLargeMajorCrateDL);
            break;
        case ITEM_CATEGORY_SKULLTULA_TOKEN:
            Gfx_DrawDListOpa(play, (Gfx*)gLargeTokenCrateDL);
            break;
        case ITEM_CATEGORY_SMALL_KEY:
            Gfx_DrawDListOpa(play, (Gfx*)gLargeSmallKeyCrateDL);
            break;
        case ITEM_CATEGORY_BOSS_KEY:
            Gfx_DrawDListOpa(play, (Gfx*)gLargeBossKeyCrateDL);
            break;
        case ITEM_CATEGORY_LESSER:
            switch (crateItem.itemId) {
                case ITEM_HEART_PIECE:
                case ITEM_HEART_PIECE_2:
                case ITEM_HEART_CONTAINER:
                    Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL);
                    break;
                default:
                    Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL);
                    break;
            }
            break;
        case ITEM_CATEGORY_JUNK:
        default:
            Gfx_DrawDListOpa(play, (Gfx*)gLargeJunkCrateDL);
            break;
    }
}

extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) {
    GetItemCategory getItemCategory;
    auto smallCrateActor = ((ObjKibako*)thisx);
    int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED);
    int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0);

    int isVanilla =
        csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY));

    if (isVanilla) {
        Gfx_DrawDListOpa(play, (Gfx*)gSmallRandoCrateDL);
        return;
    }

    GetItemEntry smallCrateItem = Rando::Context::GetInstance()->GetFinalGIEntry(
        smallCrateActor->smallCrateIdentity.randomizerCheck, true, GI_NONE);
    getItemCategory = smallCrateItem.getItemCategory;

    // If they have bombchus, don't consider the bombchu item major
    if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU &&
        ((smallCrateItem.modIndex == MOD_RANDOMIZER && smallCrateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) ||
         (smallCrateItem.modIndex == MOD_NONE &&
          (smallCrateItem.getItemId == GI_BOMBCHUS_5 || smallCrateItem.getItemId == GI_BOMBCHUS_10 ||
           smallCrateItem.getItemId == GI_BOMBCHUS_20)))) {
        getItemCategory = ITEM_CATEGORY_JUNK;
        // If it's a bottle and they already have one, consider the item lesser
    } else if ((smallCrateItem.modIndex == MOD_RANDOMIZER && smallCrateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION &&
                smallCrateItem.getItemId <= RG_BOTTLE_WITH_POE) ||
               (smallCrateItem.modIndex == MOD_NONE &&
                (smallCrateItem.getItemId == GI_BOTTLE || smallCrateItem.getItemId == GI_MILK_BOTTLE))) {
        if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) {
            getItemCategory = ITEM_CATEGORY_LESSER;
        }
    }

    // Change texture
    switch (getItemCategory) {
        case ITEM_CATEGORY_MAJOR:
            Gfx_DrawDListOpa(play, (Gfx*)gSmallMajorCrateDL);
            break;
        case ITEM_CATEGORY_SKULLTULA_TOKEN:
            Gfx_DrawDListOpa(play, (Gfx*)gSmallTokenCrateDL);
            break;
        case ITEM_CATEGORY_SMALL_KEY:
            Gfx_DrawDListOpa(play, (Gfx*)gSmallSmallKeyCrateDL);
            break;
        case ITEM_CATEGORY_BOSS_KEY:
            Gfx_DrawDListOpa(play, (Gfx*)gSmallBossKeyCrateDL);
            break;
        case ITEM_CATEGORY_LESSER:
            switch (smallCrateItem.itemId) {
                case ITEM_HEART_PIECE:
                case ITEM_HEART_PIECE_2:
                case ITEM_HEART_CONTAINER:
                    Gfx_DrawDListOpa(play, (Gfx*)gSmallHeartCrateDL);
                    break;
                default:
                    Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL);
                    break;
            }
            break;
        case ITEM_CATEGORY_JUNK:
        default:
            Gfx_DrawDListOpa(play, (Gfx*)gSmallJunkCrateDL);
            break;
    }
}

uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) {
    RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck;
    uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon();
    uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get();

    // Don't pull randomized item if crate isn't randomized or is already checked
    if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) ||
        (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) ||
        Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) ||
        crateActor->crateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) {
        return false;
    } else {
        return true;
    }
}

uint8_t ObjKibako_RandomizerHoldsItem(ObjKibako* smallCrateActor, PlayState* play) {
    RandomizerCheck rc = smallCrateActor->smallCrateIdentity.randomizerCheck;
    uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon();
    uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get();

    // Don't pull randomized item if crate isn't randomized or is already checked
    if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) ||
        (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) ||
        Flags_GetRandomizerInf(smallCrateActor->smallCrateIdentity.randomizerInf) ||
        smallCrateActor->smallCrateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) {
        return false;
    } else {
        return true;
    }
}

void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* play) {
    EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &crateActor->dyna.actor.world.pos, ITEM00_SOH_DUMMY);
    item00->randoInf = crateActor->crateIdentity.randomizerInf;
    item00->itemEntry =
        Rando::Context::GetInstance()->GetFinalGIEntry(crateActor->crateIdentity.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 = Rand_CenteredFloat(65536.0f);
}

void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallCrateActor, PlayState* play) {
    EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &smallCrateActor->actor.world.pos, ITEM00_SOH_DUMMY);
    item00->randoInf = smallCrateActor->smallCrateIdentity.randomizerInf;
    item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(
        smallCrateActor->smallCrateIdentity.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 = Rand_CenteredFloat(65536.0f);
}

void ObjKibako2_RandomizerInit(void* actorRef) {
    Actor* actor = static_cast<Actor*>(actorRef);
    uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).Get();

    // don't shuffle two OOB crates in GF and don't shuffle child GV/GF crates when not in no logic
    if (actor->id != ACTOR_OBJ_KIBAKO2 ||
        (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 &&
         (s16)actor->world.pos.z == -3429) ||
        (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 &&
         (s16)actor->world.pos.z == -3429) ||
        (logicSetting != RO_LOGIC_NO_LOGIC && ((gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS &&
                                                (s16)actor->world.pos.x == 3443 && (s16)actor->world.pos.z == -4876) ||
                                               (gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
                                                (s16)actor->world.pos.x == -764 && (s16)actor->world.pos.z == 148) ||
                                               (gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
                                                (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -125) ||
                                               (gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
                                                (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -150) ||
                                               (gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
                                                (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -90))))
        return;

    ObjKibako2* crateActor = static_cast<ObjKibako2*>(actorRef);

    crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate(
        gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z);
}

void ObjKibako_RandomizerInit(void* actorRef) {
    Actor* actor = static_cast<Actor*>(actorRef);

    if (actor->id != ACTOR_OBJ_KIBAKO)
        return;

    ObjKibako* smallCrateActor = static_cast<ObjKibako*>(actorRef);

    smallCrateActor->smallCrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(
        gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z);
}

void RegisterShuffleCrates() {
    bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_CRATES);

    COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO2, shouldRegister, ObjKibako2_RandomizerInit);

    COND_VB_SHOULD(VB_CRATE_SETUP_DRAW, shouldRegister, {
        ObjKibako2* crateActor = va_arg(args, ObjKibako2*);
        if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) {
            crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw;
            *should = false;
        }
    });

    COND_VB_SHOULD(VB_CRATE_DROP_ITEM, shouldRegister, {
        ObjKibako2* crateActor = va_arg(args, ObjKibako2*);
        if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) {
            ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState);
            *should = false;
        } else {
            *should = true;
        }
    });

    COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, shouldRegister, ObjKibako_RandomizerInit);

    COND_VB_SHOULD(VB_SMALL_CRATE_SETUP_DRAW, shouldRegister, {
        ObjKibako* smallCrateActor = va_arg(args, ObjKibako*);
        if (ObjKibako_RandomizerHoldsItem(smallCrateActor, gPlayState)) {
            smallCrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw;
            *should = false;
        }
    });

    COND_VB_SHOULD(VB_SMALL_CRATE_DROP_ITEM, shouldRegister, {
        ObjKibako* smallCrateActor = va_arg(args, ObjKibako*);
        if (ObjKibako_RandomizerHoldsItem(smallCrateActor, gPlayState)) {
            ObjKibako_RandomizerSpawnCollectible(smallCrateActor, gPlayState);
            *should = false;
        } else {
            *should = true;
        }
    });
}

void Rando::StaticData::RegisterCrateLocations() {
    static bool registered = false;
    if (registered)
        return;
    registered = true;
    // clang-format off
    // Overworld Crates
    //            Randomizer Check                                 	            Randomizer Check                                                                Quest            Area                           Scene ID                        Params                              Short Name                    	                Hint Text Key                       Vanilla                 Spoiler Collection Check
    locationTable[RC_GV_FREESTANDING_POH_CRATE]                                 = Location::Crate(RC_GV_FREESTANDING_POH_CRATE,                                 RCQUEST_BOTH,    RCAREA_GERUDO_VALLEY,          SCENE_GERUDO_VALLEY,            TWO_ACTOR_PARAMS(-350, 1480),       "Freestanding PoH Crate",                       RHT_CRATE_GERUDO_VALLEY,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_CRATE));
    locationTable[RC_GV_NEAR_COW_CRATE]                                         = Location::Crate(RC_GV_NEAR_COW_CRATE,                                         RCQUEST_BOTH,    RCAREA_GERUDO_VALLEY,          SCENE_GERUDO_VALLEY,            TWO_ACTOR_PARAMS(-449, 123),        "Near Cow Crate",                               RHT_CRATE_GERUDO_VALLEY,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE));
    locationTable[RC_GF_ABOVE_JAIL_CRATE]                                       = Location::Crate(RC_GF_ABOVE_JAIL_CRATE,                                       RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(51, -2997),        "Above Jail Crate",                             RHT_CRATE_GERUDOS_FORTRESS,         RG_PURPLE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE));
    locationTable[RC_GF_OUTSIDE_CENTER_CRATE_1]                                 = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_1,                                 RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(315, -1534),       "Outside Center Crate 1",                       RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_1));
    locationTable[RC_GF_OUTSIDE_CENTER_CRATE_2]                                 = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_2,                                 RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(315, -1594),       "Outside Center Crate 2",                       RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_2));
    locationTable[RC_GF_OUTSIDE_CENTER_CRATE_3]                                 = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_3,                                 RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(310, -1782),       "Outside Center Crate 3",                       RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_3));
    locationTable[RC_GF_OUTSIDE_CENTER_CRATE_4]                                 = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_4,                                 RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(310, -1842),       "Outside Center Crate 4",                       RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_4));
    locationTable[RC_GF_OUTSIDE_LEFT_CRATE_1]                                   = Location::Crate(RC_GF_OUTSIDE_LEFT_CRATE_1,                                   RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(-60, -2210),       "Outside Left Crate 1",                         RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_1));
    locationTable[RC_GF_OUTSIDE_LEFT_CRATE_2]                                   = Location::Crate(RC_GF_OUTSIDE_LEFT_CRATE_2,                                   RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(-120, -2210),      "Outside Left Crate 2",                         RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_2));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_2]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_2,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -1780),      "Archery Range Crate 2",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_2));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_3]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_3,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -2020),      "Archery Range Crate 3",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_3));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_4]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_4,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -2260),      "Archery Range Crate 4",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_4));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_1]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_1,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -1540),      "Archery Range Crate 1",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_1));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_5]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_5,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -2500),      "Archery Range Crate 5",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_5));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_6]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_6,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -2740),      "Archery Range Crate 6",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_6));
    locationTable[RC_GF_ARCHERY_RANGE_CRATE_7]                                  = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_7,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(4090, -2980),      "Archery Range Crate 7",                        RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_7));
    locationTable[RC_GF_ARCHERY_START_CRATE_1]                                  = Location::Crate(RC_GF_ARCHERY_START_CRATE_1,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3727, -243),       "Near Archery Start Crate 1",                   RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_START_CRATE_1));
    locationTable[RC_GF_ARCHERY_START_CRATE_2]                                  = Location::Crate(RC_GF_ARCHERY_START_CRATE_2,                                  RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3667, -243),       "Near Archery Start Crate 2",                   RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_START_CRATE_2));
    locationTable[RC_GF_ARCHERY_LEFT_END_CRATE_1]                               = Location::Crate(RC_GF_ARCHERY_LEFT_END_CRATE_1,                               RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3446, -4875),      "Archery Left End Crate 1",                     RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1));
    locationTable[RC_GF_ARCHERY_LEFT_END_CRATE_2]                               = Location::Crate(RC_GF_ARCHERY_LEFT_END_CRATE_2,                               RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3303, -5018),      "Archery Left End Crate 2",                     RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2));
    locationTable[RC_GF_ARCHERY_RIGHT_END_CRATE_1]                              = Location::Crate(RC_GF_ARCHERY_RIGHT_END_CRATE_1,                              RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3406, 414),        "Archery Right End Crate 1",                    RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1));
    locationTable[RC_GF_ARCHERY_RIGHT_END_CRATE_2]                              = Location::Crate(RC_GF_ARCHERY_RIGHT_END_CRATE_2,                              RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3330, 406),        "Archery Right End Crate 2",                    RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2));
    locationTable[RC_GF_KITCHEN_CRATE_1]                                        = Location::Crate(RC_GF_KITCHEN_CRATE_1,                                        RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1144, -1251),      "Kitchen Crate 1",                              RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_1));
    locationTable[RC_GF_KITCHEN_CRATE_2]                                        = Location::Crate(RC_GF_KITCHEN_CRATE_2,                                        RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1144, -1191),      "Kitchen Crate 2",                              RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_2));
    locationTable[RC_GF_KITCHEN_CRATE_3]                                        = Location::Crate(RC_GF_KITCHEN_CRATE_3,                                        RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1256, -847),       "Kitchen Crate 3",                              RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_3));
    locationTable[RC_GF_KITCHEN_CRATE_4]                                        = Location::Crate(RC_GF_KITCHEN_CRATE_4,                                        RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1256, -787),       "Kitchen Crate 4",                              RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_4));
    locationTable[RC_GF_KITCHEN_CRATE_5]                                        = Location::Crate(RC_GF_KITCHEN_CRATE_5,                                        RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1610, -624),       "Kitchen Crate 5",                              RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_5));
    locationTable[RC_GF_BREAK_ROOM_CRATE_1]                                     = Location::Crate(RC_GF_BREAK_ROOM_CRATE_1,                                     RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1260, -3155),      "Break Room Crate 1",                           RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_1));
    locationTable[RC_GF_BREAK_ROOM_CRATE_4]                                     = Location::Crate(RC_GF_BREAK_ROOM_CRATE_4,                                     RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1600, -3550),      "Break Room Crate 4",                           RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_4));
    locationTable[RC_GF_BREAK_ROOM_CRATE_2]                                     = Location::Crate(RC_GF_BREAK_ROOM_CRATE_2,                                     RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1360, -3325),      "Break Room Crate 2",                           RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_2));
    locationTable[RC_GF_BREAK_ROOM_CRATE_3]                                     = Location::Crate(RC_GF_BREAK_ROOM_CRATE_3,                                     RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1600, -3502),      "Break Room Crate 3",                           RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_3));
    locationTable[RC_GF_NORTH_F1_CARPENTER_CRATE]                               = Location::Crate(RC_GF_NORTH_F1_CARPENTER_CRATE,                               RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(-510, -2213),      "North F1 Carpenter Crate",                     RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_CRATE));
    locationTable[RC_GF_NORTH_F3_CARPENTER_CRATE]                               = Location::Crate(RC_GF_NORTH_F3_CARPENTER_CRATE,                               RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(1090, -2210),      "North F3 Carpenter Crate",                     RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F3_CARPENTER_CRATE));
    locationTable[RC_GF_SOUTH_F2_CARPENTER_CRATE_1]                             = Location::Crate(RC_GF_SOUTH_F2_CARPENTER_CRATE_1,                             RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(-49, 11),          "South F2 Carpenter Crate 1",                   RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1));
    locationTable[RC_GF_SOUTH_F2_CARPENTER_CRATE_2]                             = Location::Crate(RC_GF_SOUTH_F2_CARPENTER_CRATE_2,                             RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_THIEVES_HIDEOUT,          TWO_ACTOR_PARAMS(11, 11),           "South F2 Carpenter Crate 2",                   RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2));
    locationTable[RC_HW_BEFORE_QUICKSAND_CRATE]                                 = Location::Crate(RC_HW_BEFORE_QUICKSAND_CRATE,                                 RCQUEST_BOTH,    RCAREA_WASTELAND,              SCENE_HAUNTED_WASTELAND,        TWO_ACTOR_PARAMS(3832, 2840),       "Before Quicksand Crate",                       RHT_CRATE_WASTELAND,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_BEFORE_QUICKSAND_CRATE));
    locationTable[RC_HW_AFTER_QUICKSAND_CRATE_1]                                = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_1,                                RCQUEST_BOTH,    RCAREA_WASTELAND,              SCENE_HAUNTED_WASTELAND,        TWO_ACTOR_PARAMS(3235, 2313),       "After Quicksand Crate 1",                      RHT_CRATE_WASTELAND,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_1));
    locationTable[RC_HW_AFTER_QUICKSAND_CRATE_2]                                = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_2,                                RCQUEST_BOTH,    RCAREA_WASTELAND,              SCENE_HAUNTED_WASTELAND,        TWO_ACTOR_PARAMS(3125, 2459),       "After Quicksand Crate 2",                      RHT_CRATE_WASTELAND,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2));
    locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3]                                = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3,                                RCQUEST_BOTH,    RCAREA_WASTELAND,              SCENE_HAUNTED_WASTELAND,        TWO_ACTOR_PARAMS(3026, 2631),       "After Quicksand Crate 3",                      RHT_CRATE_WASTELAND,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3));
    locationTable[RC_HW_NEAR_COLOSSUS_CRATE]                                    = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE,                                    RCQUEST_BOTH,    RCAREA_WASTELAND,              SCENE_HAUNTED_WASTELAND,        TWO_ACTOR_PARAMS(-1531, -976),      "Near Colossus Crate",                          RHT_CRATE_WASTELAND,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_CRATE));
    locationTable[RC_MK_NEAR_BAZAAR_CRATE_1]                                    = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_1,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_DAY,               TWO_ACTOR_PARAMS(490, 338),         "Near Bazaar Crate 1",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_1));
    locationTable[RC_MK_NEAR_BAZAAR_CRATE_2]                                    = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_2,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_DAY,               TWO_ACTOR_PARAMS(490, 132),         "Near Bazaar Crate 2",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_2));
    locationTable[RC_MK_SHOOTING_GALLERY_CRATE_1]                               = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_1,                               RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_DAY,               TWO_ACTOR_PARAMS(-150, -576),       "Shooting Gallery Crate 1",                     RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_1));
    locationTable[RC_MK_SHOOTING_GALLERY_CRATE_2]                               = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_2,                               RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_DAY,               TWO_ACTOR_PARAMS(-90, -576),        "Shooting Gallery Crate 2",                     RHT_CRATE_MARKET,                   RG_RED_RUPEE,           SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_2));
    locationTable[RC_MK_LOST_DOG_HOUSE_CRATE]                                   = Location::Crate(RC_MK_LOST_DOG_HOUSE_CRATE,                                   RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_DOG_LADY_HOUSE,           TWO_ACTOR_PARAMS(176, 170),         "Lost Dog House Crate",                         RHT_CRATE_MARKET,                   RG_BLUE_RUPEE,          SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_LOST_DOG_HOUSE_CRATE));
    locationTable[RC_MK_GUARD_HOUSE_CRATE_1]                                    = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_1,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_GUARD_HOUSE,       TWO_ACTOR_PARAMS(76, -210),         "Guard House Crate 1",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_1));
    locationTable[RC_MK_GUARD_HOUSE_CRATE_2]                                    = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_2,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_GUARD_HOUSE,       TWO_ACTOR_PARAMS(28, -210),         "Guard House Crate 2",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_2));
    locationTable[RC_MK_GUARD_HOUSE_CRATE_3]                                    = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_3,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_GUARD_HOUSE,       TWO_ACTOR_PARAMS(-90, 120),         "Guard House Crate 3",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_3));
    locationTable[RC_MK_GUARD_HOUSE_CRATE_4]                                    = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_4,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_GUARD_HOUSE,       TWO_ACTOR_PARAMS(-90, 168),         "Guard House Crate 4",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_4));
    locationTable[RC_MK_GUARD_HOUSE_CRATE_5]                                    = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_5,                                    RCQUEST_BOTH,    RCAREA_MARKET,                 SCENE_MARKET_GUARD_HOUSE,       TWO_ACTOR_PARAMS(-90, 216),         "Guard House Crate 5",                          RHT_CRATE_MARKET,                   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_5));
    locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1]                        = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1,                        RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(1039, 10),         "Near Open Grotto Adult Crate 1",               RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1));
    locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2]                        = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2,                        RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(1099, 10),         "Near Open Grotto Adult Crate 2",               RHT_CRATE_KAKARIKO_VILLAGE,         RG_RED_RUPEE,           SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2));
    locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3]                        = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3,                        RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(506, -358),        "Near Open Grotto Adult Crate 3",               RHT_CRATE_KAKARIKO_VILLAGE,         RG_RED_RUPEE,           SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3));
    locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4]                        = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4,                        RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(483, -302),        "Near Open Grotto Adult Crate 4",               RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4));
    locationTable[RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE]                          = Location::Crate(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE,                          RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(186, -758),        "Near Potion Shop Adult Crate",                 RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE));
    locationTable[RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE]                     = Location::Crate(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE,                     RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(185, 776),         "Near Shooting Gallery Adult Crate",            RHT_CRATE_KAKARIKO_VILLAGE,         RG_ARROWS_5,            SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE));
    locationTable[RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1]                     = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1,                     RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(92, 348),          "Near Boarding House Adult Crate 1",            RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1));
    locationTable[RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2]                     = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2,                     RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(32, 348),          "Near Boarding House Adult Crate 2",            RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2));
    locationTable[RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1]                        = Location::Crate(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1,                        RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-389, 1518),       "Near Impas House Adult Crate 1",               RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1));
    locationTable[RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2]                        = Location::Crate(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2,                        RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-389, 1470),       "Near Impas House Adult Crate 2",               RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2));
    locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1]                             = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1,                             RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-433, -401),       "Near Bazaar Adult Crate 1",                    RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1));
    locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2]                             = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2,                             RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-489, -424),       "Near Bazaar Adult Crate 2",                    RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2));
    locationTable[RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE]                           = Location::Crate(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE,                           RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-724, 871),        "Behind GS House Adult Crate",                  RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE));
    locationTable[RC_KAK_NEAR_GY_CHILD_CRATE]                                   = Location::Crate(RC_KAK_NEAR_GY_CHILD_CRATE,                                   RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(1732, 1366),       "Near Graveyard Child Crate",                   RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GY_CHILD_CRATE));
    locationTable[RC_KAK_NEAR_WINDMILL_CHILD_CRATE]                             = Location::Crate(RC_KAK_NEAR_WINDMILL_CHILD_CRATE,                             RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(1170, 601),        "Near Windmill Child Crate",                    RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE));
    locationTable[RC_KAK_NEAR_FENCE_CHILD_CRATE]                                = Location::Crate(RC_KAK_NEAR_FENCE_CHILD_CRATE,                                RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(1170, 111),        "Near Fence Child Crate",                       RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE));
    locationTable[RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE]                       = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE,                       RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-60, -46),         "Near Boarding House Child Crate",              RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE));
    locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE]                               = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE,                               RCQUEST_BOTH,    RCAREA_KAKARIKO_VILLAGE,       SCENE_KAKARIKO_VILLAGE,         TWO_ACTOR_PARAMS(-636, -478),       "Near Bazaar Child Crate",                      RHT_CRATE_KAKARIKO_VILLAGE,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE));
    locationTable[RC_GRAVEYARD_CRATE]                                           = Location::Crate(RC_GRAVEYARD_CRATE,                                           RCQUEST_BOTH,    RCAREA_GRAVEYARD,              SCENE_GRAVEYARD,                TWO_ACTOR_PARAMS(-1050, -350),      "Freestanding PoH Crate",                       RHT_CRATE_GRAVEYARD,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE));
    locationTable[RC_GC_MAZE_CRATE]                                             = Location::Crate(RC_GC_MAZE_CRATE,                                             RCQUEST_BOTH,    RCAREA_GORON_CITY,             SCENE_GORON_CITY,               TWO_ACTOR_PARAMS(-1124, -1339),     "Maze Crate",                                   RHT_CRATE_GORON_CITY,               RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_CRATE));
    locationTable[RC_DMC_CRATE]                                                 = Location::Crate(RC_DMC_CRATE,                                                 RCQUEST_BOTH,    RCAREA_DEATH_MOUNTAIN_CRATER,  SCENE_DEATH_MOUNTAIN_CRATER,    TWO_ACTOR_PARAMS(-950, 1892),       "Crate",                                        RHT_CRATE_DEATH_MOUNTAIN_CRATER,    RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE));
    locationTable[RC_LLR_NEAR_TREE_CRATE]                                       = Location::Crate(RC_LLR_NEAR_TREE_CRATE,                                       RCQUEST_BOTH,    RCAREA_LON_LON_RANCH,          SCENE_LON_LON_RANCH,            TWO_ACTOR_PARAMS(1160, -2376),      "Near Tree Crate",                              RHT_CRATE_LON_LON_RANCH,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE));
    locationTable[RC_LH_LAB_CRATE]                                              = Location::Crate(RC_LH_LAB_CRATE,                                              RCQUEST_BOTH,    RCAREA_LAKE_HYLIA,             SCENE_LAKESIDE_LABORATORY,      TWO_ACTOR_PARAMS(90, -119),         "Lab Crate",                                    RHT_CRATE_LAKESIDE_LABORATORY,      RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_CRATE));

    // No Logic Crates
    locationTable[RC_GV_CRATE_BRIDGE_1]                                         = Location::NLCrate(RC_GV_CRATE_BRIDGE_1,                                       RCQUEST_BOTH,    RCAREA_GERUDO_VALLEY,          SCENE_GERUDO_VALLEY,            TWO_ACTOR_PARAMS(-764, 148),        "Near Bridge Crate 1",                          RHT_CRATE_GERUDO_VALLEY,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_1));
    locationTable[RC_GV_CRATE_BRIDGE_2]                                         = Location::NLCrate(RC_GV_CRATE_BRIDGE_2,                                       RCQUEST_BOTH,    RCAREA_GERUDO_VALLEY,          SCENE_GERUDO_VALLEY,            TWO_ACTOR_PARAMS(-860, -125),       "Near Bridge Crate 2",                          RHT_CRATE_GERUDO_VALLEY,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_2));
    locationTable[RC_GV_CRATE_BRIDGE_3]                                         = Location::NLCrate(RC_GV_CRATE_BRIDGE_3,                                       RCQUEST_BOTH,    RCAREA_GERUDO_VALLEY,          SCENE_GERUDO_VALLEY,            TWO_ACTOR_PARAMS(-860, -150),       "Near Bridge Crate 3",                          RHT_CRATE_GERUDO_VALLEY,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_3));
    locationTable[RC_GV_CRATE_BRIDGE_4]                                         = Location::NLCrate(RC_GV_CRATE_BRIDGE_4,                                       RCQUEST_BOTH,    RCAREA_GERUDO_VALLEY,          SCENE_GERUDO_VALLEY,            TWO_ACTOR_PARAMS(-860, -90),        "Near Bridge Crate 4",                          RHT_CRATE_GERUDO_VALLEY,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4));
    locationTable[RC_GF_ARCHERY_LEFT_END_CHILD_CRATE]                           = Location::NLCrate(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE,                         RCQUEST_BOTH,    RCAREA_GERUDO_FORTRESS,        SCENE_GERUDOS_FORTRESS,         TWO_ACTOR_PARAMS(3443, -4876),      "Archery Left End Child Crate",                 RHT_CRATE_GERUDOS_FORTRESS,         RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE));
    
    // MQ Crates
    //            Randomizer Check                                 	            Randomizer Check                                                                Quest            Area                           Scene ID                        Params                              Short Name                    	                Hint Text Key                       Vanilla                 Spoiler Collection Check
    locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE]                                  = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE,                                  RCQUEST_MQ,      RCAREA_DEKU_TREE,              SCENE_DEKU_TREE,                TWO_ACTOR_PARAMS(279, 333),         "MQ Lobby Crate",                               RHT_CRATE_DEKU_TREE,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE));
    locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1]                       = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1,                       RCQUEST_MQ,      RCAREA_DEKU_TREE,              SCENE_DEKU_TREE,                TWO_ACTOR_PARAMS(-805, -62),        "MQ Slingshot Room Crate 1",                    RHT_CRATE_DEKU_TREE,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1));
    locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2]                       = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2,                       RCQUEST_MQ,      RCAREA_DEKU_TREE,              SCENE_DEKU_TREE,                TWO_ACTOR_PARAMS(-805, -2),         "MQ Slingshot Room Crate 2",                    RHT_CRATE_DEKU_TREE,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1886, -744),       "MQ Poe Room Crate 1",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1826, -744),       "MQ Poe Room Crate 2",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1536, -1391),      "MQ Poe Room Crate 3",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1536, -1451),      "MQ Poe Room Crate 4",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2267, -1824),      "MQ Poe Room Crate 5",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2267, -1884),      "MQ Poe Room Crate 6",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2232, -1161),      "MQ Poe Room Crate 7",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7));
    locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8]                       = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8,                       RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2232, -1221),      "MQ Poe Room Crate 8",                          RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8));
    locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1]                = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1,                RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(-1730, -1836),     "MQ Staircase Lower Crate 1",                   RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1));
    locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2]                = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2,                RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(-2190, -1835),     "MQ Staircase Lower Crate 2",                   RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2));
    locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1]                = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1,                RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(-1510, -1837),     "MQ Staircase Upper Crate 1",                   RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1));
    locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2]                = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2,                RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(-1511, -1084),     "MQ Staircase Upper Crate 2",                   RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2));
    locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3]                = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3,                RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(-2410, -1084),     "MQ Staircase Upper Crate 3",                   RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3));
    locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4]                = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4,                RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(-2411, -1836),     "MQ Staircase Upper Crate 4",                   RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4));
    locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1]                     = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1,                     RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(3191, -897),       "MQ Two Flames Crate 1",                        RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1));
    locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2]                     = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2,                     RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2776, -810),       "MQ Two Flames Crate 2",                        RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2));
    locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1]                    = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1,                    RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2055, -1714),      "MQ Larvae Room Crate 1",                       RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1));
    locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2]                    = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2,                    RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(2055, -1774),      "MQ Larvae Room Crate 2",                       RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2));
    locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3]                    = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3,                    RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1871, -1976),      "MQ Larvae Room Crate 3",                       RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3));
    locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4]                    = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4,                    RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1811, -1976),      "MQ Larvae Room Crate 4",                       RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4));
    locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5]                    = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5,                    RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1625, -1721),      "MQ Larvae Room Crate 5",                       RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5));
    locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6]                    = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6,                    RCQUEST_MQ,      RCAREA_DODONGOS_CAVERN,        SCENE_DODONGOS_CAVERN,          TWO_ACTOR_PARAMS(1625, -1781),      "MQ Larvae Room Crate 6",                       RHT_CRATE_DODONGOS_CAVERN,          RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6));
    locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1]                       = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1,                       RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-1205, 769),       "MQ Outside Boss Crate 1",                      RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2]                       = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2,                       RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-1205, 709),       "MQ Outside Boss Crate 2",                      RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3]                       = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3,                       RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-1130, -654),      "MQ Outside Boss Crate 3",                      RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4]                       = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4,                       RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-1211, -775),      "MQ Outside Boss Crate 4",                      RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4));
    locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5]                       = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5,                       RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-1457, -417),      "MQ Outside Boss Crate 5",                      RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5));
    locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6]                       = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6,                       RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-1457, -534),      "MQ Outside Boss Crate 6",                      RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6));
    locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1]                           = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1,                           RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2249, -56),        "MQ Shortcut Crate 1",                          RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2]                           = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2,                           RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2189, -56),        "MQ Shortcut Crate 2",                          RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3]                           = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3,                           RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2150, 55),         "MQ Shortcut Crate 3",                          RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4]                           = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4,                           RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2135, -62),        "MQ Shortcut Crate 4",                          RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4));
    locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5]                           = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5,                           RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2090, 55),         "MQ Shortcut Crate 5",                          RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5));
    locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6]                           = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6,                           RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2030, 55),         "MQ Shortcut Crate 6",                          RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1]                = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1,                RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2230, 1147),       "MQ Lizalfos Maze Lower Crate 1",               RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2]                = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2,                RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2230, 1195),       "MQ Lizalfos Maze Lower Crate 2",               RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3]                = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3,                RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(2124, 1154),       "MQ Lizalfos Maze Lower Crate 3",               RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1]                = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1,                RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1817, 1330),       "MQ Lizalfos Maze Upper Crate 1",               RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2]                = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2,                RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1710, 1288),       "MQ Lizalfos Maze Upper Crate 2",               RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3]                = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3,                RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1710, 1336),       "MQ Lizalfos Maze Upper Crate 3",               RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1]                         = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1,                         RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1407, -756),       "MQ Lava Torch Crate 1",                        RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2]                         = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2,                         RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(384, 351),         "MQ Lava Torch Crate 2",                        RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3]                         = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3,                         RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1409, -1176),      "MQ Lava Torch Crate 3",                        RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4]                         = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4,                         RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(999, -402),        "MQ Lava Torch Crate 4",                        RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5]                         = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5,                         RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1210, 163),        "MQ Lava Torch Crate 5",                        RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-150, -336),       "MQ Central Pillar Upper Crate 1",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-210, -336),       "MQ Central Pillar Upper Crate 2",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(299, 485),         "MQ Central Pillar Lower Crate 1",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(215, 486),         "MQ Central Pillar Lower Crate 2",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(222, 204),         "MQ Central Pillar Lower Crate 3",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(455, 425),         "MQ Central Pillar Lower Crate 4",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(455, 365),         "MQ Central Pillar Lower Crate 5",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(215, 426),         "MQ Central Pillar Lower Crate 6",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(215, 366),         "MQ Central Pillar Lower Crate 7",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(162, 204),         "MQ Central Pillar Lower Crate 8",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9]              = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9,              RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(31, 636),          "MQ Central Pillar Lower Crate 9",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10]             = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(151, 636),         "MQ Central Pillar Lower Crate 10",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11]             = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(102, 204),         "MQ Central Pillar Lower Crate 11",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12]             = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(91, 636),          "MQ Central Pillar Lower Crate 12",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13]             = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(25, 522),          "MQ Central Pillar Lower Crate 13",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13));
    locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14]             = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(25, 582),          "MQ Central Pillar Lower Crate 14",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1]                  = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1,                  RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(698, 399),         "MQ Lizalfos Hallway Crate 1",                  RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2]                  = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2,                  RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(437, 576),         "MQ Lizalfos Hallway Crate 2",                  RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3]                  = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3,                  RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(270, 504),         "MQ Lizalfos Hallway Crate 3",                  RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(686, 1016),        "MQ Lizalfos Hallway Room Crate 1",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(795, 870),         "MQ Lizalfos Hallway Room Crate 2",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(795, 810),         "MQ Lizalfos Hallway Room Crate 3",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(524, 839),         "MQ Lizalfos Hallway Room Crate 4",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(525, 954),         "MQ Lizalfos Hallway Room Crate 5",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(816, 570),         "MQ Lizalfos Hallway Gate Crate 1",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2]             = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(816, 510),         "MQ Lizalfos Hallway Gate Crate 2",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1536, -712),       "MQ Storage Room A Crate 2",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1536, -821),       "MQ Storage Room A Crate 3",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1536, -922),       "MQ Storage Room A Crate 4",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1434, -1036),      "MQ Storage Room A Crate 1",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1374, -1036),      "MQ Storage Room A Crate 5",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1265, -1036),      "MQ Storage Room A Crate 6",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1205, -1036),      "MQ Storage Room A Crate 7",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-892, -91),        "MQ GS Storage Room Lower Crate 1",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1149, 173),       "MQ GS Storage Room Lower Crate 2",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1157, -221),      "MQ GS Storage Room Lower Crate 3",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-945, -315),       "MQ GS Storage Room Lower Crate 4",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1150, -141),      "MQ GS Storage Room Lower Crate 5",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1103, -315),      "MQ GS Storage Room Lower Crate 6",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-884, 65),         "MQ GS Storage Room Upper Crate 1",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2]             = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1150, 56),        "MQ GS Storage Room Upper Crate 2",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1]               = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2196, -1918),     "MQ Dragon Room Torches Crate 1",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2]               = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2196, -1978),     "MQ Dragon Room Torches Crate 2",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1]             = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1718, -2006),     "MQ Dragon Room Submerged Crate 1",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2]             = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1778, -2006),     "MQ Dragon Room Submerged Crate 2",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3]             = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1997, -1912),     "MQ Dragon Room Submerged Crate 3",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4]             = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1997, -1972),     "MQ Dragon Room Submerged Crate 4",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1]                  = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1,                  RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1092, -1926),     "MQ Dragon Room Door Crate 1",                  RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2]                  = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2,                  RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1153, -1926),     "MQ Dragon Room Door Crate 2",                  RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE]                       = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE,                       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1257, -1567),     "MQ BK Room Upper Crate",                       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE));
    locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1]                     = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1,                     RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1289, -1205),     "MQ BK Room Lower Crate 1",                     RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2]                     = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2,                     RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-985, -1333),      "MQ BK Room Lower Crate 2",                     RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3]                     = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3,                     RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1297, -1300),     "MQ BK Room Lower Crate 3",                     RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4]                     = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4,                     RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1069, -1402),     "MQ BK Room Lower Crate 4",                     RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1]                   = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1,                   RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-11, -2075),       "MQ Whirlpool Front Crate 1",                   RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2]                   = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2,                   RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-371, -2077),      "MQ Whirlpool Front Crate 2",                   RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1]               = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-455, -2394),      "MQ Whirlpool Submerged Crate 1",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2]               = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-498, -2661),      "MQ Whirlpool Submerged Crate 2",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3]               = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(11, -2737),        "MQ Whirlpool Submerged Crate 3",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4]               = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-251, -2731),      "MQ Whirlpool Submerged Crate 4",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5]               = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-119, -2481),      "MQ Whirlpool Submerged Crate 5",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6]               = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6,               RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(126, -2485),       "MQ Whirlpool Submerged Crate 6",               RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1]             = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-7, -3126),        "MQ Whirlpool Behind Gate Crate 1",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2]             = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-87, -3126),       "MQ Whirlpool Behind Gate Crate 2",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3]             = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-303, -3126),      "MQ Whirlpool Behind Gate Crate 3",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4]             = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4,             RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-390, -3126),      "MQ Whirlpool Behind Gate Crate 4",             RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE]                  = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE,                  RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-397, -3818),      "MQ Dodongo Room Upper Crate",                  RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE));
    locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE]                   = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE,                   RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(30, -3215),        "MQ Dodongo Room Hall Crate",                   RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE));
    locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1]                = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1,                RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-85, -3460),       "MQ Dodongo Room Lower Crate 1",                RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2]                = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2,                RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-271, -3826),      "MQ Dodongo Room Lower Crate 2",                RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3]                = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3,                RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(36, -3700),        "MQ Dodongo Room Lower Crate 3",                RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1436, -2766),     "MQ Storage Room B Crate 1",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1125, -2866),     "MQ Storage Room B Crate 2",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1125, -2926),     "MQ Storage Room B Crate 3",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1435, -2935),     "MQ Storage Room B Crate 4",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5]                    = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5,                    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1436, -2875),     "MQ Storage Room B Crate 5",                    RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1]       = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1,       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-994, 744),        "MQ Triple Torch Room Submerged Crate 1",       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2]       = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2,       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-991, 976),        "MQ Triple Torch Room Submerged Crate 2",       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3]       = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3,       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1511, 975),       "MQ Triple Torch Room Submerged Crate 3",       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4]       = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4,       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1571, 792),       "MQ Triple Torch Room Submerged Crate 4",       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5]       = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5,       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1571, 975),       "MQ Triple Torch Room Submerged Crate 5",       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6]       = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6,       RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1571, 744),       "MQ Triple Torch Room Submerged Crate 6",       RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1]            = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1,            RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2183, 977),       "MQ Triple Torch Room Gate Crate 1",            RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3]            = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3,            RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2260, 744),       "MQ Triple Torch Room Gate Crate 3",            RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2]            = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2,            RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2200, 743),       "MQ Triple Torch Room Gate Crate 2",            RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2));
    locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1]                           = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1,                           RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(510, -1558),       "MQ Statue Crate 1",                            RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1));
    locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2]                           = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2,                           RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(570, -1558),       "MQ Statue Crate 2",                            RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2));
    locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1]                       = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1,                       RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(-150, -1138),      "MQ Big Mirror Crate 1",                        RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1));
    locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2]                       = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2,                       RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(270, -1138),       "MQ Big Mirror Crate 2",                        RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2));
    locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3]                       = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3,                       RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(-150, -1186),      "MQ Big Mirror Crate 3",                        RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3));
    locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4]                       = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4,                       RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(270, -1186),       "MQ Big Mirror Crate 4",                        RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4));
    locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE]                      = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE,                      RCQUEST_MQ,      RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND,   TWO_ACTOR_PARAMS(-59, -1598),       "MQ Maze Crate",                                RHT_CRATE_GERUDO_TRAINING_GROUND,   RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE));
    
    // Small Crates
    //            Randomizer Check                                 	            Randomizer Check                                                                Quest            Area                           Scene ID                        Params                              Short Name                    	                Hint Text Key                       Vanilla                 Spoiler Collection Check
    locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1]              = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1,         RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY,       SCENE_JABU_JABU,                TWO_ACTOR_PARAMS(-141, -1945),      "Platform Room Small Crate 1",                  RHT_CRATE_JABU_JABU,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1));
    locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2]              = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2,         RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY,       SCENE_JABU_JABU,                TWO_ACTOR_PARAMS(-189, -1925),      "Platform Room Small Crate 2",                  RHT_CRATE_JABU_JABU,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1]                    = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1,               RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-2030, -1172),     "After Hammer Small Crate 1",                   RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2]                    = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2,               RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(-2072, -1135),     "After Hammer Small Crate 2",                   RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2));
    locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1]            = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1,       RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(-971, -940),       "Before Child Climb Small Crate 1",             RHT_CRATE_SPIRIT_TEMPLE,            RG_BOMBS_5,             SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1));
    locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2]            = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2,       RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(-1151, -939),      "Before Child Climb Small Crate 2",             RHT_CRATE_SPIRIT_TEMPLE,            RG_DEKU_NUTS_5,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2));
    locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1]          = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1,     RCQUEST_MQ,      RCAREA_JABU_JABUS_BELLY,       SCENE_JABU_JABU,                TWO_ACTOR_PARAMS(-512, -4592),      "MQ Triple Hallway Small Crate 1",              RHT_CRATE_JABU_JABU,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1));
    locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2]          = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2,     RCQUEST_MQ,      RCAREA_JABU_JABUS_BELLY,       SCENE_JABU_JABU,                TWO_ACTOR_PARAMS(-666, -4671),      "MQ Triple Hallway Small Crate 2",              RHT_CRATE_JABU_JABU,                RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2));
    locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1]          = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1,     RCQUEST_MQ,      RCAREA_FOREST_TEMPLE,          SCENE_FOREST_TEMPLE,            TWO_ACTOR_PARAMS(1599, -1322),      "MQ Frozen Eye Switch Small Crate 1",           RHT_CRATE_FOREST_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1));
    locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2]          = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2,     RCQUEST_MQ,      RCAREA_FOREST_TEMPLE,          SCENE_FOREST_TEMPLE,            TWO_ACTOR_PARAMS(2364, -873),       "MQ Frozen Eye Switch Small Crate 2",           RHT_CRATE_FOREST_TEMPLE,            RG_ARROWS_5,            SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2));
    locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3]          = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3,     RCQUEST_MQ,      RCAREA_FOREST_TEMPLE,          SCENE_FOREST_TEMPLE,            TWO_ACTOR_PARAMS(2312, -874),       "MQ Frozen Eye Switch Small Crate 3",           RHT_CRATE_FOREST_TEMPLE,            RG_ARROWS_5,            SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1]          = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1,     RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1699, 1290),       "MQ Lizalfos Maze Upper Small Crate 1",         RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2]          = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2,     RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1699, 1332),       "MQ Lizalfos Maze Upper Small Crate 2",         RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1]                   = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1,              RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(460, 370),         "MQ Lava Torch Small Crate 1",                  RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2]                   = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2,              RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1405, -975),       "MQ Lava Torch Small Crate 2",                  RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3]                   = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3,              RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(685, 183),         "MQ Lava Torch Small Crate 3",                  RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4]                   = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4,              RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1210, 163),        "MQ Lava Torch Small Crate 4",                  RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4));
    locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5]                   = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5,              RCQUEST_MQ,      RCAREA_FIRE_TEMPLE,            SCENE_FIRE_TEMPLE,              TWO_ACTOR_PARAMS(1267, 200),        "MQ Lava Torch Small Crate 5",                  RHT_CRATE_FIRE_TEMPLE,              RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1]         = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1,    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2210, -1952),     "MQ Dragon Room Torches Small Crate 1",         RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2]         = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2,    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2210, -1911),     "MQ Dragon Room Torches Small Crate 2",         RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3]         = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3,    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-2210, -1991),     "MQ Dragon Room Torches Small Crate 3",         RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1]              = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1,         RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1470, -622),       "MQ Storage Room A Small Crate 1",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2]              = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2,         RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1341, -621),       "MQ Storage Room A Small Crate 2",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3]              = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3,         RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1393, -621),       "MQ Storage Room A Small Crate 3",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3));
    locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4]              = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4,         RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(1284, -621),       "MQ Storage Room A Small Crate 4",              RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE]         = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE,    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-1166, 97),        "MQ GS Storage Room Lower Small Crate",         RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE));
    locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE]         = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE,    RCQUEST_MQ,      RCAREA_WATER_TEMPLE,           SCENE_WATER_TEMPLE,             TWO_ACTOR_PARAMS(-992, 382),        "MQ GS Storage Room Upper Small Crate",         RHT_CRATE_WATER_TEMPLE,             RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE));
    locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1]              = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1,         RCQUEST_MQ,      RCAREA_SHADOW_TEMPLE,          SCENE_SHADOW_TEMPLE,            TWO_ACTOR_PARAMS(365, 52),          "MQ Truth Spinner Small Crate 1",               RHT_CRATE_SHADOW_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1));
    locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2]              = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2,         RCQUEST_MQ,      RCAREA_SHADOW_TEMPLE,          SCENE_SHADOW_TEMPLE,            TWO_ACTOR_PARAMS(363, -62),         "MQ Truth Spinner Small Crate 2",               RHT_CRATE_SHADOW_TEMPLE,            RG_BOMBS_5,             SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2));
    locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3]              = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3,         RCQUEST_MQ,      RCAREA_SHADOW_TEMPLE,          SCENE_SHADOW_TEMPLE,            TWO_ACTOR_PARAMS(363, -7),          "MQ Truth Spinner Small Crate 3",               RHT_CRATE_SHADOW_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3));
    locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4]              = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4,         RCQUEST_MQ,      RCAREA_SHADOW_TEMPLE,          SCENE_SHADOW_TEMPLE,            TWO_ACTOR_PARAMS(366, 114),         "MQ Truth Spinner Small Crate 4",               RHT_CRATE_SHADOW_TEMPLE,            RG_ARROWS_10,           SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4));
    locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE]                       = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE,                  RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(-271, -983),       "MQ Statue Small Crate",                        RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE));
    locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE]                       = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE,                  RCQUEST_MQ,      RCAREA_SPIRIT_TEMPLE,          SCENE_SPIRIT_TEMPLE,            TWO_ACTOR_PARAMS(1382, 190),        "MQ Beamos Small Crate",                        RHT_CRATE_SPIRIT_TEMPLE,            RG_GREEN_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE));

    // clang-format on
}

static RegisterShipInitFunc initFunc(RegisterShuffleCrates, { "IS_RANDO" });
static RegisterShipInitFunc locFunc(Rando::StaticData::RegisterCrateLocations);
