diff --git a/soh/include/z64actor.h b/soh/include/z64actor.h index afc3d8f283c..760269d2d52 100644 --- a/soh/include/z64actor.h +++ b/soh/include/z64actor.h @@ -291,7 +291,6 @@ typedef struct EnItem00 { /* 0x15C */ f32 scale; /* 0x160 */ ColliderCylinder collider; // #region SOH [Randomizer] - GetItemEntry randoGiEntry; RandomizerCheck randoCheck; RandomizerInf randoInf; /* */ s16 ogParams; diff --git a/soh/include/z64save.h b/soh/include/z64save.h index dea23f11ebb..64fe0b07f90 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -283,7 +283,7 @@ typedef struct { // #endregion // #region SOH [Randomizer] // Upstream TODO: Move these to their own struct or name to more obviously specific to Randomizer - /* */ u16 randomizerInf[RAND_INF_MAX / 16]; + /* */ u16 randomizerInf[(RAND_INF_MAX + 15) / 16]; /* */ u8 mqDungeonCount; /* */ u16 adultTradeItems; /* */ u8 triforcePiecesCollected; diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.h b/soh/soh/Enhancements/debugger/debugSaveEditor.h index dcf6a605005..0725d4fe189 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.h +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.h @@ -348,7 +348,7 @@ const std::vector flagTables = { { 0x24, "Market Crowd Text Randomizer" }, { 0x30, "Entered the Market" }, } }, - { "Randomizer Inf Flags", RANDOMIZER_INF, RAND_INF_MAX / 16, { + { "Randomizer Inf Flags", RANDOMIZER_INF, (RAND_INF_MAX + 15) / 16, { { RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE, "DUNGEONS_DONE_SPIRIT_TEMPLE" }, { RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE, "DUNGEONS_DONE_SHADOW_TEMPLE" }, @@ -1158,6 +1158,394 @@ const std::vector flagTables = { { RAND_INF_ZF_GREAT_FAIRY_REWARD, "RAND_INF_ZF_GREAT_FAIRY_REWARD" }, { RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD, "RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD" }, { RAND_INF_OGC_GREAT_FAIRY_REWARD, "RAND_INF_OGC_GREAT_FAIRY_REWARD" }, + + { RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE, "RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE" }, + { RAND_INF_KF_NORTH_GRASS_WEST_RUPEE, "RAND_INF_KF_NORTH_GRASS_WEST_RUPEE" }, + { RAND_INF_KF_NORTH_GRASS_EAST_RUPEE, "RAND_INF_KF_NORTH_GRASS_EAST_RUPEE" }, + { RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE, "RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE" }, + { RAND_INF_KF_SARIAS_TOP_LEFT_HEART, "RAND_INF_KF_SARIAS_TOP_LEFT_HEART" }, + { RAND_INF_KF_SARIAS_TOP_RIGHT_HEART, "RAND_INF_KF_SARIAS_TOP_RIGHT_HEART" }, + { RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART, "RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART" }, + { RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART, "RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART" }, + { RAND_INF_KF_BEAN_RUPEE_1, "RAND_INF_KF_BEAN_RUPEE_1" }, + { RAND_INF_KF_BEAN_RUPEE_2, "RAND_INF_KF_BEAN_RUPEE_2" }, + { RAND_INF_KF_BEAN_RUPEE_3, "RAND_INF_KF_BEAN_RUPEE_3" }, + { RAND_INF_KF_BEAN_RUPEE_4, "RAND_INF_KF_BEAN_RUPEE_4" }, + { RAND_INF_KF_BEAN_RUPEE_5, "RAND_INF_KF_BEAN_RUPEE_5" }, + { RAND_INF_KF_BEAN_RUPEE_6, "RAND_INF_KF_BEAN_RUPEE_6" }, + { RAND_INF_KF_BEAN_RED_RUPEE, "RAND_INF_KF_BEAN_RED_RUPEE" }, + { RAND_INF_LW_SHORTCUT_RUPEE_1, "RAND_INF_LW_SHORTCUT_RUPEE_1" }, + { RAND_INF_LW_SHORTCUT_RUPEE_2, "RAND_INF_LW_SHORTCUT_RUPEE_2" }, + { RAND_INF_LW_SHORTCUT_RUPEE_3, "RAND_INF_LW_SHORTCUT_RUPEE_3" }, + { RAND_INF_LW_SHORTCUT_RUPEE_4, "RAND_INF_LW_SHORTCUT_RUPEE_4" }, + { RAND_INF_LW_SHORTCUT_RUPEE_5, "RAND_INF_LW_SHORTCUT_RUPEE_5" }, + { RAND_INF_LW_SHORTCUT_RUPEE_6, "RAND_INF_LW_SHORTCUT_RUPEE_6" }, + { RAND_INF_LW_SHORTCUT_RUPEE_7, "RAND_INF_LW_SHORTCUT_RUPEE_7" }, + { RAND_INF_LW_SHORTCUT_RUPEE_8, "RAND_INF_LW_SHORTCUT_RUPEE_8" }, + { RAND_INF_LH_FRONT_RUPEE, "RAND_INF_LH_FRONT_RUPEE" }, + { RAND_INF_LH_MIDDLE_RUPEE, "RAND_INF_LH_MIDDLE_RUPEE" }, + { RAND_INF_LH_BACK_RUPEE, "RAND_INF_LH_BACK_RUPEE" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE" }, + { RAND_INF_DMT_BLUE_RUPEE, "RAND_INF_DMT_BLUE_RUPEE" }, + { RAND_INF_DMT_COW_GROTTO_LEFT_HEART, "RAND_INF_DMT_COW_GROTTO_LEFT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, "RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, "RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_RIGHT_HEART, "RAND_INF_DMT_COW_GROTTO_RIGHT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_1, "RAND_INF_DMT_COW_GROTTO_RUPEE_1" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_2, "RAND_INF_DMT_COW_GROTTO_RUPEE_2" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_3, "RAND_INF_DMT_COW_GROTTO_RUPEE_3" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_4, "RAND_INF_DMT_COW_GROTTO_RUPEE_4" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_5, "RAND_INF_DMT_COW_GROTTO_RUPEE_5" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_6, "RAND_INF_DMT_COW_GROTTO_RUPEE_6" }, + { RAND_INF_DMT_COW_GROTTO_RED_RUPEE, "RAND_INF_DMT_COW_GROTTO_RED_RUPEE" }, + { RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE, "RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE, "RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE, "RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE" }, + { RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART, "RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART" }, + { RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART, "RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART" }, + { RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART" }, + { RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART" }, + { RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART" }, + { RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART, "RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART" }, + { RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, "RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART" }, + { RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, "RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART" }, + { RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, "RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART" }, + { RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART, "RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART" }, + { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART" }, + { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART" }, + { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_1, "RAND_INF_WATER_TEMPLE_RIVER_HEART_1" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_2, "RAND_INF_WATER_TEMPLE_RIVER_HEART_2" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_3, "RAND_INF_WATER_TEMPLE_RIVER_HEART_3" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_4, "RAND_INF_WATER_TEMPLE_RIVER_HEART_4" }, + { RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, "RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, "RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART" }, + { RAND_INF_ICE_CAVERN_LOBBY_RUPEE, "RAND_INF_ICE_CAVERN_LOBBY_RUPEE" }, + { RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART" }, + { RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART" }, + { RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART" }, + { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1" }, + { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2" }, + { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3" }, + { RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART" }, + { RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, "RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART" }, + { RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, "RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3" }, + { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART" }, + { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART" }, + { RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART, "RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART" }, + { RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART, "RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART" }, + { RAND_INF_DEKU_TREE_MQ_LOBBY_HEART, "RAND_INF_DEKU_TREE_MQ_LOBBY_HEART" }, + { RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, "RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART" }, + { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART" }, + { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART" }, + { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART" }, + { RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, "RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, "RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, "RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART" }, + { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART" }, + { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART" }, + { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART" }, + { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART" }, + { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART" }, + + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_1, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_2, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_3, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_4, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_5, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_6, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_7, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_8, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_1, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_2, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_3, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_4, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_5, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_6, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_7, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_8, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_1, "RAND_INF_COLOSSUS_OASIS_FAIRY_1" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_2, "RAND_INF_COLOSSUS_OASIS_FAIRY_2" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_3, "RAND_INF_COLOSSUS_OASIS_FAIRY_3" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_4, "RAND_INF_COLOSSUS_OASIS_FAIRY_4" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_5, "RAND_INF_COLOSSUS_OASIS_FAIRY_5" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_6, "RAND_INF_COLOSSUS_OASIS_FAIRY_6" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_7, "RAND_INF_COLOSSUS_OASIS_FAIRY_7" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_8, "RAND_INF_COLOSSUS_OASIS_FAIRY_8" }, + + { RAND_INF_ZR_BEAN_SPROUT_FAIRY_1, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_ZR_BEAN_SPROUT_FAIRY_2, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_ZR_BEAN_SPROUT_FAIRY_3, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_KF_BEAN_SPROUT_FAIRY_1, "RAND_INF_KF_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_KF_BEAN_SPROUT_FAIRY_2, "RAND_INF_KF_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_KF_BEAN_SPROUT_FAIRY_3, "RAND_INF_KF_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3" }, + { RAND_INF_LH_BEAN_SPROUT_FAIRY_1, "RAND_INF_LH_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_LH_BEAN_SPROUT_FAIRY_2, "RAND_INF_LH_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_LH_BEAN_SPROUT_FAIRY_3, "RAND_INF_LH_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_GV_BEAN_SPROUT_FAIRY_1, "RAND_INF_GV_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_GV_BEAN_SPROUT_FAIRY_2, "RAND_INF_GV_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_GV_BEAN_SPROUT_FAIRY_3, "RAND_INF_GV_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_DMC_BEAN_SPROUT_FAIRY_1, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_DMC_BEAN_SPROUT_FAIRY_2, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_DMC_BEAN_SPROUT_FAIRY_3, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_DMT_BEAN_SPROUT_FAIRY_1, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_DMT_BEAN_SPROUT_FAIRY_2, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_DMT_BEAN_SPROUT_FAIRY_3, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_3" }, + + { RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMC_GOSSIP_STONE_FAIRY, "RAND_INF_DMC_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMT_GOSSIP_STONE_FAIRY, "RAND_INF_DMT_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY, "RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY" }, + { RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, "RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, "RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GV_GOSSIP_STONE_FAIRY, "RAND_INF_GV_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY, "RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY, "RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY, "RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY, "RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, "RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, "RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, "RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_GOSSIP_STONE_FAIRY, "RAND_INF_KF_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY, "RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, "RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, "RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LW_GOSSIP_STONE_FAIRY, "RAND_INF_LW_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY" }, + { RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZD_GOSSIP_STONE_FAIRY, "RAND_INF_ZD_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY, "RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY, "RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + + { RAND_INF_LH_ISLAND_SUN_FAIRY, "RAND_INF_LH_ISLAND_SUN_FAIRY" }, + { RAND_INF_HF_POND_STORMS_FAIRY, "RAND_INF_HF_POND_STORMS_FAIRY" }, + { RAND_INF_DMT_FLAG_SUN_FAIRY, "RAND_INF_DMT_FLAG_SUN_FAIRY" }, + { RAND_INF_LW_SHORTCUT_STORMS_FAIRY, "RAND_INF_LW_SHORTCUT_STORMS_FAIRY" }, + { RAND_INF_GF_KITCHEN_SUN_FAIRY, "RAND_INF_GF_KITCHEN_SUN_FAIRY" }, + { RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY" }, + { RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, "RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY" }, + { RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, "RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY" }, + { RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, "RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY" }, + { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY" }, + { RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, "RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY" }, + { RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, "RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY" }, + { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY" }, + { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY" }, + { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY" }, } }, }; diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index 1eaf2b6d449..df2d2398e0f 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h @@ -418,6 +418,14 @@ typedef enum { // Vanilla condition: true VB_PHANTOM_GANON_DEATH_SCENE, VB_NABOORU_KNUCKLE_DEATH_SCENE, + + /*** Fairy Shuffle ***/ + // Opt: *EnElf + VB_SPAWN_FAIRY_GROUP, + // Opt: *EnElf + VB_FAIRY_HEAL, + // Opt: *ObjBean + VB_BEAN_SPAWN_FAIRIES, } GIVanillaBehavior; #ifdef __cplusplus diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp index 551a79ba8ed..25bcf12ee75 100644 --- a/soh/soh/Enhancements/mods.cpp +++ b/soh/soh/Enhancements/mods.cpp @@ -35,6 +35,7 @@ #include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h" #include "src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.h" #include "src/overlays/actors/ovl_En_Door/z_en_door.h" +#include "src/overlays/actors/ovl_En_Elf/z_en_elf.h" #include "objects/object_link_boy/object_link_boy.h" #include "objects/object_link_child/object_link_child.h" @@ -274,13 +275,14 @@ void RegisterOcarinaTimeTravel() { Actor* nearbyOcarinaSpot = Actor_FindNearby(gPlayState, player, ACTOR_EN_OKARINA_TAG, ACTORCAT_PROP, 120.0f); Actor* nearbyDoorOfTime = Actor_FindNearby(gPlayState, player, ACTOR_DOOR_TOKI, ACTORCAT_BG, 500.0f); Actor* nearbyFrogs = Actor_FindNearby(gPlayState, player, ACTOR_EN_FR, ACTORCAT_NPC, 300.0f); + Actor* nearbyGossipStone = Actor_FindNearby(gPlayState, player, ACTOR_EN_GS, ACTORCAT_NPC, 300.0f); uint8_t hasMasterSword = CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER); uint8_t hasOcarinaOfTime = (INV_CONTENT(ITEM_OCARINA_TIME) == ITEM_OCARINA_TIME); // If TimeTravel + Player have the Ocarina of Time + Have Master Sword + is in proper range // TODO: Once Swordless Adult is fixed: Remove the Master Sword check if (((CVarGetInteger(CVAR_ENHANCEMENT("TimeTravel"), 0) == 1 && hasOcarinaOfTime) || CVarGetInteger(CVAR_ENHANCEMENT("TimeTravel"), 0) == 2) && hasMasterSword && gPlayState->msgCtx.lastPlayedSong == OCARINA_SONG_TIME && !nearbyTimeBlockEmpty && !nearbyTimeBlock && - !nearbyOcarinaSpot && !nearbyFrogs) { + !nearbyOcarinaSpot && !nearbyFrogs && !nearbyGossipStone) { if (IS_RANDO) { CVarSetInteger(CVAR_GENERAL("SwitchTimeline"), 1); @@ -1779,6 +1781,28 @@ void RegisterSkeletonKey() { }); } +#define FAIRY_FLAG_BIG (1 << 9) +void RegisterFairyCustomization() { + GameInteractor::Instance->RegisterGameHookForID(VB_FAIRY_HEAL, [](GIVanillaBehavior id, bool* should, void* refActor) { + EnElf* enElf = static_cast(refActor); + // Don't trigger if fairy is shuffled + if (!IS_RANDO || !OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FAIRIES) || enElf->sohFairyIdentity.randomizerInf == RAND_INF_MAX) { + if (CVarGetInteger(CVAR_ENHANCEMENT("FairyEffect"), 0) && !(enElf->fairyFlags & FAIRY_FLAG_BIG)) + { + if (CVarGetInteger(CVAR_ENHANCEMENT("FairyPercentRestore"), 0)) + { + Health_ChangeBy(gPlayState, (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 100) / 100 + 15) / 16 * 16); + } + else + { + Health_ChangeBy(gPlayState, CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 8) * 16); + } + *should = false; + } + } + }); +} + void InitMods() { RandomizerRegisterHooks(); TimeSaverRegisterHooks(); @@ -1830,4 +1854,5 @@ void InitMods() { RegisterPauseMenuHooks(); RegisterSkeletonKey(); RegisterShufflePots(); + RegisterFairyCustomization(); } diff --git a/soh/soh/Enhancements/randomizer/3drando/category.hpp b/soh/soh/Enhancements/randomizer/3drando/category.hpp index 64b94f931b9..01bbe36496c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/category.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/category.hpp @@ -20,6 +20,8 @@ enum class Category { cAdultTrade, cPot, cBeehive, + cFreestanding, + cFairy, }; enum class OptionCategory { diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index def53d77a3c..daecdd84b5e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -33,7 +33,7 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { // /*spanish*/ Según dicen, los #salientes del Gran Árbol Deku# conducen a #[[1]]#. hintTextTable[RHT_DEKU_TREE_BASEMENT_CHEST] = HintText(CustomMessage("They say that #webs in the Deku Tree# hide #[[1]]#.", - /*german*/ "Man erzählt sich, daß #Spinnweben im Deku-Baum# #[[1]]# verstecken würden.", + /*german*/ "Man erzählt sich, daß #Spinnweben im Deku-Baum# #[[1]]# verbergen würden.", /*french*/ "Selon moi, les #toiles dans l'Arbre Mojo# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, entre #telarañas del Gran Árbol Deku# yace #[[1]]#. @@ -58,7 +58,7 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { // /*spanish*/ Según dicen, los #salientes del Gran Árbol Deku# conducen a #[[1]]#. hintTextTable[RHT_DEKU_TREE_MQ_BASEMENT_CHEST] = HintText(CustomMessage("They say that #webs in the Deku Tree# hide #[[1]]#.", - /*german*/ "Man erzählt sich, daß #Spinnweben im Deku-Baum# #[[1]]# verstecken würden.", + /*german*/ "Man erzählt sich, daß #Spinnweben im Deku-Baum# #[[1]]# verbergen würden.", /*french*/ "Selon moi, les #toiles dans l'Arbre Mojo# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, entre #telarañas del Gran Árbol Deku# yace #[[1]]#. @@ -117,6 +117,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*french*/ "Selon moi, la #peste Mojo dans l'Arbre Mojo# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #deku del Gran Árbol Deku# vende #[[1]]#. + hintTextTable[RHT_DEKU_TREE_HEART] = HintText(CustomMessage("They say that a #heart in the Deku Tree# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | DODONGOS CAVERN | ---------------------------*/ @@ -279,6 +283,19 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_DODONGOS_CAVERN_HEART] = HintText(CustomMessage("They say that a #heart in Dodongo's Cavern# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone in Dodongo's Cavern# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone in Dodongo's Cavern# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + /*-------------------------- | JABU JABUS BELLY | ---------------------------*/ @@ -313,7 +330,7 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The // /*spanish*/ Según dicen, cierta #roca rodeada de vacas# esconde #[[1]]#. {}, { CustomMessage("They say that #pop rocks# hide #[[1]]#.", - /*german*/ "Man erzählt sich, daß #Knallfelsen# #[[1]]# verstecken würden.", + /*german*/ "Man erzählt sich, daß #Knallfelsen# #[[1]]# verbergen würden.", /*french*/ "Selon moi, des #pierres aux reins# cachent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #cepillarse los dientes con explosivos# revela #[[1]]#. CustomMessage("They say that an #explosive palate# holds #[[1]]#.", @@ -362,7 +379,7 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The // /*spanish*/ Según dicen, unos #stingers engullidos por Jabu-Jabu# guardan #[[1]]#. {}, { CustomMessage("They say that a school of #stingers swallowed by a deity# guard #[[1]]#.", - /*german*/ "Man erzählt sich, daß von #Jabu-Jabu verschluckte Rochen# #[[1]]# bewachen würden.", + /*german*/ "Man erzählt sich, daß von #einer Gottheit verschluckte Rochen# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #raies avallées par le gardien# protègent #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, unos #stingers engullidos por cierta deidad# guardan #[[1]]#. @@ -430,6 +447,15 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_JABU_JABU_RUPEE] = HintText(CustomMessage("They say that #underwater in Jabu-Jabu's Belly# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_JABU_JABU_HEART] = HintText(CustomMessage("They say that near a #central lift in Jabu-Jabu's Belly# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | FOREST TEMPLE | ---------------------------*/ @@ -594,61 +620,64 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The // /*spanish*/ Según dicen, en una #sala con otro punto de vista# se esconde #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_PHANTOM_GANON_HEART] = HintText(CustomMessage("They say that #Phantom Ganon# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Phantom-Ganon# #[[1]]# besäße.", /*french*/ "Selon moi, #Ganon Spectral# possède #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #Ganon Fantasma# porta #[[1]]#. {}, { CustomMessage("They say that the #Evil Spirit from Beyond# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #böse Geist aus dem Jenseits# #[[1]]# besäße.", /*french*/ "Selon moi, l'#esprit maléfique de l'au-delà# possède #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #espíritu maligno de ultratumba# porta #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD] = HintText(CustomMessage("They say that a #spider on a small island# in the Forest Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne auf einer kleinen Insel# im Waldtempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur l'îlot du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre una pequeña isla# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_GS_FIRST_ROOM] = HintText(CustomMessage("They say that a #spider high on a wall of vines# in the Forest Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne hoch auf einer Wand aus Reben# im Waldtempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur un mur de vignes du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en lo alto de una pared de cepas# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD] = HintText(CustomMessage("They say that #stone columns# lead to a spider in the Forest Temple hiding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Säulen aus Stein# zu einer Spinne im Waldtempel führen, welche #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula haut perchée dans le jardin du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unas #columnas del Templo del Bosque# conducen a una Skulltula que otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_GS_LOBBY] = HintText(CustomMessage("They say that a #spider among ghosts# in the Forest Temple guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne inmitten von Geistern# im Waldtempel #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula dans la grande salle du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula rodeada de fantasmas# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_GS_BASEMENT] = HintText(CustomMessage("They say that a #spider within revolving walls# in the Forest Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne inmitten drehender Wände# im Waldtempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière les murs pivotants du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula entre paredes giratorias# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY] = HintText(CustomMessage("They say that an #ivy-hidden spider# in the Forest Temple hoards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #unter Efeu versteckte Spinne# im Waldtempel #[[1]]# horte.", /*french*/ "Selon moi, une #Skulltula près de l'entrée du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula escondida entre cepas# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM] = HintText(CustomMessage("They say that a #spider in a hidden nook# within the Forest Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne in einem versteckten Winkel# im Waldtempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans un recoin caché du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en una esquina oculta# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD] = HintText(CustomMessage("They say that a #spider on an arch# in the Forest Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne auf einem Bogen# im Waldtempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une arche du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre un arco# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD] = HintText(CustomMessage("They say that a #spider on a ledge# in the Forest Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne auf einem Vorsprung# im Waldtempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans le jardin du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en un borde# del Templo del Bosque otorga #[[1]]#. hintTextTable[RHT_FOREST_TEMPLE_MQ_GS_WELL] = HintText(CustomMessage("They say that #draining a well# in Forest Temple uncovers a spider with #[[1]]#.", /*german*/ "", + /*spanish*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_FOREST_TEMPLE_MQ_GS_WELL] = HintText(CustomMessage("They say that #draining a well# in Forest Temple uncovers a spider with #[[1]]#.", + /*german*/ "Man erzählt sich, daß das #Entleeren eines Brunnens# im Waldtempel eine Spinne mit #[[1]]# enthülle.", /*french*/ "Selon moi, une #Skulltula au fond du Puits du Temple de la Forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #vaciar el pozo# del Templo del Bosque desvela una Skulltula que otorga #[[1]]#. @@ -657,191 +686,196 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_FOREST_TEMPLE_HEART] = HintText(CustomMessage("They say that a #heart in the Forest Temple# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | FIRE TEMPLE | ---------------------------*/ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They say that #near a dragon# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #nahe eines Drachens# #[[1]]# sei.", /*french*/ "Selon moi, #près d'un dragon# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cerca de un dragón# yace #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_FLARE_DANCER_CHEST] = HintText(CustomMessage("They say that the #Flare Dancer behind a totem# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Flammenderwische hinter einem Totem# #[[1]]# bewachen würden.", /*french*/ "Selon moi, le #Danse-Flamme derrière un totem# protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Bailafuego tras unos tótems# esconde #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that a #prison beyond a totem# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Gefängnis jenseits eines Totems# #[[1]]# enthielte.", /*french*/ "Selon moi, la #prison derrière un totem# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en una #prisión tras unos tótems# yace #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST] = HintText(CustomMessage("They say that #explosives over a lava pit# unveil #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Explosives über einem Lavastrom# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, des #explosifs dans un lac de lave# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #explosivos en un mar de llamas# revelan #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST] = HintText(CustomMessage("They say that a #Goron trapped near lava# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #nahe der Lava gefangene Gorone# #[[1]]# besäße.", /*french*/ "Selon moi, le #Goron emprisonné près de la lave# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #goron atrapado cerca de un mar de llamas# guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST] = HintText(CustomMessage("They say that a #Goron at the end of a maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Gorone am Ende eines Labyrinths# #[[1]]# besäße.", /*french*/ "Selon moi, le #Goron dans le labyrinthe# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #goron al final de un laberinto# guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST] = HintText(CustomMessage("They say that a #Goron above a maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Gorone oberhalb eines Labyrinths# #[[1]]# besäße.", /*french*/ "Selon moi, le #Goron au dessus du labyrinthe# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #goron sobre un laberinto# guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST] = HintText(CustomMessage("They say that a #Goron hidden near a maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #nahe eines Labyrinths versteckter Gorone# #[[1]]# besäße.", /*french*/ "Selon moi, le #Goron caché près du labyrinthe# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #goron escondido tras un laberinto# guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST] = HintText(CustomMessage("They say that a #blocked path# in Fire Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #blockierter Pfad# im Feuertempel #[[1]]# enthielte.", /*french*/ "Selon moi, un #sol fragile dans le Temple du Feu# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en un #camino bloqueado# del Templo del Fuego yace #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say that a #caged chest# in the Fire Temple hoards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #eingesperrte Truhe# im Feuertempel #[[1]]# enthielte.", /*french*/ "Selon moi, un #coffre emprisonné# dans le Temple du Feu contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #cofre entre rejas# del Templo del Fuego contiene #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_COMPASS_CHEST] = HintText(CustomMessage("They say that a #chest in a fiery maze# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Truhe in einem feurigen Labyrinth# #[[1]]# enthielte.", /*french*/ "Selon moi, un #coffre dans un labyrinthe enflammé# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #cofre de un ardiente laberinto# contiene #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_HIGHEST_GORON_CHEST] = HintText(CustomMessage("They say that a #Goron atop the Fire Temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Gorone auf der Spitze des Feuertempels# #[[1]]# besäße.", /*french*/ "Selon moi, le #Goron au sommet du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #goron en lo alto del Templo del Fuego# guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST] = HintText(CustomMessage("They say that #near a dragon# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #nahe eines Drachens# #[[1]]# sei.", /*french*/ "Selon moi, #près d'un dragon# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cerca de un dragón# yace #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST] = HintText(CustomMessage("They say that the #Flare Dancer in the depths of the Fire Temple# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Flammenderwische in den Tiefen des Feuertempels# #[[1]]# bewachen würden.", /*french*/ "Selon moi, le #Danse-Flamme au coeur du volcan# a #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, el #Bailafuego en lo profundo del Templo del Fuego# esconde #[[1]]#. {}, { CustomMessage("They say that the #Flare Dancer in the depths of a volcano# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Flammenderwische in den Tiefen eines Vulkans# #[[1]]# bewachen würden.", /*french*/ "Selon moi, le #Danse-Flamme au coeur du volcan# a #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #Bailafuego en lo profundo del volcán# esconde #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_COMPASS_CHEST] = HintText(CustomMessage("They say that a #blocked path# in Fire Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #blockierter Pfad# im Feuertempel #[[1]]# enthielte.", /*french*/ "Selon moi, le #chemin scellé# dans le Temple du Feu contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en un #camino bloqueado# del Templo del Fuego yace #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST] = HintText(CustomMessage("They say that #crates in a maze# contain #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Kisten in einem Labyrinth# #[[1]]# enthielten.", /*french*/ "Selon moi, des #boîtes dans le labyrinthe# contiennent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #cajas de un laberinto# contienen #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST] = HintText(CustomMessage("They say that #crates in a maze# contain #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Kisten in einem Labyrinth #[[1]]# enthielten.", /*french*/ "Selon moi, des #boîtes dans le labyrinthe# contiennent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #cajas de un laberinto# contienen #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST] = HintText(CustomMessage("They say that a #falling slug# in the Fire Temple guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #fallende Schnecke# im Feuertempel #[[1]]# bewache.", /*french*/ "Selon moi, la #limace tombante# dans le Temple du Feu protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #babosa del techo# del Templo del Fuego guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_MAP_CHEST] = HintText(CustomMessage("They say that using a #hammer in the depths of the Fire Temple# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Benutzung eines #Hammers in den Tiefen des Feuertempels# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, frapper du #marteau au coeur du volcan# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, usar el #martillo en lo profundo del Templo del Fuego# revela #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that #illuminating a lava pit# reveals the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Illumination einer Lavagrube# den Pfad zu #[[1]]# enthülle.", /*french*/ "Selon moi, #éclairer le lac de lave# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #iluminar un mar de llamas# revela #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST] = HintText(CustomMessage("They say that #explosives over a lava pit# unveil #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Explosives oberhalb einer Lavagrube# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, des #explosifs dans un lac de lave# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #explosivos en un mar de llamas# revelan #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST] = HintText(CustomMessage("They say that a #Goron hidden near a maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #nahe eines Labyrinths versteckter Gorone# #[[1]]# besäße.", /*french*/ "Selon moi, le #Goron caché près du labyrinthe# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #goron cerca de un laberinto# guarda #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_FREESTANDING_KEY] = HintText(CustomMessage("They say that hidden #beneath a block of stone# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß versteckt #unter einem Steinblock# #[[1]]# läge.", /*french*/ "Selon moi, caché #derrière un bloc de pierre# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #bajo unos bloques de piedra# yace #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_VOLVAGIA_HEART] = HintText(CustomMessage("They say that #Volvagia# holds #[[1]]#.", - /*german*/ "", - /*french*/ "Selon moi, #Volvagia# possède #[[1]]#.", {QM_RED, QM_GREEN}), + /*german*/ "Man erzählt sich, daß #Volvagia# #[[1]]# besäße.", + /*french*/ "Selon moi, #Volcania# possède #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #Volvagia# porta #[[1]]#. {}, { CustomMessage("They say that the #Subterranean Lava Dragon# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #subterrane Lavadrache# #[[1]]# besäße.", /*french*/ "Selon moi, le #dragon des profondeurs# possède #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #dragón de lava subterráneo# porta #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM] = HintText(CustomMessage("They say that #eight tiles of malice# guard a spider holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #acht Kacheln der Arglist# eine Spinne bewachen würden, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula protégée par huit tuiles dans le Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #ocho baldosas de maldad# custodian una Skulltula que otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_GS_BOSS_KEY_LOOP] = HintText(CustomMessage("They say that #five tiles of malice# guard a spider holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fünf Kacheln der Arglist# eine Spinne bewachen würden, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula protégée par cinq tuiles dans le Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cinco baldosas de maldad# custodian una Skulltula que otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_GS_BOULDER_MAZE] = HintText(CustomMessage("They say that #explosives in a maze# unveil a spider hiding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Explosives in einem Labyrinth# eine Spinne enthüllen würde, welche #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula derrière un mur fragile du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #explosivos en un laberinto# desvelan una Skulltula que otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_GS_SCARECROW_TOP] = HintText(CustomMessage("They say that a #spider-friendly scarecrow# atop the Fire Temple hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #spinnenfreundliche Vogelscheuche# auf der Spitze des Feuertempels #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula repérée par l'épouvantail du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, un #espantapájaros del Templo del Fuego# custodia una Skulltula que otorga #[[1]]#. {}, { CustomMessage("They say that a #spider-friendly scarecrow# atop a volcano hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #spinnenfreundliche Vogelscheuche# auf der Spitze eines Vulkans #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula repérée par l'épouvantail du volcan# a #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #espantapájaros en lo alto de un volcán# custodia una Skulltula que otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_GS_SCARECROW_CLIMB] = HintText(CustomMessage("They say that a #spider-friendly scarecrow# atop the Fire Temple hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #spinnenfreundliche Vogelscheuche# auf der der Spitze des Feuertempels #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula repérée par l'épouvantail du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, un #espantapájaros del Templo del Fuego# custodia una Skulltula que otorga #[[1]]#. {}, { CustomMessage("They say that a #spider-friendly scarecrow# atop a volcano hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #spinnenfreundliche Vogelscheuche# auf der Spitze eines Vulkans #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula repérée par l'épouvantail du volcan# a #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #espantapájaros en lo alto de un volcán# custodia una Skulltula que otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE] = HintText(CustomMessage("They say that a #spider above a fiery maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne oberhalb eines feurigen Labyrinths #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus du labyrinthe enflammé du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre un ardiente laberinto# otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER] = HintText(CustomMessage("They say that a #spider within a fiery maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne innerhalb eines feurigen Labyrinths# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans le labyrinthe enflammé du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en el interior de un ardiente laberinto# otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR] = HintText(CustomMessage("They say that a #Goron trapped near lava# befriended a spider with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #nahe der Lava gefangener Gorone# sich mit einer Spinne angefreundet hat, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula emprisonnée près du lac de lave du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula amiga de un Goron atrapado junto a la lava# otorga #[[1]]#. hintTextTable[RHT_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM] = HintText(CustomMessage("They say that a #spider beside a fiery maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne neben einem feurigen Labyrinth# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près du labyrinthe enflammé du Temple du Feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula junto a un ardiente laberinto# otorga #[[1]]#. @@ -849,130 +883,142 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_FIRE_TEMPLE_HEART] = HintText(CustomMessage("They say that a #heart in the Fire Temple# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a hot arena# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun behind a knight's throne in a volcano# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + /*-------------------------- | WATER TEMPLE | ---------------------------*/ hintTextTable[RHT_WATER_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say that #rolling spikes# in the Water Temple surround #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #rollende Stacheln# im Wassertempel #[[1]]# umgeben würden.", /*french*/ "Selon moi, des #Spikes# dans le Temple de l'Eau entourent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unas #rodantes púas# del Templo del Agua guardan #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_COMPASS_CHEST] = HintText(CustomMessage("They say that #roaming stingers in the Water Temple# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #umherstreifende Rochen im Wassertempel# #[[1]]# bewachen würden.", /*french*/ "Selon moi, des #raies dans le Temple de l'Eau# protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #errantes stingers# del Templo del Agua guardan #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_TORCHES_CHEST] = HintText(CustomMessage("They say that #fire in the Water Temple# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Feuer im Wassertempel# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, des #flammes dans le Temple de l'Eau# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #fuego en el Templo del Agua# revela #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_DRAGON_CHEST] = HintText(CustomMessage("They say that a #serpent's prize# in the Water Temple is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Preis einer Schlange# im Wassertempel #[[1]]# sei.", /*french*/ "Selon moi, la #récompense du dragon submergé# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #escamado premio# del Templo del Agua se trata de #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST] = HintText(CustomMessage("They say that #blinding an eye# in the Water Temple leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Erblinden eines Auges# im Wassertempel zu #[[1]]# führe.", /*french*/ "Selon moi, #l'oeil# du Temple de l'Eau voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar un ojo# del Templo del Agua conduce a #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_CENTRAL_PILLAR_CHEST] = HintText(CustomMessage("They say that in the #depths of the Water Temple# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß in den #Tiefen des Wassertempels# #[[1]]# läge.", /*french*/ "Selon moi, le #coeur du Temple de l'Eau# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en las #profundidades del Templo del Agua# yace #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_CRACKED_WALL_CHEST] = HintText(CustomMessage("They say that #through a crack# in the Water Temple is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #in einem Spalt# im Wassertempel #[[1]]# sei.", /*french*/ "Selon moi, le #mur fragile# du Temple de l'Eau cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, tras una #agrietada pared# del Templo del Agua yace #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_LONGSHOT_CHEST] = HintText(CustomMessage("They say that #Dark Link# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #schwarze Link# #[[1]]# bewache.", /*french*/ "Selon moi, l'#Ombre de @# protège #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #@ Oscuro# guarda #[[1]]#. {}, { CustomMessage("They say that #facing yourself# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Konfrontation mit einem Selbst# #[[1]]# offenbare.", /*french*/ "Selon moi, se #vaincre soi-même# révèle #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #luchar contra ti mismo# revela #[[1]]#. CustomMessage("They say that a #dark reflection# of yourself guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #dunkle Reflektion# von einem Selbst #[[1]]# bewache.", /*french*/ "Selon moi, son #propre reflet# cache #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #oscuro reflejo de ti mismo# guarda #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST] = HintText(CustomMessage("They say that in the #depths of the Water Temple# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß in den #Tiefen des Wassertempels# #[[1]]# läge.", /*french*/ "Selon moi, le #coeur du Temple de l'Eau# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en las #profundidades del Templo del Agua# yace #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that fire in the Water Temple unlocks a #vast gate# revealing a chest with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß Feuer im Wassertempel ein #großes Tor# entschlüssele, welches eine Truhe mit #[[1]]# offenbare.", /*french*/ "Selon moi, des #flammes au coeur du Temple de l'Eau# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el fuego en el Templo del Agua alza una #gran valla# con #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_LONGSHOT_CHEST] = HintText(CustomMessage("They say that #through a crack# in the Water Temple is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #in einem Spalt# im Wassertempel #[[1]]# sei.", /*french*/ "Selon moi, le #mur fragile# du Temple de l'Eau cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, tras una #agrietada pared# del Templo del Agua yace #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_COMPASS_CHEST] = HintText(CustomMessage("They say that #fire in the Water Temple# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Feuer im Wassertempel# #[[1]]# offenbare.", /*french*/ "Selon moi, des #flammes dans le Temple de l'Eau# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #fuego en el Templo del Agua# revela #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_MAP_CHEST] = HintText(CustomMessage("They say that #sparring soldiers# in the Water Temple guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #sich duellierende Soldaten# im Wassertempel #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #soldats du Temple de l'Eau# protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #acabar con unos soldados# del Templo del Agua revela #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MORPHA_HEART] = HintText(CustomMessage("They say that #Morpha# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Morpha# #[[1]]# besäße.", /*french*/ "Selon moi, #Morpha# possède #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #Morpha# porta #[[1]]#. {}, { CustomMessage("They say that the #Giant Aquatic Amoeba# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #gigantische aquatische Amöbe# #[[1]]# besäße.", /*french*/ "Selon moi, l'#amibe aquatique géante# possède #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, la #ameba acuática gigante# porta #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM] = HintText(CustomMessage("They say that a #spider over a waterfall# in the Water Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne über einem Wasserfall# im Wassertempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus d'une cascade du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras una cascada# del Templo del Agua otorga #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_GS_CENTRAL_PILLAR] = HintText(CustomMessage("They say that a #spider in the center of the Water Temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne im Zentrum des Wassertempels# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au centre du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en el centro del Templo del Agua# otorga #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that a spider protected by #rolling boulders in the Water Temple# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne, welche von #rollenden Felsbrocken im Wassertempel# geschützt werde, #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula derrière les rochers roulants du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, una #Skulltula protegida por rocas rodantes# del Templo del Agua otorga #[[1]]#. {}, { CustomMessage("They say that a spider protected by #rolling boulders under the lake# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne, welche von #rollenden Felsbrocken unterhalb eines Flusses# geschützt werde, #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula derrière les rochers roulants sous le lac# a #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, una #Skulltula protegida por rocas rodantes# bajo el lago otorga #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_GS_RIVER] = HintText(CustomMessage("They say that a #spider over a river# in the Water Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne über einem Fluß# im Wassertempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus de la rivière du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre un río# del Templo del Agua otorga #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH] = HintText(CustomMessage("They say that #beyond a pit of lizards# is a spider holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #jenseits einer Reptiliengrube# eine Spinne sei, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près des lézards du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #más allá de un pozo de reptiles# una Skulltula otorga #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY] = HintText(CustomMessage("They say that #lizards guard a spider# in the Water Temple with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #eine von Reptilien bewachte Spinne# im Wassertempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans les couloirs croisés du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #reptiles custodian una Skulltula# del Templo del Agua que otorga #[[1]]#. hintTextTable[RHT_WATER_TEMPLE_MQ_GS_RIVER] = HintText(CustomMessage("They say that a #spider over a river# in the Water Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne oberhalb eines Flusses# im Wassertempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus de la rivière du Temple de l'Eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre un río# del Templo del Agua otorga #[[1]]#. @@ -980,236 +1026,252 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_WATER_TEMPLE_HEART] = HintText(CustomMessage("They say that in a #river in the Water Temple# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun atop a small pillar before a duel with one's shadow# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY] = HintText(CustomMessage("They say that #calling the rain before a duel with one's shadow# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun before a duel with one's shadow# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + /*-------------------------- | SPIRIT TEMPLE | ---------------------------*/ hintTextTable[RHT_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST] = HintText(CustomMessage("They say that a child conquers a #skull in green fire# in the Spirit Temple to reach #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Kind einen #Schädel in grünem Feuer# im Geistertempel erobere, um #[[1]]# zu erreichen.", /*french*/ "Selon moi, le #crâne au halo vert dans le colosse# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el joven que #baje el puente# del Templo del Espíritu encontrará #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST] = HintText(CustomMessage("They say that a child can find a #caged chest# in the Spirit Temple with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Kind eine #gefangene Truhe# im Geistertempel finden könne, welche #[[1]]# enthielte.", /*french*/ "Selon moi, le #coffre embarré dans le colosse# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un joven puede encontrar un #cofre entre rejas# del Templo del Espíritu con #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_COMPASS_CHEST] = HintText(CustomMessage("They say that #across a pit of sand# in the Spirit Temple lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #jenseits einer Sandgrube# im Geistertempel #[[1]]# läge.", /*french*/ "Selon moi, le #trou sableux dans le colosse# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, tras un #pozo de arena# del Templo del Espíritu yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST] = HintText(CustomMessage("They say that #dodging boulders to collect silver rupees# in the Spirit Temple yields #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Ausweichen von Felsbrocken um silberne Rubine zu sammeln# im Geistertempel #[[1]]# einbrächte.", /*french*/ "Selon moi, les #pièces argentées entourées de rochers dans le colosse# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #esquivar rocas y conseguir plateadas rupias# en el Templo del Espíritu conduce a #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST] = HintText(CustomMessage("They say that a #shadow circling reflected light# in the Spirit Temple guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #reflektierendes Licht umzirkelnder Schatten# im Geistertempel #[[1]]# bewachen würde.", /*french*/ "Selon moi, l'#ombre près d'un miroir# protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #círculo de reflectante luz# del Templo del Espíritu guarda #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST] = HintText(CustomMessage("They say that a #shadow circling reflected light# in the Spirit Temple guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #reflektierendes Licht umzirkelnder Schatten# im Geistertempel #[[1]]# bewachen würde.", /*french*/ "Selon moi, l'#ombre près d'un miroir# protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #círculo de reflectante luz# del Templo del Espíritu guarda #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say that #before a giant statue# in the Spirit Temple lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #vor einer riesigen Statue# im Geistertempel #[[1]]# läge.", /*french*/ "Selon moi, #devant la statue# dans le colosse gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #ante una gran estatua# del Templo del Espíritu aguarda #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST] = HintText(CustomMessage("They say that #lizards in the Spirit Temple# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Reptilien im Geistertempel# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #lézards dans le colosse# protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #reptiles del Templo del Espíritu# guardan #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST] = HintText(CustomMessage("They say that #lizards in the Spirit Temple# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Reptilien im Geistertempel# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #lézards dans le colosse# protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #reptiles del Templo del Espíritu# guardan #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST] = HintText(CustomMessage("They say that #torchlight among Beamos# in the Spirit Temple reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Fackellicht inmitten von Strahlzyklopen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, les #torches autour des Sentinelles# éclairent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #antorchas junto a Beamos# del Templo del Espíritu revelan #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST] = HintText(CustomMessage("They say that a #statue in the Spirit Temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Statue im Geistertempel# #[[1]]# hielte.", /*french*/ "Selon moi, la #statue dans le colosse# tient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #estatua del Templo del Espíritu# esconde #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST] = HintText(CustomMessage("They say that on a #ledge by a statue# in the Spirit Temple rests #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf einem #Vorsprung einer Statue# im Geistertempel #[[1]]# ruhe.", /*french*/ "Selon moi, #haut perché près de la statue# dans le colosse gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, al #borde de una estatua# del Templo del Espíritu yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST] = HintText(CustomMessage("They say that those who #show the light among statues# in the Spirit Temple find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß jene, welche #das Licht inmitten von Statuen# im Geistertempel zeigen würden, #[[1]]# fänden.", /*french*/ "Selon moi, le #soleil près des statues# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, aquellos que #iluminen ante las estatuas# del Templo del Espíritu encontrarán #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth in the Spirit Temple# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit im Geistertempel# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #trésor invisible près du Hache-Viande# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Templo del Espíritu revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth in the Spirit Temple# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit im Geistertempel# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #trésor invisible près du Hache-Viande# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Templo del Espíritu revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that a #chest engulfed in flame# in the Spirit Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #von Flammen eingehüllte Truhe# im Geistertempel #[[1]]# enthielte.", /*french*/ "Selon moi, le #coffre enflammé dans le colosse# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #cofre rodeado de llamas# del Templo del Espíritu contiene #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_TOPMOST_CHEST] = HintText(CustomMessage("They say that those who #show the light above the Colossus# find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß jene, welche #das Licht auf dem Koloss# zeigen würden, #[[1]]# fänden.", /*french*/ "Selon moi, le #soleil au sommet du colosse# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, aquellos que #iluminen en lo alto del Coloso# encontrarán #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST] = HintText(CustomMessage("They say that #lying unguarded# in the Spirit Temple is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #unbewacht liegend# im Geistertempel #[[1]]# sei.", /*french*/ "Selon moi, dans #l'entrée du colosse# se trouve #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en la #entrada del Templo del Espíritu# yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST] = HintText(CustomMessage("They say that a #switch in a pillar# within the Spirit Temple drops #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Schalter in einer Säule# innerhalb des Geistertempels #[[1]]# erbringe.", /*french*/ "Selon moi, l'#interrupteur dans un pilier# du colosse cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #interruptor de un pilar# del Templo del Espíritu revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST] = HintText(CustomMessage("They say that #collecting rupees through a water jet# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Sammeln von Rubin durch einen Wasserstrom# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, les #pièces argentées dans le jet d'eau# du colosse révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #hacerte con rupias tras un géiser# revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST] = HintText(CustomMessage("They say that an #eye blinded by stone# within the Spirit Temple conceals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #durch einen Stein erblindetes Auge# im Geistertempel #[[1]]# verberge.", /*french*/ "Selon moi, #l'oeil derrière le rocher# dans le colosse voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar a un ojo# del Templo del Espíritu revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_MAP_CHEST] = HintText(CustomMessage("They say that surrounded by #fire and wrappings# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß umgeben von #Feuer umhüllt# #[[1]]# läge.", /*french*/ "Selon moi, près des #pierres tombales dans le colosse# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, rodeado de #fuego y vendas# yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST] = HintText(CustomMessage("They say that a child defeats a #gauntlet of monsters# within the Spirit Temple to find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Kind eine #Herausforderung von Monstern# innerhalb des Geistertempels bewältige und #[[1]]# fände.", /*french*/ "Selon moi, l'enfant qui vainc #plusieurs monstres# dans le colosse trouvera #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el joven que derrote #unos monstruos# del Templo del Espíritu encontrará #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST] = HintText(CustomMessage("They say that #explosive sunlight# within the Spirit Temple uncovers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #explosives Sonnenlicht# innerhalb des Geistertempels #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #rayon de lumière explosif dans le colosse# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #explosiva luz solar# del Templo del Espíritu revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST] = HintText(CustomMessage("They say that #trapped by falling enemies# within the Spirit Temple is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich #gefangen von fallenden Feinden# im Geistertempel #[[1]]# befände.", /*french*/ "Selon moi, des #ennemis tombants# dans le colosse protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #rodeado de enemigos del cielo# del Templo del Espíritu yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_COMPASS_CHEST] = HintText(CustomMessage("They say that #blinding the colossus# unveils #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Erblinden des Kolosses# #[[1]]# offenbare.", /*french*/ "Selon moi, #l'oeil dans le colosse# voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar al coloso# revela #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST] = HintText(CustomMessage("They say that a #royal melody awakens the colossus# to reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #königliche Melodie den Koloss erwecke# und #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #mélodie royale éveille le colosse# et révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #melodía real que despierte al coloso# revelará #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# finds the colossus's hidden #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# des Kolosses verborgene #[[1]]# fände.", /*french*/ "Selon moi, #l'oeil de vérité# verra dans le colosse #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Templo del Espíritu encontrará #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST] = HintText(CustomMessage("They say that #the old hide what the young find# to reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #der Alte verstecke, was der Junge finde# und #[[1]]# enthüllt würde.", /*french*/ "Selon moi, l'#oeil dans le trou du bloc argent# dans le colosse voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #adulto esconde lo que el joven anhela#, revelando #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST] = HintText(CustomMessage("They say that #sunlight in a maze of fire# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Sonnenlicht in einem Labyrinth aus Feuer# #[[1]]# verstecke.", /*french*/ "Selon moi, #la lumière dans le labyrinthe de feu# du colosse révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #luz solar de un ígneo laberinto# esconde #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST] = HintText(CustomMessage("They say that #across a pit of sand# in the Spirit Temple lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #jenseits einer Sandgrube# im Geistertempel #[[1]]# läge.", /*french*/ "Selon moi, le #trou sableux# dans le colosse a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #a través del pozo de arena# del Templo del Espíritu yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST] = HintText(CustomMessage("They say that where #temporal stone blocks the path# within the Spirit Temple lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß wo #zeitlicher Stein den Pfad blockiere# im Geistertempel #[[1]]# läge.", /*french*/ "Selon moi, les #pierres temporelles# dans le colosse cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, donde los #bloques temporales bloquean# en el Templo del Espíritu yace #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST] = HintText(CustomMessage("They say that a #chest of double purpose# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Truhe mit doppeltem Zweck# #[[1]]# enthielte.", /*french*/ "Selon moi, le #coffre à usage double# du colosse contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #cofre de doble uso# contiene #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that a #temporal stone blocks the light# leading to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #zeitlicher Stein das Licht blockiere#, was zu #[[1]]# führe.", /*french*/ "Selon moi, la #pierre temporelle# le colosse fait ombre sur #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #bloque temporal bloquea la luz# que conduce a #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST] = HintText(CustomMessage("They say that those who #show the light above the Colossus# find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß jene, welche #das Licht auf dem Koloss# zeigen würden, #[[1]]# fänden.", /*french*/ "Selon moi, le trésor invisible #au sommet du colosse# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, aquellos que #revelen la luz sobre el Coloso# encontrarán #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_TWINROVA_HEART] = HintText(CustomMessage("They say that #Twinrova# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Twinrova# #[[1]]# besäße.", /*french*/ "Selon moi, #Twinrova# possède #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #Birova# porta #[[1]]#. {}, { CustomMessage("They say that the #Sorceress Sisters# hold #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Hexenschwestern# #[[1]]# besäßen.", /*french*/ "Selon moi, #les sorcières jumelles# possède #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, las #hermanas hechiceras# portan #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM] = HintText(CustomMessage("They say that a spider in the #hall of a knight# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne in der #Halle eines Ritters# #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula au dessus d'un escalier du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en el salón de un guerrero# otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_GS_BOULDER_ROOM] = HintText(CustomMessage("They say that a #spider behind a temporal stone# in the Spirit Temple yields #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne hinter einem zeitlichen Stein# im Geistertempel #[[1]]# einbrächte.", /*french*/ "Selon moi, une #Skulltula derrière une pierre temporelle du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras un bloque temporal# del Templo del Espíritu otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_GS_LOBBY] = HintText(CustomMessage("They say that a #spider beside a statue# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne neben einer Statue# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans la grande salle du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula junto a una estatua# del Templo del Espíritu otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM] = HintText(CustomMessage("They say that a #spider at the top of a deep shaft# in the Spirit Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne auf der Spitze eines tiefen Stiels# im Geistertempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près d'un mur d'escalade du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en lo alto de un gran hueco# del Templo del Espíritu otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_GS_METAL_FENCE] = HintText(CustomMessage("They say that a child defeats a #spider among bats# in the Spirit Temple to gain #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Kind #eine Spinne inmitten von Fledermäusen# im Geistertempel besiege und #[[1]]# erhielte.", /*french*/ "Selon moi, une #Skulltula sur le grillage du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el joven que derrote la #Skulltula entre murciélagos# del Templo del Espíritu hallará #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM] = HintText(CustomMessage("They say that #above a pit of sand# in the Spirit Temple hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich #oberhalb einer Sandgrube# im Geistertempel #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula au dessus du trou sableux du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre un pozo de arena# del Templo del Espíritu otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST] = HintText(CustomMessage("They say that a spider in the #hall of a knight# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne in der #Halle eines Ritters# #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula dans la salle aux neuf trônes du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en el salón de un guerrero# otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH] = HintText(CustomMessage("They say that a spider in the #hall of a knight# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne in der #Halle eines Ritters# #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula dans la salle aux neuf trônes du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula en el salón de un guerrero# otorga #[[1]]#. hintTextTable[RHT_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM] = HintText(CustomMessage("They say that #upon a web of glass# in the Spirit Temple sits a spider holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #auf einer Webe aus Glas# im Geistertempel eine Spinne säße, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une paroi de verre du Temple de l'Esprit# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #sobre una plataforma de cristal# yace una Skulltula que otorga #[[1]]#. @@ -1217,246 +1279,267 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_TEMPLE_HEART] = HintText(CustomMessage("They say that on a #small platform# in the Spirit Temple lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SPIRIT_TEMPLE_MQ_HEART] = HintText(CustomMessage("They say that guarded by a #ring of flame# in the Spirit Temple is #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun past some boulders gaurding silver rupees# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun near four statues# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun near a suspicious chest# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + /*-------------------------- | SHADOW TEMPLE | ---------------------------*/ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# pierces a hall of faces to reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# eine Halle der Gesichter durchdränge und #[[1]]# offenbaren würde.", /*french*/ "Selon moi, l'#oeil de vérité# voit dans les couloirs du Temple de l'Ombre #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# descubrirá un pasillo de facetas con #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_HOVER_BOOTS_CHEST] = HintText(CustomMessage("They say that #Dead Hand in the Shadow Temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #tote Hand im Schattentempel# #[[1]]# hielte.", /*french*/ "Selon moi, le #Poigneur dans le Temple de l'Ombre# cache #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #Mano Muerta del Templo de las Sombras# guarda #[[1]]#. {}, { CustomMessage("They say that a #nether dweller in the Shadow Temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bewohner der Unterwelt im Schattentempel# #[[1]]# besäße.", /*french*/ "Selon moi, le #spectre du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #temido morador del Templo de las Sombras# guarda #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_COMPASS_CHEST] = HintText(CustomMessage("They say that #mummies revealed by the Eye of Truth# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #durch das Auge der Wahrheit offenbarte Mumien# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #Gibdos dans les couloirs# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #momias reveladas por el Ojo de la Verdad# guardan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST] = HintText(CustomMessage("They say that #spinning scythes# protect #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #rotierende Sensen# #[[1]]# schützen würden.", /*french*/ "Selon moi, les #faucheurs danseurs# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #giratorias guadañas# protegen #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST] = HintText(CustomMessage("They say that #invisible blades# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #unsichtbare Klingen# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #faucheurs invisibles# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #hojas invisibles# guardan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST] = HintText(CustomMessage("They say that #invisible blades# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #unsichtbare Klingen# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #faucheurs invisibles# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #hojas invisibles# guardan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST] = HintText(CustomMessage("They say that #falling spikes# block the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fallende Stacheln# den Pfad zu #[[1]]# blockieren würden.", /*french*/ "Selon moi, la #pluie de clous# surplombe #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #pinchos de un techo# conducen a #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST] = HintText(CustomMessage("They say that #falling spikes# block the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fallende Stacheln# den Pfad zu #[[1]]# blockieren würden.", /*french*/ "Selon moi, la #pluie de clous# surplombe #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #pinchos de un techo# conducen a #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST] = HintText(CustomMessage("They say that #falling spikes# block the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fallende Stacheln# den Pfad zu #[[1]]# blockieren würden.", /*french*/ "Selon moi, la #pluie de clous# surplombe #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #pinchos de un techo# conducen a #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST] = HintText(CustomMessage("They say that the #dead roam among invisible spikes# guarding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #herumschweifende Tote inmitten von unsichtbaren Stacheln# #[[1]]# bewachen würden.", /*french*/ "Selon moi, #parmi les clous invisibles# du Temple de l'Ombre se cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #muertos que vagan por pinchos invisibles# protegen #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_WIND_HINT_CHEST] = HintText(CustomMessage("They say that an #invisible chest guarded by the dead# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #von Toten bewachte unsichtbare Truhe# #[[1]]# enthielte.", /*french*/ "Selon moi, le #trésor invisible du cul-de-sac# du Temple de l'Ombre contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #cofre invisible custodiado por los del más allá# contiene #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST] = HintText(CustomMessage("They say that #mummies guarding a ferry# hide #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #eine Fähre bewachende Mumien# #[[1]]# verstecken würden.", /*french*/ "Selon moi, les #Gibdos qui bloquent le traversier# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #momias que protegen un navío# esconden #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST] = HintText(CustomMessage("They say that #mummies guarding a ferry# hide #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #eine Fähre bewachende Mumien# #[[1]]# verstecken würden.", /*french*/ "Selon moi, les #Gibdos qui bloquent le traversier# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #momias que protegen un navío# esconden #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST] = HintText(CustomMessage("They say that #walls consumed by a ball of fire# reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #von einem Feuerball verschlungende Wände# #[[1]]# offenbaren würden.", /*french*/ "Selon moi, le #piège de bois# du Temple de l'Ombre cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #paredes consumidas por una esfera ígnea# revelan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that #walls consumed by a ball of fire# reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #von einem Feuerball verschlungende Wände# #[[1]]# offenbaren würden.", /*french*/ "Selon moi, le #piège de bois# du Temple de l'Ombre cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #paredes consumidas por una esfera ígnea# revelan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_FREESTANDING_KEY] = HintText(CustomMessage("They say that #inside a burning skull# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #innerhalb eines brennenden Schädels# #[[1]]# läge.", /*french*/ "Selon moi, #dans un crâne enflammé# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en el #interior de una calavera en llamas# aguarda #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_COMPASS_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# pierces a hall of faces to reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# eine Halle der Gesichter durchdränge und #[[1]]# offenbaren würde.", /*french*/ "Selon moi, l'#oeil de vérité# voit dans les couloirs du Temple de l'Ombre #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# descubre un pasillo de facetas con #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST] = HintText(CustomMessage("They say that #Dead Hand in the Shadow Temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #tote Hand im Schattentempel# #[[1]]# hielte.", /*french*/ "Selon moi, le #Poigneur dans le Temple de l'Ombre# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Mano Muerta del Templo de las Sombras# guarda #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST] = HintText(CustomMessage("They say that #mummies revealed by the Eye of Truth# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #durch das Auge der Wahrheit offenbarte Mumien# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #Gibdos dans les couloirs# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #momias reveladas por el Ojo de la Verdad# guardan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_MAP_CHEST] = HintText(CustomMessage("They say that #spinning scythes# protect #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #rotierende Sensen# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #faucheurs danseurs# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #giratorias guadañas# protegen #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST] = HintText(CustomMessage("They say that #collecting rupees in a vast cavern# with the Shadow Temple unveils #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Sammeln von Rubinen in einer riesigen Kaverne# im Schattentempel #[[1]]# offenbaren würde.", /*french*/ "Selon moi, les #pièces argentées dans le Temple de l'Ombre# révèlent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, hacerte con las #rupias en una gran caverna# del Templo de las Sombras revela #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST] = HintText(CustomMessage("They say that #falling spikes# block the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fallende Stachel# den Pfad zu #[[1]]# blockieren würden.", /*french*/ "Selon moi, la #pluie de clous# surplombe #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #pinchos de un techo# conducen a #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST] = HintText(CustomMessage("They say that #falling spikes# block the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fallende Stachel# den Pfad zu #[[1]]# blockieren würden.", /*french*/ "Selon moi, la #pluie de clous# surplombe #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #pinchos de un techo# conducen a #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST] = HintText(CustomMessage("They say that #falling spikes# block the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #fallende Stachel# den Pfad zu #[[1]]# blockieren würden.", /*french*/ "Selon moi, la #pluie de clous# surplombe #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #pinchos de un techo# conducen a #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST] = HintText(CustomMessage("They say that the #dead roam among invisible spikes# guarding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #herumschweifende Tote inmitten von unsichtbaren Stacheln# #[[1]]# bewachen würden.", /*french*/ "Selon moi, #parmi les clous invisibles# du Temple de l'Ombre se cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #muertos que vagan por pinchos invisibles# protegen #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that #walls consumed by a ball of fire# reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #von einem Feuerball verschlungende Wände# #[[1]]# offenbaren würden.", /*french*/ "Selon moi, le #piège de bois# du Temple de l'Ombre cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #paredes consumidas por una esfera ígnea# revelan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST] = HintText(CustomMessage("They say that #walls consumed by a ball of fire# reveal #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #von einem Feuerball verschlungende Wände# #[[1]]# offenbaren würden.", /*french*/ "Selon moi, le #piège de bois# du Temple de l'Ombre cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #paredes consumidas por una esfera ígnea# revelan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST] = HintText(CustomMessage("They say that near an #empty pedestal# within the Shadow Temple lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß nahe einem #leeren Sockel# im Schattentempel #[[1]]# läge.", /*french*/ "Selon moi, #près d'un pédestal vide du Temple de l'Ombre# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, cerca de un #vacío pedestal# del Templo de las Sombras yace #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST] = HintText(CustomMessage("They say that #invisible blades# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #unsichtbare Klingen# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #faucheurs invisibles# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unas #hojas invisibles# guardan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST] = HintText(CustomMessage("They say that #invisible blades# guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #unsichtbare Klingen# #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #faucheurs invisibles# du Temple de l'Ombre protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unas #hojas invisibles# guardan #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST] = HintText(CustomMessage("They say that an #invisible chest guarded by the dead# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #von Toten bewachte unsichtbare Truhe# #[[1]]# enthielte.", /*french*/ "Selon moi, le #trésor invisible du cul-de-sac# du Temple de l'Ombre contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #cofre invisible custodiado por los del más allá# contiene #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST] = HintText(CustomMessage("They say that #mummies guarding a ferry# hide #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #eine Fähre bewachende Mumien# #[[1]]# verstecken würden.", /*french*/ "Selon moi, les #Gibdos qui bloquent le traversier# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #momias que protegen un navío# esconden #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST] = HintText(CustomMessage("They say that #mummies guarding a ferry# hide #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #eine Fähre bewachende Mumien# #[[1]]# verstecken würden.", /*french*/ "Selon moi, les #Gibdos qui bloquent le traversier# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #momias que protegen un navío# esconden #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST] = HintText(CustomMessage("They say that #caged near a ship# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #in der Nähe eines Schiffes eingesperrt# #[[1]]# läge.", /*french*/ "Selon moi, #dans une cage près du traversier# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #entre rejas al lado de un navío# yace #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_FREESTANDING_KEY] = HintText(CustomMessage("They say that #behind three burning skulls# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #hinter drei brennenden Schädeln# #[[1]]# läge.", /*french*/ "Selon moi, #derrière trois crânes enflammés# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, tras #tres ardientes calaveras# yace #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_BONGO_BONGO_HEART] = HintText(CustomMessage("They say that #Bongo Bongo# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Bongo Bongo# #[[1]]# besäße.", /*french*/ "Selon moi, #Bongo Bongo# possède #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #Bongo Bongo# porta #[[1]]#. {}, { CustomMessage("They say that the #Phantom Shadow Beast# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Phantomschattenbiest# #[[1]]# besäße.", /*french*/ "Selon moi, le #monstre de l'ombre# possède #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, la #alimaña oscura espectral# porta #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT] = HintText(CustomMessage("They say that #beyond a burning skull# lies a spider with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #jenseits eines brennenden Schädels# eine Spinne läge, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière un crâne enflammé du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #tras una ardiente calavera# yace una Skulltula que otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM] = HintText(CustomMessage("They say that a #spider beyond falling spikes# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne jenseits fallender Stacheln# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au delà de la pluie de clous du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras los pinchos del techo# otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT] = HintText(CustomMessage("They say that #beyond three burning skulls# lies a spider with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #jenseits drei brennender Schädel# eine Spinne läge, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière trois crânes enflammés du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #tras tres ardientes calaveras# yace una Skulltula que otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM] = HintText(CustomMessage("They say that a spider guarded by #invisible blades# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne von #unsichtbaren Klingen# bewacht werde und #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula protégée par les faucheurs invisibles du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula custodiada por hojas invisibles# otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_GS_NEAR_SHIP] = HintText(CustomMessage("They say that a spider near a #docked ship# hoards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne nahe eines #geankerten Schiffs# #[[1]]# horte.", /*french*/ "Selon moi, une #Skulltula près du traversier du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula cercana a un navío# otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM] = HintText(CustomMessage("They say that a #spider beyond falling spikes# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne jenseits fallender Stacheln# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au delà de la pluie de clous du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras los pinchos del techo# otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM] = HintText(CustomMessage("They say that a #spider amidst roaring winds# in the Shadow Temple holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne inmitten stürmischer Winde# im Schattentempel #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près des vents du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula entre ventarrones# del Templo de las Sombras otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_GS_AFTER_WIND] = HintText(CustomMessage("They say that a #spider beneath gruesome debris# in the Shadow Temple hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne unterhalb grauenvoller Trümmer# im Schattentempel #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula sous des débris du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula bajo unos horripilantes escombros# del Templo de las Sombras otorga #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP] = HintText(CustomMessage("They say that a #fallen statue# reveals a spider with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #fallende Statue# eine Spinne enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près de la statue écroulée du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #estatua caída# revelará una Skulltula que otorgue #[[1]]#. hintTextTable[RHT_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS] = HintText(CustomMessage("They say that a #suspended spider# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #hängende Spinne# #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula près du repère du Temple de l'Ombre# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula flotante# del Templo de las Sombras otorga #[[1]]#. @@ -1464,121 +1547,137 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_TEMPLE_HEART] = HintText(CustomMessage("They say that a #heart in the Shadow Temple# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY] = HintText(CustomMessage("They say that an #calling the rain for a sentry guarding a house of the dead# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!.", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY] = HintText(CustomMessage("They say that an #calling the rain on a platform suspended above a bottomless pit# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!.", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun near an invisible chest guarded by the dead# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!.", {QM_RED, QM_GREEN})); + /*-------------------------- | BOTTOM OF THE WELL | ---------------------------*/ hintTextTable[RHT_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth in the well# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit im Brunnen# #[[1]]# offenbare.", /*french*/ "Selon moi, l'#oeil de vérité dans le Puits# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad en el pozo# revela #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST] = HintText(CustomMessage("They say that #gruesome debris# in the well hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #grauenvolle Trümmer# im Brunnen #[[1]]# verbergen würden.", /*french*/ "Selon moi, des #débris dans le Puits# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #horripilantes escombros# del pozo esconden #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth in the well# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit im Brunnen# #[[1]]# offenbare.", /*french*/ "Selon moi, l'#oeil de vérité dans le Puits# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad en el pozo# revela #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_COMPASS_CHEST] = HintText(CustomMessage("They say that a #hidden entrance to a cage# in the well leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #verborgener Eingang zu einem Käfig# im Brunnen zu #[[1]]# führe.", /*french*/ "Selon moi, dans un #chemin caché dans le Puits# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #entrada oculta de una celda# del pozo conduce a #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST] = HintText(CustomMessage("They say that a #spider guarding a cage# in the well protects #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #einen Käfig schützende Spinne# im Brunnen #[[1]]# schütze.", /*french*/ "Selon moi, l'#araignée dans la cage du Puits# protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #araña protegiendo una celda# del pozo guarda #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST] = HintText(CustomMessage("They say that #gruesome debris# in the well hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #grauenvolle Trümmer# im Brunnen #[[1]]# verbergen würde.", /*french*/ "Selon moi, des #débris dans le Puits# cachent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #horripilantes escombros# del pozo esconden #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST] = HintText(CustomMessage("They say that #Dead Hand's invisible secret# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #unsichtbare Geheimnis der toten Hand# #[[1]]# sei.", /*french*/ "Selon moi, le #trésor invisible du Poigneur# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #secreto invisible de la Mano Muerta# esconde #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST] = HintText(CustomMessage("They say that a #royal melody in the well# uncovers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #königliche Melodie im Brunnen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #mélodie royale révèle dans le Puits# #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #melodía real en el pozo# revela #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST] = HintText(CustomMessage("They say that a #royal melody in the well# uncovers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #königliche Melodie im Brunnen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #mélodie royale révèle dans le Puits# #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #melodía real en el pozo# revela #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MAP_CHEST] = HintText(CustomMessage("They say that in the #depths of the well# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß in den #Tiefen des Brunnens# #[[1]]# läge.", /*french*/ "Selon moi, #dans le coeur du Puits# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en las #profundidades del pozo# yace #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST] = HintText(CustomMessage("They say that #perilous pits# in the well guard the path to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #gefährliche Gruben# im Brunnen den Pfad zu #[[1]]# bewachen würden.", /*french*/ "Selon moi, #trois trous# dans le Puits protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #peligrosos fosos# del pozo conducen a #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST] = HintText(CustomMessage("They say that #locked in a cage# in the well lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #in einem Käfig eingeschlossen# im Brunnen #[[1]]# läge.", /*french*/ "Selon moi, #dans une cage# du Puits gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #entre rejas# en el pozo yace #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_FREESTANDING_KEY] = HintText(CustomMessage("They say that #inside a coffin# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #in einem Sarg# #[[1]]# verborgen läge.", /*french*/ "Selon moi, dans #un cercueil# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en el #interior de un ataúd# yace #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST] = HintText(CustomMessage("They say that a #royal melody in the well# uncovers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #königliche Melodie im Brunnen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #mélodie royale révèle dans le Puits# #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #melodía real en el pozo# revela #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST] = HintText(CustomMessage("They say that an #army of the dead# in the well guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Armee der Toten# im Brunnen #[[1]]# bewachen würde.", /*french*/ "Selon moi, l'#armée des morts# dans le Puits protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #ejército del más allá# del pozo guarda #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY] = HintText(CustomMessage("They say that #Dead Hand's explosive secret# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #explosive Geheimnis der toten Hand# #[[1]]# sei.", /*french*/ "Selon moi, le #secret explosif du Poigneur# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #explosivo secreto de la Mano Muerta# esconde #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY] = HintText(CustomMessage("They say that an #invisible path in the well# leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #unsichtbarer Pfad im Brunnen# zu #[[1]]# führe.", /*french*/ "Selon moi, dans un #chemin caché dans le Puits# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #camino invisible del pozo# conduce a #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE] = HintText(CustomMessage("They say that a #spider locked in a cage# in the well holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einem Käfig eingeschlossene Spinne# im Brunnen #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans une cage au fonds du Puits# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enjaulada# del pozo otorga #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM] = HintText(CustomMessage("They say that an #invisible path in the well# leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #unsichtbarer Pfad im Brunnen# zu #[[1]]# führe.", /*french*/ "Selon moi, une #Skulltula dans le chemin invisible au fonds du Puits# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #camino invisible del pozo# conduce a una Skulltula que otorga #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM] = HintText(CustomMessage("They say that a #spider locked in a crypt# within the well guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einer Krypta eingeschlossene Spinne# im Brunnen #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula embarrée dans la crypte au fonds du Puits# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula encerrada en una cripta# del pozo otorga #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT] = HintText(CustomMessage("They say that a #gauntlet of invisible spiders# protects #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Herausforderung unsichtbarer Spinnen# #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula protégée par les araignées invisibles au fonds du Puits# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unas #arañas invisibles# custodian una Skulltula que otorga #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM] = HintText(CustomMessage("They say that a #spider crawling near the dead# in the well holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #nahe der Toten kriechende Spinne# im Brunnen #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près des cercueils au fonds du Puits# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula junto a los muertos# del pozo otorga #[[1]]#. hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM] = HintText(CustomMessage("They say that a #spider locked in a crypt# within the well guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einer Krypta eingeschlossene Spinne# im Brunnen #[[1]]# bewache.", /*french*/ "Selon moi, une #Skulltula embarrée dans la crypte au fonds du Puits# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula encerrada en una cripta# del pozo otorga #[[1]]#. @@ -1586,76 +1685,97 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_BOTTOM_OF_THE_WELL_HEART] = HintText(CustomMessage("They say that a #heart within the well# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_BOTTOM_OF_THE_WELL_RUPEE] = HintText(CustomMessage("They say that a #hidden path through the floor# the well# leads to #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun a dead end# within the well reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!.", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun in an empty cell# within the well reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!.", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun a dead end# within the well reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!.", {QM_RED, QM_GREEN})); + + /*-------------------------- | ICE CAVERN | ---------------------------*/ hintTextTable[RHT_ICE_CAVERN_MAP_CHEST] = HintText(CustomMessage("They say that #winds of ice# surround #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Eiswinde# #[[1]]# umgeben würden.", /*french*/ "Selon moi, #figé dans la glace rouge# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #heladas borrascas# rodean #[[1]]#. hintTextTable[RHT_ICE_CAVERN_COMPASS_CHEST] = HintText(CustomMessage("They say that a #wall of ice# protects #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Eiswand# #[[1]]# schütze.", /*french*/ "Selon moi, #un mur de glace rouge# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #gélida pared# protege #[[1]]#. hintTextTable[RHT_ICE_CAVERN_IRON_BOOTS_CHEST] = HintText(CustomMessage("They say that a #monster in a frozen cavern# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Monster in einer gefrorenen Kaverne# #[[1]]# bewache.", /*french*/ "Selon moi, le #monstre de la caverne de glace# protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #monstruo de una helada caverna# guarda #[[1]]#. hintTextTable[RHT_ICE_CAVERN_FREESTANDING_POH] = HintText(CustomMessage("They say that a #wall of ice# protects #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Eiswand# #[[1]]# schütze.", /*french*/ "Selon moi, un #mur de glace rouge# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #gélida pared# protege #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_IRON_BOOTS_CHEST] = HintText(CustomMessage("They say that a #monster in a frozen cavern# guards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Monster in einer gefrorenen Kaverne# #[[1]]# bewache.", /*french*/ "Selon moi, le #monstre de la caverne de glace# protège #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #monstruo de una helada caverna# guarda #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_COMPASS_CHEST] = HintText(CustomMessage("They say that #winds of ice# surround #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Eiswinde# #[[1]]# umgeben würden.", /*french*/ "Selon moi, #entouré de vent glacial# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #heladas borrascas# rodean #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_MAP_CHEST] = HintText(CustomMessage("They say that a #wall of ice# protects #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Eiswand# #[[1]]# schütze.", /*french*/ "Selon moi, #un mur de glace rouge# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #gélida pared# protege #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_FREESTANDING_POH] = HintText(CustomMessage("They say that #winds of ice# surround #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Eiswinde# #[[1]]# umgeben würden.", /*french*/ "Selon moi, #entouré de vent glacial# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #heladas borrascas# rodean #[[1]]#. hintTextTable[RHT_ICE_CAVERN_GS_PUSH_BLOCK_ROOM] = HintText(CustomMessage("They say that a #spider above icy pits# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne oberhalb eisiger Gruben# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus d'un goufre glacial# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre gélidos vacíos# otorga #[[1]]#. hintTextTable[RHT_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM] = HintText(CustomMessage("They say that #spinning ice# guards a spider holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #rotierendes Eis# eine Spinne beschütze, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près de deux lames de glace# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #témpanos giratorios# custodian una Skulltula que otorga #[[1]]#. hintTextTable[RHT_ICE_CAVERN_GS_HEART_PIECE_ROOM] = HintText(CustomMessage("They say that a #spider behind a wall of ice# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne hinter einer Eiswand# #[[1]]# verstecke.", /*french*/ "Selon moi, une #Skulltula derrière un mur de glace# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras una gélida pared# otorga #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_GS_SCARECROW] = HintText(CustomMessage("They say that a #spider above icy pits# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne oberhalb eisiger Gruben# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus d'un goufre glacial# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula sobre gélidos vacíos# otorga #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_GS_ICE_BLOCK] = HintText(CustomMessage("They say that a #web of ice# surrounds a spider with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Webe aus Eis# eine Spinne umgebe, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula protégée d'une toile glacée# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #gélida red# rodea a una Skulltula que otorga #[[1]]#. hintTextTable[RHT_ICE_CAVERN_MQ_GS_RED_ICE] = HintText(CustomMessage("They say that a #spider in fiery ice# hoards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne in feurigem Eis# #[[1]]# horte.", /*french*/ "Selon moi, une #Skulltula figée dans la glace rouge# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras un ardiente hielo# otorga #[[1]]#. @@ -1663,379 +1783,413 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "", /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_ICE_CAVERN_HEART] = HintText(CustomMessage("They say that atop on a #frozen pillar# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ICE_CAVERN_RUPEE] = HintText(CustomMessage("They say that a #rupee in a frozen cavern# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ICE_CAVERN_ENTRANCE_STORMS_FAIRY] = HintText(CustomMessage("They say that #calling the rain near the entrance to a frozen cave# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + // /*spanish*/ Según dicen, una #Skulltula tras un ardiente hielo# otorga #[[1]]#. + /*-------------------------- | GERUDO TRAINING GROUNDS | ---------------------------*/ hintTextTable[RHT_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST] = HintText(CustomMessage("They say that a #blinded eye in the Gerudo Training Grounds# drops #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #erblindetes Auge in der Gerudo-Trainingsarena# #[[1]]# fallen ließe.", /*french*/ "Selon moi, l'#Oeil dans le Gymnase Gerudo# voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar un ojo en el Centro de Instrucción Gerudo# revela #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST] = HintText(CustomMessage("They say that a #blinded eye in the Gerudo Training Grounds# drops #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #erblindetes Auge in der Gerudo-Trainingsarena# #[[1]]# fallen ließe.", /*french*/ "Selon moi, l'#Oeil dans le Gymnase Gerudo# voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar un ojo en el Centro de Instrucción Gerudo# revela #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_STALFOS_CHEST] = HintText(CustomMessage("They say that #soldiers walking on shifting sands# in the Gerudo Training Grounds guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #auf veränderlichen Sanden laufende Soldaten# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #squelettes# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #soldados en resbaladizas arenas# del Centro de Instrucción Gerudo protegen #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_BEAMOS_CHEST] = HintText(CustomMessage("They say that #reptilian warriors# in the Gerudo Training Grounds protect #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reptilienartige Krieger# in der Gerudo-Trainingsarena #[[1]]# schützen würden.", /*french*/ "Selon moi, les #lézards# dans le Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #unos escamosos guerreros# del Centro de Instrucción Gerudo protegen #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# in the Gerudo Training Grounds reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# in der Gerudo-Trainingsarena #[[1]]# enthülle.", /*french*/ "Selon moi, #bien caché# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Centro de Instrucción Gerudo revela #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST] = HintText(CustomMessage("They say that the first prize of #the thieves' training# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der erste Preis des #Diebestrainings# #[[1]]# sei.", /*french*/ "Selon moi, le #premier trésor du Gymnase Gerudo# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el primer premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST] = HintText(CustomMessage("They say that the second prize of #the thieves' training# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der zweite Preis des #Diebestrainings# #[[1]]# sei.", /*french*/ "Selon moi, le #deuxième trésor du Gymnase Gerudo# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el segundo premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST] = HintText(CustomMessage("They say that the third prize of #the thieves' training# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der dritte Preis des #Diebestrainings# #[[1]]# sei.", /*french*/ "Selon moi, le #troisième trésor du Gymnase Gerudo# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el tercer premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST] = HintText(CustomMessage("They say that the #Song of Time# in the Gerudo Training Grounds leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# in der Gerudo-Trainingsarena zu #[[1]]# führe.", /*french*/ "Selon moi, le #chant du temps# révèle dans le Gymnase Gerudo #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Canción del Tiempo# en el Centro de Instrucción Gerudo conduce a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST] = HintText(CustomMessage("They say that the #Song of Time# in the Gerudo Training Grounds leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# in der Gerudo-Trainingsarena zu #[[1]]# führe.", /*french*/ "Selon moi, le #chant du temps# révèle dans le Gymnase Gerudo #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Canción del Tiempo# en el Centro de Instrucción Gerudo conduce a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST] = HintText(CustomMessage("They say that #fiery foes# in the Gerudo Training Grounds guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #feurige Feinde# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #limaces de feu# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #flamígeros enemigos# del Centro de Instrucción Gerudo guardan #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST] = HintText(CustomMessage("They say that #engulfed in flame# where thieves train lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #von Flammen umschlungen# wo Diebe trainieren #[[1]]# läge.", /*french*/ "Selon moi, le #trésor enflammé# du Gymnase Gerudo est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, donde entrenan las bandidas #entre llamas# yace #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST] = HintText(CustomMessage("They say that thieves #blind four faces# to find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß Diebe #vier Gesichter erblinden# würden und #[[1]]# fänden.", /*french*/ "Selon moi, l'#épreuve d'archerie# du Gymnase Gerudo donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las bandidas #ciegan cuatro bustos# para hallar #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST] = HintText(CustomMessage("They say that thieves #blind four faces# to find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß Diebe #vier Gesichter erblinden# würden und #[[1]]# fänden.", /*french*/ "Selon moi, l'#épreuve d'archerie# du Gymnase Gerudo donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las bandidas #ciegan cuatro bustos# para hallar #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST] = HintText(CustomMessage("They say that #before a block of silver# thieves can find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #vor einem Block aus Silber# Diebe #[[1]]# finden könnten.", /*french*/ "Selon moi, #près d'un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #ante un plateado bloque# las bandidas hallan #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST] = HintText(CustomMessage("They say that a #feat of strength# rewards thieves with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Meisterstück der Stärke# Diebe mit #[[1]]# belohnen würde.", /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST] = HintText(CustomMessage("They say that a #feat of strength# rewards thieves with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Meisterstück der Stärke# Diebe mit #[[1]]# belohnen würde.", /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST] = HintText(CustomMessage("They say that a #feat of strength# rewards thieves with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Meisterstück der Stärke# Diebe mit #[[1]]# belohnen würde.", /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST] = HintText(CustomMessage("They say that a #feat of strength# rewards thieves with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Meisterstück der Stärke# Diebe mit #[[1]]# belohnen würde.", /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. + hintTextTable[RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY] = HintText(CustomMessage("They say that #calling the rain near the entrance to the Gerudo Training Grounds# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GERUDO_TRAINING_GROUND_FREESTANDING_KEY] = HintText(CustomMessage("They say that the #Song of Time# in the Gerudo Training Grounds leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# in der Gerudo-Trainingsarena zu #[[1]]# führe.", /*french*/ "Selon moi, le #chant du temps# révèle dans le Gymnase Gerudo #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Canción del Tiempo# en el Centro de Instrucción Gerudo conduce a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST] = HintText(CustomMessage("They say that #thieves prepare for training# with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich #Diebe auf das Training vorbereiteten# mit #[[1]]#.", /*french*/ "Selon moi, dans #l'entrée du Gymnase Gerudo# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #bandidas se instruyen# con #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST] = HintText(CustomMessage("They say that #thieves prepare for training# with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich #Diebe auf das Training vorbereiteten# mit #[[1]]#.", /*french*/ "Selon moi, dans #l'entrée du Gymnase Gerudo# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #bandidas se instruyen# con #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST] = HintText(CustomMessage("They say that #soldiers walking on shifting sands# in the Gerudo Training Grounds guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #auf veränderlichen Sanden laufende Soldaten# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #squelettes# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #soldados en resbaladizas arenas# del Centro de Instrucción Gerudo protegen #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST] = HintText(CustomMessage("They say that #before a block of silver# thieves can find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #vor einem Block aus Silber# Diebe #[[1]]# finden könnten.", /*french*/ "Selon moi, #près d'un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #ante un plateado bloque# las bandidas hallan #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST] = HintText(CustomMessage("They say that thieves #blind four faces# to find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß Diebe #vier Gesichter erblinden# würden und #[[1]]# fänden.", /*french*/ "Selon moi, l'#épreuve d'archerie# du Gymnase Gerudo donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las bandidas #ciegan cuatro bustos# para hallar #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST] = HintText(CustomMessage("They say that #engulfed in flame# where thieves train lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #von Flammen umschlungen# wo Diebe trainieren #[[1]]# läge.", /*french*/ "Selon moi, le #trésor enflammé# du Gymnase Gerudo est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, donde entrenan las bandidas #entre llamas# yace #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST] = HintText(CustomMessage("They say that #fiery foes# in the Gerudo Training Grounds guard #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #feurige Feinde# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #ennemis de feu# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #flamígeros enemigos# del Centro de Instrucción Gerudo guardan #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST] = HintText(CustomMessage("They say that #reptilian warriors# in the Gerudo Training Grounds protect #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reptilienartige Krieger# in der Gerudo-Trainingsarena #[[1]]# schützen würden.", /*french*/ "Selon moi, les #lézards# dans le Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #unos escamosos guerreros# del Centro de Instrucción Gerudo protegen #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST] = HintText(CustomMessage("They say that a #path of fire# leads thieves to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Pfad des Feuers# Diebe zu #[[1]]# führe.", /*french*/ "Selon moi, dans le #chemin enflammé# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #camino de fuego# conduce a las bandidas a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST] = HintText(CustomMessage("They say that the first prize of #the thieves' training# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der erste Preis des #Diebestrainings# #[[1]]# sei.", /*french*/ "Selon moi, le #premier trésor du Gymnase Gerudo# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el primer premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST] = HintText(CustomMessage("They say that a #path of fire# leads thieves to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Pfad des Feuers# Diebe zu #[[1]]# führe.", /*french*/ "Selon moi, dans le #chemin enflammé# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #camino de fuego# conduce a las bandidas a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST] = HintText(CustomMessage("They say that the third prize of #the thieves' training# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der dritte Preis des #Diebestrainings# #[[1]]# sei.", /*french*/ "Selon moi, le #troisième trésor du Gymnase Gerudo# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el tercer premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST] = HintText(CustomMessage("They say that the second prize of #the thieves' training# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der zweite Preis des #Diebestrainings# #[[1]]# sei.", /*french*/ "Selon moi, le #deuxième trésor du Gymnase Gerudo# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el segundo premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# in the Gerudo Training Grounds reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# in der Gerudo-Trainingsarena #[[1]]# enthülle.", /*french*/ "Selon moi, #bien caché# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Centro de Instrucción Gerudo revela #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST] = HintText(CustomMessage("They say that a #feat of strength# rewards thieves with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Meisterstück der Stärke# Diebe mit #[[1]]# belohnen würde.", /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. + hintTextTable[RHT_GERUDO_TRAINING_GROUNDS_HEART] = HintText(CustomMessage("They say that a watching a #trial with Dinalfos# is #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | GANONS CASTLE | ---------------------------*/ hintTextTable[RHT_GANONS_TOWER_BOSS_KEY_CHEST] = HintText(CustomMessage("They say that the #Evil King# hoards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #böse König# #[[1]]# horte.", /*french*/ "Selon moi, le #Roi du Mal# possède #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Rey del Mal# acapara #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_FOREST_TRIAL_CHEST] = HintText(CustomMessage("They say that the #test of the wilds# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Wildnis# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des bois# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de la naturaleza# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST] = HintText(CustomMessage("They say that the #test of the seas# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Meere# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des mers# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del mar# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST] = HintText(CustomMessage("They say that the #test of the seas# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Meere# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des mers# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del mar# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST] = HintText(CustomMessage("They say that #music in the test of darkness# unveils #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Musik in der Prüfung des Dunkelheit# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #musique dans l'épreuve des ténèbres# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #música en la prueba de la oscuridad# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST] = HintText(CustomMessage("They say that #light in the test of darkness# unveils #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Licht in der Prüfung der Dunkelheit# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #lumière dans l'épreuve des ténèbres# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #luz en la prueba de la oscuridad# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST] = HintText(CustomMessage("They say that the #test of the sands# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Sande# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des sables# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de las arenas# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST] = HintText(CustomMessage("They say that the #test of the sands# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Sande# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des sables# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de las arenas# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST] = HintText(CustomMessage("They say that the #test of radiance# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung des Glanzes# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve du ciel# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del resplandor# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST] = HintText(CustomMessage("They say that #music in the test of radiance# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Musik in der Prüfung des Glanzes# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #musique dans l'épreuve du ciel# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #música en la prueba del resplandor# revela #[[1]]#. + hintTextTable[RHT_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun for a sentry in the test of the sands# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GANONS_CASTLE_SCRUBS_FAIRY] = HintText(CustomMessage("They say that within a #sanctuary before the final trial# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST] = HintText(CustomMessage("They say that the #test of the seas# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Meere# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des mers# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba del mar# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST] = HintText(CustomMessage("They say that the #test of the wilds# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Wildnis# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des bois# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de la naturaleza# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST] = HintText(CustomMessage("They say that the #test of the wilds# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Wildnis# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des bois# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de la naturaleza# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST] = HintText(CustomMessage("They say that #music in the test of radiance# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Musik in der Prüfung des Glanzes# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, la #musique dans l'épreuve du ciel# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #música en la prueba del resplandor# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST] = HintText(CustomMessage("They say that the #test of darkness# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Dunkelheit# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des ténèbres# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de la oscuridad# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST] = HintText(CustomMessage("They say that the #test of darkness# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Dunkelheit# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des ténèbres# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de la oscuridad# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST] = HintText(CustomMessage("They say that #reflected light in the test of the sands# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reflektiertes Licht in der Prüfung der Sande# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #soleil dans l'épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #reflejar la luz en la prueba de las arenas# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST] = HintText(CustomMessage("They say that #reflected light in the test of the sands# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reflektiertes Licht in der Prüfung der Sande# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #soleil dans l'épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #reflejar la luz en la prueba de las arenas# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST] = HintText(CustomMessage("They say that #reflected light in the test of the sands# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reflektiertes Licht in der Prüfung der Sande# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #soleil dans l'épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #reflejar la luz en la prueba de las arenas# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST] = HintText(CustomMessage("They say that #reflected light in the test of the sands# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reflektiertes Licht in der Prüfung der Sande# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #soleil dans l'épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #reflejar la luz en la prueba de las arenas# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST] = HintText(CustomMessage("They say that #reflected light in the test of the sands# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reflektiertes Licht in der Prüfung der Sande# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #soleil dans l'épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #reflejar la luz en la prueba de las arenas# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST] = HintText(CustomMessage("They say that #reflected light in the test of the sands# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #reflektiertes Licht in der Prüfung der Sande# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, le #soleil dans l'épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #reflejar la luz en la prueba de las arenas# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY] = HintText(CustomMessage("They say that the #test of the wilds# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Prüfung der Wildnis# #[[1]]# enthielte.", /*french*/ "Selon moi, l'#épreuve des bois# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #prueba de la naturaleza# brinda #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_DEKU_SCRUB_RIGHT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_DEKU_SCRUB_LEFT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT] = HintText(CustomMessage("They say that #scrubs in Ganon's Castle# sell #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Dekus in Ganons Schloß# #[[1]]# verkaufen würden.", /*french*/ "Selon moi, les #pestes Mojo dans le Château de Ganon# vendent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_POT_GANONS_CASTLE] = HintText(CustomMessage("They say that a #pot in Ganon's Castle# contains #[[1]]#.", /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GANONS_CASTLE_HEART] = HintText(CustomMessage("They say that a #heart in Ganon's Castle# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + } } diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index ad9fad01197..cdbbb5329a6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -171,1320 +171,1323 @@ void StaticData::HintTable_Init_Exclude_Overworld() { // /*spanish*/ Según dicen, bajo un #hoyo de un laberinto forestal# yace #[[1]]#. hintTextTable[RHT_DMT_STORMS_GROTTO_CHEST] = HintText(CustomMessage("They say that #hole flooded with rain on a mountain# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #durch Regen geflutetes Loch auf einem Berg# #[[1]]# enthielte.", /*french*/ "Selon moi, la #grotte inondée de pluie sur la montagne# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo un #hoyo de una montaña inundado de lluvia# yace #[[1]]#. hintTextTable[RHT_DMT_STORMS_GROTTO_FISH] = HintText(CustomMessage("They say that #fish in a hole flooded with rain on a mountain# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Fisch in einem durch Regen geflutetes Loch auf einem Berg# #[[1]]# enthielte.", /*french*/ "Selon moi, la #grotte inondée de pluie sur la montagne# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo un #hoyo de una montaña inundado de lluvia# yace #[[1]]#. hintTextTable[RHT_DMC_UPPER_GROTTO_CHEST] = HintText(CustomMessage("They say that a #hole in a volcano# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Loch in einem Vulkan# #[[1]]# enthielte.", /*french*/ "Selon moi, la #grotte dans le volcan# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo el #hoyo de un volcán# yace #[[1]]#. hintTextTable[RHT_DMC_UPPER_GROTTO_FISH] = HintText(CustomMessage("They say that a #fish in a hole in a volcano# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Fisch in einem Loch in einem Vulkan# #[[1]]# enthielte.", /*french*/ "Selon moi, la #grotte dans le volcan# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo el #hoyo de un volcán# yace #[[1]]#. hintTextTable[RHT_TOT_MASTER_SWORD] = HintText(CustomMessage("They say that a #pedestal in a temple# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich auf einem #Podest in einem Tempel# #[[1]]# befände.", /*french*/ "Selon moi, un #piédestal dans un temple# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #pedestal en un templo# sostiene #[[1]]#. hintTextTable[RHT_TOT_LIGHT_ARROWS_CUTSCENE] = HintText(CustomMessage("They say that the #final gift of a princess# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #letzte Geschenk einer Prinzessin# #[[1]]# sei.", /*french*/ "Selon moi, le #cadeau d'adieu de la princesse# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #obsequio final de la princesa# se trata de #[[1]]#. hintTextTable[RHT_LW_GIFT_FROM_SARIA] = HintText(CustomMessage("They say that #Saria's Gift# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Salias Geschenk# #[[1]]# sei.", /*french*/ "Selon moi, le #cadeau de Saria# est #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, el #regalo de Saria# se trata de #[[1]]#. {}, { CustomMessage("They say that a #potato hoarder# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Kartoffelhortender# #[[1]]# besäße.", /*french*/ "Selon moi, le #panini mélodieux# est en fait #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, cierta #jovencita verde# concede #[[1]]#. CustomMessage("They say that a rooty tooty #flutey cutey# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #musikalische Kartoffel# #[[1]]# schenke.", /*french*/ "Selon moi, la #patate musicale# est en fait #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, una #gran amiga# concede #[[1]]#. hintTextTable[RHT_ZF_GREAT_FAIRY_REWARD] = HintText(CustomMessage("They say that the #fairy of winds# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Fee der Winde# #[[1]]# besäße.", /*french*/ "Selon moi, la #fée du vent# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #hada del viento# brinda #[[1]]#. hintTextTable[RHT_HC_GREAT_FAIRY_REWARD] = HintText(CustomMessage("They say that the #fairy of fire# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Fee des Feuers# #[[1]]# besäße.", /*french*/ "Selon moi, la #fée du feu# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #hada del fuego# brinda #[[1]]#. hintTextTable[RHT_COLOSSUS_GREAT_FAIRY_REWARD] = HintText(CustomMessage("They say that the #fairy of love# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Fee der Liebe# #[[1]]# besäße.", /*french*/ "Selon moi, la #fée de l'amour# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #hada del amor# brinda #[[1]]#. hintTextTable[RHT_DMT_GREAT_FAIRY_REWARD] = HintText(CustomMessage("They say that a #magical fairy# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #magische Fee# #[[1]]# schenke.", /*french*/ "Selon moi, la #fée de la magie# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #hada mágica# brinda #[[1]]#. hintTextTable[RHT_DMC_GREAT_FAIRY_REWARD] = HintText(CustomMessage("They say that a #magical fairy# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #magische Fee# #[[1]]# schenke.", /*french*/ "Selon moi, la #fée de la magie# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #hada mágica# brinda #[[1]]#. hintTextTable[RHT_OGC_GREAT_FAIRY_REWARD] = HintText(CustomMessage("They say that the #fairy of strength# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Fee der Stärke# #[[1]]# besäße.", /*french*/ "Selon moi, la #fée de la force# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #hada de la fuerza# brinda #[[1]]#. hintTextTable[RHT_SONG_FROM_IMPA] = HintText(CustomMessage("They say that #deep in a castle#, Impa teaches #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #tief in einem Schloß#, Impa #[[1]]# lehre.", /*french*/ "Selon moi, #la gardienne de la princesse# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en el #jardín del castillo Impa enseña# #[[1]]#. hintTextTable[RHT_SONG_FROM_MALON] = HintText(CustomMessage("They say that #a farm girl# sings #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Mädchen des Landes# #[[1]]# singe.", /*french*/ "Selon moi, la #fillette de la ferme# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #chica rupestre# canta #[[1]]#. hintTextTable[RHT_SONG_FROM_SARIA] = HintText(CustomMessage("They say that #deep in the forest#, Saria teaches #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #tief im Wald#, Salia #[[1]]# lehre.", /*french*/ "Selon moi, la #fille de la forêt# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, al #fondo del bosque# Saria enseña #[[1]]#. hintTextTable[RHT_SONG_FROM_WINDMILL] = HintText(CustomMessage("They say that a man #in a windmill# is obsessed with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Mann #in einer Windmühle# von #[[1]]# besessen sei.", /*french*/ "Selon moi, l'#homme du moulin# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #hombre del molino# está obsesionado con #[[1]]#. hintTextTable[RHT_HC_MALON_EGG] = HintText(CustomMessage("They say that a #girl looking for her father# gives #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #nach ihrem Vater suchenden Mädchen# #[[1]]# gäbe.", /*french*/ "Selon moi, la #fillette qui cherche son père# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #chica en busca de su padre# otorga #[[1]]#. hintTextTable[RHT_HC_ZELDAS_LETTER] = HintText(CustomMessage("They say that a #princess in a castle# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Prinzessin in einem Schloß# #[[1]]# schenke.", /*french*/ "Selon moi, la #princesse dans le château# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #princesa de un castillo# otorga #[[1]]#. hintTextTable[RHT_ZD_DIVING_MINIGAME] = HintText(CustomMessage("They say that those who #dive for Zora rupees# will find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß jene, welche nach den #Rubinen der Zora tauchen# #[[1]]# fänden.", /*french*/ "Selon moi, ceux qui #plongent pour des rubis Zora# trouveront #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, aquellos que se #sumergan por las rupias zora# encontrarán #[[1]]#. {}, { CustomMessage("They say that an #unsustainable business model# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #unwirtschaftliches Geschäftsmodell# #[[1]]# schenke.", /*french*/ "Selon moi, le #mauvais modèle d'affaires# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #mal modelo de negocio# premia con #[[1]]#. hintTextTable[RHT_LH_CHILD_FISHING] = HintText(CustomMessage("They say that #fishing in youth# bestows #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Fischen in der Jugend# #[[1]]# verleihe.", /*french*/ "Selon moi, #pêcher dans sa jeunesse# promet #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #pescar en la juventud# conduce a #[[1]]#. hintTextTable[RHT_LH_POND_FISH] = HintText(CustomMessage("They say that #hitting the pond# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Fischen im Teich# #[[1]]# enthülle.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_LH_HYRULE_LOACH] = HintText(CustomMessage("They say that #fishing the hyrule loach# will give you #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Fischen der hylianischen Schmerle# #[[1]]# einbrächte.", /*french*/ "Selon moi, !!! #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, si #pescas a la Locha de Hyrule# encontrarás #[[1]]#. {}, { CustomMessage("They say that #fishing the legend# bestows #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Fischen der Legende# #[[1]]# verleihe.", /*french*/ "Selon moi, !!! #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, #pescar a la leyenda# conduce a #[[1]]#. hintTextTable[RHT_LH_ADULT_FISHING] = HintText(CustomMessage("They say that #fishing in maturity# bestows #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Fischen im Alter# #[[1]]# verleihe.", /*french*/ "Selon moi, #pêcher dans sa maturité# promet #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #pescar en la madurez# conduce a #[[1]]#. hintTextTable[RHT_LH_LAB_DIVE] = HintText(CustomMessage("They say that a #diving experiment# is rewarded with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Tauchexperiment# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, l'#expérience de plongée# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #bucear para un experimento# se premia con #[[1]]#. // RANDOTODO: needs translation - hintTextTable[RHT_ZD_FISH] = HintText(CustomMessage("They say that a #fish by a waterfall# hoards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_ZD_FISH] = HintText(CustomMessage("They say that a #fish by a waterfall# hoards #[[1]]#.", + /*german*/ "Man erzählt sich, daß ein #Fisch nahe eines Wasserfalls# #[[1]]# horte.", + /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); + // /*spanish*/ Según dicen, #[[1]]#. hintTextTable[RHT_GC_ROLLING_GORON_AS_ADULT] = HintText(CustomMessage("They say that #reassuring a young Goron# is rewarded with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Beruhigen eines jungen Goronen# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, #rassurer un jeune Goron# donne #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #calmar a un joven Goron# otorga #[[1]]#. {}, { CustomMessage("They say that #comforting yourself# provides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Ermutigung von einem Selbst# #[[1]]# einbrächte.", /*french*/ "Selon moi, se #réconforter soi-même# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, #confrontarte a ti mismo# otorga #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE] = HintText(CustomMessage("They say that the #first explosive prize# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #erste explosive Preis# #[[1]]# sei.", /*french*/ "Selon moi, le #premier prix explosif# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #primer premio explosivo# se trata de #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE] = HintText(CustomMessage("They say that the #second explosive prize# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #zweite explosive Preis# #[[1]]# sei.", /*french*/ "Selon moi, le #deuxième prix explosif# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #segundo premio explosivo# se trata de #[[1]]#. hintTextTable[RHT_MARKET_LOST_DOG] = HintText(CustomMessage("They say that #rescuing Richard the Dog# is rewarded with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Rettung des Hundes Richard# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, #retrouver Kiki le chien# promet #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #rescatar al perrito Ricardo# conduce a #[[1]]#. {}, { CustomMessage("They say that #puppy lovers# will find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Welpenliebhaber# #[[1]]# fänden.", /*french*/ "Selon moi, les #amoureux canins# trouveront #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, los #amantes caninos# encontrarán #[[1]]#. hintTextTable[RHT_LW_OCARINA_MEMORY_GAME] = HintText(CustomMessage("They say that #playing an Ocarina in Lost Woods# is rewarded with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Spielen der Okarina in den verlorenen Wäldern# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, #jouer l'ocarina dans les Bois Perdus# donne #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #tocar la ocarina en el Bosque Perdido# otorga #[[1]]#. {}, { CustomMessage("They say that the prize for a #game of Simon Says# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der Preis für eine Partie #Simon sagt# #[[1]]# sei.", /*french*/ "Selon moi, la #récompense de Jean Dit# est #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #repetir ciertas melodías# otorga #[[1]]#. CustomMessage("They say that a #child sing-a-long# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #jungen Flötisten# #[[1]]# besäßen.", /*french*/ "Selon moi, les #jeunes flûtistes# donnent #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, #tocar junto a otros# otorga #[[1]]#. hintTextTable[RHT_KAK_10_GOLD_SKULLTULA_REWARD] = HintText(CustomMessage("They say that slaying #10 Gold Skulltulas# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das Besiegen von #10 Goldenen Skulltulas# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, détruire #10 Skulltulas d'or# donne #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #exterminar 10 skulltulas doradas# revela #[[1]]#. {}, { CustomMessage("They say that #10 bug badges# rewards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #10 Käferabzeichen# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, #10 écussons# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #10 medallas de insectos# otorgan #[[1]]#. CustomMessage("They say that #10 spider souls# yields #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #10 Spinnenseelen# #[[1]]# einbrächten.", /*french*/ "Selon moi, #10 âmes# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, #10 almas de araña# otorgan #[[1]]#. CustomMessage("They say that #10 auriferous arachnids# lead to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #10 goldhaltige Arachniden# zu #[[1]]# führen würden.", /*french*/ "Selon moi, #10 arachnides aurifères# donnent #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, #10 arácnidos auríferos# otorgan #[[1]]#. hintTextTable[RHT_KAK_MAN_ON_ROOF] = HintText(CustomMessage("They say that a #rooftop wanderer# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Dachwanderer# #[[1]]# besäße.", /*french*/ "Selon moi, une #rencontre sur un toit# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #alguien sobre un tejado# otorga #[[1]]#. hintTextTable[RHT_ZR_MAGIC_BEAN_SALESMAN] = HintText(CustomMessage("They say that a #bean seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bohnenverkäufer# #[[1]]# offeriere.", /*french*/ "Selon moi, le #marchand de haricots magiques# vend en fait #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, el #vendedor de judías# ofrece #[[1]]#. {}, { CustomMessage("They say that a seller of #colorful crops# has #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Verkäufer #bunter Ernte# #[[1]]# besäße.", /*french*/ "Selon moi, le #marchand de légumes# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el vendedor de un #colorido cultivo# ofrece #[[1]]#. hintTextTable[RHT_ZR_FROGS_IN_THE_RAIN] = HintText(CustomMessage("They say that #frogs in a storm# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Frösche im Sturm# #[[1]]# schenken würden.", /*french*/ "Selon moi, #des grenouilles mouillées# donnent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, las #ancas bajo la tormenta# otorgan #[[1]]#. hintTextTable[RHT_ZR_FROGS_ZELDAS_LULLABY] = HintText(CustomMessage("They say that after hearing #Zelda's Lullaby, the frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Frösche nach dem Hören von Zeldas Wiegenlied# #[[1]]# schenken würden.", /*french*/ "Selon moi, à l'écoute de #la berceuse de Zelda, les grenouilles# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, después de escuchar #la Nana de Zelda, las ranas# regalan #[[1]]#. {}, { CustomMessage("They say that #sleepy frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #schläfrige Frösche# #[[1]]# schenken würden.", /*french*/ "Selon moi, #les grenouilles somnolentes# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, las #ranas somnolientas# regalan #[[1]]#. CustomMessage("They say that #the Froggish Tenor in the back-left# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #der froschige Tenor hinten links# #[[1]]# schenke.", /*french*/ "Selon moi, #le ténor grenouillesque au fond à gauche# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #Sapo Tenore al fondo, a la izquierda#, regala #[[1]]#. hintTextTable[RHT_ZR_FROGS_EPONAS_SONG] = HintText(CustomMessage("They say that after hearing #Epona's Song, the frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Frösche nach dem Hören von Eponas Lied# #[[1]]# schenken würden.", /*french*/ "Selon moi, à l'écoute du #chant d'Epona, les grenouilles# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, después de escuchar #la Canción de Epona, las ranas# regalan #[[1]]#. {}, { CustomMessage("They say that #equine frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #pferdeartige Frösche# #[[1]]# schenken würden.", /*french*/ "Selon moi, #les grenouilles équestres# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, las #ranas equinas# regalan #[[1]]#. CustomMessage("They say that #the Froggish Tenor in the back-right# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #der froschige Tenor hinten rechts# #[[1]]# schenke.", /*french*/ "Selon moi, #le ténor grenouillesque au fond à droite# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #Sapo Tenore al fondo, a la derecha#, regala #[[1]]#. hintTextTable[RHT_ZR_FROGS_SARIAS_SONG] = HintText(CustomMessage("They say that after hearing #Saria's Song, the frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Frösche nach dem Hören von Salias Lied# #[[1]]# schenken würden.", /*french*/ "Selon moi, à l'écoute du #chant de Saria, les grenouilles# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, después de escuchar #la Canción de Saria, las ranas# regalan #[[1]]#. {}, { CustomMessage("They say that #sylvan frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #waldige Frösche# #[[1]]# schenken würden.", /*french*/ "Selon moi, #les grenouilles sylvestres# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, las #ranas silvestres# regalan #[[1]]#. CustomMessage("They say that #the Froggish Tenor in the center# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #der froschige Tenor im Zentrum# #[[1]]# schenke.", /*french*/ "Selon moi, #le ténor grenouillesque dans le centre# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #Sapo Tenore en el centro# regala #[[1]]#. hintTextTable[RHT_ZR_FROGS_SUNS_SONG] = HintText(CustomMessage("They say that after hearing #the Sun's Song, the frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Frösche nach dem Hören der Hymne der Sonne# #[[1]]# schenken würden.", /*french*/ "Selon moi, à l'écoute du #chant du soleil, les grenouilles# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, después de escuchar #la Canción del Sol, las ranas# regalan #[[1]]#. {}, { CustomMessage("They say that #enlightened frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #erleuchtete Frösche# #[[1]]# schenken würden.", /*french*/ "Selon moi, #les grenouilles éclairées# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, las #ranas alumbradas# regalan #[[1]]#. CustomMessage("They say that #the Froggish Tenor in the front-left# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #der froschige Tenor vorne links# #[[1]]# schenke.", /*french*/ "Selon moi, #le ténor grenouillesque à l'avant gauche# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #Sapo Tenore al frente, a la izquierda#, regala #[[1]]#. hintTextTable[RHT_ZR_FROGS_SONG_OF_TIME] = HintText(CustomMessage("They say that after hearing #the Song of Time, the frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Frösche nach dem Hören der Hymne der Zeit# #[[1]]# schenken würden.", /*french*/ "Selon moi, à l'écoute du #chant du temps, les grenouilles# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, después de escuchar #la Canción del tiempo, las ranas# regalan #[[1]]#. {}, { CustomMessage("They say that #time-traveling frogs# gift #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #zeitreisende Frösche# #[[1]]# schenken würden.", /*french*/ "Selon moi, #les grenouilles voyageuses dans le temps# donnent #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, las #ranas viajeras del tiempo# regalan #[[1]]#. CustomMessage("They say that #the Froggish Tenor in the front-right# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #der froschige Tenor vorne rechts# #[[1]]# schenke.", /*french*/ "Selon moi, #le ténor grenouillesque à l'avant droite# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, el #Sapo Tenore al frente, a la derecha#, regala #[[1]]#. hintTextTable[RHT_GF_HBA_1000_POINTS] = HintText(CustomMessage("They say that scoring 1000 in #horseback archery# grants #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das Erzielen von 1000 Punkten beim #Pferdebogenschießen# #[[1]]# einbrächte.", /*french*/ "Selon moi, obtenir 1000 points dans l'#archerie équestre# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, conseguir 1000 puntos en el #tiro con arco a caballo# premia #[[1]]#. hintTextTable[RHT_MARKET_SHOOTING_GALLERY_REWARD] = HintText(CustomMessage("They say that #shooting in youth# grants #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Schießen in der Jugend# #[[1]]# einbrächte.", /*french*/ "Selon moi, #faire du tir dans sa jeunesse# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #disparar en la juventud# otorga #[[1]]#. hintTextTable[RHT_KAK_SHOOTING_GALLERY_REWARD] = HintText(CustomMessage("They say that #shooting in maturity# grants #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Schießen im Alter# #[[1]]# einbrächte.", /*french*/ "Selon moi, #faire du tir dans sa maturité# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #disparar en la madurez# otorga #[[1]]#. hintTextTable[RHT_LW_TARGET_IN_WOODS] = HintText(CustomMessage("They say that shooting a #target in the woods# grants #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das Abschießen eines #Zieles in den Wäldern# #[[1]]# einbrächte.", /*french*/ "Selon moi, #tirer une cible dans les bois# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, disparar a un #blanco forestal# brinda #[[1]]#. hintTextTable[RHT_KAK_ANJU_AS_ADULT] = HintText(CustomMessage("They say that a #chicken caretaker# offers adults #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Hühnchenpfleger# Erwachsenen #[[1]]# anböte.", /*french*/ "Selon moi, devenir un #éleveur de Cocottes# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #cuidadora de emplumados# le ofrece a los mayores #[[1]]#. hintTextTable[RHT_LLR_TALONS_CHICKENS] = HintText(CustomMessage("They say that #finding Super Cuccos# is rewarded with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Finden von Superhühnchen# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, #trouver des Super Cocottes# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #hallar los supercucos# conduce a #[[1]]#. hintTextTable[RHT_GC_ROLLING_GORON_AS_CHILD] = HintText(CustomMessage("They say that the prize offered by a #large rolling Goron# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der angebotene Preis eines #großen rollenden Goronen# #[[1]]# sei.", /*french*/ "Selon moi, la récompense d'un #gros Goron roulant# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #gran Goron rodante# otorga #[[1]]#. hintTextTable[RHT_LH_UNDERWATER_ITEM] = HintText(CustomMessage("They say that the #sunken treasure in a lake# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #versunkene Schatz in einem See# #[[1]]# sei.", /*french*/ "Selon moi, le #trésor au fond du lac# est #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #tesoro hundido del lago# se trata de #[[1]]#. hintTextTable[RHT_GF_GERUDO_MEMBERSHIP_CARD] = HintText(CustomMessage("They say that #rescuing captured carpenters# is rewarded with #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Retten gefangener Zimmerleute# mit #[[1]]# belohnt würde.", /*french*/ "Selon moi, #secourir les charpentiers capturés# assure #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #rescatar los apresados carpinteros# se premia con #[[1]]#. hintTextTable[RHT_WASTELAND_BOMBCHU_SALESMAN] = HintText(CustomMessage("They say that a #carpet guru# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Teppichguru# #[[1]]# verkaufe.", /*french*/ "Selon moi, #un marchand du désert# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #genio de una alfombra# vende #[[1]]#. hintTextTable[RHT_GC_MEDIGORON] = HintText(CustomMessage("They say that #Medigoron# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #Medigoron# #[[1]]# verkaufe.", /*french*/ "Selon moi, #Medigoron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #Medigoron# vende #[[1]]#. hintTextTable[RHT_KAK_GRANNYS_SHOP] = HintText(CustomMessage("They say that the #potion shop lady# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die #Dame des Hexenladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #dame du magasin de potion# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #señora de la tienda de pociones# vende #[[1]]#. hintTextTable[RHT_KAK_IMPAS_HOUSE_FREESTANDING_POH] = HintText(CustomMessage("They say that #imprisoned in a house# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #eingesperrt in einem Haus# #[[1]]# läge.", /*french*/ "Selon moi, #encagé dans une maison# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #en una casa entre rejas# yace #[[1]]#. hintTextTable[RHT_HF_TEKTITE_GROTTO_FREESTANDING_POH] = HintText(CustomMessage("They say that #deep underwater in a hole# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #tief unter Wasser in einem Loch# #[[1]]# sei.", /*french*/ "Selon moi, #dans les profondeurs d'une grotte# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #en lo hondo bajo un hoyo# yace #[[1]]#. hintTextTable[RHT_KAK_WINDMILL_FREESTANDING_POH] = HintText(CustomMessage("They say that on a #windmill ledge# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf einem #Vorsprung in einer Windmühle# #[[1]]# läge.", /*french*/ "Selon moi, #haut perché dans le moulin# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, al #borde de un molino# yace #[[1]]#. hintTextTable[RHT_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH] = HintText(CustomMessage("They say that #dead Dampe's second# prize is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #zweite Preis des toten Boris# #[[1]]# sei.", /*french*/ "Selon moi, la #deuxième course d'Igor# donne #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, el segundo premio de #la carrera de Dampé# se trata de #[[1]]#. {}, { CustomMessage("They say that #racing a ghost# leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Rennen gegen einen Geist# zu #[[1]]# führen würde.", /*french*/ "Selon moi, le défi du #revenant rapide# donne #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, #perseguir a un fantasma# conduce a #[[1]]#. hintTextTable[RHT_LLR_FREESTANDING_POH] = HintText(CustomMessage("They say that in a #ranch silo# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß in einem #ländlichen Silo# #[[1]]# läge.", /*french*/ "Selon moi, #dans l'entrepôt de la ferme# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en un #granero rupestre# yace #[[1]]#. hintTextTable[RHT_GRAVEYARD_FREESTANDING_POH] = HintText(CustomMessage("They say that a #crate in a graveyard# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kiste auf einem Friedhof# #[[1]]# verberge.", /*french*/ "Selon moi, #la boîte dans le Cimetière# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo la #caja de un cementerio# yace #[[1]]#. hintTextTable[RHT_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR] = HintText(CustomMessage("They say that a #gravekeeper digs up# #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Grabpfleger# #[[1]]# ausgrabe.", /*french*/ "Selon moi, #le jeu du fossoyeur# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, cierto #sepultero desentierra# #[[1]]#. hintTextTable[RHT_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH] = HintText(CustomMessage("They say that on top of a #pillar in a river# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf der Spitze einer #Säule in einem Fluß# #[[1]]# läge.", /*french*/ "Selon moi, #sur un pilier au dessus du fleuve# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en lo alto del #pilar de un río# yace #[[1]]#. hintTextTable[RHT_ZR_NEAR_DOMAIN_FREESTANDING_POH] = HintText(CustomMessage("They say that on a #river ledge by a waterfall# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf einem #Vorsprung von einem Fluß nahe eines Wasserfalls# #[[1]]# läge.", /*french*/ "Selon moi, #sur la falaise au dessus du fleuve# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, al borde de #la entrada a una cascada# yace #[[1]]#. hintTextTable[RHT_LH_FREESTANDING_POH] = HintText(CustomMessage("They say that high on a #lab rooftop# one can find #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß man auf dem #Dach eines Laboratoriums# #[[1]]# finden könne.", /*french*/ "Selon moi, #la tour d'observation du lac# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en lo #alto de un laboratorio# yace #[[1]]#. hintTextTable[RHT_ZF_ICEBERG_FREESTANDING_POH] = HintText(CustomMessage("They say that #floating on ice# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich schwebend auf Eis #[[1]]# befände.", /*french*/ "Selon moi, #gisant sur la glace# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #flotando sobre hielo# yace #[[1]]#. hintTextTable[RHT_GV_WATERFALL_FREESTANDING_POH] = HintText(CustomMessage("They say that behind a #valley waterfall# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß hinter einem #Wasserfall in einem Tal# #[[1]]# sei.", /*french*/ "Selon moi, #derrière la cascade du désert# se cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, tras una #desierta cascada# yace #[[1]]#. hintTextTable[RHT_GV_CRATE_FREESTANDING_POH] = HintText(CustomMessage("They say that a #crate in a valley# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kiste in einem Tal# #[[1]]# verberge.", /*french*/ "Selon moi, la #boîte dans la vallée# contient #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo la #caja de un valle# yace #[[1]]#. hintTextTable[RHT_COLOSSUS_FREESTANDING_POH] = HintText(CustomMessage("They say that on top of an #arch of stone# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf der Spitze eines #Steinbogens# #[[1]]# läge.", /*french*/ "Selon moi, #gisant sur une arche de pierre# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en lo alto de un #arco de piedra# yace #[[1]]#. hintTextTable[RHT_DMT_FREESTANDING_POH] = HintText(CustomMessage("They say that above a #mountain cavern entrance# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß oberhalb eines #Berghöhleneingangs# #[[1]]# sei.", /*french*/ "Selon moi, gisant #au dessus de la caverne montagneuse# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, en lo alto de la #entrada de una cueva en la montaña# yace #[[1]]#. hintTextTable[RHT_DMC_WALL_FREESTANDING_POH] = HintText(CustomMessage("They say that nestled in a #volcanic wall# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß in einem #vulkanischen Alkoven# #[[1]]# sei.", /*french*/ "Selon moi, dans une #alcove volcanique# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, entre unas #murallas volcánicas# yace #[[1]]#. hintTextTable[RHT_DMC_VOLCANO_FREESTANDING_POH] = HintText(CustomMessage("They say that obscured by #volcanic ash# is #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #[[1]]# von #Vulkanasche# verdeckt sei.", /*french*/ "Selon moi, #recouvert de cendres volcaniques# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, bajo la #ceniza volcánica# yace #[[1]]#. hintTextTable[RHT_GF_NORTH_F1_CARPENTER] = HintText(CustomMessage("They say that #defeating Gerudo guards# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Besiegen der Gerudo-Wachen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, les #geôliers Gerudo# détiennent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #derrotar a las guardas Gerudo# revela #[[1]]#. hintTextTable[RHT_GF_NORTH_F2_CARPENTER] = HintText(CustomMessage("They say that #defeating Gerudo guards# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Besiegen der Gerudo-Wachen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, les #geôliers Gerudo# détiennent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #derrotar a las guardas Gerudo# revela #[[1]]#. hintTextTable[RHT_GF_SOUTH_F1_CARPENTER] = HintText(CustomMessage("They say that #defeating Gerudo guards# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Besiegen der Gerudo-Wachen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, les #geôliers Gerudo# détiennent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #derrotar a las guardas Gerudo# revela #[[1]]#. hintTextTable[RHT_GF_SOUTH_F2_CARPENTER] = HintText(CustomMessage("They say that #defeating Gerudo guards# reveals #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß das #Besiegen der Gerudo-Wachen# #[[1]]# enthüllen würde.", /*french*/ "Selon moi, les #geôliers Gerudo# détiennent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #derrotar a las guardas Gerudo# revela #[[1]]#. hintTextTable[RHT_HF_GS_NEAR_KAK_GROTTO] = HintText(CustomMessage("They say that a #spider-guarded spider in a hole# hoards #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #spinnenbewachte Spinne in einem Loch #[[1]]# horte.", /*french*/ "Selon moi, une #Skulltula dans un trou d'arachnides# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula custodiada por otra# de un hoyo otorga #[[1]]#. hintTextTable[RHT_LLR_GS_BACK_WALL] = HintText(CustomMessage("They say that night reveals a #spider in a ranch# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne auf einer Farm# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur la façade de la ferme# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula del rancho# que otorga #[[1]]#. hintTextTable[RHT_LLR_GS_RAIN_SHED] = HintText(CustomMessage("They say that night reveals a #spider in a ranch# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne auf einer Farm# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur le mur de l'enclos# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula del rancho# que otorga #[[1]]#. hintTextTable[RHT_LLR_GS_HOUSE_WINDOW] = HintText(CustomMessage("They say that night reveals a #spider in a ranch# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne auf einer Farm# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur la maison de ferme# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula del rancho# que otorga #[[1]]#. hintTextTable[RHT_LLR_GS_TREE] = HintText(CustomMessage("They say that a spider hiding in a #ranch tree# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine in einem #Baum auf einer Farm# versteckte Spinne #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans l'arbre de la ferme# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una Skulltula escondida en el #árbol de un rancho# otorga #[[1]]#. hintTextTable[RHT_KF_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried in a forest# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einem Wald vergrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée dans la forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en un bosque# otorga #[[1]]#. hintTextTable[RHT_KF_GS_KNOW_IT_ALL_HOUSE] = HintText(CustomMessage("They say that night in the past reveals a #spider in a forest# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einem Wald# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière une cabane de la forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela en el pasado una #Skulltula del bosque# que otorga #[[1]]#. hintTextTable[RHT_KF_GS_HOUSE_OF_TWINS] = HintText(CustomMessage("They say that night in the future reveals a #spider in a forest# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Zukunft eine #Spinne in einem Wald# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une cabane de la forêt# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela en el futuro una #Skulltula del rancho# que otorga #[[1]]#. hintTextTable[RHT_LW_GS_BEAN_PATCH_NEAR_BRIDGE] = HintText(CustomMessage("They say that a #spider buried deep in a forest maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #tief in einem Waldlabyrinth vergrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée dans les bois# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en un laberinto forestal# otorga #[[1]]#. hintTextTable[RHT_LW_GS_BEAN_PATCH_NEAR_THEATER] = HintText(CustomMessage("They say that a #spider buried deep in a forest maze# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #tief in einem Waldlabyrinth vergrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée dans les bois# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en un laberinto forestal# otorga #[[1]]#. hintTextTable[RHT_LW_GS_ABOVE_THEATER] = HintText(CustomMessage("They say that night reveals a #spider deep in a forest maze# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne tief in einem Waldlabyrinth# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula haut perchée dans les bois# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula del laberinto forestal# que otorga #[[1]]#. hintTextTable[RHT_SFM_GS] = HintText(CustomMessage("They say that night reveals a #spider in a forest meadow# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne auf einer Waldwiese# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans le sanctuaire des bois# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula de la pradera del bosque# que otorga #[[1]]#. hintTextTable[RHT_OGC_GS] = HintText(CustomMessage("They say that a #spider outside a tyrant's tower# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne außerhalb eines Turms eines Tyrannen# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula parmi les ruines du château# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula a las afueras de la torre de un tirano# otorga #[[1]]#. hintTextTable[RHT_HC_GS_TREE] = HintText(CustomMessage("They say that a spider hiding in a #tree outside of a castle# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine in einem #Baum außerhalb von einem Schloß befindliche Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans l'arbre près du château# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una Skulltula escondida en el #árbol de las afueras de un castillo# otorga #[[1]]#. hintTextTable[RHT_MARKET_GS_GUARD_HOUSE] = HintText(CustomMessage("They say that a #spider in a guarded crate# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Spinne in einer bewachten Kiste# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans une boîte en ville# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula bajo una custodiada caja# otorga #[[1]]#. hintTextTable[RHT_DMC_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried in a volcano# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einem Vulkan begrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée dans un volcan# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en un volcán# otorga #[[1]]#. hintTextTable[RHT_DMT_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried outside a cavern# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #außerhalb einer Höhle begrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée près d'une caverne# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada a la entrada de una cueva# otorga #[[1]]#. hintTextTable[RHT_DMT_GS_NEAR_KAK] = HintText(CustomMessage("They say that a #spider hidden in a mountain nook# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einem Bergwinkel versteckte Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula cachée dans le flanc d'une montagne# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula oculta en el rincón de la montaña# otorga #[[1]]#. hintTextTable[RHT_DMT_GS_ABOVE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that the hammer reveals a #spider on a mountain# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der Hammer eine #Spinne auf einem Berg# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière un rocher massif près d'une caverne# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el martillo revela #una Skulltula de la montaña# que otorga #[[1]]#. hintTextTable[RHT_DMT_GS_FALLING_ROCKS_PATH] = HintText(CustomMessage("They say that the hammer reveals a #spider on a mountain# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der Hammer eine #Spinne auf einem Berg# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière un rocher massif près du sommet d'un volcan# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el martillo revela #una Skulltula de la montaña# que otorga #[[1]]#. hintTextTable[RHT_GC_GS_CENTER_PLATFORM] = HintText(CustomMessage("They say that a #suspended spider# in Goron City holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #hängende Spinne# in Goronia #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula perchée dans le village Goron# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula suspendida# en la Ciudad Goron otorga #[[1]]#. hintTextTable[RHT_GC_GS_BOULDER_MAZE] = HintText(CustomMessage("They say that a spider in a #Goron City crate# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine Spinne in einer #Kiste in Goronia# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans une boîte du village Goron# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula bajo una caja# de la Ciudad Goron otorga #[[1]]#. hintTextTable[RHT_KAK_GS_HOUSE_UNDER_CONSTRUCTION] = HintText(CustomMessage("They say that night in the past reveals a #spider in a town# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einer Stadt# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans le chantier de construction# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del pueblo# que otorga #[[1]]#. hintTextTable[RHT_KAK_GS_SKULLTULA_HOUSE] = HintText(CustomMessage("They say that night in the past reveals a #spider in a town# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einer Stadt# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une maison maudite# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del pueblo# que otorga #[[1]]#. hintTextTable[RHT_KAK_GS_GUARDS_HOUSE] = HintText(CustomMessage("They say that night in the past reveals a #spider in a town# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einer Stadt# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une maison de village# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del pueblo# que otorga #[[1]]#. hintTextTable[RHT_KAK_GS_TREE] = HintText(CustomMessage("They say that night in the past reveals a #spider in a town# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einer Stadt# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans un arbre de village# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del pueblo# que otorga #[[1]]#. hintTextTable[RHT_KAK_GS_WATCHTOWER] = HintText(CustomMessage("They say that night in the past reveals a #spider in a town# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einer Stadt# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une échelle dans un village# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del pueblo# que otorga #[[1]]#. hintTextTable[RHT_KAK_GS_ABOVE_IMPAS_HOUSE] = HintText(CustomMessage("They say that night in the future reveals a #spider in a town# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Zukunft eine #Spinne in einer Stadt# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus d'une grande maison# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del futuro revela una #Skulltula del pueblo# que otorga #[[1]]#. hintTextTable[RHT_GRAVEYARD_GS_WALL] = HintText(CustomMessage("They say that night reveals a #spider in a graveyard# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne auf einem Friedhof# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une façade du Cimetière# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula del cementerio# que otorga #[[1]]#. hintTextTable[RHT_GRAVEYARD_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried in a graveyard# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #auf einem Friedhof begrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée dans le Cimetière# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en el cementerio# otorga #[[1]]#. hintTextTable[RHT_ZR_GS_LADDER] = HintText(CustomMessage("They say that night in the past reveals a #spider in a river# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einem Fluß# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une échelle près d'une cascade# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del río# que otorga #[[1]]#. hintTextTable[RHT_ZR_GS_TREE] = HintText(CustomMessage("They say that a spider hiding in a #tree by a river# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine in einem #Baum bei einem Fluß# versteckte Spinne #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans un arbre près du fleuve# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una Skulltula escondida en el #árbol de un río# otorga #[[1]]#. hintTextTable[RHT_ZR_GS_ABOVE_BRIDGE] = HintText(CustomMessage("They say that night in the future reveals a #spider in a river# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Zukunft eine #Spinne in einem Fluß# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une façade près d'une cascade# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del futuro revela una #Skulltula del río# que otorga #[[1]]#. hintTextTable[RHT_ZR_GS_NEAR_RAISED_GROTTOS] = HintText(CustomMessage("They say that night in the future reveals a #spider in a river# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Zukunft eine #Spinne in einem Fluß# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une façade près d'une grotte du fleuve# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del futuro revela una #Skulltula del río# que otorga #[[1]]#. hintTextTable[RHT_ZD_GS_FROZEN_WATERFALL] = HintText(CustomMessage("They say that night reveals a #spider by a frozen waterfall# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne bei einem gefrorenen Wasserfall# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près d'une cascade gelée# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula junto a una congelada cascada# que otorga #[[1]]#. hintTextTable[RHT_ZF_GS_ABOVE_THE_LOG] = HintText(CustomMessage("They say that night reveals a #spider near a deity# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne in der Nähe einer Gottheit# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula près du gardien aquatique# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula junto a cierta deidad# que otorga #[[1]]#. hintTextTable[RHT_ZF_GS_TREE] = HintText(CustomMessage("They say that a spider hiding in a #tree near a deity# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine in einem #Baum in der Nähe einer Gottheit# versteckte Spinne #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans un arbre dans un réservoir# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una Skulltula escondida en el #árbol junto a cierta deidad# otorga #[[1]]#. hintTextTable[RHT_LH_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried by a lake# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #bei einem Fluß begrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée près d'un lac# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada junto a un lago# otorga #[[1]]#. hintTextTable[RHT_LH_GS_SMALL_ISLAND] = HintText(CustomMessage("They say that night reveals a #spider by a lake# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne bei einem Fluß# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur un îlot du lac# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula junto a un lago# que otorga #[[1]]#. hintTextTable[RHT_LH_GS_LAB_WALL] = HintText(CustomMessage("They say that night reveals a #spider by a lake# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne bei einem Fluß# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur le mur d'un centre de recherche# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula junto a un lago# que otorga #[[1]]#. hintTextTable[RHT_LH_GS_LAB_CRATE] = HintText(CustomMessage("They say that a spider deed underwater in a #lab crate# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß einer Spinne in einer #Laborkiste# unter Wasser #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans une boîte au fond d'une cuve d'eau# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula bajo la sumergida caja de un laboratorio# otorga #[[1]]#. hintTextTable[RHT_LH_GS_TREE] = HintText(CustomMessage("They say that night reveals a #spider by a lake high in a tree# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne in einem Baum bei einem Fluß# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans un grand arbre du lac# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela #una Skulltula del lago sobre un árbol# que otorga #[[1]]#. hintTextTable[RHT_GV_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried in a valley# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einem Tal begrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterré dans une vallée# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en un valle# otorga #[[1]]#. hintTextTable[RHT_GV_GS_SMALL_BRIDGE] = HintText(CustomMessage("They say that night in the past reveals a #spider in a valley# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Vergangenheit eine #Spinne in einem Tal# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au dessus d'une petite cascade# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del pasado revela una #Skulltula del valle# que otorga #[[1]]#. hintTextTable[RHT_GV_GS_PILLAR] = HintText(CustomMessage("They say that night in the future reveals a #spider in a valley# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Zukunft eine #Spinne in einem Tal# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une arche de pierre dans une vallée# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del futuro revela una #Skulltula del valle# que otorga #[[1]]#. hintTextTable[RHT_GV_GS_BEHIND_TENT] = HintText(CustomMessage("They say that night in the future reveals a #spider in a valley# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht in der Zukunft eine #Spinne in einem Tal# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula derrière une tente# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche del futuro revela una #Skulltula del valle# que otorga #[[1]]#. hintTextTable[RHT_GF_GS_ARCHERY_RANGE] = HintText(CustomMessage("They say that night reveals a #spider in a fortress# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne in einer Festung# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une cible de tir# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula de una fortaleza# que otorga #[[1]]#. hintTextTable[RHT_GF_GS_TOP_FLOOR] = HintText(CustomMessage("They say that night reveals a #spider in a fortress# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne in einer Festung# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula au sommet d'une forteresse# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula de una fortaleza# que otorga #[[1]]#. hintTextTable[RHT_COLOSSUS_GS_BEAN_PATCH] = HintText(CustomMessage("They say that a #spider buried in the desert# holds #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in der Wüste begrabene Spinne# #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula enterrée au pied du colosse# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula enterrada en el desierto# otorga #[[1]]#. hintTextTable[RHT_COLOSSUS_GS_HILL] = HintText(CustomMessage("They say that night reveals a #spider deep in the desert# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne tief in der Wüste# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula sur une colline dans le désert# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula en las profundidades del desierto# que otorga #[[1]]#. hintTextTable[RHT_COLOSSUS_GS_TREE] = HintText(CustomMessage("They say that night reveals a #spider deep in the desert# holding #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß die Nacht eine #Spinne tief in der Wüste# enthülle, welche #[[1]]# besäße.", /*french*/ "Selon moi, une #Skulltula dans un arbre du désert# a #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la noche revela una #Skulltula en las profundidades del desierto# que otorga #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_1] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_2] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_3] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_4] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_5] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_6] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_7] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KF_SHOP_ITEM_8] = HintText(CustomMessage("They say that a #child shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Inhaber des Kokiri-Ladens# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #boutique Kokiri# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #joven dependiente# vende #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_1] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_2] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_3] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_4] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_5] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_6] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_7] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_KAK_POTION_SHOP_ITEM_8] = HintText(CustomMessage("They say that the #Kakariko Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden in Kakariko# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones de Kakariko# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_1] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_2] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_3] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_4] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_5] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_6] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_7] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_BOMBCHU_SHOP_ITEM_8] = HintText(CustomMessage("They say that a #Bombchu merchant# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Krabbelminenhändler# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #marchand de Missiles# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #mercader de bombchus# vende #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_1] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_2] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_3] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_4] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_5] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_6] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_7] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_POTION_SHOP_ITEM_8] = HintText(CustomMessage("They say that the #Market Potion Shop# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß der #Magie-Laden auf dem Markt# #[[1]]# offeriere.", /*french*/ "Selon moi, l'#apothicaire dans la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN}), // /*spanish*/ Según dicen, la #tienda de pociones del mercado# ofrece #[[1]]#. {}, { CustomMessage("They say that a #potion seller# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Trankhändler# #[[1]]# anböte.", /*french*/ "Selon moi, l'#apothicaire# vend #[[1]]#.", {QM_RED, QM_GREEN})}); // /*spanish*/ Según dicen, un #vendedor de pociones# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_1] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_2] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_3] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_4] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_5] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_6] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_7] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_MARKET_BAZAAR_ITEM_8] = HintText(CustomMessage("They say that the #Market Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Marktbasar# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de la Place du Marché# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar del mercado# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_1] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_2] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_3] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_4] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_5] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_6] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_7] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_KAK_BAZAAR_ITEM_8] = HintText(CustomMessage("They say that the #Kakariko Bazaar# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf dem #Basar in Kakariko# #[[1]]# angeboten würde.", /*french*/ "Selon moi, le #bazar de Kakariko# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #bazar de Kakariko# ofrece #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_1] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_2] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_3] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_4] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_5] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_6] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_7] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_ZD_SHOP_ITEM_8] = HintText(CustomMessage("They say that a #Zora shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Zora# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Zora# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Zora# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_1] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_2] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_3] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_4] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_5] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_6] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_7] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_GC_SHOP_ITEM_8] = HintText(CustomMessage("They say that a #Goron shopkeeper# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Händler der Goronen# #[[1]]# verkaufen würde.", /*french*/ "Selon moi, la #boutique Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #dependiente Goron# vende #[[1]]#. hintTextTable[RHT_HF_DEKU_SCRUB_GROTTO] = HintText(CustomMessage("They say that a lonely #scrub in a hole# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #einsamer Deku in einem Loch# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #peste Mojo dans une grotte de la plaine# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #singular deku bajo un hoyo# de la llanura vende #[[1]]#. hintTextTable[RHT_LLR_DEKU_SCRUB_GROTTO_LEFT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo à la ferme# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# de una granja venden #[[1]]#. hintTextTable[RHT_LLR_DEKU_SCRUB_GROTTO_RIGHT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo à la ferme# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# de una granja venden #[[1]]#. hintTextTable[RHT_LLR_DEKU_SCRUB_GROTTO_CENTER] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo à la ferme# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# de una granja venden #[[1]]#. hintTextTable[RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT] = HintText(CustomMessage("They say that a pair of #scrubs in the woods# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar in den Wäldern# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo près du théâtre# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un par de #dekus del bosque# venden #[[1]]#. hintTextTable[RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT] = HintText(CustomMessage("They say that a pair of #scrubs in the woods# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar in den Wäldern# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo près du théâtre# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un par de #dekus del bosque# venden #[[1]]#. hintTextTable[RHT_LW_DEKU_SCRUB_NEAR_BRIDGE] = HintText(CustomMessage("They say that a #scrub by a bridge# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku bei einer Brücke# #[[1]]# verkaufe.", /*french*/ "Selon moi, la #peste Mojo près du pont dans les bois# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #deku bajo un puente# del bosque venden #[[1]]#. hintTextTable[RHT_LW_DEKU_SCRUB_GROTTO_REAR] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo dans les sous-bois# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del bosque venden #[[1]]#. hintTextTable[RHT_LW_DEKU_SCRUB_GROTTO_FRONT] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo dans les sous-bois# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del bosque venden #[[1]]#. hintTextTable[RHT_SFM_DEKU_SCRUB_GROTTO_REAR] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo au cœur du sanctuaire sylvestre# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# de la pradera sagrada venden #[[1]]#. hintTextTable[RHT_SFM_DEKU_SCRUB_GROTTO_FRONT] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo au cœur du sanctuaire sylvestre# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# de la pradera sagrada venden #[[1]]#. hintTextTable[RHT_GC_DEKU_SCRUB_GROTTO_LEFT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo dans le village Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# de la Ciudad Goron venden #[[1]]#. hintTextTable[RHT_GC_DEKU_SCRUB_GROTTO_RIGHT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo dans le village Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# de la Ciudad Goron venden #[[1]]#. hintTextTable[RHT_GC_DEKU_SCRUB_GROTTO_CENTER] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo dans le village Goron# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# de la Ciudad Goron venden #[[1]]#. hintTextTable[RHT_DMC_DEKU_SCRUB_GROTTO_LEFT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo dans le volcan# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# del volcán venden #[[1]]#. hintTextTable[RHT_DMC_DEKU_SCRUB_GROTTO_RIGHT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo dans le volcan# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# del volcán venden #[[1]]#. hintTextTable[RHT_DMC_DEKU_SCRUB_GROTTO_CENTER] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo dans le volcan# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# del volcán venden #[[1]]#. hintTextTable[RHT_ZR_DEKU_SCRUB_GROTTO_REAR] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo près du fleuve# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del río venden #[[1]]#. hintTextTable[RHT_ZR_DEKU_SCRUB_GROTTO_FRONT] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo près du fleuve# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del río venden #[[1]]#. hintTextTable[RHT_LH_DEKU_SCRUB_GROTTO_LEFT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo près du lac# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# del lago venden #[[1]]#. hintTextTable[RHT_LH_DEKU_SCRUB_GROTTO_RIGHT] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo près du lac# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# del lago venden #[[1]]#. hintTextTable[RHT_LH_DEKU_SCRUB_GROTTO_CENTER] = HintText(CustomMessage("They say that a #trio of scrubs# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Trio# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #trio de peste Mojo près du lac# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #trío de dekus# del lago venden #[[1]]#. hintTextTable[RHT_GV_DEKU_SCRUB_GROTTO_REAR] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo près de la vallée# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del valle venden #[[1]]#. hintTextTable[RHT_GV_DEKU_SCRUB_GROTTO_FRONT] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo près de la vallée# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del valle venden #[[1]]#. hintTextTable[RHT_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo dans le désert# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del desierto venden #[[1]]#. hintTextTable[RHT_COLOSSUS_DEKU_SCRUB_GROTTO_REAR] = HintText(CustomMessage("They say that a #scrub underground duo# sells #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Deku-Paar im Untergrund# #[[1]]# verkaufe.", /*french*/ "Selon moi, le #duo de peste Mojo dans le désert# vend #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, un #par de dekus subterráneos# del desierto venden #[[1]]#. hintTextTable[RHT_LLR_STABLES_LEFT_COW] = HintText(CustomMessage("They say that a #cow in a stable# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kuh in einem Stall# #[[1]]# schenke.", /*french*/ "Selon moi, la #vache dans l'étable# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #vaca del establo# brinda #[[1]]#. hintTextTable[RHT_LLR_STABLES_RIGHT_COW] = HintText(CustomMessage("They say that a #cow in a stable# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kuh in einem Stall# #[[1]]# schenke.", /*french*/ "Selon moi, la #vache dans l'étable# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #vaca del establo# brinda #[[1]]#. hintTextTable[RHT_LLR_TOWER_RIGHT_COW] = HintText(CustomMessage("They say that a #cow in a ranch silo# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kuh in einem Silo# #[[1]]# schenke.", /*french*/ "Selon moi, la #vache dans le silo de la ferme# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #vaca del granero# brinda #[[1]]#. hintTextTable[RHT_LLR_TOWER_LEFT_COW] = HintText(CustomMessage("They say that a #cow in a ranch silo# gifts #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kuh in einem Silo# #[[1]]# schenke.", /*french*/ "Selon moi, la #vache dans le silo de la ferme# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #vaca del granero# brinda #[[1]]#. hintTextTable[RHT_KAK_IMPAS_HOUSE_COW] = HintText(CustomMessage("They say that a #cow imprisoned in a house# protects #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #in einem Haus gefangene Kuh# #[[1]]# schütze.", /*french*/ "Selon moi, la #vache en cage# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #vaca enjaulada de una casa# brinda #[[1]]#. hintTextTable[RHT_DMT_COW_GROTTO_COW] = HintText(CustomMessage("They say that a #cow in a luxurious hole# offers #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Kuh in einem luxuriösen Loch# #[[1]]# offeriere.", /*french*/ "Selon moi, la #vache dans une grotte luxueuse# donne #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #vaca de un lujoso hoyo# brinda #[[1]]#. hintTextTable[RHT_BEEHIVE_CHEST_GROTTO] = HintText(CustomMessage("They say that a #beehive above a chest# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock oberhalb einer Truhe# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena sobre un cofre# esconde #[[1]]#. hintTextTable[RHT_BEEHIVE_LONELY_SCRUB_GROTTO] = HintText(CustomMessage("They say that a #beehive above a lonely scrub# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock oberhalb eines einsamen Deku# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena sobre un deku solitario# esconde #[[1]]#. hintTextTable[RHT_BEEHIVE_SCRUB_PAIR_GROTTO] = HintText(CustomMessage("They say that a #beehive above a pair of scrubs# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock oberhalb eines Deku-Paars# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena sobre un par de dekus# esconde #[[1]]#. hintTextTable[RHT_BEEHIVE_SCRUB_TRIO_GROTTO] = HintText(CustomMessage("They say that a #beehive above a trio of scrubs# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock oberhalb eines Deku-Trios# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena sobre un trío de dekus# esconde #[[1]]#. hintTextTable[RHT_BEEHIVE_COW_GROTTO] = HintText(CustomMessage("They say that a #beehive above a cow# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock oberhalb einer Kuh# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena sobre una vaca# esconde #[[1]]#. hintTextTable[RHT_BEEHIVE_IN_FRONT_OF_KING_ZORA] = HintText(CustomMessage("They say that a #beehive in front of the king of the zoras# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock vor dem Zora-König# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena delante del rey de los zoras# esconde #[[1]]#. hintTextTable[RHT_BEEHIVE_BEHIND_KING_ZORA] = HintText(CustomMessage("They say that a #beehive behind the king of the zoras# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Bienenstock hinter dem Zora-König# #[[1]]# verberge.", /*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #colmena detrás del rey de los zoras# esconde #[[1]]#. @@ -1539,5 +1542,398 @@ void StaticData::HintTable_Init_Exclude_Overworld() { hintTextTable[RHT_POT_HYRULE_CASTLE] = HintText(CustomMessage("They say that a #pot in Hyrule Castle# contains #[[1]]#.", /*german*/ "", /*french*/ "", {QM_RED, QM_GREEN})); + hintTextTable[RHT_KOKIRI_FOREST_RUPEE] = HintText(CustomMessage("They say that a rupee in a #tranquil forest# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_KOKIRI_FOREST_HEART] = HintText(CustomMessage("They say that a heart in a #tranquil forest# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_SARIAS_HOUSE_HEART] = HintText(CustomMessage("They say that a heart in a #dear friend's home# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_LOST_WOODS_RUPEE] = HintText(CustomMessage("They say that under a #boulder in the woods# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_LOST_WOODS_SHORTCUT_RUPEE] = HintText(CustomMessage("They say that in a #pool of water in the woods# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_LAKE_HYLIA_RUPEE] = HintText(CustomMessage("They say that just off the #coast of a lake# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_LABORATORY_RUPEE] = HintText(CustomMessage("They say that at the #bottom of a tank# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_DAMPES_GRAVE_RUPEE] = HintText(CustomMessage("They say that within a #quick-footed spirit's grave# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_GERUDO_VALLEY_GROTTO_RUPEE] = HintText(CustomMessage("They say that an Octarok in an #underground spring# guards #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_DEATH_MOUNTAIN_TRAIL_RUPEE] = HintText(CustomMessage("They say that beneath a boulder on a #mountain's cliffside# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART] = HintText(CustomMessage("They say that accompanying a #cow in a small cave# is #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE] = HintText(CustomMessage("They say that accompanying a #cow in a small cave# is #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_DEATH_MOUNTAIN_CRATER_RUPEE] = HintText(CustomMessage("They say that on a #small platform suspended above lava# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_ZORAS_RIVER_WATERFALL_RUPEE] = HintText(CustomMessage("They say that beneath a #waterfall feeding a narrow river# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + hintTextTable[RHT_ZORAS_FOUNTAIN_RUPEE] = HintText(CustomMessage("They say that at the bottom of a #partially-frozen spring# lies #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + // /*spanish*/ + + hintTextTable[RHT_SFM_FAIRY_GROTTO_FAIRY] = HintText(CustomMessage("They say that within #a fountain beneath a forest meadow# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_FAIRY_GROTTO_FAIRY] = HintText(CustomMessage("They say that within #a fountain beneath a river# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_FAIRY_GROTTO_FAIRY] = HintText(CustomMessage("They say that within #a fountain beneath a a few trees bordering a wide field# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZD_FAIRY_GROTTO_FAIRY] = HintText(CustomMessage("They say that within #a fountain beneath the home of the Zoras# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GF_FAIRY_GROTTO_FAIRY] = HintText(CustomMessage("They say that within #a fountain beneath the home of thieves# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY] = HintText(CustomMessage("They say that within #a fountain behind a wall within a grave# rests #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_COLOSSUS_OASIS_FAIRY] = HintText(CustomMessage("They say that #restoring water to a dried oasis# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout on the riverside# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout near a forest shop# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout near the entrance to the forest# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout above a sylvan theatre# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout on the lakeside# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GV_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout on the side of a canyon# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_COLOSSUS_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout near a temple of the sand# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GRAVEYARD_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout within a graveyard# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMC_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout within a volcano# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMT_BEAN_SPROUT_FAIRY] = HintText(CustomMessage("They say that #watering a young sprout on the moutainside# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_TOT_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone in the ouskirts of the market# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_TOT_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone in the ouskirts of the market# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMC_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone within a volcano# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMC_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone within a volcano# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMT_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone on a mountain cliff face# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMT_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone on a mountain cliff face# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_COLOSSUS_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone near the temple of the sane# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_COLOSSUS_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone near the temple of the sane# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GV_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone near a canyon waterfall# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GV_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone near a canyon waterfall# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GC_MAZE_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone behind a maze of rock# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GC_MAZE_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone behind a maze of rock# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone near a blacksmith# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone near a blacksmith# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GRAVEYARD_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone overlooking the graveyard# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone overlooking the graveyard# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HC_MALON_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone overlooking the path to the castle# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HC_MALON_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone overlooking the path to the castle# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone near a secret path to the castle# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone near a secret path to the castle# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath the castle# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath the castle# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone near an ancient tree# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone near an ancient tree# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone overlooking a forest village# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone overlooking a forest village# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath a forest village# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath a forest village# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_LAB_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone overlooking the river feeding a lake# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_LAB_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone overlooking the river feeding a lake# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone at the back of a lake# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone at the back of a lake# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone at the back of a lake# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone at the back of a lake# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LW_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone within a perplexing wood# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LW_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone within a perplexing wood# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SFM_MAZE_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone overlooking a forest maze# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone overlooking a forest maze# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SFM_SARIA_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone watching a hiding place in the woods# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone watching a hiding place in the woods# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZD_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone listening to an aquatic king# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZD_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone listening to an aquatic king# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone in the ouskirts of a deap fountain# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone in the ouskirts of a deap fountain# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZF_JABU_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone watching a guardian of the sea# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZF_JABU_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone watching a guardian of the sea# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone overwatching a river# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone overwatching a river# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath a waterfall# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath a waterfall# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone hiding near a cow# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone hiding near a cow# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath the entrance to the market# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath the entrance to the market# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath trees guarded by a Peahat# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath trees guarded by a Peahat# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath a village at the base of a mountain# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath a village at the base of a mountain# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone within a plateau by a river# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone within a plateau by a river# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath an escape from the forest# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath an escape from the forest# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone beneath the entrance to a village within a mountain# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone beneath the entrance to a village within a mountain# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone within the side of a crater# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone within the side of a crater# reveals #[[1]]#.", + /*german*/ "!!!", + /*french*/ "!!!", {QM_RED, QM_GREEN})); + } } diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 5ea318992c0..7fdf39567b1 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -618,6 +618,102 @@ static void PlaceVanillaOverworldFish() { } } +static void PlaceFreestandingItems() { + auto ctx = Rando::Context::GetInstance(); + auto option = ctx->GetOption(RSK_SHUFFLE_FREESTANDING); + for (RandomizerCheck loc : ctx->GetLocations(Rando::StaticData::overworldLocations, Category::cFreestanding)) { + RandomizerGet vanillaItem = Rando::StaticData::GetLocation(loc)->GetVanillaItem(); + if (option.Is(RO_TOKENSANITY_OVERWORLD) || option.Is(RO_TOKENSANITY_ALL)) { + AddItemToMainPool(vanillaItem); + } else { + ctx->PlaceItemInLocation(loc, vanillaItem, false, true); + } + } + + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + for (RandomizerCheck loc : ctx->GetLocations(dungeon->GetDungeonLocations(), Category::cFreestanding)) { + RandomizerGet vanillaItem = Rando::StaticData::GetLocation(loc)->GetVanillaItem(); + if (option.Is(RO_TOKENSANITY_DUNGEONS) || option.Is(RO_TOKENSANITY_ALL)) { + AddItemToMainPool(vanillaItem); + } else { + ctx->PlaceItemInLocation(loc, vanillaItem, false, true); + } + } + } +} + +static void PlaceVanillaFairies() { + auto ctx = Rando::Context::GetInstance(); + for (auto rc : Rando::StaticData::overworldFairyLocations) { + ctx->PlaceItemInLocation(rc, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, GetJunkItem(), false, true); + } else { + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { + ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, GetJunkItem(), false, true); + } else { + ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ()) { + ctx->PlaceItemInLocation(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::WATER_TEMPLE)->IsMQ()) { + ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { + ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, GetJunkItem(), false, true); + } else { + ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ()) { + ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, GetJunkItem(), false, true); + } else { + ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ()) { + ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, GetJunkItem(), false, true); + ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, GetJunkItem(), false, true); + } else { + ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { + ctx->PlaceItemInLocation(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUNDS)->IsVanilla()) { + ctx->PlaceItemInLocation(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, GetJunkItem(), false, true); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { + ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, GetJunkItem(), false, true); + } +} + static void SetScarceItemPool() { ReplaceMaxItem(RG_PROGRESSIVE_BOMBCHUS, 3); ReplaceMaxItem(RG_BOMBCHU_5, 1); @@ -1192,6 +1288,27 @@ void GenerateItemPool() { AddItemsToPool(ItemPool, shopsanityRupees); //Shopsanity gets extra large rupees } + //Fairysanity + if (ctx->GetOption(RSK_SHUFFLE_FAIRIES)) { + for (auto rc : Rando::StaticData::overworldFairyLocations) { + AddItemToMainPool(GetJunkItem()); + } + // 8 extra for Ganon's Castle + 2 Dodongo's Cavern Gossip Stone + 3 Shadow Temple + int extra = 13; + extra += ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla() ? 0 : 2; + extra += ctx->GetDungeon(Rando::WATER_TEMPLE)->IsVanilla() ? 0 : 3; + extra += ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla() ? 2 : 1; + extra += ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() ? 1 : 2; + extra += ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla() ? 1 : 0; + extra += ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUNDS)->IsVanilla() ? 1 : 0; + extra += ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla() ? 1 : 0; + for (int i = 0; i < extra; i++) { + AddItemToMainPool(GetJunkItem()); + } + } else { + PlaceVanillaFairies(); + } + //Scrubsanity if (ctx->GetOption(RSK_SHUFFLE_SCRUBS).IsNot(RO_SCRUBS_OFF)) { //Deku Tree @@ -1236,6 +1353,8 @@ void GenerateItemPool() { PlaceVanillaDekuScrubItems(); } + PlaceFreestandingItems(); + AddItemsToPool(ItemPool, alwaysItems); AddItemsToPool(ItemPool, dungeonRewards); diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_bottom_of_the_well.cpp index df833529181..c3fdc092395 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_bottom_of_the_well.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_bottom_of_the_well.cpp @@ -61,6 +61,14 @@ void AreaTable_Init_BottomOfTheWell() { LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)), + LOCATION(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_ZELDAS_LULLABY)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))), + LOCATION(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_ZELDAS_LULLABY)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, (randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, {[]{return true;}}), @@ -81,6 +89,14 @@ void AreaTable_Init_BottomOfTheWell() { //Trick: logic->HasExplosives || (LogicBotWMQDeadHandKey && logic->Boomerang) LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, logic->CanChildAttack), LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, logic->CanChildAttack && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2)), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, logic->HasExplosives), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, logic->HasExplosives), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2)), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2)), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, {[]{return true;}}), @@ -95,6 +111,7 @@ void AreaTable_Init_BottomOfTheWell() { LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, true), LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, logic->CanChildAttack && (randoCtx->GetTrickOption(RT_BOTW_MQ_PITS) || logic->HasExplosives)), //Trick: logic->CanChildAttack && (LogicBotWMQPits || logic->HasExplosives) + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, {[]{return true;}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_castle_town.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_castle_town.cpp index 32c9eb886e3..b2fb2e743f8 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_castle_town.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_castle_town.cpp @@ -38,6 +38,14 @@ void AreaTable_Init_CastleTown() { EventAccess(&logic->GossipStoneFairy, {[]{return logic->GossipStoneFairy || logic->CanSummonGossipFairyWithoutSuns;}}), }, { //Locations + LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)), + LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)), + LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)), + LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)), + LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE, true), LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE, true), LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE, true), @@ -89,6 +97,10 @@ void AreaTable_Init_CastleTown() { //Locations LOCATION(RC_HC_MALON_EGG, true), LOCATION(RC_HC_GS_TREE, logic->CanChildAttack), + LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HC_MALON_GOSSIP_STONE, true), LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE, true), }, { @@ -126,6 +138,8 @@ void AreaTable_Init_CastleTown() { }, { //Locations LOCATION(RC_HC_GS_STORMS_GROTTO, (logic->CanBlastOrSmash && logic->HookshotOrBoomerang) || (logic->Boomerang && randoCtx->GetTrickOption(RT_HC_STORMS_GS))), + LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CanBlastOrSmash && logic->CanSummonGossipFairy), + LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanBlastOrSmash && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE, logic->CanBlastOrSmash), LOCATION(RC_HC_STORMS_GROTTO_POT_1, logic->CanBlastOrSmash && logic->CanBreakPots), LOCATION(RC_HC_STORMS_GROTTO_POT_2, logic->CanBlastOrSmash && logic->CanBreakPots), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_death_mountain.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_death_mountain.cpp index 19fb4c1f499..54667e6ba50 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_death_mountain.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_death_mountain.cpp @@ -15,6 +15,12 @@ void AreaTable_Init_DeathMountain() { LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanPlantBugs && (logic->HasExplosives || logic->GoronBracelet || (randoCtx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->CanTakeDamage || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))), LOCATION(RC_DMT_GS_NEAR_KAK, logic->CanBlastOrSmash), LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || (randoCtx->GetTrickOption(RT_DMT_HOOKSHOT_LOWER_GS) && logic->CanUse(RG_HOOKSHOT)) || (randoCtx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL)) || (randoCtx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) || randoCtx->GetTrickOption(RT_DMT_JS_LOWER_GS)) && logic->CanGetNightTimeGS), + LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->CanBlastOrSmash), + LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->CanBlastOrSmash), + LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives || logic->HasItem(RG_GORONS_BRACELET))), + LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives || logic->HasItem(RG_GORONS_BRACELET))), + LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives || logic->HasItem(RG_GORONS_BRACELET))), + LOCATION(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_KAK_BEHIND_GATE, {[]{return true;}}), @@ -35,6 +41,8 @@ void AreaTable_Init_DeathMountain() { LOCATION(RC_DMT_TRADE_EYEDROPS, logic->IsAdult && logic->Eyedrops), LOCATION(RC_DMT_TRADE_CLAIM_CHECK, logic->IsAdult && logic->ClaimCheck), LOCATION(RC_DMT_GS_FALLING_ROCKS_PATH, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || randoCtx->GetTrickOption(RT_DMT_UPPER_GS)) && logic->CanGetNightTimeGS), + LOCATION(RC_DMT_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_DMT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_DMT_GOSSIP_STONE, true), }, { //Exits @@ -54,6 +62,17 @@ void AreaTable_Init_DeathMountain() { //Locations LOCATION(RC_DMT_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)), LOCATION(RC_DMT_COW_GROTTO_BEEHIVE, logic->CanBreakLowerBeehives), + LOCATION(RC_DMT_COW_GROTTO_LEFT_HEART, true), + LOCATION(RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, true), + LOCATION(RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, true), + LOCATION(RC_DMT_COW_GROTTO_RIGHT_HEART, true), + LOCATION(RC_DMT_COW_GROTTO_RUPEE_1, true), + LOCATION(RC_DMT_COW_GROTTO_RUPEE_2, true), + LOCATION(RC_DMT_COW_GROTTO_RUPEE_3, true), + LOCATION(RC_DMT_COW_GROTTO_RUPEE_4, true), + LOCATION(RC_DMT_COW_GROTTO_RUPEE_5, true), + LOCATION(RC_DMT_COW_GROTTO_RUPEE_6, true), + LOCATION(RC_DMT_COW_GROTTO_RED_RUPEE, true), }, { //Exits Entrance(RR_DEATH_MOUNTAIN_SUMMIT, {[]{return true;}}), @@ -64,6 +83,8 @@ void AreaTable_Init_DeathMountain() { //Locations LOCATION(RC_DMT_STORMS_GROTTO_CHEST, true), LOCATION(RC_DMT_STORMS_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -100,6 +121,10 @@ void AreaTable_Init_DeathMountain() { LOCATION(RC_GC_GS_BOULDER_MAZE, logic->IsChild && logic->CanBlastOrSmash), LOCATION(RC_GC_GS_CENTER_PLATFORM, logic->CanAdultAttack), LOCATION(RC_GC_MEDIGORON, logic->IsAdult && logic->AdultsWallet && (logic->CanBlastOrSmash || logic->GoronBracelet)), + LOCATION(RC_GC_MAZE_GOSSIP_STONE_FAIRY, (logic->CanBlastOrSmash || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, (logic->CanBlastOrSmash || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, (logic->CanBlastOrSmash || logic->GoronBracelet) && logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, (logic->CanBlastOrSmash || logic->GoronBracelet) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GC_MAZE_GOSSIP_STONE, logic->CanBlastOrSmash || logic->CanUse(RG_SILVER_GAUNTLETS)), LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE, logic->CanBlastOrSmash || logic->GoronBracelet), LOCATION(RC_GC_LOWER_STAIRCASE_POT_1, logic->CanBreakPots), @@ -187,6 +212,8 @@ void AreaTable_Init_DeathMountain() { //Locations LOCATION(RC_DMC_WALL_FREESTANDING_POH, logic->FireTimer >= 16 || logic->Hearts >= 3), LOCATION(RC_DMC_GS_CRATE, (logic->FireTimer >= 8 || logic->Hearts >= 3) && logic->IsChild && logic->CanChildAttack), + LOCATION(RC_DMC_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns && logic->HasExplosives && (logic->FireTimer >= 16 || logic->Hearts >= 3)), + LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) && logic->HasExplosives && (logic->FireTimer >= 16 || logic->Hearts >= 3)), LOCATION(RC_DMC_GOSSIP_STONE, logic->HasExplosives && (logic->FireTimer >= 16 || logic->Hearts >= 3)), }, { //Exits @@ -194,6 +221,7 @@ void AreaTable_Init_DeathMountain() { Entrance(RR_DMC_LADDER_AREA_NEARBY, {[]{return logic->FireTimer >= 16 || logic->Hearts >= 3;}}), Entrance(RR_DMC_CENTRAL_NEARBY, {[]{return logic->IsAdult && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_DISTANT_SCARECROW) && ((logic->EffectiveHealth > 2) || (logic->CanUse(RG_BOTTLE_WITH_FAIRY) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || logic->CanUse(RG_NAYRUS_LOVE));}}), Entrance(RR_DMC_LOWER_NEARBY, {[]{return false;}}), + Entrance(RR_DMC_DISTANT_PLATFORM, {[]{return (logic->FireTimer >= 48 && logic->Hearts >= 2) || logic->Hearts >= 3;}}), }); areaTable[RR_DMC_LADDER_AREA_NEARBY] = Area("DMC Ladder Area Nearby", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, { @@ -242,12 +270,24 @@ void AreaTable_Init_DeathMountain() { }, { //Locations LOCATION(RC_DMC_GS_BEAN_PATCH, (logic->FireTimer >= 8 || logic->Hearts >= 3) && logic->CanPlantBugs && logic->CanChildAttack), + LOCATION(RC_DMC_NEAR_PLATFORM_RED_RUPEE, logic->IsChild), + LOCATION(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, logic->IsChild && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer >= 8 || logic->Hearts >= 3)), + LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer >= 8 || logic->Hearts >= 3)), }, { //Exits Entrance(RR_DMC_CENTRAL_NEARBY, {[]{return true;}}), Entrance(RR_DMC_LOWER_NEARBY, {[]{return (logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}}), Entrance(RR_DMC_UPPER_NEARBY, {[]{return logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL);}}), Entrance(RR_FIRE_TEMPLE_ENTRYWAY, {[]{return (logic->IsChild && logic->Hearts >= 3 && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || (logic->IsAdult && logic->FireTimer >= 24);}}), + Entrance(RR_DMC_DISTANT_PLATFORM, {[]{return logic->FireTimer >= 48 && logic->DistantScarecrow;}}), }); areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Area("DMC Great Fairy Fountain", "DMC Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, { @@ -262,6 +302,8 @@ void AreaTable_Init_DeathMountain() { //Locations LOCATION(RC_DMC_UPPER_GROTTO_CHEST, true), LOCATION(RC_DMC_UPPER_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, true), LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -280,4 +322,18 @@ void AreaTable_Init_DeathMountain() { //Exits Entrance(RR_DMC_LOWER_LOCAL, {[]{return true;}}), }); + + areaTable[RR_DMC_DISTANT_PLATFORM] = Area("DMC Distant Platform", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, true), + LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, true), + LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, true), + LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, true), + LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, true), + LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, true), + LOCATION(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, true), + }, { + //Exits + Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return logic->DistantScarecrow;}}), + }); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp index 492a226f4be..1642a9c61cb 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_deku_tree.cpp @@ -25,7 +25,9 @@ void AreaTable_Init_DekuTree() { EventAccess(&logic->DekuBabaNuts, {[]{return logic->DekuBabaNuts || (logic->CanJumpslash || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives || logic->CanUse(RG_DINS_FIRE));}}), }, { //Locations - LOCATION(RC_DEKU_TREE_MAP_CHEST, true), + LOCATION(RC_DEKU_TREE_MAP_CHEST, true), + LOCATION(RC_DEKU_TREE_LOBBY_LOWER_HEART, true), + LOCATION(RC_DEKU_TREE_LOBBY_UPPER_HEART, logic->CanChildAttack || logic->CanAdultAttack), }, { //Exits Entrance(RR_DEKU_TREE_ENTRYWAY, {[]{return true;}}), @@ -144,7 +146,11 @@ void AreaTable_Init_DekuTree() { Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return Here(RR_DEKU_TREE_BASEMENT_UPPER, []{return logic->HasFireSourceWithTorch || (randoCtx->GetTrickOption(RT_DEKU_B1_BOW_WEBS) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW));});}}), }); - areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Area("Deku Tree Outside Boss Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Area("Deku Tree Outside Boss Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, { + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE)), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_UPPER, {[]{return true;}}), Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return (logic->Swim || Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanUse(RG_IRON_BOOTS);})) && Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->HasShield;});}}), @@ -166,6 +172,9 @@ void AreaTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, logic->HasFireSourceWithTorch || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))), LOCATION(RC_DEKU_TREE_MQ_BASEMENT_CHEST, logic->HasFireSourceWithTorch || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))), LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanAdultAttack || logic->CanChildAttack), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, logic->HasFireSourceWithTorch || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, true), }, { //Exits Entrance(RR_DEKU_TREE_ENTRYWAY, {[]{return true;}}), @@ -178,11 +187,13 @@ void AreaTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Area("Deku Tree MQ Compass Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), - LOCATION(RC_DEKU_TREE_MQ_GS_COMPASS_ROOM, logic->HookshotOrBoomerang && + LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_GS_COMPASS_ROOM, logic->HookshotOrBoomerang && Here(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->CanUse(RG_BOMBCHU_5) || (logic->Bombs && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult)) || (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) || randoCtx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS)));})), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, logic->CanUse(RG_BOMBCHU_5) || (logic->Bombs && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult)) || + (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) || randoCtx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS)))), }, { //Exits Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return true;}}), @@ -232,8 +243,11 @@ void AreaTable_Init_DekuTree() { }); areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] = - Area("Deku Tree MQ Outside Boss Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, - { + Area("Deku Tree MQ Outside Boss Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, { + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE)), + }, { // Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, {[]{ return true; }}), Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return (logic->Swim || Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->CanUse(RG_IRON_BOOTS);})) && Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, [] { return logic->HasShield; }); } }), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp index e2de6983ccf..adc01a64d43 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_dodongos_cavern.cpp @@ -32,6 +32,8 @@ void AreaTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_MAP_CHEST, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBlastOrSmash || logic->GoronBracelet;})), LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, logic->CanStunDeku || logic->GoronBracelet), + LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBlastOrSmash || logic->GoronBracelet;})), }, { //Exits @@ -80,6 +82,7 @@ void AreaTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_2, logic->CanBreakPots), LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_3, logic->CanBreakPots), LOCATION(RC_DODONGOS_CAVERN_LIZALFOS_POT_4, logic->CanBreakPots), + LOCATION(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, true), }, { //Exits Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, {[]{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || @@ -145,6 +148,7 @@ void AreaTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Area("Dodongos Cavern Bomb Room Lower", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, true), + LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, true), }, { //Exits Entrance(RR_DODONGOS_CAVERN_2F_SIDE_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBlastOrSmash || (randoCtx->GetTrickOption(RT_DC_SCRUB_ROOM) && logic->GoronBracelet);});}}), @@ -171,7 +175,11 @@ void AreaTable_Init_DodongosCavern() { Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, {[]{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || randoCtx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}}), }); - areaTable[RR_DODONGOS_CAVERN_UPPER_LIZALFOS] = Area("Dodongos Cavern Upper Lizalfos", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DODONGOS_CAVERN_UPPER_LIZALFOS] = Area("Dodongos Cavern Upper Lizalfos", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, true), + LOCATION(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, true), + }, { //Exits Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}), Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || @@ -262,12 +270,15 @@ void AreaTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, logic->CanAdultAttack || logic->CanChildAttack || logic->CanUse(RG_NUTS)), LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, (logic->IsChild && logic->CanUse(RG_STICKS)) || logic->HasFireSource), LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, logic->CanBlastOrSmash || (logic->IsChild && logic->CanUse(RG_STICKS)) || logic->CanUse(RG_DINS_FIRE) || (logic->IsAdult && (randoCtx->GetTrickOption(RT_DC_JUMP) || logic->HoverBoots || logic->Hookshot))), + LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, logic->CanBlastOrSmash || (logic->IsChild && logic->CanUse(RG_STICKS)) || logic->CanUse(RG_DINS_FIRE) || (logic->IsAdult && (randoCtx->GetTrickOption(RT_DC_JUMP) || logic->HoverBoots || logic->Hookshot))), LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, logic->CanUse(RG_SONG_OF_TIME) && (logic->CanChildAttack || logic->CanAdultAttack)), LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, (logic->IsChild && logic->CanUse(RG_STICKS)) || logic->HasFireSource), LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, logic->CanBlastOrSmash), LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, logic->CanStunDeku), LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku), LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku), + LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, true), }, { //Exits @@ -281,6 +292,7 @@ void AreaTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Area("Dodongos Cavern MQ Lower Right Side", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, logic->CanStunDeku), + LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, true), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_BOMB_BAG_AREA, {[]{return (Here(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return logic->IsAdult && logic->CanUse(RG_FAIRY_BOW);}) || logic->GoronBracelet || diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp index ba0d1b382d9..a64b43e759f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_fire_temple.cpp @@ -132,7 +132,12 @@ void AreaTable_Init_FireTemple() { Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}), }); - areaTable[RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM] = Area("Fire Temple Fire Pillar Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM] = Area("Fire Temple Fire Pillar Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, logic->FireTimer >= 56), + LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, logic->FireTimer >= 56), + LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, logic->FireTimer >= 56), + }, { //Exits Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}}), Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, {[]{return logic->FireTimer >= 56 && logic->SmallKeys(RR_FIRE_TEMPLE, 4);}}), @@ -174,7 +179,12 @@ void AreaTable_Init_FireTemple() { Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return true;}}), }); - areaTable[RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM] = Area("Fire Temple East Central Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM] = Area("Fire Temple East Central Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, true), + LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, true), + LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, true), + }, { //Exits Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return logic->CanTakeDamage;}}), Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return logic->SmallKeys(RR_FIRE_TEMPLE, 5, 8);}}), @@ -182,7 +192,12 @@ void AreaTable_Init_FireTemple() { Entrance(RR_FIRE_TEMPLE_MAP_AREA, {[]{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW);}}), }); - areaTable[RR_FIRE_TEMPLE_FIRE_WALL_CHASE] = Area("Fire Temple Fire Wall Chase", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FIRE_TEMPLE_FIRE_WALL_CHASE] = Area("Fire Temple Fire Wall Chase", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, logic->FireTimer >= 24 && (logic->IsAdult || logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, logic->FireTimer >= 24 && (logic->IsAdult || logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, logic->FireTimer >= 24), + }, { //Exits Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return logic->FireTimer >= 24 && logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8);}}), Entrance(RR_FIRE_TEMPLE_MAP_AREA, {[]{return logic->IsAdult;}}), @@ -337,6 +352,7 @@ void AreaTable_Init_FireTemple() { LOCATION(RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, logic->CanJumpslash || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->Bombs || logic->CanUse(RG_DINS_FIRE)), LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->IsAdult && (randoCtx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_GORON_TUNIC)) && (((logic->CanUse(RG_HOVER_BOOTS) || (randoCtx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && logic->CanUse(RG_FAIRY_BOW))) && logic->HasFireSource) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && ((randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_QUADRUPLE) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OCTUPLE) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_SEXDECUPLE)) || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_LONGSHOT)))))), //Trick: logic->IsAdult && (LogicFewerTunicRequirements || logic->CanUse(RG_GORON_TUNIC)) && (((logic->CanUse(RG_HOVER_BOOTS) || (LogicFireMQNearBoss && logic->CanUse(RG_FAIRY_BOW))) && logic->HasFireSource) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && ((DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO) && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_QUADRUPLE) && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OCTUPLE) && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_SEXDECUPLE)) || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_LONGSHOT))))) + LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, logic->SmallKeys(RR_FIRE_TEMPLE, 5) && logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_FIRE_TEMPLE_ENTRYWAY, {[]{return true;}}), @@ -352,6 +368,7 @@ void AreaTable_Init_FireTemple() { //Locations LOCATION(RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, logic->IsAdult && (logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_HOOKSHOT) || (logic->HasExplosives && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG))))), LOCATION(RC_FIRE_TEMPLE_MQ_MAP_CHEST, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)), + LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, {}); areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Area("Fire Temple MQ Big Lava Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, { @@ -365,6 +382,9 @@ void AreaTable_Init_FireTemple() { LOCATION(RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, logic->HasFireSource && logic->HasExplosives && logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || randoCtx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST))), //Trick: logic->HasFireSource && logic->HasExplosives && logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || LogicFireMQBlockedChest) LOCATION(RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, true), + LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 1)), + LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 1)), + LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 1)), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, {[]{return logic->IsAdult && logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 2) && (logic->HasFireSource || (randoCtx->GetTrickOption(RT_FIRE_MQ_CLIMB) && logic->HoverBoots));}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp index 44c7ecd5dd1..985bb831d0c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_forest_temple.cpp @@ -85,6 +85,8 @@ void AreaTable_Init_ForestTemple() { }, { //Locations LOCATION(RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, logic->CanUse(RG_LONGSHOT) || Here(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return logic->HookshotOrBoomerang;})), + LOCATION(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, HasAccessTo(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER) || (logic->CanUse(RG_BOOMERANG) && randoCtx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), + LOCATION(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, HasAccessTo(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER) || (logic->CanUse(RG_BOOMERANG) && randoCtx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), }, { //Exits Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return logic->CanUse(RG_SONG_OF_TIME);}}), @@ -144,7 +146,9 @@ void AreaTable_Init_ForestTemple() { areaTable[RR_FOREST_TEMPLE_SEWER] = Area("Forest Temple Sewer", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FOREST_TEMPLE_WELL_CHEST, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)), + LOCATION(RC_FOREST_TEMPLE_WELL_CHEST, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)), + LOCATION(RC_FOREST_TEMPLE_WELL_WEST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || logic->CanUse(RG_IRON_BOOTS)), + LOCATION(RC_FOREST_TEMPLE_WELL_EAST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || logic->CanUse(RG_IRON_BOOTS)), }, { //Exits Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, {[]{return true;}}), @@ -351,6 +355,9 @@ void AreaTable_Init_ForestTemple() { areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Area("Forest Temple MQ NW Outdoors", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, logic->CanAdultAttack || logic->CanChildAttack), + LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, HasAccessTo(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE) || (logic->CanUse(RG_BOOMERANG) && randoCtx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), + LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, HasAccessTo(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE) || (logic->CanUse(RG_BOOMERANG) && randoCtx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), + LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, HasAccessTo(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE) || (logic->CanUse(RG_BOOMERANG) && randoCtx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG))), }, { //Exits Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, {[]{return (logic->IsAdult && (logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT) || (randoCtx->GetTrickOption(RT_FOREST_MQ_WELL_SWIM) && logic->CanUse(RG_HOOKSHOT)))) || logic->ProgressiveScale >= 2;}}), @@ -367,6 +374,9 @@ void AreaTable_Init_ForestTemple() { LOCATION(RC_FOREST_TEMPLE_MQ_WELL_CHEST, (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))), LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, logic->HookshotOrBoomerang || (logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS) && (logic->CanUse(RG_SONG_OF_TIME) || (logic->CanUse(RG_HOVER_BOOTS) && randoCtx->GetTrickOption(RT_FOREST_DOORFRAME))))), LOCATION(RC_FOREST_TEMPLE_MQ_GS_WELL, (logic->IsAdult && ((logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)) || logic->CanUse(RG_FAIRY_BOW))) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))), + LOCATION(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))), + LOCATION(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))), + LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT))), }, { //Exits Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, {[]{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME));}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ganons_castle.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ganons_castle.cpp index c70195b062f..c6d5ca04506 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ganons_castle.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ganons_castle.cpp @@ -50,6 +50,14 @@ void AreaTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku), LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, logic->CanStunDeku), LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, logic->CanStunDeku), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, true), + LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, true), }, {}); areaTable[RR_GANONS_CASTLE_FOREST_TRIAL] = Area("Ganon's Castle Forest Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -69,6 +77,7 @@ void AreaTable_Init_GanonsCastle() { //Locations LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, logic->CanBreakPots && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, logic->CanBreakPots && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), + LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)), }, {}); areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Area("Ganon's Castle Water Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -96,6 +105,9 @@ void AreaTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, logic->CanBreakPots && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE))))), LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, logic->CanBreakPots && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE))))), LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, logic->CanBreakPots && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE))))), + LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, (logic->FireArrows && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->DinsFire && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)))))), + LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, (logic->FireArrows && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->DinsFire && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)))))), + LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, (logic->FireArrows && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->DinsFire && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)))))), }, {}); areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Area("Ganon's Castle Spirit Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -108,6 +120,7 @@ void AreaTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, (randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, logic->CanBreakPots && logic->NutPot), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, logic->CanBreakPots && logic->NutPot), + LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true), }, {}); areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Area("Ganon's Castle Light Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -189,6 +202,14 @@ void AreaTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku), LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, logic->CanStunDeku), LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, logic->CanStunDeku), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, true), + LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, true), }, {}); areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL] = Area("Ganon's Castle MQ Forest Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -214,6 +235,7 @@ void AreaTable_Init_GanonsCastle() { }, { //Locations LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, logic->BlueFire), + LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, logic->BlueFire), }, {}); areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL] = Area("Ganon's Castle MQ Shadow Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -239,6 +261,7 @@ void AreaTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, logic->IsAdult && logic->Hammer && logic->CanUse(RG_BOMBCHU_5) && ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, logic->IsAdult && logic->Hammer && logic->CanUse(RG_BOMBCHU_5) && ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, logic->IsAdult && logic->Hammer && logic->CanUse(RG_BOMBCHU_5) && ((logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), + LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, {}); areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL] = Area("Ganon's Castle MQ Light Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { @@ -248,6 +271,8 @@ void AreaTable_Init_GanonsCastle() { }, { //Locations LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && logic->CanUse(RG_ZELDAS_LULLABY)), + LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && logic->SmallKeys(RR_GANONS_CASTLE, 2)), + LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && logic->SmallKeys(RR_GANONS_CASTLE, 2)), }, {}); } } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_training_grounds.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_training_grounds.cpp index c0a2ab2bc16..00c7c413425 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_training_grounds.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_training_grounds.cpp @@ -25,6 +25,9 @@ void AreaTable_Init_GerudoTrainingGrounds() { LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, logic->HasExplosives && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))), + LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true), + LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true), + LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUNDS_ENTRYWAY, {[]{return true;}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_valley.cpp index 950c143e9bb..e90461489c6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_gerudo_valley.cpp @@ -28,6 +28,11 @@ void AreaTable_Init_GerudoValley() { LOCATION(RC_GV_WATERFALL_FREESTANDING_POH, logic->IsChild || logic->Swim),//can use cucco as child LOCATION(RC_GV_GS_BEAN_PATCH, logic->CanPlantBugs && logic->CanChildAttack), LOCATION(RC_GV_COW, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)), + LOCATION(RC_GV_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GV_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GV_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GV_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GV_GOSSIP_STONE, true), }, { //Exits @@ -78,7 +83,17 @@ void AreaTable_Init_GerudoValley() { Entrance(RR_GV_FORTRESS_SIDE, {[]{return true;}}), }); - areaTable[RR_GV_OCTOROK_GROTTO] = Area("GV Octorok Grotto", "GV Octorok Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GV_OCTOROK_GROTTO] = Area("GV Octorok Grotto", "GV Octorok Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_GV_OCTOROK_GROTTO_RED_RUPEE, logic->HasItem(RG_BRONZE_SCALE)), + }, { //Exits Entrance(RR_GV_GROTTO_LEDGE, {[]{return true;}}), }); @@ -126,6 +141,7 @@ void AreaTable_Init_GerudoValley() { LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, logic->CanBreakPots), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, logic->CanBreakPots), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, logic->CanBreakPots), + LOCATION(RC_GF_KITCHEN_SUN_FAIRY, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_GV_FORTRESS_SIDE, {[]{return true;}}), @@ -146,7 +162,17 @@ void AreaTable_Init_GerudoValley() { areaTable[RR_GF_STORMS_GROTTO] = Area("GF Storms Grotto", "GF Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FreeFairies, {[]{return true;}}), - }, {}, { + }, { + //Locations + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_1, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_2, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_3, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_4, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_5, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_6, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_7, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_8, true), + }, { //Exits Entrance(RR_GERUDO_FORTRESS, {[]{return true;}}), }); @@ -193,6 +219,19 @@ void AreaTable_Init_GerudoValley() { LOCATION(RC_COLOSSUS_GS_BEAN_PATCH, logic->CanPlantBugs && logic->CanChildAttack), LOCATION(RC_COLOSSUS_GS_TREE, logic->IsAdult && logic->HookshotOrBoomerang && logic->AtNight && logic->CanGetNightTimeGS), LOCATION(RC_COLOSSUS_GS_HILL, logic->IsAdult && logic->AtNight && ((CanPlantBean(RR_DESERT_COLOSSUS) && logic->CanAdultAttack) || logic->CanUse(RG_LONGSHOT) || (randoCtx->GetTrickOption(RT_COLOSSUS_GS) && logic->CanUse(RG_HOOKSHOT))) && logic->CanGetNightTimeGS), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_1, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_2, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_3, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_4, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_5, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_6, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_7, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_OASIS_FAIRY_8, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_COLOSSUS_GOSSIP_STONE, true), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_hyrule_field.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_hyrule_field.cpp index a68d379c4bb..6473141f52d 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_hyrule_field.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_hyrule_field.cpp @@ -11,6 +11,7 @@ void AreaTable_Init_HyruleField() { //Locations LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->HasAllStones), LOCATION(RC_SONG_FROM_OCARINA_OF_TIME, logic->IsChild && logic->HasAllStones), + LOCATION(RC_HF_POND_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_LW_BRIDGE, {[]{return true;}}), @@ -34,6 +35,8 @@ void AreaTable_Init_HyruleField() { //Locations LOCATION(RC_HF_SOUTHEAST_GROTTO_CHEST, true), LOCATION(RC_HF_SOUTHEAST_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -46,6 +49,8 @@ void AreaTable_Init_HyruleField() { //Locations LOCATION(RC_HF_OPEN_GROTTO_CHEST, true), LOCATION(RC_HF_OPEN_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -67,6 +72,8 @@ void AreaTable_Init_HyruleField() { //Locations LOCATION(RC_HF_GS_COW_GROTTO, logic->HasFireSource && logic->HookshotOrBoomerang), LOCATION(RC_HF_COW_GROTTO_COW, logic->HasFireSource && logic->CanUse(RG_EPONAS_SONG)), + LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, logic->HasFireSource && logic->CanSummonGossipFairy), + LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->HasFireSource && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE, logic->HasFireSource), LOCATION(RC_HF_COW_GROTTO_POT_1, logic->HasFireSource && logic->CanBreakPots), LOCATION(RC_HF_COW_GROTTO_POT_2, logic->HasFireSource && logic->CanBreakPots), @@ -79,6 +86,8 @@ void AreaTable_Init_HyruleField() { //Locations LOCATION(RC_HF_NEAR_MARKET_GROTTO_CHEST, true), LOCATION(RC_HF_NEAR_MARKET_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -90,7 +99,17 @@ void AreaTable_Init_HyruleField() { areaTable[RR_HF_FAIRY_GROTTO] = Area("HF Fairy Grotto", "HF Fairy Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FreeFairies, {[]{return true;}}), - }, {}, { + }, { + //Locations + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_1, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_2, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_3, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_4, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_5, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_6, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_7, true), + LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_8, true), + }, { //Exits Entrance(RR_HYRULE_FIELD, {[]{return true;}}), }); @@ -128,6 +147,19 @@ void AreaTable_Init_HyruleField() { LOCATION(RC_LH_GS_LAB_WALL, logic->IsChild && (logic->HookshotOrBoomerang || (randoCtx->GetTrickOption(RT_LH_LAB_WALL_GS) && logic->CanJumpslash)) && logic->AtNight && logic->CanGetNightTimeGS), LOCATION(RC_LH_GS_SMALL_ISLAND, logic->IsChild && logic->CanChildAttack && logic->AtNight && logic->CanGetNightTimeGS), LOCATION(RC_LH_GS_TREE, logic->IsAdult && logic->CanUse(RG_LONGSHOT) && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_LH_FRONT_RUPEE, logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)), + LOCATION(RC_LH_MIDDLE_RUPEE, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))), + LOCATION(RC_LH_BACK_RUPEE, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))), + LOCATION(RC_LH_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LH_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LH_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LH_LAB_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LH_ISLAND_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && ((logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->WaterTempleClear)) || logic->CanUse(RG_DISTANT_SCARECROW))), LOCATION(RC_LH_LAB_GOSSIP_STONE, true), LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE, true), LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE, true), @@ -158,9 +190,12 @@ void AreaTable_Init_HyruleField() { EventAccess(&logic->EyedropsAccess, {[]{return logic->EyedropsAccess || (logic->IsAdult && (logic->EyeballFrogAccess || (logic->EyeballFrog && logic->DisableTradeRevert)));}}), }, { //Locations - LOCATION(RC_LH_LAB_DIVE, logic->ProgressiveScale >= 2 || (randoCtx->GetTrickOption(RT_LH_LAB_DIVING) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))), - LOCATION(RC_LH_TRADE_FROG, logic->IsAdult && logic->EyeballFrog), - LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_LH_LAB_DIVE, logic->ProgressiveScale >= 2 || (randoCtx->GetTrickOption(RT_LH_LAB_DIVING) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))), + LOCATION(RC_LH_TRADE_FROG, logic->IsAdult && logic->EyeballFrog), + LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_LH_LAB_FRONT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), + LOCATION(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), + LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), }, { //Exits Entrance(RR_LAKE_HYLIA, {[]{return true;}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ice_cavern.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ice_cavern.cpp index acff212c272..61a47704c18 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ice_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_ice_cavern.cpp @@ -19,7 +19,10 @@ void AreaTable_Init_IceCavern() { | VANILLA DUNGEON | ---------------------------*/ if (randoCtx->GetDungeon(ICE_CAVERN)->IsVanilla()) { - areaTable[RR_ICE_CAVERN_BEGINNING] = Area("Ice Cavern Beginning", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_ICE_CAVERN_BEGINNING] = Area("Ice Cavern Beginning", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + }, { //Exits Entrance(RR_ICE_CAVERN_ENTRYWAY, {[]{return true;}}), Entrance(RR_ICE_CAVERN_MAIN, {[]{return Here(RR_ICE_CAVERN_BEGINNING, []{return (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_DINS_FIRE);});}}), @@ -46,6 +49,13 @@ void AreaTable_Init_IceCavern() { LOCATION(RC_ICE_CAVERN_NEAR_END_POT_1, logic->CanBreakPots), LOCATION(RC_ICE_CAVERN_NEAR_END_POT_2, logic->CanBreakPots), LOCATION(RC_ICE_CAVERN_FROZEN_POT_1, logic->CanBreakPots), + LOCATION(RC_ICE_CAVERN_LOBBY_RUPEE, logic->BlueFire), + LOCATION(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, logic->IsAdult), + LOCATION(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, logic->IsAdult), + LOCATION(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, logic->IsAdult), + LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire && logic->CanUse(RG_SONG_OF_TIME)), + LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire && logic->CanUse(RG_SONG_OF_TIME)), + LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire && logic->CanUse(RG_SONG_OF_TIME)), }, {}); } diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp index bd0a4fc6b8d..3b8d0aebc0d 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_jabujabus_belly.cpp @@ -199,6 +199,11 @@ void AreaTable_Init_JabuJabusBelly() { LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, true), LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_STICKS) || logic->Bombs), LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, logic->CanUse(RG_SONG_OF_TIME) || (randoCtx->GetTrickOption(RT_JABU_MQ_SOT_GS) && logic->IsChild && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, true), + LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, true), + LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, logic->HasItem(RG_GOLDEN_SCALE)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->HasItem(RG_BRONZE_SCALE)), //Trick: logic->CanUse(RG_SONG_OF_TIME) || (LogicJabuMQSoTGS && logic->IsChild && logic->CanUse(RG_BOOMERANG)) }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_kakariko.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_kakariko.cpp index 8081eb17bd2..42b7f8889f4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_kakariko.cpp @@ -209,6 +209,8 @@ void AreaTable_Init_Kakariko() { //Locations LOCATION(RC_KAK_OPEN_GROTTO_CHEST, true), LOCATION(RC_KAK_OPEN_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -228,6 +230,9 @@ void AreaTable_Init_Kakariko() { LOCATION(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, logic->ChildsWallet && logic->IsChild && logic->AtNight), //TODO: This needs to change LOCATION(RC_GRAVEYARD_GS_WALL, logic->IsChild && logic->HookshotOrBoomerang && logic->AtNight && logic->CanGetNightTimeGS), LOCATION(RC_GRAVEYARD_GS_BEAN_PATCH, logic->CanPlantBugs && logic->CanChildAttack), + LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_GRAVEYARD_SHIELD_GRAVE, {[]{return logic->IsAdult || logic->AtNight;}}), @@ -243,6 +248,14 @@ void AreaTable_Init_Kakariko() { //Locations LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_CHEST, true), //Free Fairies + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, logic->CanBlastOrSmash), + LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, logic->CanBlastOrSmash), }, { //Exits Entrance(RR_THE_GRAVEYARD, {[]{return true;}}), @@ -279,6 +292,14 @@ void AreaTable_Init_Kakariko() { LOCATION(RC_GY_DAMPES_GRAVE_POT_4, logic->CanBreakPots), LOCATION(RC_GY_DAMPES_GRAVE_POT_5, logic->CanBreakPots), LOCATION(RC_GY_DAMPES_GRAVE_POT_6, logic->CanBreakPots), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_1, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_2, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_3, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_4, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_5, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, true), + LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, true), }, { //Exits Entrance(RR_THE_GRAVEYARD, {[]{return true;}}), @@ -298,6 +319,8 @@ void AreaTable_Init_Kakariko() { EventAccess(&logic->GossipStoneFairy, {[]{return logic->GossipStoneFairy || logic->CanSummonGossipFairyWithoutSuns;}}), }, { //Locations + LOCATION(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_GOSSIP_STONE, true), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_lost_woods.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_lost_woods.cpp index 05e372af7bf..a8c435cd576 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_lost_woods.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_lost_woods.cpp @@ -11,10 +11,38 @@ void AreaTable_Init_LostWoods() { EventAccess(&logic->ShowedMidoSwordAndShield, {[]{return logic->ShowedMidoSwordAndShield || (logic->IsChild && logic->KokiriSword && logic->DekuShield);}}), }, { //Locations + LOCATION(RC_KF_KOKIRI_SWORD_CHEST, logic->IsChild), + LOCATION(RC_KF_GS_KNOW_IT_ALL_HOUSE, logic->IsChild && logic->CanChildAttack && logic->AtNight && (/*TODO: HasNightStart ||*/ logic->CanLeaveForest || logic->CanUse(RG_SUNS_SONG)) && logic->CanGetNightTimeGS), + LOCATION(RC_KF_GS_BEAN_PATCH, logic->CanPlantBugs && logic->CanChildAttack), + LOCATION(RC_KF_GS_HOUSE_OF_TWINS, logic->IsAdult && logic->AtNight && (logic->HookshotOrBoomerang || (randoCtx->GetTrickOption(RT_KF_ADULT_GS) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanGetNightTimeGS), + LOCATION(RC_KF_BRIDGE_RUPEE, logic->IsChild), + LOCATION(RC_KF_BEHIND_MIDOS_RUPEE, logic->IsChild), + LOCATION(RC_KF_SOUTH_GRASS_WEST_RUPEE, logic->IsChild), + LOCATION(RC_KF_SOUTH_GRASS_EAST_RUPEE, logic->IsChild), + LOCATION(RC_KF_NORTH_GRASS_WEST_RUPEE, logic->IsChild), + LOCATION(RC_KF_NORTH_GRASS_EAST_RUPEE, logic->IsChild), + LOCATION(RC_KF_BOULDER_RUPEE_1, logic->IsChild), + LOCATION(RC_KF_BOULDER_RUPEE_2, logic->IsChild), + LOCATION(RC_KF_BEAN_RUPEE_1, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_BEAN_RUPEE_2, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_BEAN_RUPEE_3, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_BEAN_RUPEE_4, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_BEAN_RUPEE_5, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_BEAN_RUPEE_6, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_BEAN_RED_RUPEE, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS))), + LOCATION(RC_KF_SARIAS_ROOF_WEST_HEART, logic->IsChild), + LOCATION(RC_KF_SARIAS_ROOF_EAST_HEART, logic->IsChild), + LOCATION(RC_KF_SARIAS_ROOF_NORTH_HEART, logic->IsChild), + LOCATION(RC_KF_GOSSIP_STONE, true), LOCATION(RC_KF_KOKIRI_SWORD_CHEST, logic->IsChild), LOCATION(RC_KF_GS_KNOW_IT_ALL_HOUSE, logic->IsChild && logic->CanChildAttack && logic->AtNight && (/*TODO: HasNightStart ||*/ logic->CanLeaveForest || logic->CanUse(RG_SUNS_SONG)) && logic->CanGetNightTimeGS), LOCATION(RC_KF_GS_BEAN_PATCH, logic->CanPlantBugs && logic->CanChildAttack), LOCATION(RC_KF_GS_HOUSE_OF_TWINS, logic->IsAdult && logic->AtNight && (logic->HookshotOrBoomerang || (randoCtx->GetTrickOption(RT_KF_ADULT_GS) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanGetNightTimeGS), + LOCATION(RC_KF_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_KF_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_KF_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_KF_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_KF_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_KF_GOSSIP_STONE, true), }, { //Exits @@ -37,6 +65,10 @@ void AreaTable_Init_LostWoods() { EventAccess(&logic->ShowedMidoSwordAndShield, {[]{return logic->ShowedMidoSwordAndShield || (logic->IsChild && logic->KokiriSword && logic->DekuShield);}}), }, { //Locations + LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE, true), LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, true), }, { @@ -65,7 +97,13 @@ void AreaTable_Init_LostWoods() { Entrance(RR_KOKIRI_FOREST, {[]{return true;}}), }); - areaTable[RR_KF_SARIAS_HOUSE] = Area("KF Saria's House", "KF Saria's House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_KF_SARIAS_HOUSE] = Area("KF Saria's House", "KF Saria's House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_KF_SARIAS_TOP_LEFT_HEART, true), + LOCATION(RC_KF_SARIAS_TOP_RIGHT_HEART, true), + LOCATION(RC_KF_SARIAS_BOTTOM_LEFT_HEART, true), + LOCATION(RC_KF_SARIAS_BOTTOM_RIGHT_HEART, true), + }, { //Exits Entrance(RR_KOKIRI_FOREST, {[]{return true;}}), }); @@ -107,6 +145,8 @@ void AreaTable_Init_LostWoods() { //Locations LOCATION(RC_KF_STORMS_GROTTO_CHEST, true), LOCATION(RC_KF_STORMS_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -144,6 +184,20 @@ void AreaTable_Init_LostWoods() { LOCATION(RC_LW_TARGET_IN_WOODS, logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, logic->IsChild && logic->CanStunDeku), LOCATION(RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE, logic->CanPlantBugs && logic->CanChildAttack), + LOCATION(RC_LW_SHORTCUT_RUPEE_1, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_2, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_3, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_4, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_5, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_6, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_7, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_SHORTCUT_RUPEE_8, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)), + LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_GOSSIP_STONE, true), }, { //Exits @@ -164,6 +218,10 @@ void AreaTable_Init_LostWoods() { LOCATION(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, logic->IsChild && logic->CanStunDeku), LOCATION(RC_LW_GS_ABOVE_THEATER, logic->IsAdult && logic->AtNight && ((CanPlantBean(RR_LW_BEYOND_MIDO) && logic->CanAdultAttack) || (randoCtx->GetTrickOption(RT_LW_GS_BEAN) && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOMBCHU_5) || logic->CanUse(RG_DINS_FIRE)))) && logic->CanGetNightTimeGS), LOCATION(RC_LW_GS_BEAN_PATCH_NEAR_THEATER, logic->CanPlantBugs && (logic->CanChildAttack || (randoCtx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_OFF) && logic->DekuShield))), + LOCATION(RC_LW_BOULDER_RUPEE, logic->CanBlastOrSmash), + LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_LW_FOREST_EXIT, {[]{return true;}}), @@ -177,6 +235,8 @@ void AreaTable_Init_LostWoods() { //Locations LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, true), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -219,6 +279,12 @@ void AreaTable_Init_LostWoods() { LOCATION(RC_SONG_FROM_SARIA, logic->IsChild && logic->ZeldasLetter), LOCATION(RC_SHEIK_IN_FOREST, logic->IsAdult), LOCATION(RC_SFM_GS, logic->IsAdult && logic->HookshotOrBoomerang && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE, true), LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE, true), LOCATION(RC_SFM_SARIA_GOSSIP_STONE, true), @@ -233,7 +299,17 @@ void AreaTable_Init_LostWoods() { areaTable[RR_SFM_FAIRY_GROTTO] = Area("SFM Fairy Grotto", "SFM Fairy Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FreeFairies, {[]{return true;}}), - }, {}, { + }, { + //Locations + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_1, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_2, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_3, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_4, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_5, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_6, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_7, true), + LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_8, true), + }, { //Exits Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}), }); diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp index ea20c179a5b..55a6c4c2350 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_shadow_temple.cpp @@ -48,6 +48,7 @@ void AreaTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslash), LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)), LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false), + LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, {[]{return logic->HasExplosives && logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2);}}), @@ -70,6 +71,9 @@ void AreaTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, logic->CanBreakPots), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, logic->CanBreakPots), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, logic->CanBreakPots), + LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, {[]{return ((randoCtx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && randoCtx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->Hookshot && logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}}), @@ -83,6 +87,9 @@ void AreaTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, logic->CanUse(RG_LONGSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)), LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, logic->CanBreakPots), LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, logic->CanBreakPots), + LOCATION(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)), + LOCATION(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)), + LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, {[]{return logic->CanJumpslash && logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}}), @@ -101,7 +108,14 @@ void AreaTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, logic->CanBreakPots), LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, logic->CanBreakPots), LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, logic->CanBreakPots), - }, { + LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, logic->CanUse(RG_DINS_FIRE)), + LOCATION(RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, logic->CanUse(RG_DINS_FIRE)), + LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, logic->CanJumpslash), + LOCATION(RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, logic->CanAdultAttack), + LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)), + LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)), + LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->CanUse(RG_SONG_OF_TIME) || (logic->CanUse(RG_DISTANT_SCARECROW) && logic->CanUse(RG_HOVER_BOOTS))), + }, { //Exits Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, {[]{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5) && logic->CanUse(RG_HOVER_BOOTS) && logic->BossKeyShadowTemple;}}) }); @@ -130,6 +144,7 @@ void AreaTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanAdultAttack || logic->CanUse(RG_NUTS)), LOCATION(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, logic->CanJumpslash), LOCATION(RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, logic->CanAdultAttack || logic->CanUse(RG_NUTS)), + LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, {[]{return logic->HasExplosives && logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}}), @@ -141,6 +156,9 @@ void AreaTable_Init_ShadowTemple() { //Trick: logic->CanUse(RG_SONG_OF_TIME) || (LogicShadowMQInvisibleBlades && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO)) LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, logic->CanUse(RG_SONG_OF_TIME) || (randoCtx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO))), //Trick: logic->CanUse(RG_SONG_OF_TIME) || (LogicShadowMQInvisibleBlades && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO)) + LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, {[]{return logic->HasFireSource || randoCtx->GetTrickOption(RT_SHADOW_MQ_HUGE_PIT);}}), @@ -172,6 +190,9 @@ void AreaTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, true), LOCATION(RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, true), LOCATION(RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND, true), + LOCATION(RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5)), + LOCATION(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5)), + LOCATION(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, {[]{return logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}}), @@ -181,6 +202,9 @@ void AreaTable_Init_ShadowTemple() { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, true), LOCATION(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, logic->Bow || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))), + LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_LONGSHOT)), + LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_LONGSHOT)), + LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, (logic->CanUse(RG_FAIRY_BOW) || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->CanUse(RG_SONG_OF_TIME)), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, {[]{return logic->Bow && logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult && logic->CanUse(RG_LONGSHOT);}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp index f80354461cb..26b14503442 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_spirit_temple.cpp @@ -68,6 +68,7 @@ void AreaTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, logic->CanUse(RG_SONG_OF_TIME) && (logic->Bow || logic->Hookshot || logic->CanUse(RG_BOMBCHU_5) || (logic->Bombs && randoCtx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))), + LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->Bombs && logic->IsAdult && randoCtx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash)), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}}), @@ -126,6 +127,7 @@ void AreaTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, (randoCtx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->HasExplosives), LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, (randoCtx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->HasExplosives), LOCATION(RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, logic->CanBreakPots), + LOCATION(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, logic->HasExplosives && logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, {[]{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (randoCtx->GetTrickOption(RT_SPIRIT_WALL) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_BOMBCHU_5) || ((logic->Bombs || logic->CanUse(RG_NUTS) || logic->CanUse(RG_DINS_FIRE)) && (logic->Bow || logic->CanUse(RG_HOOKSHOT) || logic->Hammer)));}}), @@ -135,6 +137,8 @@ void AreaTable_Init_SpiritTemple() { //Locations LOCATION(RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && ((logic->CanTakeDamage && randoCtx->GetTrickOption(RT_FLAMING_CHESTS)) || (logic->Bow && logic->Hookshot))), LOCATION(RC_SPIRIT_TEMPLE_TOPMOST_CHEST, (logic->MirrorShield && logic->CanAdultAttack) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))), + LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, logic->CanUse(RG_HOOKSHOT)), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, {[]{return logic->MirrorShield && logic->HasExplosives && logic->Hookshot;}}), @@ -175,6 +179,8 @@ void AreaTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_MAP_CHEST, logic->KokiriSword || logic->Bombs), LOCATION(RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, logic->CanUse(RG_BOMBCHU_5) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 7) && logic->Slingshot && (logic->CanUse(RG_DINS_FIRE) || (Here(RR_SPIRIT_TEMPLE_MQ_ADULT, []{return logic->IsAdult && (logic->CanUse(RG_FIRE_ARROWS) || (randoCtx->GetTrickOption(RT_SPIRIT_MQ_FROZEN_EYE) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME)));})))), //Trick: logic->CanUse(RG_BOMBCHU_5) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 7) && logic->Slingshot && (logic->CanUse(RG_DINS_FIRE) || (SPIRIT_TEMPLE_MQ_ADULT.Adult() && logic->IsAdult && (logic->CanUse(RG_FIRE_ARROWS) || (LogicSpiritMQFrozenEye && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME))))) + LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)), + LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_SHARED, {[]{return logic->CanUse(RG_BOMBCHU_5) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2);}}), @@ -190,6 +196,7 @@ void AreaTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_SONG_OF_TIME) && (logic->MirrorShield || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)), LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)), + LOCATION(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_LOWER_ADULT, {[]{return logic->MirrorShield && logic->IsAdult && (logic->CanUse(RG_FIRE_ARROWS) || (randoCtx->GetTrickOption(RT_SPIRIT_MQ_LOWER_ADULT) && logic->CanUse(RG_DINS_FIRE) && logic->Bow));}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp index 1d29fdd82ce..da1b21a18e5 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_water_temple.cpp @@ -263,6 +263,12 @@ void AreaTable_Init_WaterTemple() { LOCATION(RC_WATER_TEMPLE_GS_RIVER, (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)) || (randoCtx->GetTrickOption(RT_WATER_RIVER_GS) && logic->CanUse(RG_LONGSHOT))), LOCATION(RC_WATER_TEMPLE_RIVER_POT_1, logic->CanBreakPots), LOCATION(RC_WATER_TEMPLE_RIVER_POT_2, logic->CanBreakPots), + LOCATION(RC_WATER_TEMPLE_RIVER_CHEST, (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))), + LOCATION(RC_WATER_TEMPLE_GS_RIVER, (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)) || (randoCtx->GetTrickOption(RT_WATER_RIVER_GS) && logic->CanUse(RG_LONGSHOT))), + LOCATION(RC_WATER_TEMPLE_RIVER_HEART_1, true), + LOCATION(RC_WATER_TEMPLE_RIVER_HEART_2, true), + LOCATION(RC_WATER_TEMPLE_RIVER_HEART_3, true), + LOCATION(RC_WATER_TEMPLE_RIVER_HEART_4, true), }, { //Exits Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, {[]{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT));}}), @@ -282,7 +288,10 @@ void AreaTable_Init_WaterTemple() { | MASTER QUEST DUNGEON | ---------------------------*/ if (randoCtx->GetDungeon(WATER_TEMPLE)->IsMQ()) { - areaTable[RR_WATER_TEMPLE_MQ_LOBBY] = Area("Water Temple MQ Lobby", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_LOBBY] = Area("Water Temple MQ Lobby", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanJumpslash && logic->Hearts > 0))) + }, { //Exits Entrance(RR_WATER_TEMPLE_ENTRYWAY, {[]{return true;}}), Entrance(RR_WATER_TEMPLE_MQ_DIVE, {[]{return logic->IsAdult && logic->WaterTimer >= 24 && logic->CanUse(RG_IRON_BOOTS);}}), @@ -317,6 +326,8 @@ void AreaTable_Init_WaterTemple() { //Locations LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST, logic->IsAdult && logic->WaterTimer >= 24 && logic->CanUse(RG_DINS_FIRE) && (randoCtx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE) || logic->CanDive || logic->CanUse(RG_IRON_BOOTS))), LOCATION(RC_WATER_TEMPLE_MQ_GS_RIVER, true), + LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS, {[]{return logic->IsAdult && logic->WaterTimer >= 24 && logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_IRON_BOOTS);}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_zoras_domain.cpp b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_zoras_domain.cpp index 76181b9b6b2..1eb11f840fd 100644 --- a/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_zoras_domain.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/location_access/locacc_zoras_domain.cpp @@ -21,6 +21,25 @@ void AreaTable_Init_ZorasDomain() { EventAccess(&logic->BugShrub, {[]{return logic->BugShrub || logic->CanCutShrubs;}}), }, { //Locations + LOCATION(RC_ZR_MAGIC_BEAN_SALESMAN, logic->ChildsWallet && logic->IsChild), + LOCATION(RC_ZR_FROGS_OCARINA_GAME, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY) && logic->CanUse(RG_SARIAS_SONG) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZR_FROGS_IN_THE_RAIN, logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZR_FROGS_ZELDAS_LULLABY, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY)), + LOCATION(RC_ZR_FROGS_EPONAS_SONG, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)), + LOCATION(RC_ZR_FROGS_SARIAS_SONG, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)), + LOCATION(RC_ZR_FROGS_SUNS_SONG, logic->IsChild && logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_ZR_FROGS_SONG_OF_TIME, logic->IsChild && logic->CanUse(RG_SONG_OF_TIME)), + LOCATION(RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, logic->IsChild || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && randoCtx->GetTrickOption(RT_ZR_LOWER))), + LOCATION(RC_ZR_NEAR_DOMAIN_FREESTANDING_POH, logic->IsChild || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && randoCtx->GetTrickOption(RT_ZR_UPPER))), + LOCATION(RC_ZR_GS_LADDER, logic->IsChild && logic->AtNight && logic->CanChildAttack && logic->CanGetNightTimeGS), + LOCATION(RC_ZR_GS_NEAR_RAISED_GROTTOS, logic->IsAdult && logic->HookshotOrBoomerang && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_ZR_GS_ABOVE_BRIDGE, logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, logic->IsAdult), + LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, logic->IsAdult), + LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, logic->IsAdult), + LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult), + LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true), + LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true), LOCATION(RC_ZR_MAGIC_BEAN_SALESMAN, logic->ChildsWallet && logic->IsChild), LOCATION(RC_ZR_FROGS_OCARINA_GAME, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY) && logic->CanUse(RG_SARIAS_SONG) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_ZR_FROGS_IN_THE_RAIN, logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS)), @@ -34,6 +53,13 @@ void AreaTable_Init_ZorasDomain() { LOCATION(RC_ZR_GS_LADDER, logic->IsChild && logic->AtNight && logic->CanChildAttack && logic->CanGetNightTimeGS), LOCATION(RC_ZR_GS_NEAR_RAISED_GROTTOS, logic->IsAdult && logic->HookshotOrBoomerang && logic->AtNight && logic->CanGetNightTimeGS), LOCATION(RC_ZR_GS_ABOVE_BRIDGE, logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true), LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true), }, { @@ -56,6 +82,8 @@ void AreaTable_Init_ZorasDomain() { //Locations LOCATION(RC_ZR_OPEN_GROTTO_CHEST, true), LOCATION(RC_ZR_OPEN_GROTTO_FISH, logic->HasBottle), + LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairy), + LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives), LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives), @@ -67,7 +95,17 @@ void AreaTable_Init_ZorasDomain() { areaTable[RR_ZR_FAIRY_GROTTO] = Area("ZR Fairy Grotto", "ZR Fairy Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, { //Event EventAccess(&logic->FreeFairies, {[]{return true;}}), - }, {}, { + }, { + //Locations + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_1, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_2, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_3, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_4, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_5, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_6, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_7, true), + LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_8, true), + }, { //Exits Entrance(RR_ZORAS_RIVER, {[]{return true;}}), }); @@ -103,6 +141,8 @@ void AreaTable_Init_ZorasDomain() { LOCATION(RC_ZD_FISH_3, logic->IsChild && logic->HasBottle), LOCATION(RC_ZD_FISH_4, logic->IsChild && logic->HasBottle), LOCATION(RC_ZD_FISH_5, logic->IsChild && logic->HasBottle), + LOCATION(RC_ZD_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_ZD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_ZD_GOSSIP_STONE, true), LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, logic->CanBreakUpperBeehives), LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, logic->CanBreakUpperBeehives), @@ -147,7 +187,17 @@ void AreaTable_Init_ZorasDomain() { areaTable[RR_ZD_STORMS_GROTTO] = Area("ZD Storms Grotto", "ZD Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FreeFairies, {[]{return true;}}), - }, {}, { + }, { + //Locations + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_1, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_2, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_3, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_4, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_5, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_6, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_7, true), + LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_8, true), + }, { //Exits Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}), }); @@ -166,12 +216,41 @@ void AreaTable_Init_ZorasDomain() { LOCATION(RC_ZF_HIDDEN_CAVE_POT_1, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->IsAdult && logic->CanBlastOrSmash && logic->CanBreakPots), LOCATION(RC_ZF_HIDDEN_CAVE_POT_2, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->IsAdult && logic->CanBlastOrSmash && logic->CanBreakPots), LOCATION(RC_ZF_HIDDEN_CAVE_POT_3, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->IsAdult && logic->CanBlastOrSmash && logic->CanBreakPots), + LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY, logic->CanSummonGossipFairyWithoutSuns), + LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_ZF_FAIRY_GOSSIP_STONE, true), LOCATION(RC_ZF_JABU_GOSSIP_STONE, true), LOCATION(RC_ZF_NEAR_JABU_POT_1, logic->IsChild && logic->CanBreakPots), LOCATION(RC_ZF_NEAR_JABU_POT_2, logic->IsChild && logic->CanBreakPots), LOCATION(RC_ZF_NEAR_JABU_POT_3, logic->IsChild && logic->CanBreakPots), LOCATION(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots), + LOCATION(RC_ZF_ICEBERC_FREESTANDING_POH, logic->IsAdult), + LOCATION(RC_ZF_BOTTOM_FREESTANDING_POH, logic->IsAdult && logic->IronBoots && logic->WaterTimer >= 24), + LOCATION(RC_ZF_GS_TREE, logic->IsChild), + LOCATION(RC_ZF_GS_ABOVE_THE_LOG, logic->IsChild && logic->HookshotOrBoomerang && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_ZF_GS_HIDDEN_CAVE, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanBlastOrSmash && logic->HookshotOrBoomerang && logic->IsAdult && logic->AtNight && logic->CanGetNightTimeGS), + LOCATION(RC_ZF_BOTTOM_NORTH_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24), + LOCATION(RC_ZF_FAIRY_GOSSIP_STONE, true), + LOCATION(RC_ZF_JABU_GOSSIP_STONE, true), }, { //Exits Entrance(RR_ZD_BEHIND_KING_ZORA, {[]{return true;}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index d7fdbe0cda2..5da7d00ce34 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -146,6 +146,8 @@ void WriteIngameSpoilerLog() { (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_FAST) && loc->IsCategory(Category::cVanillaGFSmallKey) && loc->GetHintKey() != RHT_GF_NORTH_F1_CARPENTER)) { continue; + } else if (!ctx->GetOption(RSK_SHUFFLE_FREESTANDING) && loc->IsCategory(Category::cFreestanding)) { + continue; } // Copy at most 51 chars from the name and location name to avoid issues with names that don't fit on screen diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index b04d15c9cc2..c205445b72a 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -175,6 +175,11 @@ Dungeons::Dungeons() { RC_DEKU_TREE_GS_BASEMENT_GATE, RC_DEKU_TREE_GS_BASEMENT_VINES, RC_DEKU_TREE_GS_COMPASS_ROOM, + RC_DEKU_TREE_LOBBY_LOWER_HEART, + RC_DEKU_TREE_LOBBY_UPPER_HEART, + RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, + RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, + RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, }, { // MQ Locations @@ -190,6 +195,13 @@ Dungeons::Dungeons() { RC_DEKU_TREE_MQ_GS_COMPASS_ROOM, RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, + RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, + RC_DEKU_TREE_MQ_DEKU_BABA_HEART, + RC_DEKU_TREE_MQ_LOBBY_HEART, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, + RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, + RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, + RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, }, {}, { @@ -245,6 +257,12 @@ Dungeons::Dungeons() { RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, + RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, + RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, + RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, + RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, + RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, + RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, }, { // MQ Locations @@ -295,6 +313,10 @@ Dungeons::Dungeons() { RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2, RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, + RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, + RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, + RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, + RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, }, {}, { @@ -358,6 +380,11 @@ Dungeons::Dungeons() { RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, + RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, + RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, + RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, + RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, + RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, }, {}, { @@ -417,6 +444,10 @@ Dungeons::Dungeons() { RC_FOREST_TEMPLE_BLUE_POE_POT_3, RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, + RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, + RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, + RC_FOREST_TEMPLE_WELL_WEST_HEART, + RC_FOREST_TEMPLE_WELL_EAST_HEART, }, { // MQ Locations @@ -460,6 +491,12 @@ Dungeons::Dungeons() { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, + RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, + RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, + RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, + RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, + RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, + RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, }, {}, { @@ -508,6 +545,15 @@ Dungeons::Dungeons() { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, + RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, + RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, + RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, + RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, + RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, + RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, + RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, + RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, + RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, }, { // MQ Locations @@ -558,6 +604,11 @@ Dungeons::Dungeons() { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, + RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, + RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, + RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, + RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, + RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, }, {}, { @@ -610,6 +661,10 @@ Dungeons::Dungeons() { RC_WATER_TEMPLE_LIKE_LIKE_POT_2, RC_WATER_TEMPLE_BOSS_KEY_POT_1, RC_WATER_TEMPLE_BOSS_KEY_POT_2, + RC_WATER_TEMPLE_RIVER_HEART_1, + RC_WATER_TEMPLE_RIVER_HEART_2, + RC_WATER_TEMPLE_RIVER_HEART_3, + RC_WATER_TEMPLE_RIVER_HEART_4, }, { // MQ Locations @@ -657,6 +712,9 @@ Dungeons::Dungeons() { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, + RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, + RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, + RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, }, {}, { @@ -709,6 +767,10 @@ Dungeons::Dungeons() { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, + RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, + RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, + RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, + RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, }, { // MQ Locations @@ -768,6 +830,9 @@ Dungeons::Dungeons() { RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, + RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, + RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, + RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, }, { // Shared Locations @@ -829,6 +894,16 @@ Dungeons::Dungeons() { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, + RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, + RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, + RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, + RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, + RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, + RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, + RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, + RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, + RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, + RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, }, { // MQ Locations @@ -876,6 +951,16 @@ Dungeons::Dungeons() { RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, + RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, + RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, + RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, + RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, + RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, + RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, + RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, + RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, + RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, + RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, }, {}, { @@ -926,6 +1011,14 @@ Dungeons::Dungeons() { RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, + RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, }, { // MQ Locations @@ -946,6 +1039,15 @@ Dungeons::Dungeons() { RC_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1, RC_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2, RC_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3, + RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, }, {}, {}); dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS, @@ -969,6 +1071,14 @@ Dungeons::Dungeons() { RC_ICE_CAVERN_NEAR_END_POT_1, RC_ICE_CAVERN_NEAR_END_POT_2, RC_ICE_CAVERN_FROZEN_POT_1, + RC_ICE_CAVERN_LOBBY_RUPEE, + RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, + RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, + RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, + RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, + RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, + RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, + RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, }, { // MQ Locations @@ -1025,6 +1135,9 @@ Dungeons::Dungeons() { RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, + RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, + RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, + RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, }, { // MQ Locations @@ -1089,6 +1202,20 @@ Dungeons::Dungeons() { RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, + RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, + RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, + RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, + RC_GANONS_CASTLE_FIRE_TRIAL_HEART, + RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, + RC_GANONS_CASTLE_SCRUBS_FAIRY_1, + RC_GANONS_CASTLE_SCRUBS_FAIRY_2, + RC_GANONS_CASTLE_SCRUBS_FAIRY_3, + RC_GANONS_CASTLE_SCRUBS_FAIRY_4, + RC_GANONS_CASTLE_SCRUBS_FAIRY_5, + RC_GANONS_CASTLE_SCRUBS_FAIRY_6, + RC_GANONS_CASTLE_SCRUBS_FAIRY_7, + RC_GANONS_CASTLE_SCRUBS_FAIRY_8, + RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, }, { // MQ Locations @@ -1124,6 +1251,17 @@ Dungeons::Dungeons() { RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, + RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, + RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, + RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, }, { // Shared Locations diff --git a/soh/soh/Enhancements/randomizer/fairy_shuffle.cpp b/soh/soh/Enhancements/randomizer/fairy_shuffle.cpp new file mode 100644 index 00000000000..018f60e524d --- /dev/null +++ b/soh/soh/Enhancements/randomizer/fairy_shuffle.cpp @@ -0,0 +1,101 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "fairy_shuffle.h" +#include "randomizer_grotto.h" +#include "draw.h" +#include "src/overlays/actors/ovl_En_Elf/z_en_elf.h" +#include "src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h" + +#define FAIRY_FLAG_TIMED (1 << 8) +#define FAIRY_FLAG_BIG (1 << 9) + +void FairyDrawRandomizedItem(EnElf* enElf, PlayState* play) { + GetItemEntry randoGetItem = enElf->sohFairyIdentity.itemEntry; + if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { + randoGetItem = GET_ITEM_MYSTERY; + } + Matrix_Push(); + Matrix_Scale(37.5, 37.5, 37.5, MTXMODE_APPLY); + EnItem00_CustomItemsParticles(&enElf->actor, play, randoGetItem); + GetItemEntry_Draw(play, randoGetItem); + Matrix_Pop(); +} + +bool FairyInitialise(EnElf* fairy, int32_t params) { + if (fairy->actor.params != FAIRY_HEAL_TIMED && fairy->actor.params != FAIRY_HEAL && fairy->actor.params != FAIRY_HEAL_BIG) { + return false; + } + s16 sceneNum = gPlayState->sceneNum; + if (sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT || sceneNum == SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS) { + sceneNum = SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY; + } + Rando::Location* location = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_EN_ELF, sceneNum, params); + RandomizerInf flag = static_cast(location->GetCollectionCheck().flag); + if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK && !Flags_GetRandomizerInf(flag)) { + GetItemEntry item = Rando::Context::GetInstance()->GetFinalGIEntry(location->GetRandomizerCheck(), true, GI_FAIRY); + fairy->sohFairyIdentity = { flag, item }; + fairy->actor.draw = (ActorFunc)FairyDrawRandomizedItem; + return true; + } else { + return false; + } +} + +void FairyOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void* optionalArg) { + if (id == VB_FAIRY_HEAL) { + EnElf* enElf = static_cast(optionalArg); + if (enElf->sohFairyIdentity.randomizerInf != RAND_INF_MAX) { + Flags_SetRandomizerInf(enElf->sohFairyIdentity.randomizerInf); + *should = false; + } + } else if (id == VB_SPAWN_FAIRY_GROUP) { + EnElf* enElf = static_cast(optionalArg); + s16 grottoId = (gPlayState->sceneNum == SCENE_FAIRYS_FOUNTAIN) ? Grotto_CurrentGrotto() : 0; + for (s16 index = 0; index < 8; index++) { + EnElf* newFairy = (EnElf*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ELF, enElf->actor.world.pos.x, + enElf->actor.world.pos.y - 30.0f, enElf->actor.world.pos.z, 0, 0, 0, FAIRY_HEAL, true); + + FairyInitialise(newFairy, (grottoId << 8) | index); + } + *should = false; + } else if (id == VB_BEAN_SPAWN_FAIRIES) { + ObjBean* objBean = static_cast(optionalArg); + for (s16 index = 0; index < 3; index++) { + EnElf* newFairy = (EnElf*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ELF, objBean->dyna.actor.world.pos.x, + objBean->dyna.actor.world.pos.y + 15.0f, objBean->dyna.actor.world.pos.z, 0, 0, 0, FAIRY_HEAL, true); + + if (!FairyInitialise(newFairy, ((objBean->dyna.actor.params & 0x3F) << 8) | index)) { + newFairy->fairyFlags |= FAIRY_FLAG_TIMED; + } + } + *should = false; + } +} + +void FairyOnActorInitHandler(void* actorRef) { + EnElf* enElf = static_cast(actorRef); + enElf->sohFairyIdentity = { RAND_INF_MAX, GET_ITEM_NONE }; + s16 params = (gPlayState->sceneNum == SCENE_GROTTOS) ? Grotto_CurrentGrotto() : 0; + if (enElf->fairyFlags & FAIRY_FLAG_BIG) { + params |= 0x1000; + } + + if (FairyInitialise(enElf, TWO_ACTOR_PARAMS(params, (s16)enElf->actor.home.pos.z))) { + enElf->fairyFlags &= ~(FAIRY_FLAG_TIMED | FAIRY_FLAG_BIG); + } +} + +uint32_t onVanillaBehaviorHook = 0; +uint32_t onActorInitHook = 0; + +void FairyRegisterHooks() { + onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(FairyOnVanillaBehaviorHandler); + onActorInitHook = GameInteractor::Instance->RegisterGameHookForID(ACTOR_EN_ELF, FairyOnActorInitHandler); +} + +void FairyUnregisterHooks() { + GameInteractor::Instance->UnregisterGameHook(onVanillaBehaviorHook); + GameInteractor::Instance->UnregisterGameHookForID(onActorInitHook); + + onVanillaBehaviorHook = 0; + onActorInitHook = 0; +} \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/fairy_shuffle.h b/soh/soh/Enhancements/randomizer/fairy_shuffle.h new file mode 100644 index 00000000000..95640af9386 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/fairy_shuffle.h @@ -0,0 +1,14 @@ +#pragma once + +#include +#include "soh/Enhancements/item-tables/ItemTableTypes.h" +#include "randomizer_inf.h" + +typedef struct FairyIdentity { + RandomizerInf randomizerInf; + GetItemEntry itemEntry; +} FairyIdentity; + + +void FairyRegisterHooks(); +void FairyUnregisterHooks(); diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 4bd8da74259..de86eb77e47 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -6,6 +6,7 @@ #include "soh/Enhancements/randomizer/dungeon.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/Enhancements/randomizer/fairy_shuffle.h" extern "C" { #include "macros.h" @@ -661,13 +662,24 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void break; case VB_ITEM00_DESPAWN: { EnItem00* item00 = static_cast(optionalArg); - if (item00->actor.params == ITEM00_HEART_PIECE || item00->actor.params == ITEM00_SMALL_KEY) { - RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(item00->actor.id, gPlayState->sceneNum, item00->ogParams); - if (rc != RC_UNKNOWN_CHECK) { + item00->randoInf = RAND_INF_MAX; + item00->randoCheck = RC_UNKNOWN_CHECK; + + auto pos = item00->actor.world.pos; + uint32_t params = item00->collectibleFlag ? item00->ogParams : TWO_ACTOR_PARAMS((int32_t)pos.x, (int32_t)pos.z); + Rando::Location* loc = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(item00->actor.id, gPlayState->sceneNum, params); + + if (loc && loc->GetRandomizerCheck() != RC_UNKNOWN_CHECK && (RAND_GET_OPTION(RSK_SHUFFLE_FREESTANDING) || item00->actor.params == ITEM00_HEART_PIECE || item00->actor.params == ITEM00_SMALL_KEY)) { + // Spawn vanilla item if collected and renewable + if (loc->GetCollectionCheck().type != SPOILER_CHK_RANDOMIZER_INF || !Rando::Context::GetInstance()->GetItemLocation(loc->GetRandomizerCheck())->HasObtained()) { + item00->randoCheck = loc->GetRandomizerCheck(); + item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(loc->GetRandomizerCheck(), true); item00->actor.params = ITEM00_SOH_DUMMY; - item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; - *should = Rando::Context::GetInstance()->GetItemLocation(rc)->HasObtained(); + if (loc->GetCollectionCheck().type == SPOILER_CHK_RANDOMIZER_INF) { + item00->randoInf = static_cast(loc->GetCollectionCheck().flag); + } + *should = Rando::Context::GetInstance()->GetItemLocation(loc->GetRandomizerCheck())->HasObtained(); } } else if (item00->actor.params == ITEM00_SOH_GIVE_ITEM_ENTRY || item00->actor.params == ITEM00_SOH_GIVE_ITEM_ENTRY_GI) { GetItemEntry itemEntry = randomizerQueuedItemEntry; @@ -1518,6 +1530,8 @@ void RandomizerRegisterHooks() { onSceneInitHook = 0; onActorInitHook = 0; + FairyUnregisterHooks(); + if (!IS_RANDO) return; onFlagSetHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnFlagSetHandler); @@ -1528,5 +1542,9 @@ void RandomizerRegisterHooks() { onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnVanillaBehaviorHandler); onSceneInitHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnSceneInitHandler); onActorInitHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnActorInitHandler); + + if (RAND_GET_OPTION(RSK_SHUFFLE_FAIRIES)) { + FairyRegisterHooks(); + } }); } diff --git a/soh/soh/Enhancements/randomizer/location.cpp b/soh/soh/Enhancements/randomizer/location.cpp index ddc9f7fc208..14561b56e96 100644 --- a/soh/soh/Enhancements/randomizer/location.cpp +++ b/soh/soh/Enhancements/randomizer/location.cpp @@ -99,7 +99,7 @@ RandomizerGet Rando::Location::GetVanillaItem() const { Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, - uint8_t flag_, std::string&& shortName_, std::string&& spoilerName_, + uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -110,7 +110,7 @@ Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest q Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, - uint8_t flag_, std::string&& shortName_, + uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -121,7 +121,7 @@ Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest q Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -134,7 +134,7 @@ Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -147,7 +147,7 @@ Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -159,7 +159,7 @@ Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -171,7 +171,7 @@ Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest Rando::Location Rando::Location::Collectable( RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { return {rc, quest_, checkType_, area_, LocationType::Collectable, actorId_, scene_, actorParams_, flag_, @@ -183,7 +183,7 @@ Rando::Location Rando::Location::Collectable( Rando::Location Rando::Location::Collectable( RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { return {rc, quest_, checkType_, area_, LocationType::Collectable, actorId_, scene_, actorParams_, flag_, @@ -195,7 +195,7 @@ Rando::Location Rando::Location::Collectable( Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, const uint8_t collectFlag_, @@ -210,7 +210,7 @@ Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheck Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, const uint8_t collectFlag_, @@ -225,7 +225,7 @@ Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheck Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -238,7 +238,7 @@ Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheck Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -250,7 +250,7 @@ Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheck } Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -262,7 +262,7 @@ Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQues } Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -274,7 +274,7 @@ Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQues } Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, std::vector&& categories, const uint8_t skullScene_, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -286,7 +286,7 @@ Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQues } Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, std::vector&& categories, const uint8_t skullScene_, SpoilerCollectionCheckGroup collectionCheckGroup, bool isVanillaCompletion_) { @@ -299,7 +299,7 @@ Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQues Rando::Location Rando::Location::GrottoScrub(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -312,7 +312,7 @@ Rando::Location Rando::Location::GrottoScrub(RandomizerCheck rc, RandomizerCheck Rando::Location Rando::Location::GrottoScrub(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -325,7 +325,7 @@ Rando::Location Rando::Location::GrottoScrub(RandomizerCheck rc, RandomizerCheck Rando::Location Rando::Location::Delayed(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -337,7 +337,7 @@ Rando::Location Rando::Location::Delayed(RandomizerCheck rc, RandomizerCheckQues Rando::Location Rando::Location::Delayed(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -349,7 +349,7 @@ Rando::Location Rando::Location::Delayed(RandomizerCheck rc, RandomizerCheckQues Rando::Location Rando::Location::Reward(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -361,7 +361,7 @@ Rando::Location Rando::Location::Reward(RandomizerCheck rc, RandomizerCheckQuest Rando::Location Rando::Location::Reward(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, @@ -371,6 +371,15 @@ Rando::Location Rando::Location::Reward(RandomizerCheck rc, RandomizerCheckQuest isVanillaCompletion_, collectionCheck, collectionCheckGroup}; } +Rando::Location Rando::Location::Fairy(RandomizerCheck rc, RandomizerCheckQuest quest_, + RandomizerCheckArea area_, uint8_t scene_, + int32_t actorParams_, RandomizerInf flag_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, SpoilerCollectionCheckGroup collectionCheckGroup) { + return {rc, quest_, RCTYPE_FAIRY, area_, LocationType::Base, ACTOR_EN_ELF, scene_, actorParams_, (uint16_t)flag_, + std::move(shortName_), hintKey, RG_NONE, { Category::cFairy }, false, + SpoilerCollectionCheck(SPOILER_CHK_RANDOMIZER_INF, scene_, flag_), collectionCheckGroup}; +} + Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, @@ -390,7 +399,7 @@ Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQu } Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, std::vector&& categories, bool isVanillaCompletion_) { return {rc, quest_, RCTYPE_GOSSIP_STONE, area_, LocationType::Base, ACTOR_EN_GS, scene_, actorParams_, flag_, @@ -399,7 +408,7 @@ Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQu } Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::vector&& categories, bool isVanillaCompletion_) { return {rc, quest_, RCTYPE_GOSSIP_STONE, area_, LocationType::Base, ACTOR_EN_GS, scene_, actorParams_, flag_, diff --git a/soh/soh/Enhancements/randomizer/location.h b/soh/soh/Enhancements/randomizer/location.h index bd7f69a8bbc..e1322867729 100644 --- a/soh/soh/Enhancements/randomizer/location.h +++ b/soh/soh/Enhancements/randomizer/location.h @@ -101,7 +101,7 @@ class Location { collectionCheck(SpoilerCollectionCheck()), collectionCheckGroup(GROUP_NO_GROUP) {} Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_, const RandomizerCheckArea area_, const LocationType locationType_, const ActorID actorId_, const uint8_t scene_, - const int32_t actorParams_, const uint8_t flag_, std::string shortName_, std::string spoilerName_, + const int32_t actorParams_, const uint16_t flag_, std::string shortName_, std::string spoilerName_, const RandomizerHintTextKey hintKey_, const RandomizerGet vanillaItem_, std::vector categories_, const bool isVanillaCompletion_ = false, const SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), const SpoilerCollectionCheckGroup collectionCheckGroup_ = GROUP_NO_GROUP) @@ -113,7 +113,7 @@ class Location { } Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_, const RandomizerCheckArea area_, const LocationType locationType_, const ActorID actorId_, const uint8_t scene_, - const int32_t actorParams_, const uint8_t flag_, std::string shortName_, + const int32_t actorParams_, const uint16_t flag_, std::string shortName_, const RandomizerHintTextKey hintKey_, const RandomizerGet vanillaItem_, std::vector categories_, const bool isVanillaCompletion_ = false, const SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), const SpoilerCollectionCheckGroup collectionCheckGroup_ = GROUP_NO_GROUP) @@ -156,7 +156,7 @@ class Location { static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, - uint8_t flag_, std::string&& shortName_, std::string&& spoilerName_, + uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), @@ -165,7 +165,7 @@ class Location { static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, - uint8_t flag_, std::string&& shortName_, + uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), @@ -174,7 +174,7 @@ class Location { static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -182,7 +182,7 @@ class Location { static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -190,7 +190,7 @@ class Location { static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -198,7 +198,7 @@ class Location { static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -206,7 +206,7 @@ class Location { static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -214,7 +214,7 @@ class Location { static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -222,7 +222,7 @@ class Location { static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, uint8_t collectFlag_, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -230,7 +230,7 @@ class Location { static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, uint8_t collectFlag_, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -238,7 +238,7 @@ class Location { static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), @@ -247,7 +247,7 @@ class Location { static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), @@ -256,14 +256,14 @@ class Location { static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, bool isVanillaCompletion_ = true); static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, bool isVanillaCompletion_ = true); @@ -288,7 +288,7 @@ class Location { /// @return static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, std::vector&& categories, uint8_t skullScene_, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -296,7 +296,7 @@ class Location { static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, std::vector&& categories, uint8_t skullScene_, SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -304,7 +304,7 @@ class Location { static Location GrottoScrub(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), @@ -313,7 +313,7 @@ class Location { static Location GrottoScrub(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, + RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), @@ -322,7 +322,7 @@ class Location { static Location Delayed(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -330,7 +330,7 @@ class Location { static Location Delayed(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, @@ -338,18 +338,22 @@ class Location { static Location Reward(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, bool isVanillaCompletion_ = false); static Location Reward(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, - ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + ActorID actorId_, uint8_t scene_, int32_t actorParams_, uint16_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = GROUP_NO_GROUP, bool isVanillaCompletion_ = false); + static Location + Fairy(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, uint8_t scene_, int32_t actorParams_, + RandomizerInf flag, std::string&& shortName_, RandomizerHintTextKey hintKey, SpoilerCollectionCheckGroup collectionCheckGroup); + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, uint8_t scene_, std::string&& shortName_, std::string&& spoilerName_, bool isVanillaCompletion_ = false); @@ -359,11 +363,11 @@ class Location { std::string&& shortName_, bool isVanillaCompletion_ = false); static Location HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, std::string&& spoilerName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::string&& spoilerName_, std::vector&& categories, bool isVanillaCompletion_ = false); static Location HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, uint8_t scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + int32_t actorParams_, uint16_t flag_, std::string&& shortName_, std::vector&& categories, bool isVanillaCompletion_ = false); private: @@ -375,7 +379,7 @@ class Location { ActorID actorId; uint8_t scene; int32_t actorParams; - uint8_t flag; + uint16_t flag; bool checked = false; std::string shortName; std::string spoilerName; diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index bed7bc2ef70..02925511c0a 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -643,6 +643,283 @@ std::vector Rando::StaticData::overworldLocations = { RC_LH_GROTTO_BEEHIVE, RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, RC_COLOSSUS_GROTTO_BEEHIVE, + + RC_KF_BOULDER_RUPEE_2, + RC_KF_BOULDER_RUPEE_1, + RC_KF_BRIDGE_RUPEE, + RC_KF_BEHIND_MIDOS_RUPEE, + RC_KF_SARIAS_ROOF_WEST_HEART, + RC_KF_SARIAS_ROOF_EAST_HEART, + RC_KF_SARIAS_ROOF_NORTH_HEART, + RC_KF_SOUTH_GRASS_WEST_RUPEE, + RC_KF_NORTH_GRASS_WEST_RUPEE, + RC_KF_NORTH_GRASS_EAST_RUPEE, + RC_KF_SOUTH_GRASS_EAST_RUPEE, + RC_KF_SARIAS_TOP_LEFT_HEART, + RC_KF_SARIAS_TOP_RIGHT_HEART, + RC_KF_SARIAS_BOTTOM_LEFT_HEART, + RC_KF_SARIAS_BOTTOM_RIGHT_HEART, + RC_KF_BEAN_RUPEE_1, + RC_KF_BEAN_RUPEE_2, + RC_KF_BEAN_RUPEE_3, + RC_KF_BEAN_RUPEE_4, + RC_KF_BEAN_RUPEE_5, + RC_KF_BEAN_RUPEE_6, + RC_KF_BEAN_RED_RUPEE, + RC_LW_BOULDER_RUPEE, + RC_LW_SHORTCUT_RUPEE_1, + RC_LW_SHORTCUT_RUPEE_2, + RC_LW_SHORTCUT_RUPEE_3, + RC_LW_SHORTCUT_RUPEE_4, + RC_LW_SHORTCUT_RUPEE_5, + RC_LW_SHORTCUT_RUPEE_6, + RC_LW_SHORTCUT_RUPEE_7, + RC_LW_SHORTCUT_RUPEE_8, + RC_LH_FRONT_RUPEE, + RC_LH_MIDDLE_RUPEE, + RC_LH_BACK_RUPEE, + RC_LH_LAB_FRONT_RUPEE, + RC_LH_LAB_LEFT_RUPEE, + RC_LH_LAB_RIGHT_RUPEE, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_1, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_2, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_3, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_4, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_5, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, + RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, + RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, + RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, + RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_RED_RUPEE, + RC_DMT_RED_RUPEE, + RC_DMT_BLUE_RUPEE, + RC_DMT_COW_GROTTO_LEFT_HEART, + RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, + RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, + RC_DMT_COW_GROTTO_RIGHT_HEART, + RC_DMT_COW_GROTTO_RUPEE_1, + RC_DMT_COW_GROTTO_RUPEE_2, + RC_DMT_COW_GROTTO_RUPEE_3, + RC_DMT_COW_GROTTO_RUPEE_4, + RC_DMT_COW_GROTTO_RUPEE_5, + RC_DMT_COW_GROTTO_RUPEE_6, + RC_DMT_COW_GROTTO_RED_RUPEE, + RC_DMC_NEAR_PLATFORM_RED_RUPEE, + RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, + RC_DMC_DISTANT_PLATFORM_RED_RUPEE, + RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, + RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, + RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, + RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, + RC_ZF_BOTTOM_NORTH_INNER_RUPEE, + RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, + RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, + RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, + RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, + RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, + RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, + RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, + RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, + RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, + RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, + RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, + RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, + RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, + + RC_SFM_FAIRY_GROTTO_FAIRY_1, + RC_SFM_FAIRY_GROTTO_FAIRY_2, + RC_SFM_FAIRY_GROTTO_FAIRY_3, + RC_SFM_FAIRY_GROTTO_FAIRY_4, + RC_SFM_FAIRY_GROTTO_FAIRY_5, + RC_SFM_FAIRY_GROTTO_FAIRY_6, + RC_SFM_FAIRY_GROTTO_FAIRY_7, + RC_SFM_FAIRY_GROTTO_FAIRY_8, + RC_ZR_FAIRY_GROTTO_FAIRY_1, + RC_ZR_FAIRY_GROTTO_FAIRY_2, + RC_ZR_FAIRY_GROTTO_FAIRY_3, + RC_ZR_FAIRY_GROTTO_FAIRY_4, + RC_ZR_FAIRY_GROTTO_FAIRY_5, + RC_ZR_FAIRY_GROTTO_FAIRY_6, + RC_ZR_FAIRY_GROTTO_FAIRY_7, + RC_ZR_FAIRY_GROTTO_FAIRY_8, + RC_HF_FAIRY_GROTTO_FAIRY_1, + RC_HF_FAIRY_GROTTO_FAIRY_2, + RC_HF_FAIRY_GROTTO_FAIRY_3, + RC_HF_FAIRY_GROTTO_FAIRY_4, + RC_HF_FAIRY_GROTTO_FAIRY_5, + RC_HF_FAIRY_GROTTO_FAIRY_6, + RC_HF_FAIRY_GROTTO_FAIRY_7, + RC_HF_FAIRY_GROTTO_FAIRY_8, + RC_ZD_FAIRY_GROTTO_FAIRY_1, + RC_ZD_FAIRY_GROTTO_FAIRY_2, + RC_ZD_FAIRY_GROTTO_FAIRY_3, + RC_ZD_FAIRY_GROTTO_FAIRY_4, + RC_ZD_FAIRY_GROTTO_FAIRY_5, + RC_ZD_FAIRY_GROTTO_FAIRY_6, + RC_ZD_FAIRY_GROTTO_FAIRY_7, + RC_ZD_FAIRY_GROTTO_FAIRY_8, + RC_GF_FAIRY_GROTTO_FAIRY_1, + RC_GF_FAIRY_GROTTO_FAIRY_2, + RC_GF_FAIRY_GROTTO_FAIRY_3, + RC_GF_FAIRY_GROTTO_FAIRY_4, + RC_GF_FAIRY_GROTTO_FAIRY_5, + RC_GF_FAIRY_GROTTO_FAIRY_6, + RC_GF_FAIRY_GROTTO_FAIRY_7, + RC_GF_FAIRY_GROTTO_FAIRY_8, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, + RC_COLOSSUS_OASIS_FAIRY_1, + RC_COLOSSUS_OASIS_FAIRY_2, + RC_COLOSSUS_OASIS_FAIRY_3, + RC_COLOSSUS_OASIS_FAIRY_4, + RC_COLOSSUS_OASIS_FAIRY_5, + RC_COLOSSUS_OASIS_FAIRY_6, + RC_COLOSSUS_OASIS_FAIRY_7, + RC_COLOSSUS_OASIS_FAIRY_8, + + RC_ZR_BEAN_SPROUT_FAIRY_1, + RC_ZR_BEAN_SPROUT_FAIRY_2, + RC_ZR_BEAN_SPROUT_FAIRY_3, + RC_KF_BEAN_SPROUT_FAIRY_1, + RC_KF_BEAN_SPROUT_FAIRY_2, + RC_KF_BEAN_SPROUT_FAIRY_3, + RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, + RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, + RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, + RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, + RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, + RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, + RC_LH_BEAN_SPROUT_FAIRY_1, + RC_LH_BEAN_SPROUT_FAIRY_2, + RC_LH_BEAN_SPROUT_FAIRY_3, + RC_GV_BEAN_SPROUT_FAIRY_1, + RC_GV_BEAN_SPROUT_FAIRY_2, + RC_GV_BEAN_SPROUT_FAIRY_3, + RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, + RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, + RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, + RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, + RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, + RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, + RC_DMC_BEAN_SPROUT_FAIRY_1, + RC_DMC_BEAN_SPROUT_FAIRY_2, + RC_DMC_BEAN_SPROUT_FAIRY_3, + RC_DMT_BEAN_SPROUT_FAIRY_1, + RC_DMT_BEAN_SPROUT_FAIRY_2, + RC_DMT_BEAN_SPROUT_FAIRY_3, + + RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, + RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, + RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, + RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, + RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, + RC_DMC_GOSSIP_STONE_FAIRY, + RC_DMC_GOSSIP_STONE_FAIRY_BIG, + RC_DMT_GOSSIP_STONE_FAIRY, + RC_DMT_GOSSIP_STONE_FAIRY_BIG, + RC_COLOSSUS_GOSSIP_STONE_FAIRY, + RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, + RC_GV_GOSSIP_STONE_FAIRY, + RC_GV_GOSSIP_STONE_FAIRY_BIG, + RC_GC_MAZE_GOSSIP_STONE_FAIRY, + RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, + RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, + RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, + RC_GRAVEYARD_GOSSIP_STONE_FAIRY, + RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, + RC_HC_MALON_GOSSIP_STONE_FAIRY, + RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, + RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, + RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, + RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, + RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, + RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, + RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, + RC_KF_GOSSIP_STONE_FAIRY, + RC_KF_GOSSIP_STONE_FAIRY_BIG, + RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LH_LAB_GOSSIP_STONE_FAIRY, + RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, + RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, + RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, + RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, + RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, + RC_LW_GOSSIP_STONE_FAIRY, + RC_LW_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, + RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, + RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_SARIA_GOSSIP_STONE_FAIRY, + RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, + RC_ZD_GOSSIP_STONE_FAIRY, + RC_ZD_GOSSIP_STONE_FAIRY_BIG, + RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, + RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, + RC_ZF_JABU_GOSSIP_STONE_FAIRY, + RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, + RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, + RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, + RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, + RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, + RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, + + RC_LH_ISLAND_SUN_FAIRY, + RC_HF_POND_STORMS_FAIRY, + RC_DMT_FLAG_SUN_FAIRY, + RC_LW_SHORTCUT_STORMS_FAIRY, + RC_GF_KITCHEN_SUN_FAIRY, }; std::vector Rando::StaticData::gossipStoneLocations = { @@ -719,6 +996,152 @@ std::vector Rando::StaticData::overworldFishLocations = { RC_ZD_FISH_1, RC_ZD_FISH_2, RC_ZD_FISH_3, RC_ZD_FISH_4, RC_ZD_FISH_5 }; +std::vector Rando::StaticData::overworldFairyLocations = { + RC_SFM_FAIRY_GROTTO_FAIRY_1, + RC_SFM_FAIRY_GROTTO_FAIRY_2, + RC_SFM_FAIRY_GROTTO_FAIRY_3, + RC_SFM_FAIRY_GROTTO_FAIRY_4, + RC_SFM_FAIRY_GROTTO_FAIRY_5, + RC_SFM_FAIRY_GROTTO_FAIRY_6, + RC_SFM_FAIRY_GROTTO_FAIRY_7, + RC_SFM_FAIRY_GROTTO_FAIRY_8, + RC_ZR_FAIRY_GROTTO_FAIRY_1, + RC_ZR_FAIRY_GROTTO_FAIRY_2, + RC_ZR_FAIRY_GROTTO_FAIRY_3, + RC_ZR_FAIRY_GROTTO_FAIRY_4, + RC_ZR_FAIRY_GROTTO_FAIRY_5, + RC_ZR_FAIRY_GROTTO_FAIRY_6, + RC_ZR_FAIRY_GROTTO_FAIRY_7, + RC_ZR_FAIRY_GROTTO_FAIRY_8, + RC_HF_FAIRY_GROTTO_FAIRY_1, + RC_HF_FAIRY_GROTTO_FAIRY_2, + RC_HF_FAIRY_GROTTO_FAIRY_3, + RC_HF_FAIRY_GROTTO_FAIRY_4, + RC_HF_FAIRY_GROTTO_FAIRY_5, + RC_HF_FAIRY_GROTTO_FAIRY_6, + RC_HF_FAIRY_GROTTO_FAIRY_7, + RC_HF_FAIRY_GROTTO_FAIRY_8, + RC_ZD_FAIRY_GROTTO_FAIRY_1, + RC_ZD_FAIRY_GROTTO_FAIRY_2, + RC_ZD_FAIRY_GROTTO_FAIRY_3, + RC_ZD_FAIRY_GROTTO_FAIRY_4, + RC_ZD_FAIRY_GROTTO_FAIRY_5, + RC_ZD_FAIRY_GROTTO_FAIRY_6, + RC_ZD_FAIRY_GROTTO_FAIRY_7, + RC_ZD_FAIRY_GROTTO_FAIRY_8, + RC_GF_FAIRY_GROTTO_FAIRY_1, + RC_GF_FAIRY_GROTTO_FAIRY_2, + RC_GF_FAIRY_GROTTO_FAIRY_3, + RC_GF_FAIRY_GROTTO_FAIRY_4, + RC_GF_FAIRY_GROTTO_FAIRY_5, + RC_GF_FAIRY_GROTTO_FAIRY_6, + RC_GF_FAIRY_GROTTO_FAIRY_7, + RC_GF_FAIRY_GROTTO_FAIRY_8, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, + RC_COLOSSUS_OASIS_FAIRY_1, + RC_COLOSSUS_OASIS_FAIRY_2, + RC_COLOSSUS_OASIS_FAIRY_3, + RC_COLOSSUS_OASIS_FAIRY_4, + RC_COLOSSUS_OASIS_FAIRY_5, + RC_COLOSSUS_OASIS_FAIRY_6, + RC_COLOSSUS_OASIS_FAIRY_7, + RC_COLOSSUS_OASIS_FAIRY_8, + RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, + RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, + RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, + RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, + RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, + RC_DMC_GOSSIP_STONE_FAIRY, + RC_DMC_GOSSIP_STONE_FAIRY_BIG, + RC_DMT_GOSSIP_STONE_FAIRY, + RC_DMT_GOSSIP_STONE_FAIRY_BIG, + RC_COLOSSUS_GOSSIP_STONE_FAIRY, + RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, + RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, + RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, + RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, + RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, + RC_GV_GOSSIP_STONE_FAIRY, + RC_GV_GOSSIP_STONE_FAIRY_BIG, + RC_GC_MAZE_GOSSIP_STONE_FAIRY, + RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, + RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, + RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, + RC_GRAVEYARD_GOSSIP_STONE_FAIRY, + RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, + RC_HC_MALON_GOSSIP_STONE_FAIRY, + RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, + RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, + RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, + RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, + RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, + RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, + RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, + RC_KF_GOSSIP_STONE_FAIRY, + RC_KF_GOSSIP_STONE_FAIRY_BIG, + RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LH_LAB_GOSSIP_STONE_FAIRY, + RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, + RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, + RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, + RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, + RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, + RC_LW_GOSSIP_STONE_FAIRY, + RC_LW_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, + RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, + RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_SARIA_GOSSIP_STONE_FAIRY, + RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, + RC_ZD_GOSSIP_STONE_FAIRY, + RC_ZD_GOSSIP_STONE_FAIRY_BIG, + RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, + RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, + RC_ZF_JABU_GOSSIP_STONE_FAIRY, + RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, + RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, + RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, + RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, + RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, + RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LH_ISLAND_SUN_FAIRY, + RC_HF_POND_STORMS_FAIRY, + RC_DMT_FLAG_SUN_FAIRY, + RC_LW_SHORTCUT_STORMS_FAIRY, + RC_GF_KITCHEN_SUN_FAIRY, +}; + typedef enum { DUNGEON_DEKU_TREE = 0, DUNGEON_DODONGOS_CAVERN, @@ -2198,6 +2621,453 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_ZD_FISH_4] = Location::Base(RC_ZD_FISH_4, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, 0x00, "Fish 4", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); locationTable[RC_ZD_FISH_5] = Location::Base(RC_ZD_FISH_5, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, 0x00, "Fish 5", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + // Freestanding Hearts and Rupees + locationTable[RC_KF_BOULDER_RUPEE_2] = Location::Collectable(RC_KF_BOULDER_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x0E01, 0x0E, "Boulder Maze Second Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BOULDER_RUPEE_1] = Location::Collectable(RC_KF_BOULDER_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x0F01, 0x0F, "Boulder Maze First Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BRIDGE_RUPEE] = Location::Collectable(RC_KF_BRIDGE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x1101, 0x11, "Bridge Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEHIND_MIDOS_RUPEE] = Location::Collectable(RC_KF_BEHIND_MIDOS_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x1201, 0x12, "Behind Mido's House Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_ROOF_WEST_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_WEST_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x1C03, 0x1C, "Saria's Roof West Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_ROOF_EAST_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_EAST_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x1D03, 0x1D, "Saria's Roof East Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_ROOF_NORTH_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_NORTH_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x1E03, 0x1E, "Saria's Roof North Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SOUTH_GRASS_WEST_RUPEE] = Location::Collectable(RC_KF_SOUTH_GRASS_WEST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x2400, 0x24, "South Grass West Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_NORTH_GRASS_WEST_RUPEE] = Location::Collectable(RC_KF_NORTH_GRASS_WEST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x2500, 0x25, "North Grass West Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_WEST_RUPEE), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_NORTH_GRASS_EAST_RUPEE] = Location::Collectable(RC_KF_NORTH_GRASS_EAST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x2600, 0x26, "North Grass East Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_EAST_RUPEE), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SOUTH_GRASS_EAST_RUPEE] = Location::Collectable(RC_KF_SOUTH_GRASS_EAST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, 0x2700, 0x27, "South Grass East Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_TOP_LEFT_HEART] = Location::Collectable(RC_KF_SARIAS_TOP_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, 0x3803, 0x38, "Saria's House Top Left Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_TOP_RIGHT_HEART] = Location::Collectable(RC_KF_SARIAS_TOP_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, 0x3903, 0x39, "Saria's House Top Right Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_BOTTOM_LEFT_HEART] = Location::Collectable(RC_KF_SARIAS_BOTTOM_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, 0x3A03, 0x3A, "Saria's House Bottom Left Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_SARIAS_BOTTOM_RIGHT_HEART] = Location::Collectable(RC_KF_SARIAS_BOTTOM_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, 0x3B03, 0x3B, "Saria's House Bottom Right Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + + locationTable[RC_KF_BEAN_RUPEE_1] = Location::Collectable(RC_KF_BEAN_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1269, -528), 0, "Bean Platform Rupee 1", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_RUPEE_2] = Location::Collectable(RC_KF_BEAN_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1269, -567), 0, "Bean Platform Rupee 2", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_RUPEE_3] = Location::Collectable(RC_KF_BEAN_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -588), 0, "Bean Platform Rupee 3", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_RUPEE_4] = Location::Collectable(RC_KF_BEAN_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1338, -567), 0, "Bean Platform Rupee 4", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_4), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_RUPEE_5] = Location::Collectable(RC_KF_BEAN_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1338, -528), 0, "Bean Platform Rupee 5", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_5), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_RUPEE_6] = Location::Collectable(RC_KF_BEAN_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -508), 0, "Bean Platform Rupee 6", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_6), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_RED_RUPEE] = Location::Collectable(RC_KF_BEAN_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_KOKIRI_FOREST, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -548), 0, "Bean Platform Red Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RED_RUPEE), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + + locationTable[RC_LW_BOULDER_RUPEE] = Location::Collectable(RC_LW_BOULDER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x1301, 0x13, "Boulder Rupee", RHT_LOST_WOODS_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_1] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3400, 0x34, "Underwater Shortcut Rupee 1", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_2] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3500, 0x35, "Underwater Shortcut Rupee 2", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_3] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3600, 0x36, "Underwater Shortcut Rupee 3", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_4] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3700, 0x37, "Underwater Shortcut Rupee 4", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_4), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_5] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3900, 0x39, "Underwater Shortcut Rupee 5", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_5), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_6] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3A00, 0x3A, "Underwater Shortcut Rupee 6", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_6), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_7] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_7, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3B00, 0x3B, "Underwater Shortcut Rupee 7", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_7), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_SHORTCUT_RUPEE_8] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_8, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LOST_WOODS, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, 0x3C00, 0x3C, "Underwater Shortcut Rupee 8", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_8), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + + locationTable[RC_LH_FRONT_RUPEE] = Location::Collectable(RC_LH_FRONT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 0x2000, 0x20, "Underwater Front Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_FRONT_RUPEE), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_MIDDLE_RUPEE] = Location::Collectable(RC_LH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 0x2100, 0x21, "Underwater Middle Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_BACK_RUPEE] = Location::Collectable(RC_LH_BACK_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 0x2200, 0x22, "Underwater Back Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BACK_RUPEE), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_LAB_FRONT_RUPEE] = Location::Collectable(RC_LH_LAB_FRONT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, 0x0102, 0x01, "Lab Front Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_LAB_LEFT_RUPEE] = Location::Collectable(RC_LH_LAB_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, 0x0202, 0x02, "Lab Left Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_LAB_RIGHT_RUPEE] = Location::Collectable(RC_LH_LAB_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, 0x0302, 0x03, "Lab Right Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + + 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, 0x3800, 0x38, "Dampe's Grave Rupee 1", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3900, 0x39, "Dampe's Grave Rupee 2", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3A00, 0x3A, "Dampe's Grave Rupee 3", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3B00, 0x3B, "Dampe's Grave Rupee 4", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3C00, 0x3C, "Dampe's Grave Rupee 5", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3D00, 0x3D, "Dampe's Grave Rupee 6", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3E00, 0x3E, "Dampe's Grave Rupee 7", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + 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, 0x3F00, 0x3F, "Dampe's Grave Rupee 8", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + + 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, 0x3801, 0x38, "Octorok Grotto Front Left Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3901, 0x39, "Octorok Grotto Back Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3A01, 0x3A, "Octorok Grotto Front Right Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3B00, 0x3B, "Octorok Grotto Front Left Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3C00, 0x3C, "Octorok Grotto Front Right Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3D00, 0x3D, "Octorok Grotto Back Left Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3E00, 0x3E, "Octorok Grotto Back Right Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + 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, 0x3F02, 0x3F, "Octorok Grotto Red Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + + locationTable[RC_DMT_RED_RUPEE] = Location::Collectable(RC_DMT_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0A02, 0x0A, "Red Rupee Under Boulder", RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_BLUE_RUPEE] = Location::Collectable(RC_DMT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0701, 0x07, "Blue Rupee Under Boulder", RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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, 0x2803, 0x28, "Cow Grotto Left Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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, 0x2903, 0x29, "Cow Grotto Middle Left Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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, 0x2A03, 0x2A, "Cow Grotto Middle Right Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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, 0x2B03, 0x2B, "Cow Grotto Right Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Rupee 1", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Rupee 2", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Rupee 3", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Rupee 4", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_4), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Rupee 5", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_5), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Rupee 6", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_6), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + 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), 0, "Cow Grotto Red Rupee", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RED_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + + locationTable[RC_DMC_NEAR_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_NEAR_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2002, 0x20, "Near Warp Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2102, 0x21, "Middle Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2201, 0x22, "Middle Platform Blue Rupee 1", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2301, 0x23, "Middle Platform Blue Rupee 2", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2401, 0x24, "Middle Platform Blue Rupee 3", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2501, 0x25, "Middle Platform Blue Rupee 4", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2601, 0x26, "Middle Platform Blue Rupee 5", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 0x2701, 0x27, "Middle Platform Blue Rupee 6", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1087, 454), 0, "Distant Platform Rupee 1", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1087, 415), 0, "Distant Platform Rupee 2", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 395), 0, "Distant Platform Rupee 3", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1156, 415), 0, "Distant Platform Rupee 4", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1156, 454), 0, "Distant Platform Rupee 5", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 475), 0, "Distant Platform Rupee 6", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_DISTANT_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 435), 0, "Distant Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + + locationTable[RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_RIVER, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 0x2002, 0x20, "Beneath Domain Red Left Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_RIVER, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 0x2102, 0x21, "Beneath Domain Red Middle Left Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_RIVER, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 0x2202, 0x22, "Beneath Domain Red Middle Right Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_RIVER, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 0x2302, 0x23, "Beneath Domain Red Right Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + + locationTable[RC_ZF_BOTTOM_NORTH_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2000, 0x20, "Bottom North Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2100, 0x21, "Bottom Northeast Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2200, 0x22, "Bottom Southeast Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTH_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2300, 0x23, "Bottom South Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2400, 0x24, "Bottom Southwest Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2500, 0x25, "Bottom Northwest Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2600, 0x26, "Bottom North Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2700, 0x27, "Bottom Northeast Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2800, 0x28, "Bottom Southeast Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2900, 0x29, "Bottom South Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2A00, 0x2A, "Bottom Southwest Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2B00, 0x2B, "Bottom Northwest Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTH_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2C00, 0x2C, "Bottom North Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2D00, 0x2D, "Bottom Northeast Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2E00, 0x2E, "Bottom Southeast Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x2F00, 0x2F, "Bottom South Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x3000, 0x30, "Bottom Southwest Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_ZORAS_FOUNTAIN, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 0x3100, 0x31, "Bottom Northwest Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + + locationTable[RC_DEKU_TREE_LOBBY_LOWER_HEART] = Location::Collectable(RC_DEKU_TREE_LOBBY_LOWER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2C03, 0x2C, "Lobby Lower Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_LOBBY_UPPER_HEART] = Location::Collectable(RC_DEKU_TREE_LOBBY_UPPER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2D03, 0x2D, "Lobby Upper Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2E03, 0x2E, "Final Room Left Front Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x3003, 0x30, "Final Room Left Back Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x3103, 0x31, "Final Room Right Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + + locationTable[RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DODONGOS_CAVERN, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, 0x1803, 0x18, "Lower Lizalfos Room Lavafall Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_BLADE_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DODONGOS_CAVERN, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, 0x3003, 0x30, "Blade Room Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DODONGOS_CAVERN, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, 0x2503, 0x25, "Upper Lizalfos Room Left Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_DODONGOS_CAVERN, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, 0x2403, 0x24, "Upper Lizalfos Room Right Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + + locationTable[RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x2D03, 0x2D, "West Courtyard Right Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x2E03, 0x2E, "West Courtyard Left Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[RC_FOREST_TEMPLE_WELL_WEST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_WELL_WEST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x2F03, 0x2F, "Well East Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[RC_FOREST_TEMPLE_WELL_EAST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_WELL_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x3003, 0x30, "Well West Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + + locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x2F03, 0x2F, "Fire Pillar Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3003, 0x30, "Fire Pillar Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3403, 0x34, "Fire Pillar Room Back Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3703, 0x37, "East Central Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3503, 0x35, "East Central Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3603, 0x36, "East Central Room Middle Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3203, 0x32, "Fire Wall Chase East Pillar Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3103, 0x31, "Fire Wall Chase West Pillar Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3303, 0x33, "Fire Wall Chase Exit Platform Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + + locationTable[RC_WATER_TEMPLE_RIVER_HEART_1] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_WATER_TEMPLE, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, 0x2A03, 0x2A, "River Heart 1", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_1), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[RC_WATER_TEMPLE_RIVER_HEART_2] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_WATER_TEMPLE, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, 0x2D03, 0x2D, "River Heart 2", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_2), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[RC_WATER_TEMPLE_RIVER_HEART_3] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_WATER_TEMPLE, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, 0x3203, 0x32, "River Heart 2", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_3), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[RC_WATER_TEMPLE_RIVER_HEART_4] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_4, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_WATER_TEMPLE, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, 0x3403, 0x34, "River Heart 3", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_4), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + + locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2003, 0x20, "Invisible Blades Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2103, 0x21, "Invisible Blades Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2203, 0x22, "Scarecrow Near Ship North Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2303, 0x23, "Scarecrow Near Ship South Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x3A03, 0x3A, "After Ship Upper Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x3903, 0x39, "After Ship Upper Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x3C03, 0x3C, "After Ship Lower Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + + locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, 0x0103, 0x01, "Adult Climb Left Heart", RHT_SPIRIT_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, 0x0203, 0x02, "Adult Climb Right Heart", RHT_SPIRIT_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x0501, 0x05, "Basement Platform Left Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x0601, 0x06, "Basement Platform Back Left Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x0201, 0x02, "Basement Platform Middle Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x0301, 0x03, "Basement Platform Back Right Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x0401, 0x04, "Basement Platform Right Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x1F03, 0x1F, "Coffin Room Front Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x2003, 0x20, "Coffin Room Middle Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + + locationTable[RC_ICE_CAVERN_LOBBY_RUPEE] = Location::Collectable(RC_ICE_CAVERN_LOBBY_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x2101, 0x21, "Lobby Rupee", RHT_ICE_CAVERN_RUPEE, RG_BLUE_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_RUPEE), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x2203, 0x22, "Map Room Left Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x2303, 0x23, "Map Room Middle Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x2403, 0x21, "Map Room Right Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x2E02, 0x2E, "Sliding Block Room Rupee 1", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x2F02, 0x2F, "Sliding Block Room Rupee 2", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_ICE_CAVERN, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, 0x3002, 0x30, "Sliding Block Room Rupee 3", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + + locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, 0x2203, 0x22, "Beamos South Heart", RHT_GERUDO_TRAINING_GROUNDS_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART), SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, 0x2303, 0x23, "Beamos East Heart", RHT_GERUDO_TRAINING_GROUNDS_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART), SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x2103, 0x21, "Shadow Trial Heart 1", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x2203, 0x22, "Shadow Trial Heart 2", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x2303, 0x23, "Shadow Trial Heart 3", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x2403, 0x24, "Fire Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x2603, 0x26, "Spirit Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + + locationTable[RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2203, 0x22, "MQ Compass Room Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_MQ_DEKU_BABA_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2303, 0x23, "MQ Deku Baba Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_MQ_LOBBY_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_LOBBY_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2403, 0x24, "MQ Lobby Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2603, 0x26, "MQ Slingshot Room Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x2E03, 0x2E, "MQ Final Room Left Front Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x3003, 0x30, "MQ Final Room Left Back Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DEKU_TREE, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, 0x3103, 0x31, "MQ Final Room Right Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + + locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DODONGOS_CAVERN, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, 0x1803, 0x18, "MQ Lizalfos Room Lavafall Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_DODONGOS_CAVERN, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, 0x3003, 0x30, "MQ Torch Room Invisible Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_ITEM00, SCENE_JABU_JABU, 0x0100, 0x01, "MQ Lift Room Underwater Rupee 1", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_ITEM00, SCENE_JABU_JABU, 0x0200, 0x02, "MQ Lift Room Underwater Rupee 2", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_ITEM00, SCENE_JABU_JABU, 0x0300, 0x03, "MQ Lift Room Underwater Rupee 3", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, { Category::cFreestanding }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_ITEM00, SCENE_JABU_JABU, 0x2703, 0x27, "MQ Lift Room Heart 1", RHT_JABU_JABU_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_ITEM00, SCENE_JABU_JABU, 0x2803, 0x28, "MQ Lift Room Heart 2", RHT_JABU_JABU_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + + locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x2D03, 0x2D, "MQ West Courtyard Right Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x2E03, 0x2E, "MQ West Courtyard Middle Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x2F03, 0x2F, "MQ West Courtyard Left Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x3803, 0x38, "MQ Well Middle Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x3903, 0x39, "MQ Well West Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FOREST_TEMPLE, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, 0x3A03, 0x3A, "MQ Well East Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x2F03, 0x2F, "MQ Fire Pillar Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3403, 0x34, "MQ Fire Pillar Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_FIRE_TEMPLE, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, 0x3003, 0x30, "MQ Fire Pillar Room Lower Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + + locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2003, 0x20, "MQ Invisible Blades Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2103, 0x21, "MQ Invisible Blades Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2203, 0x22, "MQ Scarecrow Near Ship North Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x2303, 0x23, "MQ Scarecrow Near Ship South Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + 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, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x3A03, 0x3A, "MQ After Ship Upper Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + 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, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x3903, 0x39, "MQ After Ship Upper Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SHADOW_TEMPLE, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 0x3C03, 0x3C, "MQ After Ship Lower Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, 0x2C03, 0x2C, "MQ Child Early Left Heart", RHT_SPIRIT_TEMPLE_MQ_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, 0x2E03, 0x2E, "MQ Child Early Right Heart", RHT_SPIRIT_TEMPLE_MQ_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x2003, 0x22, "MQ Coffin Room Front Right Invisible Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x2103, 0x21, "MQ Bomb Alcove Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x2203, 0x22, "MQ Bomb Alcove Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x2303, 0x23, "MQ Coffin Room Middle Left Invisible Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x3C03, 0x3C, "MQ Basement Hallway Front Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x3D03, 0x3D, "MQ Basement Hallway Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + 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, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 0x3E03, 0x3E, "MQ Basement Hallway Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + + locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x3F03, 0x3F, "MQ Water Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x3E03, 0x3E, "MQ Light Trial Right Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 0x3D03, 0x3D, "MQ Light Trial Left Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, { Category::cFreestanding }, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + // Fairies + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1, "Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2, "Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1802, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3, "Grotto Fairy 3", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1803, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4, "Grotto Fairy 4", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1804, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5, "Grotto Fairy 5", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1805, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6, "Grotto Fairy 6", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1806, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7, "Grotto Fairy 7", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1807, RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8, "Grotto Fairy 8", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0300, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1, "Grotto Fairy 1", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0301, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2, "Grotto Fairy 2", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0302, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3, "Grotto Fairy 3", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0303, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4, "Grotto Fairy 4", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0304, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5, "Grotto Fairy 5", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0305, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6, "Grotto Fairy 6", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0306, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7, "Grotto Fairy 7", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0307, RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8, "Grotto Fairy 8", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F00, RAND_INF_HF_FAIRY_GROTTO_FAIRY_1, "Grotto Fairy 1", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F01, RAND_INF_HF_FAIRY_GROTTO_FAIRY_2, "Grotto Fairy 2", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F02, RAND_INF_HF_FAIRY_GROTTO_FAIRY_3, "Grotto Fairy 3", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F03, RAND_INF_HF_FAIRY_GROTTO_FAIRY_4, "Grotto Fairy 4", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F04, RAND_INF_HF_FAIRY_GROTTO_FAIRY_5, "Grotto Fairy 5", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F05, RAND_INF_HF_FAIRY_GROTTO_FAIRY_6, "Grotto Fairy 6", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F06, RAND_INF_HF_FAIRY_GROTTO_FAIRY_7, "Grotto Fairy 7", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F07, RAND_INF_HF_FAIRY_GROTTO_FAIRY_8, "Grotto Fairy 8", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C00, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1, "Grotto Fairy 1", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C01, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2, "Grotto Fairy 2", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C02, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3, "Grotto Fairy 3", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C03, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4, "Grotto Fairy 4", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C04, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5, "Grotto Fairy 5", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C05, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6, "Grotto Fairy 6", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C06, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7, "Grotto Fairy 7", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C07, RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8, "Grotto Fairy 8", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D00, RAND_INF_GF_FAIRY_GROTTO_FAIRY_1, "Grotto Fairy 1", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D01, RAND_INF_GF_FAIRY_GROTTO_FAIRY_2, "Grotto Fairy 2", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D02, RAND_INF_GF_FAIRY_GROTTO_FAIRY_3, "Grotto Fairy 3", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D03, RAND_INF_GF_FAIRY_GROTTO_FAIRY_4, "Grotto Fairy 4", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D04, RAND_INF_GF_FAIRY_GROTTO_FAIRY_5, "Grotto Fairy 5", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D05, RAND_INF_GF_FAIRY_GROTTO_FAIRY_6, "Grotto Fairy 6", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D06, RAND_INF_GF_FAIRY_GROTTO_FAIRY_7, "Grotto Fairy 7", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D07, RAND_INF_GF_FAIRY_GROTTO_FAIRY_8, "Grotto Fairy 8", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x00, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, "Shield Grave Fairy 1", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x01, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, "Shield Grave Fairy 2", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x02, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, "Shield Grave Fairy 3", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x03, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, "Shield Grave Fairy 4", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x04, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, "Shield Grave Fairy 5", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x05, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, "Shield Grave Fairy 6", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x06, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, "Shield Grave Fairy 7", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x07, RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, "Shield Grave Fairy 8", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_1] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x00, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1, "Scrubs Fairy 1", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_2] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x01, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2, "Scrubs Fairy 2", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_3] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x02, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3, "Scrubs Fairy 3", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_4] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x03, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4, "Scrubs Fairy 4", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_5] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x04, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5, "Scrubs Fairy 5", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_6] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x05, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6, "Scrubs Fairy 6", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_7] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x06, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7, "Scrubs Fairy 7", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_8] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x07, RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8, "Scrubs Fairy 8", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x00, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, "MQ Scrubs Fairy 1", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x01, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, "MQ Scrubs Fairy 2", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x02, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, "MQ Scrubs Fairy 3", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x03, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, "MQ Scrubs Fairy 4", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x04, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, "MQ Scrubs Fairy 5", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x05, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, "MQ Scrubs Fairy 6", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x06, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, "MQ Scrubs Fairy 7", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x07, RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, "MQ Scrubs Fairy 8", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[RC_COLOSSUS_OASIS_FAIRY_1] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x00, RAND_INF_COLOSSUS_OASIS_FAIRY_1, "Oasis Fairy 1", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_2] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x01, RAND_INF_COLOSSUS_OASIS_FAIRY_2, "Oasis Fairy 2", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_3] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x02, RAND_INF_COLOSSUS_OASIS_FAIRY_3, "Oasis Fairy 3", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_4] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_4, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x03, RAND_INF_COLOSSUS_OASIS_FAIRY_4, "Oasis Fairy 4", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_5] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_5, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x04, RAND_INF_COLOSSUS_OASIS_FAIRY_5, "Oasis Fairy 5", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_6] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_6, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x05, RAND_INF_COLOSSUS_OASIS_FAIRY_6, "Oasis Fairy 6", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_7] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_7, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x06, RAND_INF_COLOSSUS_OASIS_FAIRY_7, "Oasis Fairy 7", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_OASIS_FAIRY_8] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_8, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x07, RAND_INF_COLOSSUS_OASIS_FAIRY_8, "Oasis Fairy 8", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + + locationTable[RC_ZR_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0300, RAND_INF_ZR_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0301, RAND_INF_ZR_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0302, RAND_INF_ZR_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_KF_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0900, RAND_INF_KF_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0901, RAND_INF_KF_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0902, RAND_INF_KF_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0400, RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, "Bean Sprout Near Bridge Fairy 1", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0401, RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, "Bean Sprout Near Bridge Fairy 2", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0402, RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, "Bean Sprout Near Bridge Fairy 3", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1200, RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, "Bean Sprout Near Theatre Fairy 1", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1201, RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, "Bean Sprout Near Theatre Fairy 2", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1202, RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, "Bean Sprout Near Theatre Fairy 3", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LH_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0100, RAND_INF_LH_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0101, RAND_INF_LH_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0102, RAND_INF_LH_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_GV_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0300, RAND_INF_GV_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GV_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0301, RAND_INF_GV_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GV_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0302, RAND_INF_GV_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1800, RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1801, RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1802, RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0300, RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0301, RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0302, RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_DMC_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0300, RAND_INF_DMC_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0301, RAND_INF_DMC_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0302, RAND_INF_DMC_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0600, RAND_INF_DMT_BEAN_SPROUT_FAIRY_1, "Bean Sprout Fairy 1", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0601, RAND_INF_DMT_BEAN_SPROUT_FAIRY_2, "Bean Sprout Fairy 2", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0602, RAND_INF_DMT_BEAN_SPROUT_FAIRY_3, "Bean Sprout Fairy 3", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + + locationTable[RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -680), RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, "ToT Left Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -680), RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, "ToT Left Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -615), RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, "ToT Left Center Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -615), RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, "ToT Left Center Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -550), RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, "ToT Right Center Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -550), RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, "ToT Right Center Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -485), RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, "ToT Right Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -485), RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, "ToT Right Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_DMC_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMC_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS( 0, 1656), RAND_INF_DMC_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_DMC_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMC_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(0x1000, 1656), RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_DMC_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS( 0, -3935), RAND_INF_DMT_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_DMT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, -3935), RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_DMT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_COLOSSUS_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_COLOSSUS_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS( 0, 1320), RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_COLOSSUS_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(0x1000, 1320), RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS( 0, -1520), RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(0x1000, -1520), RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS( 0, -916), RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, "MQ Gossip Stone Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(0x1000, -916), RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, "MQ Gossip Stone Big Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[RC_GV_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GV_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS( 0, -2340), RAND_INF_GV_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_GV_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GV_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GV_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(0x1000, -2340), RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_GV_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[RC_GC_MAZE_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GC_MAZE_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS( 0, -1265), RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY, "Maze Gossip Stone Fairy", RHT_GC_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(0x1000, -1265), RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, "Maze Gossip Stone Big Fairy", RHT_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS( 0, 1496), RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY, "Medigoron Gossip Stone Fairy", RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(0x1000, 1496), RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, "Medigoron Gossip Stone Big Fairy", RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[RC_GRAVEYARD_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS( 0, -75), RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_GRAVEYARD_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(0x1000, -75), RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_HC_MALON_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_MALON_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS( 0, 3445), RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY, "Malon Gossip Stone Fairy", RHT_HC_MALON_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(0x1000, 3445), RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG, "Malon Gossip Stone Big Fairy", RHT_HC_MALON_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS( 0, 1041), RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, "Rock Wall Gossip Stone Fairy", RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(0x1000, 1041), RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, "Rock Wall Gossip Stone Big Fairy", RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0xC, 735), RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "Storms Grotto Gossip Stone Fairy", RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x100C, 735), RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Storms Grotto Gossip Stone Big Fairy", RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -2230), RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, "Deku Tree Left Gossip Stone Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -2230), RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, "Deku Tree Left Gossip Stone Big Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -700), RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, "Deku Tree Right Gossip Stone Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -700), RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, "Deku Tree Right Gossip Stone Big Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -1223), RAND_INF_KF_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_KF_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -1223), RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_KF_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x1B, -236), RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "Storms Gossip Stone Fairy", RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x101B, -236), RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Storms Gossip Stone Big Fairy", RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[RC_LH_LAB_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_LAB_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 3212), RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY, "Lab Gossip Stone Fairy", RHT_LH_LAB_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 3212), RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG, "Lab Gossip Stone Big Fairy", RHT_LH_LAB_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 8395), RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, "Southeast Gossip Stone Fairy", RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 8395), RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, "Southeast Gossip Stone Big Fairy", RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 7984), RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, "Southwest Gossip Stone Fairy", RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 7984), RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, "Southwest Gossip Stone Big Fairy", RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_LW_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LW_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS( 0, 2300), RAND_INF_LW_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_LW_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LW_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, 2300), RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_LW_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, 1370), RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, "Maze Lower Gossip Stone Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, 1370), RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, "Maze Lower Gossip Stone Big Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, 740), RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, "Maze Upper Gossip Stone Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, 740), RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, "Maze Upper Gossip Stone Big Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_SARIA_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, -2300), RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY, "Saria Gossip Stone Fairy", RHT_SFM_SARIA_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, -2300), RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, "Saria Gossip Stone Big Fairy", RHT_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_ZD_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZD_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS( 0, -1600), RAND_INF_ZD_GOSSIP_STONE_FAIRY, "Gossip Stone Fairy", RHT_ZD_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZD_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZD_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(0x1000, -1600), RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG, "Gossip Stone Big Fairy", RHT_ZD_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_FAIRY_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS( 0, 2205), RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY, "Fairy Gossip Stone Fairy", RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(0x1000, 2205), RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, "Fairy Gossip Stone Big Fairy", RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_JABU_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZF_JABU_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS( 0, -985), RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY, "Jabu Gossip Stone Fairy", RHT_ZF_JABU_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(0x1000, -985), RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, "Jabu Gossip Stone Big Fairy", RHT_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS( 0, -1070), RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, "Near Grottos Gossip Stone Fairy", RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(0x1000, -1070), RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, "Near Grottos Gossip Stone Big Fairy", RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS( 0, -1650), RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, "Near Domain Gossip Stone Fairy", RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(0x1000, -1650), RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, "Near Domain Gossip Stone Big Fairy", RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x11, -357), RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, "Cow Grotto Gossip Stone Fairy", RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1011, -357), RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Cow Grotto Gossip Stone Big Fairy", RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x10, -236), RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, "Near Market Gossip Stone Fairy", RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1010, -236), RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Near Market Gossip Stone Big Fairy", RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x14, -236), RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, "Southeast Gossip Stone Fairy", RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1014, -236), RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Southeast Gossip Stone Big Fairy", RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x13, -236), RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "Open Grotto Gossip Stone Fairy", RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1013, -236), RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Open Grotto Gossip Stone Big Fairy", RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0xA, -236), RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "Open Grotto Gossip Stone Fairy", RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x100A, -236), RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Open Grotto Gossip Stone Big Fairy", RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x4, -236), RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "Open Grotto Gossip Stone Fairy", RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1004, -236), RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Open Grotto Gossip Stone Big Fairy", RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x1A, -236), RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, "Near Shortcuts Gossip Stone Fairy", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x101A, -236), RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Near Shortcuts Gossip Stone Big Fairy", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x8, -236), RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "Storms Grotto Gossip Stone Fairy", RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1008, -236), RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Storms Grotto Gossip Stone Big Fairy", RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x6, -236), RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, "Upper Grotto Gossip Stone Fairy", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1006, -236), RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, "Upper Grotto Gossip Stone Big Fairy", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + + locationTable[RC_LH_ISLAND_SUN_FAIRY] = Location::Fairy(RC_LH_ISLAND_SUN_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 7319), RAND_INF_LH_ISLAND_SUN_FAIRY, "Island Sun's Song Fairy", RHT_LH_ISLAND_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[RC_HF_POND_STORMS_FAIRY] = Location::Fairy(RC_HF_POND_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(0x1000, 5012), RAND_INF_HF_POND_STORMS_FAIRY, "Pond Song of Storms Fairy", RHT_HF_POND_STORMS_FAIRY, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[RC_DMT_FLAG_SUN_FAIRY] = Location::Fairy(RC_DMT_FLAG_SUN_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, 464), RAND_INF_DMT_FLAG_SUN_FAIRY, "Flag Sun's Song Fairy", RHT_DMT_FLAG_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[RC_LW_SHORTCUT_STORMS_FAIRY] = Location::Fairy(RC_LW_SHORTCUT_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, -795), RAND_INF_LW_SHORTCUT_STORMS_FAIRY, "Shortcuts Song of Storms Fairy", RHT_LW_SHORTCUT_STORMS_FAIRY, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[RC_GF_KITCHEN_SUN_FAIRY] = Location::Fairy(RC_GF_KITCHEN_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(0x1000, -621), RAND_INF_GF_KITCHEN_SUN_FAIRY, "Kitchen Sun's Song Fairy", RHT_GF_KITCHEN_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + + locationTable[RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1896), RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, "After Boulder Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -220), RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, "Four Armos Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 54), RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, "Beamos Song of Storms Fairy", RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_PIT_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 3339), RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY, "Pit Room Song of Storms Fairy", RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, "Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1531), RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, "Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY] = Location::Fairy(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(0x1000, 1186), RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, "Entrance Song of Storms Fairy", RHT_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY] = Location::Fairy(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, RCQUEST_VANILLA, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(0x1000, -445), RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, "Entrance Song of Storms Fairy", RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY] = Location::Fairy(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(0x1000, 587), RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, "Spirit Trial Beamos Sun's Song Fairy", RHT_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + + locationTable[RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = Location::Fairy(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -551), RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, "MQ Lower Loop Stalfos Room Sun's Song Fairy", RHT_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY] = Location::Fairy(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1563), RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, "MQ Lower Loop Behind Iron Knuckle Sun's Song Fairy", RHT_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -540), RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, "MQ Before Dark Link Pilar Sun's Song Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1501), RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, "MQ Before Dark Link Left Song of Storms Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1504), RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, "MQ Before Dark Link Right Sun's Song Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -220), RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, "MQ Dinalfos Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 55), RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, "MQ Beamos Song of Storms Fairy", RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 3342), RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, "MQ Pit Room Song of Storms Fairy", RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, "MQ Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -437), RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, "MQ East Cell Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1458), RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, "MQ Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); // Gossip Stones locationTable[RC_DMC_GOSSIP_STONE] = Location::HintStone(RC_DMC_GOSSIP_STONE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 14341, 0x05, "Gossip Stone", {}); diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 2e9d44f6496..49d9617e3ca 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -71,6 +71,8 @@ namespace Rando { return Scarecrow; case RG_DISTANT_SCARECROW: return DistantScarecrow; + case RG_MAGIC_BEAN: + return ctx->GetAmmo(ITEM_BEAN) > 0; case RG_KOKIRI_SWORD: case RG_DEKU_SHIELD: case RG_GORON_TUNIC: @@ -286,6 +288,8 @@ namespace Rando { return BombchuRefill && BombchusEnabled; case RG_RUTOS_LETTER: return IsChild; + case RG_MAGIC_BEAN: + return IsChild; // Adult Trade case RG_POCKET_EGG: @@ -463,7 +467,7 @@ namespace Rando { BuyArrow = GetInLogic(LOGIC_BUY_ARROW); BuyBomb = GetInLogic(LOGIC_BUY_BOMB); BuyMagicPotion = GetInLogic(LOGIC_BUY_MAGIC_POTION); - MagicBean = ctx->GetAmmo(ITEM_BEAN) > 0; + MagicBean = HasItem(RG_MAGIC_BEAN); RutosLetter = CanUse(RG_RUTOS_LETTER); Boomerang = CanUse(RG_BOOMERANG); DinsFire = CanUse(RG_DINS_FIRE); diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index e603739fefb..3501e99b2d7 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -348,6 +348,18 @@ void Settings::CreateOptionDescriptions() { "have collected all 100 Gold Skulltula Tokens.\n" "\n" "You can still talk to him multiple times to get Huge Rupees."; + mOptionDescriptions[RSK_SHUFFLE_FREESTANDING] = "Freestanding rupees & hearts are shuffles to random items. " + "Freestanding heart pieces and small keys are already shuffled by default.\n" + "\n" + "Off - freestanding rupees & hearts will not be shuffled.\n" + "\n" + "Dungeons - Only freestanding rupees & hearts that are within dungeons.\n" + "\n" + "Overworld - Only freestanding rupees & hearts that are outside of dungeons.\n" + "\n" + "All Items - Shuffle all freestanding rupees & hearts."; + mOptionDescriptions[RSK_SHUFFLE_FAIRIES] = + "Shuffle fairy locations."; mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS] = "Shuffles the location of spiritual stones and medallions.\n" "\n" diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 240307261a0..aa4a67f5f23 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -277,6 +277,8 @@ typedef enum { RCTYPE_OCARINA, // Ocarina locations RCTYPE_BEEHIVE, // Beehives RCTYPE_FISH, + RCTYPE_FREESTANDING, // Freestanding rupees and hearts + RCTYPE_FAIRY, // Fairies } RandomizerCheckType; typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest; @@ -459,6 +461,7 @@ typedef enum { RR_DMC_UPPER_GROTTO, RR_DMC_HAMMER_GROTTO, RR_DMC_GREAT_FAIRY_FOUNTAIN, + RR_DMC_DISTANT_PLATFORM, RR_ZR_FRONT, RR_ZORAS_RIVER, RR_ZR_BEHIND_WATERFALL, @@ -2198,6 +2201,416 @@ typedef enum { RC_ZD_FISH_3, RC_ZD_FISH_4, RC_ZD_FISH_5, + RC_KF_BOULDER_RUPEE_1, + RC_KF_BOULDER_RUPEE_2, + RC_KF_BRIDGE_RUPEE, + RC_KF_BEHIND_MIDOS_RUPEE, + RC_KF_SARIAS_ROOF_WEST_HEART, + RC_KF_SARIAS_ROOF_EAST_HEART, + RC_KF_SARIAS_ROOF_NORTH_HEART, + RC_KF_SOUTH_GRASS_WEST_RUPEE, + RC_KF_NORTH_GRASS_WEST_RUPEE, + RC_KF_NORTH_GRASS_EAST_RUPEE, + RC_KF_SOUTH_GRASS_EAST_RUPEE, + RC_KF_SARIAS_TOP_LEFT_HEART, + RC_KF_SARIAS_TOP_RIGHT_HEART, + RC_KF_SARIAS_BOTTOM_LEFT_HEART, + RC_KF_SARIAS_BOTTOM_RIGHT_HEART, + RC_KF_BEAN_RUPEE_1, + RC_KF_BEAN_RUPEE_2, + RC_KF_BEAN_RUPEE_3, + RC_KF_BEAN_RUPEE_4, + RC_KF_BEAN_RUPEE_5, + RC_KF_BEAN_RUPEE_6, + RC_KF_BEAN_RED_RUPEE, + RC_LW_BOULDER_RUPEE, + RC_LW_SHORTCUT_RUPEE_1, + RC_LW_SHORTCUT_RUPEE_2, + RC_LW_SHORTCUT_RUPEE_3, + RC_LW_SHORTCUT_RUPEE_4, + RC_LW_SHORTCUT_RUPEE_5, + RC_LW_SHORTCUT_RUPEE_6, + RC_LW_SHORTCUT_RUPEE_7, + RC_LW_SHORTCUT_RUPEE_8, + RC_LH_FRONT_RUPEE, + RC_LH_MIDDLE_RUPEE, + RC_LH_BACK_RUPEE, + RC_LH_LAB_FRONT_RUPEE, + RC_LH_LAB_LEFT_RUPEE, + RC_LH_LAB_RIGHT_RUPEE, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_1, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_2, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_3, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_4, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_5, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, + RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, + RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, + RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, + RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, + RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, + RC_GV_OCTOROK_GROTTO_RED_RUPEE, + RC_DMT_BLUE_RUPEE, + RC_DMT_RED_RUPEE, + RC_DMT_COW_GROTTO_LEFT_HEART, + RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, + RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, + RC_DMT_COW_GROTTO_RIGHT_HEART, + RC_DMT_COW_GROTTO_RUPEE_1, + RC_DMT_COW_GROTTO_RUPEE_2, + RC_DMT_COW_GROTTO_RUPEE_3, + RC_DMT_COW_GROTTO_RUPEE_4, + RC_DMT_COW_GROTTO_RUPEE_5, + RC_DMT_COW_GROTTO_RUPEE_6, + RC_DMT_COW_GROTTO_RED_RUPEE, + RC_DMC_NEAR_PLATFORM_RED_RUPEE, + RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, + RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, + RC_DMC_DISTANT_PLATFORM_RED_RUPEE, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, + RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, + RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, + RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, + RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, + RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, + RC_ZF_BOTTOM_NORTH_INNER_RUPEE, + RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, + RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, + RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, + RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, + RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, + RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, + RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, + RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, + RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, + RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, + RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, + RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, + RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, + RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, + RC_DEKU_TREE_LOBBY_LOWER_HEART, + RC_DEKU_TREE_LOBBY_UPPER_HEART, + RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, + RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, + RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, + RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, + RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, + RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, + RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, + RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, + RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, + RC_FOREST_TEMPLE_WELL_WEST_HEART, + RC_FOREST_TEMPLE_WELL_EAST_HEART, + RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, + RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, + RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, + RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, + RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, + RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, + RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, + RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, + RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, + RC_WATER_TEMPLE_RIVER_HEART_1, + RC_WATER_TEMPLE_RIVER_HEART_2, + RC_WATER_TEMPLE_RIVER_HEART_3, + RC_WATER_TEMPLE_RIVER_HEART_4, + RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, + RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, + RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, + RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, + RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, + RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, + RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, + RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, + RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, + RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, + RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, + RC_ICE_CAVERN_LOBBY_RUPEE, + RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, + RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, + RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, + RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, + RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, + RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, + RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, + RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, + RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, + RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, + RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, + RC_GANONS_CASTLE_FIRE_TRIAL_HEART, + RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, + RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, + RC_DEKU_TREE_MQ_DEKU_BABA_HEART, + RC_DEKU_TREE_MQ_LOBBY_HEART, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, + RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, + RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, + RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, + RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, + RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, + RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, + RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, + RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, + RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, + RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, + RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, + RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, + RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, + RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, + RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, + RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, + RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, + RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, + RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, + RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, + RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, + RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, + RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, + RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, + RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, + RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, + RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, + RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, + RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, + RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, + RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, + RC_SFM_FAIRY_GROTTO_FAIRY_1, + RC_SFM_FAIRY_GROTTO_FAIRY_2, + RC_SFM_FAIRY_GROTTO_FAIRY_3, + RC_SFM_FAIRY_GROTTO_FAIRY_4, + RC_SFM_FAIRY_GROTTO_FAIRY_5, + RC_SFM_FAIRY_GROTTO_FAIRY_6, + RC_SFM_FAIRY_GROTTO_FAIRY_7, + RC_SFM_FAIRY_GROTTO_FAIRY_8, + RC_ZR_FAIRY_GROTTO_FAIRY_1, + RC_ZR_FAIRY_GROTTO_FAIRY_2, + RC_ZR_FAIRY_GROTTO_FAIRY_3, + RC_ZR_FAIRY_GROTTO_FAIRY_4, + RC_ZR_FAIRY_GROTTO_FAIRY_5, + RC_ZR_FAIRY_GROTTO_FAIRY_6, + RC_ZR_FAIRY_GROTTO_FAIRY_7, + RC_ZR_FAIRY_GROTTO_FAIRY_8, + RC_HF_FAIRY_GROTTO_FAIRY_1, + RC_HF_FAIRY_GROTTO_FAIRY_2, + RC_HF_FAIRY_GROTTO_FAIRY_3, + RC_HF_FAIRY_GROTTO_FAIRY_4, + RC_HF_FAIRY_GROTTO_FAIRY_5, + RC_HF_FAIRY_GROTTO_FAIRY_6, + RC_HF_FAIRY_GROTTO_FAIRY_7, + RC_HF_FAIRY_GROTTO_FAIRY_8, + RC_ZD_FAIRY_GROTTO_FAIRY_1, + RC_ZD_FAIRY_GROTTO_FAIRY_2, + RC_ZD_FAIRY_GROTTO_FAIRY_3, + RC_ZD_FAIRY_GROTTO_FAIRY_4, + RC_ZD_FAIRY_GROTTO_FAIRY_5, + RC_ZD_FAIRY_GROTTO_FAIRY_6, + RC_ZD_FAIRY_GROTTO_FAIRY_7, + RC_ZD_FAIRY_GROTTO_FAIRY_8, + RC_GF_FAIRY_GROTTO_FAIRY_1, + RC_GF_FAIRY_GROTTO_FAIRY_2, + RC_GF_FAIRY_GROTTO_FAIRY_3, + RC_GF_FAIRY_GROTTO_FAIRY_4, + RC_GF_FAIRY_GROTTO_FAIRY_5, + RC_GF_FAIRY_GROTTO_FAIRY_6, + RC_GF_FAIRY_GROTTO_FAIRY_7, + RC_GF_FAIRY_GROTTO_FAIRY_8, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, + RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, + RC_GANONS_CASTLE_SCRUBS_FAIRY_1, + RC_GANONS_CASTLE_SCRUBS_FAIRY_2, + RC_GANONS_CASTLE_SCRUBS_FAIRY_3, + RC_GANONS_CASTLE_SCRUBS_FAIRY_4, + RC_GANONS_CASTLE_SCRUBS_FAIRY_5, + RC_GANONS_CASTLE_SCRUBS_FAIRY_6, + RC_GANONS_CASTLE_SCRUBS_FAIRY_7, + RC_GANONS_CASTLE_SCRUBS_FAIRY_8, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, + RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, + RC_COLOSSUS_OASIS_FAIRY_1, + RC_COLOSSUS_OASIS_FAIRY_2, + RC_COLOSSUS_OASIS_FAIRY_3, + RC_COLOSSUS_OASIS_FAIRY_4, + RC_COLOSSUS_OASIS_FAIRY_5, + RC_COLOSSUS_OASIS_FAIRY_6, + RC_COLOSSUS_OASIS_FAIRY_7, + RC_COLOSSUS_OASIS_FAIRY_8, + RC_ZR_BEAN_SPROUT_FAIRY_1, + RC_ZR_BEAN_SPROUT_FAIRY_2, + RC_ZR_BEAN_SPROUT_FAIRY_3, + RC_KF_BEAN_SPROUT_FAIRY_1, + RC_KF_BEAN_SPROUT_FAIRY_2, + RC_KF_BEAN_SPROUT_FAIRY_3, + RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, + RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, + RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, + RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, + RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, + RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, + RC_LH_BEAN_SPROUT_FAIRY_1, + RC_LH_BEAN_SPROUT_FAIRY_2, + RC_LH_BEAN_SPROUT_FAIRY_3, + RC_GV_BEAN_SPROUT_FAIRY_1, + RC_GV_BEAN_SPROUT_FAIRY_2, + RC_GV_BEAN_SPROUT_FAIRY_3, + RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, + RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, + RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, + RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, + RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, + RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, + RC_DMC_BEAN_SPROUT_FAIRY_1, + RC_DMC_BEAN_SPROUT_FAIRY_2, + RC_DMC_BEAN_SPROUT_FAIRY_3, + RC_DMT_BEAN_SPROUT_FAIRY_1, + RC_DMT_BEAN_SPROUT_FAIRY_2, + RC_DMT_BEAN_SPROUT_FAIRY_3, + RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, + RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, + RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, + RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, + RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, + RC_DMC_GOSSIP_STONE_FAIRY, + RC_DMC_GOSSIP_STONE_FAIRY_BIG, + RC_DMT_GOSSIP_STONE_FAIRY, + RC_DMT_GOSSIP_STONE_FAIRY_BIG, + RC_COLOSSUS_GOSSIP_STONE_FAIRY, + RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, + RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, + RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, + RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, + RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, + RC_GV_GOSSIP_STONE_FAIRY, + RC_GV_GOSSIP_STONE_FAIRY_BIG, + RC_GC_MAZE_GOSSIP_STONE_FAIRY, + RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, + RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, + RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, + RC_GRAVEYARD_GOSSIP_STONE_FAIRY, + RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, + RC_HC_MALON_GOSSIP_STONE_FAIRY, + RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, + RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, + RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, + RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, + RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, + RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, + RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, + RC_KF_GOSSIP_STONE_FAIRY, + RC_KF_GOSSIP_STONE_FAIRY_BIG, + RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LH_LAB_GOSSIP_STONE_FAIRY, + RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, + RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, + RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, + RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, + RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, + RC_LW_GOSSIP_STONE_FAIRY, + RC_LW_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, + RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, + RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, + RC_SFM_SARIA_GOSSIP_STONE_FAIRY, + RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, + RC_ZD_GOSSIP_STONE_FAIRY, + RC_ZD_GOSSIP_STONE_FAIRY_BIG, + RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, + RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, + RC_ZF_JABU_GOSSIP_STONE_FAIRY, + RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, + RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, + RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, + RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, + RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, + RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RC_LH_ISLAND_SUN_FAIRY, + RC_HF_POND_STORMS_FAIRY, + RC_DMT_FLAG_SUN_FAIRY, + RC_LW_SHORTCUT_STORMS_FAIRY, + RC_GF_KITCHEN_SUN_FAIRY, + RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, + RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, + RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, + RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, + RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, + RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, + RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, + RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, + RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, + RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, + RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, + RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, + RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, + RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, + RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, + RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, + RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, + RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, + RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, + RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RC_MAX } RandomizerCheck; @@ -2298,6 +2711,7 @@ typedef enum { RT_FOREST_OUTDOORS_LEDGE, RT_FOREST_DOORFRAME, RT_FOREST_OUTSIDE_BACKDOOR, + RT_FOREST_OUTDOORS_HEARTS_BOOMERANG, RT_FOREST_MQ_WELL_SWIM, RT_FOREST_MQ_BLOCK_PUZZLE, RT_FOREST_MQ_JS_HALLWAY_SWITCH, @@ -4207,7 +4621,150 @@ typedef enum { RHT_YOUR_POCKET, RHT_DUNGEON_ORDINARY, RHT_DUNGEON_MASTERFUL, + // Shuffle Rupees & Hearts + RHT_KOKIRI_FOREST_RUPEE, + RHT_KOKIRI_FOREST_HEART, + RHT_SARIAS_HOUSE_HEART, + RHT_LOST_WOODS_RUPEE, + RHT_LOST_WOODS_SHORTCUT_RUPEE, + RHT_LAKE_HYLIA_RUPEE, + RHT_LABORATORY_RUPEE, + RHT_DAMPES_GRAVE_RUPEE, + RHT_GERUDO_VALLEY_GROTTO_RUPEE, + RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, + RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, + RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, + RHT_DEATH_MOUNTAIN_CRATER_RUPEE, + RHT_ZORAS_RIVER_WATERFALL_RUPEE, + RHT_ZORAS_FOUNTAIN_RUPEE, + RHT_DEKU_TREE_HEART, + RHT_DODONGOS_CAVERN_HEART, + RHT_JABU_JABU_RUPEE, + RHT_JABU_JABU_HEART, + RHT_FOREST_TEMPLE_HEART, + RHT_FIRE_TEMPLE_HEART, + RHT_WATER_TEMPLE_HEART, + RHT_SHADOW_TEMPLE_HEART, + RHT_SPIRIT_TEMPLE_HEART, + RHT_SPIRIT_TEMPLE_MQ_HEART, + RHT_BOTTOM_OF_THE_WELL_HEART, + RHT_BOTTOM_OF_THE_WELL_RUPEE, + RHT_ICE_CAVERN_HEART, + RHT_ICE_CAVERN_RUPEE, + RHT_GERUDO_TRAINING_GROUNDS_HEART, + RHT_GANONS_CASTLE_HEART, // MAX + // Fairy Shuffle + RHT_SFM_FAIRY_GROTTO_FAIRY, + RHT_ZR_FAIRY_GROTTO_FAIRY, + RHT_HF_FAIRY_GROTTO_FAIRY, + RHT_ZD_FAIRY_GROTTO_FAIRY, + RHT_GF_FAIRY_GROTTO_FAIRY, + RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, + RHT_GANONS_CASTLE_SCRUBS_FAIRY, + RHT_COLOSSUS_OASIS_FAIRY, + RHT_ZR_BEAN_SPROUT_FAIRY, + RHT_KF_BEAN_SPROUT_FAIRY, + RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, + RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, + RHT_LH_BEAN_SPROUT_FAIRY, + RHT_GV_BEAN_SPROUT_FAIRY, + RHT_COLOSSUS_BEAN_SPROUT_FAIRY, + RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, + RHT_DMC_BEAN_SPROUT_FAIRY, + RHT_DMT_BEAN_SPROUT_FAIRY, + RHT_TOT_GOSSIP_STONE_FAIRY, + RHT_TOT_GOSSIP_STONE_FAIRY_BIG, + RHT_DMC_GOSSIP_STONE_FAIRY, + RHT_DMC_GOSSIP_STONE_FAIRY_BIG, + RHT_DMT_GOSSIP_STONE_FAIRY, + RHT_DMT_GOSSIP_STONE_FAIRY_BIG, + RHT_COLOSSUS_GOSSIP_STONE_FAIRY, + RHT_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, + RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, + RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, + RHT_GV_GOSSIP_STONE_FAIRY, + RHT_GV_GOSSIP_STONE_FAIRY_BIG, + RHT_GC_MAZE_GOSSIP_STONE_FAIRY, + RHT_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, + RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY, + RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, + RHT_GRAVEYARD_GOSSIP_STONE_FAIRY, + RHT_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, + RHT_HC_MALON_GOSSIP_STONE_FAIRY, + RHT_HC_MALON_GOSSIP_STONE_FAIRY_BIG, + RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, + RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, + RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, + RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, + RHT_KF_GOSSIP_STONE_FAIRY, + RHT_KF_GOSSIP_STONE_FAIRY_BIG, + RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_LH_LAB_GOSSIP_STONE_FAIRY, + RHT_LH_LAB_GOSSIP_STONE_FAIRY_BIG, + RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, + RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, + RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, + RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, + RHT_LW_GOSSIP_STONE_FAIRY, + RHT_LW_GOSSIP_STONE_FAIRY_BIG, + RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, + RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, + RHT_SFM_SARIA_GOSSIP_STONE_FAIRY, + RHT_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, + RHT_ZD_GOSSIP_STONE_FAIRY, + RHT_ZD_GOSSIP_STONE_FAIRY_BIG, + RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY, + RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, + RHT_ZF_JABU_GOSSIP_STONE_FAIRY, + RHT_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, + RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, + RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, + RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, + RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, + RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, + RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, + RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, + RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, + RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, + RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RHT_LH_ISLAND_SUN_FAIRY, + RHT_HF_POND_STORMS_FAIRY, + RHT_DMT_FLAG_SUN_FAIRY, + RHT_LW_SHORTCUT_STORMS_FAIRY, + RHT_GF_KITCHEN_SUN_FAIRY, + RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, + RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, + RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, + RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, + RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, + RHT_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, + RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, + RHT_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, + RHT_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, + RHT_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, + RHT_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, + RHT_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, + RHT_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, + RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, + RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, + RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RHT_MAX } RandomizerHintTextKey; @@ -4456,6 +5013,8 @@ typedef enum { RSK_SKELETON_KEY, RSK_SHUFFLE_DEKU_STICK_BAG, RSK_SHUFFLE_DEKU_NUT_BAG, + RSK_SHUFFLE_FREESTANDING, + RSK_SHUFFLE_FAIRIES, RSK_MAX } RandomizerSettingKey; diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index ba8f306d25e..f09fbd7e9ef 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -170,6 +170,8 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_FROG_SONG || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFrogSongRupees"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_FAIRY || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFairies"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_MAP_COMPASS || CVarGetInteger(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) != RO_DUNGEON_ITEM_LOC_VANILLA) && diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 794a94b0f06..e789ae41aa4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -62,6 +62,8 @@ bool showScrubs; bool showMerchants; bool showBeehives; bool showCows; +bool showOverworldFreestanding; +bool showDungeonFreestanding; bool showAdultTrade; bool showKokiriSword; bool showMasterSword; @@ -71,6 +73,7 @@ bool showGerudoCard; bool showOverworldPots; bool showDungeonPots; bool showFrogSongRupees; +bool showFairies; bool showStartingMapsCompasses; bool showKeysanity; bool showGerudoFortressKeys; @@ -1211,6 +1214,9 @@ void LoadSettings() { showFrogSongRupees = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FROG_SONG_RUPEES) == RO_GENERIC_YES : false; + showFairies = IS_RANDO ? + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FAIRIES) == RO_GENERIC_YES + : false; showStartingMapsCompasses = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MAPANDCOMPASS) != RO_DUNGEON_ITEM_LOC_VANILLA : false; @@ -1301,6 +1307,30 @@ void LoadSettings() { fishsanityMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); fishsanityPondCount = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT); fishsanityAgeSplit = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT); + + if (IS_RANDO) { + switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FREESTANDING)) { + case RO_TOKENSANITY_ALL: + showOverworldFreestanding = true; + showDungeonFreestanding = true; + break; + case RO_TOKENSANITY_OVERWORLD: + showOverworldFreestanding = true; + showDungeonFreestanding = false; + break; + case RO_TOKENSANITY_DUNGEONS: + showOverworldFreestanding = false; + showDungeonFreestanding = true; + break; + default: + showOverworldFreestanding = false; + showDungeonFreestanding = false; + break; + } + } else { // Vanilla + showOverworldFreestanding = false; + showDungeonFreestanding = true; + } } bool IsCheckShuffled(RandomizerCheck rc) { @@ -1338,6 +1368,10 @@ bool IsCheckShuffled(RandomizerCheck rc) { (showDungeonPots && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && (loc->GetRCType() != RCTYPE_COW || showCows) && (loc->GetRCType() != RCTYPE_FISH || OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) && + (loc->GetRCType() != RCTYPE_FREESTANDING || + (showOverworldFreestanding && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonFreestanding && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea())) + ) && (loc->GetRCType() != RCTYPE_ADULT_TRADE || showAdultTrade || rc == RC_KAK_ANJU_AS_ADULT || // adult trade checks that are always shuffled @@ -1350,6 +1384,7 @@ bool IsCheckShuffled(RandomizerCheck rc) { (rc != RC_HC_MALON_EGG || showWeirdEgg) && (loc->GetRCType() != RCTYPE_FROG_SONG || showFrogSongRupees) && (loc->GetRCType() != RCTYPE_MAP_COMPASS || showStartingMapsCompasses) && + (loc->GetRCType() != RCTYPE_FAIRY || showFairies) && (loc->GetRCType() != RCTYPE_SMALL_KEY || showKeysanity) && (loc->GetRCType() != RCTYPE_BOSS_KEY || showBossKeysanity) && (loc->GetRCType() != RCTYPE_GANON_BOSS_KEY || showGanonBossKey) && diff --git a/soh/soh/Enhancements/randomizer/randomizer_grotto.c b/soh/soh/Enhancements/randomizer/randomizer_grotto.c index ef532f670ad..aeaa3e9b6da 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_grotto.c +++ b/soh/soh/Enhancements/randomizer/randomizer_grotto.c @@ -332,3 +332,14 @@ s16 Grotto_GetRenamedGrottoIndexFromOriginal(s8 content, s8 scene) { return ENTRANCE_RANDO_GROTTO_LOAD_START; } + +s8 Grotto_CurrentGrotto() { + if (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { + return grottoId; + } else { + s16 entrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex; + s8 scene = gEntranceTable[entrance].scene; + s8 data = gSaveContext.respawn[RESPAWN_MODE_RETURN].data; + return Grotto_GetRenamedGrottoIndexFromOriginal(data, scene) & 0xFF; + } +} diff --git a/soh/soh/Enhancements/randomizer/randomizer_grotto.h b/soh/soh/Enhancements/randomizer/randomizer_grotto.h index 938c4c6d6ee..e12aa1482bb 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_grotto.h +++ b/soh/soh/Enhancements/randomizer/randomizer_grotto.h @@ -21,6 +21,9 @@ typedef struct { Vec3f pos; } GrottoReturnInfo; +#ifdef __cplusplus +extern "C" { +#endif void Grotto_InitExitAndLoadLists(void); void Grotto_SetExitOverride(s16 originalIndex, s16 overrideIndex); void Grotto_SetLoadOverride(s16 originalIndex, s16 overrideIndex); @@ -31,5 +34,9 @@ void Grotto_ForceGrottoReturn(void); void Grotto_ForceRegularVoidOut(void); void Grotto_SanitizeEntranceType(void); s16 Grotto_GetRenamedGrottoIndexFromOriginal(s8 content, s8 scene); +s8 Grotto_CurrentGrotto(); +#ifdef __cplusplus +}; +#endif #endif //_RANDO_GROTTO_H_ diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 1421ff72854..3462a33e758 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -845,6 +845,401 @@ typedef enum { RAND_INF_CHILD_TRADES_MASK_ZORA, RAND_INF_CHILD_TRADES_MASK_GERUDO, RAND_INF_CHILD_TRADES_MASK_TRUTH, + + RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE, + RAND_INF_KF_NORTH_GRASS_WEST_RUPEE, + RAND_INF_KF_NORTH_GRASS_EAST_RUPEE, + RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE, + RAND_INF_KF_SARIAS_TOP_LEFT_HEART, + RAND_INF_KF_SARIAS_TOP_RIGHT_HEART, + RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART, + RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART, + RAND_INF_KF_BEAN_RUPEE_1, + RAND_INF_KF_BEAN_RUPEE_2, + RAND_INF_KF_BEAN_RUPEE_3, + RAND_INF_KF_BEAN_RUPEE_4, + RAND_INF_KF_BEAN_RUPEE_5, + RAND_INF_KF_BEAN_RUPEE_6, + RAND_INF_KF_BEAN_RED_RUPEE, + RAND_INF_LW_SHORTCUT_RUPEE_1, + RAND_INF_LW_SHORTCUT_RUPEE_2, + RAND_INF_LW_SHORTCUT_RUPEE_3, + RAND_INF_LW_SHORTCUT_RUPEE_4, + RAND_INF_LW_SHORTCUT_RUPEE_5, + RAND_INF_LW_SHORTCUT_RUPEE_6, + RAND_INF_LW_SHORTCUT_RUPEE_7, + RAND_INF_LW_SHORTCUT_RUPEE_8, + RAND_INF_LH_FRONT_RUPEE, + RAND_INF_LH_MIDDLE_RUPEE, + RAND_INF_LH_BACK_RUPEE, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7, + RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8, + + RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, + RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE, + + RAND_INF_DMT_BLUE_RUPEE, + RAND_INF_DMT_COW_GROTTO_LEFT_HEART, + RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, + RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, + RAND_INF_DMT_COW_GROTTO_RIGHT_HEART, + RAND_INF_DMT_COW_GROTTO_RUPEE_1, + RAND_INF_DMT_COW_GROTTO_RUPEE_2, + RAND_INF_DMT_COW_GROTTO_RUPEE_3, + RAND_INF_DMT_COW_GROTTO_RUPEE_4, + RAND_INF_DMT_COW_GROTTO_RUPEE_5, + RAND_INF_DMT_COW_GROTTO_RUPEE_6, + RAND_INF_DMT_COW_GROTTO_RED_RUPEE, + RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE, + RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE, + RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, + RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, + RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, + RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, + RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, + RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, + RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1, + RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2, + RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3, + RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4, + RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5, + RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6, + RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE, + + RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE, + RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, + RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, + RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, + RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE, + RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, + RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, + RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, + RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, + RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, + RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE, + RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE, + RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, + RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, + + RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART, + RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART, + RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, + RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, + RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, + RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART, + RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, + RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, + RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, + RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART, + RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART, + RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART, + RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, + RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, + RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, + RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, + RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, + RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, + RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, + RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, + RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, + RAND_INF_WATER_TEMPLE_RIVER_HEART_1, + RAND_INF_WATER_TEMPLE_RIVER_HEART_2, + RAND_INF_WATER_TEMPLE_RIVER_HEART_3, + RAND_INF_WATER_TEMPLE_RIVER_HEART_4, + RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, + RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, + RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, + RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, + RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, + RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, + RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, + RAND_INF_ICE_CAVERN_LOBBY_RUPEE, + RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART, + RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, + RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, + RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, + RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, + RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, + RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, + RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, + RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, + RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, + RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, + RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, + RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART, + RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART, + + RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART, + RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART, + RAND_INF_DEKU_TREE_MQ_LOBBY_HEART, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, + RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, + RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, + RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, + RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, + RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, + RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, + RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART, + RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART, + RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART, + RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, + RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, + RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, + RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, + RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, + RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, + RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, + RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, + RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, + + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7, + RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7, + RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_1, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_2, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_3, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_4, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_5, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_6, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_7, + RAND_INF_HF_FAIRY_GROTTO_FAIRY_8, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7, + RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_1, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_2, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_3, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_4, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_5, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_6, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_7, + RAND_INF_GF_FAIRY_GROTTO_FAIRY_8, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, + RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7, + RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, + RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, + RAND_INF_COLOSSUS_OASIS_FAIRY_1, + RAND_INF_COLOSSUS_OASIS_FAIRY_2, + RAND_INF_COLOSSUS_OASIS_FAIRY_3, + RAND_INF_COLOSSUS_OASIS_FAIRY_4, + RAND_INF_COLOSSUS_OASIS_FAIRY_5, + RAND_INF_COLOSSUS_OASIS_FAIRY_6, + RAND_INF_COLOSSUS_OASIS_FAIRY_7, + RAND_INF_COLOSSUS_OASIS_FAIRY_8, + + RAND_INF_ZR_BEAN_SPROUT_FAIRY_1, + RAND_INF_ZR_BEAN_SPROUT_FAIRY_2, + RAND_INF_ZR_BEAN_SPROUT_FAIRY_3, + RAND_INF_KF_BEAN_SPROUT_FAIRY_1, + RAND_INF_KF_BEAN_SPROUT_FAIRY_2, + RAND_INF_KF_BEAN_SPROUT_FAIRY_3, + RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, + RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, + RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, + RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, + RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, + RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, + RAND_INF_LH_BEAN_SPROUT_FAIRY_1, + RAND_INF_LH_BEAN_SPROUT_FAIRY_2, + RAND_INF_LH_BEAN_SPROUT_FAIRY_3, + RAND_INF_GV_BEAN_SPROUT_FAIRY_1, + RAND_INF_GV_BEAN_SPROUT_FAIRY_2, + RAND_INF_GV_BEAN_SPROUT_FAIRY_3, + RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1, + RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2, + RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3, + RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1, + RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2, + RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3, + RAND_INF_DMC_BEAN_SPROUT_FAIRY_1, + RAND_INF_DMC_BEAN_SPROUT_FAIRY_2, + RAND_INF_DMC_BEAN_SPROUT_FAIRY_3, + RAND_INF_DMT_BEAN_SPROUT_FAIRY_1, + RAND_INF_DMT_BEAN_SPROUT_FAIRY_2, + RAND_INF_DMT_BEAN_SPROUT_FAIRY_3, + + RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, + RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, + RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, + RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, + RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_DMC_GOSSIP_STONE_FAIRY, + RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_DMT_GOSSIP_STONE_FAIRY, + RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY, + RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, + RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, + RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_GV_GOSSIP_STONE_FAIRY, + RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY, + RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY, + RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY, + RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY, + RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, + RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, + RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, + RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_KF_GOSSIP_STONE_FAIRY, + RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY, + RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, + RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, + RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_LW_GOSSIP_STONE_FAIRY, + RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, + RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, + RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY, + RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_ZD_GOSSIP_STONE_FAIRY, + RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY, + RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY, + RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, + RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, + RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, + RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, + + RAND_INF_LH_ISLAND_SUN_FAIRY, + RAND_INF_HF_POND_STORMS_FAIRY, + RAND_INF_DMT_FLAG_SUN_FAIRY, + RAND_INF_LW_SHORTCUT_STORMS_FAIRY, + RAND_INF_GF_KITCHEN_SUN_FAIRY, + RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, + RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, + RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, + RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY, + RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, + RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, + RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, + RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, + RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, + RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, + RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, + RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, + RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, + RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, + RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, + RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, + RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16) RAND_INF_MAX, diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 9792fda604a..8c40a690844 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -123,9 +123,11 @@ void Settings::CreateOptions() { mOptions[RSK_SHUFFLE_BOSS_SOULS] = Option::U8("Shuffle Boss Souls", {"Off", "On", "On + Ganon"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleBossSouls"), mOptionDescriptions[RSK_SHUFFLE_BOSS_SOULS], WidgetType::Combobox); mOptions[RSK_SHUFFLE_DEKU_STICK_BAG] = Option::Bool("Shuffle Deku Stick Bag", CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), mOptionDescriptions[RSK_SHUFFLE_DEKU_STICK_BAG], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF); mOptions[RSK_SHUFFLE_DEKU_NUT_BAG] = Option::Bool("Shuffle Deku Nut Bag", CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), mOptionDescriptions[RSK_SHUFFLE_DEKU_NUT_BAG], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF); + mOptions[RSK_SHUFFLE_FREESTANDING] = Option::U8("Shuffle Freestanding Items", {"Off", "Dungeons", "Overworld", "All Items"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), mOptionDescriptions[RSK_SHUFFLE_FREESTANDING], WidgetType::Combobox, RO_TOKENSANITY_OFF); mOptions[RSK_FISHSANITY] = Option::U8("Fishsanity", {"Off", "Shuffle only Hyrule Loach", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Fishsanity"), mOptionDescriptions[RSK_FISHSANITY], WidgetType::Combobox, RO_FISHSANITY_OFF); mOptions[RSK_FISHSANITY_POND_COUNT] = Option::U8("Pond Fish Count", {NumOpts(0,17,1)}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), mOptionDescriptions[RSK_FISHSANITY_POND_COUNT], WidgetType::Slider, 0, true, IMFLAG_NONE); mOptions[RSK_FISHSANITY_AGE_SPLIT] = Option::Bool("Pond Age Split", CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT]); + mOptions[RSK_SHUFFLE_FAIRIES] = Option::Bool("Shuffle Fairies", CVAR_RANDOMIZER_SETTING("ShuffleFairies"), mOptionDescriptions[RSK_SHUFFLE_FAIRIES]); mOptions[RSK_SHUFFLE_MAPANDCOMPASS] = Option::U8("Maps/Compasses", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), mOptionDescriptions[RSK_SHUFFLE_MAPANDCOMPASS], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); mOptions[RSK_KEYSANITY] = Option::U8("Small Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Keysanity"), mOptionDescriptions[RSK_KEYSANITY], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON); mOptions[RSK_GERUDO_KEYS] = Option::U8("Gerudo Fortress Keys", {"Vanilla", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("GerudoKeys"), mOptionDescriptions[RSK_GERUDO_KEYS], WidgetType::Combobox, RO_GERUDO_KEYS_VANILLA); @@ -326,6 +328,7 @@ void Settings::CreateOptions() { mTrickOptions[RT_FOREST_OUTDOORS_LEDGE] = TrickOption::LogicTrick(RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, false, "Forest Temple NE Outdoors Ledge with Hover Boots", "With precise Hover Boots movement you can fall down to this ledge from upper balconies. If done precisely enough, it is not necessary to take fall damage. In MQ, this skips a Longshot requirement. In Vanilla, this can skip a Hookshot requirement in entrance randomizer."); mTrickOptions[RT_FOREST_DOORFRAME] = TrickOption::LogicTrick(RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::ADVANCED}, false, "Forest Temple East Courtyard Door Frame with Hover Boots", "A precise Hover Boots movement from the upper balconies in this courtyard can be used to get on top of the door frame. Applies to both Vanilla and Master Quest. In Vanilla, from on top the door frame you can summon Pierre, allowing you to access the falling ceiling room early. In Master Quest, this allows you to obtain the GS on the door frame as adult without Hookshot or Song of Time."); mTrickOptions[RT_FOREST_OUTSIDE_BACKDOOR] = TrickOption::LogicTrick(RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::ADVANCED}, false, "Forest Temple Outside Backdoor with Jump Slash", "A jump slash recoil can be used to reach the ledge in the block puzzle room that leads to the west courtyard. This skips a potential Hover Boots requirement in vanilla, and it can sometimes apply in MQ as well. This trick can be performed as both ages."); + mTrickOptions[RT_FOREST_OUTDOORS_HEARTS_BOOMERANG] = TrickOption::LogicTrick(RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, false, "Forest Temple Outside Hearts with Boomerang", "A well aimed boomerang from the water's edge can reach the hearts from ground level. If unable to swim, you can back away from the water while the boomerang is returning so the hearts land on the ground."); mTrickOptions[RT_FOREST_MQ_WELL_SWIM] = TrickOption::LogicTrick(RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::ADVANCED}, false, "Swim Through Forest Temple MQ Well with Hookshot", "Shoot the vines in the well as low and as far to the right as possible, and then immediately swim under the ceiling to the right. This can only be required if Forest Temple is in its Master Quest form."); mTrickOptions[RT_FOREST_MQ_BLOCK_PUZZLE] = TrickOption::LogicTrick(RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, false, "Skip Forest Temple MQ Block Puzzle with Bombchu", "Send the Bombchu straight up the center of the wall directly to the left upon entering the room."); mTrickOptions[RT_FOREST_MQ_JS_HALLWAY_SWITCH] = TrickOption::LogicTrick(RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, false, "Forest Temple MQ Twisted Hallway Switch with Jump Slash", "The switch to twist the hallway can be hit with a jump slash through the glass block. To get in front of the switch, either use the Hover Boots or hit the shortcut switch at the top of the room and jump from the glass blocks that spawn. Sticks can be used as child, but the Kokiri Sword is too short to reach through the glass."); @@ -506,6 +509,7 @@ void Settings::CreateOptions() { &mTrickOptions[RT_FOREST_OUTDOORS_LEDGE], &mTrickOptions[RT_FOREST_DOORFRAME], &mTrickOptions[RT_FOREST_OUTSIDE_BACKDOOR], + &mTrickOptions[RT_FOREST_OUTDOORS_HEARTS_BOOMERANG], &mTrickOptions[RT_FOREST_MQ_WELL_SWIM], &mTrickOptions[RT_FOREST_MQ_BLOCK_PUZZLE], &mTrickOptions[RT_FOREST_MQ_JS_HALLWAY_SWITCH], @@ -670,6 +674,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_FISHING_POLE], &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], + &mOptions[RSK_SHUFFLE_FREESTANDING], }, false, WidgetContainerType::COLUMN); mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI] = OptionGroup::SubGroup("Shuffle NPCs & Merchants", { &mOptions[RSK_SHOPSANITY], @@ -688,6 +693,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_ADULT_TRADE], &mOptions[RSK_SHUFFLE_100_GS_REWARD], &mOptions[RSK_SHUFFLE_BOSS_SOULS], + &mOptions[RSK_SHUFFLE_FAIRIES], }, false, WidgetContainerType::COLUMN); mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI] = OptionGroup::SubGroup("Shuffle Dungeon Items", { &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], @@ -904,6 +910,8 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_BOSS_SOULS], &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], + &mOptions[RSK_SHUFFLE_FREESTANDING], + &mOptions[RSK_SHUFFLE_FAIRIES], }); mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS] = OptionGroup("Shuffle Dungeon Items", { &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], @@ -1080,11 +1088,13 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_POTS], &mOptions[RSK_SHUFFLE_BEEHIVES], &mOptions[RSK_SHUFFLE_COWS], + &mOptions[RSK_SHUFFLE_FREESTANDING], &mOptions[RSK_SHUFFLE_MAGIC_BEANS], &mOptions[RSK_SHUFFLE_MERCHANTS], &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], &mOptions[RSK_SHUFFLE_ADULT_TRADE], &mOptions[RSK_SHUFFLE_100_GS_REWARD], + &mOptions[RSK_SHUFFLE_FAIRIES], &mOptions[RSK_GOSSIP_STONE_HINTS], }; @@ -1124,6 +1134,7 @@ void Settings::CreateOptions() { { "Shuffle Settings:Beehive Shuffle", RSK_SHUFFLE_BEEHIVES }, { "Shuffle Settings:Shuffle Cows", RSK_SHUFFLE_COWS }, { "Shuffle Settings:Tokensanity", RSK_SHUFFLE_TOKENS }, + { "Shuffle Settings:Freestanding Shuffle", RSK_SHUFFLE_FREESTANDING }, { "Shuffle Settings:Shuffle Ocarinas", RSK_SHUFFLE_OCARINA }, { "Shuffle Settings:Shuffle Ocarina Buttons", RSK_SHUFFLE_OCARINA_BUTTONS }, { "Shuffle Settings:Shuffle Swim", RSK_SHUFFLE_SWIM }, @@ -1139,6 +1150,7 @@ void Settings::CreateOptions() { { "Shuffle Settings:Shuffle Boss Souls", RSK_SHUFFLE_BOSS_SOULS }, { "Shuffle Settings:Shuffle Deku Stick Bag", RSK_SHUFFLE_DEKU_STICK_BAG }, { "Shuffle Settings:Shuffle Deku Nut Bag", RSK_SHUFFLE_DEKU_NUT_BAG }, + { "Shuffle Settings:Shuffle Fairies", RSK_SHUFFLE_FAIRIES }, { "Start with Deku Shield", RSK_STARTING_DEKU_SHIELD }, { "Start with Kokiri Sword", RSK_STARTING_KOKIRI_SWORD }, { "Start with Fairy Ocarina", RSK_STARTING_OCARINA }, @@ -2350,6 +2362,17 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) { mOptions[index].SetSelectedIndex(RO_SCRUBS_RANDOM); } break; + case RSK_SHUFFLE_FREESTANDING: + if (it.value() == "Off") { + mOptions[index].SetSelectedIndex(RO_TOKENSANITY_OFF); + } else if (it.value() == "Overworld") { + mOptions[index].SetSelectedIndex(RO_TOKENSANITY_OVERWORLD); + } else if (it.value() == "Dungeons") { + mOptions[index].SetSelectedIndex(RO_TOKENSANITY_DUNGEONS); + } else if (it.value() == "All Items") { + mOptions[index].SetSelectedIndex(RO_TOKENSANITY_ALL); + } + break; case RSK_SHUFFLE_FISHING_POLE: case RSK_FISHSANITY_AGE_SPLIT: case RSK_FISHING_POLE_HINT: @@ -2366,6 +2389,7 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) { case RSK_SHUFFLE_OCARINA_BUTTONS: case RSK_SHUFFLE_SWIM: case RSK_SHUFFLE_CHILD_WALLET: + case RSK_SHUFFLE_FAIRIES: case RSK_STARTING_DEKU_SHIELD: case RSK_STARTING_KOKIRI_SWORD: case RSK_STARTING_ZELDAS_LULLABY: diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 44e1ff1ff84..919ce3f57d8 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -43,6 +43,7 @@ class StaticData { static std::vector staticHintLocations; static std::vector pondFishLocations; static std::vector overworldFishLocations; + static std::vector overworldFairyLocations; static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; static std::vector oldVerHintOrder; diff --git a/soh/src/code/z_en_item00.c b/soh/src/code/z_en_item00.c index bca44cf26d9..7d01e61e78f 100644 --- a/soh/src/code/z_en_item00.c +++ b/soh/src/code/z_en_item00.c @@ -349,7 +349,6 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { f32 yOffset = 980.0f; f32 shadowScale = 6.0f; s32 getItemId = GI_NONE; - this->randoGiEntry = (GetItemEntry)GET_ITEM_NONE; this->randoCheck = (RandomizerCheck)RC_UNKNOWN_CHECK; this->itemEntry = (GetItemEntry)GET_ITEM_NONE; s16 spawnParam8000 = this->actor.params & 0x8000; @@ -492,13 +491,6 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { this->actor.shape.shadowAlpha = 180; this->actor.focus.pos = this->actor.world.pos; this->getItemId = GI_NONE; - this->randoCheck = Randomizer_GetCheckFromActor(this->actor.id, play->sceneNum, this->ogParams); - this->randoInf = RAND_INF_MAX; - - if (IS_RANDO && this->randoCheck != RC_UNKNOWN_CHECK) { - this->randoGiEntry = Randomizer_GetItemFromKnownCheck(this->randoCheck, getItemId); - this->randoGiEntry.getItemFrom = ITEM_FROM_FREESTANDING; - } if (!spawnParam8000) { EnItem00_SetupAction(this, func_8001DFC8); diff --git a/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c index f6f82f5c788..9574b60e6ee 100644 --- a/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -7,6 +7,7 @@ #include "z_en_elf.h" #include "objects/gameplay_keep/gameplay_keep.h" #include +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED | ACTOR_FLAG_NO_FREEZE_OCARINA) @@ -399,9 +400,11 @@ void EnElf_Init(Actor* thisx, PlayState* play) { EnElf_SetupAction(this, func_80A03604); func_80A01C38(this, 8); - for (i = 0; i < 8; i++) { - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, thisx->world.pos.x, - thisx->world.pos.y - 30.0f, thisx->world.pos.z, 0, 0, 0, FAIRY_HEAL, true); + if (GameInteractor_Should(VB_SPAWN_FAIRY_GROUP, true, this)) { + for (i = 0; i < 8; i++) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, thisx->world.pos.x, + thisx->world.pos.y - 30.0f, thisx->world.pos.z, 0, 0, 0, FAIRY_HEAL, true); + } } break; default: @@ -631,19 +634,7 @@ void func_80A0329C(EnElf* this, PlayState* play) { if ((heightDiff > 0.0f) && (heightDiff < 60.0f)) { if (!func_80A01F90(&this->actor.world.pos, &refActor->actor.world.pos, 10.0f)) { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyEffect"), 0) && !(this->fairyFlags & FAIRY_FLAG_BIG)) - { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyPercentRestore"), 0)) - { - Health_ChangeBy(play, (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 100) / 100 + 15) / 16 * 16); - } - else - { - Health_ChangeBy(play, CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 8) * 16); - } - } - else - { + if (GameInteractor_Should(VB_FAIRY_HEAL, true, this)) { Health_ChangeBy(play, 128); } if (this->fairyFlags & FAIRY_FLAG_BIG) { diff --git a/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.h b/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.h index 7f8e4c84ee0..61de10b6f5b 100644 --- a/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.h +++ b/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.h @@ -4,6 +4,7 @@ #include #include "global.h" #include "overlays/actors/ovl_Elf_Msg/z_elf_msg.h" +#include "soh/Enhancements/randomizer/fairy_shuffle.h" struct EnElf; @@ -42,6 +43,9 @@ typedef struct EnElf { /* 0x02C7 */ u8 unk_2C7; /* 0x02C8 */ EnElfUnkFunc func_2C8; /* 0x02CC */ EnElfActionFunc actionFunc; + // #region SOH [Randomizer] + /* */ FairyIdentity sohFairyIdentity; + // #endregion } EnElf; // size = 0x02D0 typedef enum { diff --git a/soh/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/soh/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index c57eb7b1d39..a8e5fbcb295 100644 --- a/soh/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/soh/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -8,6 +8,7 @@ #include "objects/object_mamenoki/object_mamenoki.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "vt.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS ACTOR_FLAG_IGNORE_POINTLIGHTS @@ -701,8 +702,10 @@ void ObjBean_GrowWaterPhase3(ObjBean* this, PlayState* play) { itemDropPos.x = this->dyna.actor.world.pos.x; itemDropPos.y = this->dyna.actor.world.pos.y - 25.0f; itemDropPos.z = this->dyna.actor.world.pos.z; - for (i = 0; i < 3; i++) { - Item_DropCollectible(play, &itemDropPos, ITEM00_FLEXIBLE); + if (GameInteractor_Should(VB_BEAN_SPAWN_FAIRIES, true, this)) { + for (i = 0; i < 3; i++) { + Item_DropCollectible(play, &itemDropPos, ITEM00_FLEXIBLE); + } } this->stateFlags |= BEAN_STATE_BEEN_WATERED; Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);