#include "ShuffleFreestanding.h"

extern "C" {
#include "functions.h"
extern PlayState* gPlayState;
}

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

void ShuffleFreestanding_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
    va_list args;
    va_copy(args, originalArgs);

    if (id == VB_ITEM00_DESPAWN) {
        EnItem00* item00 = va_arg(args, EnItem00*);

        // Heart pieces and small keys are handled by default non-freestanding shuffles.
        if (item00->actor.params == ITEM00_HEART_PIECE || item00->actor.params == ITEM00_SMALL_KEY) {
            return;
        }

        uint32_t params = TWO_ACTOR_PARAMS((int32_t)item00->actor.world.pos.x, (int32_t)item00->actor.world.pos.z);
        Rando::Location* loc = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(item00->actor.id, gPlayState->sceneNum, params);
        uint8_t isDungeon = loc->IsDungeon();
        uint8_t freestandingSetting =
            Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_FREESTANDING).Get();
        RandomizerCheck randomizerCheck = loc->GetRandomizerCheck();
        bool checkObtained = Rando::Context::GetInstance()->GetItemLocation(randomizerCheck)->HasObtained();
        
        // Don't change to randomized item if current freestanding item isn't shuffled or already obtained.
        if ((freestandingSetting == RO_SHUFFLE_FREESTANDING_OVERWORLD && isDungeon) ||
            (freestandingSetting == RO_SHUFFLE_FREESTANDING_DUNGEONS && !isDungeon) || 
            checkObtained || randomizerCheck == RC_UNKNOWN_CHECK) {
            return;
        }

        item00->randoInf = static_cast<RandomizerInf>(loc->GetCollectionCheck().flag);
        item00->randoCheck = randomizerCheck;
        item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(randomizerCheck, true);
        item00->actor.params = ITEM00_SOH_DUMMY;
        item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem;

        *should = false;
    }
}

void Rando::StaticData::RegisterFreestandingLocations() {
    locationTable[RC_KF_BOULDER_RUPEE_2] =                                    Location::Collectable(RC_KF_BOULDER_RUPEE_2,                                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(-712, 1857),        "Boulder Maze Second Rupee",                   RHT_KOKIRI_FOREST_RUPEE,                                         RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_2));
    locationTable[RC_KF_BOULDER_RUPEE_1] =                                    Location::Collectable(RC_KF_BOULDER_RUPEE_1,                                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(-1009, 1556),       "Boulder Maze First Rupee",                    RHT_KOKIRI_FOREST_RUPEE,                                         RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_1));
    locationTable[RC_KF_BRIDGE_RUPEE] =                                       Location::Collectable(RC_KF_BRIDGE_RUPEE,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(2, -45),            "Bridge Rupee",                                RHT_KOKIRI_FOREST_RUPEE,                                         RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BRIDGE_RUPEE));
    locationTable[RC_KF_BEHIND_MIDOS_RUPEE] =                                 Location::Collectable(RC_KF_BEHIND_MIDOS_RUPEE,                                 RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(-364, -783),        "Behind Mido's House Rupee",                   RHT_KOKIRI_FOREST_RUPEE,                                         RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEHIND_MIDOS_RUPEE));
    locationTable[RC_KF_SARIAS_ROOF_WEST_HEART] =                             Location::Collectable(RC_KF_SARIAS_ROOF_WEST_HEART,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(451, 810),          "Saria's Roof West Heart",                     RHT_KOKIRI_FOREST_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_WEST_HEART));
    locationTable[RC_KF_SARIAS_ROOF_EAST_HEART] =                             Location::Collectable(RC_KF_SARIAS_ROOF_EAST_HEART,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(567, 819),          "Saria's Roof East Heart",                     RHT_KOKIRI_FOREST_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_EAST_HEART));
    locationTable[RC_KF_SARIAS_ROOF_NORTH_HEART] =                            Location::Collectable(RC_KF_SARIAS_ROOF_NORTH_HEART,                            RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(509, 725),          "Saria's Roof North Heart",                    RHT_KOKIRI_FOREST_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_NORTH_HEART));
    locationTable[RC_KF_SOUTH_GRASS_WEST_RUPEE] =                             Location::Collectable(RC_KF_SOUTH_GRASS_WEST_RUPEE,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(-537, 194),         "South Grass West Rupee",                      RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE));
    locationTable[RC_KF_NORTH_GRASS_WEST_RUPEE] =                             Location::Collectable(RC_KF_NORTH_GRASS_WEST_RUPEE,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(35, -418),          "North Grass West Rupee",                      RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_WEST_RUPEE));
    locationTable[RC_KF_NORTH_GRASS_EAST_RUPEE] =                             Location::Collectable(RC_KF_NORTH_GRASS_EAST_RUPEE,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(107, -418),         "North Grass East Rupee",                      RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_EAST_RUPEE));
    locationTable[RC_KF_SOUTH_GRASS_EAST_RUPEE] =                             Location::Collectable(RC_KF_SOUTH_GRASS_EAST_RUPEE,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(-459, 181),         "South Grass East Rupee",                      RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE));
    locationTable[RC_KF_SARIAS_TOP_LEFT_HEART] =                              Location::Collectable(RC_KF_SARIAS_TOP_LEFT_HEART,                              RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SARIAS_HOUSE,                 TWO_ACTOR_PARAMS(45, -52),           "Saria's House Top Left Heart",                RHT_SARIAS_HOUSE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_LEFT_HEART));
    locationTable[RC_KF_SARIAS_TOP_RIGHT_HEART] =                             Location::Collectable(RC_KF_SARIAS_TOP_RIGHT_HEART,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SARIAS_HOUSE,                 TWO_ACTOR_PARAMS(46, 56),            "Saria's House Top Right Heart",               RHT_SARIAS_HOUSE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_RIGHT_HEART));
    locationTable[RC_KF_SARIAS_BOTTOM_LEFT_HEART] =                           Location::Collectable(RC_KF_SARIAS_BOTTOM_LEFT_HEART,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SARIAS_HOUSE,                 TWO_ACTOR_PARAMS(-46, -51),          "Saria's House Bottom Left Heart",             RHT_SARIAS_HOUSE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART));
    locationTable[RC_KF_SARIAS_BOTTOM_RIGHT_HEART] =                          Location::Collectable(RC_KF_SARIAS_BOTTOM_RIGHT_HEART,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SARIAS_HOUSE,                 TWO_ACTOR_PARAMS(-46, 57),           "Saria's House Bottom Right Heart",            RHT_SARIAS_HOUSE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART));

    locationTable[RC_KF_BEAN_RUPEE_1] =                                       Location::Collectable(RC_KF_BEAN_RUPEE_1,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1269, -528),        "Bean Platform Rupee 1",                       RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_1));
    locationTable[RC_KF_BEAN_RUPEE_2] =                                       Location::Collectable(RC_KF_BEAN_RUPEE_2,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1269, -567),        "Bean Platform Rupee 2",                       RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_2));
    locationTable[RC_KF_BEAN_RUPEE_3] =                                       Location::Collectable(RC_KF_BEAN_RUPEE_3,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1304, -588),        "Bean Platform Rupee 3",                       RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_3));
    locationTable[RC_KF_BEAN_RUPEE_4] =                                       Location::Collectable(RC_KF_BEAN_RUPEE_4,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1338, -567),        "Bean Platform Rupee 4",                       RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_4));
    locationTable[RC_KF_BEAN_RUPEE_5] =                                       Location::Collectable(RC_KF_BEAN_RUPEE_5,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1338, -528),        "Bean Platform Rupee 5",                       RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_5));
    locationTable[RC_KF_BEAN_RUPEE_6] =                                       Location::Collectable(RC_KF_BEAN_RUPEE_6,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1304, -508),        "Bean Platform Rupee 6",                       RHT_KOKIRI_FOREST_RUPEE,                                         RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_6));
    locationTable[RC_KF_BEAN_RED_RUPEE] =                                     Location::Collectable(RC_KF_BEAN_RED_RUPEE,                                     RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_KOKIRI_FOREST,                TWO_ACTOR_PARAMS(1304, -548),        "Bean Platform Red Rupee",                     RHT_KOKIRI_FOREST_RUPEE,                                         RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RED_RUPEE));

    locationTable[RC_LW_BOULDER_RUPEE] =                                      Location::Collectable(RC_LW_BOULDER_RUPEE,                                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(1720, -2510),       "Boulder Rupee",                               RHT_LOST_WOODS_RUPEE,                                            RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BOULDER_RUPEE));
    locationTable[RC_LW_SHORTCUT_RUPEE_1] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_1,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2215, -850),        "Underwater Shortcut Rupee 1",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_1));
    locationTable[RC_LW_SHORTCUT_RUPEE_2] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_2,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2164, -850),        "Underwater Shortcut Rupee 2",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_2));
    locationTable[RC_LW_SHORTCUT_RUPEE_3] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_3,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2113, -850),        "Underwater Shortcut Rupee 3",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_3));
    locationTable[RC_LW_SHORTCUT_RUPEE_4] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_4,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2061, -853),        "Underwater Shortcut Rupee 4",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_4));
    locationTable[RC_LW_SHORTCUT_RUPEE_5] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_5,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2194, -895),        "Underwater Shortcut Rupee 5",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_5));
    locationTable[RC_LW_SHORTCUT_RUPEE_6] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_6,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2156, -937),        "Underwater Shortcut Rupee 6",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_6));
    locationTable[RC_LW_SHORTCUT_RUPEE_7] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_7,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2193, -813),        "Underwater Shortcut Rupee 7",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_7));
    locationTable[RC_LW_SHORTCUT_RUPEE_8] =                                   Location::Collectable(RC_LW_SHORTCUT_RUPEE_8,                                   RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(2153, -779),        "Underwater Shortcut Rupee 8",                 RHT_LOST_WOODS_SHORTCUT_RUPEE,                                   RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_8));

    locationTable[RC_LH_FRONT_RUPEE] =                                        Location::Collectable(RC_LH_FRONT_RUPEE,                                        RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LAKE_HYLIA,                   TWO_ACTOR_PARAMS(-940, 3968),        "Underwater Front Rupee",                      RHT_LAKE_HYLIA_RUPEE,                                            RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_FRONT_RUPEE));
    locationTable[RC_LH_MIDDLE_RUPEE] =                                       Location::Collectable(RC_LH_MIDDLE_RUPEE,                                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LAKE_HYLIA,                   TWO_ACTOR_PARAMS(-868, 4090),        "Underwater Middle Rupee",                     RHT_LAKE_HYLIA_RUPEE,                                            RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_MIDDLE_RUPEE));
    locationTable[RC_LH_BACK_RUPEE] =                                         Location::Collectable(RC_LH_BACK_RUPEE,                                         RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LAKE_HYLIA,                   TWO_ACTOR_PARAMS(-861, 4212),        "Underwater Back Rupee",                       RHT_LAKE_HYLIA_RUPEE,                                            RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BACK_RUPEE));
    locationTable[RC_LH_LAB_FRONT_RUPEE] =                                    Location::Collectable(RC_LH_LAB_FRONT_RUPEE,                                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LAKESIDE_LABORATORY,          TWO_ACTOR_PARAMS(68, -207),          "Lab Front Rupee",                             RHT_LABORATORY_RUPEE,                                            RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_FRONT_RUPEE));
    locationTable[RC_LH_LAB_LEFT_RUPEE] =                                     Location::Collectable(RC_LH_LAB_LEFT_RUPEE,                                     RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LAKESIDE_LABORATORY,          TWO_ACTOR_PARAMS(-52, -32),          "Lab Left Rupee",                              RHT_LABORATORY_RUPEE,                                            RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_LEFT_RUPEE));
    locationTable[RC_LH_LAB_RIGHT_RUPEE] =                                    Location::Collectable(RC_LH_LAB_RIGHT_RUPEE,                                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_LAKESIDE_LABORATORY,          TWO_ACTOR_PARAMS(-169, -124),        "Lab Right Rupee",                             RHT_LABORATORY_RUPEE,                                            RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_RIGHT_RUPEE));

    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_1] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_1,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(385, -2766),        "Dampe's Grave Rupee 1",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_2] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_2,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(528, -3216),        "Dampe's Grave Rupee 2",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_3] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_3,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(753, -4828),        "Dampe's Grave Rupee 3",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_4] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_4,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(570, -5599),        "Dampe's Grave Rupee 4",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_5] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_5,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(1461, -5736),       "Dampe's Grave Rupee 5",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_6] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_6,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(2376, -4647),       "Dampe's Grave Rupee 6",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_7] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_7,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(2573, -3758),       "Dampe's Grave Rupee 7",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7));
    locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_8] =                          Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GRAVEYARD,                    ACTOR_EN_ITEM00,      SCENE_WINDMILL_AND_DAMPES_GRAVE,    TWO_ACTOR_PARAMS(1511, -3118),       "Dampe's Grave Rupee 8",                       RHT_DAMPES_GRAVE_RUPEE,                                          RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8));

    locationTable[RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE] =               Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE,               RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(-42, 880),          "Octorok Grotto Front Left Blue Rupee",        RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE] =                     Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE,                     RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(58, 803),           "Octorok Grotto Back Blue Rupee",              RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE] =              Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE,              RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(90, 910),           "Octorok Grotto Front Right Blue Rupee",       RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE] =              Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE,              RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(-68, 959),          "Octorok Grotto Front Left Green Rupee",       RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE] =             Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE,             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(132, 961),          "Octorok Grotto Front Right Green Rupee",      RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE] =               Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE,               RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(-38, 768),          "Octorok Grotto Back Left Green Rupee",        RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE] =              Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE,              RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(121, 784),          "Octorok Grotto Back Right Green Rupee",       RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE));
    locationTable[RC_GV_OCTOROK_GROTTO_RED_RUPEE] =                           Location::Collectable(RC_GV_OCTOROK_GROTTO_RED_RUPEE,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_GERUDO_VALLEY,                ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(32, 852),           "Octorok Grotto Red Rupee",                    RHT_GERUDO_VALLEY_GROTTO_RUPEE,                                  RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE));

    locationTable[RC_DMT_RED_RUPEE] =                                         Location::Collectable(RC_DMT_RED_RUPEE,                                         RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_TRAIL,         TWO_ACTOR_PARAMS(-625, -55),         "Red Rupee Under Boulder",                     RHT_DEATH_MOUNTAIN_TRAIL_RUPEE,                                  RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_RED_RUPEE));
    locationTable[RC_DMT_BLUE_RUPEE] =                                        Location::Collectable(RC_DMT_BLUE_RUPEE,                                        RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_TRAIL,         TWO_ACTOR_PARAMS(-1060, -51),        "Blue Rupee Under Boulder",                    RHT_DEATH_MOUNTAIN_TRAIL_RUPEE,                                  RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BLUE_RUPEE));
    locationTable[RC_DMT_COW_GROTTO_LEFT_HEART] =                             Location::Collectable(RC_DMT_COW_GROTTO_LEFT_HEART,                             RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2287, -412),        "Cow Grotto Left Heart",                       RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART,                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_LEFT_HEART));
    locationTable[RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART] =                      Location::Collectable(RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2371, -532),        "Cow Grotto Middle Left Heart",                RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART,                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART));
    locationTable[RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART] =                     Location::Collectable(RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART,                     RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2449, -534),        "Cow Grotto Middle Right Heart",               RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART,                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART));
    locationTable[RC_DMT_COW_GROTTO_RIGHT_HEART] =                            Location::Collectable(RC_DMT_COW_GROTTO_RIGHT_HEART,                            RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2569, -432),        "Cow Grotto Right Heart",                      RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART,                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RIGHT_HEART));
    locationTable[RC_DMT_COW_GROTTO_RUPEE_1] =                                Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_1,                                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2390, -100),        "Cow Grotto Rupee 1",                          RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_1));
    locationTable[RC_DMT_COW_GROTTO_RUPEE_2] =                                Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_2,                                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2390, -139),        "Cow Grotto Rupee 2",                          RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_2));
    locationTable[RC_DMT_COW_GROTTO_RUPEE_3] =                                Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_3,                                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2425, -160),        "Cow Grotto Rupee 3",                          RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_3));
    locationTable[RC_DMT_COW_GROTTO_RUPEE_4] =                                Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_4,                                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2459, -139),        "Cow Grotto Rupee 4",                          RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_4));
    locationTable[RC_DMT_COW_GROTTO_RUPEE_5] =                                Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_5,                                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2459, -100),        "Cow Grotto Rupee 5",                          RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_5));
    locationTable[RC_DMT_COW_GROTTO_RUPEE_6] =                                Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_6,                                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2425, -80),         "Cow Grotto Rupee 6",                          RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_6));
    locationTable[RC_DMT_COW_GROTTO_RED_RUPEE] =                              Location::Collectable(RC_DMT_COW_GROTTO_RED_RUPEE,                              RCQUEST_BOTH,    RCTYPE_FREESTANDING,                RCAREA_DEATH_MOUNTAIN_TRAIL,         ACTOR_EN_ITEM00,      SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(2425, -120),        "Cow Grotto Red Rupee",                        RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE,                           RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RED_RUPEE));

    locationTable[RC_DMC_NEAR_PLATFORM_RED_RUPEE] =                           Location::Collectable(RC_DMC_NEAR_PLATFORM_RED_RUPEE,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(675, -718),         "Near Warp Platform Red Rupee",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE));
    locationTable[RC_DMC_MIDDLE_PLATFORM_RED_RUPEE] =                         Location::Collectable(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE,                         RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1117, -185),        "Middle Platform Red Rupee",                   RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE));
    locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1] =                      Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1117, -248),        "Middle Platform Blue Rupee 1",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1));
    locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2] =                      Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1116, -128),        "Middle Platform Blue Rupee 2",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2));
    locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3] =                      Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1159, -162),        "Middle Platform Blue Rupee 3",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3));
    locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4] =                      Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1158, -227),        "Middle Platform Blue Rupee 4",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4));
    locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5] =                      Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1078, -226),        "Middle Platform Blue Rupee 5",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5));
    locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6] =                      Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1078, -164),        "Middle Platform Blue Rupee 6",                RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6));
    locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1] =                    Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1,                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1087, 454),         "Distant Platform Rupee 1",                    RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1));
    locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2] =                    Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2,                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1087, 415),         "Distant Platform Rupee 2",                    RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2));
    locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3] =                    Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3,                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1122, 395),         "Distant Platform Rupee 3",                    RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3));
    locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4] =                    Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4,                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1156, 415),         "Distant Platform Rupee 4",                    RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4));
    locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5] =                    Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5,                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1156, 454),         "Distant Platform Rupee 5",                    RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5));
    locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6] =                    Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6,                    RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1122, 475),         "Distant Platform Rupee 6",                    RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6));
    locationTable[RC_DMC_DISTANT_PLATFORM_RED_RUPEE] =                        Location::Collectable(RC_DMC_DISTANT_PLATFORM_RED_RUPEE,                        RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEATH_MOUNTAIN_CRATER,        TWO_ACTOR_PARAMS(1122, 435),         "Distant Platform Red Rupee",                  RHT_DEATH_MOUNTAIN_CRATER_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE));

    locationTable[RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE] =                       Location::Collectable(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_RIVER,                  TWO_ACTOR_PARAMS(4216, -1464),       "Beneath Domain Red Left Rupee",               RHT_ZORAS_RIVER_WATERFALL_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE));
    locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE] =                Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE,                RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_RIVER,                  TWO_ACTOR_PARAMS(4171, -1436),       "Beneath Domain Red Middle Left Rupee",        RHT_ZORAS_RIVER_WATERFALL_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE));
    locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE] =               Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE,               RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_RIVER,                  TWO_ACTOR_PARAMS(4171, -1376),       "Beneath Domain Red Middle Right Rupee",       RHT_ZORAS_RIVER_WATERFALL_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE));
    locationTable[RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE] =                      Location::Collectable(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_RIVER,                  TWO_ACTOR_PARAMS(4224, -1339),       "Beneath Domain Red Right Rupee",              RHT_ZORAS_RIVER_WATERFALL_RUPEE,                                 RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE));

    locationTable[RC_ZF_BOTTOM_NORTH_INNER_RUPEE] =                           Location::Collectable(RC_ZF_BOTTOM_NORTH_INNER_RUPEE,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(68, -166),          "Bottom North Inner Rupee",                    RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(172, -35),          "Bottom Northeast Inner Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(137, 130),          "Bottom Southeast Inner Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTH_INNER_RUPEE] =                           Location::Collectable(RC_ZF_BOTTOM_SOUTH_INNER_RUPEE,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-76, 172),          "Bottom South Inner Rupee",                    RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-207, 47),          "Bottom Southwest Inner Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-173, -132),        "Bottom Northwest Inner Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE] =                          Location::Collectable(RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(242, -576),         "Bottom North Middle Rupee",                   RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE] =                      Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(540, -124),         "Bottom Northeast Middle Rupee",               RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE] =                      Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(397, 318),          "Bottom Southeast Middle Rupee",               RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE] =                          Location::Collectable(RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE,                          RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-166, 428),         "Bottom South Middle Rupee",                   RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE] =                      Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-574, 163),         "Bottom Southwest Middle Rupee",               RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE] =                      Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE,                      RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-464, -389),        "Bottom Northwest Middle Rupee",               RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTH_OUTER_RUPEE] =                           Location::Collectable(RC_ZF_BOTTOM_NORTH_OUTER_RUPEE,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(353, -934),         "Bottom North Outer Rupee",                    RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(1032, -254),        "Bottom Northeast Outer Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(603, 466),          "Bottom Southeast Outer Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE] =                           Location::Collectable(RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE,                           RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-227, 696),         "Bottom South Outer Rupee",                    RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE));
    locationTable[RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-847, 206),         "Bottom Southwest Outer Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE));
    locationTable[RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE] =                       Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE,                       RCQUEST_BOTH,    RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ZORAS_FOUNTAIN,               TWO_ACTOR_PARAMS(-857, -654),        "Bottom Northwest Outer Rupee",                RHT_ZORAS_FOUNTAIN_RUPEE,                                        RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE));

    locationTable[RC_DEKU_TREE_LOBBY_LOWER_HEART] =                           Location::Collectable(RC_DEKU_TREE_LOBBY_LOWER_HEART,                           RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-25, -81),          "Lobby Lower Heart",                           RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART));
    locationTable[RC_DEKU_TREE_LOBBY_UPPER_HEART] =                           Location::Collectable(RC_DEKU_TREE_LOBBY_UPPER_HEART,                           RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(87, -16),           "Lobby Upper Heart",                           RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART));
    locationTable[RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART] =                      Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-885, -185),        "Final Room Left Front Heart",                 RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART));
    locationTable[RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART] =                    Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-820, -76),         "Final Room Left Back Heart",                  RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART));
    locationTable[RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART] =                     Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART,                     RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-354, -206),        "Final Room Right Heart",                      RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART));

    locationTable[RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART] =                  Location::Collectable(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART,                  RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DODONGOS_CAVERN,              TWO_ACTOR_PARAMS(4266, -1575),       "Lower Lizalfos Room Lavafall Heart",          RHT_DODONGOS_CAVERN_HEART,                                       RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART));
    locationTable[RC_DODONGOS_CAVERN_BLADE_ROOM_HEART] =                      Location::Collectable(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DODONGOS_CAVERN,              TWO_ACTOR_PARAMS(2039, -317),        "Blade Room Heart",                            RHT_DODONGOS_CAVERN_HEART,                                       RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART));
    locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART] =             Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART,             RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DODONGOS_CAVERN,              TWO_ACTOR_PARAMS(3553, -1962),       "Upper Lizalfos Room Left Heart",              RHT_DODONGOS_CAVERN_HEART,                                       RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART));
    locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART] =            Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART,            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DODONGOS_CAVERN,              TWO_ACTOR_PARAMS(3580, -2004),       "Upper Lizalfos Room Right Heart",             RHT_DODONGOS_CAVERN_HEART,                                       RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART));

    locationTable[RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART] =                   Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART,                   RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(-1124, -2855),      "West Courtyard Right Heart",                  RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART));
    locationTable[RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART] =                    Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(-1165, -2788),      "West Courtyard Left Heart",                   RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART));
    locationTable[RC_FOREST_TEMPLE_WELL_WEST_HEART] =                         Location::Collectable(RC_FOREST_TEMPLE_WELL_WEST_HEART,                         RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(307, -1734),        "Well East Heart",                             RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART));
    locationTable[RC_FOREST_TEMPLE_WELL_EAST_HEART] =                         Location::Collectable(RC_FOREST_TEMPLE_WELL_EAST_HEART,                         RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(251, -1735),        "Well West Heart",                             RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART));

    locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART] =                    Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(3476, -359),        "Fire Pillar Room Left Heart",                 RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART));
    locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART] =                   Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART,                   RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(3476, -295),        "Fire Pillar Room Right Heart",                RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART));
    locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART] =                    Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(3526, -339),        "Fire Pillar Room Back Heart",                 RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART));
    locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART] =                   Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART,                   RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(1753, -136),        "East Central Room Left Heart",                RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART));
    locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART] =                  Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART,                  RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(1813, -37),         "East Central Room Right Heart",               RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART));
    locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART] =                 Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART,                 RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(1783, -91),         "East Central Room Middle Heart",              RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART));
    locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART] =                      Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(862, -169),         "Fire Wall Chase East Pillar Heart",           RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART));
    locationTable[RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART] =                      Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(603, -190),         "Fire Wall Chase West Pillar Heart",           RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART));
    locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART] =                      Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(1381, -1120),       "Fire Wall Chase Exit Platform Heart",         RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART));

    locationTable[RC_WATER_TEMPLE_RIVER_HEART_1] =                            Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_1,                            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_WATER_TEMPLE,                 TWO_ACTOR_PARAMS(-2781, -2515),      "River Heart 1",                               RHT_WATER_TEMPLE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_1));
    locationTable[RC_WATER_TEMPLE_RIVER_HEART_2] =                            Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_2,                            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_WATER_TEMPLE,                 TWO_ACTOR_PARAMS(-2528, -2727),      "River Heart 2",                               RHT_WATER_TEMPLE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_2));
    locationTable[RC_WATER_TEMPLE_RIVER_HEART_3] =                            Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_3,                            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_WATER_TEMPLE,                 TWO_ACTOR_PARAMS(-2436, -3348),      "River Heart 3",                               RHT_WATER_TEMPLE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_3));
    locationTable[RC_WATER_TEMPLE_RIVER_HEART_4] =                            Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_4,                            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_WATER_TEMPLE,                 TWO_ACTOR_PARAMS(-2021, -2937),      "River Heart 4",                               RHT_WATER_TEMPLE_HEART,                                          RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_4));

    locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART] =             Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART,             RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(5676, 1565),        "Invisible Blades Left Heart",                 RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART));
    locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART] =            Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART,            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(5695, 1589),        "Invisible Blades Right Heart",                RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART));
    locationTable[RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART] =                   Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART,                   RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(3971, -1716),       "Scarecrow Near Ship North Heart",             RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART));
    locationTable[RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART] =                   Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART,                   RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(3970, -1560),       "Scarecrow Near Ship South Heart",             RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART));
    locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART] =             Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART,             RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(-3471, -884),       "After Ship Upper Left Heart",                 RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART));
    locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART] =            Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART,            RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(-3473, -927),       "After Ship Upper Right Heart",                RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART));
    locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART] =                  Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART,                  RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(-3164, -646),       "After Ship Lower Heart",                      RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART));

    locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART] =                  Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART,                  RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SPIRIT_TEMPLE,                TWO_ACTOR_PARAMS(708, 227),          "Adult Climb Left Heart",                      RHT_SPIRIT_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART));
    locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART] =                 Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART,                 RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SPIRIT_TEMPLE,                TWO_ACTOR_PARAMS(661, 227),          "Adult Climb Right Heart",                     RHT_SPIRIT_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART));

    locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE] =       Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE,       RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-67, -748),         "Basement Platform Left Rupee",                RHT_BOTTOM_OF_THE_WELL_RUPEE,                                    RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE));
    locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE] =  Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE,  RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-19, -828),         "Basement Platform Back Left Rupee",           RHT_BOTTOM_OF_THE_WELL_RUPEE,                                    RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE));
    locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE] =     Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE,     RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(47, -805),          "Basement Platform Middle Rupee",              RHT_BOTTOM_OF_THE_WELL_RUPEE,                                    RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE));
    locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(94, -762),          "Basement Platform Back Right Rupee",          RHT_BOTTOM_OF_THE_WELL_RUPEE,                                    RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE));
    locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE] =      Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE,      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(85, -710),          "Basement Platform Right Rupee",               RHT_BOTTOM_OF_THE_WELL_RUPEE,                                    RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE));
    locationTable[RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART] =       Location::Collectable(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART,       RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-1947, -625),       "Coffin Room Front Left Heart",                RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART] =     Location::Collectable(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART,     RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-2144, -859),       "Coffin Room Middle Right Heart",              RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART));

    locationTable[RC_ICE_CAVERN_LOBBY_RUPEE] =                                Location::Collectable(RC_ICE_CAVERN_LOBBY_RUPEE,                                RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(-105, 854),         "Lobby Rupee",                                 RHT_ICE_CAVERN_RUPEE,                                            RG_BLUE_RUPEE,        SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_RUPEE));
    locationTable[RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART] =                        Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART,                        RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(1171, -2258),       "Map Room Left Heart",                         RHT_ICE_CAVERN_HEART,                                            RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART));
    locationTable[RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART] =                      Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(1212, -2213),       "Map Room Middle Heart",                       RHT_ICE_CAVERN_HEART,                                            RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART));
    locationTable[RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART] =                       Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART,                       RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(1166, -2173),       "Map Room Right Heart",                        RHT_ICE_CAVERN_HEART,                                            RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART));
    locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1] =                      Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(-1699, -697),       "Sliding Block Room Rupee 1",                  RHT_ICE_CAVERN_RUPEE,                                            RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1));
    locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2] =                      Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(-1648, -715),       "Sliding Block Room Rupee 2",                  RHT_ICE_CAVERN_RUPEE,                                            RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2));
    locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3] =                      Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_ICE_CAVERN,                   TWO_ACTOR_PARAMS(-1648, -677),       "Sliding Block Room Rupee 3",                  RHT_ICE_CAVERN_RUPEE,                                            RG_RED_RUPEE,         SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3));

    locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART] =             Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART,             RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_GERUDO_TRAINING_GROUND,       TWO_ACTOR_PARAMS(1486, 204),         "Beamos South Heart",                          RHT_GERUDO_TRAINING_GROUNDS_HEART,                               RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART));
    locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART] =              Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART,              RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_GERUDO_TRAINING_GROUND,       TWO_ACTOR_PARAMS(1858, -183),        "Beamos East Heart",                           RHT_GERUDO_TRAINING_GROUNDS_HEART,                               RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART));

    locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1] =                    Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(1855, -3953),       "Shadow Trial Heart 1",                        RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1));
    locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2] =                    Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(1844, -4038),       "Shadow Trial Heart 2",                        RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2));
    locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3] =                    Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3,                    RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(1827, -4106),       "Shadow Trial Heart 3",                        RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3));
    locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_HEART] =                        Location::Collectable(RC_GANONS_CASTLE_FIRE_TRIAL_HEART,                        RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(-1636, -3069),      "Fire Trial Heart",                            RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART));
    locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART] =                      Location::Collectable(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART,                      RCQUEST_VANILLA, RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(-517, 592),         "Spirit Trial Heart",                          RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART));

    locationTable[RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART] =                       Location::Collectable(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART,                       RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-1128, 1571),       "MQ Compass Room Heart",                       RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART));
    locationTable[RC_DEKU_TREE_MQ_DEKU_BABA_HEART] =                          Location::Collectable(RC_DEKU_TREE_MQ_DEKU_BABA_HEART,                          RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-594, 840),         "MQ Deku Baba Heart",                          RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART));
    locationTable[RC_DEKU_TREE_MQ_LOBBY_HEART] =                              Location::Collectable(RC_DEKU_TREE_MQ_LOBBY_HEART,                              RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-22, -88),          "MQ Lobby Heart",                              RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_HEART));
    locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART] =                     Location::Collectable(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART,                     RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-1165, 325),        "MQ Slingshot Room Heart",                     RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART));
    locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART] =                   Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART,                   RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-885, -185),        "MQ Final Room Left Front Heart",              RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART));
    locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART] =                 Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART,                 RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-820, -76),         "MQ Final Room Left Back Heart",               RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART));
    locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART] =                  Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART,                  RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DEKU_TREE,                    TWO_ACTOR_PARAMS(-354, -206),        "MQ Final Room Right Heart",                   RHT_DEKU_TREE_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART));

    locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART] =                Location::Collectable(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DODONGOS_CAVERN,              TWO_ACTOR_PARAMS(4266, -1575),       "MQ Lizalfos Room Lavafall Heart",             RHT_DODONGOS_CAVERN_HEART,                                       RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART));
    locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART] =            Location::Collectable(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART,            RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_DODONGOS_CAVERN,              TWO_ACTOR_PARAMS(1955, -596),        "MQ Torch Room Invisible Heart",               RHT_DODONGOS_CAVERN_HEART,                                       RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART));

    locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1] =                      Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_JABU_JABU,                    TWO_ACTOR_PARAMS(-390, -1695),       "MQ Lift Room Underwater Rupee 1",             RHT_JABU_JABU_RUPEE,                                             RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1));
    locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2] =                      Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_JABU_JABU,                    TWO_ACTOR_PARAMS(-487, -1701),       "MQ Lift Room Underwater Rupee 2",             RHT_JABU_JABU_RUPEE,                                             RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2));
    locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3] =                      Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_JABU_JABU,                    TWO_ACTOR_PARAMS(-549, -1709),       "MQ Lift Room Underwater Rupee 3",             RHT_JABU_JABU_RUPEE,                                             RG_GREEN_RUPEE,       SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3));
    locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1] =                      Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_JABU_JABU,                    TWO_ACTOR_PARAMS(-217, -1620),       "MQ Lift Room Heart 1",                        RHT_JABU_JABU_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1));
    locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2] =                      Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_JABU_JABU,                    TWO_ACTOR_PARAMS(-206, -1797),       "MQ Lift Room Heart 2",                        RHT_JABU_JABU_HEART,                                             RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2));

    locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART] =                Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(-1124, -2855),      "MQ West Courtyard Right Heart",               RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART));
    locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART] =               Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART,               RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(-1157, -2798),      "MQ West Courtyard Middle Heart",              RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART));
    locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART] =                 Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART,                 RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(-1184, -2744),      "MQ West Courtyard Left Heart",                RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART));
    locationTable[RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART] =                      Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(115, -1755),        "MQ Well Middle Heart",                        RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART));
    locationTable[RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART] =                    Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART,                    RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(15, -1755),         "MQ Well West Heart",                          RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART));
    locationTable[RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART] =                      Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART,                      RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FOREST_TEMPLE,                TWO_ACTOR_PARAMS(215, -1755),        "MQ Well East Heart",                          RHT_FOREST_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART));

    locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART] =                 Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART,                 RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(3476, -331),        "MQ Fire Pillar Room Left Heart",              RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART));
    locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART] =                Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(3502, 320),         "MQ Fire Pillar Room Right Heart",             RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART));
    locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART] =                Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_FIRE_TEMPLE,                  TWO_ACTOR_PARAMS(3307, 180),         "MQ Fire Pillar Room Lower Heart",             RHT_FIRE_TEMPLE_HEART,                                           RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART));

    locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART] =          Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART,          RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(5676, 1565),        "MQ Invisible Blades Left Heart",              RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART));
    locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART] =         Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART,         RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(5695, 1589),        "MQ Invisible Blades Right Heart",             RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART));
    locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART] =                Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(3971, -1716),       "MQ Scarecrow Near Ship North Heart",          RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART));
    locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART] =                Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(3970, -1560),       "MQ Scarecrow Near Ship South Heart",          RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART));
    locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART] =          Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART,          RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(-3471, -884),       "MQ After Ship Upper Left Heart",              RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART));
    locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART] =         Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART,         RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(-3473, -927),       "MQ After Ship Upper Right Heart",             RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART));
    locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART] =               Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART,               RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SHADOW_TEMPLE,                TWO_ACTOR_PARAMS(-3164, -646),       "MQ After Ship Lower Heart",                   RHT_SHADOW_TEMPLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART));

    locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART] =                     Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART,                     RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SPIRIT_TEMPLE,                TWO_ACTOR_PARAMS(-1151, -535),       "MQ Child Early Left Heart",                   RHT_SPIRIT_TEMPLE_MQ_HEART,                                      RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART));
    locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART] =                    Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART,                    RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_SPIRIT_TEMPLE,                TWO_ACTOR_PARAMS(-976, -535),        "MQ Child Early Right Heart",                  RHT_SPIRIT_TEMPLE_MQ_HEART,                                      RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART));

    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART] =   Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART,   RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-1945, -863),       "MQ Coffin Room Front Right Invisible Heart",  RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART] =                 Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART,                 RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-83, -350),         "MQ Bomb Alcove Left Heart",                   RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART] =                Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART,                RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-83, -274),         "MQ Bomb Alcove Right Heart",                  RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART] =   Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART,   RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(-2143, -621),       "MQ Coffin Room Middle Left Invisible Heart",  RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART] =    Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART,    RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(1083, -1174),       "MQ Basement Hallway Front Heart",             RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART] =     Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART,     RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(1044, -1223),       "MQ Basement Hallway Left Heart",              RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART));
    locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART] =    Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART,    RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_BOTTOM_OF_THE_WELL,           TWO_ACTOR_PARAMS(1114, -1223),       "MQ Basement Hallway Right Heart",             RHT_BOTTOM_OF_THE_WELL_HEART,                                    RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART));

    locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART] =                    Location::Collectable(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART,                    RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(1743, -528),        "MQ Water Trial Heart",                        RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART));
    locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART] =              Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART,              RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(-2506, -1096),      "MQ Light Trial Right Heart",                  RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART));
    locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART] =               Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART,               RCQUEST_MQ,      RCTYPE_FREESTANDING,                                                     ACTOR_EN_ITEM00,      SCENE_INSIDE_GANONS_CASTLE,         TWO_ACTOR_PARAMS(-2655, -549),       "MQ Light Trial Left Heart",                   RHT_GANONS_CASTLE_HEART,                                         RG_RECOVERY_HEART,    SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART));
}

static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFreestandingLocations);