From 2b78bea475288c272add4cdeb90ef7f45ce6983e Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Wed, 21 Sep 2022 00:50:22 -0400 Subject: [PATCH] Randomizer v2 (#1065) * Revert changes to GetItemFromGet * Fixes Ganon's Boss Key shuffled while regular boss Keys aren't. * Enum + combo box * Add obtainability checks correctly * combobox title rename + no number tracking * Fix repeatable purchases and bottles rendering incorrectly * Move shopsanity option in GUI * Struct instead of ImVec + basic comportment for all case * Attempt to fix odd build issue * Cast randoGet for ganons boss key * Remove redundancy in KD room * Update logic Cvar names * Fix Ganons Trials coming from old save files. Fixes #1365 * Fixes crash when entering Ganon's Castle lobby on linux. * Makes `Item_Give` safe to use with a NULL globalCtx. This should allow it's use for giving items to Link's Pocket during rando save initialization. * Converts Song from Impa to use `Item_Give` * Adds more options for Link's starting item. * Removes unneeded `GiveLinkItem` functions. * and make it build * bring back new rando dropdown * gSaveContext access in GameMenuBar.cpp * Implement Skip Scarecrow's Song * Reimplement progressive Bombchus * Rando-next: Deku Nut and Seed ammo gives a blue rupee Fixes #1390 * Fixes Link starting with BGS * Persist item tracker notes * Adjust Hooks include * Use SohImGui::RequestCvarSaveOnNextTick * Fix issues from LUS refactor * Fix for overriding deku scrub messages * Fix mistake from merge oops * Restore checkboxes to enhancements menu These got lost in the merge * Update location access logic Including MQ locations in Spirit and GC now * Implement rando bombchu drops * Missing break * Simplify mudwall collision check There was no need to have a second collider specifically for Ice Arrow hits * Update settings.cpp * Simplify mudwall collision check * Restore checkboxes in menu Accidentally lost these during merge * Clean up bool * Update logic Cvar name * Fixed capacity on ammmo tracking * Fix for beans obtainability * Hook into file delete and clear notes * Incorporate magic arrows in rando settings * Update tooltip To inform the player that they might have to reload the room if they're enabling this for the first time. * Update tooltip * Add line break in tooltip * Tooltip wording + line break * tweak on main logic * All color logic for all types * Fix: changes to please new LUS * Ensure itemTrackerNotes vector is not fully empty * Implement's Tycoon Wallet. * Refactor DrawItemCount and Use EnhancementCombobox for tracker capacity options * small tweaks and rename * always display XX/YY when in ammo/capacity mode * Move all merchant messages to be generated on file load * added hovertext for the number display * Swap german and french translations for shop messages * Set key colors to be on by default * Add another flag to skip mask shop * Fix Sold Out bug * Fix gerudo keys, add disabled checkbox * tooltip line break * Add trials required and merchant prices to save file instead of loading from active spoiler log * Remove trialsRequired persisting in save manager * Adds slotIndex to girla (shop item actor) and uses that for IdentifyShopItem. * Fix issue when merchantPrices is empty * Fix for a single zeroed merchantPrice entry * Fix #1417 * Implements items selling out and fixes issues with purchasing some items. * Fixes order of operations so Rupees will be spent. * Fixes sold out items not getting overwritten by the randomized info. * Clarify var names and comments Also preserve chain platform cutscene in spirit based on Link's position * Remove !=0 from cvar check * Clarify var names and comments * Rename randomizerMerchantPrices to merchantPrices * Handle shop items in SaveManager * Fix merge mistake * Base whats in the bazaar shop on entranceIndex instead of age * Tidy up chain platform cutscene check * Fix merge error Didn't mean to have Zhora changes in here yet * Use 3drando item table for parsing spoiler names * Use another nested method instead of one at the top level to fetch the table * Add missing newline * Remove log * Respect custom draw functions * Fix issues with rendering songs * Fix localized item names for shopsanity * Implements a larger array of Sprites for the Icon Hash. * Uses the hash instead of seed for spoilerfile name and icons. * Removes some unused functions and variables in `spoiler_log.cpp` * Prevents leading 0s added to hash from being in file name * Changes filename format to icon indexes separated by dashes * Hopefully makes Jenkins happy * Hopefully makes Jenkins happy * [Rando] Child Gerudo Fortress 37th Heartpiece randomized Fixes #1071 * Add descriptions to save editor flags editor, and added randomizer flags (#1386) * Add descriptions to save editor flags editor, and added randomizer flags * Hide randomizer flags when not on a randomizer save * Move flag descriptions to header file * Update soh/soh/Enhancements/debugger/debugSaveEditor.h * Update soh/soh/Enhancements/debugger/debugSaveEditor.h * Fix merge error * crash on pause menu on linux (only in appimage) Fixes #1437 * Applies fix to Song from Impa as well. * Allow buying tunics as child when shopsanity is on * Fix for custom draw methods overriding sold out sign * Simplify logic around shopsanity and fix some issues * Fix dungeon reward stone rotation and add particles * Fix some issues with ice traps * Fix adult wallet having its own max capacity * Fix amount of keys given for BotW * format * Use EnGirlAShopItem enum instead of raw hex values * [#1434] Renders non-warp songs more consistently with warp songs * A few changes around merchant messages * Various changes from PR feedback * Rando: Junk Hint missing french translation * Typo * Fix free scrub being at 0 instead of TEXT_SCRUB_RANDOM * Replace magic numbers in message handler * Update soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com> * Update soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com> * Fix BGS softlock for shopsanity * Support tycoon wallet on tracker * Revert "Fix BGS softlock for shopsanity" This reverts commit 5fdb961ea460fb9a035cf0bb6ae77bfeedc1de0f. * [#1053] Resolves an issue with shop items and bombchu bowling where BGS would display two message boxes * Implements some necessary plumbing and resolves several Ice Trap Softlocks. Adds a way for an item entry to tell what type of check it came from (NPC vs Chest vs Freestanding, etc.) Sets this value from chests and item00 actors. Relocates pendingIceTraps to save context so it can persist through cutscenes and get stored on save init for Link's Pocket and Song from Impa. Restructures pendingIceTraps into a counter rather than a true or false, so that we can be frozen multiple times in a row if applicable (atm that should only be at the start of a run if Link's Pocket and Song from Impa were both Ice Traps). Adds a textbox for Ice Traps and a special case of holding up nothing in the get item process. This fixes all the cases where Ice Traps would softlock due to the actor giving the item expecting a closing textbox. After holding the item above his head Link increments the pendingIceTraps counter by one and sets whatever flag he has pending. None of the above plumbing applies to Ice Traps from chests, those work exactly the same as before, as do freestanding item00 ice traps (thanks to the additional check for ITEM_FROM_FREESTANDING. OoT and Ruto's Letter count as NPC's, so they get the FOWL text box and set a pending ice trap rather than immediately freezing, since Link weill be in the water. Link will get frozen the next time he touches land, which in the case of OoT is after the fade to white and right before the Song of Time check. Fixes all the other softlocks I'm aware of, including Fishing, Bombchu Bowling, Skull Kid, and losing the second Gerudo Archery check. * fix bgs check in player * move bgs logic for tokensanity into MOD_NONE check * set bgs flag before `Item_Give`ing * move bgs flag into `MOD_NONE` check in girla * use existing check in `z_player` * Adds comment explaining the decision to default ITEM_FROM_NPC. * Rename pendingIceTraps to pendingIceTrapCount * Adds some RANDOTODO comments about cleaning up a couple things. * Merge branch 'develop-zhora' into ztornn * manually restore changes to `z_player.c` * Fix after some ice trap prepwork from earlier * Actual fix * Woops * More rupee names * Actually fix it * Add back comment * Fix Skip Scarecrow Song * Fix ruto's letter and LH sun stick rendering * Also fixes it for treasure chest game * Tweak: Rando French Wallet * ADD: French Tycoon * Hide dungeon items/notes by default * [#1301] Fix issue with UI not restoring after getting an item from biggoron * Update soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c * Update soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c * Fix random crash that only affected one person for some reason Co-authored-by: Garrett Cox Co-authored-by: Christopher Leggett Co-authored-by: PurpleHato Co-authored-by: Sarge-117 Co-authored-by: briaguya Co-authored-by: aMannus Co-authored-by: lil David <1337lilDavid@gmail.com> Co-authored-by: Sarge-117 <108380086+Sarge-117@users.noreply.github.com> Co-authored-by: louist103 <35883445+louist103@users.noreply.github.com> --- libultraship/libultraship/Hooks.h | 2 + libultraship/libultraship/ImGuiImpl.cpp | 3 + soh/CMakeLists.txt | 11 + soh/include/functions.h | 6 + soh/include/macros.h | 3 + soh/include/message_data_static.h | 22 +- soh/include/message_data_textbox_types.h | 25 + soh/include/z64player.h | 11 +- soh/include/z64save.h | 8 +- .../custom-message/CustomMessageManager.h | 26 +- .../custom-message/CustomMessageTypes.h | 14 +- .../Enhancements/debugger/debugSaveEditor.cpp | 229 +- .../Enhancements/debugger/debugSaveEditor.h | 412 ++ .../Enhancements/item-tables/ItemTableTypes.h | 29 +- .../randomizer/3drando/custom_messages.cpp | 2 +- .../Enhancements/randomizer/3drando/fill.cpp | 13 + .../randomizer/3drando/hint_list.cpp | 3213 +++++---- .../hint_list/hint_list_exclude_overworld.cpp | 74 + .../Enhancements/randomizer/3drando/hints.cpp | 3 +- .../Enhancements/randomizer/3drando/item.cpp | 10 +- .../Enhancements/randomizer/3drando/item.hpp | 14 +- .../randomizer/3drando/item_list.cpp | 465 +- .../randomizer/3drando/item_list.hpp | 1 + .../randomizer/3drando/item_location.cpp | 1521 ++-- .../randomizer/3drando/item_location.hpp | 71 +- .../randomizer/3drando/item_pool.cpp | 10 + .../Enhancements/randomizer/3drando/keys.hpp | 5 + .../locacc_dodongos_cavern.cpp | 2 +- .../location_access/locacc_ganons_castle.cpp | 16 +- .../location_access/locacc_spirit_temple.cpp | 10 +- .../location_access/locacc_zoras_domain.cpp | 15 + .../Enhancements/randomizer/3drando/logic.cpp | 4 +- .../Enhancements/randomizer/3drando/menu.cpp | 19 +- .../Enhancements/randomizer/3drando/menu.hpp | 3 +- .../randomizer/3drando/playthrough.cpp | 5 +- .../randomizer/3drando/playthrough.hpp | 2 +- .../randomizer/3drando/rando_main.cpp | 10 +- .../randomizer/3drando/rando_main.hpp | 5 +- .../3drando/setting_descriptions.cpp | 24 + .../3drando/setting_descriptions.hpp | 7 + .../randomizer/3drando/settings.cpp | 272 +- .../randomizer/3drando/settings.hpp | 21 +- .../randomizer/3drando/spoiler_log.cpp | 118 +- .../Enhancements/randomizer/3drando/trial.cpp | 12 +- .../randomizer/adult_trade_shuffle.c | 33 + .../randomizer/adult_trade_shuffle.h | 13 + soh/soh/Enhancements/randomizer/draw.cpp | 109 + soh/soh/Enhancements/randomizer/draw.h | 13 + soh/soh/Enhancements/randomizer/rando_hash.h | 111 + .../Enhancements/randomizer/randomizer.cpp | 6280 +++++++++-------- soh/soh/Enhancements/randomizer/randomizer.h | 32 +- .../Enhancements/randomizer/randomizerTypes.h | 63 +- .../randomizer/randomizer_check_objects.cpp | 972 +++ .../randomizer/randomizer_check_objects.h | 83 + .../Enhancements/randomizer/randomizer_inf.h | 137 + .../randomizer/randomizer_item_tracker.cpp | 1885 +++-- .../randomizer/randomizer_item_tracker.h | 24 +- soh/soh/GameMenuBar.cpp | 86 +- soh/soh/OTRGlobals.cpp | 133 +- soh/soh/OTRGlobals.h | 13 +- soh/soh/SaveManager.cpp | 66 +- soh/soh/z_message_OTR.cpp | 22 +- soh/src/code/code_80097A00.c | 2 +- soh/src/code/code_800EC960.c | 53 + soh/src/code/z_actor.c | 16 +- soh/src/code/z_draw.c | 24 +- soh/src/code/z_en_item00.c | 36 +- soh/src/code/z_game_over.c | 20 +- soh/src/code/z_kankyo.c | 2 +- soh/src/code/z_message_PAL.c | 3 +- soh/src/code/z_parameter.c | 243 +- soh/src/code/z_play.c | 6 +- soh/src/code/z_player_lib.c | 10 +- soh/src/code/z_scene_table.c | 8 +- soh/src/code/z_sram.c | 512 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c | 2 +- .../ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c | 16 +- .../ovl_Bg_Ice_Shelter/z_bg_ice_shelter.c | 2 +- .../actors/ovl_Bg_Jya_Lift/z_bg_jya_lift.c | 3 +- .../z_bg_spot06_objects.c | 2 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 13 +- .../actors/ovl_Demo_Kekkai/z_demo_kekkai.c | 65 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 18 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 28 +- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 3 +- soh/src/overlays/actors/ovl_En_Cow/z_en_cow.c | 115 + soh/src/overlays/actors/ovl_En_Cow/z_en_cow.h | 5 + soh/src/overlays/actors/ovl_En_Dns/z_en_dns.c | 77 +- soh/src/overlays/actors/ovl_En_Dns/z_en_dns.h | 1 + soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c | 25 +- .../actors/ovl_En_Ex_Item/z_en_ex_item.c | 7 +- soh/src/overlays/actors/ovl_En_Fr/z_en_fr.c | 27 +- .../overlays/actors/ovl_En_GirlA/z_en_girla.c | 175 +- .../overlays/actors/ovl_En_GirlA/z_en_girla.h | 4 +- soh/src/overlays/actors/ovl_En_Go/z_en_go.c | 23 +- soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c | 68 +- soh/src/overlays/actors/ovl_En_Hs/z_en_hs.c | 43 +- .../actors/ovl_En_Kakasi2/z_en_kakasi2.c | 10 +- soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c | 25 +- soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c | 6 +- soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c | 51 +- soh/src/overlays/actors/ovl_En_Md/z_en_md.c | 4 +- soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c | 31 +- soh/src/overlays/actors/ovl_En_Ms/z_en_ms.c | 25 +- .../actors/ovl_En_Niw_Lady/z_en_niw_lady.c | 15 +- .../overlays/actors/ovl_En_Ossan/z_en_ossan.c | 52 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 2 +- .../actors/ovl_En_Shopnuts/z_en_shopnuts.c | 9 + soh/src/overlays/actors/ovl_En_Si/z_en_si.c | 94 +- soh/src/overlays/actors/ovl_En_Skj/z_en_skj.c | 2 +- soh/src/overlays/actors/ovl_En_Sw/z_en_sw.c | 6 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 + .../overlays/actors/ovl_En_Toryo/z_en_toryo.c | 10 +- soh/src/overlays/actors/ovl_En_Xc/z_en_xc.c | 2 +- .../actors/ovl_Item_B_Heart/z_item_b_heart.c | 6 +- .../ovl_Item_Etcetera/z_item_etcetera.c | 9 +- .../actors/ovl_Item_Ocarina/z_item_ocarina.c | 5 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 2 +- .../ovl_Object_Kankyo/z_object_kankyo.c | 21 + .../actors/ovl_player_actor/z_player.c | 162 +- .../ovl_file_choose/z_file_choose.c | 3 + .../misc/ovl_kaleido_scope/z_kaleido_item.c | 44 +- 123 files changed, 11705 insertions(+), 7375 deletions(-) create mode 100644 soh/include/message_data_textbox_types.h create mode 100644 soh/soh/Enhancements/randomizer/adult_trade_shuffle.c create mode 100644 soh/soh/Enhancements/randomizer/adult_trade_shuffle.h create mode 100644 soh/soh/Enhancements/randomizer/draw.cpp create mode 100644 soh/soh/Enhancements/randomizer/draw.h create mode 100644 soh/soh/Enhancements/randomizer/rando_hash.h create mode 100644 soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp create mode 100644 soh/soh/Enhancements/randomizer/randomizer_check_objects.h create mode 100644 soh/soh/Enhancements/randomizer/randomizer_inf.h diff --git a/libultraship/libultraship/Hooks.h b/libultraship/libultraship/Hooks.h index 5f29a831c..fd6c049bc 100644 --- a/libultraship/libultraship/Hooks.h +++ b/libultraship/libultraship/Hooks.h @@ -31,4 +31,6 @@ namespace Ship { DEFINE_HOOK(LoadTexture, void(const char* path, uint8_t** texture)); DEFINE_HOOK(GfxInit, void()); DEFINE_HOOK(ExitGame, void()); + DEFINE_HOOK(LoadFile, void(uint32_t fileNum)); + DEFINE_HOOK(DeleteFile, void(uint32_t fileNum)); } diff --git a/libultraship/libultraship/ImGuiImpl.cpp b/libultraship/libultraship/ImGuiImpl.cpp index a8901b5a6..4883f5a0e 100644 --- a/libultraship/libultraship/ImGuiImpl.cpp +++ b/libultraship/libultraship/ImGuiImpl.cpp @@ -327,6 +327,9 @@ namespace SohImGui { io->ConfigFlags |= ImGuiConfigFlags_DockingEnable; io->Fonts->AddFontDefault(); statsWindowOpen = CVar_GetS32("gStatsEnabled", 0); + CVar_RegisterS32("gRandomizeRupeeNames", 1); + CVar_RegisterS32("gRandoRelevantNavi", 1); + CVar_RegisterS32("gRandoMatchKeyColors", 1); #ifdef __SWITCH__ Ship::Switch::SetupFont(io->Fonts); #endif diff --git a/soh/CMakeLists.txt b/soh/CMakeLists.txt index 204664e17..a0355e42d 100644 --- a/soh/CMakeLists.txt +++ b/soh/CMakeLists.txt @@ -110,6 +110,9 @@ set(Header_Files__include "include/ichain.h" "include/macro.inc" "include/macros.h" + "include/message_data_fmt.h" + "include/message_data_static.h" + "include/message_data_textbox_types.h" #"include/math_n64.h" "include/regs.h" "include/segment_symbols.h" @@ -178,7 +181,12 @@ source_group("Header Files\\soh\\Enhancements\\debugger" FILES ${Header_Files__s set(Header_Files__soh__Enhancements__randomizer "soh/Enhancements/randomizer/randomizer.h" + "soh/Enhancements/randomizer/randomizer_inf.h" "soh/Enhancements/randomizer/randomizer_item_tracker.h" + "soh/Enhancements/randomizer/adult_trade_shuffle.h" + "soh/Enhancements/randomizer/randomizer_check_objects.h" + "soh/Enhancements/randomizer/draw.h" + "soh/Enhancements/randomizer/rando_hash.h" ) source_group("Header Files\\soh\\Enhancements\\randomizer" FILES ${Header_Files__soh__Enhancements__randomizer}) @@ -287,6 +295,9 @@ source_group("Source Files\\soh\\Enhancements\\debugger" FILES ${Source_Files__s set(Source_Files__soh__Enhancements__randomizer "soh/Enhancements/randomizer/randomizer.cpp" "soh/Enhancements/randomizer/randomizer_item_tracker.cpp" + "soh/Enhancements/randomizer/adult_trade_shuffle.c" + "soh/Enhancements/randomizer/randomizer_check_objects.cpp" + "soh/Enhancements/randomizer/draw.cpp" ) source_group("Source Files\\soh\\Enhancements\\randomizer" FILES ${Source_Files__soh__Enhancements__randomizer}) diff --git a/soh/include/functions.h b/soh/include/functions.h index 146aeeb4c..a5e83eade 100644 --- a/soh/include/functions.h +++ b/soh/include/functions.h @@ -11,6 +11,7 @@ extern "C" #include "../../libultraship/libultraship/luslog.h" #include +#include #if defined(INCLUDE_GAME_PRINTF) && defined(_DEBUG) #define osSyncPrintf(fmt, ...) lusprintf(__FILE__, __LINE__, 0, fmt, __VA_ARGS__) @@ -559,6 +560,8 @@ s32 Flags_GetEventChkInf(s32 flag); void Flags_SetEventChkInf(s32 flag); s32 Flags_GetInfTable(s32 flag); void Flags_SetInfTable(s32 flag); +s32 Flags_GetRandomizerInf(RandomizerInf flag); +void Flags_SetRandomizerInf(RandomizerInf flag); u16 func_80037C30(GlobalContext* globalCtx, s16 arg1); s32 func_80037D98(GlobalContext* globalCtx, Actor* actor, s16 arg2, s32* arg3); s32 func_80038290(GlobalContext* globalCtx, Actor* actor, Vec3s* arg2, Vec3s* arg3, Vec3f arg4); @@ -860,6 +863,7 @@ void Cutscene_HandleEntranceTriggers(GlobalContext* globalCtx); void Cutscene_HandleConditionalTriggers(GlobalContext* globalCtx); void Cutscene_SetSegment(GlobalContext* globalCtx, void* segment); void GetItem_Draw(GlobalContext* globalCtx, s16 drawId); +void GetItemEntry_Draw(GlobalContext* globalCtx, GetItemEntry getItemEntry); void SoundSource_InitAll(GlobalContext* globalCtx); void SoundSource_UpdateAll(GlobalContext* globalCtx); void SoundSource_PlaySfxAtFixedWorldPos(GlobalContext* globalCtx, Vec3f* pos, s32 duration, u16 sfxId); @@ -1061,9 +1065,11 @@ void PerformAutosave(GlobalContext* globalCtx, u8 item); void Inventory_DeleteItem(u16 item, u16 invSlot); s32 Inventory_ReplaceItem(GlobalContext* globalCtx, u16 oldItem, u16 newItem); s32 Inventory_HasEmptyBottle(void); +bool Inventory_HasEmptyBottleSlot(void); s32 Inventory_HasSpecificBottle(u8 bottleItem); void Inventory_UpdateBottleItem(GlobalContext* globalCtx, u8 item, u8 cButton); s32 Inventory_ConsumeFairy(GlobalContext* globalCtx); +bool Inventory_HatchPocketCucco(GlobalContext* globalCtx); void Interface_SetDoAction(GlobalContext* globalCtx, u16 action); void Interface_SetNaviCall(GlobalContext* globalCtx, u16 naviCallState); void Interface_LoadActionLabelB(GlobalContext* globalCtx, u16 action); diff --git a/soh/include/macros.h b/soh/include/macros.h index e726d9f00..aad606a2d 100644 --- a/soh/include/macros.h +++ b/soh/include/macros.h @@ -260,5 +260,8 @@ extern GraphicsContext* __gfxCtx; #define SEG_ADDR(seg, addr) (addr | (seg << 24) | 1) +#define NUM_TRIALS 6 +#define NUM_SHOP_ITEMS 64 +#define NUM_SCRUBS 35 #endif diff --git a/soh/include/message_data_static.h b/soh/include/message_data_static.h index c286771aa..0821f1093 100644 --- a/soh/include/message_data_static.h +++ b/soh/include/message_data_static.h @@ -3,32 +3,12 @@ #include "global.h" #include "message_data_fmt.h" +#include "message_data_textbox_types.h" #ifdef __cplusplus extern "C" { #endif -typedef enum { - /* 0 */ TEXTBOX_TYPE_BLACK, - /* 1 */ TEXTBOX_TYPE_WOODEN, - /* 2 */ TEXTBOX_TYPE_BLUE, - /* 3 */ TEXTBOX_TYPE_OCARINA, - /* 4 */ TEXTBOX_TYPE_NONE_BOTTOM, - /* 5 */ TEXTBOX_TYPE_NONE_NO_SHADOW, - /* 11 */ TEXTBOX_TYPE_CREDITS = 11 -} TextBoxType; - -typedef enum { - /* 0 */ TEXTBOX_BG_CROSS -} TextBoxBackground; - -typedef enum { - /* 0 */ TEXTBOX_POS_VARIABLE, - /* 1 */ TEXTBOX_POS_TOP, - /* 2 */ TEXTBOX_POS_MIDDLE, - /* 3 */ TEXTBOX_POS_BOTTOM -} TextBoxPosition; - typedef struct { u16 textId; u8 typePos; diff --git a/soh/include/message_data_textbox_types.h b/soh/include/message_data_textbox_types.h new file mode 100644 index 000000000..03332182c --- /dev/null +++ b/soh/include/message_data_textbox_types.h @@ -0,0 +1,25 @@ +#ifndef MESSAGE_DATA_TEXTBOX_TYPES_H +#define MESSAGE_DATA_TEXTBOX_TYPES_H + +typedef enum { + /* 0 */ TEXTBOX_TYPE_BLACK, + /* 1 */ TEXTBOX_TYPE_WOODEN, + /* 2 */ TEXTBOX_TYPE_BLUE, + /* 3 */ TEXTBOX_TYPE_OCARINA, + /* 4 */ TEXTBOX_TYPE_NONE_BOTTOM, + /* 5 */ TEXTBOX_TYPE_NONE_NO_SHADOW, + /* 11 */ TEXTBOX_TYPE_CREDITS = 11 +} TextBoxType; + +typedef enum { + /* 0 */ TEXTBOX_BG_CROSS +} TextBoxBackground; + +typedef enum { + /* 0 */ TEXTBOX_POS_VARIABLE, + /* 1 */ TEXTBOX_POS_TOP, + /* 2 */ TEXTBOX_POS_MIDDLE, + /* 3 */ TEXTBOX_POS_BOTTOM +} TextBoxPosition; + +#endif diff --git a/soh/include/z64player.h b/soh/include/z64player.h index 64ea713d2..e68ca8d45 100644 --- a/soh/include/z64player.h +++ b/soh/include/z64player.h @@ -6,6 +6,8 @@ struct Player; +extern GetItemEntry sGetItemTable[195]; + typedef enum { /* 0 */ PLAYER_SWORD_NONE, /* 1 */ PLAYER_SWORD_KOKIRI, @@ -366,6 +368,7 @@ typedef enum { FLAG_SCENE_CLEAR, FLAG_SCENE_COLLECTIBLE, FLAG_EVENT_CHECK_INF, + FLAG_RANDOMIZER_INF } FlagType; typedef struct { @@ -627,9 +630,9 @@ typedef struct Player { /* 0x0A86 */ s8 unk_A86; /* 0x0A87 */ u8 unk_A87; /* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position - /* 0x0A94 */ PendingFlag pendingFlag; - /* 0x0AA0 */ u8 boomerangQuickRecall; // Has the player pressed the boomerang button while it's in the air still? - /* 0x0AA1 */ GetItemEntry getItemEntry; -} Player; // size = 0xAA9 + /* 0x0A95 */ PendingFlag pendingFlag; + /* 0x0AA1 */ u8 boomerangQuickRecall; // Has the player pressed the boomerang button while it's in the air still? + /* 0x0AA2 */ GetItemEntry getItemEntry; +} Player; // size = 0xAAA #endif diff --git a/soh/include/z64save.h b/soh/include/z64save.h index 114de9fd4..37871611e 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -5,6 +5,7 @@ #include "z64math.h" #include "z64audio.h" #include "soh/Enhancements/randomizer/randomizerTypes.h" +#include "soh/Enhancements/randomizer/randomizer_inf.h" typedef struct { /* 0x00 */ u8 buttonItems[8]; @@ -175,16 +176,17 @@ typedef struct { /* 0x1422 */ s16 sunsSongState; // controls the effects of suns song /* 0x1424 */ s16 healthAccumulator; RandoSetting randoSettings[300]; - ItemLocationRando itemLocations[500]; + ItemLocationRando itemLocations[RC_MAX]; HintLocationRando hintLocations[50]; char childAltarText[250]; char adultAltarText[750]; char ganonHintText[150]; char ganonText[250]; u8 seedIcons[5]; - u8 dungeonsDone[8]; - u8 trialsDone[6]; + u16 randomizerInf[8]; u8 temporaryWeapon; + u16 adultTradeItems; + u8 pendingIceTrapCount; } SaveContext; // size = 0x1428 typedef enum { diff --git a/soh/soh/Enhancements/custom-message/CustomMessageManager.h b/soh/soh/Enhancements/custom-message/CustomMessageManager.h index 389457d00..6ae7f6a38 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageManager.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageManager.h @@ -2,6 +2,7 @@ #include #include #include "../../../include/z64item.h" +#include "../../../include/message_data_textbox_types.h" #undef MESSAGE_END @@ -14,31 +15,6 @@ #define QM_YELLOW 0x46 #define QM_BLACK 0x47 -#ifndef MESSAGE_DATA_STATIC_H - -typedef enum { - /* 0 */ TEXTBOX_TYPE_BLACK, - /* 1 */ TEXTBOX_TYPE_WOODEN, - /* 2 */ TEXTBOX_TYPE_BLUE, - /* 3 */ TEXTBOX_TYPE_OCARINA, - /* 4 */ TEXTBOX_TYPE_NONE_BOTTOM, - /* 5 */ TEXTBOX_TYPE_NONE_NO_SHADOW, - /* 11 */ TEXTBOX_TYPE_CREDITS = 11 -} TextBoxType; - -typedef enum { - /* 0 */ TEXTBOX_BG_CROSS -} TextBoxBackground; - -typedef enum { - /* 0 */ TEXTBOX_POS_VARIABLE, - /* 1 */ TEXTBOX_POS_TOP, - /* 2 */ TEXTBOX_POS_MIDDLE, - /* 3 */ TEXTBOX_POS_BOTTOM -} TextBoxPosition; - -#endif - typedef struct { TextBoxType textBoxType; TextBoxPosition textBoxPos; diff --git a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h index 4da1f0f3f..4c9de90a5 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h @@ -1,6 +1,8 @@ #pragma once typedef enum { + TEXT_BUY_BOMBCHU_10_PROMPT = 0x8C, + TEXT_BUY_BOMBCHU_10_DESC = 0xBC, TEXT_GS_NO_FREEZE = 0xB4, TEXT_GS_FREEZE = 0xB5, TEXT_RANDOMIZER_CUSTOM_ITEM = 0xF8, @@ -11,7 +13,14 @@ typedef enum { TEXT_ALTAR_CHILD = 0x7040, TEXT_ALTAR_ADULT = 0x7088, TEXT_GANONDORF = 0x70CC, - TEXT_GANONDORF_NOHINT = 0x70CD + TEXT_GANONDORF_NOHINT = 0x70CD, + TEXT_BLUE_RUPEE = 0xCC, + TEXT_RED_RUPEE = 0xF0, + TEXT_PURPLE_RUPEE = 0xF1, + TEXT_HUGE_RUPEE = 0xF2, + TEXT_BEAN_SALESMAN = 0x405E, + TEXT_SCRUB_RANDOM = 0x9000, + TEXT_SHOP_ITEM_RANDOM = 0x9100, } TextIDs; #ifdef __cplusplus @@ -30,4 +39,7 @@ typedef struct { #define GIMESSAGE_UNTRANSLATED(giid, iid, message) \ { giid, iid, message, message, message } +#define GIMESSAGE_NO_GERMAN(giid, iid, english, french) \ + { giid, iid, english, english, french } + #endif diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index dfe947be8..58fcc6715 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -1,8 +1,10 @@ #include "debugSaveEditor.h" #include "../../util.h" +#include "../../OTRGlobals.h" #include #include "../../UIWidgets.hpp" +#include #include #include #include @@ -14,6 +16,7 @@ extern "C" { #include "variables.h" #include "functions.h" #include "macros.h" +#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" extern GlobalContext* gGlobalCtx; #include "textures/icon_item_static/icon_item_static.h" @@ -525,6 +528,27 @@ void DrawInfoTab() { ImGui::PopItemWidth(); } +void DrawBGSItemFlag(uint8_t itemID) { + const ItemMapEntry& slotEntry = itemMapping[itemID]; + ImGui::Image(SohImGui::GetTextureByName(slotEntry.name), ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1)); + ImGui::SameLine(); + int tradeIndex = itemID - ITEM_POCKET_EGG; + bool hasItem = (gSaveContext.adultTradeItems & (1 << tradeIndex)) != 0; + bool shouldHaveItem = hasItem; + ImGui::Checkbox(("##adultTradeFlag" + std::to_string(itemID)).c_str(), &shouldHaveItem); + if (hasItem != shouldHaveItem) { + if (shouldHaveItem) { + gSaveContext.adultTradeItems |= (1 << tradeIndex); + if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_NONE) { + INV_CONTENT(ITEM_TRADE_ADULT) = ITEM_POCKET_EGG + tradeIndex; + } + } else { + gSaveContext.adultTradeItems &= ~(1 << tradeIndex); + Inventory_ReplaceItem(gGlobalCtx, itemID, Randomizer_GetNextAdultTradeItem()); + } + } +} + void DrawInventoryTab() { static bool restrictToValid = true; @@ -566,6 +590,9 @@ void DrawInventoryTab() { if (ImGui::BeginPopup(itemPopupPicker)) { if (ImGui::Button("##itemNonePicker", ImVec2(32.0f, 32.0f))) { gSaveContext.inventory.items[selectedIndex] = ITEM_NONE; + if (selectedIndex == SLOT_TRADE_ADULT) { + gSaveContext.adultTradeItems = 0; + } ImGui::CloseCurrentPopup(); } UIWidgets::SetLastItemHoverText("None"); @@ -596,6 +623,13 @@ void DrawInventoryTab() { if (ImGui::ImageButton(SohImGui::GetTextureByName(slotEntry.name), ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1), 0)) { gSaveContext.inventory.items[selectedIndex] = slotEntry.id; + // Set adult trade item flag if you're playing adult trade shuffle in rando + if (gSaveContext.n64ddFlag && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) && + selectedIndex == SLOT_TRADE_ADULT && + slotEntry.id >= ITEM_POCKET_EGG && slotEntry.id <= ITEM_CLAIM_CHECK) { + gSaveContext.adultTradeItems |= ADULT_TRADE_FLAG(slotEntry.id); + } ImGui::CloseCurrentPopup(); } UIWidgets::SetLastItemHoverText(SohUtils::GetItemName(slotEntry.id)); @@ -632,6 +666,16 @@ void DrawInventoryTab() { ImGui::PopID(); } } + + // Trade quest flags are only used when shuffling the trade sequence, so + // don't show this if it isn't needed. + if (gSaveContext.n64ddFlag && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) + && ImGui::TreeNode("Adult trade quest items")) { + for (int i = ITEM_POCKET_EGG; i <= ITEM_CLAIM_CHECK; i++) { + DrawBGSItemFlag(i); + } + ImGui::TreePop(); + } } // Draw a flag bitfield as an grid of checkboxes @@ -656,12 +700,14 @@ void DrawFlagArray32(const std::string& name, uint32_t& flags) { ImGui::PopID(); } -void DrawFlagArray16(const std::string& name, uint16_t& flags) { - ImGui::PushID(name.c_str()); +void DrawFlagArray16(const FlagTable& flagTable, uint16_t row, uint16_t& flags) { + ImGui::PushID((std::to_string(row) + flagTable.name).c_str()); for (int32_t flagIndex = 15; flagIndex >= 0; flagIndex--) { ImGui::SameLine(); ImGui::PushID(flagIndex); + bool hasDescription = !!flagTable.flagDescriptions.contains(row * 16 + flagIndex); uint32_t bitMask = 1 << flagIndex; + ImGui::PushStyleColor(ImGuiCol_FrameBg, hasDescription ? ImVec4(0.16f, 0.29f, 0.48f, 0.54f) : ImVec4(0.16f, 0.29f, 0.48f, 0.24f)); bool flag = (flags & bitMask) != 0; if (ImGui::Checkbox("##check", &flag)) { if (flag) { @@ -670,6 +716,12 @@ void DrawFlagArray16(const std::string& name, uint16_t& flags) { flags &= ~bitMask; } } + ImGui::PopStyleColor(); + if (ImGui::IsItemHovered() && hasDescription) { + ImGui::BeginTooltip(); + ImGui::Text("%s", UIWidgets::WrappedText(flagTable.flagDescriptions.at(row * 16 + flagIndex), 60)); + ImGui::EndTooltip(); + } ImGui::PopID(); } ImGui::PopID(); @@ -868,134 +920,53 @@ void DrawFlagsTab() { setMask <<= 1; } - static bool keepGsCountUpdated = true; - ImGui::Checkbox("Keep GS Count Updated", &keepGsCountUpdated); - UIWidgets::InsertHelpHoverText("Automatically adjust the number of gold skulltula tokens acquired based on set flags"); - int32_t gsCount = 0; - if (keepGsCountUpdated) { - for (int32_t gsFlagIndex = 0; gsFlagIndex < 6; gsFlagIndex++) { - gsCount += std::popcount(static_cast(gSaveContext.gsFlags[gsFlagIndex])); + // If playing a Randomizer Save with Shuffle Skull Tokens on anything other than "Off" we don't want to keep + // GS Token Count updated, since Gold Skulltulas killed will not correlate to GS Tokens Collected. + if (!(gSaveContext.n64ddFlag && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS))) { + static bool keepGsCountUpdated = true; + ImGui::Checkbox("Keep GS Count Updated", &keepGsCountUpdated); + UIWidgets::InsertHelpHoverText("Automatically adjust the number of gold skulltula tokens acquired based on set flags."); + int32_t gsCount = 0; + if (keepGsCountUpdated) { + for (int32_t gsFlagIndex = 0; gsFlagIndex < 6; gsFlagIndex++) { + gsCount += std::popcount(static_cast(gSaveContext.gsFlags[gsFlagIndex])); + } + gSaveContext.inventory.gsTokens = gsCount; } - gSaveContext.inventory.gsTokens = gsCount; } }); - if (ImGui::TreeNode("Event Check Inf Flags")) { - DrawGroupWithBorder([&]() { - ImGui::Text("0"); - UIWidgets::InsertHelpHoverText("Mostly Kokiri Forest related"); - DrawFlagArray16("eci0", gSaveContext.eventChkInf[0]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("1"); - UIWidgets::InsertHelpHoverText("Mostly Lon Lon Ranch related"); - DrawFlagArray16("eci1", gSaveContext.eventChkInf[1]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("2"); - UIWidgets::InsertHelpHoverText("Dodongo Related?"); - DrawFlagArray16("eci2", gSaveContext.eventChkInf[2]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("3"); - UIWidgets::InsertHelpHoverText("Mostly Zora related"); - DrawFlagArray16("eci3", gSaveContext.eventChkInf[3]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("4"); - UIWidgets::InsertHelpHoverText("Random"); - DrawFlagArray16("eci4", gSaveContext.eventChkInf[4]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("5"); - UIWidgets::InsertHelpHoverText("Mostly song learning related"); - DrawFlagArray16("eci5", gSaveContext.eventChkInf[5]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("6"); - UIWidgets::InsertHelpHoverText("Random"); - DrawFlagArray16("eci6", gSaveContext.eventChkInf[6]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("7"); - UIWidgets::InsertHelpHoverText("Boss Battle related"); - DrawFlagArray16("eci7", gSaveContext.eventChkInf[7]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("8"); - UIWidgets::InsertHelpHoverText("Mask related?"); - DrawFlagArray16("eci8", gSaveContext.eventChkInf[8]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("9"); - UIWidgets::InsertHelpHoverText("Mostly carpenter related"); - DrawFlagArray16("eci9", gSaveContext.eventChkInf[9]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("A"); - UIWidgets::InsertHelpHoverText("First-time overworld entrance cs related"); - DrawFlagArray16("eci10", gSaveContext.eventChkInf[10]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("B"); - UIWidgets::InsertHelpHoverText("First-time dungeon entrance cs/trial cs related"); - DrawFlagArray16("eci11", gSaveContext.eventChkInf[11]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("C"); - UIWidgets::InsertHelpHoverText("Random"); - DrawFlagArray16("eci12", gSaveContext.eventChkInf[12]); - }); - - DrawGroupWithBorder([&]() { - ImGui::Text("D"); - UIWidgets::InsertHelpHoverText("Frog songs/GS rewards"); - DrawFlagArray16("eci13", gSaveContext.eventChkInf[13]); - }); - - ImGui::TreePop(); - } - if (ImGui::TreeNode("Inf Table Flags")) { - for (int i = 0; i < 30; i++) { - std::string it_id = "it" + std::to_string(i); - DrawGroupWithBorder([&]() { - ImGui::Text("%2d", i); - DrawFlagArray16(it_id, gSaveContext.infTable[i]); - }); + for (int i = 0; i < flagTables.size(); i++) { + const FlagTable& flagTable = flagTables[i]; + if (flagTable.flagTableType == RANDOMIZER_INF && !gSaveContext.n64ddFlag) { + continue; } - ImGui::TreePop(); - } - if (ImGui::TreeNode("Item Get Inf Flags")) { - for (int i = 0; i < 4; i++) { - std::string igi_id = "igi" + std::to_string(i); - DrawGroupWithBorder([&]() { - ImGui::Text("%d", i); - DrawFlagArray16(igi_id, gSaveContext.itemGetInf[i]); - }); + + if (ImGui::TreeNode(flagTable.name)) { + for (int j = 0; j < flagTable.size + 1; j++) { + DrawGroupWithBorder([&]() { + ImGui::Text(fmt::format("{:<2x}", j).c_str()); + switch (flagTable.flagTableType) { + case EVENT_CHECK_INF: + DrawFlagArray16(flagTable, j, gSaveContext.eventChkInf[j]); + break; + case ITEM_GET_INF: + DrawFlagArray16(flagTable, j, gSaveContext.itemGetInf[j]); + break; + case INF_TABLE: + DrawFlagArray16(flagTable, j, gSaveContext.infTable[j]); + break; + case EVENT_INF: + DrawFlagArray16(flagTable, j, gSaveContext.eventInf[j]); + break; + case RANDOMIZER_INF: + DrawFlagArray16(flagTable, j, gSaveContext.randomizerInf[j]); + break; + } + }); + } + ImGui::TreePop(); } - ImGui::TreePop(); - } - if (ImGui::TreeNode("Event Inf Flags")) { - for (int i = 0; i < 4; i++) { - std::string ei_id = "ei" + std::to_string(i); - DrawGroupWithBorder([&]() { - ImGui::Text("%d", i); - DrawFlagArray16(ei_id, gSaveContext.eventInf[i]); - }); - } - ImGui::TreePop(); } } @@ -1154,11 +1125,19 @@ void DrawEquipmentTab() { DrawUpgradeIcon("Strength", UPG_STRENGTH, strengthValues); // There is no icon for child wallet, so default to a text list - const std::vector walletNames = { + // this was const, but I needed to append to it depending in rando settings. + std::vector walletNamesImpl = { "Child (99)", "Adult (200)", "Giant (500)", }; + // only display Tycoon wallet if you're in a save file that would allow it. + if (gSaveContext.n64ddFlag && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) > 1) { + const std::string walletName = "Tycoon (999)"; + walletNamesImpl.push_back(walletName); + } + // copy it to const value for display in ImGui. + const std::vector walletNames = walletNamesImpl; DrawUpgrade("Wallet", UPG_WALLET, walletNames); const std::vector stickNames = { diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.h b/soh/soh/Enhancements/debugger/debugSaveEditor.h index 084f7cadc..e51414f4c 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.h +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.h @@ -1,3 +1,415 @@ #pragma once +#include +#include +#include +#include +#include + void InitSaveEditor(); + +typedef enum { + EVENT_CHECK_INF, + ITEM_GET_INF, + INF_TABLE, + EVENT_INF, + RANDOMIZER_INF, +} FlagTableType; + +typedef struct { + const char* name; + FlagTableType flagTableType; + uint32_t size; + std::map flagDescriptions; +} FlagTable; + +// Reference https://tcrf.net/Proto:The_Legend_of_Zelda:_Ocarina_of_Time_Master_Quest/Event_Editor +// The source was last referenced on 2022-09-03 and had a last updated value of 2020-05-02 +const std::vector flagTables = { + { "Event Check Inf Flags", EVENT_CHECK_INF, 0x0D, { + { 0x02, "First Spoke to Mido" }, + { 0x03, "Complained About Mido to Saria" }, + { 0x04, "Showed Mido Sword & Shield" }, + { 0x05, "Deku Tree Opened Mouth" }, + { 0x06, "Spoke to Saria After Deku Tree's Death" }, + { 0x07, "Obtained Kokiri Emerald & Deku Tree Dead" }, + { 0x09, "Used Deku Tree Blue Warp" }, + { 0x0A, "Played Saria's Song for Mido as Adult" }, + { 0x0C, "Met Deku Tree" }, + { 0x10, "Spoke to Child Malon at Castle or Market" }, + { 0x11, "Spoke to Ingo at Ranch before Talon returns" }, + { 0x12, "Obtained Pocket Egg" }, + { 0x13, "Woke Talon" }, + { 0x14, "Talon Fled Hyrule Castle" }, + { 0x15, "Spoke to Child Malon at Ranch" }, + { 0x16, "Invited to Sing With Child Malon" }, + { 0x17, "Great Deku Tree is Dead" }, + { 0x18, "Obtained Epona" }, + { 0x19, "Obtained Kokiri's Emerald" }, + { 0x1B, "Rented Horse From Ingo" }, + { 0x1C, "Spoke to Mido After Deku Tree's Death" }, + { 0x1D, "Destroyed the Royal Family's Tomb" }, + { 0x1E, "Won the Cow in Malon's Race" }, + { 0x23, "Bombed Dodongo's Cavern Entrance" }, + { 0x25, "Used Dodongo's Cavern Blue Warp" }, + { 0x2F, "Death Mountain Erupted" }, + { 0x30, "Spoke to a Zora" }, + { 0x31, "Obtained Ruto's Letter" }, + { 0x33, "King Zora Moved Aside" }, + { 0x37, "Used Jabu-Jabu Blue Warp" }, + { 0x38, "Obtained Silver Scale" }, + { 0x39, "Opened Entrance to Zora's Domain" }, + { 0x3A, "Offered Fish to Jabu-Jabu" }, + { 0x3B, "Began Nabooru Battle" }, + { 0x3C, "Finished Nabooru Battle" }, + { 0x40, "Obtained Zelda's Letter" }, + { 0x43, "Obtained Ocarina of Time" }, + { 0x45, "Pulled Master Sword from Pedestal" }, + { 0x48, "Used Forest Temple Blue Warp" }, + { 0x49, "Used Fire Temple Blue Warp" }, + { 0x4A, "Used Water Temple Blue Warp" }, + { 0x4B, "Opened the Door of Time" }, + { 0x4D, "Rainbow Bridge Built by Sages" }, + { 0x4E, "Caught by Hyrule Castle Guards" }, + { 0x4F, "Entered the Master Sword Chamber" }, + { 0x50, "Learned Minuet of Forest" }, + { 0x51, "Learned Bolero of Fire" }, + { 0x52, "Learned Serenade of Water" }, + { 0x54, "Learned Nocturne of Shadow" }, + { 0x55, "Sheik Moved From Sword Pedestal" }, + { 0x57, "Learned Saria's Song" }, + { 0x59, "Learned Zelda's Lullaby" }, + { 0x5A, "Learned Sun's Song" }, + { 0x5B, "Learned Song of Storms" }, + { 0x65, "Played Song of Storms in Windmill" }, + { 0x67, "Drained Well in Kakariko Village" }, + { 0x68, "Played Gerudo Archery Minigame" }, + { 0x69, "Restored Lake Hylia's Water" }, + { 0x6A, "Woke Talon in Kakariko" }, + { 0x6B, "Spoke to Talon After Saving Ranch" }, + { 0x6F, "Spoke to Kaepora Gaebora by Lost Woods" }, + { 0x70, "Began Gohma Battle" }, + { 0x71, "Began King Dodongo Battle" }, + { 0x72, "Began Phantom Ganon Battle" }, + { 0x73, "Began Volvagia Battle" }, + { 0x74, "Began Morpha Battle" }, + { 0x75, "Began Twinrova Battle" }, + { 0x76, "Began Barinade Battle" }, + { 0x77, "Began Bongo Bongo Battle" }, + { 0x78, "Began Ganondorf Battle" }, + { 0x80, "Zelda Fled Hyrule Castle" }, + { 0x82, "Bridge Unlocked (After Zelda Escape Cutscene)" }, + { 0x8C, "Paid Back Keaton Mask Fee" }, + { 0x8D, "Paid Back Skull Mask Fee" }, + { 0x8E, "Paid Back Spooky Mask Fee" }, + { 0x8F, "Paid Back Bunny Hood Fee" }, + { 0x90, "Rescued Red Carpenter" }, + { 0x91, "Rescued Yellow Carpenter" }, + { 0x92, "Rescued Blue Carpenter" }, + { 0x93, "Rescued Green Carpenter" }, + { 0x94, "Spoke to Nabooru in Spirit Temple" }, + { 0x95, "Nabooru Captured by Twinrova" }, + { 0x96, "Spoke to Cursed Man in Skulltula House" }, + { 0x9C, "Played Song for Scarecrow as Adult" }, + { 0xA0, "Entered Hyrule Field" }, + { 0xA1, "Entered Death Mountain Trail" }, + { 0xA3, "Entered Kakariko Village" }, + { 0xA4, "Entered Zora's Domain" }, + { 0xA5, "Entered Hyrule Castle" }, + { 0xA6, "Entered Goron City" }, + { 0xA7, "Entered Temple of Time" }, + { 0xA8, "Entered Deku Tree" }, + { 0xA9, "Learned Song of Time" }, + { 0xAA, "Bongo Bongo Escaped Well" }, + { 0xAC, "Learned Requiem of Spirit" }, + { 0xAD, "Completed Spirit Trial" }, + { 0xB0, "Entered Dodongo's Cavern" }, + { 0xB1, "Entered Lake Hylia" }, + { 0xB2, "Entered Gerudo Valley" }, + { 0xB3, "Entered Gerudo's Fortress" }, + { 0xB4, "Entered Lon Lon Ranch" }, + { 0xB5, "Entered Jabu-Jabu's Belly" }, + { 0xB6, "Entered Graveyard" }, + { 0xB7, "Entered Zora's Fountain" }, + { 0xB8, "Entered Desert Colossus" }, + { 0xB9, "Entered Death Mountain Crater" }, + { 0xBA, "Entered Ganon's Castle (Exterior)" }, + { 0xBB, "Completed Forest Trial" }, + { 0xBC, "Completed Water Trial" }, + { 0xBD, "Completed Shadow Trial" }, + { 0xBE, "Completed Fire Trial" }, + { 0xBF, "Completed Light Trial" }, + { 0xC0, "Nabooru Ordered to Fight by Twinrova" }, + { 0xC1, "Spoke to Saria on Lost Woods Bridge" }, + { 0xC3, "Dispelled Ganon's Tower Barrier" }, + { 0xC4, "Returned to Temple of Time With All Medallions" }, + { 0xC5, "Sheik, Spawned at Master Sword Pedestal as Adult" }, + { 0xC6, "Spoke to Deku Tree Sprout" }, + { 0xC7, "Watched Ganon's Tower Collapse / Caught by Gerudo" }, + { 0xC8, "Obtained Spirit Medallion" }, + { 0xC9, "Demo_Effect, Temple of Time Warp in blue aura + sfx the first time you spawn as Adult" }, + { 0xD0, "Obtained Frogs' Piece of Heart" }, + { 0xD1, "Played Zelda's Lullaby for Frogs" }, + { 0xD2, "Played Epona's Song for Frogs" }, + { 0xD3, "Played Sun's Song for Frogs" }, + { 0xD4, "Played Saria's Song for Frogs" }, + { 0xD5, "Played Song of Time for Frogs" }, + { 0xD6, "Played Song of Storms for Frogs" }, + { 0xDA, "Obtained Adult's Wallet" }, + { 0xDB, "Obtained Stone of Agony" }, + { 0xDC, "Obtained Giant's Wallet" }, + { 0xDD, "Obtained Skulltula House's Bombchu" }, + { 0xDE, "Obtained Skulltula House's Piece of Heart" }, + } }, + { "Item Get Inf Flags", ITEM_GET_INF, 0x03, { + { 0x02, "Obtained Super Cucco Bottle" }, + { 0x03, "Bought Bombchu (Shelf 2: Top Right)" }, + { 0x04, "Bought Bombchu (Shelf 1: Bot. Right)" }, + { 0x05, "Bought Bombchu (Shelf 1: Top Left)" }, + { 0x06, "Bought Bombchu (Shelf 2: Bot. Left)" }, + { 0x07, "Bought Bombchu (Shelf 2: Bot. Right)" }, + { 0x08, "Bought Bombchu (Shelf 1: Top Right)" }, + { 0x09, "Bought Bombchu (Shelf 1: Bot. Left)" }, + { 0x0A, "Bought Bombchu (Shelf 2: Top Left)" }, + { 0x0B, "Obtained Scrub's Heart Piece" }, + { 0x0C, "Obtained Cucco Lady's Bottle" }, + { 0x0D, "Obtained Bullet Bag Upgrade (Market)" }, + { 0x0E, "Obtained Big Quiver" }, + { 0x0F, "Obtained Biggest Quiver" }, + { 0x10, "Obtained Scientist's Heart Piece" }, + { 0x11, "Obtained Bowling Bomb Bag Upgrade" }, + { 0x12, "Obtained Bowling Heart Piece" }, + { 0x13, "Obtained Deku Seeds" }, + { 0x15, "Obtained Roof Guy's Heart Piece" }, + { 0x16, "Obtained Skullkid's Heart Piece" }, + { 0x17, "Obtained Skullkids' Heart Piece" }, + { 0x18, "Obtained Farore's Wind" }, + { 0x19, "Obtained Din's Fire" }, + { 0x1A, "Obtained Nayru's Love" }, + { 0x1C, "Obtained Grave-Dig Heart Piece" }, + { 0x1D, "Obtained Bullet Bag Upgrade (Woods)" }, + { 0x1E, "Obtained Deku Stick Upgrade (Stage)" }, + { 0x1F, "Obtained Deku Nut Upgrade (Stage)" }, + { 0x23, "Obtained Keaton Mask" }, + { 0x24, "Obtained Skull Mask" }, + { 0x25, "Obtained Spooky Mask" }, + { 0x26, "Obtained Bunny Hood" }, + { 0x2A, "Obtained Mask of Truth" }, + { 0x2C, "Obtained Pocket Egg" }, + { 0x2E, "Obtained Cojiro" }, + { 0x30, "Obtained Odd Potion" }, + { 0x31, "Obtained Poacher's Saw" }, + { 0x38, "Sold Keaton Mask" }, + { 0x39, "Sold Skull Mask" }, + { 0x3A, "Sold Spooky Mask" }, + { 0x3B, "Sold Bunny Hood" }, + { 0x3F, "Obtained Mask of Truth" }, + } }, + { "Inf Flags", INF_TABLE, 0x1D, { + { 0x00, "Greeted by Saria" }, + { 0x01, "Spoke to Saria About Obtaining Fairy" }, + { 0x03, "Complained About Mido to Saria" }, + { 0x05, "Spoke to Saria in Saria's House" }, + { 0x0C, "Mido Asked to See Sword & Shield" }, + { 0x15, "Spoke to Mido in Lost Woods as Adult" }, + { 0x19, "Told Mido Saria Won't Return" }, + { 0x1E, "Spoke to Kokiri Girl by Jumping Stones" }, + { 0x22, "Spoke to Kokiri Boy Guarding Forest Exit" }, + { 0x24, "Spoke to Kokiri Boy Cutting Grass" }, + { 0x26, "Spoke to Kokiri Girl on Shop Awning" }, + { 0x28, "Spoke to Kokiri Girl About Training Center" }, + { 0x31, "Spoke to Kokiri Boy on Bed in Mido's House" }, + { 0x51, "Spoke to Kokiri Girl in Saria's House" }, + { 0x59, "Spoke to Know-It-All Bro. About Temple" }, + { 0x61, "Spoke to Know-It-All Bro. About Saria" }, + { 0x66, "Spoke to Deku Tree Sprout After Cutscene" }, + { 0x6C, "Spoke to Dying Knight" }, + { 0x76, "Showed Zelda's Letter to Gate Guard" }, + { 0x77, "Gate Guard Put On Keaton Mask" }, + { 0x7E, "Spoke to Talon in Lon Lon Ranch House" }, + { 0x84, "Spoke to Child Malon at Castle or Market" }, + { 0x85, "Child Malon Said Epona Was Afraid of You" }, + { 0x8B, "Entered Hyrule Castle" }, + { 0x94, "Spoke to Ingo at Ranch Before Talon's Return" }, + { 0x97, "Spoke to Ingo at Ranch" }, + { 0x9A, "Spoke to Ingo as Adult" }, + { 0xA2, "Refused Ingo's 50 Rupee Rental Request" }, + { 0xAB, "Rode a Horse at Ingo's Ranch" }, + { 0xB0, "Spoke to Medigoron as Child" }, + { 0xB1, "Spoke to Medigoron as Adult" }, + { 0xB6, "Spoke to Poe Collector in Ruined Market" }, + { 0xB7, "Spoke to Fado in Kokiri Forest as Child" }, + { 0xB8, "Spoke to Malon After Saving Ranch" }, + { 0xB9, "Spoke to Malon on Horseback" }, + { 0xBC, "Spoke to Carpenter Boss by Tent" }, + { 0xC0, "Spoke to Fat Woman by Market Potion Shop" }, + { 0xC1, "Spoke to Fat Woman After Zelda's Escape" }, + { 0xC2, "Spoke to Burly Man About Talon Search" }, + { 0xC3, "Spoke to Burly Man After Zelda's Escape" }, + { 0xC4, "Spoke to Thief After Zelda's Escape" }, + { 0xC5, "Spoke to Thin Man by Market Target Shop" }, + { 0xC6, "Spoke to Old Woman by Market Fountain" }, + { 0xC7, "Spoke to Old Man by Bombchu Bowling" }, + { 0xC8, "Spoke to Thin Lady by Bombchu Bowling" }, + { 0xC9, "Spoke to Thin Lady After Zelda's Escape (1.0)" }, + { 0xCA, "Spoke to Red Joker in Market" }, + { 0xCB, "Spoke to Blue Joker in Market (1.0) / Dog Lady as Adult (DBG)" }, + { 0xCC, "Spoke to Itchy Lady After Malon Left Town" }, + { 0xCD, "Spoke to Blue Jokester in Market (DBG)" }, + { 0xCE, "Spoke to Thin Lady After Zelda's Escape (DBG)" }, + { 0xD9, "Spoke to Dampé as Child" }, + { 0xE0, "Spoke to Goron by Cavern" }, + { 0xE3, "Spoke to Goron Hiding Stick" }, + { 0xE6, "Spoke to Goron by Woods Exit" }, + { 0xEB, "Spoke to Goron by Bomb Flowers" }, + { 0xF0, "Spoke to Goron at City? Entrance" }, + { 0xF4, "Spoke to Ruby-Crazed Goron" }, + { 0xFC, "Spoke to Goron Shop Owner" }, + { 0x109, "Goron City Doors Unlocked" }, + { 0x10B, "Spoke to Goron Link About Volvagia" }, + { 0x10C, "Stopped Goron Link's Rolling" }, + { 0x10E, "Spoke to Goron Link" }, + { 0x113, "Spoke to Darunia in Goron City" }, + { 0x11A, "Spoke to Darunia in Fire Temple" }, + { 0x11E, "Obtained Bomb Bag Upgrade (Goron City)" }, + { 0x124, "Spoke to Zora Near Zora Shop?" }, + { 0x128, "Spoke to Zora Beside Zora Shop?" }, + { 0x129, "Spoke to Zora Swimming Behind Zora Shop" }, + { 0x138, "Thawed King Zora" }, + { 0x139, "Obtained Zora Tunic" }, + { 0x140, "Ruto in JJ (M7) on Blue Switch" }, + { 0x141, "Ruto in JJ (M2) Meet Ruto" }, + { 0x142, "Ruto in JJ (M3) Talk First Time" }, + { 0x143, "Ruto in JJ (M10) Can Be Escorted" }, + { 0x144, "Ruto in JJ (?) Wants to be Tossed to Sapphire" }, + { 0x145, "Ruto in JJ (M6) on Sapphire platform" }, + { 0x146, "Ruto in JJ (M6) Kidnapped" }, + { 0x147, "Ruto in JJ, Spawns on F1 Instead of B1" }, + { 0x160, "Spoke to Man in Impa's House During Day" }, + { 0x161, "Spoke to Man in Impa's House at Night" }, + { 0x162, "Spoke to Man in Impa's House as Adult" }, + { 0x163, "Spoke to Carpenter Boss's Wife as Child" }, + { 0x164, "Spoke to Carpenter Boss's Wife as Adult" }, + { 0x16C, "Refused Nabooru's Request" }, + { 0x170, "Spoke to Carpenter Boss in Valley" }, + { 0x172, "Spoke to Carpenter Boss in Kakariko" }, + { 0x176, "Spoke to Blue Carpenter in Tent" }, + { 0x178, "Spoke to Green Carpenter in Tent" }, + { 0x17F, "Running Man Suggested a Race" }, + { 0x190, "Obtained Gerudo Archery Piece of Heart" }, + { 0x191, "Obtained Dog Lady's Piece of Heart" }, + { 0x192, "Obtained Deku Stick Upgrade (Lost Woods)" }, + { 0x193, "Obtained Deku Nut Upgrade (Grotto)" }, + { 0x195, "Spoke to Kaepora in Lake Hylia" }, + { 0x196, "Spoke to Cursed Man With <10 Tokens" }, + { 0x197, "Spoke to Cursed Man With 10 Tokens" }, + { 0x198, "Obtained Small Magic Jar" }, + { 0x199, "Caught Cucco by Field Entrance" }, + { 0x19A, "Caught Cucco by Bazaar" }, + { 0x19B, "Caught Cucco by Cucco Pen" }, + { 0x19C, "Caught Cucco Behind Windmill" }, + { 0x19D, "Caught Cucco in Crate" }, + { 0x19E, "Caught Cucco by Skulltula House" }, + { 0x19F, "Caught Cucco Behind Potion Shop" }, + { 0x1A0, "Entered Deku Tree" }, + { 0x1A1, "Entered Dodongo's Cavern" }, + { 0x1A2, "Entered Jabu-Jabu's Belly" }, + { 0x1A3, "Entered Forest Temple" }, + { 0x1A4, "Entered Fire Temple" }, + { 0x1A5, "Entered Water Temple" }, + { 0x1A6, "Entered Spirit Temple" }, + { 0x1A7, "Entered Shadow Temple" }, + { 0x1A8, "Entered Bottom of the Well" }, + { 0x1A9, "Entered Ice Cavern" }, + { 0x1AA, "Entered Ganon's Tower" }, + { 0x1AB, "Entered Gerudo Training Ground" }, + { 0x1AC, "Entered Thieves' Hideout" }, + { 0x1AD, "Entered Ganon's Castle" }, + { 0x1AE, "Entered Ganon's Tower (Collapsing)" }, + { 0x1AF, "Entered Ganon's Castle (Collapsing)" }, + { 0x1D0, "No Sword on B" }, + } }, + { "Event Inf Flags", EVENT_INF, 0x03, { + { 0x00, "Rented Horse From Ingo" }, + { 0x01, "Racing Ingo" }, + { 0x02, "Won First Race With Ingo?" }, + { 0x05, "Lost Race With Ingo?" }, + { 0x06, "Racing Ingo For the Second Time" }, + { 0x08, "Finished Special Cucco Minigame / Began Gerudo Archery" }, + { 0x0A, "Won Special Cucco Minigame?" }, + { 0x0F, "Rented Horse From Ingo" }, + { 0x10, "Racing Running Man" }, + { 0x20, "Market Crowd Text Randomizer" }, + { 0x21, "Market Crowd Text Randomizer" }, + { 0x22, "Market Crowd Text Randomizer" }, + { 0x23, "Market Crowd Text Randomizer" }, + { 0x24, "Market Crowd Text Randomizer" }, + { 0x30, "Entered the Market" }, + } }, + { "Randomizer Inf Flags", RANDOMIZER_INF, 0x03, { + { RAND_INF_DUNGEONS_DONE_DEKU_TREE, "DUNGEONS_DONE_DEKU_TREE" }, + { RAND_INF_DUNGEONS_DONE_DODONGOS_CAVERN, "DUNGEONS_DONE_DODONGOS_CAVERN" }, + { RAND_INF_DUNGEONS_DONE_JABU_JABUS_BELLY, "DUNGEONS_DONE_JABU_JABUS_BELLY" }, + { RAND_INF_DUNGEONS_DONE_FOREST_TEMPLE, "DUNGEONS_DONE_FOREST_TEMPLE" }, + { RAND_INF_DUNGEONS_DONE_FIRE_TEMPLE, "DUNGEONS_DONE_FIRE_TEMPLE" }, + { RAND_INF_DUNGEONS_DONE_WATER_TEMPLE, "DUNGEONS_DONE_WATER_TEMPLE" }, + { RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE, "DUNGEONS_DONE_SPIRIT_TEMPLE" }, + { RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE, "DUNGEONS_DONE_SHADOW_TEMPLE" }, + + { RAND_INF_TRIALS_DONE_LIGHT_TRIAL, "TRIALS_DONE_LIGHT_TRIAL" }, + { RAND_INF_TRIALS_DONE_FOREST_TRIAL, "TRIALS_DONE_FOREST_TRIAL" }, + { RAND_INF_TRIALS_DONE_FIRE_TRIAL, "TRIALS_DONE_FIRE_TRIAL" }, + { RAND_INF_TRIALS_DONE_WATER_TRIAL, "TRIALS_DONE_WATER_TRIAL" }, + { RAND_INF_TRIALS_DONE_SPIRIT_TRIAL, "TRIALS_DONE_SPIRIT_TRIAL" }, + { RAND_INF_TRIALS_DONE_SHADOW_TRIAL, "TRIALS_DONE_SHADOW_TRIAL" }, + + { RAND_INF_COWS_MILKED_LINKS_HOUSE_COW, "COWS_MILKED_LINKS_HOUSE_COW" }, + { RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW, "COWS_MILKED_HF_COW_GROTTO_COW" }, + { RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW, "COWS_MILKED_LLR_STABLES_LEFT_COW" }, + { RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW, "COWS_MILKED_LLR_STABLES_RIGHT_COW" }, + { RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW, "COWS_MILKED_LLR_TOWER_LEFT_COW" }, + { RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW, "COWS_MILKED_LLR_TOWER_RIGHT_COW" }, + { RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW, "COWS_MILKED_KAK_IMPAS_HOUSE_COW" }, + { RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW, "COWS_MILKED_DMT_COW_GROTTO_COW" }, + { RAND_INF_COWS_MILKED_GV_COW, "COWS_MILKED_GV_COW" }, + { RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW, "COWS_MILKED_JABU_JABUS_BELLY_MQ_COW" }, + { RAND_INF_COWS_MILKED_HF_COW_GROTTO_GOSSIP_STONE, "COWS_MILKED_HF_COW_GROTTO_GOSSIP_STONE" }, + + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY" }, + { RAND_INF_SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB, "SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO, "SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO" }, + { RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB" }, + } }, +}; \ No newline at end of file diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index 7e5f1a9a3..ef303c680 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -6,13 +6,32 @@ #define CHEST_ANIM_SHORT 0 #define CHEST_ANIM_LONG 1 +/** + * Flag to indicate which type of Actor has given the player an item. ITEM_FROM_NPC by default, + * should be set by the actor giving the item before they send the GetItemEntry signal to the player. + * ITEM_FROM_NPC is the default for the GET_ITEM macro so that the random NPC actors giving items + * don't need to manually update the GetItemEntry before sending it to the player. Instead just the + * specific actors (item00, en_box, en_si, etc.) can set their corresponding ITEM_FROM value. + */ +typedef enum GetItemFrom { + ITEM_FROM_NPC, + ITEM_FROM_SKULLTULA, + ITEM_FROM_FREESTANDING, + ITEM_FROM_CHEST, +} GetItemFrom; + #define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, modIndex, getItemId) \ - { itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId, modIndex, getItemId, drawId, true } + { itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId, modIndex, getItemId, drawId, true, ITEM_FROM_NPC, NULL } #define GET_ITEM_NONE \ - { ITEM_NONE, 0, 0, 0, 0, 0, 0, 0, false } + { ITEM_NONE, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, NULL } -typedef struct { +typedef struct GlobalContext GlobalContext; +typedef struct GetItemEntry GetItemEntry; + +typedef void (*CustomDrawFunc)(GlobalContext* globalCtx, GetItemEntry* getItemEntry); + +typedef struct GetItemEntry { /* 0x00 */ uint16_t itemId; /* 0x01 */ uint16_t field; // various bit-packed data /* 0x02 */ int16_t gi; // defines the draw id and chest opening animation @@ -22,4 +41,6 @@ typedef struct { /* 0x08 */ int16_t getItemId; /* 0x0A */ uint16_t gid; // Stores the GID value unmodified for future reference. /* 0x0C */ uint16_t collectable; // determines whether the item can be collected on the overworld. Will be true in most cases. -} GetItemEntry; // size = 0x0F + /* 0x0E */ GetItemFrom getItemFrom; + CustomDrawFunc drawFunc; +}; // size = 0x0F diff --git a/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp b/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp index e7b2ef7aa..acd247312 100644 --- a/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp @@ -257,7 +257,7 @@ constexpr std::array DungeonColors = { //Tycoon's Wallet CreateMessage(0x09F7, 0, 2, 3, UNSKIPPABLE()+ITEM_OBTAINED(ITEM_WALLET_GIANT)+INSTANT_TEXT_ON()+"You got a "+COLOR(QM_RED)+"Tycoon's Wallet"+COLOR(QM_WHITE)+"!"+INSTANT_TEXT_OFF()+NEWLINE()+"It's gigantic! Now you can carry"+NEWLINE()+"up to "+COLOR(QM_YELLOW)+"999 "+COLOR(QM_WHITE)+COLOR(QM_YELLOW)+"Rupees"+COLOR(QM_WHITE)+"!"+MESSAGE_END(), - UNSKIPPABLE()+ITEM_OBTAINED(ITEM_WALLET_GIANT)+INSTANT_TEXT_ON()+"Vous obtenez la "+COLOR(QM_RED)+"Bourse de star"+COLOR(QM_WHITE)+"!"+INSTANT_TEXT_OFF()+NEWLINE()+"Elle peut contenir jusqu'à "+COLOR(QM_YELLOW)+"999 "+COLOR(QM_WHITE)+COLOR(QM_YELLOW)+"rubis"+COLOR(QM_WHITE)+"!"+NEWLINE()+"C'est gigantesque!"+MESSAGE_END(), + UNSKIPPABLE()+ITEM_OBTAINED(ITEM_WALLET_GIANT)+INSTANT_TEXT_ON()+"Vous obtenez la "+COLOR(QM_RED)+"Bourse de Magnat"+COLOR(QM_WHITE)+"!"+INSTANT_TEXT_OFF()+NEWLINE()+"Elle peut contenir jusqu'à "+COLOR(QM_YELLOW)+"999 "+COLOR(QM_WHITE)+COLOR(QM_YELLOW)+"rubis"+COLOR(QM_WHITE)+"!"+NEWLINE()+"C'est gigantesque!"+MESSAGE_END(), UNSKIPPABLE()+ITEM_OBTAINED(ITEM_WALLET_GIANT)+INSTANT_TEXT_ON()+"¡Has conseguido una "+COLOR(QM_RED)+"bolsa para ricachones"+COLOR(QM_WHITE)+"!"+INSTANT_TEXT_OFF()+NEWLINE()+"¡Qué descomunal! Ya puedes llevar"+NEWLINE()+"hasta "+COLOR(QM_YELLOW)+"999 "+COLOR(QM_WHITE)+COLOR(QM_YELLOW)+"rupias"+COLOR(QM_WHITE)+"!"+MESSAGE_END()); //Saria's Song Default Hint CreateMessage(0x0A00, 0, 2, 3, diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 34037f3a1..cbd636022 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1039,6 +1039,19 @@ int Fill() { //Fast fill for the rest of the pool std::vector remainingPool = FilterAndEraseFromPool(ItemPool, [](const auto i) { return true; }); FastFill(remainingPool, GetAllEmptyLocations(), false); + + //Add prices for scrubsanity, this is unique to SoH because we write/read scrub prices to/from the spoilerfile. + if (Scrubsanity.Is(SCRUBSANITY_AFFORDABLE)) { + for (size_t i = 0; i < ScrubLocations.size(); i++) { + Location(ScrubLocations[i])->SetScrubsanityPrice(10); + } + } else if (Scrubsanity.Is(SCRUBSANITY_RANDOM_PRICES)) { + for (size_t i = 0; i < ScrubLocations.size(); i++) { + int randomPrice = GetRandomScrubPrice(); + Location(ScrubLocations[i])->SetScrubsanityPrice(randomPrice); + } + } + GeneratePlaythrough(); //Successful placement, produced beatable result if(playthroughBeatable && !placementFailure) { diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp index 11fd2b441..72fb227ac 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp @@ -5,9 +5,9 @@ using namespace CustomMessages; -//Big thanks to Lioncache, Gabyelnuevo, Danius88, and Charade for their translations! +// Big thanks to Lioncache, Gabyelnuevo, Danius88, and Charade for their translations! -//Text is {english, french, spanish} +// Text is {english, french, spanish} // there are special characters that are read for certain in game commands: // ^ is a box break @@ -24,13 +24,19 @@ void HintTable_Init() { /*-------------------------- | GENERAL TEXT | ---------------------------*/ - hintTable[NONE] = HintText::Exclude({Text{"No Hint","Pas d'Indice",""}}); - hintTable[PREFIX] = HintText::Exclude({Text{"They say that ", /*french*/"Selon moi, ", /*spanish*/"Según dicen, "}}); - hintTable[WAY_OF_THE_HERO] = HintText::Exclude({Text{" is on the way of the hero.", /*french*/" est sur la voie du héros." , /*spanish*/" conduce a la senda del héroe."}}); - hintTable[PLUNDERING] = HintText::Exclude({Text{"plundering ", /*french*/"explorer ", /*spanish*/"inspeccionar "}}); - hintTable[FOOLISH] = HintText::Exclude({Text{" is a foolish choice.", /*french*/" est futile.", /*spanish*/" no es una sabia decisión."}}); - hintTable[CAN_BE_FOUND_AT] = HintText::Exclude({Text{"can be found at", /*french*/"se trouve dans", /*spanish*/"aguarda en"}}); - hintTable[HOARDS] = HintText::Exclude({Text{"hoards", /*french*/"recèle", /*spanish*/"acapara"}}); + hintTable[NONE] = HintText::Exclude({ Text{ "No Hint", "Pas d'Indice", "" } }); + hintTable[PREFIX] = + HintText::Exclude({ Text{ "They say that ", /*french*/ "Selon moi, ", /*spanish*/ "Según dicen, " } }); + hintTable[WAY_OF_THE_HERO] = + HintText::Exclude({ Text{ " is on the way of the hero.", /*french*/ " est sur la voie du héros.", + /*spanish*/ " conduce a la senda del héroe." } }); + hintTable[PLUNDERING] = + HintText::Exclude({ Text{ "plundering ", /*french*/ "explorer ", /*spanish*/ "inspeccionar " } }); + hintTable[FOOLISH] = HintText::Exclude( + { Text{ " is a foolish choice.", /*french*/ " est futile.", /*spanish*/ " no es una sabia decisión." } }); + hintTable[CAN_BE_FOUND_AT] = + HintText::Exclude({ Text{ "can be found at", /*french*/ "se trouve dans", /*spanish*/ "aguarda en" } }); + hintTable[HOARDS] = HintText::Exclude({ Text{ "hoards", /*french*/ "recèle", /*spanish*/ "acapara" } }); HintTable_Init_Item(); HintTable_Init_Exclude_Overworld(); @@ -40,1770 +46,2262 @@ void HintTable_Init() { | ALWAYS HINT TEXT | ---------------------------*/ - hintTable[ZR_FROGS_OCARINA_GAME] = HintText::Always({ - //obscure text - Text{"an #amphibian feast# yields", /*french*/"un #festin d'amphibiens# donne", /*spanish*/"una #fiesta anfibia# brinda"}, - Text{"the #croaking choir's magnum opus# awards", /*french*/"la #chorale coassante# donne", /*spanish*/"un #coro maestro de ancas# premia"}, - Text{"the #froggy finale# yields", /*french*/"la #finale amphibienne# donne", /*spanish*/"el #gran final batracio# brinda"}, - }, {}, - //clear text - Text{"the final reward from the #Frogs of Zora's River# is", /*french*/"la dernière récompense des #grenouilles de la Rivière Zora# est", /*spanish*/"la recompensa final de las #ranas del Río Zora# premia"} - ); + hintTable[ZR_FROGS_OCARINA_GAME] = HintText::Always( + { + // obscure text + Text{ "an #amphibian feast# yields", /*french*/ "un #festin d'amphibiens# donne", + /*spanish*/ "una #fiesta anfibia# brinda" }, + Text{ "the #croaking choir's magnum opus# awards", /*french*/ "la #chorale coassante# donne", + /*spanish*/ "un #coro maestro de ancas# premia" }, + Text{ "the #froggy finale# yields", /*french*/ "la #finale amphibienne# donne", + /*spanish*/ "el #gran final batracio# brinda" }, + }, + {}, + // clear text + Text{ "the final reward from the #Frogs of Zora's River# is", + /*french*/ "la dernière récompense des #grenouilles de la Rivière Zora# est", + /*spanish*/ "la recompensa final de las #ranas del Río Zora# premia" }); - hintTable[KF_LINKS_HOUSE_COW] = HintText::Always({ - //obscure text - Text{"the #bovine bounty of a horseback hustle# gifts", /*french*/"le cadeau #qui découle d'une réussite équestre# est", /*spanish*/"la #recompensa bovina de un paseo a caballo# brinda"}, - }, {}, - //clear text - Text{"#Malon's obstacle course# leads to", /*french*/"la #course à obstacle de Malon# amène à", /*spanish*/"la #carrera de obstáculos de Malon# brinda"} - ); + hintTable[KF_LINKS_HOUSE_COW] = HintText::Always( + { + // obscure text + Text{ "the #bovine bounty of a horseback hustle# gifts", + /*french*/ "le cadeau #qui découle d'une réussite équestre# est", + /*spanish*/ "la #recompensa bovina de un paseo a caballo# brinda" }, + }, + {}, + // clear text + Text{ "#Malon's obstacle course# leads to", /*french*/ "la #course à obstacle de Malon# amène à", + /*spanish*/ "la #carrera de obstáculos de Malon# brinda" }); /*-------------------------- | SOMETIMES HINT TEXT | ---------------------------*/ hintTable[SONG_FROM_OCARINA_OF_TIME] = HintText::Sometimes({ - //obscure text - Text{"the #Ocarina of Time# teaches", /*french*/"l'#Ocarina du Temps# est accompagné par", /*spanish*/"la #Ocarina del Tiempo# enseña"}, - }); + // obscure text + Text{ "the #Ocarina of Time# teaches", /*french*/ "l'#Ocarina du Temps# est accompagné par", + /*spanish*/ "la #Ocarina del Tiempo# enseña" }, + }); hintTable[SONG_FROM_COMPOSERS_GRAVE] = HintText::Sometimes({ - //obscure text - Text{"#ReDead in the Composers' Grave# guard", /*french*/"les #Éffrois du tombeau des compositeurs# protègent", /*spanish*/"los #ReDeads del Panteón Real# guardan"}, - Text{"the #Composer Brothers wrote#", /*french*/"le #trésor des compositeurs# est", /*spanish*/"los #hermanos compositores escribieron#"}, - }); + // obscure text + Text{ "#ReDead in the Composers' Grave# guard", + /*french*/ "les #Éffrois du tombeau des compositeurs# protègent", + /*spanish*/ "los #ReDeads del Panteón Real# guardan" }, + Text{ "the #Composer Brothers wrote#", /*french*/ "le #trésor des compositeurs# est", + /*spanish*/ "los #hermanos compositores escribieron#" }, + }); hintTable[SHEIK_IN_FOREST] = HintText::Sometimes({ - //obscure text - Text{"#in a meadow# Sheik teaches", /*french*/"Sheik confiera, #dans un bosquet#,", /*spanish*/"#en la pradera sagrada# Sheik enseña"}, - }); + // obscure text + Text{ "#in a meadow# Sheik teaches", /*french*/ "Sheik confiera, #dans un bosquet#,", + /*spanish*/ "#en la pradera sagrada# Sheik enseña" }, + }); hintTable[SHEIK_AT_TEMPLE] = HintText::Sometimes({ - //obscure text - Text{"Sheik waits at a #monument to time# to teach", /*french*/"Sheik confiera, #au pied de l'épée légendaire#,", /*spanish*/"Sheik espera en el #momumento del tiempo# para enseñar"}, - }); + // obscure text + Text{ "Sheik waits at a #monument to time# to teach", + /*french*/ "Sheik confiera, #au pied de l'épée légendaire#,", + /*spanish*/ "Sheik espera en el #momumento del tiempo# para enseñar" }, + }); hintTable[SHEIK_IN_CRATER] = HintText::Sometimes({ - //obscure text - Text{"the #crater's melody# is", /*french*/"Sheik confiera, #entouré de lave#,", /*spanish*/"la #melodía del cráter# otorga"}, - }); + // obscure text + Text{ "the #crater's melody# is", /*french*/ "Sheik confiera, #entouré de lave#,", + /*spanish*/ "la #melodía del cráter# otorga" }, + }); hintTable[SHEIK_IN_ICE_CAVERN] = HintText::Sometimes({ - //obscure text - Text{"the #frozen cavern# echoes with", /*french*/"Sheik confiera, #dans une caverne enneigée#,", /*spanish*/"en la #caverna de hielo# retumban los ecos de"}, - }); + // obscure text + Text{ "the #frozen cavern# echoes with", /*french*/ "Sheik confiera, #dans une caverne enneigée#,", + /*spanish*/ "en la #caverna de hielo# retumban los ecos de" }, + }); hintTable[SHEIK_IN_KAKARIKO] = HintText::Sometimes({ - //obscure text - Text{"a #ravaged village# mourns with", /*french*/"Sheik confirera, #au coeur d'un village ravagé#,", /*spanish*/"un #arrasado pueblo# llora"}, - }); + // obscure text + Text{ "a #ravaged village# mourns with", /*french*/ "Sheik confirera, #au coeur d'un village ravagé#,", + /*spanish*/ "un #arrasado pueblo# llora" }, + }); hintTable[SHEIK_AT_COLOSSUS] = HintText::Sometimes({ - //obscure text - Text{"a hero ventures #beyond the wasteland# to learn", /*french*/"Sheik confiera, #au bout d'un chemin sableux#,", /*spanish*/"el héroe que se adentre #más allá del desierto# aprenderá"}, - }); + // obscure text + Text{ "a hero ventures #beyond the wasteland# to learn", + /*french*/ "Sheik confiera, #au bout d'un chemin sableux#,", + /*spanish*/ "el héroe que se adentre #más allá del desierto# aprenderá" }, + }); - - hintTable[MARKET_10_BIG_POES] = HintText::Sometimes({ - //obscure text - Text{"#ghost hunters# will be rewarded with", /*french*/"#les chasseurs de fantômes# sont récompensés avec", /*spanish*/"los #cazafantasmas# son premiados con"}, - }, {}, - //clear text - Text{"catching #Big Poes# leads to", /*french*/"#d'attraper des Àmes# donne", /*spanish*/"hacerte con #Grandes Poes# conduce a"} - ); + hintTable[MARKET_10_BIG_POES] = HintText::Sometimes( + { + // obscure text + Text{ "#ghost hunters# will be rewarded with", + /*french*/ "#les chasseurs de fantômes# sont récompensés avec", + /*spanish*/ "los #cazafantasmas# son premiados con" }, + }, + {}, + // clear text + Text{ "catching #Big Poes# leads to", /*french*/ "#d'attraper des Àmes# donne", + /*spanish*/ "hacerte con #Grandes Poes# conduce a" }); hintTable[DEKU_THEATER_SKULL_MASK] = HintText::Sometimes({ - //obscure text - Text{"the #Skull Mask# yields", /*french*/"le #Masque de Mort# donne", /*spanish*/"la #máscara de calavera# otorga"}, - }); + // obscure text + Text{ "the #Skull Mask# yields", /*french*/ "le #Masque de Mort# donne", + /*spanish*/ "la #máscara de calavera# otorga" }, + }); - hintTable[DEKU_THEATER_MASK_OF_TRUTH] = HintText::Sometimes({ - //obscure text - Text{"showing a #truthful eye to the crowd# rewards", /*french*/"montrer #l'oeil de vérité à la foule# donne", /*spanish*/"#mostrarle el ojo verdadero# a una multitud brinda"}, - }, {}, - //clear text - Text{"the #Mask of Truth# yields", /*french*/"le #Masque de Vérité# donne", /*spanish*/"la #máscara de la verdad# premia"} - ); + hintTable[DEKU_THEATER_MASK_OF_TRUTH] = HintText::Sometimes( + { + // obscure text + Text{ "showing a #truthful eye to the crowd# rewards", + /*french*/ "montrer #l'oeil de vérité à la foule# donne", + /*spanish*/ "#mostrarle el ojo verdadero# a una multitud brinda" }, + }, + {}, + // clear text + Text{ "the #Mask of Truth# yields", /*french*/ "le #Masque de Vérité# donne", + /*spanish*/ "la #máscara de la verdad# premia" }); hintTable[HF_OCARINA_OF_TIME_ITEM] = HintText::Sometimes({ - //obscure text - Text{"the #treasure thrown by Princess Zelda# is", /*french*/"le trésor #laissé par la princesse# est", /*spanish*/"el #tesoro arrojado por la Princesa Zelda# se trata de"}, - }); + // obscure text + Text{ "the #treasure thrown by Princess Zelda# is", /*french*/ "le trésor #laissé par la princesse# est", + /*spanish*/ "el #tesoro arrojado por la Princesa Zelda# se trata de" }, + }); hintTable[DMT_TRADE_BROKEN_SWORD] = HintText::Sometimes({ - //obscure text - Text{"a #blinded Biggoron# entrusts", /*french*/"un #Grogoron aveuglé# confie", /*spanish*/"un #miope Biggoron# otorga"}, - }); + // obscure text + Text{ "a #blinded Biggoron# entrusts", /*french*/ "un #Grogoron aveuglé# confie", + /*spanish*/ "un #miope Biggoron# otorga" }, + }); hintTable[DMT_TRADE_EYEDROPS] = HintText::Sometimes({ - //obscure text - Text{"while you wait, #Biggoron# gives", /*french*/"pendant que tu attends, #Biggoron# donne", /*spanish*/"#Biggoron# está a la espera de otorgar"}, - }); + // obscure text + Text{ "while you wait, #Biggoron# gives", /*french*/ "pendant que tu attends, #Biggoron# donne", + /*spanish*/ "#Biggoron# está a la espera de otorgar" }, + }); hintTable[DMT_TRADE_CLAIM_CHECK] = HintText::Sometimes({ - //obscure text - Text{"#Biggoron# crafts", /*french*/"#Biggoron# fabrique", /*spanish*/"#Biggoron# forja"}, - }); + // obscure text + Text{ "#Biggoron# crafts", /*french*/ "#Biggoron# fabrique", /*spanish*/ "#Biggoron# forja" }, + }); - hintTable[KAK_50_GOLD_SKULLTULA_REWARD] = HintText::Sometimes({ - //obscure text - Text{"#50 bug badges# rewards", /*french*/"#50 écussons# donnent", /*spanish*/"#50 medallas de insectos# otorgan"}, - Text{"#50 spider souls# yields", /*french*/"#50 âmes d'arachnide# donnent", /*spanish*/"#50 almas de araña# otorgan"}, - Text{"#50 auriferous arachnids# lead to", /*french*/"#50 arachnides aurifères# donnent", /*spanish*/"#50 arácnidos auríferos# otorgan"}, - }, {}, - //clear text - Text{"slaying #50 Gold Skulltulas# reveals", /*french*/"détruire #50 Skulltulas d'or# donne", /*spanish*/"exterminar #50 skulltulas doradas# revela"} - ); + hintTable[KAK_50_GOLD_SKULLTULA_REWARD] = HintText::Sometimes( + { + // obscure text + Text{ "#50 bug badges# rewards", /*french*/ "#50 écussons# donnent", + /*spanish*/ "#50 medallas de insectos# otorgan" }, + Text{ "#50 spider souls# yields", /*french*/ "#50 âmes d'arachnide# donnent", + /*spanish*/ "#50 almas de araña# otorgan" }, + Text{ "#50 auriferous arachnids# lead to", /*french*/ "#50 arachnides aurifères# donnent", + /*spanish*/ "#50 arácnidos auríferos# otorgan" }, + }, + {}, + // clear text + Text{ "slaying #50 Gold Skulltulas# reveals", /*french*/ "détruire #50 Skulltulas d'or# donne", + /*spanish*/ "exterminar #50 skulltulas doradas# revela" }); - hintTable[KAK_40_GOLD_SKULLTULA_REWARD] = HintText::Sometimes({ - //obscure text - Text{"#40 bug badges# rewards", /*french*/"#40 écussons# donnent", /*spanish*/"#40 medallas de insectos# otorgan"}, - Text{"#40 spider souls# yields", /*french*/"#40 âmes d'arachnide# donnent", /*spanish*/"#40 almas de araña# otorgan"}, - Text{"#40 auriferous arachnids# lead to", /*french*/"#40 arachnides aurifères# donnent", /*spanish*/"#40 arácnidos auríferos# otorgan"}, - }, {}, - //clear text - Text{"slaying #40 Gold Skulltulas# reveals", /*french*/"détruire #40 Skulltulas d'or# donne", /*spanish*/"exterminar #40 skulltulas doradas# revela"} - ); + hintTable[KAK_40_GOLD_SKULLTULA_REWARD] = HintText::Sometimes( + { + // obscure text + Text{ "#40 bug badges# rewards", /*french*/ "#40 écussons# donnent", + /*spanish*/ "#40 medallas de insectos# otorgan" }, + Text{ "#40 spider souls# yields", /*french*/ "#40 âmes d'arachnide# donnent", + /*spanish*/ "#40 almas de araña# otorgan" }, + Text{ "#40 auriferous arachnids# lead to", /*french*/ "#40 arachnides aurifères# donnent", + /*spanish*/ "#40 arácnidos auríferos# otorgan" }, + }, + {}, + // clear text + Text{ "slaying #40 Gold Skulltulas# reveals", /*french*/ "détruire #40 Skulltulas d'or# donne", + /*spanish*/ "exterminar #40 skulltulas doradas# revela" }); - hintTable[KAK_30_GOLD_SKULLTULA_REWARD] = HintText::Sometimes({ - //obscure text - Text{"#30 bug badges# rewards", /*french*/"#30 écussons# donnent", /*spanish*/"#30 medallas de insectos# otorgan"}, - Text{"#30 spider souls# yields", /*french*/"#30 âmes d'arachnide# donnent", /*spanish*/"#30 almas de araña# otorgan"}, - Text{"#30 auriferous arachnids# lead to", /*french*/"#30 arachnides aurifères# donnent", /*spanish*/"#30 arácnidos auríferos# otorgan"}, - }, {}, - //clear text - Text{"slaying #30 Gold Skulltulas# reveals", /*french*/"détruire #30 Skulltulas d'or# donne", /*spanish*/"exterminar #30 skulltulas doradas# revela"} - ); + hintTable[KAK_30_GOLD_SKULLTULA_REWARD] = HintText::Sometimes( + { + // obscure text + Text{ "#30 bug badges# rewards", /*french*/ "#30 écussons# donnent", + /*spanish*/ "#30 medallas de insectos# otorgan" }, + Text{ "#30 spider souls# yields", /*french*/ "#30 âmes d'arachnide# donnent", + /*spanish*/ "#30 almas de araña# otorgan" }, + Text{ "#30 auriferous arachnids# lead to", /*french*/ "#30 arachnides aurifères# donnent", + /*spanish*/ "#30 arácnidos auríferos# otorgan" }, + }, + {}, + // clear text + Text{ "slaying #30 Gold Skulltulas# reveals", /*french*/ "détruire #30 Skulltulas d'or# donne", + /*spanish*/ "exterminar #30 skulltulas doradas# revela" }); - hintTable[KAK_20_GOLD_SKULLTULA_REWARD] = HintText::Sometimes({ - //obscure text - Text{"#20 bug badges# rewards", /*french*/"#20 écussons# donnent", /*spanish*/"#20 medallas de insectos# otorgan"}, - Text{"#20 spider souls# yields", /*french*/"#20 âmes d'arachnide# donnent", /*spanish*/"#20 almas de araña# otorgan"}, - Text{"#20 auriferous arachnids# lead to", /*french*/"#20 arachnides aurifères# donnent", /*spanish*/"#20 arácnidos auríferos# otorgan"}, - }, {}, - //clear text - Text{"slaying #20 Gold Skulltulas# reveals", /*french*/"détruire #20 Skulltulas d'or# donne", /*spanish*/"exterminar #20 skulltulas doradas# revela"} - ); + hintTable[KAK_20_GOLD_SKULLTULA_REWARD] = HintText::Sometimes( + { + // obscure text + Text{ "#20 bug badges# rewards", /*french*/ "#20 écussons# donnent", + /*spanish*/ "#20 medallas de insectos# otorgan" }, + Text{ "#20 spider souls# yields", /*french*/ "#20 âmes d'arachnide# donnent", + /*spanish*/ "#20 almas de araña# otorgan" }, + Text{ "#20 auriferous arachnids# lead to", /*french*/ "#20 arachnides aurifères# donnent", + /*spanish*/ "#20 arácnidos auríferos# otorgan" }, + }, + {}, + // clear text + Text{ "slaying #20 Gold Skulltulas# reveals", /*french*/ "détruire #20 Skulltulas d'or# donne", + /*spanish*/ "exterminar #20 skulltulas doradas# revela" }); - hintTable[KAK_ANJU_AS_CHILD] = HintText::Sometimes({ - //obscure text - Text{"#wrangling roosters# rewards", /*french*/"#plumer des poulets# donne", /*spanish*/"#atrapar a las gallinas# premia"}, - Text{"#chucking chickens# gifts", /*french*/"#lancer des poulets# donne", /*spanish*/"#reunir a unos emplumados# premia"}, - }, {}, - //clear text - Text{"#collecting cuccos# rewards", /*french*/"#rapporter les Cocottes# donne", /*spanish*/"#hacerte con todos los cucos# premia"} - ); + hintTable[KAK_ANJU_AS_CHILD] = HintText::Sometimes( + { + // obscure text + Text{ "#wrangling roosters# rewards", /*french*/ "#plumer des poulets# donne", + /*spanish*/ "#atrapar a las gallinas# premia" }, + Text{ "#chucking chickens# gifts", /*french*/ "#lancer des poulets# donne", + /*spanish*/ "#reunir a unos emplumados# premia" }, + }, + {}, + // clear text + Text{ "#collecting cuccos# rewards", /*french*/ "#rapporter les Cocottes# donne", + /*spanish*/ "#hacerte con todos los cucos# premia" }); hintTable[KAK_TRADE_POCKET_CUCCO] = HintText::Sometimes({ - //obscure text - Text{"an adult's #happy Cucco# awards", /*french*/"un adulte avec une #poulette joyeuse# obtient", /*spanish*/"un #alegre cuco# en la madurez otorga"}, - }); + // obscure text + Text{ "an adult's #happy Cucco# awards", /*french*/ "un adulte avec une #poulette joyeuse# obtient", + /*spanish*/ "un #alegre cuco# en la madurez otorga" }, + }); hintTable[KAK_TRADE_ODD_MUSHROOM] = HintText::Sometimes({ - //obscure text - Text{"the #potion shop lady# entrusts", /*french*/"la #gribiche du magasin de potion# confie", /*spanish*/"la #señora de la tienda de pociones# otorga"}, - }); + // obscure text + Text{ "the #potion shop lady# entrusts", /*french*/ "la #gribiche du magasin de potion# confie", + /*spanish*/ "la #señora de la tienda de pociones# otorga" }, + }); - hintTable[GC_DARUNIAS_JOY] = HintText::Sometimes({ - //obscure text - Text{"a #groovin' goron# gifts", /*french*/"#le Goron joyeux# donne", /*spanish*/"#un goron marchoso# otorga"}, - }, {}, - //clear text - Text{"#Darunia's dance# leads to", /*french*/"#la dance de Darunia# donne", /*spanish*/"#el baile de Darunia# conduce a"} - ); + hintTable[GC_DARUNIAS_JOY] = HintText::Sometimes( + { + // obscure text + Text{ "a #groovin' goron# gifts", /*french*/ "#le Goron joyeux# donne", + /*spanish*/ "#un goron marchoso# otorga" }, + }, + {}, + // clear text + Text{ "#Darunia's dance# leads to", /*french*/ "#la dance de Darunia# donne", + /*spanish*/ "#el baile de Darunia# conduce a" }); hintTable[LW_SKULL_KID] = HintText::Sometimes({ - //obscure text - Text{"the #Skull Kid# grants", /*french*/"le #Skull Kid# donne", /*spanish*/"#Skull Kid# otorga"}, - }); + // obscure text + Text{ "the #Skull Kid# grants", /*french*/ "le #Skull Kid# donne", /*spanish*/ "#Skull Kid# otorga" }, + }); hintTable[LW_TRADE_COJIRO] = HintText::Sometimes({ - //obscure text - Text{"returning a #special Cucco# awards", /*french*/"ramener une #poulette précieuse# donne", /*spanish*/"quien devuelva un #cuco especial# encontrará"}, - }); + // obscure text + Text{ "returning a #special Cucco# awards", /*french*/ "ramener une #poulette précieuse# donne", + /*spanish*/ "quien devuelva un #cuco especial# encontrará" }, + }); hintTable[LW_TRADE_ODD_POTION] = HintText::Sometimes({ - //obscure text - Text{"a #Kokiri girl in the woods# leaves", /*french*/"la #fillette Kokiri dans les bois# laisse", /*spanish*/"una #chica kokiri del bosque# otorga"}, - }); + // obscure text + Text{ "a #Kokiri girl in the woods# leaves", /*french*/ "la #fillette Kokiri dans les bois# laisse", + /*spanish*/ "una #chica kokiri del bosque# otorga" }, + }); - hintTable[LH_SUN] = HintText::Sometimes({ - //obscure text - Text{"staring into #the sun# grants", /*french*/"regarder #le soleil# donne", /*spanish*/"#mirar al sol# revela"}, - }, {}, - //clear text - Text{"shooting #the sun# grants", /*french*/"tirer une flèche dans #sur le soleil# donne", /*spanish*/"#disparar al sol# revela"} - ); + hintTable[LH_SUN] = HintText::Sometimes( + { + // obscure text + Text{ "staring into #the sun# grants", /*french*/ "regarder #le soleil# donne", + /*spanish*/ "#mirar al sol# revela" }, + }, + {}, + // clear text + Text{ "shooting #the sun# grants", /*french*/ "tirer une flèche dans #sur le soleil# donne", + /*spanish*/ "#disparar al sol# revela" }); hintTable[LH_TRADE_FROG] = HintText::Sometimes({ - //obscure text - Text{"#Lake Hylia's scientist# hurriedly entrusts", /*french*/"le #scientifique du lac# confie rapidement", /*spanish*/"el #científico del Lago Hylia# otorga con prisa"}, - }); + // obscure text + Text{ "#Lake Hylia's scientist# hurriedly entrusts", /*french*/ "le #scientifique du lac# confie rapidement", + /*spanish*/ "el #científico del Lago Hylia# otorga con prisa" }, + }); - hintTable[MARKET_TREASURE_CHEST_GAME_REWARD] = HintText::Sometimes({ - //obscure text - Text{"#gambling# grants", /*french*/"#parier# donne", /*spanish*/"#los juegos de azar# revelan"}, - Text{"there is a #1/32 chance# to win", /*french*/"être #le gagnant parmi 32# donne", /*spanish*/"hay una #probabilidad de 1/32# de ganar"}, - }, {}, - //clear text - Text{"the #treasure chest game# grants", /*french*/"la #Chasse-aux-Trésors# donne", /*spanish*/"#el Cofre del Tesoro# premia"} - ); + hintTable[MARKET_TREASURE_CHEST_GAME_REWARD] = HintText::Sometimes( + { + // obscure text + Text{ "#gambling# grants", /*french*/ "#parier# donne", /*spanish*/ "#los juegos de azar# revelan" }, + Text{ "there is a #1/32 chance# to win", /*french*/ "être #le gagnant parmi 32# donne", + /*spanish*/ "hay una #probabilidad de 1/32# de ganar" }, + }, + {}, + // clear text + Text{ "the #treasure chest game# grants", /*french*/ "la #Chasse-aux-Trésors# donne", + /*spanish*/ "#el Cofre del Tesoro# premia" }); - hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_1] = HintText::Sometimes({ - //obscure text - Text{"#gambling once# grants", /*french*/"#parier une fois# donne", /*spanish*/"#apostar solo una vez# revelará"}, - Text{"the #first or second game chest# contains", /*french*/"le #premier ou deuxième coffre à jeu# contient", /*spanish*/"#el primer o segundo cofre del azar# revela"}, - }, {}, - //clear text - Text{"the #first locked room# in the chest game contains", /*french*/"la #première salle# de la Chasse-aux-Trésors contient", /*spanish*/"#en la primera sala del Cofre del Tesoro# aguarda"} - ); + hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_1] = HintText::Sometimes( + { + // obscure text + Text{ "#gambling once# grants", /*french*/ "#parier une fois# donne", + /*spanish*/ "#apostar solo una vez# revelará" }, + Text{ "the #first or second game chest# contains", + /*french*/ "le #premier ou deuxième coffre à jeu# contient", + /*spanish*/ "#el primer o segundo cofre del azar# revela" }, + }, + {}, + // clear text + Text{ "the #first locked room# in the chest game contains", + /*french*/ "la #première salle# de la Chasse-aux-Trésors contient", + /*spanish*/ "#en la primera sala del Cofre del Tesoro# aguarda" }); - hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_2] = HintText::Sometimes({ - //obscure text - Text{"#gambling twice# grants", /*french*/"#parier deux fois# donne", /*spanish*/"#apostar dos veces# revelará"}, - Text{"the #third or fourth game chest# contains", /*french*/"le #troisième ou quatrième coffre à jeu# contient", /*spanish*/"#el tercer o cuarto cofre del azar# revela"}, - }, {}, - //clear text - Text{"the #second locked room# in the chest game contains", /*french*/"la #deuxième salle# de la Chasse-aux-Trésors contient", /*spanish*/"#en la segunda sala del Cofre del Tesoro# aguarda"} - ); + hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_2] = HintText::Sometimes( + { + // obscure text + Text{ "#gambling twice# grants", /*french*/ "#parier deux fois# donne", + /*spanish*/ "#apostar dos veces# revelará" }, + Text{ "the #third or fourth game chest# contains", + /*french*/ "le #troisième ou quatrième coffre à jeu# contient", + /*spanish*/ "#el tercer o cuarto cofre del azar# revela" }, + }, + {}, + // clear text + Text{ "the #second locked room# in the chest game contains", + /*french*/ "la #deuxième salle# de la Chasse-aux-Trésors contient", + /*spanish*/ "#en la segunda sala del Cofre del Tesoro# aguarda" }); - hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_3] = HintText::Sometimes({ - //obscure text - Text{"#gambling 3 times# grants", /*french*/"#parier trois fois# donne", /*spanish*/"#apostar tres veces# revelará"}, - Text{"the #fifth or sixth game chest# contains", /*french*/"le #cinquième ou sixième coffre à jeu# contient", /*spanish*/"#el quinto o sexto cofre del azar# revela"}, - }, {}, - //clear text - Text{"the #third locked room# in the chest game contains", /*french*/"la #troisième salle# de la Chasse-aux-Trésors contient", /*spanish*/"#en la tercera sala del Cofre del Tesoro# aguarda"} - ); + hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_3] = HintText::Sometimes( + { + // obscure text + Text{ "#gambling 3 times# grants", /*french*/ "#parier trois fois# donne", + /*spanish*/ "#apostar tres veces# revelará" }, + Text{ "the #fifth or sixth game chest# contains", + /*french*/ "le #cinquième ou sixième coffre à jeu# contient", + /*spanish*/ "#el quinto o sexto cofre del azar# revela" }, + }, + {}, + // clear text + Text{ "the #third locked room# in the chest game contains", + /*french*/ "la #troisième salle# de la Chasse-aux-Trésors contient", + /*spanish*/ "#en la tercera sala del Cofre del Tesoro# aguarda" }); - hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_4] = HintText::Sometimes({ - //obscure text - Text{"#gambling 4 times# grants", /*french*/"#parier quatre fois# donne", /*spanish*/"#apostar cuatro veces# revelará"}, - Text{"the #seventh or eighth game chest# contains", /*french*/"le #septième ou huitième coffre à jeu# contient", /*spanish*/"#el séptimo u octavo cofre del azar# revela"}, - }, {}, - //clear text - Text{"the #fourth locked room# in the chest game contains", /*french*/"la #quatrième salle# de la Chasse-aux-Trésors contient", /*spanish*/"#en la cuarta sala del Cofre del Tesoro# aguarda"} - ); + hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_4] = HintText::Sometimes( + { + // obscure text + Text{ "#gambling 4 times# grants", /*french*/ "#parier quatre fois# donne", + /*spanish*/ "#apostar cuatro veces# revelará" }, + Text{ "the #seventh or eighth game chest# contains", + /*french*/ "le #septième ou huitième coffre à jeu# contient", + /*spanish*/ "#el séptimo u octavo cofre del azar# revela" }, + }, + {}, + // clear text + Text{ "the #fourth locked room# in the chest game contains", + /*french*/ "la #quatrième salle# de la Chasse-aux-Trésors contient", + /*spanish*/ "#en la cuarta sala del Cofre del Tesoro# aguarda" }); - hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_5] = HintText::Sometimes({ - //obscure text - Text{"#gambling 5 times# grants", /*french*/"#parier cinq fois# donne", /*spanish*/"#apostar cinco veces# revelará"}, - Text{"the #ninth or tenth game chest# contains", /*french*/"le #neuvième ou dixième coffre à jeu# contient", /*spanish*/"#el noveno o décimo cofre del azar# revela"}, - }, {}, - //clear text - Text{"the #fifth locked room# in the chest game contains", /*french*/"la #cinquième salle# de la Chasse-aux-Trésors contient", /*spanish*/"#en la quinta sala del Cofre del Tesoro# aguarda"} - ); + hintTable[MARKET_TREASURE_CHEST_GAME_ITEM_5] = HintText::Sometimes( + { + // obscure text + Text{ "#gambling 5 times# grants", /*french*/ "#parier cinq fois# donne", + /*spanish*/ "#apostar cinco veces# revelará" }, + Text{ "the #ninth or tenth game chest# contains", + /*french*/ "le #neuvième ou dixième coffre à jeu# contient", + /*spanish*/ "#el noveno o décimo cofre del azar# revela" }, + }, + {}, + // clear text + Text{ "the #fifth locked room# in the chest game contains", + /*french*/ "la #cinquième salle# de la Chasse-aux-Trésors contient", + /*spanish*/ "#en la quinta sala del Cofre del Tesoro# aguarda" }); - hintTable[GF_HBA_1500_POINTS] = HintText::Sometimes({ - //obscure text - Text{"mastery of #horseback archery# grants", /*french*/"maîtriser l'#archerie équestre# donne", /*spanish*/"dominar el #tiro con arco a caballo# premia con"}, - }, {}, - //clear text - Text{"scoring 1500 in #horseback archery# grants", /*french*/"obtenir 1500 points dans l'#archerie équestre# donne", /*spanish*/"conseguir 1500 puntos en el #tiro con arco a caballo# premia"} - ); + hintTable[GF_HBA_1500_POINTS] = HintText::Sometimes( + { + // obscure text + Text{ "mastery of #horseback archery# grants", /*french*/ "maîtriser l'#archerie équestre# donne", + /*spanish*/ "dominar el #tiro con arco a caballo# premia con" }, + }, + {}, + // clear text + Text{ "scoring 1500 in #horseback archery# grants", + /*french*/ "obtenir 1500 points dans l'#archerie équestre# donne", + /*spanish*/ "conseguir 1500 puntos en el #tiro con arco a caballo# premia" }); hintTable[GRAVEYARD_HEART_PIECE_GRAVE_CHEST] = HintText::Sometimes({ - //obscure text - Text{"playing #Sun's Song# in a grave spawns", /*french*/"jouer le #chant du soleil# dans un tombeau donne", /*spanish*/"#tocar la Canción del Sol# en una cripta conduce a"}, - }); + // obscure text + Text{ "playing #Sun's Song# in a grave spawns", /*french*/ "jouer le #chant du soleil# dans un tombeau donne", + /*spanish*/ "#tocar la Canción del Sol# en una cripta conduce a" }, + }); hintTable[GC_MAZE_LEFT_CHEST] = HintText::Sometimes({ - //obscure text - Text{"in #Goron City# the hammer unlocks", /*french*/"dans le #village Goron#, le marteau donne accès à", /*spanish*/"en la #Ciudad Goron# el martillo desbloquea"}, - }); + // obscure text + Text{ "in #Goron City# the hammer unlocks", /*french*/ "dans le #village Goron#, le marteau donne accès à", + /*spanish*/ "en la #Ciudad Goron# el martillo desbloquea" }, + }); hintTable[GV_CHEST] = HintText::Sometimes({ - //obscure text - Text{"in #Gerudo Valley# the hammer unlocks", /*french*/"dans la #Vallée Gerudo#, le marteau donne accès à", /*spanish*/"en el #Valle Gerudo# el martillo desbloquea"}, - }); + // obscure text + Text{ "in #Gerudo Valley# the hammer unlocks", /*french*/ "dans la #Vallée Gerudo#, le marteau donne accès à", + /*spanish*/ "en el #Valle Gerudo# el martillo desbloquea" }, + }); hintTable[GV_TRADE_SAW] = HintText::Sometimes({ - //obscure text - Text{"the #boss of the carpenters# leaves", /*french*/"le #patron des ouvriers# laisse", /*spanish*/"el #capataz de los carpinteros# otorga"}, - }); + // obscure text + Text{ "the #boss of the carpenters# leaves", /*french*/ "le #patron des ouvriers# laisse", + /*spanish*/ "el #capataz de los carpinteros# otorga" }, + }); hintTable[GV_COW] = HintText::Sometimes({ - //obscure text - Text{"a #cow in Gerudo Valley# gifts", /*french*/"la #vache de la Vallée Gerudo# donne", /*spanish*/"una #vaca del Valle Gerudo# brinda"}, - }); + // obscure text + Text{ "a #cow in Gerudo Valley# gifts", /*french*/ "la #vache de la Vallée Gerudo# donne", + /*spanish*/ "una #vaca del Valle Gerudo# brinda" }, + }); hintTable[HC_GS_STORMS_GROTTO] = HintText::Sometimes({ - //obscure text - Text{"a #spider behind a muddy wall# in a grotto holds", /*french*/"l'#araignée derrière un mur de boue# dans une grotte donne", /*spanish*/"una #Skulltula tras la agrietada pared# de una cueva otorga"}, - }); + // obscure text + Text{ "a #spider behind a muddy wall# in a grotto holds", + /*french*/ "l'#araignée derrière un mur de boue# dans une grotte donne", + /*spanish*/ "una #Skulltula tras la agrietada pared# de una cueva otorga" }, + }); hintTable[HF_GS_COW_GROTTO] = HintText::Sometimes({ - //obscure text - Text{"a #spider behind webs# in a grotto holds", /*french*/"l'#araignée derrière une toile# dans une grotte donne", /*spanish*/"una #Skulltula tras la telaraña# de una cueva otorga"}, - }); + // obscure text + Text{ "a #spider behind webs# in a grotto holds", + /*french*/ "l'#araignée derrière une toile# dans une grotte donne", + /*spanish*/ "una #Skulltula tras la telaraña# de una cueva otorga" }, + }); - hintTable[HF_COW_GROTTO_COW] = HintText::Sometimes({ - //obscure text - Text{"the #cobwebbed cow# gifts", /*french*/"la #vache prisonnière d'araignées# donne", /*spanish*/"una #vaca tras una telaraña# brinda"}, - }, {}, - //clear text - Text{"a #cow behind webs# in a grotto gifts", /*french*/"la #vache derrière les toiles# d'une grotte donne", /*spanish*/"una #vaca tras la telaraña# de una cueva brinda"} - ); + hintTable[HF_COW_GROTTO_COW] = HintText::Sometimes( + { + // obscure text + Text{ "the #cobwebbed cow# gifts", /*french*/ "la #vache prisonnière d'araignées# donne", + /*spanish*/ "una #vaca tras una telaraña# brinda" }, + }, + {}, + // clear text + Text{ "a #cow behind webs# in a grotto gifts", /*french*/ "la #vache derrière les toiles# d'une grotte donne", + /*spanish*/ "una #vaca tras la telaraña# de una cueva brinda" }); hintTable[ZF_GS_HIDDEN_CAVE] = HintText::Sometimes({ - //obscure text - Text{"a spider high #above the icy waters# holds", /*french*/"l'araignée #en haut des eaux glacées# donne", /*spanish*/"una Skulltula en lo #alto de las congeladas aguas# otorga"}, - }); + // obscure text + Text{ "a spider high #above the icy waters# holds", /*french*/ "l'araignée #en haut des eaux glacées# donne", + /*spanish*/ "una Skulltula en lo #alto de las congeladas aguas# otorga" }, + }); hintTable[WASTELAND_CHEST] = HintText::Sometimes({ - //obscure text - Text{"#deep in the wasteland# is", /*french*/"#loin dans le désert# gît", /*spanish*/"en lo #profundo del desierto encantado# yace"}, - Text{"beneath #the sands#, flames reveal", /*french*/"#sous le désert#, les flammes font apparaître", /*spanish*/"tras las #arenas# unas llamas revelan"}, - }); + // obscure text + Text{ "#deep in the wasteland# is", /*french*/ "#loin dans le désert# gît", + /*spanish*/ "en lo #profundo del desierto encantado# yace" }, + Text{ "beneath #the sands#, flames reveal", /*french*/ "#sous le désert#, les flammes font apparaître", + /*spanish*/ "tras las #arenas# unas llamas revelan" }, + }); hintTable[WASTELAND_GS] = HintText::Sometimes({ - //obscure text - Text{"a #spider in the wasteland# holds", /*french*/"#l'araignée dans le désert# donne", /*spanish*/"una #Skulltula del desierto encantado# otorga"}, - }); + // obscure text + Text{ "a #spider in the wasteland# holds", /*french*/ "#l'araignée dans le désert# donne", + /*spanish*/ "una #Skulltula del desierto encantado# otorga" }, + }); hintTable[GRAVEYARD_COMPOSERS_GRAVE_CHEST] = HintText::Sometimes({ - //obscure text - Text{"#flames in the Composers' Grave# reveal", /*french*/"#les flammes dans le tombeau des compositeurs# cachent", /*spanish*/"#las llamas del Panteón Real# revelan"}, - Text{"the #Composer Brothers hid#", /*french*/"#les Frères compositeurs on caché#", /*spanish*/"los #hermanos compositores esconden#"}, - }); + // obscure text + Text{ "#flames in the Composers' Grave# reveal", + /*french*/ "#les flammes dans le tombeau des compositeurs# cachent", + /*spanish*/ "#las llamas del Panteón Real# revelan" }, + Text{ "the #Composer Brothers hid#", /*french*/ "#les Frères compositeurs on caché#", + /*spanish*/ "los #hermanos compositores esconden#" }, + }); hintTable[ZF_BOTTOM_FREESTANDING_POH] = HintText::Sometimes({ - //obscure text - Text{"#under the icy waters# lies", /*french*/"#sous les eaux glacées# se cache", /*spanish*/"#bajo las congeladas aguas# yace"}, - }); + // obscure text + Text{ "#under the icy waters# lies", /*french*/ "#sous les eaux glacées# se cache", + /*spanish*/ "#bajo las congeladas aguas# yace" }, + }); hintTable[GC_POT_FREESTANDING_POH] = HintText::Sometimes({ - //obscure text - Text{"spinning #Goron pottery# contains", /*french*/"la #potterie Goron# contient", /*spanish*/"una #cerámica goron# contiene"}, - }); + // obscure text + Text{ "spinning #Goron pottery# contains", /*french*/ "la #potterie Goron# contient", + /*spanish*/ "una #cerámica goron# contiene" }, + }); - hintTable[ZD_KING_ZORA_THAWED] = HintText::Sometimes({ - //obscure text - Text{"a #defrosted dignitary# gifts", /*french*/"le #monarque libéré# donne", /*spanish*/"una #liberación monárquica# brinda"}, - }, {}, - //clear text - Text{"unfreezing #King Zora# grants", /*french*/"dégeler # le Roi Zora# donne", /*spanish*/"#descongelar al Rey Zora# conduce a"} - ); + hintTable[ZD_KING_ZORA_THAWED] = HintText::Sometimes( + { + // obscure text + Text{ "a #defrosted dignitary# gifts", /*french*/ "le #monarque libéré# donne", + /*spanish*/ "una #liberación monárquica# brinda" }, + }, + {}, + // clear text + Text{ "unfreezing #King Zora# grants", /*french*/ "dégeler # le Roi Zora# donne", + /*spanish*/ "#descongelar al Rey Zora# conduce a" }); hintTable[ZD_TRADE_PRESCRIPTION] = HintText::Sometimes({ - //obscure text - Text{"#King Zora# hurriedly entrusts", /*french*/"le #roi Zora# confie rapidement", /*spanish*/"el #Rey Zora# otorga con prisa"}, - }); + // obscure text + Text{ "#King Zora# hurriedly entrusts", /*french*/ "le #roi Zora# confie rapidement", + /*spanish*/ "el #Rey Zora# otorga con prisa" }, + }); hintTable[DMC_DEKU_SCRUB] = HintText::Sometimes({ - //obscure text - Text{"a single #scrub in the crater# sells", /*french*/"la #peste Mojo dans le cratère# vend", /*spanish*/"un solitario #deku del cráter# vende"}, - }); + // obscure text + Text{ "a single #scrub in the crater# sells", /*french*/ "la #peste Mojo dans le cratère# vend", + /*spanish*/ "un solitario #deku del cráter# vende" }, + }); hintTable[DMC_GS_CRATE] = HintText::Sometimes({ - //obscure text - Text{"a spider under a #crate in the crater# holds", /*french*/"la Skulltula dans une #boîte volcanique# a", /*spanish*/"una Skulltula bajo una #caja del cráter# otorga"}, - }); + // obscure text + Text{ "a spider under a #crate in the crater# holds", /*french*/ "la Skulltula dans une #boîte volcanique# a", + /*spanish*/ "una Skulltula bajo una #caja del cráter# otorga" }, + }); + hintTable[DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "a #temporal stone within a tree# contains", /*french*/ "la #pierre bleue dans un arbre# mène à", + /*spanish*/ "un #bloque temporal de un árbol# contiene" }, + }, + {}, + // clear text + Text{ "a #temporal stone within the Deku Tree# contains", + /*french*/ "la #pierre temporelle dans l'Arbre Mojo# cache", + /*spanish*/ "un #bloque temporal del Gran Árbol Deku# contiene" }); - hintTable[DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST] = HintText::Sometimes({ - //obscure text - Text{"a #temporal stone within a tree# contains", /*french*/"la #pierre bleue dans un arbre# mène à", /*spanish*/"un #bloque temporal de un árbol# contiene"}, - }, {}, - //clear text - Text{"a #temporal stone within the Deku Tree# contains", /*french*/"la #pierre temporelle dans l'Arbre Mojo# cache", /*spanish*/"un #bloque temporal del Gran Árbol Deku# contiene"} - ); + hintTable[DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM] = HintText::Sometimes( + { + // obscure text + Text{ "a #spider on a ceiling in a tree# holds", /*french*/ "l'#araignée haut-perchée dans un arbre# a", + /*spanish*/ "una #Skulltula en el techo de un árbol# otorga" }, + }, + {}, + // clear text + Text{ "a #spider on a ceiling in the Deku Tree# holds", + /*french*/ "la#Skulltula dans le Cimetière de l'Arbre Mojo# a", + /*spanish*/ "una #Skulltula en el techo del Gran Árbol Deku# otorga" }); - hintTable[DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM] = HintText::Sometimes({ - //obscure text - Text{"a #spider on a ceiling in a tree# holds", /*french*/"l'#araignée haut-perchée dans un arbre# a", /*spanish*/"una #Skulltula en el techo de un árbol# otorga"}, - }, {}, - //clear text - Text{"a #spider on a ceiling in the Deku Tree# holds", /*french*/"la#Skulltula dans le Cimetière de l'Arbre Mojo# a", /*spanish*/"una #Skulltula en el techo del Gran Árbol Deku# otorga"} - ); + hintTable[DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM] = HintText::Sometimes( + { + // obscure text + Text{ "a spider under #temporal stones in a cavern# holds", + /*french*/ "l'araignée sous #une pierre bleue dans une caverne# a", + /*spanish*/ "una Skulltula bajo #bloques temporales de una cueva# otorga" }, + }, + {}, + // clear text + Text{ "a spider under #temporal stones in Dodongo's Cavern# holds", + /*french*/ "la Skulltula sous #la pierre temporelle dans la Caverne Dodongo# a", + /*spanish*/ "una Skulltula bajo #bloques temporales de la Cueva de los Dodongos# otorga" }); - hintTable[DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM] = HintText::Sometimes({ - //obscure text - Text{"a spider under #temporal stones in a cavern# holds", /*french*/"l'araignée sous #une pierre bleue dans une caverne# a", /*spanish*/"una Skulltula bajo #bloques temporales de una cueva# otorga"}, - }, {}, - //clear text - Text{"a spider under #temporal stones in Dodongo's Cavern# holds", /*french*/"la Skulltula sous #la pierre temporelle dans la Caverne Dodongo# a", /*spanish*/"una Skulltula bajo #bloques temporales de la Cueva de los Dodongos# otorga"} - ); + hintTable[JABU_JABUS_BELLY_BOOMERANG_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "a school of #stingers swallowed by a deity# guard", + /*french*/ "les #raies dans un gardien# protègent", + /*spanish*/ "unos de #stingers engullidos por cierta deidad# guardan" }, + }, + {}, + // clear text + Text{ "a school of #stingers swallowed by Jabu-Jabu# guard", /*french*/ "les #raies dans Jabu-Jabu# protègent", + /*spanish*/ "unos #stingers engullidos por Jabu-Jabu# guardan" }); - hintTable[JABU_JABUS_BELLY_BOOMERANG_CHEST] = HintText::Sometimes({ - //obscure text - Text{"a school of #stingers swallowed by a deity# guard", /*french*/"les #raies dans un gardien# protègent", /*spanish*/"unos de #stingers engullidos por cierta deidad# guardan"}, - }, {}, - //clear text - Text{"a school of #stingers swallowed by Jabu-Jabu# guard", /*french*/"les #raies dans Jabu-Jabu# protègent", /*spanish*/"unos #stingers engullidos por Jabu-Jabu# guardan"} - ); + hintTable[JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM] = HintText::Sometimes( + { + // obscure text + Text{ "a spider surrounded by #shadows in the belly of a deity# holds", + /*french*/ "l'araignée entourée d'#ombres dans le ventre du gardien# possède", + /*spanish*/ "una Skulltula rodeada de #sombras en la tripa de cierta diedad# otorga" }, + }, + {}, + // clear text + Text{ "a spider surrounded by #shadows in Jabu-Jabu's Belly# holds", + /*french*/ "la Skulltula entourée d'#ombres dans Jabu-Jabu# possède", + /*spanish*/ "una Skulltula rodeada de #sombras en la Tripa de Jabu-Jabu# otorga" }); - hintTable[JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM] = HintText::Sometimes({ - //obscure text - Text{"a spider surrounded by #shadows in the belly of a deity# holds", /*french*/"l'araignée entourée d'#ombres dans le ventre du gardien# possède", /*spanish*/"una Skulltula rodeada de #sombras en la tripa de cierta diedad# otorga"}, - }, {}, - //clear text - Text{"a spider surrounded by #shadows in Jabu-Jabu's Belly# holds", /*french*/"la Skulltula entourée d'#ombres dans Jabu-Jabu# possède", /*spanish*/"una Skulltula rodeada de #sombras en la Tripa de Jabu-Jabu# otorga"} - ); + hintTable[JABU_JABUS_BELLY_MQ_COW] = HintText::Sometimes( + { + // obscure text + Text{ "a #cow swallowed by a deity# gifts", /*french*/ "la #vache dans le gardien# donne", + /*spanish*/ "una #vaca engullida por cierta deidad# brinda" }, + }, + {}, + // clear text + Text{ "a #cow swallowed by Jabu-Jabu# gifts", /*french*/ "la #vache avallée par Jabu-Jabu# donne", + /*spanish*/ "una #vaca engullida por Jabu-Jabu# brinda" }); - hintTable[JABU_JABUS_BELLY_MQ_COW] = HintText::Sometimes({ - //obscure text - Text{"a #cow swallowed by a deity# gifts", /*french*/"la #vache dans le gardien# donne", /*spanish*/"una #vaca engullida por cierta deidad# brinda"}, - }, {}, - //clear text - Text{"a #cow swallowed by Jabu-Jabu# gifts", /*french*/"la #vache avallée par Jabu-Jabu# donne", /*spanish*/"una #vaca engullida por Jabu-Jabu# brinda"} - ); + hintTable[FIRE_TEMPLE_SCARECROW_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "a #scarecrow atop the volcano# hides", /*french*/ "l'#épouvantail au sommet d'un volcan# donne", + /*spanish*/ "un #espantapájaros en lo alto del volcán# esconde" }, + }, + {}, + // clear text + Text{ "#Pierre atop the Fire Temple# hides", /*french*/ "#Pierre au sommet du Temple du Feu# donne", + /*spanish*/ "#Pierre en lo alto del Templo del Fuego# esconde" }); - hintTable[FIRE_TEMPLE_SCARECROW_CHEST] = HintText::Sometimes({ - //obscure text - Text{"a #scarecrow atop the volcano# hides", /*french*/"l'#épouvantail au sommet d'un volcan# donne", /*spanish*/"un #espantapájaros en lo alto del volcán# esconde"}, - }, {}, - //clear text - Text{"#Pierre atop the Fire Temple# hides", /*french*/"#Pierre au sommet du Temple du Feu# donne", /*spanish*/"#Pierre en lo alto del Templo del Fuego# esconde"} - ); + hintTable[FIRE_TEMPLE_MEGATON_HAMMER_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "the #Flare Dancer atop the volcano# guards a chest containing", + /*french*/ "le #danseur au sommet du volcan# protège", + /*spanish*/ "el #Bailafuego en lo alto del volcán# otorga" }, + }, + {}, + // clear text + Text{ "the #Flare Dancer atop the Fire Temple# guards a chest containing", + /*french*/ "le #Danse-Flamme au sommet du Temple du Feu# protège", + /*spanish*/ "el #Bailaguego en lo alto del Templo del Fuego# otorga" }); - hintTable[FIRE_TEMPLE_MEGATON_HAMMER_CHEST] = HintText::Sometimes({ - //obscure text - Text{"the #Flare Dancer atop the volcano# guards a chest containing", /*french*/"le #danseur au sommet du volcan# protège", /*spanish*/"el #Bailafuego en lo alto del volcán# otorga"}, - }, {}, - //clear text - Text{"the #Flare Dancer atop the Fire Temple# guards a chest containing", /*french*/"le #Danse-Flamme au sommet du Temple du Feu# protège", /*spanish*/"el #Bailaguego en lo alto del Templo del Fuego# otorga"} - ); + hintTable[FIRE_TEMPLE_MQ_CHEST_ON_FIRE] = HintText::Sometimes( + { + // obscure text + Text{ "the #Flare Dancer atop the volcano# guards a chest containing", + /*french*/ "le #danseur au sommet du volcan# protège", + /*spanish*/ "el #Bailafuego en lo alto del volcán# otorga" }, + }, + {}, + // clear text + Text{ "the #Flare Dancer atop the Fire Temple# guards a chest containing", + /*french*/ "le #Danse-Flamme au sommet du Temple du Feu# protège", + /*spanish*/ "el #Bailafuego en lo alto del Templo del Fuego# otorga" }); - hintTable[FIRE_TEMPLE_MQ_CHEST_ON_FIRE] = HintText::Sometimes({ - //obscure text - Text{"the #Flare Dancer atop the volcano# guards a chest containing", /*french*/"le #danseur au sommet du volcan# protège", /*spanish*/"el #Bailafuego en lo alto del volcán# otorga"}, - }, {}, - //clear text - Text{"the #Flare Dancer atop the Fire Temple# guards a chest containing", /*french*/"le #Danse-Flamme au sommet du Temple du Feu# protège", /*spanish*/"el #Bailafuego en lo alto del Templo del Fuego# otorga"} - ); + hintTable[FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE] = HintText::Sometimes( + { + // obscure text + Text{ "a #spider under a block in the volcano# holds", + /*french*/ "l'#araignée sous un bloc dans le volcan# a", + /*spanish*/ "una #Skulltula bajo el bloque de un volcán# otorga" }, + }, + {}, + // clear text + Text{ "a #spider under a block in the Fire Temple# holds", + /*french*/ "une #Skulltula sous un bloc dans le Temple du Feu# a", + /*spanish*/ "una #Skulltula bajo un bloque del Templo del Fuego# otorga" }); - hintTable[FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE] = HintText::Sometimes({ - //obscure text - Text{"a #spider under a block in the volcano# holds", /*french*/"l'#araignée sous un bloc dans le volcan# a", /*spanish*/"una #Skulltula bajo el bloque de un volcán# otorga"}, - }, {}, - //clear text - Text{"a #spider under a block in the Fire Temple# holds", /*french*/"une #Skulltula sous un bloc dans le Temple du Feu# a", /*spanish*/"una #Skulltula bajo un bloque del Templo del Fuego# otorga"} - ); + hintTable[WATER_TEMPLE_RIVER_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "beyond the #river under the lake# waits", /*french*/ "au delà de #la rivière sous le lac# se cache", + /*spanish*/ "tras el #río bajo el lago# yace" }, + }, + {}, + // clear text + Text{ "beyond the #river in the Water Temple# waits", + /*french*/ "au delà de #la rivière dans le Temple de l'Eau# se cache", + /*spanish*/ "tras el #río del Templo del Agua# yace" }); - hintTable[WATER_TEMPLE_RIVER_CHEST] = HintText::Sometimes({ - //obscure text - Text{"beyond the #river under the lake# waits", /*french*/"au delà de #la rivière sous le lac# se cache", /*spanish*/"tras el #río bajo el lago# yace"}, - }, {}, - //clear text - Text{"beyond the #river in the Water Temple# waits", /*french*/"au delà de #la rivière dans le Temple de l'Eau# se cache", /*spanish*/"tras el #río del Templo del Agua# yace"} - ); + hintTable[WATER_TEMPLE_BOSS_KEY_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "dodging #rolling boulders under the lake# leads to", + /*french*/ "éviter des #rochers roulants sous le lac# mène à", + /*spanish*/ "esquivar #rocas rodantes bajo el lago# conduce a" }, + }, + {}, + // clear text + Text{ "dodging #rolling boulders in the Water Temple# leads to", + /*french*/ "éviter des #rochers roulants dans le Temple de l'Eau# mène à", + /*spanish*/ "esquivar #rocas rondantes del Templo del Agua# conduce a" }); - hintTable[WATER_TEMPLE_BOSS_KEY_CHEST] = HintText::Sometimes({ - //obscure text - Text{"dodging #rolling boulders under the lake# leads to", /*french*/"éviter des #rochers roulants sous le lac# mène à", /*spanish*/"esquivar #rocas rodantes bajo el lago# conduce a"}, - }, {}, - //clear text - Text{"dodging #rolling boulders in the Water Temple# leads to", /*french*/"éviter des #rochers roulants dans le Temple de l'Eau# mène à", /*spanish*/"esquivar #rocas rondantes del Templo del Agua# conduce a"} - ); + hintTable[WATER_TEMPLE_GS_BEHIND_GATE] = HintText::Sometimes( + { + // obscure text + Text{ "a spider behind a #gate under the lake# holds", + /*french*/ "l'araignée derrière une #barrière sous le lac# a", + /*spanish*/ "una Skulltula tras #una valla bajo el lago# otorga" }, + }, + {}, + // clear text + Text{ "a spider behind a #gate in the Water Temple# holds", + /*french*/ "la Skulltula derrière une #barrière dans le Temple de l'Eau# a", + /*spanish*/ "una Skulltula tras #una valla del Templo del Agua# otorga" }); - hintTable[WATER_TEMPLE_GS_BEHIND_GATE] = HintText::Sometimes({ - //obscure text - Text{"a spider behind a #gate under the lake# holds", /*french*/"l'araignée derrière une #barrière sous le lac# a", /*spanish*/"una Skulltula tras #una valla bajo el lago# otorga"}, - }, {}, - //clear text - Text{"a spider behind a #gate in the Water Temple# holds", /*french*/"la Skulltula derrière une #barrière dans le Temple de l'Eau# a", /*spanish*/"una Skulltula tras #una valla del Templo del Agua# otorga"} - ); + hintTable[WATER_TEMPLE_MQ_FREESTANDING_KEY] = HintText::Sometimes( + { + // obscure text + Text{ "hidden in a #box under the lake# lies", /*french*/ "dans une #boîte sous le lac# gît", + /*spanish*/ "en una #caja bajo el lago# yace" }, + }, + {}, + // clear text + Text{ "hidden in a #box in the Water Temple# lies", /*french*/ "dans une #boîte dans le Temple de l'Eau# gît", + /*spanish*/ "en una #caja del Templo del Agua# yace" }); - hintTable[WATER_TEMPLE_MQ_FREESTANDING_KEY] = HintText::Sometimes({ - //obscure text - Text{"hidden in a #box under the lake# lies", /*french*/"dans une #boîte sous le lac# gît", /*spanish*/"en una #caja bajo el lago# yace"}, - }, {}, - //clear text - Text{"hidden in a #box in the Water Temple# lies", /*french*/"dans une #boîte dans le Temple de l'Eau# gît", /*spanish*/"en una #caja del Templo del Agua# yace"} - ); + hintTable[WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA] = HintText::Sometimes( + { + // obscure text + Text{ "the #locked spider under the lake# holds", /*french*/ "l'#araignée emprisonnée sous le lac# a", + /*spanish*/ "la #Skulltula enjaulada bajo el lago# otorga" }, + }, + {}, + // clear text + Text{ "the #locked spider in the Water Temple# holds", + /*french*/ "une #Skulltula emprisonnée dans le Temple de l'Eau# a", + /*spanish*/ "la #Skulltula enjaulada del Templo del Agua# otorga" }); - hintTable[WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA] = HintText::Sometimes({ - //obscure text - Text{"the #locked spider under the lake# holds", /*french*/"l'#araignée emprisonnée sous le lac# a", /*spanish*/"la #Skulltula enjaulada bajo el lago# otorga"}, - }, {}, - //clear text - Text{"the #locked spider in the Water Temple# holds", /*french*/"une #Skulltula emprisonnée dans le Temple de l'Eau# a", /*spanish*/"la #Skulltula enjaulada del Templo del Agua# otorga"} - ); - - hintTable[WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH] = HintText::Sometimes({ - //obscure text - Text{"a spider behind a #gate under the lake# holds", /*french*/"l'#araignée derrière une barrière sous le lac# a", /*spanish*/"una Skulltula tras una #valla bajo el lago# otorga"}, - }, {}, - //clear text - Text{"a spider behind a #gate in the Water Temple# holds", /*french*/"une #Skulltula derrière une barrière dans le Temple de l'Eau# a", /*spanish*/"una Skulltula tras una #valla del Templo del Agua#"} - ); + hintTable[WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH] = HintText::Sometimes( + { + // obscure text + Text{ "a spider behind a #gate under the lake# holds", + /*french*/ "l'#araignée derrière une barrière sous le lac# a", + /*spanish*/ "una Skulltula tras una #valla bajo el lago# otorga" }, + }, + {}, + // clear text + Text{ "a spider behind a #gate in the Water Temple# holds", + /*french*/ "une #Skulltula derrière une barrière dans le Temple de l'Eau# a", + /*spanish*/ "una Skulltula tras una #valla del Templo del Agua#" }); hintTable[GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST] = HintText::Sometimes({ - //obscure text - Text{"those who seek #sunken silver rupees# will find", /*french*/"ceux qui pêchent les #joyaux argentés# trouveront", /*spanish*/"aquellos que busquen las #rupias plateadas sumergidas# encontrarán"}, - Text{"the #thieves' underwater training# rewards", /*french*/"l'#épreuve de plongée des voleurs# recèle", /*spanish*/"la #instrucción submarina de las bandidas# premia"}, - }); + // obscure text + Text{ "those who seek #sunken silver rupees# will find", + /*french*/ "ceux qui pêchent les #joyaux argentés# trouveront", + /*spanish*/ "aquellos que busquen las #rupias plateadas sumergidas# encontrarán" }, + Text{ "the #thieves' underwater training# rewards", /*french*/ "l'#épreuve de plongée des voleurs# recèle", + /*spanish*/ "la #instrucción submarina de las bandidas# premia" }, + }); hintTable[GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST] = HintText::Sometimes({ - //obscure text - Text{"those who seek #sunken silver rupees# will find", /*french*/"ceux qui pêchent les #joyaux argentés# trouveront", /*spanish*/"aquellos que busquen las #rupias plateadas sumergidas# encontrarán"}, - Text{"the #thieves' underwater training# rewards", /*french*/"l'#épreuve de plongée des voleurs# recèle", /*spanish*/"la #instrucción submarina de las bandidas# premia"}, - }); + // obscure text + Text{ "those who seek #sunken silver rupees# will find", + /*french*/ "ceux qui pêchent les #joyaux argentés# trouveront", + /*spanish*/ "aquellos que busquen las #rupias plateadas sumergidas# encontrarán" }, + Text{ "the #thieves' underwater training# rewards", /*french*/ "l'#épreuve de plongée des voleurs# recèle", + /*spanish*/ "la #instrucción submarina de las bandidas# premia" }, + }); hintTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST] = HintText::Sometimes({ - //obscure text - Text{"the final prize of #the thieves' training# is", /*french*/"la récompense ultime de #l'épreuve des voleurs# est", /*spanish*/"la recompensa final de la #instrucción de las bandida# brinda"}, - }); + // obscure text + Text{ "the final prize of #the thieves' training# is", + /*french*/ "la récompense ultime de #l'épreuve des voleurs# est", + /*spanish*/ "la recompensa final de la #instrucción de las bandida# brinda" }, + }); hintTable[GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST] = HintText::Sometimes({ - //obscure text - Text{"the final prize of #the thieves' training# is", /*french*/"la récompense ultime de #l'épreuve des voleurs# est", /*spanish*/"el premio final de la #instrucción de las bandidas# brinda"}, - }); + // obscure text + Text{ "the final prize of #the thieves' training# is", + /*french*/ "la récompense ultime de #l'épreuve des voleurs# est", + /*spanish*/ "el premio final de la #instrucción de las bandidas# brinda" }, + }); - hintTable[BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST] = HintText::Sometimes({ - //obscure text - Text{"the well's #grasping ghoul# hides", /*french*/"la #terreur du Puits# cache", /*spanish*/"en las #profundidades del pozo# se esconde"}, - Text{"a #nether dweller in the well# holds", /*french*/"le #spectre qui réside dans le Puits# a", /*spanish*/"el #temido morador del pozo# concede"}, - }, {}, - //clear text - Text{"#Dead Hand in the well# holds", /*french*/"le #Poigneur dans le Puits# cache", /*spanish*/"la #Mano Muerta del pozo# concede"} - ); + hintTable[BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "the well's #grasping ghoul# hides", /*french*/ "la #terreur du Puits# cache", + /*spanish*/ "en las #profundidades del pozo# se esconde" }, + Text{ "a #nether dweller in the well# holds", /*french*/ "le #spectre qui réside dans le Puits# a", + /*spanish*/ "el #temido morador del pozo# concede" }, + }, + {}, + // clear text + Text{ "#Dead Hand in the well# holds", /*french*/ "le #Poigneur dans le Puits# cache", + /*spanish*/ "la #Mano Muerta del pozo# concede" }); - hintTable[BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST] = HintText::Sometimes({ - //obscure text - Text{"the well's #grasping ghoul# hides", /*french*/"la #terreur du Puits# cache", /*spanish*/"en las #profundidades del pozo# se esconde"}, - Text{"a #nether dweller in the well# holds", /*french*/"le #spectre qui réside dans le Puits# a", /*spanish*/"el #temido morador del pozo# concede"}, - }, {}, - //clear text - Text{"#Dead Hand in the well# holds", /*french*/"le #Poigneur dans le Puits# cache", /*spanish*/"la #Mano Muerta del pozo# concede"} - ); + hintTable[BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "the well's #grasping ghoul# hides", /*french*/ "la #terreur du Puits# cache", + /*spanish*/ "en las #profundidades del pozo# se esconde" }, + Text{ "a #nether dweller in the well# holds", /*french*/ "le #spectre qui réside dans le Puits# a", + /*spanish*/ "el #temido morador del pozo# concede" }, + }, + {}, + // clear text + Text{ "#Dead Hand in the well# holds", /*french*/ "le #Poigneur dans le Puits# cache", + /*spanish*/ "la #Mano Muerta del pozo# concede" }); - hintTable[SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST] = HintText::Sometimes({ - //obscure text - Text{"the treasure #sought by Nabooru# is", /*french*/"le trésor que #recherche Nabooru# est", /*spanish*/"el #ansiado tesoro de Nabooru# brinda"}, - }, {}, - //clear text - Text{"upon the #Colossus's right hand# is", /*french*/"sur la #main droite du colosse# repose", /*spanish*/"en la #mano derecha del Coloso# yace"} - ); + hintTable[SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "the treasure #sought by Nabooru# is", /*french*/ "le trésor que #recherche Nabooru# est", + /*spanish*/ "el #ansiado tesoro de Nabooru# brinda" }, + }, + {}, + // clear text + Text{ "upon the #Colossus's right hand# is", /*french*/ "sur la #main droite du colosse# repose", + /*spanish*/ "en la #mano derecha del Coloso# yace" }); hintTable[SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST] = HintText::Sometimes({ - //obscure text - Text{"upon the #Colossus's left hand# is", /*french*/"sur la #main gauche du colosse# repose", /*spanish*/"en la #mano izquierda del Coloso# yace"}, - }); + // obscure text + Text{ "upon the #Colossus's left hand# is", /*french*/ "sur la #main gauche du colosse# repose", + /*spanish*/ "en la #mano izquierda del Coloso# yace" }, + }); - hintTable[SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST] = HintText::Sometimes({ - //obscure text - Text{"a #temporal paradox in the Colossus# yields", /*french*/"un #paradoxe temporel dans le colosse# révèle", /*spanish*/"una #paradoja temporal del Coloso# conduce a"}, - }, {}, - //clear text - Text{"a #temporal paradox in the Spirit Temple# yields", /*french*/"le #paradoxe temporel dans le Temple de l'Esprit# révèle", /*spanish*/"una #paradoja temporal del Coloso# conduce a"} - ); + hintTable[SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "a #temporal paradox in the Colossus# yields", + /*french*/ "un #paradoxe temporel dans le colosse# révèle", + /*spanish*/ "una #paradoja temporal del Coloso# conduce a" }, + }, + {}, + // clear text + Text{ "a #temporal paradox in the Spirit Temple# yields", + /*french*/ "le #paradoxe temporel dans le Temple de l'Esprit# révèle", + /*spanish*/ "una #paradoja temporal del Coloso# conduce a" }); - hintTable[SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST] = HintText::Sometimes({ - //obscure text - Text{"a #symphony in the Colossus# yields", /*french*/"la #symphonie du colosse# révèle", /*spanish*/"una #sinfonía del Coloso# conduce a"}, - }, {}, - //clear text - Text{"a #symphony in the Spirit Temple# yields", /*french*/"les #cinq chansons du Temple de l'Esprit# révèlent", /*spanish*/"una #sinfonía del Coloso# conduce a"} - ); + hintTable[SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST] = HintText::Sometimes( + { + // obscure text + Text{ "a #symphony in the Colossus# yields", /*french*/ "la #symphonie du colosse# révèle", + /*spanish*/ "una #sinfonía del Coloso# conduce a" }, + }, + {}, + // clear text + Text{ "a #symphony in the Spirit Temple# yields", + /*french*/ "les #cinq chansons du Temple de l'Esprit# révèlent", + /*spanish*/ "una #sinfonía del Coloso# conduce a" }); - hintTable[SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM] = HintText::Sometimes({ - //obscure text - Text{"a #spider's symphony in the Colossus# yields", /*french*/"la #mélodie de l'araignée du colosse# révèle", /*spanish*/"la #Skulltula de la sinfonía del Coloso# otorga"}, - }, {}, - //clear text - Text{"a #spider's symphony in the Spirit Temple# yields", /*french*/"la #mélodie de la Skulltula du Temple de l'Esprit# révèle", /*spanish*/"la #Skulltula de la sinfonía del Coloso# otorga"} - ); + hintTable[SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM] = HintText::Sometimes( + { + // obscure text + Text{ "a #spider's symphony in the Colossus# yields", + /*french*/ "la #mélodie de l'araignée du colosse# révèle", + /*spanish*/ "la #Skulltula de la sinfonía del Coloso# otorga" }, + }, + {}, + // clear text + Text{ "a #spider's symphony in the Spirit Temple# yields", + /*french*/ "la #mélodie de la Skulltula du Temple de l'Esprit# révèle", + /*spanish*/ "la #Skulltula de la sinfonía del Coloso# otorga" }); hintTable[SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST] = HintText::Sometimes({ - //obscure text - Text{"shadows in an #invisible maze# guard", /*french*/"les ombres dans le #labyrinthe invisible# protègent", /*spanish*/"las sombras del #laberinto misterioso# esconden"}, - }); + // obscure text + Text{ "shadows in an #invisible maze# guard", /*french*/ "les ombres dans le #labyrinthe invisible# protègent", + /*spanish*/ "las sombras del #laberinto misterioso# esconden" }, + }); hintTable[SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST] = HintText::Sometimes({ - //obscure text - Text{"shadows in an #invisible maze# guard", /*french*/"les ombres dans le #labyrinthe invisible# protègent", /*spanish*/"las sombras del #laberinto invisible# esconden"}, - }); + // obscure text + Text{ "shadows in an #invisible maze# guard", /*french*/ "les ombres dans le #labyrinthe invisible# protègent", + /*spanish*/ "las sombras del #laberinto invisible# esconden" }, + }); /*-------------------------- | ENTRANCE HINT TEXT | ---------------------------*/ hintTable[DESERT_COLOSSUS_TO_COLOSSUS_GROTTO] = HintText::Entrance({ - //obscure text - Text{"lifting a #rock in the desert# reveals", /*french*/"soulever une #roche dans le désert# révèle", /*spanish*/"levantar una #roca del desierto# revela"}, - }); + // obscure text + Text{ "lifting a #rock in the desert# reveals", /*french*/ "soulever une #roche dans le désert# révèle", + /*spanish*/ "levantar una #roca del desierto# revela" }, + }); hintTable[GV_GROTTO_LEDGE_TO_GV_OCTOROK_GROTTO] = HintText::Entrance({ - //obscure text - Text{"a rock on #a ledge in the valley# hides", /*french*/"soulever une #roche dans la vallée# révèle", /*spanish*/"levantar una #roca al borde del valle# esconde"}, - }); + // obscure text + Text{ "a rock on #a ledge in the valley# hides", /*french*/ "soulever une #roche dans la vallée# révèle", + /*spanish*/ "levantar una #roca al borde del valle# esconde" }, + }); hintTable[GC_GROTTO_PLATFORM_TO_GC_GROTTO] = HintText::Entrance({ - //obscure text - Text{"a #pool of lava# in Goron City blocks the way to", /*french*/"l'#étang de lave# dans le village Goron renferme", /*spanish*/"un #estanque de lava# en la Ciudad Goron bloquea el paso a"}, - }); + // obscure text + Text{ "a #pool of lava# in Goron City blocks the way to", + /*french*/ "l'#étang de lave# dans le village Goron renferme", + /*spanish*/ "un #estanque de lava# en la Ciudad Goron bloquea el paso a" }, + }); hintTable[GERUDO_FORTRESS_TO_GF_STORMS_GROTTO] = HintText::Entrance({ - //obscure text - Text{"a #storm within Gerudo's Fortress# reveals", /*french*/"la #tempête dans la forteresse# révèle", /*spanish*/"una #tormenta en la Fortaleza Gerudo# revela"}, - }); + // obscure text + Text{ "a #storm within Gerudo's Fortress# reveals", /*french*/ "la #tempête dans la forteresse# révèle", + /*spanish*/ "una #tormenta en la Fortaleza Gerudo# revela" }, + }); hintTable[ZORAS_DOMAIN_TO_ZD_STORMS_GROTTO] = HintText::Entrance({ - //obscure text - Text{"a #storm within Zora's Domain# reveals", /*french*/"la #tempête dans le Domaine Zora# révèle", /*spanish*/"una #tormenta en la Región de los Zora# revela"}, - }); + // obscure text + Text{ "a #storm within Zora's Domain# reveals", /*french*/ "la #tempête dans le Domaine Zora# révèle", + /*spanish*/ "una #tormenta en la Región de los Zora# revela" }, + }); hintTable[HYRULE_CASTLE_GROUNDS_TO_HC_STORMS_GROTTO] = HintText::Entrance({ - //obscure text - Text{"a #storm near the castle# reveals", /*french*/"la #tempête près du château# révèle", /*spanish*/"una #tormenta junto al castillo# revela"}, - }); + // obscure text + Text{ "a #storm near the castle# reveals", /*french*/ "la #tempête près du château# révèle", + /*spanish*/ "una #tormenta junto al castillo# revela" }, + }); hintTable[GV_FORTRESS_SIDE_TO_GV_STORMS_GROTTO] = HintText::Entrance({ - //obscure text - Text{"a #storm in the valley# reveals", /*french*/"la #tempête dans la vallée# révèle", /*spanish*/"una #tormenta en el valle# revela"}, - }); + // obscure text + Text{ "a #storm in the valley# reveals", /*french*/ "la #tempête dans la vallée# révèle", + /*spanish*/ "una #tormenta en el valle# revela" }, + }); hintTable[DESERT_COLOSSUS_TO_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = HintText::Entrance({ - //obscure text - Text{"a #fractured desert wall# hides", /*french*/"le #mur fragile du désert# cache", /*spanish*/"una #agrietada pared del desierto# esconde"}, - }); + // obscure text + Text{ "a #fractured desert wall# hides", /*french*/ "le #mur fragile du désert# cache", + /*spanish*/ "una #agrietada pared del desierto# esconde" }, + }); hintTable[GANONS_CASTLE_GROUNDS_TO_OGC_GREAT_FAIRY_FOUNTAIN] = HintText::Entrance({ - //obscure text - Text{"a #heavy pillar# outside the castle obstructs", /*french*/"le #rocher fragile près du château# cache", /*spanish*/"una #pesada columna# fuera del castillo obstruye"}, - }); + // obscure text + Text{ "a #heavy pillar# outside the castle obstructs", /*french*/ "le #rocher fragile près du château# cache", + /*spanish*/ "una #pesada columna# fuera del castillo obstruye" }, + }); hintTable[ZORAS_FOUNTAIN_TO_ZF_GREAT_FAIRY_FOUNTAIN] = HintText::Entrance({ - //obscure text - Text{"a #fountain wall# hides", /*french*/"le #mur fragile du réservoir# cache", /*spanish*/"una #pared de la fuente# esconde"}, - }); + // obscure text + Text{ "a #fountain wall# hides", /*french*/ "le #mur fragile du réservoir# cache", + /*spanish*/ "una #pared de la fuente# esconde" }, + }); hintTable[GV_FORTRESS_SIDE_TO_GV_CARPENTER_TENT] = HintText::Entrance({ - //obscure text - Text{"a #tent in the valley# covers", /*french*/"la #tente dans la vallée# recouvre", /*spanish*/"una #tienda de campaña del valle# cubre"}, - }); + // obscure text + Text{ "a #tent in the valley# covers", /*french*/ "la #tente dans la vallée# recouvre", + /*spanish*/ "una #tienda de campaña del valle# cubre" }, + }); hintTable[GRAVEYARD_WARP_PAD_REGION_TO_SHADOW_TEMPLE_ENTRYWAY] = HintText::Entrance({ - //obscure text - Text{"at the #back of the Graveyard#, there is", /*french*/"#derrière le Cimetière# gît", /*spanish*/"en la #parte trasera del cementerio# se halla"}, - }); + // obscure text + Text{ "at the #back of the Graveyard#, there is", /*french*/ "#derrière le Cimetière# gît", + /*spanish*/ "en la #parte trasera del cementerio# se halla" }, + }); hintTable[LAKE_HYLIA_TO_WATER_TEMPLE_LOBBY] = HintText::Entrance({ - //obscure text - Text{"deep #under a vast lake#, one can find", /*french*/"#sous le lac# gît", /*spanish*/"en las #profundidades de un lago inmenso# se halla"}, - }); + // obscure text + Text{ "deep #under a vast lake#, one can find", /*french*/ "#sous le lac# gît", + /*spanish*/ "en las #profundidades de un lago inmenso# se halla" }, + }); hintTable[GERUDO_FORTRESS_TO_GERUDO_TRAINING_GROUNDS_LOBBY] = HintText::Entrance({ - //obscure text - Text{"paying a #fee to the Gerudos# grants access to", /*french*/"l'#entrée payante des Gerudo# donne accès à", /*spanish*/"pagarle una #tasa a las gerudo# da acceso a"}, - }); + // obscure text + Text{ "paying a #fee to the Gerudos# grants access to", + /*french*/ "l'#entrée payante des Gerudo# donne accès à", + /*spanish*/ "pagarle una #tasa a las gerudo# da acceso a" }, + }); hintTable[ZORAS_FOUNTAIN_TO_JABU_JABUS_BELLY_BEGINNING] = HintText::Entrance({ - //obscure text - Text{"inside #Jabu-Jabu#, one can find", /*french*/"#dans Jabu-Jabu# se trouve", /*spanish*/"dentro de #Jabu-Jabu# se halla"}, - }); + // obscure text + Text{ "inside #Jabu-Jabu#, one can find", /*french*/ "#dans Jabu-Jabu# se trouve", + /*spanish*/ "dentro de #Jabu-Jabu# se halla" }, + }); hintTable[KAKARIKO_VILLAGE_TO_BOTTOM_OF_THE_WELL] = HintText::Entrance({ - //obscure text - Text{"a #village well# leads to", /*french*/"dans le fond du #Puits du village# gît", /*spanish*/"el #pozo de un pueblo# conduce a"}, - }); + // obscure text + Text{ "a #village well# leads to", /*french*/ "dans le fond du #Puits du village# gît", + /*spanish*/ "el #pozo de un pueblo# conduce a" }, + }); /*-------------------------- | EXIT HINT TEXT | ---------------------------*/ - //maybe make a new type for this? I'm not sure if it really matters + // maybe make a new type for this? I'm not sure if it really matters hintTable[LINKS_POCKET] = HintText::Exclude({ - //obscure text - Text{"Link's Pocket", /*french*/"les Poches de @", /*spanish*/"el bolsillo de @"}, - }); + // obscure text + Text{ "Link's Pocket", /*french*/ "les Poches de @", /*spanish*/ "el bolsillo de @" }, + }); hintTable[KOKIRI_FOREST] = HintText::Exclude({ - //obscure text - Text{"Kokiri Forest", /*french*/"la forêt Kokiri", /*spanish*/"el Bosque Kokiri"}, - }); + // obscure text + Text{ "Kokiri Forest", /*french*/ "la forêt Kokiri", /*spanish*/ "el Bosque Kokiri" }, + }); hintTable[THE_LOST_WOODS] = HintText::Exclude({ - //obscure text - Text{"the Lost Woods", /*french*/"les Bois Perdus", /*spanish*/"el Bosque Perdido"}, - }); + // obscure text + Text{ "the Lost Woods", /*french*/ "les Bois Perdus", /*spanish*/ "el Bosque Perdido" }, + }); hintTable[SACRED_FOREST_MEADOW] = HintText::Exclude({ - //obscure text - Text{"Sacred Forest Meadow", /*french*/"le Bosquet Sacré", /*spanish*/"la pradera sagrada del bosque"}, - }); + // obscure text + Text{ "Sacred Forest Meadow", /*french*/ "le Bosquet Sacré", /*spanish*/ "la pradera sagrada del bosque" }, + }); hintTable[HYRULE_FIELD] = HintText::Exclude({ - //obscure text - Text{"Hyrule Field", /*french*/"la Plaine d'Hyrule", /*spanish*/"la Llanura de Hyrule"}, - }); + // obscure text + Text{ "Hyrule Field", /*french*/ "la Plaine d'Hyrule", /*spanish*/ "la Llanura de Hyrule" }, + }); hintTable[LAKE_HYLIA] = HintText::Exclude({ - //obscure text - Text{"Lake Hylia", /*french*/"le Lac Hylia", /*spanish*/"el Lago Hylia"}, - }); + // obscure text + Text{ "Lake Hylia", /*french*/ "le Lac Hylia", /*spanish*/ "el Lago Hylia" }, + }); hintTable[GERUDO_VALLEY] = HintText::Exclude({ - //obscure text - Text{"Gerudo Valley", /*french*/"la Vallée Gerudo", /*spanish*/"el Valle Gerudo"}, - }); + // obscure text + Text{ "Gerudo Valley", /*french*/ "la Vallée Gerudo", /*spanish*/ "el Valle Gerudo" }, + }); hintTable[GERUDO_FORTRESS] = HintText::Exclude({ - //obscure text - Text{"Gerudo's Fortress", /*french*/"la Repaire des Voleurs", /*spanish*/"la Fortaleza Gerudo"}, - }); + // obscure text + Text{ "Gerudo's Fortress", /*french*/ "la Repaire des Voleurs", /*spanish*/ "la Fortaleza Gerudo" }, + }); hintTable[HAUNTED_WASTELAND] = HintText::Exclude({ - //obscure text - Text{"Haunted Wasteland", /*french*/"le Désert Hanté", /*spanish*/"el desierto encantado"}, - }); + // obscure text + Text{ "Haunted Wasteland", /*french*/ "le Désert Hanté", /*spanish*/ "el desierto encantado" }, + }); hintTable[DESERT_COLOSSUS] = HintText::Exclude({ - //obscure text - Text{"Desert Colossus", /*french*/"le Colosse du Désert", /*spanish*/"el Coloso del Desierto"}, - }); + // obscure text + Text{ "Desert Colossus", /*french*/ "le Colosse du Désert", /*spanish*/ "el Coloso del Desierto" }, + }); hintTable[THE_MARKET] = HintText::Exclude({ - //obscure text - Text{"the Market", /*french*/"la Place du Marché", /*spanish*/"la plaza del mercado"}, - }); + // obscure text + Text{ "the Market", /*french*/ "la Place du Marché", /*spanish*/ "la plaza del mercado" }, + }); hintTable[TEMPLE_OF_TIME] = HintText::Exclude({ - //obscure text - Text{"Temple of Time", /*french*/"le Temple du Temps", /*spanish*/"el Templo del Tiempo"}, - }); + // obscure text + Text{ "Temple of Time", /*french*/ "le Temple du Temps", /*spanish*/ "el Templo del Tiempo" }, + }); hintTable[HYRULE_CASTLE] = HintText::Exclude({ - //obscure text - Text{"Hyrule Castle", /*french*/"le Château d'Hyrule", /*spanish*/"el Castillo de Hyrule"}, - }); + // obscure text + Text{ "Hyrule Castle", /*french*/ "le Château d'Hyrule", /*spanish*/ "el Castillo de Hyrule" }, + }); hintTable[OUTSIDE_GANONS_CASTLE] = HintText::Exclude({ - //obscure text - Text{"outside Ganon's Castle", /*french*/"les alentours du Château&de Ganon", /*spanish*/"el exterior del Castillo de Ganon"}, - }); + // obscure text + Text{ "outside Ganon's Castle", /*french*/ "les alentours du Château&de Ganon", + /*spanish*/ "el exterior del Castillo de Ganon" }, + }); hintTable[KAKARIKO_VILLAGE] = HintText::Exclude({ - //obscure text - Text{"Kakariko Village", /*french*/"le Village Cocorico", /*spanish*/"Kakariko"}, - }); + // obscure text + Text{ "Kakariko Village", /*french*/ "le Village Cocorico", /*spanish*/ "Kakariko" }, + }); hintTable[THE_GRAVEYARD] = HintText::Exclude({ - //obscure text - Text{"the Graveyard", /*french*/"le Cimetière", /*spanish*/"el cementerio"}, - }); + // obscure text + Text{ "the Graveyard", /*french*/ "le Cimetière", /*spanish*/ "el cementerio" }, + }); hintTable[DEATH_MOUNTAIN_TRAIL] = HintText::Exclude({ - //obscure text - Text{"Death Mountain Trail", /*french*/"le Chemin du Péril", /*spanish*/"el sendero de la Montaña de la Muerte"}, - }); + // obscure text + Text{ "Death Mountain Trail", /*french*/ "le Chemin du Péril", + /*spanish*/ "el sendero de la Montaña de la Muerte" }, + }); hintTable[GORON_CITY] = HintText::Exclude({ - //obscure text - Text{"Goron City", /*french*/"le Village Goron", /*spanish*/"la Ciudad Goron"}, - }); + // obscure text + Text{ "Goron City", /*french*/ "le Village Goron", /*spanish*/ "la Ciudad Goron" }, + }); hintTable[DEATH_MOUNTAIN_CRATER] = HintText::Exclude({ - //obscure text - Text{"Death Mountain Crater", /*french*/"le Cratère du Péril", /*spanish*/"el cráter de la Montaña de la Muerte"}, - }); + // obscure text + Text{ "Death Mountain Crater", /*french*/ "le Cratère du Péril", + /*spanish*/ "el cráter de la Montaña de la Muerte" }, + }); hintTable[ZORAS_RIVER] = HintText::Exclude({ - //obscure text - Text{"Zora's River", /*french*/"la Rivière Zora", /*spanish*/"el Río Zora"}, - }); + // obscure text + Text{ "Zora's River", /*french*/ "la Rivière Zora", /*spanish*/ "el Río Zora" }, + }); hintTable[ZORAS_DOMAIN] = HintText::Exclude({ - //obscure text - Text{"Zora's Domain", /*french*/"le Domaine Zora", /*spanish*/"la Región de los Zora"}, - }); + // obscure text + Text{ "Zora's Domain", /*french*/ "le Domaine Zora", /*spanish*/ "la Región de los Zora" }, + }); hintTable[ZORAS_FOUNTAIN] = HintText::Exclude({ - //obscure text - Text{"Zora's Fountain", /*french*/"la Fontaine Zora", /*spanish*/"la Fuente Zora"}, - }); + // obscure text + Text{ "Zora's Fountain", /*french*/ "la Fontaine Zora", /*spanish*/ "la Fuente Zora" }, + }); hintTable[LON_LON_RANCH] = HintText::Exclude({ - //obscure text - Text{"Lon Lon Ranch", /*french*/"le Ranch Lon Lon", /*spanish*/"el Rancho Lon Lon"}, - }); - + // obscure text + Text{ "Lon Lon Ranch", /*french*/ "le Ranch Lon Lon", /*spanish*/ "el Rancho Lon Lon" }, + }); /*-------------------------- | REGION HINT TEXT | ---------------------------*/ hintTable[KF_LINKS_HOUSE] = HintText::Region({ - //obscure text - Text{"Link's House", /*french*/"la #maison de @#", /*spanish*/"la casa de @"}, - }); + // obscure text + Text{ "Link's House", /*french*/ "la #maison de @#", /*spanish*/ "la casa de @" }, + }); - // hintTable[TOT_MAIN] = HintText::Region({ - // //obscure text - // Text{"the #Temple of Time#", /*french*/"le #Temple du Temps#", /*spanish*/"el Templo del Tiempo"}, - // }); + // hintTable[TOT_MAIN] = HintText::Region({ + // //obscure text + // Text{"the #Temple of Time#", /*french*/"le #Temple du Temps#", /*spanish*/"el Templo del + // Tiempo"}, + // }); hintTable[KF_MIDOS_HOUSE] = HintText::Region({ - //obscure text - Text{"Mido's house", /*french*/"la #Cabane du Grand Mido#", /*spanish*/"la casa de Mido"}, - }); + // obscure text + Text{ "Mido's house", /*french*/ "la #Cabane du Grand Mido#", /*spanish*/ "la casa de Mido" }, + }); hintTable[KF_SARIAS_HOUSE] = HintText::Region({ - //obscure text - Text{"Saria's House", /*french*/"la #Cabane de Saria#", /*spanish*/"la casa de Saria"}, - }); + // obscure text + Text{ "Saria's House", /*french*/ "la #Cabane de Saria#", /*spanish*/ "la casa de Saria" }, + }); hintTable[KF_HOUSE_OF_TWINS] = HintText::Region({ - //obscure text - Text{"the #House of Twins#", /*french*/"la #Cabane des Jumelles#", /*spanish*/"la casa de las gemelas"}, - }); + // obscure text + Text{ "the #House of Twins#", /*french*/ "la #Cabane des Jumelles#", /*spanish*/ "la casa de las gemelas" }, + }); hintTable[KF_KNOW_IT_ALL_HOUSE] = HintText::Region({ - //obscure text - Text{"Know-It-All Brothers' House", /*french*/"la #Cabane des frères Je-Sais-Tout#", /*spanish*/"la casa de los hermanos Sabelotodo"}, - }); + // obscure text + Text{ "Know-It-All Brothers' House", /*french*/ "la #Cabane des frères Je-Sais-Tout#", + /*spanish*/ "la casa de los hermanos Sabelotodo" }, + }); hintTable[KF_KOKIRI_SHOP] = HintText::Region({ - //obscure text - Text{"the #Kokiri Shop#", /*french*/"le #Magasin Kokiri#", /*spanish*/"la tienda kokiri"}, - }); + // obscure text + Text{ "the #Kokiri Shop#", /*french*/ "le #Magasin Kokiri#", /*spanish*/ "la tienda kokiri" }, + }); hintTable[LH_LAB] = HintText::Region({ - //obscure text - Text{"the #Lakeside Laboratory#", /*french*/"le #Laboratoire du Lac#", /*spanish*/"el laboratorio del lago"}, - }); + // obscure text + Text{ "the #Lakeside Laboratory#", /*french*/ "le #Laboratoire du Lac#", + /*spanish*/ "el laboratorio del lago" }, + }); hintTable[LH_FISHING_HOLE] = HintText::Region({ - //obscure text - Text{"the #Fishing Pond#", /*french*/"l'#Étang#", /*spanish*/"el estanque"}, - }); + // obscure text + Text{ "the #Fishing Pond#", /*french*/ "l'#Étang#", /*spanish*/ "el estanque" }, + }); hintTable[GV_CARPENTER_TENT] = HintText::Region({ - //obscure text - Text{"the #Carpenters' tent#", /*french*/"la #Tente des charpentiers#", /*spanish*/"la #tienda de campaña de los carpinteros#"}, - }); + // obscure text + Text{ "the #Carpenters' tent#", /*french*/ "la #Tente des charpentiers#", + /*spanish*/ "la #tienda de campaña de los carpinteros#" }, + }); hintTable[MARKET_GUARD_HOUSE] = HintText::Region({ - //obscure text - Text{"the #Guard House#", /*french*/"le #poste de garde#", /*spanish*/"la caseta de guardia"}, - }); + // obscure text + Text{ "the #Guard House#", /*french*/ "le #poste de garde#", /*spanish*/ "la caseta de guardia" }, + }); hintTable[MARKET_MASK_SHOP] = HintText::Region({ - //obscure text - Text{"the #Happy Mask Shop#", /*french*/"la #Foire Aux Masques#", /*spanish*/"la tienda de La Máscara Feliz"}, - }); + // obscure text + Text{ "the #Happy Mask Shop#", /*french*/ "la #Foire Aux Masques#", + /*spanish*/ "la tienda de La Máscara Feliz" }, + }); hintTable[MARKET_BOMBCHU_BOWLING] = HintText::Region({ - //obscure text - Text{"the #Bombchu Bowling Alley#", /*french*/"le #Bowling Teigneux#", /*spanish*/"la Bolera Bombchu"}, - }); + // obscure text + Text{ "the #Bombchu Bowling Alley#", /*french*/ "le #Bowling Teigneux#", /*spanish*/ "la Bolera Bombchu" }, + }); hintTable[MARKET_POTION_SHOP] = HintText::Region({ - //obscure text - Text{"the #Market Potion Shop#", /*french*/"l'#apothicaire de la Place du Marché#", /*spanish*/"la tienda de pociones de la plaza del mercado"}, - }); + // obscure text + Text{ "the #Market Potion Shop#", /*french*/ "l'#apothicaire de la Place du Marché#", + /*spanish*/ "la tienda de pociones de la plaza del mercado" }, + }); hintTable[MARKET_TREASURE_CHEST_GAME] = HintText::Region({ - //obscure text - Text{"the #Treasure Chest Shop#", /*french*/"la #Chasse-aux-Trésors#", /*spanish*/"el Cofre del Tesoro"}, - }); + // obscure text + Text{ "the #Treasure Chest Shop#", /*french*/ "la #Chasse-aux-Trésors#", /*spanish*/ "el Cofre del Tesoro" }, + }); hintTable[MARKET_BOMBCHU_SHOP] = HintText::Region({ - //obscure text - Text{"the #Bombchu Shop#", /*french*/"le #Magasin de Missiles#", /*spanish*/"la Tienda Bombchu"}, - }); + // obscure text + Text{ "the #Bombchu Shop#", /*french*/ "le #Magasin de Missiles#", /*spanish*/ "la Tienda Bombchu" }, + }); hintTable[MARKET_MAN_IN_GREEN_HOUSE] = HintText::Region({ - //obscure text - Text{"Man in Green's House", /*french*/"la #Maison de l'Homme en Vert#", /*spanish*/"la casa del hombre de verde"}, - }); + // obscure text + Text{ "Man in Green's House", /*french*/ "la #Maison de l'Homme en Vert#", + /*spanish*/ "la casa del hombre de verde" }, + }); hintTable[KAK_WINDMILL] = HintText::Region({ - //obscure text - Text{"the #Windmill#", /*french*/"le #Moulin#", /*spanish*/"el #molino#"}, - }); + // obscure text + Text{ "the #Windmill#", /*french*/ "le #Moulin#", /*spanish*/ "el #molino#" }, + }); hintTable[KAK_CARPENTER_BOSS_HOUSE] = HintText::Region({ - //obscure text - Text{"the #Carpenters' Boss House#", /*french*/"la #Maison du Chef des ouvriers#", /*spanish*/"la casa del capataz de los carpinteros"}, - }); + // obscure text + Text{ "the #Carpenters' Boss House#", /*french*/ "la #Maison du Chef des ouvriers#", + /*spanish*/ "la casa del capataz de los carpinteros" }, + }); hintTable[KAK_HOUSE_OF_SKULLTULA] = HintText::Region({ - //obscure text - Text{"the #House of Skulltula#", /*french*/"la #Maison des Skulltulas#", /*spanish*/"la casa de las Skulltulas"}, - }); + // obscure text + Text{ "the #House of Skulltula#", /*french*/ "la #Maison des Skulltulas#", + /*spanish*/ "la casa de las Skulltulas" }, + }); hintTable[KAK_IMPAS_HOUSE] = HintText::Region({ - //obscure text - Text{"Impa's House", /*french*/"la #Maison d'Impa#", /*spanish*/"la casa de Impa"}, - }); + // obscure text + Text{ "Impa's House", /*french*/ "la #Maison d'Impa#", /*spanish*/ "la casa de Impa" }, + }); hintTable[KAK_IMPAS_HOUSE_BACK] = HintText::Region({ - //obscure text - Text{"Impa's cow cage", /*french*/"la #cage à vache d'Impa#", /*spanish*/"la jaula de la vaca de Impa"}, - }); + // obscure text + Text{ "Impa's cow cage", /*french*/ "la #cage à vache d'Impa#", /*spanish*/ "la jaula de la vaca de Impa" }, + }); hintTable[KAK_ODD_POTION_BUILDING] = HintText::Region({ - //obscure text - Text{"Granny's Potion Shop", /*french*/"la #maison bleue de Cocorico#", /*spanish*/"la tienda de pociones de la abuela"}, - }); + // obscure text + Text{ "Granny's Potion Shop", /*french*/ "la #maison bleue de Cocorico#", + /*spanish*/ "la tienda de pociones de la abuela" }, + }); hintTable[GRAVEYARD_DAMPES_HOUSE] = HintText::Region({ - //obscure text - Text{"Dampé's Hut", /*french*/"la #Cabane du Fossoyeur#", /*spanish*/"la cabaña de Dampé"}, - }); + // obscure text + Text{ "Dampé's Hut", /*french*/ "la #Cabane du Fossoyeur#", /*spanish*/ "la cabaña de Dampé" }, + }); hintTable[GC_SHOP] = HintText::Region({ - //obscure text - Text{"the #Goron Shop#", /*french*/"la #Boutique Goron#", /*spanish*/"la #tienda goron#"}, - }); + // obscure text + Text{ "the #Goron Shop#", /*french*/ "la #Boutique Goron#", /*spanish*/ "la #tienda goron#" }, + }); hintTable[ZD_SHOP] = HintText::Region({ - //obscure text - Text{"the #Zora Shop#", /*french*/"la #Boutique Zora#", /*spanish*/"la #tienda zora#"}, - }); + // obscure text + Text{ "the #Zora Shop#", /*french*/ "la #Boutique Zora#", /*spanish*/ "la #tienda zora#" }, + }); hintTable[LLR_TALONS_HOUSE] = HintText::Region({ - //obscure text - Text{"Talon's House", /*french*/"la #Maison de Talon#", /*spanish*/"la casa de Talon"}, - }); + // obscure text + Text{ "Talon's House", /*french*/ "la #Maison de Talon#", /*spanish*/ "la casa de Talon" }, + }); hintTable[LLR_STABLES] = HintText::Region({ - //obscure text - Text{"a #stable#", /*french*/"l'#Étable#", /*spanish*/"el establo"}, - }); + // obscure text + Text{ "a #stable#", /*french*/ "l'#Étable#", /*spanish*/ "el establo" }, + }); hintTable[LLR_TOWER] = HintText::Region({ - //obscure text - Text{"the #Lon Lon Tower#", /*french*/"le #silo du Ranch Lon Lon#", /*spanish*/"la torre Lon Lon"}, - }); + // obscure text + Text{ "the #Lon Lon Tower#", /*french*/ "le #silo du Ranch Lon Lon#", /*spanish*/ "la torre Lon Lon" }, + }); hintTable[MARKET_BAZAAR] = HintText::Region({ - //obscure text - Text{"the #Market Bazaar#", /*french*/"le #Bazar de la Place du Marché#", /*spanish*/"el bazar de la plaza del mercado"}, - }); + // obscure text + Text{ "the #Market Bazaar#", /*french*/ "le #Bazar de la Place du Marché#", + /*spanish*/ "el bazar de la plaza del mercado" }, + }); hintTable[MARKET_SHOOTING_GALLERY] = HintText::Region({ - //obscure text - Text{"a #Slingshot Shooting Gallery#", /*french*/"le #Jeu d'Adresse de la Place du Marché#", /*spanish*/"el Tiro al Blanco con tirachinas"}, - }); + // obscure text + Text{ "a #Slingshot Shooting Gallery#", /*french*/ "le #Jeu d'Adresse de la Place du Marché#", + /*spanish*/ "el Tiro al Blanco con tirachinas" }, + }); hintTable[KAK_BAZAAR] = HintText::Region({ - //obscure text - Text{"the #Kakariko Bazaar#", /*french*/"le #Bazar de Cocorico#", /*spanish*/"el bazar de Kakariko"}, - }); + // obscure text + Text{ "the #Kakariko Bazaar#", /*french*/ "le #Bazar de Cocorico#", /*spanish*/ "el bazar de Kakariko" }, + }); hintTable[KAK_POTION_SHOP_FRONT] = HintText::Region({ - //obscure text - Text{"the #Kakariko Potion Shop#", /*french*/"l'#apothicaire de Cocorico#", /*spanish*/"la tienda de pociones de Kakariko"}, - }); + // obscure text + Text{ "the #Kakariko Potion Shop#", /*french*/ "l'#apothicaire de Cocorico#", + /*spanish*/ "la tienda de pociones de Kakariko" }, + }); hintTable[KAK_POTION_SHOP_BACK] = HintText::Region({ - //obscure text - Text{"the #Kakariko Potion Shop#", /*french*/"l'#apothicaire de Cocorico#", /*spanish*/"la tienda de pociones de Kakariko"}, - }); + // obscure text + Text{ "the #Kakariko Potion Shop#", /*french*/ "l'#apothicaire de Cocorico#", + /*spanish*/ "la tienda de pociones de Kakariko" }, + }); hintTable[KAK_SHOOTING_GALLERY] = HintText::Region({ - //obscure text - Text{"a #Bow Shooting Gallery#", /*french*/"le #jeu d'adresse de Cocorico#", /*spanish*/"el Tiro al Blanco con arco"}, - }); + // obscure text + Text{ "a #Bow Shooting Gallery#", /*french*/ "le #jeu d'adresse de Cocorico#", + /*spanish*/ "el Tiro al Blanco con arco" }, + }); hintTable[COLOSSUS_GREAT_FAIRY_FOUNTAIN] = HintText::Region({ - //obscure text - Text{"a #Great Fairy Fountain#", /*french*/"une #Fontaine Royale des Fées#", /*spanish*/"una fuente de la Gran Hada"}, - }); + // obscure text + Text{ "a #Great Fairy Fountain#", /*french*/ "une #Fontaine Royale des Fées#", + /*spanish*/ "una fuente de la Gran Hada" }, + }); hintTable[HC_GREAT_FAIRY_FOUNTAIN] = HintText::Region({ - //obscure text - Text{"a #Great Fairy Fountain#", /*french*/"une #Fontaine Royale des Fées#", /*spanish*/"una fuente de la Gran Hada"}, - }); + // obscure text + Text{ "a #Great Fairy Fountain#", /*french*/ "une #Fontaine Royale des Fées#", + /*spanish*/ "una fuente de la Gran Hada" }, + }); hintTable[OGC_GREAT_FAIRY_FOUNTAIN] = HintText::Region({ - //obscure text - Text{"a #Great Fairy Fountain#", /*french*/"une #Fontaine Royale des Fées#", /*spanish*/"una fuente de la Gran Hada"}, - }); + // obscure text + Text{ "a #Great Fairy Fountain#", /*french*/ "une #Fontaine Royale des Fées#", + /*spanish*/ "una fuente de la Gran Hada" }, + }); hintTable[DMC_GREAT_FAIRY_FOUNTAIN] = HintText::Region({ - //obscure text - Text{"a #Great Fairy Fountain#", /*french*/"une #Fontaine Royale des Fées#", /*spanish*/"una fuente de la Gran Hada"}, - }); + // obscure text + Text{ "a #Great Fairy Fountain#", /*french*/ "une #Fontaine Royale des Fées#", + /*spanish*/ "una fuente de la Gran Hada" }, + }); hintTable[DMT_GREAT_FAIRY_FOUNTAIN] = HintText::Region({ - //obscure text - Text{"a #Great Fairy Fountain#", /*french*/"une #Fontaine Royale des Fées#", /*spanish*/"una fuente de la Gran Hada"}, - }); + // obscure text + Text{ "a #Great Fairy Fountain#", /*french*/ "une #Fontaine Royale des Fées#", + /*spanish*/ "una fuente de la Gran Hada" }, + }); hintTable[ZF_GREAT_FAIRY_FOUNTAIN] = HintText::Region({ - //obscure text - Text{"a #Great Fairy Fountain#", /*french*/"une #Fontaine Royale des Fées#", /*spanish*/"una fuente de la Gran Hada"}, - }); + // obscure text + Text{ "a #Great Fairy Fountain#", /*french*/ "une #Fontaine Royale des Fées#", + /*spanish*/ "una fuente de la Gran Hada" }, + }); hintTable[GRAVEYARD_SHIELD_GRAVE] = HintText::Region({ - //obscure text - Text{"a #grave with a free chest#", /*french*/"le #tombeau avec un trésor#", /*spanish*/"la #tumba con un cofre#"}, - }); + // obscure text + Text{ "a #grave with a free chest#", /*french*/ "le #tombeau avec un trésor#", + /*spanish*/ "la #tumba con un cofre#" }, + }); hintTable[GRAVEYARD_HEART_PIECE_GRAVE] = HintText::Region({ - //obscure text - Text{"a chest spawned by #Sun's Song#", /*french*/"un #coffre apparaît avec le Chant du Soleil#", /*spanish*/"la #tumba de la Canción del Sol#"}, - }); + // obscure text + Text{ "a chest spawned by #Sun's Song#", /*french*/ "un #coffre apparaît avec le Chant du Soleil#", + /*spanish*/ "la #tumba de la Canción del Sol#" }, + }); hintTable[GRAVEYARD_COMPOSERS_GRAVE] = HintText::Region({ - //obscure text - Text{"the #Composers' Grave#", /*french*/"la #Tombe royale#", /*spanish*/"el #Panteón Real#"}, - }); + // obscure text + Text{ "the #Composers' Grave#", /*french*/ "la #Tombe royale#", /*spanish*/ "el #Panteón Real#" }, + }); hintTable[GRAVEYARD_DAMPES_GRAVE] = HintText::Region({ - //obscure text - Text{"Dampé's Grave", /*french*/"la #Tombe d'Igor#", /*spanish*/"la #tumba de Dampé#"}, - }); + // obscure text + Text{ "Dampé's Grave", /*french*/ "la #Tombe d'Igor#", /*spanish*/ "la #tumba de Dampé#" }, + }); hintTable[DMT_COW_GROTTO] = HintText::Region({ - //obscure text - Text{"a solitary #Cow#", /*french*/"la #grotte avec une vache#", /*spanish*/"una #vaca# solitaria"}, - }); + // obscure text + Text{ "a solitary #Cow#", /*french*/ "la #grotte avec une vache#", /*spanish*/ "una #vaca# solitaria" }, + }); hintTable[HC_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"a sandy grotto with #fragile walls#", /*french*/"la #grotte avec des murs fragiles#", /*spanish*/"la arenosa gruta de #frágiles paredes#"}, - }); + // obscure text + Text{ "a sandy grotto with #fragile walls#", /*french*/ "la #grotte avec des murs fragiles#", + /*spanish*/ "la arenosa gruta de #frágiles paredes#" }, + }); hintTable[HF_TEKTITE_GROTTO] = HintText::Region({ - //obscure text - Text{"a pool guarded by a #Tektite#", /*french*/"l'#étang sous-terrain avec un Araknon#", /*spanish*/"un charco custodiado por un #Tektite#"}, - }); + // obscure text + Text{ "a pool guarded by a #Tektite#", /*french*/ "l'#étang sous-terrain avec un Araknon#", + /*spanish*/ "un charco custodiado por un #Tektite#" }, + }); hintTable[HF_NEAR_KAK_GROTTO] = HintText::Region({ - //obscure text - Text{"a #Big Skulltula# guarding a Gold one", /*french*/"la #grotte d'araignées#", /*spanish*/"una #gran Skulltula# custodiando una dorada"}, - }); + // obscure text + Text{ "a #Big Skulltula# guarding a Gold one", /*french*/ "la #grotte d'araignées#", + /*spanish*/ "una #gran Skulltula# custodiando una dorada" }, + }); hintTable[HF_COW_GROTTO] = HintText::Region({ - //obscure text - Text{"a grotto full of #spider webs#", /*french*/"la #grotte couverte de toiles d'araignées#", /*spanish*/"una gruta llena de #telarañas#"}, - }); + // obscure text + Text{ "a grotto full of #spider webs#", /*french*/ "la #grotte couverte de toiles d'araignées#", + /*spanish*/ "una gruta llena de #telarañas#" }, + }); hintTable[KAK_REDEAD_GROTTO] = HintText::Region({ - //obscure text - Text{"#ReDeads# guarding a chest", /*french*/"le tombeau de #deux morts#", /*spanish*/"los #ReDeads# que custodian un cofre"}, - }); + // obscure text + Text{ "#ReDeads# guarding a chest", /*french*/ "le tombeau de #deux morts#", + /*spanish*/ "los #ReDeads# que custodian un cofre" }, + }); hintTable[SFM_WOLFOS_GROTTO] = HintText::Region({ - //obscure text - Text{"#Wolfos# guarding a chest", /*french*/"la #grotte iridescente#", /*spanish*/"los #Wolfos# que custodian un cofre"}, - }); + // obscure text + Text{ "#Wolfos# guarding a chest", /*french*/ "la #grotte iridescente#", + /*spanish*/ "los #Wolfos# que custodian un cofre" }, + }); hintTable[GV_OCTOROK_GROTTO] = HintText::Region({ - //obscure text - Text{"an #Octorok# guarding a rich pool", /*french*/"un #étang sous-terrain avec un Octorok#", /*spanish*/"un #Octorok# que custodia un lujoso charco"}, - }); + // obscure text + Text{ "an #Octorok# guarding a rich pool", /*french*/ "un #étang sous-terrain avec un Octorok#", + /*spanish*/ "un #Octorok# que custodia un lujoso charco" }, + }); hintTable[DEKU_THEATER] = HintText::Region({ - //obscure text - Text{"the #Lost Woods Stage#", /*french*/"le #théâtre sylvestre#", /*spanish*/"el #escenario del Bosque Perdido#"}, - }); + // obscure text + Text{ "the #Lost Woods Stage#", /*french*/ "le #théâtre sylvestre#", + /*spanish*/ "el #escenario del Bosque Perdido#" }, + }); hintTable[ZR_OPEN_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[DMC_UPPER_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[DMT_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[KAK_OPEN_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[HF_NEAR_MARKET_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[HF_OPEN_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[HF_SOUTHEAST_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[KF_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[LW_NEAR_SHORTCUTS_GROTTO] = HintText::Region({ - //obscure text - Text{"a #generic grotto#", /*french*/"une #grotte avec un trésor#", /*spanish*/"una #cueva genérica#"}, - }); + // obscure text + Text{ "a #generic grotto#", /*french*/ "une #grotte avec un trésor#", /*spanish*/ "una #cueva genérica#" }, + }); hintTable[HF_INSIDE_FENCE_GROTTO] = HintText::Region({ - //obscure text - Text{"a #single Upgrade Deku Scrub#", /*french*/"une #grotte avec une peste Mojo#", /*spanish*/"una cueva con un #solitario mercader deku#"}, - }); + // obscure text + Text{ "a #single Upgrade Deku Scrub#", /*french*/ "une #grotte avec une peste Mojo#", + /*spanish*/ "una cueva con un #solitario mercader deku#" }, + }); hintTable[LW_SCRUBS_GROTTO] = HintText::Region({ - //obscure text - Text{"#2 Deku Scrubs# including an Upgrade one", /*french*/"une #grotte avec deux pestes Mojo#", /*spanish*/"una cueva con #dos mercaderes deku#"}, - }); + // obscure text + Text{ "#2 Deku Scrubs# including an Upgrade one", /*french*/ "une #grotte avec deux pestes Mojo#", + /*spanish*/ "una cueva con #dos mercaderes deku#" }, + }); hintTable[COLOSSUS_GROTTO] = HintText::Region({ - //obscure text - Text{"2 Deku Scrubs", /*french*/"une #grotte avec deux pestes Mojo#", /*spanish*/"una cueva con #dos mercaderes deku#"}, - }); + // obscure text + Text{ "2 Deku Scrubs", /*french*/ "une #grotte avec deux pestes Mojo#", + /*spanish*/ "una cueva con #dos mercaderes deku#" }, + }); hintTable[ZR_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"2 Deku Scrubs", /*french*/"une #grotte avec deux pestes Mojo#", /*spanish*/"una cueva con #dos mercaderes deku#"}, - }); + // obscure text + Text{ "2 Deku Scrubs", /*french*/ "une #grotte avec deux pestes Mojo#", + /*spanish*/ "una cueva con #dos mercaderes deku#" }, + }); hintTable[SFM_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"2 Deku Scrubs", /*french*/"une #grotte avec deux pestes Mojo#", /*spanish*/"una cueva con #dos mercaderes deku#"}, - }); + // obscure text + Text{ "2 Deku Scrubs", /*french*/ "une #grotte avec deux pestes Mojo#", + /*spanish*/ "una cueva con #dos mercaderes deku#" }, + }); hintTable[GV_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"2 Deku Scrubs", /*french*/"une #grotte avec deux pestes Mojo#", /*spanish*/"una cueva con #dos mercaderes deku#"}, - }); + // obscure text + Text{ "2 Deku Scrubs", /*french*/ "une #grotte avec deux pestes Mojo#", + /*spanish*/ "una cueva con #dos mercaderes deku#" }, + }); hintTable[LH_GROTTO] = HintText::Region({ - //obscure text - Text{"3 Deku Scrubs", /*french*/"une #grotte avec trois pestes Mojo#", /*spanish*/"una cueva con #tres mercaderes deku#"}, - }); + // obscure text + Text{ "3 Deku Scrubs", /*french*/ "une #grotte avec trois pestes Mojo#", + /*spanish*/ "una cueva con #tres mercaderes deku#" }, + }); hintTable[DMC_HAMMER_GROTTO] = HintText::Region({ - //obscure text - Text{"3 Deku Scrubs", /*french*/"une #grotte avec trois pestes Mojo#", /*spanish*/"una cueva con #tres mercaderes deku#"}, - }); + // obscure text + Text{ "3 Deku Scrubs", /*french*/ "une #grotte avec trois pestes Mojo#", + /*spanish*/ "una cueva con #tres mercaderes deku#" }, + }); hintTable[GC_GROTTO] = HintText::Region({ - //obscure text - Text{"3 Deku Scrubs", /*french*/"une #grotte avec trois pestes Mojo#", /*spanish*/"una cueva con #tres mercaderes deku#"}, - }); + // obscure text + Text{ "3 Deku Scrubs", /*french*/ "une #grotte avec trois pestes Mojo#", + /*spanish*/ "una cueva con #tres mercaderes deku#" }, + }); hintTable[LLR_GROTTO] = HintText::Region({ - //obscure text - Text{"3 Deku Scrubs", /*french*/"une #grotte avec trois pestes Mojo#", /*spanish*/"una cueva con #tres mercaderes deku#"}, - }); + // obscure text + Text{ "3 Deku Scrubs", /*french*/ "une #grotte avec trois pestes Mojo#", + /*spanish*/ "una cueva con #tres mercaderes deku#" }, + }); hintTable[ZR_FAIRY_GROTTO] = HintText::Region({ - //obscure text - Text{"a small #Fairy Fountain#", /*french*/"une #fontaine de fées#", /*spanish*/"una pequeña #fuente de hadas#"}, - }); + // obscure text + Text{ "a small #Fairy Fountain#", /*french*/ "une #fontaine de fées#", + /*spanish*/ "una pequeña #fuente de hadas#" }, + }); hintTable[HF_FAIRY_GROTTO] = HintText::Region({ - //obscure text - Text{"a small #Fairy Fountain#", /*french*/"une #fontaine de fées#", /*spanish*/"una pequeña #fuente de hadas#"}, - }); + // obscure text + Text{ "a small #Fairy Fountain#", /*french*/ "une #fontaine de fées#", + /*spanish*/ "una pequeña #fuente de hadas#" }, + }); hintTable[SFM_FAIRY_GROTTO] = HintText::Region({ - //obscure text - Text{"a small #Fairy Fountain#", /*french*/"une #fontaine de fées#", /*spanish*/"una pequeña #fuente de hadas#"}, - }); + // obscure text + Text{ "a small #Fairy Fountain#", /*french*/ "une #fontaine de fées#", + /*spanish*/ "una pequeña #fuente de hadas#" }, + }); hintTable[ZD_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"a small #Fairy Fountain#", /*french*/"une #fontaine de fées#", /*spanish*/"una pequeña #fuente de hadas#"}, - }); + // obscure text + Text{ "a small #Fairy Fountain#", /*french*/ "une #fontaine de fées#", + /*spanish*/ "una pequeña #fuente de hadas#" }, + }); hintTable[GF_STORMS_GROTTO] = HintText::Region({ - //obscure text - Text{"a small #Fairy Fountain#", /*french*/"une #fontaine de fées#", /*spanish*/"una pequeña #fuente de hadas#"}, - }); + // obscure text + Text{ "a small #Fairy Fountain#", /*french*/ "une #fontaine de fées#", + /*spanish*/ "una pequeña #fuente de hadas#" }, + }); /*-------------------------- | JUNK HINT TEXT | ---------------------------*/ hintTable[JUNK01] = HintText::Junk({ - //obscure text - Text{"Remember to check your 3DS battery level&and save often.", /*french*/"Surveillez votre batterie 3DS et sauvegardez souvent!", /*spanish*/"No te olvides de revisar la batería de la 3DS y guarda partida de vez en cuando."}, + // obscure text + Text{ "Remember to check your 3DS battery level&and save often.", + /*french*/ "Surveillez votre batterie 3DS et sauvegardez souvent!", + /*spanish*/ "No te olvides de revisar la batería de la 3DS y guarda partida de vez en cuando." }, }); hintTable[JUNK02] = HintText::Junk({ - //obscure text - Text{"They say you must read the names of \"Special Deal\" shop items carefully.", /*french*/"Selon moi, les « Offres spéciales » sont parfois trompeuses... Lisez attentivement!", /*spanish*/"Según dicen, se debería prestar atención a los nombres de las ofertas especiales."}, + // obscure text + Text{ "They say you must read the names of \"Special Deal\" shop items carefully.", + /*french*/ "Selon moi, les « Offres spéciales » sont parfois trompeuses... Lisez attentivement!", + /*spanish*/ "Según dicen, se debería prestar atención a los nombres de las ofertas especiales." }, }); hintTable[JUNK03] = HintText::Junk({ - //obscure text - Text{"They say that Zelda is a poor leader.", /*french*/"Selon moi, Zelda ne ferait pas un bon monarque.", /*spanish*/"Según dicen, Zelda es mala líder."}, + // obscure text + Text{ "They say that Zelda is a poor leader.", /*french*/ "Selon moi, Zelda ne ferait pas un bon monarque.", + /*spanish*/ "Según dicen, Zelda es mala líder." }, }); hintTable[JUNK04] = HintText::Junk({ - //obscure text - Text{"These hints can be quite useful. This is an exception.", /*french*/"Ces indices sont très utiles, à l'exception de celui-ci.", /*spanish*/"Las pistas suelen servir de ayuda. En cambio, esta no."}, + // obscure text + Text{ "These hints can be quite useful. This is an exception.", + /*french*/ "Ces indices sont très utiles, à l'exception de celui-ci.", + /*spanish*/ "Las pistas suelen servir de ayuda. En cambio, esta no." }, }); hintTable[JUNK05] = HintText::Junk({ - //obscure text - Text{"They say that the Lizalfos in Dodongo's Cavern like to play in lava.", /*french*/"Selon moi, les Lézalfos de la Caverne Dodongo aiment patauger dans la lave.", /*spanish*/"Según dicen, a los Lizalfos de la Cueva de los Dodongos les gusta jugar en la lava."}, + // obscure text + Text{ "They say that the Lizalfos in Dodongo's Cavern like to play in lava.", + /*french*/ "Selon moi, les Lézalfos de la Caverne Dodongo aiment patauger dans la lave.", + /*spanish*/ "Según dicen, a los Lizalfos de la Cueva de los Dodongos les gusta jugar en la lava." }, }); hintTable[JUNK06] = HintText::Junk({ - //obscure text - Text{"They say that all the Zora drowned in Wind Waker.", /*french*/"Selon moi, les Zoras se sont noyés dans Wind Waker.", /*spanish*/"Según dicen, en Wind Waker todos los zora se ahogaron."}, + // obscure text + Text{ "They say that all the Zora drowned in Wind Waker.", + /*french*/ "Selon moi, les Zoras se sont noyés dans Wind Waker.", + /*spanish*/ "Según dicen, en Wind Waker todos los zora se ahogaron." }, }); hintTable[JUNK07] = HintText::Junk({ - //obscure text - Text{"If Gorons eat rocks, does that mean I'm in danger?", /*french*/"Ne dis pas au Gorons que je suis ici. Ils mangent des roches, tu sais!", /*spanish*/"Si los Goron se tragan las piedras, ¿no me hace ser una especia vulnarable o algo así"}, + // obscure text + Text{ "If Gorons eat rocks, does that mean I'm in danger?", + /*french*/ "Ne dis pas au Gorons que je suis ici. Ils mangent des roches, tu sais!", + /*spanish*/ "Si los Goron se tragan las piedras, ¿no me hace ser una especia vulnarable o algo así" }, }); hintTable[JUNK08] = HintText::Junk({ - //obscure text - Text{"'Member when Ganon was a blue pig?^I 'member.", /*french*/"Dans mon temps, Ganon était un cochon bleu...^Pff! Les jeunes de nos jours, et leur Ganondorf!", /*spanish*/"¿T'acuerdas cuando Ganon era un cerdo azul?^Qué tiempos, chico."}, + // obscure text + Text{ + "'Member when Ganon was a blue pig?^I 'member.", + /*french*/ "Dans mon temps, Ganon était un cochon bleu...^Pff! Les jeunes de nos jours, et leur Ganondorf!", + /*spanish*/ "¿T'acuerdas cuando Ganon era un cerdo azul?^Qué tiempos, chico." }, }); hintTable[JUNK09] = HintText::Junk({ - //obscure text - Text{"One who does not have Triforce can't go in.", /*french*/"Ceux sans Triforce doivent rebrousser chemin.", /*spanish*/"Aquel que no porte la Trifuerza no podrá pasar."}, + // obscure text + Text{ "One who does not have Triforce can't go in.", /*french*/ "Ceux sans Triforce doivent rebrousser chemin.", + /*spanish*/ "Aquel que no porte la Trifuerza no podrá pasar." }, }); hintTable[JUNK10] = HintText::Junk({ - //obscure text - Text{"Save your future, end the Happy Mask Salesman.", /*french*/"Selon moi, tu t'éviteras des jours de malheur si tu vaincs le vendeur de masques...", /*spanish*/"Salva tu futuro, acaba con el dueño de La Máscara Feliz."}, + // obscure text + Text{ "Save your future, end the Happy Mask Salesman.", + /*french*/ "Selon moi, tu t'éviteras des jours de malheur si tu vaincs le vendeur de masques...", + /*spanish*/ "Salva tu futuro, acaba con el dueño de La Máscara Feliz." }, }); hintTable[JUNK11] = HintText::Junk({ - //obscure text - Text{"Glitches are a pathway to many abilities some consider to be... Unnatural.", /*french*/"Les glitchs sont un moyen d'acquérir de nombreuses facultés considérées par certains comme... contraire à la nature.", /*spanish*/"Los glitches son el camino a muchas habilidades que varios consideran... nada natural."}, + // obscure text + Text{ "Glitches are a pathway to many abilities some consider to be... Unnatural.", /*french*/ + "Les glitchs sont un moyen d'acquérir de nombreuses facultés considérées par certains comme... contraire " + "à la nature.", + /*spanish*/ "Los glitches son el camino a muchas habilidades que varios consideran... nada natural." }, }); hintTable[JUNK12] = HintText::Junk({ - //obscure text - Text{"I'm stoned. Get it?", /*french*/"Allez, roche, papier, ciseau...&Roche.", /*spanish*/"Me he quedado de piedra. ¿Lo pillas?"}, + // obscure text + Text{ "I'm stoned. Get it?", /*french*/ "Allez, roche, papier, ciseau...&Roche.", + /*spanish*/ "Me he quedado de piedra. ¿Lo pillas?" }, }); hintTable[JUNK13] = HintText::Junk({ - //obscure text - Text{"Hoot! Hoot! Would you like me to repeat that?", /*french*/"Hou hou! Veux-tu que je répète tout ça?", /*spanish*/"¡Buuu, buuu! ¿Te lo vuelvo a repetir?"}, + // obscure text + Text{ "Hoot! Hoot! Would you like me to repeat that?", /*french*/ "Hou hou! Veux-tu que je répète tout ça?", + /*spanish*/ "¡Buuu, buuu! ¿Te lo vuelvo a repetir?" }, }); hintTable[JUNK14] = HintText::Junk({ - //obscure text - Text{"Gorons are stupid. They eat rocks.", /*french*/"Les Gorons sont des vraies têtes dures.", /*spanish*/"Los Goron son tontos. Se comen las piedras."}, + // obscure text + Text{ "Gorons are stupid. They eat rocks.", /*french*/ "Les Gorons sont des vraies têtes dures.", + /*spanish*/ "Los Goron son tontos. Se comen las piedras." }, }); hintTable[JUNK15] = HintText::Junk({ - //obscure text - Text{"They say that Lon Lon Ranch prospered under Ingo.", /*french*/"Selon moi, le Ranch Lon Lon était plus prospère sous Ingo.", /*spanish*/"Según dicen, el Rancho Lon Lon prosperó gracias a Ingo."}, + // obscure text + Text{ "They say that Lon Lon Ranch prospered under Ingo.", + /*french*/ "Selon moi, le Ranch Lon Lon était plus prospère sous Ingo.", + /*spanish*/ "Según dicen, el Rancho Lon Lon prosperó gracias a Ingo." }, }); hintTable[JUNK16] = HintText::Junk({ - //obscure text - Text{"The single rupee is a unique item.", /*french*/"Nul objet n'est plus unique que le rubis vert.", /*spanish*/"La rupia de uno es un objeto singular."}, + // obscure text + Text{ "The single rupee is a unique item.", /*french*/ "Nul objet n'est plus unique que le rubis vert.", + /*spanish*/ "La rupia de uno es un objeto singular." }, }); hintTable[JUNK17] = HintText::Junk({ - //obscure text - Text{"Without the Lens of Truth, the Treasure Chest Mini-Game is a 1 out of 32 chance.^Good luck!", /*french*/"Gagner la Chasse-aux-Trésors est 1 chance sur 32.^Bonne chance!", /*spanish*/"Sin la Lupa de la Verdad, ganarías 1/32 veces en el Cofre del Tesoro.^¡Buena suerte con ello!"}, + // obscure text + Text{ "Without the Lens of Truth, the Treasure Chest Mini-Game is a 1 out of 32 chance.^Good luck!", + /*french*/ "Gagner la Chasse-aux-Trésors est 1 chance sur 32.^Bonne chance!", /*spanish*/ + "Sin la Lupa de la Verdad, ganarías 1/32 veces en el Cofre del Tesoro.^¡Buena suerte con ello!" }, }); hintTable[JUNK18] = HintText::Junk({ - //obscure text - Text{"Use bombs wisely.", /*french*/"Utilise les bombes avec précaution.", /*spanish*/"No desperdicies las bombas."}, + // obscure text + Text{ "Use bombs wisely.", /*french*/ "Utilise les bombes avec précaution.", + /*spanish*/ "No desperdicies las bombas." }, }); hintTable[JUNK19] = HintText::Junk({ - //obscure text - Text{"They say that Volvagia hates splinters", /*french*/"Selon moi, Volvagia déteste les échardes.", /*spanish*/"Según dicen, Volvagia le teme a las astillas."}, + // obscure text + Text{ "They say that Volvagia hates splinters", /*french*/ "Selon moi, Volvagia déteste les échardes.", + /*spanish*/ "Según dicen, Volvagia le teme a las astillas." }, }); hintTable[JUNK20] = HintText::Junk({ - //obscure text - Text{"They say that funky monkeys can be spotted on Friday.", /*french*/"Selon moi, des capucins coquins sortent le vendredi.", /*spanish*/"Según dicen, en los viernes puedes hallar monos marchosos."}, + // obscure text + Text{ "They say that funky monkeys can be spotted on Friday.", + /*french*/ "Selon moi, des capucins coquins sortent le vendredi.", + /*spanish*/ "Según dicen, en los viernes puedes hallar monos marchosos." }, }); hintTable[JUNK21] = HintText::Junk({ - //obscure text - Text{"I found you, faker!", /*french*/"Ah-ha! Je t'ai trouvé!", /*spanish*/"¡Ahí estás, impostor!"}, + // obscure text + Text{ "I found you, faker!", /*french*/ "Ah-ha! Je t'ai trouvé!", /*spanish*/ "¡Ahí estás, impostor!" }, }); hintTable[JUNK22] = HintText::Junk({ - //obscure text - Text{"They say the Groose is loose.", /*french*/"Selon moi, Hergo est le vrai héros.", /*spanish*/"Según dicen, Malton es un espanto."}, + // obscure text + Text{ "They say the Groose is loose.", /*french*/ "Selon moi, Hergo est le vrai héros.", + /*spanish*/ "Según dicen, Malton es un espanto." }, }); hintTable[JUNK23] = HintText::Junk({ - //obscure text - Text{"They say that players who select the \"ON\" option for \"MOTION CONTROL\" are the real \"Zelda players!\"", /*french*/"Selon moi, ceux qui utilisent les contrôles gyroscopiques sont les VRAIS joueurs.", /*spanish*/"Según dicen, aquellos que juegan usando el control por movimiento son los verdaderos jugadores de Zelda."}, + // obscure text + Text{ + "They say that players who select the \"ON\" option for \"MOTION CONTROL\" are the real \"Zelda players!\"", + /*french*/ "Selon moi, ceux qui utilisent les contrôles gyroscopiques sont les VRAIS joueurs.", /*spanish*/ + "Según dicen, aquellos que juegan usando el control por movimiento son los verdaderos jugadores de " + "Zelda." }, }); hintTable[JUNK24] = HintText::Junk({ - //obscure text - Text{"What happened to Sheik?", /*french*/"Donc... Qu'est-ce qui arrive avec Sheik?", /*spanish*/"¿Qué la habrá pasado a Sheik?"}, + // obscure text + Text{ "What happened to Sheik?", /*french*/ "Donc... Qu'est-ce qui arrive avec Sheik?", + /*spanish*/ "¿Qué la habrá pasado a Sheik?" }, }); hintTable[JUNK25] = HintText::Junk({ - //obscure text - Text{"L2P @.", /*french*/"Arrête de lire les indices et joue comme un grand, @.", /*spanish*/"Mira que eres novato, @."}, + // obscure text + Text{ "L2P @.", /*french*/ "Arrête de lire les indices et joue comme un grand, @.", + /*spanish*/ "Mira que eres novato, @." }, }); hintTable[JUNK26] = HintText::Junk({ - //obscure text - Text{"I've heard you can cheat at Sploosh Kaboom.", /*french*/"Selon moi, il y a une carte aux trésors à Mercantîle... Duh!", /*spanish*/"He oído por ahí que puedes hacer trampa en el Sploosh Kaboom."}, + // obscure text + Text{ "I've heard you can cheat at Sploosh Kaboom.", + /*french*/ "Selon moi, il y a une carte aux trésors à Mercantîle... Duh!", + /*spanish*/ "He oído por ahí que puedes hacer trampa en el Sploosh Kaboom." }, }); hintTable[JUNK27] = HintText::Junk({ - //obscure text - Text{"I'm Lonk from Pennsylvania.", /*french*/"Je suis Lonk, le héros de Pennsylvanie!", /*spanish*/"Soy Lonk, de Pensilvania."}, + // obscure text + Text{ "I'm Lonk from Pennsylvania.", /*french*/ "Je suis Lonk, le héros de Pennsylvanie!", + /*spanish*/ "Soy Lonk, de Pensilvania." }, }); hintTable[JUNK28] = HintText::Junk({ - //obscure text - Text{"I bet you'd like to have more bombs.", /*french*/"Je parie que tu veux plus de bombes.", /*spanish*/"Me apuesto a que quisieras tener más bombas."}, + // obscure text + Text{ "I bet you'd like to have more bombs.", /*french*/ "Je parie que tu veux plus de bombes.", + /*spanish*/ "Me apuesto a que quisieras tener más bombas." }, }); hintTable[JUNK29] = HintText::Junk({ - //obscure text - Text{"When all else fails, use Fire.", /*french*/"Quand rien ne marche, utilise le feu.", /*spanish*/"Cuando nada funcione, usa el fuego."}, + // obscure text + Text{ "When all else fails, use Fire.", /*french*/ "Quand rien ne marche, utilise le feu.", + /*spanish*/ "Cuando nada funcione, usa el fuego." }, }); hintTable[JUNK30] = HintText::Junk({ - //obscure text - Text{"Here's a hint, @. Don't be bad.", /*french*/"Selon moi, la #Triforce# n'est pas dans le jeu... Duh!", /*spanish*/"Aquí tienes una pista, @: deja de ser manco."}, + // obscure text + Text{ "Here's a hint, @. Don't be bad.", /*french*/ "Selon moi, la #Triforce# n'est pas dans le jeu... Duh!", + /*spanish*/ "Aquí tienes una pista, @: deja de ser manco." }, }); hintTable[JUNK31] = HintText::Junk({ - //obscure text - Text{"Game Over. Return of Ganon.", /*french*/"Partie terminée. RETour de Ganon.", /*spanish*/"Fin de la partida. El regreso de Ganon."}, + // obscure text + Text{ "Game Over. Return of Ganon.", /*french*/ "Partie terminée. RETour de Ganon.", + /*spanish*/ "Fin de la partida. El regreso de Ganon." }, }); hintTable[JUNK32] = HintText::Junk({ - //obscure text - Text{"May the way of the Hero lead to the Triforce.", /*french*/"Que le chemin du héros te mène à la Triforce.", /*spanish*/"Puede que la senda del héroe te lleve hacia la Trifuerza."}, + // obscure text + Text{ "May the way of the Hero lead to the Triforce.", + /*french*/ "Que le chemin du héros te mène à la Triforce.", + /*spanish*/ "Puede que la senda del héroe te lleve hacia la Trifuerza." }, }); hintTable[JUNK33] = HintText::Junk({ - //obscure text - Text{"Can't find an item? Scan an Amiibo.", /*french*/"Tu cherches de quoi? Utilise un Amiibo!", /*spanish*/"¿No encuentras algo? Escanea un amiibo."}, + // obscure text + Text{ "Can't find an item? Scan an Amiibo.", /*french*/ "Tu cherches de quoi? Utilise un Amiibo!", + /*spanish*/ "¿No encuentras algo? Escanea un amiibo." }, }); hintTable[JUNK34] = HintText::Junk({ - //obscure text - Text{"They say this game has just a few glitches.", /*french*/"Selon moi, ce jeu est complètement exempt de glitchs.", /*spanish*/"Dicen que este juego apenas tiene glitches."}, + // obscure text + Text{ "They say this game has just a few glitches.", + /*french*/ "Selon moi, ce jeu est complètement exempt de glitchs.", + /*spanish*/ "Dicen que este juego apenas tiene glitches." }, }); hintTable[JUNK35] = HintText::Junk({ - //obscure text - Text{"BRRING BRRING This is Ulrira. Wrong number?", /*french*/"DRING DRING!! Pépé le Ramollo à l'appareil... Quoi? Faux numéro?", /*spanish*/"¡Ring! ¡Ring! Al habla Ulrira. ¿Me he equivocado de número?"}, + // obscure text + Text{ "BRRING BRRING This is Ulrira. Wrong number?", + /*french*/ "DRING DRING!! Pépé le Ramollo à l'appareil... Quoi? Faux numéro?", + /*spanish*/ "¡Ring! ¡Ring! Al habla Ulrira. ¿Me he equivocado de número?" }, }); hintTable[JUNK36] = HintText::Junk({ - //obscure text - Text{"Tingle Tingle Kooloo Limpah!", /*french*/"Tingle! Tingle! Kooloolin... Pah!", /*spanish*/"Tingle, Tingle, Kurulín... ¡PA!"}, + // obscure text + Text{ "Tingle Tingle Kooloo Limpah!", /*french*/ "Tingle! Tingle! Kooloolin... Pah!", + /*spanish*/ "Tingle, Tingle, Kurulín... ¡PA!" }, }); hintTable[JUNK37] = HintText::Junk({ - //obscure text - Text{"L is real 2401", /*french*/"L is real 2401", /*spanish*/"L es real 2401."}, + // obscure text + Text{ "L is real 2401", /*french*/ "L is real 2401", /*spanish*/ "L es real 2401." }, }); hintTable[JUNK38] = HintText::Junk({ - //obscure text - Text{"They say that Ganondorf will appear in the next Mario Tennis.", /*french*/"Selon moi, Ganondorf sera la nouvelle recrue dans Mario Tennis.", /*spanish*/"Según dicen, Ganondorf estará en el próximo Mario Tennis."}, + // obscure text + Text{ "They say that Ganondorf will appear in the next Mario Tennis.", + /*french*/ "Selon moi, Ganondorf sera la nouvelle recrue dans Mario Tennis.", + /*spanish*/ "Según dicen, Ganondorf estará en el próximo Mario Tennis." }, }); hintTable[JUNK39] = HintText::Junk({ - //obscure text - Text{"Medigoron sells the earliest Breath of the Wild demo.", /*french*/"Selon moi, Medigoron vend une démo de #Breath of the Wild#.", /*spanish*/"Medigoron vende la primera demo del Breath of the Wild."}, + // obscure text + Text{ "Medigoron sells the earliest Breath of the Wild demo.", + /*french*/ "Selon moi, Medigoron vend une démo de #Breath of the Wild#.", + /*spanish*/ "Medigoron vende la primera demo del Breath of the Wild." }, }); hintTable[JUNK40] = HintText::Junk({ - //obscure text - Text{"Can you move me? I don't get great service here.", /*french*/"Peux-tu me déplacer? J'ai pas une bonne réception ici.", /*spanish*/"¿Puedes llevarme a otro lado? Aquí nadie me presta atención."}, + // obscure text + Text{ "Can you move me? I don't get great service here.", + /*french*/ "Peux-tu me déplacer? J'ai pas une bonne réception ici.", + /*spanish*/ "¿Puedes llevarme a otro lado? Aquí nadie me presta atención." }, }); hintTable[JUNK41] = HintText::Junk({ - //obscure text - Text{"They say if you use Strength on the truck, you can find Mew.", /*french*/"Selon moi, #Mew# se trouve dessous le camion... Duh!", /*spanish*/"Según dicen, puedes hallar un Mew usando Fuerza contra el camión de Ciudad Carmín."}, + // obscure text + Text{ "They say if you use Strength on the truck, you can find Mew.", + /*french*/ "Selon moi, #Mew# se trouve dessous le camion... Duh!", + /*spanish*/ "Según dicen, puedes hallar un Mew usando Fuerza contra el camión de Ciudad Carmín." }, }); hintTable[JUNK42] = HintText::Junk({ - //obscure text - Text{"I'm a helpful hint Gossip Stone!^See, I'm helping.", /*french*/"Salut! Je suis une pierre de bons conseils!^Tiens, tu vois? J'aide bien, hein?", /*spanish*/"Soy una Piedra Sheikah muy útil.^¡Mira cómo te ayudo!"}, + // obscure text + Text{ "I'm a helpful hint Gossip Stone!^See, I'm helping.", + /*french*/ "Salut! Je suis une pierre de bons conseils!^Tiens, tu vois? J'aide bien, hein?", + /*spanish*/ "Soy una Piedra Sheikah muy útil.^¡Mira cómo te ayudo!" }, }); hintTable[JUNK43] = HintText::Junk({ - //obscure text - Text{"Dear @, please come to the castle. I've baked a cake for you.&Yours truly, Princess Zelda.", /*french*/"Mon très cher @:&Viens vite au château, je t'ai préparé&un délicieux gâteau...^À bientôt, Princesse Zelda", /*spanish*/"Querido @: Por favor, ven al castillo. He hecho una tarta para ti.&Sinceramente tuya: Princesa Zelda."}, + // obscure text + Text{ + "Dear @, please come to the castle. I've baked a cake for you.&Yours truly, Princess Zelda.", /*french*/ + "Mon très cher @:&Viens vite au château, je t'ai préparé&un délicieux gâteau...^À bientôt, Princesse Zelda", + /*spanish*/ + "Querido @: Por favor, ven al castillo. He hecho una tarta para ti.&Sinceramente tuya: Princesa Zelda." }, }); hintTable[JUNK44] = HintText::Junk({ - //obscure text - Text{"They say all toasters toast toast.", /*french*/"Selon moi, les grille-pains grillent du pain.", /*spanish*/"Según dicen, todas las tostadoras tostan tostadas tostadas."}, + // obscure text + Text{ "They say all toasters toast toast.", /*french*/ "Selon moi, les grille-pains grillent du pain.", + /*spanish*/ "Según dicen, todas las tostadoras tostan tostadas tostadas." }, }); hintTable[JUNK45] = HintText::Junk({ - //obscure text - Text{"You thought it would be a useful hint, but it was me, junk hint!", /*french*/"Tu t'attendais à un bon indice... Mais c'était moi, un mauvais indice!", /*spanish*/"Je... Creeías que iba a ser una piedra de utilidad, ¡pero no, era yo, la piedra de la agonía!"}, + // obscure text + Text{ "You thought it would be a useful hint, but it was me, junk hint!", + /*french*/ "Tu t'attendais à un bon indice... Mais c'était moi, un mauvais indice!", /*spanish*/ + "Je... Creeías que iba a ser una piedra de utilidad, ¡pero no, era yo, la piedra de la agonía!" }, }); hintTable[JUNK46] = HintText::Junk({ - //obscure text - Text{"They say that quest guidance can be found at a talking rock.", /*french*/"Selon moi, des #indices# se trouvent auprès d'une pierre parlante... Duh!", /*spanish*/"Según dicen, puedes consultarle ayuda a rocas parlanchinas."}, + // obscure text + Text{ "They say that quest guidance can be found at a talking rock.", + /*french*/ "Selon moi, des #indices# se trouvent auprès d'une pierre parlante... Duh!", + /*spanish*/ "Según dicen, puedes consultarle ayuda a rocas parlanchinas." }, }); hintTable[JUNK47] = HintText::Junk({ - //obscure text - Text{"They say that the final item you're looking for can be found somewhere in Hyrule.", /*french*/"Selon moi, le #dernier objet# se trouve quelque part dans Hyrule... Duh!", /*spanish*/"Según dicen, el último objeto que te falte puede estar en cualquier rincón de Hyrule."}, + // obscure text + Text{ "They say that the final item you're looking for can be found somewhere in Hyrule.", + /*french*/ "Selon moi, le #dernier objet# se trouve quelque part dans Hyrule... Duh!", + /*spanish*/ "Según dicen, el último objeto que te falte puede estar en cualquier rincón de Hyrule." }, }); hintTable[JUNK48] = HintText::Junk({ - //obscure text - Text{"Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.", /*french*/"Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.", /*spanish*/"Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep."}, + // obscure text + Text{ "Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.", + /*french*/ "Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.", + /*spanish*/ "Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep." }, }); hintTable[JUNK49] = HintText::Junk({ - //obscure text - Text{"They say that Barinade fears Deku Nuts.", /*french*/"Selon moi, Barinade a la frousse des noix Mojo.", /*spanish*/"Según dicen, lo que más teme a Barinade son las nueces deku."}, + // obscure text + Text{ "They say that Barinade fears Deku Nuts.", /*french*/ "Selon moi, Barinade a la frousse des noix Mojo.", + /*spanish*/ "Según dicen, lo que más teme a Barinade son las nueces deku." }, }); hintTable[JUNK50] = HintText::Junk({ - //obscure text - Text{"They say that Flare Dancers do not fear Goron-crafted blades.", /*french*/"Selon moi, le danse-flamme n'a pas peur des armes de Goron.", /*spanish*/"Según dicen, los Bailafuegos no le temen a las armas forjadas por Gorons."}, + // obscure text + Text{ "They say that Flare Dancers do not fear Goron-crafted blades.", + /*french*/ "Selon moi, le danse-flamme n'a pas peur des armes de Goron.", + /*spanish*/ "Según dicen, los Bailafuegos no le temen a las armas forjadas por Gorons." }, }); hintTable[JUNK51] = HintText::Junk({ - //obscure text - Text{"They say that Morpha is easily trapped in a corner.", /*french*/"Selon moi, Morpha est facilement coincé.", /*spanish*/"Según dicen, puedes atrapar a Morpha con facilidad en una esquina."}, + // obscure text + Text{ "They say that Morpha is easily trapped in a corner.", + /*french*/ "Selon moi, Morpha est facilement coincé.", + /*spanish*/ "Según dicen, puedes atrapar a Morpha con facilidad en una esquina." }, }); hintTable[JUNK52] = HintText::Junk({ - //obscure text - Text{"They say that Bongo Bongo really hates the cold.", /*french*/"Selon moi, Bongo Bongo a facilement froid aux doigts.", /*spanish*/"Según dicen, Bongo Bongo odia a muerte el frío."}, + // obscure text + Text{ "They say that Bongo Bongo really hates the cold.", + /*french*/ "Selon moi, Bongo Bongo a facilement froid aux doigts.", + /*spanish*/ "Según dicen, Bongo Bongo odia a muerte el frío." }, }); hintTable[JUNK53] = HintText::Junk({ - //obscure text - Text{"They say that your sword is most powerful when you put it away.", /*french*/"Selon moi, ton épée est à pleine puissance quand tu la rengaines.", /*spanish*/"Según dicen, tu espada se vuelve más poderosa si la guardas."}, + // obscure text + Text{ "They say that your sword is most powerful when you put it away.", + /*french*/ "Selon moi, ton épée est à pleine puissance quand tu la rengaines.", + /*spanish*/ "Según dicen, tu espada se vuelve más poderosa si la guardas." }, }); hintTable[JUNK54] = HintText::Junk({ - //obscure text - Text{"They say that bombing the hole Volvagia last flew into can be rewarding.", /*french*/"Selon moi, le trou où se creuse Volvagia est vulnérable aux bombes.", /*spanish*/"Según dicen, trae buena suerte colocar una bomba en el último agujero de donde salió Volvagia."}, + // obscure text + Text{ "They say that bombing the hole Volvagia last flew into can be rewarding.", + /*french*/ "Selon moi, le trou où se creuse Volvagia est vulnérable aux bombes.", /*spanish*/ + "Según dicen, trae buena suerte colocar una bomba en el último agujero de donde salió Volvagia." }, }); hintTable[JUNK55] = HintText::Junk({ - //obscure text - Text{"They say that invisible ghosts can be exposed with Deku Nuts.", /*french*/"Selon moi, des fantômes invisibles apparaissent avec des noix Mojo.", /*spanish*/"Según dicen, puedes exponer a los espectros invisibles con nueces deku."}, + // obscure text + Text{ "They say that invisible ghosts can be exposed with Deku Nuts.", + /*french*/ "Selon moi, des fantômes invisibles apparaissent avec des noix Mojo.", + /*spanish*/ "Según dicen, puedes exponer a los espectros invisibles con nueces deku." }, }); hintTable[JUNK56] = HintText::Junk({ - //obscure text - Text{"They say that the real Phantom Ganon is bright and loud.", /*french*/"Selon moi, le vrai spectre de Ganon est clair et bruyant.", /*spanish*/"Según dicen, el verdadero Ganon Fantasma es brillante y ruidoso."}, + // obscure text + Text{ "They say that the real Phantom Ganon is bright and loud.", + /*french*/ "Selon moi, le vrai spectre de Ganon est clair et bruyant.", + /*spanish*/ "Según dicen, el verdadero Ganon Fantasma es brillante y ruidoso." }, }); hintTable[JUNK57] = HintText::Junk({ - //obscure text - Text{"They say that walking backwards is very fast.", /*french*/"Selon moi, tu fais marche arrière très rapidement pour un héros.", /*spanish*/"Según dicen, es más rápido caminar hacia atrás."}, + // obscure text + Text{ "They say that walking backwards is very fast.", + /*french*/ "Selon moi, tu fais marche arrière très rapidement pour un héros.", + /*spanish*/ "Según dicen, es más rápido caminar hacia atrás." }, }); hintTable[JUNK58] = HintText::Junk({ - //obscure text - Text{"They say that leaping above the Market entrance enriches most children.", /*french*/"Selon moi, les enfants riches se pavanent en haut du pont-levis.", /*spanish*/"Según dicen, saltar por las cadenas a la entrada de la plaza enriquece a muchos chiquillos."}, + // obscure text + Text{ + "They say that leaping above the Market entrance enriches most children.", + /*french*/ "Selon moi, les enfants riches se pavanent en haut du pont-levis.", + /*spanish*/ "Según dicen, saltar por las cadenas a la entrada de la plaza enriquece a muchos chiquillos." }, }); hintTable[JUNK59] = HintText::Junk({ - //obscure text - Text{"They say Ingo is not very good at planning ahead.", /*french*/"Selon moi, Ingo ne fait pas un très bon geôlier.", /*spanish*/"Según dicen, a Ingo no se le da especialmente bien planificar con antelación."}, + // obscure text + Text{ "They say Ingo is not very good at planning ahead.", + /*french*/ "Selon moi, Ingo ne fait pas un très bon geôlier.", + /*spanish*/ "Según dicen, a Ingo no se le da especialmente bien planificar con antelación." }, }); hintTable[JUNK60] = HintText::Junk({ - //obscure text - Text{"You found a spiritual Stone! By which I mean, I worship Nayru.", /*french*/"Vous avez trouvé une Pierre Ancestrale! En effet, je vénère la déesse Hylia.", /*spanish*/"¡Has encontrado una piedra espiritual! Es que le rindo culto a Nayru..."}, + // obscure text + Text{ "You found a spiritual Stone! By which I mean, I worship Nayru.", + /*french*/ "Vous avez trouvé une Pierre Ancestrale! En effet, je vénère la déesse Hylia.", + /*spanish*/ "¡Has encontrado una piedra espiritual! Es que le rindo culto a Nayru..." }, }); hintTable[JUNK61] = HintText::Junk({ - //obscure text - Text{"They say that a flying strike with a Deku Stick is no stronger than a grounded one.", /*french*/"Selon moi, un coup de bâton sauté n'est pas meilleur qu'au sol.", /*spanish*/"Según dicen, los golpes aéreos con palos deku son tan fuertes como los normales."}, + // obscure text + Text{ "They say that a flying strike with a Deku Stick is no stronger than a grounded one.", + /*french*/ "Selon moi, un coup de bâton sauté n'est pas meilleur qu'au sol.", + /*spanish*/ "Según dicen, los golpes aéreos con palos deku son tan fuertes como los normales." }, }); hintTable[JUNK62] = HintText::Junk({ - //obscure text - Text{"Open your eyes.^Open your eyes.^Wake up, @.", /*french*/"Réveille-toi...^Réveille-toi.^Ouvre les yeux, @.", /*spanish*/"Abre los ojos...^Abre los ojos...^Despierta, @..."}, + // obscure text + Text{ "Open your eyes.^Open your eyes.^Wake up, @.", + /*french*/ "Réveille-toi...^Réveille-toi.^Ouvre les yeux, @.", + /*spanish*/ "Abre los ojos...^Abre los ojos...^Despierta, @..." }, }); hintTable[JUNK63] = HintText::Junk({ - //obscure text - Text{"They say that the Nocturne of Shadow can bring you very close to Ganon.", /*french*/"Selon moi, le nocturne de l'ombre peut t'amener très près de Ganon.", /*spanish*/"Según dicen, el Nocturno de la sombra te puede acercar mucho a Ganon."}, + // obscure text + Text{ "They say that the Nocturne of Shadow can bring you very close to Ganon.", + /*french*/ "Selon moi, le nocturne de l'ombre peut t'amener très près de Ganon.", + /*spanish*/ "Según dicen, el Nocturno de la sombra te puede acercar mucho a Ganon." }, }); hintTable[JUNK64] = HintText::Junk({ - //obscure text - Text{"They say that Twinrova always casts the same spell the first three times.", /*french*/"Selon moi, Twinrova lance toujours les mêmes trois premiers sorts.", /*spanish*/"Según dicen, Birova siempre lanza el mismo hechizo las tres primeras veces."}, + // obscure text + Text{ "They say that Twinrova always casts the same spell the first three times.", + /*french*/ "Selon moi, Twinrova lance toujours les mêmes trois premiers sorts.", + /*spanish*/ "Según dicen, Birova siempre lanza el mismo hechizo las tres primeras veces." }, }); hintTable[JUNK65] = HintText::Junk({ - //obscure text - Text{"They say that the nightly builds may be unstable.", /*french*/"Selon moi, les « nightly builds » peuvent être instables.", /*spanish*/"Según dicen, las últimas nightlies pueden llegar a ser algo inestables."}, + // obscure text + Text{ "They say that the nightly builds may be unstable.", + /*french*/ "Selon moi, les « nightly builds » peuvent être instables.", + /*spanish*/ "Según dicen, las últimas nightlies pueden llegar a ser algo inestables." }, }); hintTable[JUNK66] = HintText::Junk({ - //obscure text - Text{"You're playing a Randomizer. I'm randomized!^Here's a random number: #4#.&Enjoy your Randomizer!", /*french*/"Tu joues à un randomizer. Je suis aléatoire!^Voici un nombre aléatoire: #4#.&Bonne partie!", /*spanish*/"¡Estás jugando un Randomizer! ¡Yo también estoy aleatorizada!^Aquí tienes un número aleatorio: #8#.&¡Diviértete!"}, + // obscure text + Text{ "You're playing a Randomizer. I'm randomized!^Here's a random number: #4#.&Enjoy your Randomizer!", + /*french*/ "Tu joues à un randomizer. Je suis aléatoire!^Voici un nombre aléatoire: #4#.&Bonne partie!", + /*spanish*/ + "¡Estás jugando un Randomizer! ¡Yo también estoy aleatorizada!^Aquí tienes un número aleatorio: " + "#8#.&¡Diviértete!" }, }); hintTable[JUNK67] = HintText::Junk({ - //obscure text - Text{"They say Ganondorf's bolts can be reflected with glass or steel.", /*french*/"Selon moi, les éclairs de Ganon se reflètent sur l'acier et le verre.", /*spanish*/"Según dicen, puedes reflejar las esferas de energía de Ganondorf con cristal y acero."}, + // obscure text + Text{ "They say Ganondorf's bolts can be reflected with glass or steel.", + /*french*/ "Selon moi, les éclairs de Ganon se reflètent sur l'acier et le verre.", + /*spanish*/ "Según dicen, puedes reflejar las esferas de energía de Ganondorf con cristal y acero." }, }); hintTable[JUNK68] = HintText::Junk({ - //obscure text - Text{"They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, boomerangs...^...rods, shovels, iron balls, angry bees...", /*french*/"Selon moi, la queue de Ganon est vulnérable aux noix, flèches, épées, bombes, marteaux...^...bâtons, graines, boomerangs...^...baguettes, pelles, boulets de fer, abeilles enragées...", /*spanish*/"Según dicen, la cola de Ganon es vulnerable a nueces, flechas, espadas, explosivos, martillos...^...palos, semillas, bumeráns...^...cetros, palas, bolas de hierro, abejas..."}, + // obscure text + Text{ "They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, " + "boomerangs...^...rods, shovels, iron balls, angry bees...", + /*french*/ + "Selon moi, la queue de Ganon est vulnérable aux noix, flèches, épées, bombes, marteaux...^...bâtons, " + "graines, boomerangs...^...baguettes, pelles, boulets de fer, abeilles enragées...", + /*spanish*/ + "Según dicen, la cola de Ganon es vulnerable a nueces, flechas, espadas, explosivos, " + "martillos...^...palos, semillas, bumeráns...^...cetros, palas, bolas de hierro, abejas..." }, }); hintTable[JUNK69] = HintText::Junk({ - //obscure text - Text{"They say that you're wasting time reading this hint, but I disagree. Talk to me again!", /*french*/"Selon moi... tu sais quoi? Parle-moi encore, et je te le dirai!", /*spanish*/"Según dicen, pierdes el tiempo en leer esta pista, pero no pienso igual. ¡Vuelve a hablarme, ya verás!"}, + // obscure text + Text{ + "They say that you're wasting time reading this hint, but I disagree. Talk to me again!", + /*french*/ "Selon moi... tu sais quoi? Parle-moi encore, et je te le dirai!", /*spanish*/ + "Según dicen, pierdes el tiempo en leer esta pista, pero no pienso igual. ¡Vuelve a hablarme, ya verás!" }, }); hintTable[JUNK70] = HintText::Junk({ - //obscure text - Text{"They say Ganondorf knows where to find the instrument of his doom.", /*french*/"Selon moi, Ganondorf sait où il a caché son point faible.", /*spanish*/"Según dicen, Ganondorf sabe dónde hallar el instrumento de su perdición."}, + // obscure text + Text{ "They say Ganondorf knows where to find the instrument of his doom.", + /*french*/ "Selon moi, Ganondorf sait où il a caché son point faible.", + /*spanish*/ "Según dicen, Ganondorf sabe dónde hallar el instrumento de su perdición." }, }); hintTable[JUNK71] = HintText::Junk({ - //obscure text - Text{"I heard @ is pretty good at Zelda.", /*french*/"Apparemment, @ est super bon à Zelda.", /*spanish*/"He oído que a @ se le dan muy bien los Zelda."}, + // obscure text + Text{ "I heard @ is pretty good at Zelda.", /*french*/ "Apparemment, @ est super bon à Zelda.", + /*spanish*/ "He oído que a @ se le dan muy bien los Zelda." }, }); hintTable[JUNK72] = HintText::Junk({ - //obscure text - Text{"Hi @, we've been trying to reach you about your car's extended warranty. ", /*french*/"Bonjour, @. Vous avez une voiture? Vous savez, nous offrons des assurances abordables...", /*spanish*/"Buenas, @. Le llamamos para ofrecerle un nuevo seguro de hogar que puede pagar en cómodos plazos, sin intereses ni comisiones."}, + // obscure text + Text{ "Hi @, we've been trying to reach you about your car's extended warranty. ", + /*french*/ "Bonjour, @. Vous avez une voiture? Vous savez, nous offrons des assurances abordables...", + /*spanish*/ + "Buenas, @. Le llamamos para ofrecerle un nuevo seguro de hogar que puede pagar en cómodos plazos, sin " + "intereses ni comisiones." }, }); hintTable[JUNK73] = HintText::Junk({ - //obscure text - Text{"They say that the best weapon against Iron Knuckles is item 176.", /*french*/"Selon moi, les hache-viandes sont vulnérables contre l'objet 176.", /*spanish*/"Según dicen, la mejor arma para enfrentarse a los Nudillos de hierro es el objeto 176."}, + // obscure text + Text{ "They say that the best weapon against Iron Knuckles is item 176.", + /*french*/ "Selon moi, les hache-viandes sont vulnérables contre l'objet 176.", + /*spanish*/ "Según dicen, la mejor arma para enfrentarse a los Nudillos de hierro es el objeto 176." }, }); hintTable[JUNK74] = HintText::Junk({ - //obscure text - Text{"They say that it's actually possible to beat the running man.", /*french*/"Selon moi, il est possible de battre le coureur.&Donc, tu prends ton arc, et...", /*spanish*/"Según dicen, con mucha perseverancia puedes ganarle al corredor con la capucha de conejo."}, + // obscure text + Text{ "They say that it's actually possible to beat the running man.", + /*french*/ "Selon moi, il est possible de battre le coureur.&Donc, tu prends ton arc, et...", + /*spanish*/ "Según dicen, con mucha perseverancia puedes ganarle al corredor con la capucha de conejo." }, }); hintTable[JUNK75] = HintText::Junk({ - //obscure text - Text{"They say that the stone-cold guardian of the Well is only present during work hours.", /*french*/"Selon moi, le gardien de pierre du Puits quitte le soir pour aller se coucher.", /*spanish*/"Según dicen, la inmensa roca que bloquea el pozo solo trabaja en horas laborales."}, + // obscure text + Text{ "They say that the stone-cold guardian of the Well is only present during work hours.", + /*french*/ "Selon moi, le gardien de pierre du Puits quitte le soir pour aller se coucher.", + /*spanish*/ "Según dicen, la inmensa roca que bloquea el pozo solo trabaja en horas laborales." }, }); hintTable[JUNK76] = HintText::Junk({ - //obscure text - Text{"They say this hint makes more sense in other languages.", /*french*/"Selon moi, ces indices auraient pu être mieux traduits... Duh!", /*spanish*/"Según dicen, esta pista revela algo de vital importancia si cambias el idioma del juego..."}, + // obscure text + Text{ + "They say this hint makes more sense in other languages.", + /*french*/ "Selon moi, ces indices auraient pu être mieux traduits... Duh!", + /*spanish*/ "Según dicen, esta pista revela algo de vital importancia si cambias el idioma del juego..." }, }); hintTable[JUNK77] = HintText::Junk({ - //obscure text - Text{"BOK? No way.", /*french*/"BD'accord? Hors de question.", /*spanish*/"¿BVale? Ni hablar."}, + // obscure text + Text{ "BOK? No way.", /*french*/ "BD'accord? Hors de question.", /*spanish*/ "¿BVale? Ni hablar." }, }); // ^ junk hints above are from 3drando // v junk hints below are new to soh rando - #define HINT_TEXT_NEEDS_TRANSLATION_FR "Erreur 0x69a504:&Traduction manquante^C'est de la faute à Purple Hato!&J'vous jure!" +#define HINT_TEXT_NEEDS_TRANSLATION_FR \ + "Erreur 0x69a504:&Traduction manquante^C'est de la faute à Purple Hato!&J'vous jure!" hintTable[JUNK78] = HintText::Junk({ - //obscure text - Text{"They say blarg...^...or at least briaguya does.", /*french*/HINT_TEXT_NEEDS_TRANSLATION_FR, /*spanish*/"blarg"}, + //obscure text + Text{"They say blarg...^...or at least briaguya does.", /*french*/"Tout ce que j'ai à dire, c'est blarg...^... 'fin c'est plutôt ce que briaguya dirait.", /*spanish*/"blarg"}, }); hintTable[JUNK79] = HintText::Junk({ - //obscure text - Text{"They say this peace is what all true warriors strive for.", /*french*/HINT_TEXT_NEEDS_TRANSLATION_FR, /*spanish*/"blarg"}, + //obscure text + Text{"They say this peace is what all true warriors strive for.", /*french*/"Selon moi, cette paix est ce pour quoi luttent tous les vrais guerriers.", /*spanish*/"blarg"}, }); hintTable[JUNK80] = HintText::Junk({ - //obscure text - Text{"They say this ship is what all true gamers strive for.", /*french*/HINT_TEXT_NEEDS_TRANSLATION_FR, /*spanish*/"blarg"}, + //obscure text + Text{"They say this ship is what all true gamers strive for.", /*french*/"Selon moi, cette version du port est ce pour quoi luttent tous les vrais gamers.", /*spanish*/"blarg"}, }); hintTable[JUNK81] = HintText::Junk({ - //obscure text - Text{"They say that Glowsticks can be found in the Raveyard.", /*french*/"On peut trouver des Bâton Lumineux sur le dancefloor du cimetière.", /*spanish*/"blarg"}, + //obscure text + Text{"They say that Glowsticks can be found in the Raveyard.", /*french*/"On peut trouver des Bâtons Lumineux sur le dancefloor du cimetière.", /*spanish*/"blarg"}, }); /*-------------------------- | DUNGEON HINT TEXT | ---------------------------*/ - hintTable[DEKU_TREE] = HintText::DungeonName({ - //obscure text - Text{"an ancient tree", /*french*/"le vieil arbre", /*spanish*/"un ancestral árbol"}, - }, {}, - //clear text - Text{"Deku Tree", /*french*/"l'Arbre Mojo", /*spanish*/"el Gran Árbol Deku"} - ); + hintTable[DEKU_TREE] = HintText::DungeonName( + { + // obscure text + Text{ "an ancient tree", /*french*/ "le vieil arbre", /*spanish*/ "un ancestral árbol" }, + }, + {}, + // clear text + Text{ "Deku Tree", /*french*/ "l'Arbre Mojo", /*spanish*/ "el Gran Árbol Deku" }); - hintTable[DODONGOS_CAVERN] = HintText::DungeonName({ - //obscure text - Text{"an immense cavern", /*french*/"l'immense caverne", /*spanish*/"una descomunal cueva"}, - }, {}, - //clear text - Text{ "Dodongo's Cavern", /*french*/"la Caverne Dodongo", /*spanish*/"la Cueva de los Dodongos"} - ); + hintTable[DODONGOS_CAVERN] = HintText::DungeonName( + { + // obscure text + Text{ "an immense cavern", /*french*/ "l'immense caverne", /*spanish*/ "una descomunal cueva" }, + }, + {}, + // clear text + Text{ "Dodongo's Cavern", /*french*/ "la Caverne Dodongo", /*spanish*/ "la Cueva de los Dodongos" }); - hintTable[JABU_JABUS_BELLY] = HintText::DungeonName({ - //obscure text - Text{"the belly of a deity", /*french*/"le ventre d'un gardien", /*spanish*/"la tripa de cierta deidad"}, - }, {}, - //clear text - Text{"Jabu-Jabu's Belly", /*french*/"le Ventre de Jabu-Jabu", /*spanish*/"tripa de Jabu-Jabu"} - ); + hintTable[JABU_JABUS_BELLY] = HintText::DungeonName( + { + // obscure text + Text{ "the belly of a deity", /*french*/ "le ventre d'un gardien", + /*spanish*/ "la tripa de cierta deidad" }, + }, + {}, + // clear text + Text{ "Jabu-Jabu's Belly", /*french*/ "le Ventre de Jabu-Jabu", /*spanish*/ "tripa de Jabu-Jabu" }); - hintTable[FOREST_TEMPLE] = HintText::DungeonName({ - //obscure text - Text{"a deep forest", /*french*/"la profonde forêt", /*spanish*/"las profundidades del bosque"}, - }, {}, - //clear text - Text{"Forest Temple", /*french*/"le Temple de la Forêt", /*spanish*/"el Templo del Bosque"} - ); + hintTable[FOREST_TEMPLE] = HintText::DungeonName( + { + // obscure text + Text{ "a deep forest", /*french*/ "la profonde forêt", /*spanish*/ "las profundidades del bosque" }, + }, + {}, + // clear text + Text{ "Forest Temple", /*french*/ "le Temple de la Forêt", /*spanish*/ "el Templo del Bosque" }); - hintTable[FIRE_TEMPLE] = HintText::DungeonName({ - //obscure text - Text{"a high mountain", /*french*/"la grande montagne", /*spanish*/"una alta montaña"}, - }, {}, - //clear text - Text{"Fire Temple", /*french*/"le Temple du Feu", /*spanish*/"el Templo del Fuego"} - ); + hintTable[FIRE_TEMPLE] = HintText::DungeonName( + { + // obscure text + Text{ "a high mountain", /*french*/ "la grande montagne", /*spanish*/ "una alta montaña" }, + }, + {}, + // clear text + Text{ "Fire Temple", /*french*/ "le Temple du Feu", /*spanish*/ "el Templo del Fuego" }); - hintTable[WATER_TEMPLE] = HintText::DungeonName({ - //obscure text - Text{"a vast lake", /*french*/"le vaste lac", /*spanish*/"un lago inmenso"}, - }, {}, - //clear text - Text{"Water Temple", /*french*/"le Temple de l'Eau", /*spanish*/"el Templo del Agua"} - ); + hintTable[WATER_TEMPLE] = HintText::DungeonName( + { + // obscure text + Text{ "a vast lake", /*french*/ "le vaste lac", /*spanish*/ "un lago inmenso" }, + }, + {}, + // clear text + Text{ "Water Temple", /*french*/ "le Temple de l'Eau", /*spanish*/ "el Templo del Agua" }); - hintTable[SPIRIT_TEMPLE] = HintText::DungeonName({ - //obscure text - Text{"the goddess of the sand", /*french*/"la déesse des sables", /*spanish*/"la diosa de las arenas"}, - }, {}, - //clear text - Text{"Spirit Temple", /*french*/"le Temple de l'Esprit", /*spanish*/"el Templo del Espíritu"} + hintTable[SPIRIT_TEMPLE] = HintText::DungeonName( + { + // obscure text + Text{ "the goddess of the sand", /*french*/ "la déesse des sables", /*spanish*/ "la diosa de las arenas" }, + }, + {}, + // clear text + Text{ "Spirit Temple", /*french*/ "le Temple de l'Esprit", /*spanish*/ "el Templo del Espíritu" } ); - hintTable[SHADOW_TEMPLE] = HintText::DungeonName({ - //obscure text - Text{"the house of the dead", /*french*/"la maison des morts", /*spanish*/"la casa de la muerte"}, - }, {}, - //clear text - Text{"Shadow Temple", /*french*/"le Temple de l'Ombre", /*spanish*/"el Templo de las Sombras"} - ); + hintTable[SHADOW_TEMPLE] = HintText::DungeonName( + { + // obscure text + Text{ "the house of the dead", /*french*/ "la maison des morts", /*spanish*/ "la casa de la muerte" }, + }, + {}, + // clear text + Text{ "Shadow Temple", /*french*/ "le Temple de l'Ombre", /*spanish*/ "el Templo de las Sombras" }); - hintTable[ICE_CAVERN] = HintText::DungeonName({ - //obscure text - Text{"a frozen maze", /*french*/"le dédale glacé", /*spanish*/"un gélido laberinto"}, - }, {}, - //clear text - Text{"Ice Cavern", /*french*/"la caverne de glace", /*spanish*/"la caverna de hielo"} - ); + hintTable[ICE_CAVERN] = HintText::DungeonName( + { + // obscure text + Text{ "a frozen maze", /*french*/ "le dédale glacé", /*spanish*/ "un gélido laberinto" }, + }, + {}, + // clear text + Text{ "Ice Cavern", /*french*/ "la caverne de glace", /*spanish*/ "la caverna de hielo" }); - hintTable[BOTTOM_OF_THE_WELL] = HintText::DungeonName({ - //obscure text - Text{"a shadow\'s prison", /*french*/"la prison d'une ombre", /*spanish*/"la prisión de las sombras"}, - }, {}, - //clear text - Text{"Bottom of the Well", /*french*/"le fonds du Puits", /*spanish*/"el fondo del pozo"} - ); + hintTable[BOTTOM_OF_THE_WELL] = HintText::DungeonName( + { + // obscure text + Text{ "a shadow\'s prison", /*french*/ "la prison d'une ombre", /*spanish*/ "la prisión de las sombras" }, + }, + {}, + // clear text + Text{ "Bottom of the Well", /*french*/ "le fonds du Puits", /*spanish*/ "el fondo del pozo" }); - hintTable[GERUDO_TRAINING_GROUNDS] = HintText::DungeonName({ - //obscure text - Text{"the test of thieves", /*french*/"l'épreuve des voleurs", /*spanish*/"la prueba de las bandidas"}, - }, {}, - //clear text - Text{"Gerudo Training Grounds", /*french*/"le Gymnase Gerudo", /*spanish*/"el Centro de Instrucción Gerudo"} - ); + hintTable[GERUDO_TRAINING_GROUNDS] = HintText::DungeonName( + { + // obscure text + Text{ "the test of thieves", /*french*/ "l'épreuve des voleurs", /*spanish*/ "la prueba de las bandidas" }, + }, + {}, + // clear text + Text{ "Gerudo Training Grounds", /*french*/ "le Gymnase Gerudo", + /*spanish*/ "el Centro de Instrucción Gerudo" }); - hintTable[GANONS_CASTLE] = HintText::DungeonName({ - //obscure text - Text{"a conquered citadel", /*french*/"la citadelle assiégée", /*spanish*/"una conquistada ciudadela"}, - }, {}, - //clear text - Text{"Inside Ganon's Castle", /*french*/"l'intérieur du Château de Ganon", /*spanish*/"el interior del Castillo de Ganon"} - ); + hintTable[GANONS_CASTLE] = HintText::DungeonName( + { + // obscure text + Text{ "a conquered citadel", /*french*/ "la citadelle assiégée", /*spanish*/ "una conquistada ciudadela" }, + }, + {}, + // clear text + Text{ "Inside Ganon's Castle", /*french*/ "l'intérieur du Château de Ganon", + /*spanish*/ "el interior del Castillo de Ganon" }); /*-------------------------- | BOSS HINT TEXT | ---------------------------*/ - hintTable[QUEEN_GOHMA] = HintText::Boss({ - //obscure text - Text{"An #ancient tree# rewards", /*french*/"le #vieil arbre# octroie", /*spanish*/"un #ancestral árbol# premia con"}, - }, {}, - //clear text - Text{"the #Deku Tree# rewards", /*french*/"l'#Arbre Mojo# octroie", /*spanish*/"el #Gran Árbol Deku# premia con"} - ); + hintTable[QUEEN_GOHMA] = HintText::Boss( + { + // obscure text + Text{ "An #ancient tree# rewards", /*french*/ "le #vieil arbre# octroie", + /*spanish*/ "un #ancestral árbol# premia con" }, + }, + {}, + // clear text + Text{ "the #Deku Tree# rewards", /*french*/ "l'#Arbre Mojo# octroie", + /*spanish*/ "el #Gran Árbol Deku# premia con" }); - hintTable[KING_DODONGO] = HintText::Boss({ - //obscure text - Text{"An #immense cavern# rewards", /*french*/"l'#immense caverne# octroie", /*spanish*/"una #descomunal cueva# premia con"}, - }, {}, - //clear text - Text{"#Dodongo's Cavern# rewards", /*french*/"la #Caverne Dodongo# octroie", /*spanish*/"la #Cueva de los Dodongos# premia con"} - ); + hintTable[KING_DODONGO] = HintText::Boss( + { + // obscure text + Text{ "An #immense cavern# rewards", /*french*/ "l'#immense caverne# octroie", + /*spanish*/ "una #descomunal cueva# premia con" }, + }, + {}, + // clear text + Text{ "#Dodongo's Cavern# rewards", /*french*/ "la #Caverne Dodongo# octroie", + /*spanish*/ "la #Cueva de los Dodongos# premia con" }); - hintTable[BARINADE] = HintText::Boss({ - //obscure text - Text{"the #belly of a deity# rewards", /*french*/"le #ventre du gardien# octroie", /*spanish*/"la #tripa de cierta deidad# premia con"}, - }, {}, - //clear text - Text{"#Jabu-Jabu's Belly# rewards", /*french*/"le #Ventre de Jabu-Jabu# octroie", /*spanish*/"la #tripa de Jabu-Jabu# premia con"} - ); + hintTable[BARINADE] = HintText::Boss( + { + // obscure text + Text{ "the #belly of a deity# rewards", /*french*/ "le #ventre du gardien# octroie", + /*spanish*/ "la #tripa de cierta deidad# premia con" }, + }, + {}, + // clear text + Text{ "#Jabu-Jabu's Belly# rewards", /*french*/ "le #Ventre de Jabu-Jabu# octroie", + /*spanish*/ "la #tripa de Jabu-Jabu# premia con" }); - hintTable[PHANTOM_GANON] = HintText::Boss({ - //obscure text - Text{"a #deep forest# rewards", /*french*/"la #profonde forêt# octroie", /*spanish*/"el #profundo bosque# premia con"}, - }, {}, - //clear text - Text{"the #Forest Temple# rewards", /*french*/"le #Temple de la Forêt# octroie", /*spanish*/"el #Templo del Bosque# premia con"} - ); + hintTable[PHANTOM_GANON] = HintText::Boss( + { + // obscure text + Text{ "a #deep forest# rewards", /*french*/ "la #profonde forêt# octroie", + /*spanish*/ "el #profundo bosque# premia con" }, + }, + {}, + // clear text + Text{ "the #Forest Temple# rewards", /*french*/ "le #Temple de la Forêt# octroie", + /*spanish*/ "el #Templo del Bosque# premia con" }); - hintTable[VOLVAGIA] = HintText::Boss({ - //obscure text - Text{"a #high mountain# rewards", /*french*/"la #grande montagne# octroie", /*spanish*/"una #alta montaña# premia con"}, - }, {}, - //clear text - Text{"the #Fire Temple# rewards", /*french*/"le #Temple du Feu# octroie", /*spanish*/"el #Templo del Fuego# premia con"} - ); + hintTable[VOLVAGIA] = HintText::Boss( + { + // obscure text + Text{ "a #high mountain# rewards", /*french*/ "la #grande montagne# octroie", + /*spanish*/ "una #alta montaña# premia con" }, + }, + {}, + // clear text + Text{ "the #Fire Temple# rewards", /*french*/ "le #Temple du Feu# octroie", + /*spanish*/ "el #Templo del Fuego# premia con" }); - hintTable[MORPHA] = HintText::Boss({ - //obscure text - Text{"a #vast lake# rewards", /*french*/"le #vaste lac# octroie", /*spanish*/"un #lago inmenso# premia con"}, - }, {}, - //clear text - Text{"the #Water Temple# rewards", /*french*/"le #Temple de l'Eau# octroie", /*spanish*/"el #Templo del Agua# premia con"} - ); + hintTable[MORPHA] = HintText::Boss( + { + // obscure text + Text{ "a #vast lake# rewards", /*french*/ "le #vaste lac# octroie", + /*spanish*/ "un #lago inmenso# premia con" }, + }, + {}, + // clear text + Text{ "the #Water Temple# rewards", /*french*/ "le #Temple de l'Eau# octroie", + /*spanish*/ "el #Templo del Agua# premia con" }); - hintTable[BONGO_BONGO] = HintText::Boss({ - //obscure text - Text{"the #house of the dead# rewards", /*french*/"la #maison des morts# octroie", /*spanish*/"la #casa de la muerte# premia con"}, - }, {}, - //clear text - Text{"the #Shadow Temple# rewards", /*french*/"le #Temple de l'Ombre# octroie", /*spanish*/"el #Templo de las Sombras#"} - ); + hintTable[BONGO_BONGO] = HintText::Boss( + { + // obscure text + Text{ "the #house of the dead# rewards", /*french*/ "la #maison des morts# octroie", + /*spanish*/ "la #casa de la muerte# premia con" }, + }, + {}, + // clear text + Text{ "the #Shadow Temple# rewards", /*french*/ "le #Temple de l'Ombre# octroie", + /*spanish*/ "el #Templo de las Sombras#" }); - hintTable[TWINROVA] = HintText::Boss({ - //obscure text - Text{"a #goddess of the sand# rewards", /*french*/"la #déesse des sables# octroie", /*spanish*/"la #diosa de la arena# premia con"}, - }, {}, - //clear text - Text{"the #Spirit Temple# rewards", /*french*/"le #Temple de l'Esprit# octroie", /*spanish*/"el #Templo del Espíritu# premia con"} - ); + hintTable[TWINROVA] = HintText::Boss( + { + // obscure text + Text{ "a #goddess of the sand# rewards", /*french*/ "la #déesse des sables# octroie", + /*spanish*/ "la #diosa de la arena# premia con" }, + }, + {}, + // clear text + Text{ "the #Spirit Temple# rewards", /*french*/ "le #Temple de l'Esprit# octroie", + /*spanish*/ "el #Templo del Espíritu# premia con" }); // // [LINKS_POCKET_BOSS] = HintText::Boss({ // //obscure text - // Text{"#@'s pocket# rewards", /*french*/"#@ débute avec#", /*spanish*/"el #bolsillo de @# premia con"}, + // Text{"#@'s pocket# rewards", /*french*/"#@ débute avec#", /*spanish*/"el #bolsillo de @# + // premia con"}, // }, // //clear text - // Text{"#@ already has#", /*french*/"#@ a déjà#", /*spanish*/"el #bolsillo de @ ya tiene#"} + // Text{"#@ already has#", /*french*/"#@ a déjà#", /*spanish*/"el #bolsillo de @ ya + // tiene#"} // ); /*-------------------------- @@ -1811,52 +2309,62 @@ void HintTable_Init() { ---------------------------*/ hintTable[BRIDGE_OPEN_HINT] = HintText::Bridge({ - //obscure text - Text{"The awakened ones have already&created a bridge to the castle&where the evil dwells.", - /*french*/"Les êtres de sagesse ont&déjà créé un pont vers&le repaire du mal.", - /*spanish*/"Los sabios #ya habrán creado un puente#&al castillo, de donde emana el mal."}, + // obscure text + Text{ "The awakened ones have already&created a bridge to the castle&where the evil dwells.", + /*french*/ "Les êtres de sagesse ont&déjà créé un pont vers&le repaire du mal.", + /*spanish*/ "Los sabios #ya habrán creado un puente#&al castillo, de donde emana el mal." }, }); hintTable[BRIDGE_VANILLA_HINT] = HintText::Bridge({ - //obscure text - Text{"The awakened ones require&the Shadow and Spirit Medallions&as well as the Light Arrows.", - /*french*/"Les êtres de sagesse attendront&le héros muni des #Médaillons de&l'Ombre et l'Esprit# et des&#Flèches de Lumière#.", - /*spanish*/"Los sabios aguardarán a que el héroe&obtenga tanto el #Medallón de las&Sombras y el del Espíritu# junto a la #flecha de luz#."}, + // obscure text + Text{ "The awakened ones require&the Shadow and Spirit Medallions&as well as the Light Arrows.", + /*french*/ + "Les êtres de sagesse attendront&le héros muni des #Médaillons de&l'Ombre et l'Esprit# et des&#Flèches " + "de Lumière#.", + /*spanish*/ + "Los sabios aguardarán a que el héroe&obtenga tanto el #Medallón de las&Sombras y el del Espíritu# junto " + "a la #flecha de luz#." }, }); hintTable[BRIDGE_STONES_HINT] = HintText::Bridge({ - //obscure text singular plural - Text{"The awakened ones will&await for the Hero to collect&%d |Spiritual Stone|Spiritual Stones|.", - /*french*/"Les êtres de sagesse attendront&le héros muni de #%d |Pierre&Ancestrale|Pierres&Ancestrales|#.", - /*spanish*/"Los sabios aguardarán a que el héroe&obtenga #%d |piedra espiritual|piedras espirituales|#."}, + // obscure text singular plural + Text{ + "The awakened ones will&await for the Hero to collect&%d |Spiritual Stone|Spiritual Stones|.", + /*french*/ "Les êtres de sagesse attendront&le héros muni de #%d |Pierre&Ancestrale|Pierres&Ancestrales|#.", + /*spanish*/ "Los sabios aguardarán a que el héroe&obtenga #%d |piedra espiritual|piedras espirituales|#." }, }); hintTable[BRIDGE_MEDALLIONS_HINT] = HintText::Bridge({ - //obscure text singular plural - Text{"The awakened ones will await&for the Hero to collect&%d |Medallion|Medallions|.", - /*french*/"Les êtres de sagesse attendront&le héros muni de #%d |médaillon|médaillons|#.", - /*spanish*/"Los sabios aguardarán a que el héroe&obtenga #%d |medallón|medallones|#."}, + // obscure text singular plural + Text{ "The awakened ones will await&for the Hero to collect&%d |Medallion|Medallions|.", + /*french*/ "Les êtres de sagesse attendront&le héros muni de #%d |médaillon|médaillons|#.", + /*spanish*/ "Los sabios aguardarán a que el héroe&obtenga #%d |medallón|medallones|#." }, }); hintTable[BRIDGE_REWARDS_HINT] = HintText::Bridge({ - //obscure text singular plural - Text{"The awakened ones will await&for the Hero to collect&%d |Spiritual Stone or Medallion|Spiritual Stones and Medallions|.", - /*french*/"Les êtres de sagesse attendront&le héros muni de #%d |Pierre&Ancestrale ou Médaillon|Pierres&Ancestrales ou Médaillons|#.", - /*spanish*/"Los sabios aguardarán a que el héroe&obtenga #%d |piedra espiritual o medallón|piedras espirtuales y medallones|#."}, + // obscure text singular plural + Text{ "The awakened ones will await&for the Hero to collect&%d |Spiritual Stone or Medallion|Spiritual Stones " + "and Medallions|.", + /*french*/ + "Les êtres de sagesse attendront&le héros muni de #%d |Pierre&Ancestrale ou " + "Médaillon|Pierres&Ancestrales ou Médaillons|#.", + /*spanish*/ + "Los sabios aguardarán a que el héroe&obtenga #%d |piedra espiritual o medallón|piedras espirtuales y " + "medallones|#." }, }); hintTable[BRIDGE_DUNGEONS_HINT] = HintText::Bridge({ - //obscure text singular plural - Text{"The awakened ones will await&for the Hero to conquer&%d |Dungeon|Dungeons|.", - /*french*/"Les êtres de sagesse attendront&la conquête de #%d |Donjon|Donjons|#.", - /*spanish*/"Los sabios aguardarán a que el héroe& complete #%d |mazmorra|mazmorras|#."}, + // obscure text singular plural + Text{ "The awakened ones will await&for the Hero to conquer&%d |Dungeon|Dungeons|.", + /*french*/ "Les êtres de sagesse attendront&la conquête de #%d |Donjon|Donjons|#.", + /*spanish*/ "Los sabios aguardarán a que el héroe& complete #%d |mazmorra|mazmorras|#." }, }); hintTable[BRIDGE_TOKENS_HINT] = HintText::Bridge({ - //obscure text - Text{"The awakened ones will await&for the Hero to collect&%d |Gold Skulltula Token|Gold Skulltula Tokens|.", - /*french*/"Les êtres de sagesse attendront&le héros muni de #%d |Symbole|Symboles| &de Skulltula d'or#.", - /*spanish*/"Los sabios aguardarán a que el héroe&obtenga #%d |símbolo|símbolos| de&skulltula dorada#."}, + // obscure text + Text{ "The awakened ones will await&for the Hero to collect&%d |Gold Skulltula Token|Gold Skulltula Tokens|.", + /*french*/ "Les êtres de sagesse attendront&le héros muni de #%d |Symbole|Symboles| &de Skulltula d'or#.", + /*spanish*/ "Los sabios aguardarán a que el héroe&obtenga #%d |símbolo|símbolos| de&skulltula dorada#." }, }); /*-------------------------- @@ -1864,52 +2372,52 @@ void HintTable_Init() { ---------------------------*/ hintTable[GANON_BK_START_WITH_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the evil one's key will&be given from the start.", - /*french*/"Aussi, la clé du Malin sera&possession même du héros.", - /*spanish*/"Y obtendrás la llave del #señor del mal# desde el #inicio#."}, + // obscure text + Text{ "And the %revil one%w's key will&be given %rfrom the start%w.", + /*french*/ "Aussi, la clé du %rMalin%w sera&possession %rmême du héros%w.", + /*spanish*/ "Y obtendrás la llave del #señor del mal# desde el #inicio#." }, }); hintTable[GANON_BK_VANILLA_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the evil one's key will&be kept in a big chest&inside its tower.", - /*french*/"Aussi, la clé du #Malin# sera&encoffrée #dans sa tour#.", - /*spanish*/"Y la llave del #señor del mal# aguardará en un gran cofre de #su torre#."}, + // obscure text + Text{ "And the %revil one%w's key will&be kept in a big chest&%rinside its tower%w.", + /*french*/ "Aussi, la clé du %rMalin%w sera&encoffrée %rdans sa tour%w.", + /*spanish*/ "Y la llave del #señor del mal# aguardará en un gran cofre de #su torre#." }, }); hintTable[GANON_BK_OWN_DUNGEON_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the evil one's key will&be hidden somewhere inside&its castle.", - /*french*/"Aussi, la clé du #Malin# sera&cachée #dans son vaste château#.", - /*spanish*/"Y la llave del #señor del mal# aguardará en #algún lugar de su castillo#."}, + // obscure text + Text{ "And the %revil one%w's key will&be hidden somewhere %rinside&its castle%w.", + /*french*/ "Aussi, la clé du %rMalin%w sera&cachée %rdans son vaste château%w.", + /*spanish*/ "Y la llave del #señor del mal# aguardará en #algún lugar de su castillo#." }, }); hintTable[GANON_BK_OVERWORLD_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the #evil one#'s key will be hidden #outside of dungeons# in Hyrule.", - /*french*/"Aussi, la clé du #Malin# se&trouve #hors des donjons# d'Hyrule.", - /*spanish*/"Y la llave del #señor del mal# aguardará #fuera de las mazmorras# de Hyrule."}, + // obscure text + Text{ "And the %revil one%w's key will&be hidden %routside of&dungeons%w in Hyrule.", + /*french*/ "Aussi, la clé du %rMalin%w se&trouve %rhors des donjons%w d'Hyrule.", + /*spanish*/ "Y la llave del #señor del mal# aguardará #fuera de las mazmorras# de Hyrule." }, }); hintTable[GANON_BK_ANY_DUNGEON_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the #evil one#'s key will be hidden #inside a dungeon# in Hyrule.", - /*french*/"Aussi, la clé du #Malin# se&trouve #dans un donjon# d'Hyrule.", - /*spanish*/"Y la llave del #señor del mal# aguardará #en una mazmorra# de Hyrule."}, + // obscure text + Text{ "And the %revil one%w's key will&be hidden %rinside a&dungeon%w in Hyrule.", + /*french*/ "Aussi, la clé du %rMalin%w se&trouve %rdans un donjon%w d'Hyrule.", + /*spanish*/ "Y la llave del #señor del mal# aguardará #en una mazmorra# de Hyrule." }, }); hintTable[GANON_BK_ANYWHERE_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the #evil one#'s key will be hidden somewhere #in Hyrule#.", - /*french*/"Aussi, la clé du #Malin# se&trouve quelque part #dans Hyrule#.", - /*spanish*/"Y la llave del #señor del mal# aguardará en #cualquier lugar de Hyrule#."}, + // obscure text + Text{ "And the %revil one%w's key will&be hidden somewhere&%rin Hyrule%w.", + /*french*/ "Aussi, la clé du %rMalin%w se&trouve quelque part %rdans Hyrule%w.", + /*spanish*/ "Y la llave del #señor del mal# aguardará en #cualquier lugar de Hyrule#." }, }); hintTable[GANON_BK_TRIFORCE_HINT] = HintText::GanonsBossKey({ - //obscure text - Text{"And the #evil one#'s key will be given to the Hero once the #Triforce# is completed.", - /*french*/"Aussi, la clé du #Malin# se&révèlera une fois la #Triforce#&assemblée.", - /*spanish*/"Y el héroe recibirá la llave del #señor del mal# cuando haya completado la #Trifuerza#."}, + // obscure text + Text{ "And the %revil one%w's key will&be given to the Hero once&the %rTriforce%w is completed.", + /*french*/ "Aussi, la clé du %rMalin%w se&révèlera une fois la %rTriforce%w&assemblée.", + /*spanish*/ "Y el héroe recibirá la llave del #señor del mal# cuando haya completado la #Trifuerza#." }, }); /*-------------------------- @@ -1917,68 +2425,89 @@ void HintTable_Init() { ---------------------------*/ hintTable[LACS_VANILLA_HINT] = HintText::LACS({ - //obscure text - Text{"And the #evil one#'s key will be&provided by Zelda once the #Shadow&and Spirit Medallions# are retrieved.", - /*french*/"Aussi, Zelda crééra la clé du&#Malin# avec les #médaillons de&l'ombre et de l'esprit#.", - /*spanish*/"Y Zelda entregará la llave&del #señor del mal# tras obtener&#el medallón de las sombras y del espíritu#."}, + // obscure text + Text{ + "And the #evil one#'s key will be&provided by Zelda once the #Shadow&and Spirit Medallions# are retrieved.", + /*french*/ "Aussi, Zelda crééra la clé du&#Malin# avec les #médaillons de&l'ombre et de l'esprit#.", + /*spanish*/ + "Y Zelda entregará la llave&del #señor del mal# tras obtener&#el medallón de las sombras y del " + "espíritu#." }, }); hintTable[LACS_MEDALLIONS_HINT] = HintText::LACS({ - //obscure text singular plural - Text{"And the #evil one#'s key will be&provided by Zelda once #%d&|Medallion# is|Medallions# are| retrieved.", - /*french*/"Aussi, Zelda crééra la clé du&#Malin# avec #%d |médaillon|médaillons|#.", - /*spanish*/"Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |medallón|medallones|#."}, + // obscure text singular plural + Text{ "And the #evil one#'s key will be&provided by Zelda once #%d&|Medallion# is|Medallions# are| retrieved.", + /*french*/ "Aussi, Zelda crééra la clé du&#Malin# avec #%d |médaillon|médaillons|#.", + /*spanish*/ "Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |medallón|medallones|#." }, }); hintTable[LACS_STONES_HINT] = HintText::LACS({ - //obscure text singular plural - Text{"And the #evil one#'s key will be&provided by Zelda once #%d |Spiritual&Stone# is|Spiritual&Stones# are| retrieved.", - /*french*/"Aussi, Zelda crééra la clé du&#Malin# avec #%d des |pierre&spirituelle|pierres&spirituelles|#.", - /*spanish*/"Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |piedra espiritual|piedras espirituales|#."}, + // obscure text singular plural + Text{ + "And the #evil one#'s key will be&provided by Zelda once #%d |Spiritual&Stone# is|Spiritual&Stones# are| " + "retrieved.", + /*french*/ "Aussi, Zelda crééra la clé du&#Malin# avec #%d des |pierre&spirituelle|pierres&spirituelles|#.", + /*spanish*/ + "Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |piedra espiritual|piedras " + "espirituales|#." }, }); hintTable[LACS_REWARDS_HINT] = HintText::LACS({ - //obscure text singular plural - Text{"And the #evil one#'s key will be&provided by Zelda once #%d |Spiritual&Stone or Medallion# is|Spiritual&Stones and Medallions# are| retrieved.", - /*french*/"Aussi, Zelda crééra la clé du&#Malin# avec #%d |Pierre Ancestrale&et des médaillon|Pierres Ancestrales&et des médaillons|#.", - /*spanish*/"Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |piedra espiritual o medallón|piedras espirituales o medallones|#."}, + // obscure text singular plural + Text{ "And the #evil one#'s key will be&provided by Zelda once #%d |Spiritual&Stone or Medallion# " + "is|Spiritual&Stones and Medallions# are| retrieved.", + /*french*/ + "Aussi, Zelda crééra la clé du&#Malin# avec #%d |Pierre Ancestrale&et des médaillon|Pierres " + "Ancestrales&et des médaillons|#.", + /*spanish*/ + "Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |piedra espiritual o medallón|piedras " + "espirituales o medallones|#." }, }); hintTable[LACS_DUNGEONS_HINT] = HintText::LACS({ - //obscure text singular plural - Text{"And the #evil one#'s key will be&provided by Zelda once #%d |Dungeon#&is|Dungeons#&are| conquered.", - /*french*/"Aussi, Zelda crééra la clé du&#Malin# une fois #%d |donjon conquéri|donjons conquéris|#.", - /*spanish*/"Y Zelda entregará la llave&del #señor del mal# tras completar&#%d |mazmorra|mazmorras|#."}, + // obscure text singular plural + Text{ "And the #evil one#'s key will be&provided by Zelda once #%d |Dungeon#&is|Dungeons#&are| conquered.", + /*french*/ "Aussi, Zelda crééra la clé du&#Malin# une fois #%d |donjon conquéri|donjons conquéris|#.", + /*spanish*/ "Y Zelda entregará la llave&del #señor del mal# tras completar&#%d |mazmorra|mazmorras|#." }, }); hintTable[LACS_TOKENS_HINT] = HintText::LACS({ - //obscure text singular plural - Text{"And the #evil one#'s key will be&provided by Zelda once #%d |Gold&Skulltula Token# is|Gold&Skulltula Tokens# are| retrieved.", - /*french*/"Aussi, Zelda crééra la clé du&#Malin# avec #%d |symbole|symboles| de&Skulltula d'or#.", - /*spanish*/"Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |símbolo|símbolos| de&skulltula dorada#."}, + // obscure text singular plural + Text{ "And the #evil one#'s key will be&provided by Zelda once #%d |Gold&Skulltula Token# is|Gold&Skulltula " + "Tokens# are| retrieved.", + /*french*/ "Aussi, Zelda crééra la clé du&#Malin# avec #%d |symbole|symboles| de&Skulltula d'or#.", + /*spanish*/ + "Y Zelda entregará la llave&del #señor del mal# tras obtener&#%d |símbolo|símbolos| de&skulltula " + "dorada#." }, }); /*-------------------------- | TRIAL HINT TEXT | ---------------------------*/ hintTable[SIX_TRIALS] = HintText::Exclude({ - //obscure text - Text{"#Ganon's Tower# is protected by a powerful barrier.", /*french*/"#la Tour de Ganon# est protégée par une puissante barrière", /*spanish*/"la #torre de Ganon# está protegida por una poderosa barrera"}, + // obscure text + Text{ "#Ganon's Tower# is protected by a powerful barrier.", + /*french*/ "#la Tour de Ganon# est protégée par une puissante barrière", + /*spanish*/ "la #torre de Ganon# está protegida por una poderosa barrera" }, }); hintTable[ZERO_TRIALS] = HintText::Exclude({ - //obscure text - Text{"Sheik dispelled the barrier around #Ganon's Tower#.", /*french*/"Sheik a dissipé la barrière autour de #la Tour de Ganon#", /*spanish*/"Sheik disipó la barrera alrededor de la #torre de Ganon#."}, + // obscure text + Text{ "Sheik dispelled the barrier around #Ganon's Tower#.", + /*french*/ "Sheik a dissipé la barrière autour de #la Tour de Ganon#", + /*spanish*/ "Sheik disipó la barrera alrededor de la #torre de Ganon#." }, }); hintTable[FOUR_TO_FIVE_TRIALS] = HintText::Exclude({ - //obscure text - Text{" was dispelled by Sheik.", /*french*/" a été dissipée par Sheik.", /*spanish*/" se disipó gracias a Sheik."}, + // obscure text + Text{ " was dispelled by Sheik.", /*french*/ " a été dissipée par Sheik.", + /*spanish*/ " se disipó gracias a Sheik." }, }); hintTable[ONE_TO_THREE_TRIALS] = HintText::Exclude({ - //obscure text - Text{" protects Ganons Tower.", /*french*/" protège la Tour de Ganon.", /*spanish*/" protege la torre de Ganon"}, + // obscure text + Text{ " protects Ganons Tower.", /*french*/ " protège la Tour de Ganon.", + /*spanish*/ " protege la torre de Ganon" }, }); /*-------------------------- @@ -1986,45 +2515,58 @@ void HintTable_Init() { ---------------------------*/ hintTable[SPIRITUAL_STONE_TEXT_START] = HintText::Altar({ - //obscure text - Text{"3 Spiritual Stones found in Hyrule...", - /*french*/"Les trois Pierres Ancestrales cachées&dans Hyrule...", - /*spanish*/"Tres piedras espirituales halladas por Hyrule..."}, + // obscure text + Text{ "3 Spiritual Stones found in Hyrule...", + /*french*/ "Les trois Pierres Ancestrales cachées&dans Hyrule...", + /*spanish*/ "Tres piedras espirituales halladas por Hyrule..." }, }); hintTable[CHILD_ALTAR_TEXT_END_DOTOPEN] = HintText::Altar({ - //obscure text - Text{"Ye who may become a Hero...&The path to the future is open...", - /*french*/"À celui qui a quête de devenir&héros...&Le futur vous accueille béant...", - /*spanish*/"Para aquel que se convierta en el héroe...&La puerta al futuro está a su disposición..."}, + // obscure text + Text{ "Ye who may become a Hero...&The path to the future is open...", + /*french*/ "À celui qui a quête de devenir&héros...&Le futur vous accueille béant...", + /*spanish*/ "Para aquel que se convierta en el héroe...&La puerta al futuro está a su disposición..." }, }); hintTable[CHILD_ALTAR_TEXT_END_DOTCLOSED] = HintText::Altar({ - //obscure text - Text{"Ye who may become a Hero...&Stand with the Ocarina and&play the Song of Time.", - /*french*/"À celui qui a quête de devenir&héros...&Portez l'Ocarina et jouez&le chant du temps.", - /*spanish*/"Para aquel que se convierta en el héroe...&Tome la ocarina y&entone la Canción del Tiempo."}, + // obscure text + Text{ + "Ye who may become a Hero...&Stand with the Ocarina and&play the Song of Time.", + /*french*/ "À celui qui a quête de devenir&héros...&Portez l'Ocarina et jouez&le chant du temps.", + /*spanish*/ "Para aquel que se convierta en el héroe...&Tome la ocarina y&entone la Canción del Tiempo." }, }); hintTable[CHILD_ALTAR_TEXT_END_DOTINTENDED] = HintText::Altar({ - //obscure text - Text{"Ye who may become a Hero...&Offer the spiritual stones and&play the Song of Time.", - /*french*/"À celui qui a quête de devenir&héros... Présentez les Pierres&Ancestrales et jouez&le chant du temps.", - /*spanish*/"Para aquel que se convierta en el héroe...&Tome las piedras espirituales y&entone la Canción del Tiempo."}, + // obscure text + Text{ "Ye who may become a Hero...&Offer the spiritual stones and&play the Song of Time.", + /*french*/ + "À celui qui a quête de devenir&héros... Présentez les Pierres&Ancestrales et jouez&le chant du temps.", + /*spanish*/ + "Para aquel que se convierta en el héroe...&Tome las piedras espirituales y&entone la Canción del " + "Tiempo." }, }); hintTable[ADULT_ALTAR_TEXT_START] = HintText::Altar({ - //obscure text - Text{"An awakening voice from the Sacred&Realm will call those destined to be&Sages, who dwell in the five temples.", - /*french*/"Quand le mal aura triomphé, une voix&du Saint Royaume appellera ceux&cachés dans les cinq temples, destinés^à être Sages.", - /*spanish*/"Cuando el mal lo impregne todo, desde el Reino Sagrado surgirá una voz que hará despertar a los sabios que moran en los #cinco templos#."}, + // obscure text + Text{ "An awakening voice from the Sacred&Realm will call those destined to be&Sages, who dwell in the five " + "temples.", + /*french*/ + "Quand le mal aura triomphé, une voix&du Saint Royaume appellera ceux&cachés dans les cinq temples, " + "destinés^à être Sages.", + /*spanish*/ + "Cuando el mal lo impregne todo, desde el Reino Sagrado surgirá una voz que hará despertar a los sabios " + "que moran en los #cinco templos#." }, }); hintTable[ADULT_ALTAR_TEXT_END] = HintText::Altar({ - //obscure text - Text{"$kTogether with the Hero of Time,&the awakened ones will return&the light of peace to the world...", - /*french*/"$kEnsemble avec le Héros du &Temps, ces Sages emprisonneront&le mal et réinstaureront la&lumière de paix dans le monde...", - /*spanish*/"Con el Héroe del Tiempo, aquellos&que despierten detendrán el mal y&volverán al mundo de luz la paz..."}, + // obscure text + Text{ + "$kTogether with the Hero of Time,&the awakened ones will return&the light of peace to the world...", + /*french*/ + "$kEnsemble avec le Héros du &Temps, ces Sages emprisonneront&le mal et réinstaureront la&lumière de paix " + "dans le monde...", + /*spanish*/ + "Con el Héroe del Tiempo, aquellos&que despierten detendrán el mal y&volverán al mundo de luz la paz..." }, }); /*-------------------------- @@ -2032,10 +2574,14 @@ void HintTable_Init() { ---------------------------*/ hintTable[VALIDATION_LINE] = HintText::Validation({ - //obscure text - Text{"Hmph... Since you made it this far, I'll let you know what glorious prize of Ganon's you likely missed out on in my tower.^Behold...^", - /*french*/"Pah! Puisque tu t'es rendu ici, je te dirai quel trésor tu as manqué dans ma tour.^Et c'est...^", - /*spanish*/"Mmm... Ya que has llegado hasta aquí, te diré qué preciado objeto de mi propiedad puedes haberte dejado en mi torre.^He aquí...^"}, + // obscure text + Text{ "Hmph... Since you made it this far, I'll let you know what glorious prize of Ganon's you likely missed " + "out on in my tower.^Behold...^", + /*french*/ + "Pah! Puisque tu t'es rendu ici, je te dirai quel trésor tu as manqué dans ma tour.^Et c'est...^", + /*spanish*/ + "Mmm... Ya que has llegado hasta aquí, te diré qué preciado objeto de mi propiedad puedes haberte dejado " + "en mi torre.^He aquí...^" }, }); /*-------------------------- @@ -2043,15 +2589,18 @@ void HintTable_Init() { ---------------------------*/ hintTable[LIGHT_ARROW_LOCATION_HINT] = HintText::LightArrow({ - //obscure text - Text{"Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from ", - /*french*/"Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans les flèches que j'ai cachées dans ", - /*spanish*/"Ja, ja, ja... Nunca me derrotarás reflejando mis esferas de energía y desplegando la flecha de luz de "}, + // obscure text + Text{ + "Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from ", + /*french*/ + "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans les flèches que j'ai cachées dans ", + /*spanish*/ + "Ja, ja, ja... Nunca me derrotarás reflejando mis esferas de energía y desplegando la flecha de luz de " }, }); hintTable[YOUR_POCKET] = HintText::Exclude({ - //obscure text - Text{"your pocket", /*french*/"tes poches", /*spanish*/"tu bolsillo"}, + // obscure text + Text{ "your pocket", /*french*/ "tes poches", /*spanish*/ "tu bolsillo" }, }); /*-------------------------- @@ -2059,80 +2608,103 @@ void HintTable_Init() { ---------------------------*/ hintTable[GANON_LINE01] = HintText::GanonLine({ - //obscure text - Text{"Oh! It's @.&I was expecting someone called Sheik.&Do you know what happened to them?", - /*french*/"Ah, c'est @.&J'attendais un certain Sheik.&Tu sais ce qui lui est arrivé?", - /*spanish*/"¡Oh! Pero si es @.&Estaba esperando a alguien llamado Sheik. ¿Sabes qué puede haberle pasado?"}, + // obscure text + Text{ "Oh! It's @.&I was expecting someone called Sheik.&Do you know what happened to them?", + /*french*/ "Ah, c'est @.&J'attendais un certain Sheik.&Tu sais ce qui lui est arrivé?", + /*spanish*/ + "¡Oh! Pero si es @.&Estaba esperando a alguien llamado Sheik. ¿Sabes qué puede haberle pasado?" }, }); hintTable[GANON_LINE02] = HintText::GanonLine({ - //obscure text - Text{"I knew I shouldn't have put the key on the other side of my door.", - /*french*/"J'aurais dû garder la clé ici. Hélas...", - /*spanish*/"Sabía que no tendría que haber dejado la llave al otro lado de la puerta."}, + // obscure text + Text{ "I knew I shouldn't have put the key on the other side of my door.", + /*french*/ "J'aurais dû garder la clé ici. Hélas...", + /*spanish*/ "Sabía que no tendría que haber dejado la llave al otro lado de la puerta." }, }); hintTable[GANON_LINE03] = HintText::GanonLine({ - //obscure text - Text{"Looks like it's time for a round of tennis.", - /*french*/"C'est l'heure de jouer au tennis.", - /*spanish*/"Parece que es hora de una pachanga de tenis."}, + // obscure text + Text{ "Looks like it's time for a round of tennis.", + /*french*/ "C'est l'heure de jouer au tennis.", + /*spanish*/ "Parece que es hora de una pachanga de tenis." }, }); hintTable[GANON_LINE04] = HintText::GanonLine({ - //obscure text - Text{"You'll never deflect my bolts of energy with your sword, then shoot me with those Light Arrows you happen to have.", - /*french*/"Ne perds pas ton temps à frapper mes éclairs d'énergie avec ton épée et me tirer avec tes flèches de Lumière!", - /*spanish*/"Nunca reflejarás mis esferas de energía con tu espada, para después dispararme con las flechas de luz que tendrás."}, + // obscure text + Text{ "You'll never deflect my bolts of energy with your sword, then shoot me with those Light Arrows you " + "happen to have.", + /*french*/ + "Ne perds pas ton temps à frapper mes éclairs d'énergie avec ton épée et me tirer avec tes flèches de " + "Lumière!", + /*spanish*/ + "Nunca reflejarás mis esferas de energía con tu espada, para después dispararme con las flechas de luz " + "que tendrás." }, }); hintTable[GANON_LINE05] = HintText::GanonLine({ - //obscure text - Text{"Why did I leave my trident back in the desert?", - /*french*/"Sale bêtise... Et j'ai oublié mon trident dans le désert!", - /*spanish*/"Santa Hylia... ¿Por qué me habré dejado el tridente en el desierto?"}, + // obscure text + Text{ "Why did I leave my trident back in the desert?", + /*french*/ "Sale bêtise... Et j'ai oublié mon trident dans le désert!", + /*spanish*/ "Santa Hylia... ¿Por qué me habré dejado el tridente en el desierto?" }, }); hintTable[GANON_LINE06] = HintText::GanonLine({ - //obscure text - Text{"Zelda is probably going to do something stupid, like send you back to your own timeline.^So this is quite meaningless. Do you really want to save this moron?", - /*french*/"Même si je suis vaincu... Zelda te renverra dans ton ère, et je reviendrai conquérir!^Telle est la prophécie d'Hyrule Historia!", - /*spanish*/"Seguro que Zelda trata de hacer alguna tontería, como enviarte de vuelta a tu línea temporal.^No tiene ningún sentido alguno. ¿De verdad quieres salvar a esa tonta?"}, + // obscure text + Text{ "Zelda is probably going to do something stupid, like send you back to your own timeline.^So this is " + "quite meaningless. Do you really want to save this moron?", + /*french*/ + "Même si je suis vaincu... Zelda te renverra dans ton ère, et je reviendrai conquérir!^Telle est la " + "prophécie d'Hyrule Historia!", + /*spanish*/ + "Seguro que Zelda trata de hacer alguna tontería, como enviarte de vuelta a tu línea temporal.^No tiene " + "ningún sentido alguno. ¿De verdad quieres salvar a esa tonta?" }, }); hintTable[GANON_LINE07] = HintText::GanonLine({ - //obscure text - Text{"What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the hungry,&and my castle floats.", - /*french*/"Zelda ne sera jamais un meilleur monarque que moi!^J'ai un château volant, mes sujets sont des belles amazones... et mes Moblins sont clairement plus puissants que jamais!", - /*spanish*/"¿Qué te hace pensar que Zelda gobierna mejor que yo?^Yo he salvado el Rancho Lon Lon,&he alimentado a los hambrientos&y hasta hago que mi castillo flote."}, + // obscure text + Text{ "What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the " + "hungry,&and my castle floats.", + /*french*/ + "Zelda ne sera jamais un meilleur monarque que moi!^J'ai un château volant, mes sujets sont des belles " + "amazones... et mes Moblins sont clairement plus puissants que jamais!", + /*spanish*/ + "¿Qué te hace pensar que Zelda gobierna mejor que yo?^Yo he salvado el Rancho Lon Lon,&he alimentado a " + "los hambrientos&y hasta hago que mi castillo flote." }, }); hintTable[GANON_LINE08] = HintText::GanonLine({ - //obscure text - Text{"I've learned this spell,&it's really neat,&I'll keep it later&for your treat!", - /*french*/"Gamin, ton destin achève,&sous mon sort tu périras!&Cette partie ne fut pas brève,&et cette mort, tu subiras!", - /*spanish*/"Veamos ahora que harás,&la batalla ha de comenzar,&te enviaré de una vez al más allá,&¿listo para afrontar la verdad?"}, + // obscure text + Text{ "I've learned this spell,&it's really neat,&I'll keep it later&for your treat!", + /*french*/ + "Gamin, ton destin achève,&sous mon sort tu périras!&Cette partie ne fut pas brève,&et cette mort, tu " + "subiras!", + /*spanish*/ + "Veamos ahora que harás,&la batalla ha de comenzar,&te enviaré de una vez al más allá,&¿listo para " + "afrontar la verdad?" }, }); hintTable[GANON_LINE09] = HintText::GanonLine({ - //obscure text - Text{"Many tricks are up my sleeve,&to save yourself&you'd better leave!", - /*french*/"Sale petit garnement,&tu fais erreur!&C'est maintenant que marque&ta dernière heure!", - /*spanish*/"¿No osarás a mí enfrentarte?&Rimas aparte,&¡voy a matarte!"}, + // obscure text + Text{ "Many tricks are up my sleeve,&to save yourself&you'd better leave!", + /*french*/ "Sale petit garnement,&tu fais erreur!&C'est maintenant que marque&ta dernière heure!", + /*spanish*/ "¿No osarás a mí enfrentarte?&Rimas aparte,&¡voy a matarte!" }, }); hintTable[GANON_LINE10] = HintText::GanonLine({ - //obscure text - Text{"After what you did to Koholint Island, how can you call me the bad guy?", - /*french*/"J'admire ce que tu as fait à l'Île Koholint... Toi et moi, nous devrions faire équipe!", - /*spanish*/"Después de lo que le hiciste a la Isla Koholint, ¿cómo te atreves a llamarme malvado?"}, + // obscure text + Text{ "After what you did to Koholint Island, how can you call me the bad guy?", + /*french*/ "J'admire ce que tu as fait à l'Île Koholint... Toi et moi, nous devrions faire équipe!", + /*spanish*/ "Después de lo que le hiciste a la Isla Koholint, ¿cómo te atreves a llamarme malvado?" }, }); hintTable[GANON_LINE11] = HintText::GanonLine({ - //obscure text - Text{"Today, let's begin down&'The Hero is Defeated' timeline.", - /*french*/"Si tu me vaincs, Hyrule sera englouti... mais si tu meurs, on aura A Link to the Past, le meilleur opus de la série!", - /*spanish*/"Hoy daremos lugar a la línea temporal del Héroe Derrotado.&¡Prepárate para el culmen de esta saga!"}, + // obscure text + Text{ "Today, let's begin down&'The Hero is Defeated' timeline.", + /*french*/ + "Si tu me vaincs, Hyrule sera englouti... mais si tu meurs, on aura A Link to the Past, le meilleur opus " + "de la série!", + /*spanish*/ + "Hoy daremos lugar a la línea temporal del Héroe Derrotado.&¡Prepárate para el culmen de esta saga!" }, }); /*-------------------------- @@ -2140,45 +2712,59 @@ void HintTable_Init() { ---------------------------*/ hintTable[MEDIGORON_DIALOG_FIRST] = HintText::MerchantsDialogs({ - //obscure text - Text{"How about buying ", - /*french*/"Veux-tu acheter ", - /*spanish*/"¿Me compras "}, + // obscure text + Text{ "How about buying ", + /*french*/ "Veux-tu acheter ", + /*spanish*/ "¿Me compras " }, }); hintTable[MEDIGORON_DIALOG_SECOND] = HintText::MerchantsDialogs({ - //obscure text - Text{" for #200 Rupees#?&"+TWO_WAY_CHOICE()+"#Buy&Don't buy#", - /*french*/" pour #200 rubis#?&"+TWO_WAY_CHOICE()+"#Acheter&Ne pas acheter#", - /*spanish*/" por #200 rupias#?&"+TWO_WAY_CHOICE()+"#Comprar&No comprar#"}, + // obscure text + Text{ " for #200 Rupees#?&" + TWO_WAY_CHOICE() + "#Buy&Don't buy#", + /*french*/ " pour #200 rubis#?&" + TWO_WAY_CHOICE() + "#Acheter&Ne pas acheter#", + /*spanish*/ " por #200 rupias#?&" + TWO_WAY_CHOICE() + "#Comprar&No comprar#" }, }); hintTable[CARPET_SALESMAN_DIALOG_FIRST] = HintText::MerchantsDialogs({ - //obscure text - Text{"Welcome!^I am selling stuff, strange and rare, from&all over the world to everybody. Today's&special is...^", - /*french*/"Bienvenue!^Je vends des objets rares et merveilleux du&monde entier. En spécial aujourd'hui...^", - /*spanish*/"¡Acércate!^Vendo productos extraños y difíciles de&encontrar... De todo el mundo a todo el&mundo. La oferta de hoy es...^¡"}, + // obscure text + Text{ "Welcome!^I am selling stuff, strange and rare, from&all over the world to everybody. Today's&special " + "is...^", + /*french*/ + "Bienvenue!^Je vends des objets rares et merveilleux du&monde entier. En spécial aujourd'hui...^", + /*spanish*/ + "¡Acércate!^Vendo productos extraños y difíciles de&encontrar... De todo el mundo a todo el&mundo. La " + "oferta de hoy es...^¡" }, }); hintTable[CARPET_SALESMAN_DIALOG_SECOND] = HintText::MerchantsDialogs({ - //obscure text - Text{"! Terrifying!&I won't tell you what it is until I see the&money...^How about #200 Rupees#?&&"+TWO_WAY_CHOICE()+"#Buy&Don't buy#", - /*french*/"! Un&concentré de puissance! Mais montre tes&rubis avant que je te dise ce que c'est...^Disons #200 rubis#?&&"+TWO_WAY_CHOICE()+"#Acheter&Ne pas acheter#", - /*spanish*/"! ¡Terrorífico!&No te revelaré su nombre hasta que&vea el dinero...^#200 rupias#, ¿qué te parece?&&"+TWO_WAY_CHOICE()+"#Comprar&No comprar#"}, + // obscure text + Text{ + "! Terrifying!&I won't tell you what it is until I see the&money...^How about #200 Rupees#?&&" + + TWO_WAY_CHOICE() + "#Buy&Don't buy#", + /*french*/ + "! Un&concentré de puissance! Mais montre tes&rubis avant que je te dise ce que c'est...^Disons #200 " + "rubis#?&&" + + TWO_WAY_CHOICE() + "#Acheter&Ne pas acheter#", + /*spanish*/ + "! ¡Terrorífico!&No te revelaré su nombre hasta que&vea el dinero...^#200 rupias#, ¿qué te parece?&&" + + TWO_WAY_CHOICE() + "#Comprar&No comprar#" }, }); hintTable[CARPET_SALESMAN_DIALOG_THIRD] = HintText::MerchantsDialogs({ - //obscure text - Text{"Thank you very much!^What I'm selling is... #", - /*french*/"Merci beaucoup!^Cet objet extraordinaire est... #", - /*spanish*/"¡Muchas gracias!^Lo que vendo es... #¡"}, + // obscure text + Text{ "Thank you very much!^What I'm selling is... #", + /*french*/ "Merci beaucoup!^Cet objet extraordinaire est... #", + /*spanish*/ "¡Muchas gracias!^Lo que vendo es... #¡" }, }); hintTable[CARPET_SALESMAN_DIALOG_FOURTH] = HintText::MerchantsDialogs({ - //obscure text - Text{"!#^The mark that will lead you to the #Spirit&Temple# is the #flag on the "+IF_NOT_MQ()+"left"+MQ_ELSE()+"right"+MQ_END()+"# outside the shop. Be seeing you!", - /*french*/"!#^La marque qui te mènera au #Temple de l'Esprit# est le #drapeau "+IF_NOT_MQ()+"gauche"+MQ_ELSE()+"droite"+MQ_END()+"# en sortant d'ici. À la prochaine!", - /*spanish*/"!#^La marca que te guiará al #Templo del&Espíritu# es la #bandera que está a la&"+IF_NOT_MQ()+"izquierda"+MQ_ELSE()+"derecha"+MQ_END()+"# al salir de aquí. ¡Nos vemos!"}, + // obscure text + Text{ "!#^The mark that will lead you to the #Spirit&Temple# is the #flag on the " + IF_NOT_MQ() + "left" + + MQ_ELSE() + "right" + MQ_END() + "# outside the shop. Be seeing you!", + /*french*/ "!#^La marque qui te mènera au #Temple de l'Esprit# est le #drapeau " + IF_NOT_MQ() + + "gauche" + MQ_ELSE() + "droite" + MQ_END() + "# en sortant d'ici. À la prochaine!", + /*spanish*/ "!#^La marca que te guiará al #Templo del&Espíritu# es la #bandera que está a la&" + + IF_NOT_MQ() + "izquierda" + MQ_ELSE() + "derecha" + MQ_END() + "# al salir de aquí. ¡Nos vemos!" }, }); } @@ -2240,15 +2826,18 @@ int32_t TokensRequiredBySettings() { } std::array conditionalAlwaysHints = { - std::make_pair(MARKET_10_BIG_POES, [](){ return Settings::BigPoeTargetCount.Value() >= 3; }), // Remember, the option's value being 3 means 4 are required - std::make_pair(DEKU_THEATER_MASK_OF_TRUTH, [](){ return !Settings::CompleteMaskQuest; }), - std::make_pair(SONG_FROM_OCARINA_OF_TIME, [](){ return StonesRequiredBySettings() < 2; }), - std::make_pair(HF_OCARINA_OF_TIME_ITEM, [](){ return StonesRequiredBySettings() < 2; }), - std::make_pair(SHEIK_IN_KAKARIKO, [](){ return MedallionsRequiredBySettings() < 5; }), - std::make_pair(DMT_TRADE_CLAIM_CHECK, [](){ return false; }), - std::make_pair(KAK_30_GOLD_SKULLTULA_REWARD, [](){ return TokensRequiredBySettings() < 30; }), - std::make_pair(KAK_40_GOLD_SKULLTULA_REWARD, [](){ return TokensRequiredBySettings() < 40; }), - std::make_pair(KAK_50_GOLD_SKULLTULA_REWARD, [](){ return TokensRequiredBySettings() < 50; }) + std::make_pair(MARKET_10_BIG_POES, + []() { + return Settings::BigPoeTargetCount.Value() >= 3; + }), // Remember, the option's value being 3 means 4 are required + std::make_pair(DEKU_THEATER_MASK_OF_TRUTH, []() { return !Settings::CompleteMaskQuest; }), + std::make_pair(SONG_FROM_OCARINA_OF_TIME, []() { return StonesRequiredBySettings() < 2; }), + std::make_pair(HF_OCARINA_OF_TIME_ITEM, []() { return StonesRequiredBySettings() < 2; }), + std::make_pair(SHEIK_IN_KAKARIKO, []() { return MedallionsRequiredBySettings() < 5; }), + std::make_pair(DMT_TRADE_CLAIM_CHECK, []() { return false; }), + std::make_pair(KAK_30_GOLD_SKULLTULA_REWARD, []() { return TokensRequiredBySettings() < 30; }), + std::make_pair(KAK_40_GOLD_SKULLTULA_REWARD, []() { return TokensRequiredBySettings() < 40; }), + std::make_pair(KAK_50_GOLD_SKULLTULA_REWARD, []() { return TokensRequiredBySettings() < 50; }) }; const HintText& Hint(const uint32_t hintKey) { 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 5adf816a8..26150c9de 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 @@ -293,6 +293,80 @@ void HintTable_Init_Exclude_Overworld() { //obscure text Text{"#frogs in a storm# gift", /*french*/"#des grenouilles mouillées# donnent", /*spanish*/"las #ancas bajo la tormenta# otorgan"}, }); + hintTable[ZR_FROGS_ZELDAS_LULLABY] = HintText::Exclude( + { + // obscure text + Text{ "#sleepy frogs# gift", /*french*/ "#les grenouilles somnolentes# donnent", + /*spanish*/ "las #ranas somnolientas# regalan" }, + Text{ "#the Froggish Tenor in the back-left# gifts", + /*french*/ "#le ténor grenouillesque au fond à gauche# donne", + /*spanish*/ "el #Sapo Tenore al fondo, a la izquierda#, regala" }, + }, + {}, + // clear text + Text{ "after hearing #Zelda's Lullaby, the frogs# gift", + /*french*/ "à l'écoute de #la berceuse de Zelda, les grenouilles# donnent", + /*spanish*/ "después de escuchar #la Nana de Zelda, las ranas# regalan" }); + + hintTable[ZR_FROGS_EPONAS_SONG] = HintText::Exclude( + { + // obscure text + Text{ "#equine frogs# gift", /*french*/ "#les grenouilles équestres# donnent", + /*spanish*/ "las #ranas equinas# regalan" }, + Text{ "#the Froggish Tenor in the back-right# gifts", + /*french*/ "#le ténor grenouillesque au fond à droite# donne", + /*spanish*/ "el #Sapo Tenore al fondo, a la derecha#, regala" }, + }, + {}, + // clear text + Text{ "after hearing #Epona's Song, the frogs# gift", + /*french*/ "à l'écoute du #chant d'Epona, les grenouilles# donnent", + /*spanish*/ "después de escuchar #la Canción de Epona, las ranas# regalan" }); + + hintTable[ZR_FROGS_SARIAS_SONG] = HintText::Exclude( + { + // obscure text + Text{ "#sylvan frogs# gift", /*french*/ "#les grenouilles sylvestres# donnent", + /*spanish*/ "las #ranas silvestres# regalan" }, + Text{ "#the Froggish Tenor in the center# gifts", + /*french*/ "#le ténor grenouillesque dans le centre# donne", + /*spanish*/ "el #Sapo Tenore en el centro# regala" }, + }, + {}, + // clear text + Text{ "after hearing #Saria's Song, the frogs# gift", + /*french*/ "à l'écoute du #chant de Saria, les grenouilles# donnent", + /*spanish*/ "después de escuchar #la Canción de Saria, las ranas# regalan" }); + + hintTable[ZR_FROGS_SUNS_SONG] = HintText::Exclude( + { + // obscure text + Text{ "#enlightened frogs# gift", /*french*/ "#les grenouilles éclairées# donnent", + /*spanish*/ "las #ranas alumbradas# regalan" }, + Text{ "#the Froggish Tenor in the front-left# gifts", + /*french*/ "#le ténor grenouillesque à l'avant gauche# donne", + /*spanish*/ "el #Sapo Tenore al frente, a la izquierda#, regala" }, + }, + {}, + // clear text + Text{ "after hearing #the Sun's Song, the frogs# gift", + /*french*/ "à l'écoute du #chant du soleil, les grenouilles# donnent", + /*spanish*/ "después de escuchar #la Canción del Sol, las ranas# regalan" }); + + hintTable[ZR_FROGS_SONG_OF_TIME] = HintText::Exclude( + { + // obscure text + Text{ "#time-traveling frogs# gift", /*french*/ "#les grenouilles voyageuses dans le temps# donnent", + /*spanish*/ "las #ranas viajeras del tiempo# regalan" }, + Text{ "#the Froggish Tenor in the front-right# gifts", + /*french*/ "#le ténor grenouillesque à l'avant droite# donne", + /*spanish*/ "el #Sapo Tenore al frente, a la derecha#, regala" }, + }, + {}, + // clear text + Text{ "after hearing #the Song of Time, the frogs# gift", + /*french*/ "à l'écoute du #chant du temps, les grenouilles# donnent", + /*spanish*/ "después de escuchar #la Canción del tiempo, las ranas# regalan" }); hintTable[GF_HBA_1000_POINTS] = HintText::Exclude({ //obscure text diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.cpp b/soh/soh/Enhancements/randomizer/3drando/hints.cpp index b5f0743fb..9b30bc5a6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.cpp @@ -13,6 +13,7 @@ #include "entrance.hpp" #include "z64item.h" #include +#include "../randomizerTypes.h" using namespace CustomMessages; using namespace Logic; @@ -193,7 +194,7 @@ static std::vector GetAccessibleGossipStones(const uint32_t hintedLoca static void AddHint(Text hint, const uint32_t gossipStone, const std::vector& colors = {}) { //save hints as dummy items for writing to the spoiler log - NewItem(gossipStone, Item{hint, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE}); + NewItem(gossipStone, Item{RG_HINT, hint, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE}); Location(gossipStone)->SetPlacedItem(gossipStone); //create the in game message diff --git a/soh/soh/Enhancements/randomizer/3drando/item.cpp b/soh/soh/Enhancements/randomizer/3drando/item.cpp index 13ddb99df..2643c89cb 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item.cpp @@ -9,9 +9,10 @@ #include "settings.hpp" #include "z64item.h" -Item::Item(Text name_, ItemType type_, int getItemId_, bool advancement_, bool* logicVar_, uint32_t hintKey_, +Item::Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int getItemId_, bool advancement_, bool* logicVar_, uint32_t hintKey_, uint16_t price_) - : name(std::move(name_)), + : randomizerGet(randomizerGet_), + name(std::move(name_)), type(type_), getItemId(getItemId_), advancement(advancement_), @@ -19,9 +20,10 @@ Item::Item(Text name_, ItemType type_, int getItemId_, bool advancement_, bool* hintKey(hintKey_), price(price_) {} -Item::Item(Text name_, ItemType type_, int getItemId_, bool advancement_, uint8_t* logicVar_, uint32_t hintKey_, +Item::Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int getItemId_, bool advancement_, uint8_t* logicVar_, uint32_t hintKey_, uint16_t price_) - : name(std::move(name_)), + : randomizerGet(randomizerGet_), + name(std::move(name_)), type(type_), getItemId(getItemId_), advancement(advancement_), diff --git a/soh/soh/Enhancements/randomizer/3drando/item.hpp b/soh/soh/Enhancements/randomizer/3drando/item.hpp index a424dbf2b..bd576835e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/item.hpp @@ -6,6 +6,7 @@ #include "keys.hpp" #include "hint_list.hpp" #include "settings.hpp" +#include "../randomizerTypes.h" union ItemOverride_Value; @@ -28,9 +29,9 @@ enum ItemType { class Item { public: Item() = default; - Item(Text name_, ItemType type_, int getItemId_, bool advancement_, bool* logicVar_, uint32_t hintKey_, + Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int getItemId_, bool advancement_, bool* logicVar_, uint32_t hintKey_, uint16_t price_ = 0); - Item(Text name_, ItemType type_, int getItemId_, bool advancement_, uint8_t* logicVar_, uint32_t hintKey_, + Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int getItemId_, bool advancement_, uint8_t* logicVar_, uint32_t hintKey_, uint16_t price_ = 0); ~Item(); @@ -55,6 +56,10 @@ public: return type; } + RandomizerGet GetRandomizerGet() { + return randomizerGet; + } + uint16_t GetPrice() const { return price; } @@ -103,11 +108,11 @@ public: return false; } - if ((type == ITEMTYPE_BOSSKEY && getItemId != 0x9A) && (BossKeysanity.Is(BOSSKEYSANITY_VANILLA) || BossKeysanity.Is(BOSSKEYSANITY_OWN_DUNGEON))) { + if ((type == ITEMTYPE_BOSSKEY && getItemId != 0xAD) && (BossKeysanity.Is(BOSSKEYSANITY_VANILLA) || BossKeysanity.Is(BOSSKEYSANITY_OWN_DUNGEON))) { return false; } //Ganons Castle Boss Key - if (getItemId == 0x9A && (GanonsBossKey.Is(GANONSBOSSKEY_VANILLA) || GanonsBossKey.Is(GANONSBOSSKEY_OWN_DUNGEON))) { + if (getItemId == 0xAD && (GanonsBossKey.Is(GANONSBOSSKEY_VANILLA) || GanonsBossKey.Is(GANONSBOSSKEY_OWN_DUNGEON))) { return false; } @@ -131,6 +136,7 @@ public: } private: + RandomizerGet randomizerGet; Text name; ItemType type; int getItemId; diff --git a/soh/soh/Enhancements/randomizer/3drando/item_list.cpp b/soh/soh/Enhancements/randomizer/3drando/item_list.cpp index b76f24754..f6ad8ff74 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_list.cpp @@ -3,274 +3,275 @@ #include "logic.hpp" #include #include "z64item.h" +#include "../randomizerTypes.h" using namespace Logic; static std::array itemTable; -void ItemTable_Init() { //English name French Spanish Item Type getItemID advancement logic hint key - itemTable[NONE] = Item(Text{"No Item", "Rien", "Sin Objeto"}, ITEMTYPE_EVENT, GI_RUPEE_GREEN, false, &noVariable, NONE); - itemTable[KOKIRI_SWORD] = Item(Text{"Kokiri Sword", "Épée Kokiri", "Espada Kokiri"}, ITEMTYPE_ITEM, GI_SWORD_KOKIRI, true, &KokiriSword, KOKIRI_SWORD); +void ItemTable_Init() { // RandomizerGet English name French Spanish Item Type getItemID advancement logic hint key + itemTable[NONE] = Item(RG_NONE, Text{"No Item", "Rien", "Sin Objeto"}, ITEMTYPE_EVENT, GI_RUPEE_GREEN, false, &noVariable, NONE); + itemTable[KOKIRI_SWORD] = Item(RG_KOKIRI_SWORD, Text{"Kokiri Sword", "Épée Kokiri", "Espada Kokiri"}, ITEMTYPE_ITEM, GI_SWORD_KOKIRI, true, &KokiriSword, KOKIRI_SWORD); //[MASTER_SWORD] - itemTable[GIANTS_KNIFE] = Item(Text{"Giant's Knife", "Lame des Géants", "Espada de Biggoron"}, ITEMTYPE_ITEM, GI_SWORD_KNIFE, false, &noVariable, GIANTS_KNIFE); - itemTable[BIGGORON_SWORD] = Item(Text{"Biggoron's Sword", "Épée de Biggoron", "Espada de Biggoron"}, ITEMTYPE_ITEM, GI_SWORD_BGS, true, &BiggoronSword, BIGGORON_SWORD); - itemTable[DEKU_SHIELD] = Item(Text{"Deku Shield", "Bouclier Mojo", "Escudo deku"}, ITEMTYPE_ITEM, GI_SHIELD_DEKU, false, &noVariable, DEKU_SHIELD); - itemTable[HYLIAN_SHIELD] = Item(Text{"Hylian Shield", "Bouclier Hylien", "Escudo hyliano"}, ITEMTYPE_ITEM, GI_SHIELD_HYLIAN, false, &noVariable, HYLIAN_SHIELD); - itemTable[MIRROR_SHIELD] = Item(Text{"Mirror Shield", "Bouclier Miroir", "Escudo espejo"}, ITEMTYPE_ITEM, GI_SHIELD_MIRROR, true, &MirrorShield, MIRROR_SHIELD); - itemTable[GORON_TUNIC] = Item(Text{"Goron Tunic", "Tunique Goron", "Sayo goron"}, ITEMTYPE_ITEM, GI_TUNIC_GORON, true, &GoronTunic, GORON_TUNIC); - itemTable[ZORA_TUNIC] = Item(Text{"Zora Tunic", "Tunique Zora", "Sayo zora"}, ITEMTYPE_ITEM, GI_TUNIC_ZORA, true, &ZoraTunic, ZORA_TUNIC); - itemTable[IRON_BOOTS] = Item(Text{"Iron Boots", "Bottes de plomb", "Botas de hierro"}, ITEMTYPE_ITEM, GI_BOOTS_IRON, true, &IronBoots, IRON_BOOTS); - itemTable[HOVER_BOOTS] = Item(Text{"Hover Boots", "Bottes des airs", "Botas voladoras"}, ITEMTYPE_ITEM, GI_BOOTS_HOVER, true, &HoverBoots, HOVER_BOOTS); + itemTable[GIANTS_KNIFE] = Item(RG_GIANTS_KNIFE, Text{"Giant's Knife", "Lame des Géants", "Espada de Biggoron"}, ITEMTYPE_ITEM, GI_SWORD_KNIFE, false, &noVariable, GIANTS_KNIFE); + itemTable[BIGGORON_SWORD] = Item(RG_BIGGORON_SWORD, Text{"Biggoron's Sword", "Épée de Biggoron", "Espada de Biggoron"}, ITEMTYPE_ITEM, GI_SWORD_BGS, true, &BiggoronSword, BIGGORON_SWORD); + itemTable[DEKU_SHIELD] = Item(RG_DEKU_SHIELD, Text{"Deku Shield", "Bouclier Mojo", "Escudo deku"}, ITEMTYPE_ITEM, GI_SHIELD_DEKU, false, &noVariable, DEKU_SHIELD); + itemTable[HYLIAN_SHIELD] = Item(RG_HYLIAN_SHIELD, Text{"Hylian Shield", "Bouclier Hylien", "Escudo hyliano"}, ITEMTYPE_ITEM, GI_SHIELD_HYLIAN, false, &noVariable, HYLIAN_SHIELD); + itemTable[MIRROR_SHIELD] = Item(RG_MIRROR_SHIELD, Text{"Mirror Shield", "Bouclier Miroir", "Escudo espejo"}, ITEMTYPE_ITEM, GI_SHIELD_MIRROR, true, &MirrorShield, MIRROR_SHIELD); + itemTable[GORON_TUNIC] = Item(RG_GORON_TUNIC, Text{"Goron Tunic", "Tunique Goron", "Sayo goron"}, ITEMTYPE_ITEM, GI_TUNIC_GORON, true, &GoronTunic, GORON_TUNIC); + itemTable[ZORA_TUNIC] = Item(RG_ZORA_TUNIC, Text{"Zora Tunic", "Tunique Zora", "Sayo zora"}, ITEMTYPE_ITEM, GI_TUNIC_ZORA, true, &ZoraTunic, ZORA_TUNIC); + itemTable[IRON_BOOTS] = Item(RG_IRON_BOOTS, Text{"Iron Boots", "Bottes de plomb", "Botas de hierro"}, ITEMTYPE_ITEM, GI_BOOTS_IRON, true, &IronBoots, IRON_BOOTS); + itemTable[HOVER_BOOTS] = Item(RG_HOVER_BOOTS, Text{"Hover Boots", "Bottes des airs", "Botas voladoras"}, ITEMTYPE_ITEM, GI_BOOTS_HOVER, true, &HoverBoots, HOVER_BOOTS); - itemTable[BOOMERANG] = Item(Text{"Boomerang", "Boomerang", "Búmeran"}, ITEMTYPE_ITEM, GI_BOOMERANG, true, &Boomerang, BOOMERANG); - itemTable[LENS_OF_TRUTH] = Item(Text{"Lens of Truth", "Monocle de Vérité", "Lupa de la Verdad"}, ITEMTYPE_ITEM, GI_LENS, true, &LensOfTruth, LENS_OF_TRUTH); - itemTable[MEGATON_HAMMER] = Item(Text{"Megaton Hammer", "Masse des Titans", "Martillo Megatón"}, ITEMTYPE_ITEM, GI_HAMMER, true, &Hammer, MEGATON_HAMMER); - itemTable[STONE_OF_AGONY] = Item(Text{"Stone of Agony", "Pierre de Souffrance", "Piedra de la Agonía"}, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, &ShardOfAgony, STONE_OF_AGONY); - itemTable[DINS_FIRE] = Item(Text{"Din's Fire", "Feu de Din", "Fuego de Din"}, ITEMTYPE_ITEM, GI_DINS_FIRE, true, &DinsFire, DINS_FIRE); - itemTable[FARORES_WIND] = Item(Text{"Farore's Wind", "Vent de Farore", "Viento de Farore"}, ITEMTYPE_ITEM, GI_FARORES_WIND, true, &FaroresWind, FARORES_WIND); - itemTable[NAYRUS_LOVE] = Item(Text{"Nayru's Love", "Amour de Nayru", "Amor de Nayru"}, ITEMTYPE_ITEM, GI_NAYRUS_LOVE, true, &NayrusLove, NAYRUS_LOVE); - itemTable[FIRE_ARROWS] = Item(Text{"Fire Arrow", "Flèche de Feu", "Flecha de fuego"}, ITEMTYPE_ITEM, GI_ARROW_FIRE, true, &FireArrows, FIRE_ARROWS); - itemTable[ICE_ARROWS] = Item(Text{"Ice Arrow", "Flèche de Glace", "Flecha de hielo"}, ITEMTYPE_ITEM, GI_ARROW_ICE, true, &IceArrows, ICE_ARROWS); - itemTable[LIGHT_ARROWS] = Item(Text{"Light Arrow", "Flèche de Lumière", "Flecha de luz"}, ITEMTYPE_ITEM, GI_ARROW_LIGHT, true, &LightArrows, LIGHT_ARROWS); - itemTable[GERUDO_MEMBERSHIP_CARD] = Item(Text{"Gerudo Membership Card", "Carte Gerudo", "Pase de socio gerudo"}, ITEMTYPE_ITEM, GI_GERUDO_CARD, true, &GerudoToken, GERUDO_MEMBERSHIP_CARD); - itemTable[MAGIC_BEAN] = Item(Text{"Magic Bean", "Haricots Magiques", "Habichuelas mágicas"}, ITEMTYPE_ITEM, GI_BEAN, true, &MagicBean, MAGIC_BEAN); - itemTable[MAGIC_BEAN_PACK] = Item(Text{"Magic Bean Pack", "Paquet de Haricots Magiques", "Lote de habichuelas mágicas"}, ITEMTYPE_ITEM, 0xC9, true, &MagicBeanPack, MAGIC_BEAN_PACK); - itemTable[DOUBLE_DEFENSE] = Item(Text{"Double Defense", "Double Défence", "Doble poder defensivo"}, ITEMTYPE_ITEM, 0xB8, true, &DoubleDefense, DOUBLE_DEFENSE); + itemTable[BOOMERANG] = Item(RG_BOOMERANG, Text{"Boomerang", "Boomerang", "Búmeran"}, ITEMTYPE_ITEM, GI_BOOMERANG, true, &Boomerang, BOOMERANG); + itemTable[LENS_OF_TRUTH] = Item(RG_LENS_OF_TRUTH, Text{"Lens of Truth", "Monocle de Vérité", "Lupa de la Verdad"}, ITEMTYPE_ITEM, GI_LENS, true, &LensOfTruth, LENS_OF_TRUTH); + itemTable[MEGATON_HAMMER] = Item(RG_MEGATON_HAMMER, Text{"Megaton Hammer", "Masse des Titans", "Martillo Megatón"}, ITEMTYPE_ITEM, GI_HAMMER, true, &Hammer, MEGATON_HAMMER); + itemTable[STONE_OF_AGONY] = Item(RG_STONE_OF_AGONY, Text{"Stone of Agony", "Pierre de Souffrance", "Piedra de la Agonía"}, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, &ShardOfAgony, STONE_OF_AGONY); + itemTable[DINS_FIRE] = Item(RG_DINS_FIRE, Text{"Din's Fire", "Feu de Din", "Fuego de Din"}, ITEMTYPE_ITEM, GI_DINS_FIRE, true, &DinsFire, DINS_FIRE); + itemTable[FARORES_WIND] = Item(RG_FARORES_WIND, Text{"Farore's Wind", "Vent de Farore", "Viento de Farore"}, ITEMTYPE_ITEM, GI_FARORES_WIND, true, &FaroresWind, FARORES_WIND); + itemTable[NAYRUS_LOVE] = Item(RG_NAYRUS_LOVE, Text{"Nayru's Love", "Amour de Nayru", "Amor de Nayru"}, ITEMTYPE_ITEM, GI_NAYRUS_LOVE, true, &NayrusLove, NAYRUS_LOVE); + itemTable[FIRE_ARROWS] = Item(RG_FIRE_ARROWS, Text{"Fire Arrow", "Flèche de Feu", "Flecha de fuego"}, ITEMTYPE_ITEM, GI_ARROW_FIRE, true, &FireArrows, FIRE_ARROWS); + itemTable[ICE_ARROWS] = Item(RG_ICE_ARROWS, Text{"Ice Arrow", "Flèche de Glace", "Flecha de hielo"}, ITEMTYPE_ITEM, GI_ARROW_ICE, true, &IceArrows, ICE_ARROWS); + itemTable[LIGHT_ARROWS] = Item(RG_LIGHT_ARROWS, Text{"Light Arrow", "Flèche de Lumière", "Flecha de luz"}, ITEMTYPE_ITEM, GI_ARROW_LIGHT, true, &LightArrows, LIGHT_ARROWS); + itemTable[GERUDO_MEMBERSHIP_CARD] = Item(RG_GERUDO_MEMBERSHIP_CARD, Text{"Gerudo Membership Card", "Carte Gerudo", "Pase de socio gerudo"}, ITEMTYPE_ITEM, GI_GERUDO_CARD, true, &GerudoToken, GERUDO_MEMBERSHIP_CARD); + itemTable[MAGIC_BEAN] = Item(RG_MAGIC_BEAN, Text{"Magic Bean", "Haricots Magiques", "Habichuelas mágicas"}, ITEMTYPE_ITEM, GI_BEAN, true, &MagicBean, MAGIC_BEAN); + itemTable[MAGIC_BEAN_PACK] = Item(RG_MAGIC_BEAN_PACK, Text{"Magic Bean Pack", "Paquet de Haricots Magiques", "Lote de habichuelas mágicas"}, ITEMTYPE_ITEM, 0xC9, true, &MagicBeanPack, MAGIC_BEAN_PACK); + itemTable[DOUBLE_DEFENSE] = Item(RG_DOUBLE_DEFENSE, Text{"Double Defense", "Double Défence", "Doble poder defensivo"}, ITEMTYPE_ITEM, 0xB8, true, &DoubleDefense, DOUBLE_DEFENSE); - itemTable[WEIRD_EGG] = Item(Text{"Weird Egg", "Oeuf Curieux", "Huevo extraño"}, ITEMTYPE_ITEM, GI_WEIRD_EGG, true, &WeirdEgg, WEIRD_EGG); -// itemTable[CUCCO] = Item(Text{"Cucco", "Cocotte", "Cuco"}, ITEMTYPE_ITEM, GI_CUCCO, true, &Cucco, CUCCO); - itemTable[ZELDAS_LETTER] = Item(Text{"Zelda's Letter", "Lettre de Zelda", "Carta de Zelda"}, ITEMTYPE_ITEM, GI_LETTER_ZELDA, true, &ZeldasLetter, ZELDAS_LETTER); -// itemTable[KEATON_MASK] = Item(Text{"Keaton Mask", "Masque du Renard", "Careta de Keaton"}, ITEMTYPE_ITEM, GI_MASK_KEATON, true, &KeatonMask, KEATON_MASK); -// itemTable[SKULL_MASK] = Item(Text{"Skull Mask", "Masque de Mort", "Máscara de calavera"}, ITEMTYPE_ITEM, GI_MASK_SKULL, true, &SkullMask, SKULL_MASK); -// itemTable[SPOOKY_MASK] = Item(Text{"Spooky Mask", "Masque d'Effroi", "Máscara tenebrosa"}, ITEMTYPE_ITEM, GI_MASK_SPOOKY, true, &SpookyMask, SPOOKY_MASK); -// itemTable[BUNNY_HOOD] = Item(Text{"Bunny Hood", "Masque du Lapin", "Capucha de conejo"}, ITEMTYPE_ITEM, GI_MASK_BUNNY, true, &BunnyHood, BUNNY_HOOD); -// itemTable[GORON_MASK] = Item(Text{"Goron Mask", "Masque de Goron", "Máscara Goron"}, ITEMTYPE_ITEM, GI_MASK_GORON, true, &GoronMask, GORON_MASK); -// itemTable[ZORA_MASK] = Item(Text{"Zora Mask", "Masque de Zora", "Máscara Zora"}, ITEMTYPE_ITEM, GI_MASK_ZORA, true, &ZoraMask, ZORA_MASK); -// itemTable[GERUDO_MASK] = Item(Text{"Gerudo Mask", "Masque de Gerudo", "Máscara Gerudo"}, ITEMTYPE_ITEM, GI_MASK_GERUDO, true, &GerudoMask, GERUDO_MASK); -// itemTable[MASK_OF_TRUTH] = Item(Text{"Mask of Truth", "Masque de Vérité", "Máscara de la Verdad"}, ITEMTYPE_ITEM, GI_MASK_MASK, true, &MaskofTruth, MASK_OF_TRUTH); - itemTable[POCKET_EGG] = Item(Text{"Pocket Egg", "Oeuf de poche", "Huevo de bolsillo"}, ITEMTYPE_ITEM, GI_POCKET_EGG, true, &PocketEgg, POCKET_EGG); -// itemTable[POCKET_CUCCO] = Item(Text{"Pocket Cucco", "Cocotte de poche", "Cuco de bolsillo"}, ITEMTYPE_ITEM, GI_POCKET_CUCCO, true, &PocketCucco, POCKET_CUCCO); - itemTable[COJIRO] = Item(Text{"Cojiro", "P'tit Poulet", "Cojiro"}, ITEMTYPE_ITEM, GI_COJIRO, true, &Cojiro, COJIRO); - itemTable[ODD_MUSHROOM] = Item(Text{"Odd Mushroom", "Champignon Suspect", "Champiñón extraño"}, ITEMTYPE_ITEM, GI_ODD_MUSHROOM, true, &OddMushroom, ODD_MUSHROOM); - itemTable[ODD_POTION] = Item(Text{"Odd Potion", "Mixture Suspecte", "Medicina rara"}, ITEMTYPE_ITEM, GI_ODD_POTION, true, &OddPoultice, ODD_POTION); - itemTable[POACHERS_SAW] = Item(Text{"Poacher's Saw", "Scie du Chasseur", "Sierra del furtivo"}, ITEMTYPE_ITEM, GI_SAW, true, &PoachersSaw, POACHERS_SAW); - itemTable[BROKEN_SWORD] = Item(Text{"Broken Goron's Sword", "Épée Brisée de Goron", "Espada goron rota"}, ITEMTYPE_ITEM, GI_SWORD_BROKEN, true, &BrokenSword, BROKEN_SWORD); - itemTable[PRESCRIPTION] = Item(Text{"Prescription", "Ordonnance", "Receta"}, ITEMTYPE_ITEM, GI_PRESCRIPTION, true, &Prescription, PRESCRIPTION); - itemTable[EYEBALL_FROG] = Item(Text{"Eyeball Frog", "Crapaud-qui-louche", "Rana de ojos saltones"}, ITEMTYPE_ITEM, GI_FROG, true, &EyeballFrog, EYEBALL_FROG); - itemTable[EYEDROPS] = Item(Text{"World's Finest Eyedrops", "Super Gouttes", "Supergotas oculares"}, ITEMTYPE_ITEM, GI_EYEDROPS, true, &Eyedrops, EYEDROPS); - itemTable[CLAIM_CHECK] = Item(Text{"Claim Check", "Certificat", "Recibo"}, ITEMTYPE_ITEM, GI_CLAIM_CHECK, true, &ClaimCheck, CLAIM_CHECK); + itemTable[WEIRD_EGG] = Item(RG_WEIRD_EGG, Text{"Weird Egg", "Oeuf Curieux", "Huevo extraño"}, ITEMTYPE_ITEM, GI_WEIRD_EGG, true, &WeirdEgg, WEIRD_EGG); +// itemTable[CUCCO] = Item(RG_CUCCO, Text{"Cucco", "Cocotte", "Cuco"}, ITEMTYPE_ITEM, GI_CUCCO, true, &Cucco, CUCCO); + itemTable[ZELDAS_LETTER] = Item(RG_ZELDAS_LETTER, Text{"Zelda's Letter", "Lettre de Zelda", "Carta de Zelda"}, ITEMTYPE_ITEM, GI_LETTER_ZELDA, true, &ZeldasLetter, ZELDAS_LETTER); +// itemTable[KEATON_MASK] = Item(RG_KEATON_MASK, Text{"Keaton Mask", "Masque du Renard", "Careta de Keaton"}, ITEMTYPE_ITEM, GI_MASK_KEATON, true, &KeatonMask, KEATON_MASK); +// itemTable[SKULL_MASK] = Item(RG_SKULL_MASK, Text{"Skull Mask", "Masque de Mort", "Máscara de calavera"}, ITEMTYPE_ITEM, GI_MASK_SKULL, true, &SkullMask, SKULL_MASK); +// itemTable[SPOOKY_MASK] = Item(RG_SPOOKY_MASK, Text{"Spooky Mask", "Masque d'Effroi", "Máscara tenebrosa"}, ITEMTYPE_ITEM, GI_MASK_SPOOKY, true, &SpookyMask, SPOOKY_MASK); +// itemTable[BUNNY_HOOD] = Item(RG_BUNNY_HOOD, Text{"Bunny Hood", "Masque du Lapin", "Capucha de conejo"}, ITEMTYPE_ITEM, GI_MASK_BUNNY, true, &BunnyHood, BUNNY_HOOD); +// itemTable[GORON_MASK] = Item(RG_GORON_MASK, Text{"Goron Mask", "Masque de Goron", "Máscara Goron"}, ITEMTYPE_ITEM, GI_MASK_GORON, true, &GoronMask, GORON_MASK); +// itemTable[ZORA_MASK] = Item(RG_ZORA_MASK, Text{"Zora Mask", "Masque de Zora", "Máscara Zora"}, ITEMTYPE_ITEM, GI_MASK_ZORA, true, &ZoraMask, ZORA_MASK); +// itemTable[GERUDO_MASK] = Item(RG_GERUDO_MASK, Text{"Gerudo Mask", "Masque de Gerudo", "Máscara Gerudo"}, ITEMTYPE_ITEM, GI_MASK_GERUDO, true, &GerudoMask, GERUDO_MASK); +// itemTable[MASK_OF_TRUTH] = Item(RG_MASK_OF_TRUTH, Text{"Mask of Truth", "Masque de Vérité", "Máscara de la Verdad"}, ITEMTYPE_ITEM, GI_MASK_MASK, true, &MaskofTruth, MASK_OF_TRUTH); + itemTable[POCKET_EGG] = Item(RG_POCKET_EGG, Text{"Pocket Egg", "Oeuf de poche", "Huevo de bolsillo"}, ITEMTYPE_ITEM, GI_POCKET_EGG, true, &PocketEgg, POCKET_EGG); +// itemTable[POCKET_CUCCO] = Item(RG_POCKET_CUCCO, Text{"Pocket Cucco", "Cocotte de poche", "Cuco de bolsillo"}, ITEMTYPE_ITEM, GI_POCKET_CUCCO, true, &PocketCucco, POCKET_CUCCO); + itemTable[COJIRO] = Item(RG_COJIRO, Text{"Cojiro", "P'tit Poulet", "Cojiro"}, ITEMTYPE_ITEM, GI_COJIRO, true, &Cojiro, COJIRO); + itemTable[ODD_MUSHROOM] = Item(RG_ODD_MUSHROOM, Text{"Odd Mushroom", "Champignon Suspect", "Champiñón extraño"}, ITEMTYPE_ITEM, GI_ODD_MUSHROOM, true, &OddMushroom, ODD_MUSHROOM); + itemTable[ODD_POTION] = Item(RG_ODD_POTION, Text{"Odd Potion", "Mixture Suspecte", "Medicina rara"}, ITEMTYPE_ITEM, GI_ODD_POTION, true, &OddPoultice, ODD_POTION); + itemTable[POACHERS_SAW] = Item(RG_POACHERS_SAW, Text{"Poacher's Saw", "Scie du Chasseur", "Sierra del furtivo"}, ITEMTYPE_ITEM, GI_SAW, true, &PoachersSaw, POACHERS_SAW); + itemTable[BROKEN_SWORD] = Item(RG_BROKEN_SWORD, Text{"Broken Goron's Sword", "Épée Brisée de Goron", "Espada goron rota"}, ITEMTYPE_ITEM, GI_SWORD_BROKEN, true, &BrokenSword, BROKEN_SWORD); + itemTable[PRESCRIPTION] = Item(RG_PRESCRIPTION, Text{"Prescription", "Ordonnance", "Receta"}, ITEMTYPE_ITEM, GI_PRESCRIPTION, true, &Prescription, PRESCRIPTION); + itemTable[EYEBALL_FROG] = Item(RG_EYEBALL_FROG, Text{"Eyeball Frog", "Crapaud-qui-louche", "Rana de ojos saltones"}, ITEMTYPE_ITEM, GI_FROG, true, &EyeballFrog, EYEBALL_FROG); + itemTable[EYEDROPS] = Item(RG_EYEDROPS, Text{"World's Finest Eyedrops", "Super Gouttes", "Supergotas oculares"}, ITEMTYPE_ITEM, GI_EYEDROPS, true, &Eyedrops, EYEDROPS); + itemTable[CLAIM_CHECK] = Item(RG_CLAIM_CHECK, Text{"Claim Check", "Certificat", "Recibo"}, ITEMTYPE_ITEM, GI_CLAIM_CHECK, true, &ClaimCheck, CLAIM_CHECK); - itemTable[GOLD_SKULLTULA_TOKEN] = Item(Text{"Gold Skulltula Token", "Symbole de Skulltula d'Or", "Símbolo de skulltula dorada"}, ITEMTYPE_TOKEN, GI_SKULL_TOKEN, true, &GoldSkulltulaTokens, GOLD_SKULLTULA_TOKEN); + itemTable[GOLD_SKULLTULA_TOKEN] = Item(RG_GOLD_SKULLTULA_TOKEN, Text{"Gold Skulltula Token", "Symbole de Skulltula d'Or", "Símbolo de skulltula dorada"}, ITEMTYPE_TOKEN, GI_SKULL_TOKEN, true, &GoldSkulltulaTokens, GOLD_SKULLTULA_TOKEN); //Progression Items - itemTable[PROGRESSIVE_HOOKSHOT] = Item(Text{"Progressive Hookshot", "Grappin (prog.)", "Gancho progresivo"}, ITEMTYPE_ITEM, 0x80, true, &ProgressiveHookshot, PROGRESSIVE_HOOKSHOT); - itemTable[PROGRESSIVE_STRENGTH] = Item(Text{"Progressive Strength Upgrade", "Amélioration de Force (prog.)", "Fuerza progresiva"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, PROGRESSIVE_STRENGTH); - itemTable[PROGRESSIVE_BOMB_BAG] = Item(Text{"Progressive Bomb Bag", "Sac de Bombes (prog.)", "Saco de bombas progresivo"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, PROGRESSIVE_BOMB_BAG); - itemTable[PROGRESSIVE_BOW] = Item(Text{"Progressive Bow", "Arc (prog.)", "Arco progresivo"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, PROGRESSIVE_BOW); - itemTable[PROGRESSIVE_SLINGSHOT] = Item(Text{"Progressive Slingshot", "Lance-Pierre (prog.)", "Resortera progresiva"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, PROGRESSIVE_SLINGSHOT); - itemTable[PROGRESSIVE_WALLET] = Item(Text{"Progressive Wallet", "Bourse (prog.)", "Bolsa de rupias progresiva"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, PROGRESSIVE_WALLET); - itemTable[PROGRESSIVE_SCALE] = Item(Text{"Progressive Scale", "Écaille (prog.)", "Escama progresiva"}, ITEMTYPE_ITEM, 0x86, true, &ProgressiveScale, PROGRESSIVE_SCALE); - itemTable[PROGRESSIVE_NUT_UPGRADE] = Item(Text{"Progressive Nut Capacity", "Capacité de Noix (prog.)", "Capacidad de nueces deku progresiva"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, PROGRESSIVE_NUT_UPGRADE); - itemTable[PROGRESSIVE_STICK_UPGRADE] = Item(Text{"Progressive Stick Capacity", "Capacité de Bâtons (prog.)", "Capacidad de palos deku progresiva"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, PROGRESSIVE_STICK_UPGRADE); - itemTable[PROGRESSIVE_BOMBCHUS] = Item(Text{"Progressive Bombchu", "Missiles (prog.)", "Bombchus progresivos"}, ITEMTYPE_ITEM, 0x89, true, &Bombchus, PROGRESSIVE_BOMBCHUS); - itemTable[PROGRESSIVE_MAGIC_METER] = Item(Text{"Progressive Magic Meter", "Jauge de Magie (prog.)", "Poder mágico progresivo"}, ITEMTYPE_ITEM, 0x8A, true, &ProgressiveMagic, PROGRESSIVE_MAGIC_METER); - itemTable[PROGRESSIVE_OCARINA] = Item(Text{"Progressive Ocarina", "Ocarina (prog.)", "Ocarina progresiva"}, ITEMTYPE_ITEM, 0x8B, true, &ProgressiveOcarina, PROGRESSIVE_OCARINA); - itemTable[PROGRESSIVE_GORONSWORD] = Item(Text{"Progressive Goron Sword", "Épée Goron (prog.)", "Espada Goron progresiva"}, ITEMTYPE_ITEM, 0xD4, true, &ProgressiveGiantKnife, PROGRESSIVE_GORONSWORD); + itemTable[PROGRESSIVE_HOOKSHOT] = Item(RG_PROGRESSIVE_HOOKSHOT, Text{"Progressive Hookshot", "Grappin (prog.)", "Gancho progresivo"}, ITEMTYPE_ITEM, 0x80, true, &ProgressiveHookshot, PROGRESSIVE_HOOKSHOT); + itemTable[PROGRESSIVE_STRENGTH] = Item(RG_PROGRESSIVE_STRENGTH, Text{"Progressive Strength Upgrade", "Amélioration de Force (prog.)", "Fuerza progresiva"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, PROGRESSIVE_STRENGTH); + itemTable[PROGRESSIVE_BOMB_BAG] = Item(RG_PROGRESSIVE_BOMB_BAG, Text{"Progressive Bomb Bag", "Sac de Bombes (prog.)", "Saco de bombas progresivo"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, PROGRESSIVE_BOMB_BAG); + itemTable[PROGRESSIVE_BOW] = Item(RG_PROGRESSIVE_BOW, Text{"Progressive Bow", "Arc (prog.)", "Arco progresivo"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, PROGRESSIVE_BOW); + itemTable[PROGRESSIVE_SLINGSHOT] = Item(RG_PROGRESSIVE_SLINGSHOT, Text{"Progressive Slingshot", "Lance-Pierre (prog.)", "Resortera progresiva"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, PROGRESSIVE_SLINGSHOT); + itemTable[PROGRESSIVE_WALLET] = Item(RG_PROGRESSIVE_WALLET, Text{"Progressive Wallet", "Bourse (prog.)", "Bolsa de rupias progresiva"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, PROGRESSIVE_WALLET); + itemTable[PROGRESSIVE_SCALE] = Item(RG_PROGRESSIVE_SCALE, Text{"Progressive Scale", "Écaille (prog.)", "Escama progresiva"}, ITEMTYPE_ITEM, 0x86, true, &ProgressiveScale, PROGRESSIVE_SCALE); + itemTable[PROGRESSIVE_NUT_UPGRADE] = Item(RG_PROGRESSIVE_NUT_UPGRADE, Text{"Progressive Nut Capacity", "Capacité de Noix (prog.)", "Capacidad de nueces deku progresiva"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, PROGRESSIVE_NUT_UPGRADE); + itemTable[PROGRESSIVE_STICK_UPGRADE] = Item(RG_PROGRESSIVE_STICK_UPGRADE, Text{"Progressive Stick Capacity", "Capacité de Bâtons (prog.)", "Capacidad de palos deku progresiva"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, PROGRESSIVE_STICK_UPGRADE); + itemTable[PROGRESSIVE_BOMBCHUS] = Item(RG_PROGRESSIVE_BOMBCHUS, Text{"Progressive Bombchu", "Missiles (prog.)", "Bombchus progresivos"}, ITEMTYPE_ITEM, 0x89, true, &Bombchus, PROGRESSIVE_BOMBCHUS); + itemTable[PROGRESSIVE_MAGIC_METER] = Item(RG_PROGRESSIVE_MAGIC_METER, Text{"Progressive Magic Meter", "Jauge de Magie (prog.)", "Poder mágico progresivo"}, ITEMTYPE_ITEM, 0x8A, true, &ProgressiveMagic, PROGRESSIVE_MAGIC_METER); + itemTable[PROGRESSIVE_OCARINA] = Item(RG_PROGRESSIVE_OCARINA, Text{"Progressive Ocarina", "Ocarina (prog.)", "Ocarina progresiva"}, ITEMTYPE_ITEM, 0x8B, true, &ProgressiveOcarina, PROGRESSIVE_OCARINA); + itemTable[PROGRESSIVE_GORONSWORD] = Item(RG_PROGRESSIVE_GORONSWORD, Text{"Progressive Goron Sword", "Épée Goron (prog.)", "Espada Goron progresiva"}, ITEMTYPE_ITEM, 0xD4, true, &ProgressiveGiantKnife, PROGRESSIVE_GORONSWORD); //Bottles - itemTable[EMPTY_BOTTLE] = Item(Text{"Empty Bottle", "Bouteille Vide", "Botella vacía"}, ITEMTYPE_ITEM, 0x0F, true, &Bottles, EMPTY_BOTTLE); - itemTable[BOTTLE_WITH_MILK] = Item(Text{"Bottle with Milk", "Bouteille avec du Lait", "Botella de leche Lon Lon"}, ITEMTYPE_ITEM, 0x14, true, &Bottles, BOTTLE_WITH_MILK); - itemTable[BOTTLE_WITH_RED_POTION] = Item(Text{"Bottle with Red Potion", "Bouteille avec une Potion Rouge", "Botella de poción roja"}, ITEMTYPE_ITEM, 0x8C, true, &Bottles, BOTTLE_WITH_RED_POTION); - itemTable[BOTTLE_WITH_GREEN_POTION] = Item(Text{"Bottle with Green Potion", "Bouteille avec une Potion Verte", "Botella de poción verde"}, ITEMTYPE_ITEM, 0x8D, true, &Bottles, BOTTLE_WITH_GREEN_POTION); - itemTable[BOTTLE_WITH_BLUE_POTION] = Item(Text{"Bottle with Blue Potion", "Bouteille avec une Potion Bleue", "Botella de poción azul"}, ITEMTYPE_ITEM, 0x8E, true, &Bottles, BOTTLE_WITH_BLUE_POTION); - itemTable[BOTTLE_WITH_FAIRY] = Item(Text{"Bottle with Fairy", "Bouteille avec une Fée", "Hada en una botella"}, ITEMTYPE_ITEM, 0x8F, true, &Bottles, BOTTLE_WITH_FAIRY); - itemTable[BOTTLE_WITH_FISH] = Item(Text{"Bottle with Fish", "Bouteille avec un Poisson", "Pez en una botella"}, ITEMTYPE_ITEM, 0x90, true, &Bottles, BOTTLE_WITH_FISH); - itemTable[BOTTLE_WITH_BLUE_FIRE] = Item(Text{"Bottle with Blue Fire", "Bouteille avec une Flamme Bleue", "Botella de fuego azul"}, ITEMTYPE_ITEM, 0x91, true, &Bottles, BOTTLE_WITH_BLUE_FIRE); - itemTable[BOTTLE_WITH_BUGS] = Item(Text{"Bottle with Bugs", "Bouteille avec des Insectes", "Insecto en una botella"}, ITEMTYPE_ITEM, 0x92, true, &Bottles, BOTTLE_WITH_BUGS); - itemTable[BOTTLE_WITH_POE] = Item(Text{"Bottle with Poe", "Bouteille avec un Esprit", "Poe en una botella"}, ITEMTYPE_ITEM, 0x94, true, &Bottles, BOTTLE_WITH_POE); + itemTable[EMPTY_BOTTLE] = Item(RG_EMPTY_BOTTLE, Text{"Empty Bottle", "Bouteille Vide", "Botella vacía"}, ITEMTYPE_ITEM, 0x0F, true, &Bottles, EMPTY_BOTTLE); + itemTable[BOTTLE_WITH_MILK] = Item(RG_BOTTLE_WITH_MILK, Text{"Bottle with Milk", "Bouteille avec du Lait", "Botella de leche Lon Lon"}, ITEMTYPE_ITEM, 0x14, true, &Bottles, BOTTLE_WITH_MILK); + itemTable[BOTTLE_WITH_RED_POTION] = Item(RG_BOTTLE_WITH_RED_POTION, Text{"Bottle with Red Potion", "Bouteille avec une Potion Rouge", "Botella de poción roja"}, ITEMTYPE_ITEM, 0x8C, true, &Bottles, BOTTLE_WITH_RED_POTION); + itemTable[BOTTLE_WITH_GREEN_POTION] = Item(RG_BOTTLE_WITH_GREEN_POTION, Text{"Bottle with Green Potion", "Bouteille avec une Potion Verte", "Botella de poción verde"}, ITEMTYPE_ITEM, 0x8D, true, &Bottles, BOTTLE_WITH_GREEN_POTION); + itemTable[BOTTLE_WITH_BLUE_POTION] = Item(RG_BOTTLE_WITH_BLUE_POTION, Text{"Bottle with Blue Potion", "Bouteille avec une Potion Bleue", "Botella de poción azul"}, ITEMTYPE_ITEM, 0x8E, true, &Bottles, BOTTLE_WITH_BLUE_POTION); + itemTable[BOTTLE_WITH_FAIRY] = Item(RG_BOTTLE_WITH_FAIRY, Text{"Bottle with Fairy", "Bouteille avec une Fée", "Hada en una botella"}, ITEMTYPE_ITEM, 0x8F, true, &Bottles, BOTTLE_WITH_FAIRY); + itemTable[BOTTLE_WITH_FISH] = Item(RG_BOTTLE_WITH_FISH, Text{"Bottle with Fish", "Bouteille avec un Poisson", "Pez en una botella"}, ITEMTYPE_ITEM, 0x90, true, &Bottles, BOTTLE_WITH_FISH); + itemTable[BOTTLE_WITH_BLUE_FIRE] = Item(RG_BOTTLE_WITH_BLUE_FIRE, Text{"Bottle with Blue Fire", "Bouteille avec une Flamme Bleue", "Botella de fuego azul"}, ITEMTYPE_ITEM, 0x91, true, &Bottles, BOTTLE_WITH_BLUE_FIRE); + itemTable[BOTTLE_WITH_BUGS] = Item(RG_BOTTLE_WITH_BUGS, Text{"Bottle with Bugs", "Bouteille avec des Insectes", "Insecto en una botella"}, ITEMTYPE_ITEM, 0x92, true, &Bottles, BOTTLE_WITH_BUGS); + itemTable[BOTTLE_WITH_POE] = Item(RG_BOTTLE_WITH_POE, Text{"Bottle with Poe", "Bouteille avec un Esprit", "Poe en una botella"}, ITEMTYPE_ITEM, 0x94, true, &Bottles, BOTTLE_WITH_POE); //Special bottles that can't immediately dump contents - itemTable[RUTOS_LETTER] = Item(Text{"Bottle with Ruto's Letter", "Bouteille avec la Lettre de Ruto", "Carta de Ruto"}, ITEMTYPE_ITEM, 0x15, true, &RutosLetter, RUTOS_LETTER); - itemTable[BOTTLE_WITH_BIG_POE] = Item(Text{"Bottle with Big Poe", "Bouteille avec une Âme", "Gran Poe en una botella"}, ITEMTYPE_ITEM, 0x93, true, &BottleWithBigPoe, BOTTLE_WITH_BIG_POE); + itemTable[RUTOS_LETTER] = Item(RG_RUTOS_LETTER, Text{"Bottle with Ruto's Letter", "Bouteille avec la Lettre de Ruto", "Carta de Ruto"}, ITEMTYPE_ITEM, 0x15, true, &RutosLetter, RUTOS_LETTER); + itemTable[BOTTLE_WITH_BIG_POE] = Item(RG_BOTTLE_WITH_BIG_POE, Text{"Bottle with Big Poe", "Bouteille avec une Âme", "Gran Poe en una botella"}, ITEMTYPE_ITEM, 0x93, true, &BottleWithBigPoe, BOTTLE_WITH_BIG_POE); //Songs - itemTable[ZELDAS_LULLABY] = Item(Text{"Zelda's Lullaby", "Berceuse de Zelda", "Nana de Zelda"}, ITEMTYPE_SONG, 0xC1, true, &ZeldasLullaby, ZELDAS_LULLABY); - itemTable[EPONAS_SONG] = Item(Text{"Epona's Song", "Chant d'Épona", "Canción de Epona"}, ITEMTYPE_SONG, 0xC2, true, &EponasSong, EPONAS_SONG); - itemTable[SARIAS_SONG] = Item(Text{"Saria's Song", "Chant de Saria", "Canción de Saria"}, ITEMTYPE_SONG, 0xC3, true, &SariasSong, SARIAS_SONG); - itemTable[SUNS_SONG] = Item(Text{"Sun's Song", "Chant du Soleil", "Canción del Sol"}, ITEMTYPE_SONG, 0xC4, true, &SunsSong, SUNS_SONG); - itemTable[SONG_OF_TIME] = Item(Text{"Song of Time", "Chant du Temps", "Canción del tiempo"}, ITEMTYPE_SONG, 0xC5, true, &SongOfTime, SONG_OF_TIME); - itemTable[SONG_OF_STORMS] = Item(Text{"Song of Storms", "Chant des Tempêtes", "Canción de la tormenta"}, ITEMTYPE_SONG, 0xC6, true, &SongOfStorms, SONG_OF_STORMS); - itemTable[MINUET_OF_FOREST] = Item(Text{"Minuet of Forest", "Menuet des Bois", "Minueto del bosque"}, ITEMTYPE_SONG, 0xBB, true, &MinuetOfForest, MINUET_OF_FOREST); - itemTable[BOLERO_OF_FIRE] = Item(Text{"Bolero of Fire", "Boléro du Feu", "Bolero del fuego"}, ITEMTYPE_SONG, 0xBC, true, &BoleroOfFire, BOLERO_OF_FIRE); - itemTable[SERENADE_OF_WATER] = Item(Text{"Serenade of Water", "Sérénade de l'Eau", "Serenata del agua"}, ITEMTYPE_SONG, 0xBD, true, &SerenadeOfWater, SERENADE_OF_WATER); - itemTable[REQUIEM_OF_SPIRIT] = Item(Text{"Requiem of Spirit", "Requiem des Esprits", "Réquiem del espíritu"}, ITEMTYPE_SONG, 0xBE, true, &RequiemOfSpirit, REQUIEM_OF_SPIRIT); - itemTable[NOCTURNE_OF_SHADOW] = Item(Text{"Nocturne of Shadow", "Nocturne de l'Ombre", "Nocturno de la sombra"}, ITEMTYPE_SONG, 0xBF, true, &NocturneOfShadow, NOCTURNE_OF_SHADOW); - itemTable[PRELUDE_OF_LIGHT] = Item(Text{"Prelude of Light", "Prélude de la Lumière", "Preludio de la luz"}, ITEMTYPE_SONG, 0xC0, true, &PreludeOfLight, PRELUDE_OF_LIGHT); + itemTable[ZELDAS_LULLABY] = Item(RG_ZELDAS_LULLABY, Text{"Zelda's Lullaby", "Berceuse de Zelda", "Nana de Zelda"}, ITEMTYPE_SONG, 0xC1, true, &ZeldasLullaby, ZELDAS_LULLABY); + itemTable[EPONAS_SONG] = Item(RG_EPONAS_SONG, Text{"Epona's Song", "Chant d'Épona", "Canción de Epona"}, ITEMTYPE_SONG, 0xC2, true, &EponasSong, EPONAS_SONG); + itemTable[SARIAS_SONG] = Item(RG_SARIAS_SONG, Text{"Saria's Song", "Chant de Saria", "Canción de Saria"}, ITEMTYPE_SONG, 0xC3, true, &SariasSong, SARIAS_SONG); + itemTable[SUNS_SONG] = Item(RG_SUNS_SONG, Text{"Sun's Song", "Chant du Soleil", "Canción del Sol"}, ITEMTYPE_SONG, 0xC4, true, &SunsSong, SUNS_SONG); + itemTable[SONG_OF_TIME] = Item(RG_SONG_OF_TIME, Text{"Song of Time", "Chant du Temps", "Canción del tiempo"}, ITEMTYPE_SONG, 0xC5, true, &SongOfTime, SONG_OF_TIME); + itemTable[SONG_OF_STORMS] = Item(RG_SONG_OF_STORMS, Text{"Song of Storms", "Chant des Tempêtes", "Canción de la tormenta"}, ITEMTYPE_SONG, 0xC6, true, &SongOfStorms, SONG_OF_STORMS); + itemTable[MINUET_OF_FOREST] = Item(RG_MINUET_OF_FOREST, Text{"Minuet of Forest", "Menuet des Bois", "Minueto del bosque"}, ITEMTYPE_SONG, 0xBB, true, &MinuetOfForest, MINUET_OF_FOREST); + itemTable[BOLERO_OF_FIRE] = Item(RG_BOLERO_OF_FIRE, Text{"Bolero of Fire", "Boléro du Feu", "Bolero del fuego"}, ITEMTYPE_SONG, 0xBC, true, &BoleroOfFire, BOLERO_OF_FIRE); + itemTable[SERENADE_OF_WATER] = Item(RG_SERENADE_OF_WATER, Text{"Serenade of Water", "Sérénade de l'Eau", "Serenata del agua"}, ITEMTYPE_SONG, 0xBD, true, &SerenadeOfWater, SERENADE_OF_WATER); + itemTable[REQUIEM_OF_SPIRIT] = Item(RG_REQUIEM_OF_SPIRIT, Text{"Requiem of Spirit", "Requiem des Esprits", "Réquiem del espíritu"}, ITEMTYPE_SONG, 0xBE, true, &RequiemOfSpirit, REQUIEM_OF_SPIRIT); + itemTable[NOCTURNE_OF_SHADOW] = Item(RG_NOCTURNE_OF_SHADOW, Text{"Nocturne of Shadow", "Nocturne de l'Ombre", "Nocturno de la sombra"}, ITEMTYPE_SONG, 0xBF, true, &NocturneOfShadow, NOCTURNE_OF_SHADOW); + itemTable[PRELUDE_OF_LIGHT] = Item(RG_PRELUDE_OF_LIGHT, Text{"Prelude of Light", "Prélude de la Lumière", "Preludio de la luz"}, ITEMTYPE_SONG, 0xC0, true, &PreludeOfLight, PRELUDE_OF_LIGHT); //Maps and Compasses - itemTable[DEKU_TREE_MAP] = Item(Text{"Great Deku Tree Map", "Carte de l'Arbre Mojo", "Mapa del Gran Árbol Deku"}, ITEMTYPE_MAP, 0xA5, false, &noVariable, DEKU_TREE_MAP); - itemTable[DODONGOS_CAVERN_MAP] = Item(Text{"Dodongo's Cavern Map", "Carte de la Caverne Dodongo", "Mapa de la Cueva de los Dodongos"}, ITEMTYPE_MAP, 0xA6, false, &noVariable, DODONGOS_CAVERN_MAP); - itemTable[JABU_JABUS_BELLY_MAP] = Item(Text{"Jabu-Jabu's Belly Map", "Carte du Ventre de Jabu-Jabu", "Mapa de la tripa de Jabu-Jabu"}, ITEMTYPE_MAP, 0xA7, false, &noVariable, JABU_JABUS_BELLY_MAP); - itemTable[FOREST_TEMPLE_MAP] = Item(Text{"Forest Temple Map", "Carte du Temple de la Forêt", "Mapa del Templo del Bosque"}, ITEMTYPE_MAP, 0xA8, false, &noVariable, FOREST_TEMPLE_MAP); - itemTable[FIRE_TEMPLE_MAP] = Item(Text{"Fire Temple Map", "Carte du Temple du Feu", "Mapa del Templo del Fuego"}, ITEMTYPE_MAP, 0xA9, false, &noVariable, FIRE_TEMPLE_MAP); - itemTable[WATER_TEMPLE_MAP] = Item(Text{"Water Temple Map", "Carte du Temple de l'Eau", "Mapa del Templo del Agua"}, ITEMTYPE_MAP, 0xAA, false, &noVariable, WATER_TEMPLE_MAP); - itemTable[SPIRIT_TEMPLE_MAP] = Item(Text{"Spirit Temple Map", "Carte du Temple de l'Esprit", "Mapa del Templo del Espíritu"}, ITEMTYPE_MAP, 0xAB, false, &noVariable, SPIRIT_TEMPLE_MAP); - itemTable[SHADOW_TEMPLE_MAP] = Item(Text{"Shadow Temple Map", "Carte du Temple de l'Ombre", "Mapa del Templo de la Sombra"}, ITEMTYPE_MAP, 0xAC, false, &noVariable, SHADOW_TEMPLE_MAP); - itemTable[BOTTOM_OF_THE_WELL_MAP] = Item(Text{"Bottom of the Well Map", "Carte du Puits", "Mapa del fondo del pozo"}, ITEMTYPE_MAP, 0xAD, false, &noVariable, BOTTOM_OF_THE_WELL_MAP); - itemTable[ICE_CAVERN_MAP] = Item(Text{"Ice Cavern Map", "Carte de la Caverne Polaire", "Mapa de la caverna de hielo"}, ITEMTYPE_MAP, 0xAE, false, &noVariable, ICE_CAVERN_MAP); + itemTable[DEKU_TREE_MAP] = Item(RG_DEKU_TREE_MAP, Text{"Great Deku Tree Map", "Carte de l'Arbre Mojo", "Mapa del Gran Árbol Deku"}, ITEMTYPE_MAP, 0xA5, false, &noVariable, DEKU_TREE_MAP); + itemTable[DODONGOS_CAVERN_MAP] = Item(RG_DODONGOS_CAVERN_MAP, Text{"Dodongo's Cavern Map", "Carte de la Caverne Dodongo", "Mapa de la Cueva de los Dodongos"}, ITEMTYPE_MAP, 0xA6, false, &noVariable, DODONGOS_CAVERN_MAP); + itemTable[JABU_JABUS_BELLY_MAP] = Item(RG_JABU_JABUS_BELLY_MAP, Text{"Jabu-Jabu's Belly Map", "Carte du Ventre de Jabu-Jabu", "Mapa de la tripa de Jabu-Jabu"}, ITEMTYPE_MAP, 0xA7, false, &noVariable, JABU_JABUS_BELLY_MAP); + itemTable[FOREST_TEMPLE_MAP] = Item(RG_FOREST_TEMPLE_MAP, Text{"Forest Temple Map", "Carte du Temple de la Forêt", "Mapa del Templo del Bosque"}, ITEMTYPE_MAP, 0xA8, false, &noVariable, FOREST_TEMPLE_MAP); + itemTable[FIRE_TEMPLE_MAP] = Item(RG_FIRE_TEMPLE_MAP, Text{"Fire Temple Map", "Carte du Temple du Feu", "Mapa del Templo del Fuego"}, ITEMTYPE_MAP, 0xA9, false, &noVariable, FIRE_TEMPLE_MAP); + itemTable[WATER_TEMPLE_MAP] = Item(RG_WATER_TEMPLE_MAP, Text{"Water Temple Map", "Carte du Temple de l'Eau", "Mapa del Templo del Agua"}, ITEMTYPE_MAP, 0xAA, false, &noVariable, WATER_TEMPLE_MAP); + itemTable[SPIRIT_TEMPLE_MAP] = Item(RG_SPIRIT_TEMPLE_MAP, Text{"Spirit Temple Map", "Carte du Temple de l'Esprit", "Mapa del Templo del Espíritu"}, ITEMTYPE_MAP, 0xAB, false, &noVariable, SPIRIT_TEMPLE_MAP); + itemTable[SHADOW_TEMPLE_MAP] = Item(RG_SHADOW_TEMPLE_MAP, Text{"Shadow Temple Map", "Carte du Temple de l'Ombre", "Mapa del Templo de la Sombra"}, ITEMTYPE_MAP, 0xAC, false, &noVariable, SHADOW_TEMPLE_MAP); + itemTable[BOTTOM_OF_THE_WELL_MAP] = Item(RG_BOTTOM_OF_THE_WELL_MAP, Text{"Bottom of the Well Map", "Carte du Puits", "Mapa del fondo del pozo"}, ITEMTYPE_MAP, 0xAD, false, &noVariable, BOTTOM_OF_THE_WELL_MAP); + itemTable[ICE_CAVERN_MAP] = Item(RG_ICE_CAVERN_MAP, Text{"Ice Cavern Map", "Carte de la Caverne Polaire", "Mapa de la caverna de hielo"}, ITEMTYPE_MAP, 0xAE, false, &noVariable, ICE_CAVERN_MAP); - itemTable[DEKU_TREE_COMPASS] = Item(Text{"Great Deku Tree Compass", "Boussole de l'Arbre Mojo", "Brújula del Gran Árbol Deku"}, ITEMTYPE_COMPASS, 0x9B, false, &noVariable, DEKU_TREE_COMPASS); - itemTable[DODONGOS_CAVERN_COMPASS] = Item(Text{"Dodongo's Cavern Compass", "Boussole de la Caverne Dodongo", "Brújula de la Cueva de los Dodongos"}, ITEMTYPE_COMPASS, 0x9C, false, &noVariable, DODONGOS_CAVERN_COMPASS); - itemTable[JABU_JABUS_BELLY_COMPASS] = Item(Text{"Jabu-Jabu's Belly Compass", "Boussole du Ventre de Jabu-Jabu", "Brújula de la tripa de Jabu-Jabu"}, ITEMTYPE_COMPASS, 0x9D, false, &noVariable, JABU_JABUS_BELLY_COMPASS); - itemTable[FOREST_TEMPLE_COMPASS] = Item(Text{"Forest Temple Compass", "Boussole du Temple de la Forêt", "Brújula del Templo del Bosque"}, ITEMTYPE_COMPASS, 0x9E, false, &noVariable, FOREST_TEMPLE_COMPASS); - itemTable[FIRE_TEMPLE_COMPASS] = Item(Text{"Fire Temple Compass", "Boussole du Temple du Feu", "Brújula del Templo del Fuego"}, ITEMTYPE_COMPASS, 0x9F, false, &noVariable, FIRE_TEMPLE_COMPASS); - itemTable[WATER_TEMPLE_COMPASS] = Item(Text{"Water Temple Compass", "Boussole du Temple de l'Eau", "Brújula del Templo del Agua"}, ITEMTYPE_COMPASS, 0xA0, false, &noVariable, WATER_TEMPLE_COMPASS); - itemTable[SPIRIT_TEMPLE_COMPASS] = Item(Text{"Spirit Temple Compass", "Boussole du Temple de l'Esprit", "Brújula del Templo del Espíritu"}, ITEMTYPE_COMPASS, 0xA1, false, &noVariable, SPIRIT_TEMPLE_COMPASS); - itemTable[SHADOW_TEMPLE_COMPASS] = Item(Text{"Shadow Temple Compass", "Boussole du Temple de l'Ombre", "Brújula del Templo de las Sombras"}, ITEMTYPE_COMPASS, 0xA2, false, &noVariable, SHADOW_TEMPLE_COMPASS); - itemTable[BOTTOM_OF_THE_WELL_COMPASS] = Item(Text{"Bottom of the Well Compass", "Boussole du Puits", "Brújula del fondo del pozo"}, ITEMTYPE_COMPASS, 0xA3, false, &noVariable, BOTTOM_OF_THE_WELL_COMPASS); - itemTable[ICE_CAVERN_COMPASS] = Item(Text{"Ice Cavern Compass", "Boussole de la Caverne Polaire", "Brújula de la caverna de hielo"}, ITEMTYPE_COMPASS, 0xA4, false, &noVariable, ICE_CAVERN_COMPASS); + itemTable[DEKU_TREE_COMPASS] = Item(RG_DEKU_TREE_COMPASS, Text{"Great Deku Tree Compass", "Boussole de l'Arbre Mojo", "Brújula del Gran Árbol Deku"}, ITEMTYPE_COMPASS, 0x9B, false, &noVariable, DEKU_TREE_COMPASS); + itemTable[DODONGOS_CAVERN_COMPASS] = Item(RG_DODONGOS_CAVERN_COMPASS, Text{"Dodongo's Cavern Compass", "Boussole de la Caverne Dodongo", "Brújula de la Cueva de los Dodongos"}, ITEMTYPE_COMPASS, 0x9C, false, &noVariable, DODONGOS_CAVERN_COMPASS); + itemTable[JABU_JABUS_BELLY_COMPASS] = Item(RG_JABU_JABUS_BELLY_COMPASS, Text{"Jabu-Jabu's Belly Compass", "Boussole du Ventre de Jabu-Jabu", "Brújula de la tripa de Jabu-Jabu"}, ITEMTYPE_COMPASS, 0x9D, false, &noVariable, JABU_JABUS_BELLY_COMPASS); + itemTable[FOREST_TEMPLE_COMPASS] = Item(RG_FOREST_TEMPLE_COMPASS, Text{"Forest Temple Compass", "Boussole du Temple de la Forêt", "Brújula del Templo del Bosque"}, ITEMTYPE_COMPASS, 0x9E, false, &noVariable, FOREST_TEMPLE_COMPASS); + itemTable[FIRE_TEMPLE_COMPASS] = Item(RG_FIRE_TEMPLE_COMPASS, Text{"Fire Temple Compass", "Boussole du Temple du Feu", "Brújula del Templo del Fuego"}, ITEMTYPE_COMPASS, 0x9F, false, &noVariable, FIRE_TEMPLE_COMPASS); + itemTable[WATER_TEMPLE_COMPASS] = Item(RG_WATER_TEMPLE_COMPASS, Text{"Water Temple Compass", "Boussole du Temple de l'Eau", "Brújula del Templo del Agua"}, ITEMTYPE_COMPASS, 0xA0, false, &noVariable, WATER_TEMPLE_COMPASS); + itemTable[SPIRIT_TEMPLE_COMPASS] = Item(RG_SPIRIT_TEMPLE_COMPASS, Text{"Spirit Temple Compass", "Boussole du Temple de l'Esprit", "Brújula del Templo del Espíritu"}, ITEMTYPE_COMPASS, 0xA1, false, &noVariable, SPIRIT_TEMPLE_COMPASS); + itemTable[SHADOW_TEMPLE_COMPASS] = Item(RG_SHADOW_TEMPLE_COMPASS, Text{"Shadow Temple Compass", "Boussole du Temple de l'Ombre", "Brújula del Templo de las Sombras"}, ITEMTYPE_COMPASS, 0xA2, false, &noVariable, SHADOW_TEMPLE_COMPASS); + itemTable[BOTTOM_OF_THE_WELL_COMPASS] = Item(RG_BOTTOM_OF_THE_WELL_COMPASS, Text{"Bottom of the Well Compass", "Boussole du Puits", "Brújula del fondo del pozo"}, ITEMTYPE_COMPASS, 0xA3, false, &noVariable, BOTTOM_OF_THE_WELL_COMPASS); + itemTable[ICE_CAVERN_COMPASS] = Item(RG_ICE_CAVERN_COMPASS, Text{"Ice Cavern Compass", "Boussole de la Caverne Polaire", "Brújula de la caverna de hielo"}, ITEMTYPE_COMPASS, 0xA4, false, &noVariable, ICE_CAVERN_COMPASS); //Boss Keys - itemTable[FOREST_TEMPLE_BOSS_KEY] = Item(Text{"Forest Temple Big Key", "Clé d'Or du Temple de la Forêt", "Gran llave del Templo del Bosque"}, ITEMTYPE_BOSSKEY, 0x95, true, &BossKeyForestTemple, FOREST_TEMPLE_BOSS_KEY); - itemTable[FIRE_TEMPLE_BOSS_KEY] = Item(Text{"Fire Temple Big Key", "Clé d'Or du Temple du Feu", "Gran llave del Templo del Fuego"}, ITEMTYPE_BOSSKEY, 0x96, true, &BossKeyFireTemple, FIRE_TEMPLE_BOSS_KEY); - itemTable[WATER_TEMPLE_BOSS_KEY] = Item(Text{"Water Temple Big Key", "Clé d'Or du Temple de l'Eau", "Gran llave del Templo del Agua"}, ITEMTYPE_BOSSKEY, 0x97, true, &BossKeyWaterTemple, WATER_TEMPLE_BOSS_KEY); - itemTable[SPIRIT_TEMPLE_BOSS_KEY] = Item(Text{"Spirit Temple Big Key", "Clé d'Or du Temple de l'Esprit", "Gran llave del Templo del Espíritu"}, ITEMTYPE_BOSSKEY, 0x98, true, &BossKeySpiritTemple, SPIRIT_TEMPLE_BOSS_KEY); - itemTable[SHADOW_TEMPLE_BOSS_KEY] = Item(Text{"Shadow Temple Big Key", "Clé d'Or du Temple de l'Ombre", "Gran llave del Templo de las Sombras"}, ITEMTYPE_BOSSKEY, 0x99, true, &BossKeyShadowTemple, SHADOW_TEMPLE_BOSS_KEY); - itemTable[GANONS_CASTLE_BOSS_KEY] = Item(Text{"Ganon's Castle Big Key", "Clé d'Or du Château de Ganon", "Gran llave del Castillo de Ganon"}, ITEMTYPE_BOSSKEY, 0x9A, true, &BossKeyGanonsCastle, GANONS_CASTLE_BOSS_KEY); + itemTable[FOREST_TEMPLE_BOSS_KEY] = Item(RG_FOREST_TEMPLE_BOSS_KEY, Text{"Forest Temple Big Key", "Clé d'Or du Temple de la Forêt", "Gran llave del Templo del Bosque"}, ITEMTYPE_BOSSKEY, 0x95, true, &BossKeyForestTemple, FOREST_TEMPLE_BOSS_KEY); + itemTable[FIRE_TEMPLE_BOSS_KEY] = Item(RG_FIRE_TEMPLE_BOSS_KEY, Text{"Fire Temple Big Key", "Clé d'Or du Temple du Feu", "Gran llave del Templo del Fuego"}, ITEMTYPE_BOSSKEY, 0x96, true, &BossKeyFireTemple, FIRE_TEMPLE_BOSS_KEY); + itemTable[WATER_TEMPLE_BOSS_KEY] = Item(RG_WATER_TEMPLE_BOSS_KEY, Text{"Water Temple Big Key", "Clé d'Or du Temple de l'Eau", "Gran llave del Templo del Agua"}, ITEMTYPE_BOSSKEY, 0x97, true, &BossKeyWaterTemple, WATER_TEMPLE_BOSS_KEY); + itemTable[SPIRIT_TEMPLE_BOSS_KEY] = Item(RG_SPIRIT_TEMPLE_BOSS_KEY, Text{"Spirit Temple Big Key", "Clé d'Or du Temple de l'Esprit", "Gran llave del Templo del Espíritu"}, ITEMTYPE_BOSSKEY, 0x98, true, &BossKeySpiritTemple, SPIRIT_TEMPLE_BOSS_KEY); + itemTable[SHADOW_TEMPLE_BOSS_KEY] = Item(RG_SHADOW_TEMPLE_BOSS_KEY, Text{"Shadow Temple Big Key", "Clé d'Or du Temple de l'Ombre", "Gran llave del Templo de las Sombras"}, ITEMTYPE_BOSSKEY, 0x99, true, &BossKeyShadowTemple, SHADOW_TEMPLE_BOSS_KEY); + itemTable[GANONS_CASTLE_BOSS_KEY] = Item(RG_GANONS_CASTLE_BOSS_KEY, Text{"Ganon's Castle Big Key", "Clé d'Or du Château de Ganon", "Gran llave del Castillo de Ganon"}, ITEMTYPE_BOSSKEY, 0x9A, true, &BossKeyGanonsCastle, GANONS_CASTLE_BOSS_KEY); //Small Keys - itemTable[FOREST_TEMPLE_SMALL_KEY] = Item(Text{"Forest Temple Small Key", "Petite Clé du Temple de la Forêt", "Llave del Templo del Bosque"}, ITEMTYPE_SMALLKEY, 0xAF, true, &ForestTempleKeys, FOREST_TEMPLE_SMALL_KEY); - itemTable[FIRE_TEMPLE_SMALL_KEY] = Item(Text{"Fire Temple Small Key", "Petite Clé du Temple du Feu", "Llave del Templo del Fuego"}, ITEMTYPE_SMALLKEY, 0xB0, true, &FireTempleKeys, FIRE_TEMPLE_SMALL_KEY); - itemTable[WATER_TEMPLE_SMALL_KEY] = Item(Text{"Water Temple Small Key", "Petite Clé du Temple de l'Eau", "Llave del Templo del Agua"}, ITEMTYPE_SMALLKEY, 0xB1, true, &WaterTempleKeys, WATER_TEMPLE_SMALL_KEY); - itemTable[SPIRIT_TEMPLE_SMALL_KEY] = Item(Text{"Spirit Temple Small Key", "Petite Clé du Temple de l'Esprit", "Llave del Templo del Espíritu"}, ITEMTYPE_SMALLKEY, 0xB2, true, &SpiritTempleKeys, SPIRIT_TEMPLE_SMALL_KEY); - itemTable[SHADOW_TEMPLE_SMALL_KEY] = Item(Text{"Shadow Temple Small Key", "Petite Clé du Temple de l'Ombre", "Llave del Templo de las Sombras"}, ITEMTYPE_SMALLKEY, 0xB3, true, &ShadowTempleKeys, SHADOW_TEMPLE_SMALL_KEY); - itemTable[BOTTOM_OF_THE_WELL_SMALL_KEY] = Item(Text{"Bottom of the Well Small Key", "Petite Clé du Puits", "Llave del fondo del pozo"}, ITEMTYPE_SMALLKEY, 0xB4, true, &BottomOfTheWellKeys, BOTTOM_OF_THE_WELL_SMALL_KEY); - itemTable[GERUDO_TRAINING_GROUNDS_SMALL_KEY] = Item(Text{"Training Grounds Small Key", "Petite Clé du Gymnase Gerudo", "Llave del Centro de Instrucción"}, ITEMTYPE_SMALLKEY, 0xB5, true, &GerudoTrainingGroundsKeys, GERUDO_TRAINING_GROUNDS_SMALL_KEY); - itemTable[GERUDO_FORTRESS_SMALL_KEY] = Item(Text{"Gerudo Fortress Small Key", "Petite Clé du Repaire des Voleurs","Llave de la Fortaleza Gerudo"}, ITEMTYPE_FORTRESS_SMALLKEY, 0xB6, true, &GerudoFortressKeys, GERUDO_FORTRESS_SMALL_KEY); - itemTable[GANONS_CASTLE_SMALL_KEY] = Item(Text{"Ganon's Castle Small Key", "Petite Clé du Château de Ganon", "Llave del Castillo de Ganon"}, ITEMTYPE_SMALLKEY, 0xB7, true, &GanonsCastleKeys, GANONS_CASTLE_SMALL_KEY); - itemTable[TREASURE_GAME_SMALL_KEY] = Item(Text{"Chest Game Small Key", "Petite Clé du jeu la Chasse-aux-Trésors", "Llave del Cofre del Tesoro"}, ITEMTYPE_ITEM, 0xDE, true, &TreasureGameKeys, TREASURE_GAME_SMALL_KEY); + itemTable[FOREST_TEMPLE_SMALL_KEY] = Item(RG_FOREST_TEMPLE_SMALL_KEY, Text{"Forest Temple Small Key", "Petite Clé du Temple de la Forêt", "Llave del Templo del Bosque"}, ITEMTYPE_SMALLKEY, 0xAF, true, &ForestTempleKeys, FOREST_TEMPLE_SMALL_KEY); + itemTable[FIRE_TEMPLE_SMALL_KEY] = Item(RG_FIRE_TEMPLE_SMALL_KEY, Text{"Fire Temple Small Key", "Petite Clé du Temple du Feu", "Llave del Templo del Fuego"}, ITEMTYPE_SMALLKEY, 0xB0, true, &FireTempleKeys, FIRE_TEMPLE_SMALL_KEY); + itemTable[WATER_TEMPLE_SMALL_KEY] = Item(RG_WATER_TEMPLE_SMALL_KEY, Text{"Water Temple Small Key", "Petite Clé du Temple de l'Eau", "Llave del Templo del Agua"}, ITEMTYPE_SMALLKEY, 0xB1, true, &WaterTempleKeys, WATER_TEMPLE_SMALL_KEY); + itemTable[SPIRIT_TEMPLE_SMALL_KEY] = Item(RG_SPIRIT_TEMPLE_SMALL_KEY, Text{"Spirit Temple Small Key", "Petite Clé du Temple de l'Esprit", "Llave del Templo del Espíritu"}, ITEMTYPE_SMALLKEY, 0xB2, true, &SpiritTempleKeys, SPIRIT_TEMPLE_SMALL_KEY); + itemTable[SHADOW_TEMPLE_SMALL_KEY] = Item(RG_SHADOW_TEMPLE_SMALL_KEY, Text{"Shadow Temple Small Key", "Petite Clé du Temple de l'Ombre", "Llave del Templo de las Sombras"}, ITEMTYPE_SMALLKEY, 0xB3, true, &ShadowTempleKeys, SHADOW_TEMPLE_SMALL_KEY); + itemTable[BOTTOM_OF_THE_WELL_SMALL_KEY] = Item(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, Text{"Bottom of the Well Small Key", "Petite Clé du Puits", "Llave del fondo del pozo"}, ITEMTYPE_SMALLKEY, 0xB4, true, &BottomOfTheWellKeys, BOTTOM_OF_THE_WELL_SMALL_KEY); + itemTable[GERUDO_TRAINING_GROUNDS_SMALL_KEY] = Item(RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, Text{"Training Grounds Small Key", "Petite Clé du Gymnase Gerudo", "Llave del Centro de Instrucción"}, ITEMTYPE_SMALLKEY, 0xB5, true, &GerudoTrainingGroundsKeys, GERUDO_TRAINING_GROUNDS_SMALL_KEY); + itemTable[GERUDO_FORTRESS_SMALL_KEY] = Item(RG_GERUDO_FORTRESS_SMALL_KEY, Text{"Gerudo Fortress Small Key", "Petite Clé du Repaire des Voleurs","Llave de la Fortaleza Gerudo"}, ITEMTYPE_FORTRESS_SMALLKEY, 0xB6, true, &GerudoFortressKeys, GERUDO_FORTRESS_SMALL_KEY); + itemTable[GANONS_CASTLE_SMALL_KEY] = Item(RG_GANONS_CASTLE_SMALL_KEY, Text{"Ganon's Castle Small Key", "Petite Clé du Château de Ganon", "Llave del Castillo de Ganon"}, ITEMTYPE_SMALLKEY, 0xB7, true, &GanonsCastleKeys, GANONS_CASTLE_SMALL_KEY); + itemTable[TREASURE_GAME_SMALL_KEY] = Item(RG_TREASURE_GAME_SMALL_KEY, Text{"Chest Game Small Key", "Petite Clé du jeu la Chasse-aux-Trésors","Llave del Cofre del Tesoro"}, ITEMTYPE_ITEM, 0xDE, true, &TreasureGameKeys, TREASURE_GAME_SMALL_KEY); // Key Rings - itemTable[FOREST_TEMPLE_KEY_RING] = Item(Text{"Forest Temple Key Ring", "Trousseau du Temple de la Forêt", "Llavero del Templo del Bosque"}, ITEMTYPE_SMALLKEY, 0xD5, true, &ForestTempleKeys, FOREST_TEMPLE_KEY_RING); - itemTable[FIRE_TEMPLE_KEY_RING] = Item(Text{"Fire Temple Key Ring", "Trousseau du Temple du Feu", "Llavero del Templo del Fuego"}, ITEMTYPE_SMALLKEY, 0xD6, true, &FireTempleKeys, FIRE_TEMPLE_KEY_RING); - itemTable[WATER_TEMPLE_KEY_RING] = Item(Text{"Water Temple Key Ring", "Trousseau du Temple de l'Eau", "Llavero del Templo del Agua"}, ITEMTYPE_SMALLKEY, 0xD7, true, &WaterTempleKeys, WATER_TEMPLE_KEY_RING); - itemTable[SPIRIT_TEMPLE_KEY_RING] = Item(Text{"Spirit Temple Key Ring", "Trousseau du Temple de l'Esprit", "Llavero del Templo del Espíritu"}, ITEMTYPE_SMALLKEY, 0xD8, true, &SpiritTempleKeys, SPIRIT_TEMPLE_KEY_RING); - itemTable[SHADOW_TEMPLE_KEY_RING] = Item(Text{"Shadow Temple Key Ring", "Trousseau du Temple de l'Ombre", "Llavero del Templo de las Sombras"}, ITEMTYPE_SMALLKEY, 0xD9, true, &ShadowTempleKeys, SHADOW_TEMPLE_KEY_RING); - itemTable[BOTTOM_OF_THE_WELL_KEY_RING] = Item(Text{"Bottom of the Well Key Ring", "Trousseau du Puits", "Llavero del fondo del pozo"}, ITEMTYPE_SMALLKEY, 0xDA, true, &BottomOfTheWellKeys, BOTTOM_OF_THE_WELL_KEY_RING); - itemTable[GERUDO_TRAINING_GROUNDS_KEY_RING] = Item(Text{"Training Grounds Key Ring", "Trousseau du Gymnase Gerudo", "Llavero del Centro de Instrucción"}, ITEMTYPE_SMALLKEY, 0xDB, true, &GerudoTrainingGroundsKeys, GERUDO_TRAINING_GROUNDS_KEY_RING); - itemTable[GERUDO_FORTRESS_KEY_RING] = Item(Text{"Gerudo Fortress Key Ring", "Trousseau du Repaire des Voleurs", "Llavero de la Fortaleza Gerudo"}, ITEMTYPE_FORTRESS_SMALLKEY, 0xDC, true, &GerudoFortressKeys, GERUDO_FORTRESS_KEY_RING); - itemTable[GANONS_CASTLE_KEY_RING] = Item(Text{"Ganon's Castle Key Ring", "Trousseau du Château de Ganon", "Llavero del Castillo de Ganon"}, ITEMTYPE_SMALLKEY, 0xDD, true, &GanonsCastleKeys, GANONS_CASTLE_KEY_RING); + itemTable[FOREST_TEMPLE_KEY_RING] = Item(RG_FOREST_TEMPLE_KEY_RING, Text{"Forest Temple Key Ring", "Trousseau du Temple de la Forêt", "Llavero del Templo del Bosque"}, ITEMTYPE_SMALLKEY, 0xD5, true, &ForestTempleKeys, FOREST_TEMPLE_KEY_RING); + itemTable[FIRE_TEMPLE_KEY_RING] = Item(RG_FIRE_TEMPLE_KEY_RING, Text{"Fire Temple Key Ring", "Trousseau du Temple du Feu", "Llavero del Templo del Fuego"}, ITEMTYPE_SMALLKEY, 0xD6, true, &FireTempleKeys, FIRE_TEMPLE_KEY_RING); + itemTable[WATER_TEMPLE_KEY_RING] = Item(RG_WATER_TEMPLE_KEY_RING, Text{"Water Temple Key Ring", "Trousseau du Temple de l'Eau", "Llavero del Templo del Agua"}, ITEMTYPE_SMALLKEY, 0xD7, true, &WaterTempleKeys, WATER_TEMPLE_KEY_RING); + itemTable[SPIRIT_TEMPLE_KEY_RING] = Item(RG_SPIRIT_TEMPLE_KEY_RING, Text{"Spirit Temple Key Ring", "Trousseau du Temple de l'Esprit", "Llavero del Templo del Espíritu"}, ITEMTYPE_SMALLKEY, 0xD8, true, &SpiritTempleKeys, SPIRIT_TEMPLE_KEY_RING); + itemTable[SHADOW_TEMPLE_KEY_RING] = Item(RG_SHADOW_TEMPLE_KEY_RING, Text{"Shadow Temple Key Ring", "Trousseau du Temple de l'Ombre", "Llavero del Templo de las Sombras"}, ITEMTYPE_SMALLKEY, 0xD9, true, &ShadowTempleKeys, SHADOW_TEMPLE_KEY_RING); + itemTable[BOTTOM_OF_THE_WELL_KEY_RING] = Item(RG_BOTTOM_OF_THE_WELL_KEY_RING, Text{"Bottom of the Well Key Ring", "Trousseau du Puits", "Llavero del fondo del pozo"}, ITEMTYPE_SMALLKEY, 0xDA, true, &BottomOfTheWellKeys, BOTTOM_OF_THE_WELL_KEY_RING); + itemTable[GERUDO_TRAINING_GROUNDS_KEY_RING] = Item(RG_GERUDO_TRAINING_GROUNDS_KEY_RING, Text{"Training Grounds Key Ring", "Trousseau du Gymnase Gerudo", "Llavero del Centro de Instrucción"}, ITEMTYPE_SMALLKEY, 0xDB, true, &GerudoTrainingGroundsKeys, GERUDO_TRAINING_GROUNDS_KEY_RING); + itemTable[GERUDO_FORTRESS_KEY_RING] = Item(RG_GERUDO_FORTRESS_KEY_RING, Text{"Gerudo Fortress Key Ring", "Trousseau du Repaire des Voleurs", "Llavero de la Fortaleza Gerudo"}, ITEMTYPE_FORTRESS_SMALLKEY, 0xDC, true, &GerudoFortressKeys, GERUDO_FORTRESS_KEY_RING); + itemTable[GANONS_CASTLE_KEY_RING] = Item(RG_GANONS_CASTLE_KEY_RING, Text{"Ganon's Castle Key Ring", "Trousseau du Château de Ganon", "Llavero del Castillo de Ganon"}, ITEMTYPE_SMALLKEY, 0xDD, true, &GanonsCastleKeys, GANONS_CASTLE_KEY_RING); //Stones and Medallions - itemTable[KOKIRI_EMERALD] = Item(Text{"Kokiri's Emerald", "Émeraude Kokiri", "Esmeralda de los Kokiri"}, ITEMTYPE_DUNGEONREWARD, 0xCB, true, &KokiriEmerald, KOKIRI_EMERALD); - itemTable[GORON_RUBY] = Item(Text{"Goron's Ruby", "Rubis Goron", "Rubí de los Goron"}, ITEMTYPE_DUNGEONREWARD, 0xCC, true, &GoronRuby, GORON_RUBY); - itemTable[ZORA_SAPPHIRE] = Item(Text{"Zora's Sapphire", "Saphir Zora", "Zafiro de los Zora"}, ITEMTYPE_DUNGEONREWARD, 0xCD, true, &ZoraSapphire, ZORA_SAPPHIRE); - itemTable[FOREST_MEDALLION] = Item(Text{"Forest Medallion", "Médaillon de la Forêt", "Medallón del Bosque"}, ITEMTYPE_DUNGEONREWARD, 0xCE, true, &ForestMedallion, FOREST_MEDALLION); - itemTable[FIRE_MEDALLION] = Item(Text{"Fire Medallion", "Médaillon du Feu", "Medallón del Fuego"}, ITEMTYPE_DUNGEONREWARD, 0xCF, true, &FireMedallion, FIRE_MEDALLION); - itemTable[WATER_MEDALLION] = Item(Text{"Water Medallion", "Médaillon de l'Eau", "Medallón del Agua"}, ITEMTYPE_DUNGEONREWARD, 0xD0, true, &WaterMedallion, WATER_MEDALLION); - itemTable[SPIRIT_MEDALLION] = Item(Text{"Spirit Medallion", "Médaillon de l'Esprit", "Medallón del Espíritu"}, ITEMTYPE_DUNGEONREWARD, 0xD1, true, &SpiritMedallion, SPIRIT_MEDALLION); - itemTable[SHADOW_MEDALLION] = Item(Text{"Shadow Medallion", "Médaillon de l'Ombre", "Medallón de la Sombra"}, ITEMTYPE_DUNGEONREWARD, 0xD2, true, &ShadowMedallion, SHADOW_MEDALLION); - itemTable[LIGHT_MEDALLION] = Item(Text{"Light Medallion", "Médaillon de la Lumière", "Medallón de la Luz"}, ITEMTYPE_DUNGEONREWARD, 0xD3, true, &LightMedallion, LIGHT_MEDALLION); + itemTable[KOKIRI_EMERALD] = Item(RG_KOKIRI_EMERALD, Text{"Kokiri's Emerald", "Émeraude Kokiri", "Esmeralda de los Kokiri"}, ITEMTYPE_DUNGEONREWARD, 0xCB, true, &KokiriEmerald, KOKIRI_EMERALD); + itemTable[GORON_RUBY] = Item(RG_GORON_RUBY, Text{"Goron's Ruby", "Rubis Goron", "Rubí de los Goron"}, ITEMTYPE_DUNGEONREWARD, 0xCC, true, &GoronRuby, GORON_RUBY); + itemTable[ZORA_SAPPHIRE] = Item(RG_ZORA_SAPPHIRE, Text{"Zora's Sapphire", "Saphir Zora", "Zafiro de los Zora"}, ITEMTYPE_DUNGEONREWARD, 0xCD, true, &ZoraSapphire, ZORA_SAPPHIRE); + itemTable[FOREST_MEDALLION] = Item(RG_FOREST_MEDALLION, Text{"Forest Medallion", "Médaillon de la Forêt", "Medallón del Bosque"}, ITEMTYPE_DUNGEONREWARD, 0xCE, true, &ForestMedallion, FOREST_MEDALLION); + itemTable[FIRE_MEDALLION] = Item(RG_FIRE_MEDALLION, Text{"Fire Medallion", "Médaillon du Feu", "Medallón del Fuego"}, ITEMTYPE_DUNGEONREWARD, 0xCF, true, &FireMedallion, FIRE_MEDALLION); + itemTable[WATER_MEDALLION] = Item(RG_WATER_MEDALLION, Text{"Water Medallion", "Médaillon de l'Eau", "Medallón del Agua"}, ITEMTYPE_DUNGEONREWARD, 0xD0, true, &WaterMedallion, WATER_MEDALLION); + itemTable[SPIRIT_MEDALLION] = Item(RG_SPIRIT_MEDALLION, Text{"Spirit Medallion", "Médaillon de l'Esprit", "Medallón del Espíritu"}, ITEMTYPE_DUNGEONREWARD, 0xD1, true, &SpiritMedallion, SPIRIT_MEDALLION); + itemTable[SHADOW_MEDALLION] = Item(RG_SHADOW_MEDALLION, Text{"Shadow Medallion", "Médaillon de l'Ombre", "Medallón de la Sombra"}, ITEMTYPE_DUNGEONREWARD, 0xD2, true, &ShadowMedallion, SHADOW_MEDALLION); + itemTable[LIGHT_MEDALLION] = Item(RG_LIGHT_MEDALLION, Text{"Light Medallion", "Médaillon de la Lumière", "Medallón de la Luz"}, ITEMTYPE_DUNGEONREWARD, 0xD3, true, &LightMedallion, LIGHT_MEDALLION); //Generic Items - itemTable[RECOVERY_HEART] = Item(Text{"Recovery Heart", "Coeur de Vie", "Corazón"}, ITEMTYPE_ITEM, GI_HEART, false, &noVariable, RECOVERY_HEART); - itemTable[GREEN_RUPEE] = Item(Text{"Green Rupee", "Rubis Vert", "Rupia verde"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN, false, &noVariable, GREEN_RUPEE); - itemTable[BLUE_RUPEE] = Item(Text{"Blue Rupee", "Rubis Bleu", "Rupia azul"}, ITEMTYPE_ITEM, GI_RUPEE_BLUE, false, &noVariable, BLUE_RUPEE); - itemTable[RED_RUPEE] = Item(Text{"Red Rupee", "Rubis Rouge", "Rupia roja"}, ITEMTYPE_ITEM, GI_RUPEE_RED, false, &noVariable, RED_RUPEE); - itemTable[PURPLE_RUPEE] = Item(Text{"Purple Rupee", "Rubis Pourpre", "Rupia morada"}, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, false, &noVariable, PURPLE_RUPEE); - itemTable[HUGE_RUPEE] = Item(Text{"Huge Rupee", "Énorme Rubis", "Rupia gigante"}, ITEMTYPE_ITEM, GI_RUPEE_GOLD, false, &noVariable, HUGE_RUPEE); - itemTable[PIECE_OF_HEART] = Item(Text{"Piece of Heart", "Quart de Coeur", "Pieza de corazón"}, ITEMTYPE_ITEM, GI_HEART_PIECE, true, &PieceOfHeart, PIECE_OF_HEART); - itemTable[HEART_CONTAINER] = Item(Text{"Heart Container", "Réceptacle de Coeur", "Contenedor de corazón"}, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, &HeartContainer, HEART_CONTAINER); - itemTable[ICE_TRAP] = Item(Text{"Ice Trap", "Piège de Glace", "Trampa de hielo"}, ITEMTYPE_ITEM, GI_ICE_TRAP, false, &noVariable, ICE_TRAP); - itemTable[MILK] = Item(Text{"Milk", "Lait", "Leche Lon Lon"}, ITEMTYPE_ITEM, GI_MILK, false, &noVariable, NONE); + itemTable[RECOVERY_HEART] = Item(RG_RECOVERY_HEART, Text{"Recovery Heart", "Coeur de Vie", "Corazón"}, ITEMTYPE_ITEM, GI_HEART, false, &noVariable, RECOVERY_HEART); + itemTable[GREEN_RUPEE] = Item(RG_GREEN_RUPEE, Text{"Green Rupee", "Rubis Vert", "Rupia verde"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN, false, &noVariable, GREEN_RUPEE); + itemTable[BLUE_RUPEE] = Item(RG_BLUE_RUPEE, Text{"Blue Rupee", "Rubis Bleu", "Rupia azul"}, ITEMTYPE_ITEM, GI_RUPEE_BLUE, false, &noVariable, BLUE_RUPEE); + itemTable[RED_RUPEE] = Item(RG_RED_RUPEE, Text{"Red Rupee", "Rubis Rouge", "Rupia roja"}, ITEMTYPE_ITEM, GI_RUPEE_RED, false, &noVariable, RED_RUPEE); + itemTable[PURPLE_RUPEE] = Item(RG_PURPLE_RUPEE, Text{"Purple Rupee", "Rubis Pourpre", "Rupia morada"}, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, false, &noVariable, PURPLE_RUPEE); + itemTable[HUGE_RUPEE] = Item(RG_HUGE_RUPEE, Text{"Huge Rupee", "Énorme Rubis", "Rupia gigante"}, ITEMTYPE_ITEM, GI_RUPEE_GOLD, false, &noVariable, HUGE_RUPEE); + itemTable[PIECE_OF_HEART] = Item(RG_PIECE_OF_HEART, Text{"Piece of Heart", "Quart de Coeur", "Pieza de corazón"}, ITEMTYPE_ITEM, GI_HEART_PIECE, true, &PieceOfHeart, PIECE_OF_HEART); + itemTable[HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{"Heart Container", "Réceptacle de Coeur", "Contenedor de corazón"}, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, &HeartContainer, HEART_CONTAINER); + itemTable[ICE_TRAP] = Item(RG_ICE_TRAP, Text{"Ice Trap", "Piège de Glace", "Trampa de hielo"}, ITEMTYPE_ITEM, GI_ICE_TRAP, false, &noVariable, ICE_TRAP); + itemTable[MILK] = Item(RG_MILK, Text{"Milk", "Lait", "Leche Lon Lon"}, ITEMTYPE_ITEM, GI_MILK, false, &noVariable, NONE); //Refills - itemTable[BOMBS_5] = Item(Text{"Bombs (5)", "Bombes (5)", "Bombas (5)"}, ITEMTYPE_REFILL, GI_BOMBS_5, false, &noVariable, BOMBS_5); - itemTable[BOMBS_10] = Item(Text{"Bombs (10)", "Bombes (10)", "Bombas (10)"}, ITEMTYPE_REFILL, GI_BOMBS_10, false, &noVariable, BOMBS_10); - itemTable[BOMBS_20] = Item(Text{"Bombs (20)", "Bombes (20)", "Bombas (20)"}, ITEMTYPE_REFILL, GI_BOMBS_20, false, &noVariable, BOMBS_20); - itemTable[BOMBCHU_5] = Item(Text{"Bombchu (5)", "Missiles (5)", "Bombchus (5)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_5, true, &Bombchus5, BOMBCHU_5); - itemTable[BOMBCHU_10] = Item(Text{"Bombchu (10)", "Missiles (10)", "Bombchus (10)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_10, true, &Bombchus10, BOMBCHU_10); - itemTable[BOMBCHU_20] = Item(Text{"Bombchu (20)", "Missiles (20)", "Bombchus (20)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_20, true, &Bombchus20, BOMBCHU_20); - itemTable[BOMBCHU_DROP] = Item(Text{"Bombchu Drop", "Drop Missiles", "Bombchus"}, ITEMTYPE_DROP, GI_BOMBCHUS_10, true, &BombchuDrop, NONE); - itemTable[ARROWS_5] = Item(Text{"Arrows (5)", "Flèches (5)", "Flechas (5)"}, ITEMTYPE_REFILL, GI_ARROWS_SMALL, false, &noVariable, ARROWS_5); - itemTable[ARROWS_10] = Item(Text{"Arrows (10)", "Flèches (10)", "Flechas (10)"}, ITEMTYPE_REFILL, GI_ARROWS_MEDIUM, false, &noVariable, ARROWS_10); - itemTable[ARROWS_30] = Item(Text{"Arrows (30)", "Flèches (30)", "Flechas (30)"}, ITEMTYPE_REFILL, GI_ARROWS_LARGE, false, &noVariable, ARROWS_30); - itemTable[DEKU_NUTS_5] = Item(Text{"Deku Nuts (5)", "Noix Mojo (5)", "Nueces deku (5)"}, ITEMTYPE_REFILL, GI_NUTS_5, false, &noVariable, DEKU_NUTS_5); - itemTable[DEKU_NUTS_10] = Item(Text{"Deku Nuts (10)", "Noix Mojo (10)", "Nueces deku (10)"}, ITEMTYPE_REFILL, GI_NUTS_10, false, &noVariable, DEKU_NUTS_10); - itemTable[DEKU_SEEDS_30] = Item(Text{"Deku Seeds (30)", "Graines Mojo (30)", "Semillas deku (30)"}, ITEMTYPE_REFILL, GI_SEEDS_30, false, &noVariable, DEKU_SEEDS_30); - itemTable[DEKU_STICK_1] = Item(Text{"Deku Stick (1)", "Bâton Mojo (1)", "Palo deku (1)"}, ITEMTYPE_REFILL, GI_STICKS_1, false, &noVariable, DEKU_STICK_1); - itemTable[RED_POTION_REFILL] = Item(Text{"Red Potion Refill", "Recharge de Potion Rouge", "Recarga de poción roja"}, ITEMTYPE_REFILL, GI_POTION_RED, false, &noVariable, NONE); - itemTable[GREEN_POTION_REFILL] = Item(Text{"Green Potion Refill", "Recharge de Potion Verte", "Recarga de poción verde"}, ITEMTYPE_REFILL, GI_POTION_GREEN, false, &noVariable, NONE); - itemTable[BLUE_POTION_REFILL] = Item(Text{"Blue Potion Refill", "Recharge de Potion Bleue", "Recarga de poción azul"}, ITEMTYPE_REFILL, GI_POTION_BLUE, false, &noVariable, NONE); + itemTable[BOMBS_5] = Item(RG_BOMBS_5, Text{"Bombs (5)", "Bombes (5)", "Bombas (5)"}, ITEMTYPE_REFILL, GI_BOMBS_5, false, &noVariable, BOMBS_5); + itemTable[BOMBS_10] = Item(RG_BOMBS_10, Text{"Bombs (10)", "Bombes (10)", "Bombas (10)"}, ITEMTYPE_REFILL, GI_BOMBS_10, false, &noVariable, BOMBS_10); + itemTable[BOMBS_20] = Item(RG_BOMBS_20, Text{"Bombs (20)", "Bombes (20)", "Bombas (20)"}, ITEMTYPE_REFILL, GI_BOMBS_20, false, &noVariable, BOMBS_20); + itemTable[BOMBCHU_5] = Item(RG_BOMBCHU_5, Text{"Bombchu (5)", "Missiles (5)", "Bombchus (5)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_5, true, &Bombchus5, BOMBCHU_5); + itemTable[BOMBCHU_10] = Item(RG_BOMBCHU_10, Text{"Bombchu (10)", "Missiles (10)", "Bombchus (10)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_10, true, &Bombchus10, BOMBCHU_10); + itemTable[BOMBCHU_20] = Item(RG_BOMBCHU_20, Text{"Bombchu (20)", "Missiles (20)", "Bombchus (20)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_20, true, &Bombchus20, BOMBCHU_20); + itemTable[BOMBCHU_DROP] = Item(RG_BOMBCHU_DROP, Text{"Bombchu Drop", "Drop Missiles", "Bombchus"}, ITEMTYPE_DROP, GI_BOMBCHUS_10, true, &BombchuDrop, NONE); + itemTable[ARROWS_5] = Item(RG_ARROWS_5, Text{"Arrows (5)", "Flèches (5)", "Flechas (5)"}, ITEMTYPE_REFILL, GI_ARROWS_SMALL, false, &noVariable, ARROWS_5); + itemTable[ARROWS_10] = Item(RG_ARROWS_10, Text{"Arrows (10)", "Flèches (10)", "Flechas (10)"}, ITEMTYPE_REFILL, GI_ARROWS_MEDIUM, false, &noVariable, ARROWS_10); + itemTable[ARROWS_30] = Item(RG_ARROWS_30, Text{"Arrows (30)", "Flèches (30)", "Flechas (30)"}, ITEMTYPE_REFILL, GI_ARROWS_LARGE, false, &noVariable, ARROWS_30); + itemTable[DEKU_NUTS_5] = Item(RG_DEKU_NUTS_5, Text{"Deku Nuts (5)", "Noix Mojo (5)", "Nueces deku (5)"}, ITEMTYPE_REFILL, GI_NUTS_5, false, &noVariable, DEKU_NUTS_5); + itemTable[DEKU_NUTS_10] = Item(RG_DEKU_NUTS_10, Text{"Deku Nuts (10)", "Noix Mojo (10)", "Nueces deku (10)"}, ITEMTYPE_REFILL, GI_NUTS_10, false, &noVariable, DEKU_NUTS_10); + itemTable[DEKU_SEEDS_30] = Item(RG_DEKU_SEEDS_30, Text{"Deku Seeds (30)", "Graines Mojo (30)", "Semillas deku (30)"}, ITEMTYPE_REFILL, GI_SEEDS_30, false, &noVariable, DEKU_SEEDS_30); + itemTable[DEKU_STICK_1] = Item(RG_DEKU_STICK_1, Text{"Deku Stick (1)", "Bâton Mojo (1)", "Palo deku (1)"}, ITEMTYPE_REFILL, GI_STICKS_1, false, &noVariable, DEKU_STICK_1); + itemTable[RED_POTION_REFILL] = Item(RG_RED_POTION_REFILL, Text{"Red Potion Refill", "Recharge de Potion Rouge", "Recarga de poción roja"}, ITEMTYPE_REFILL, GI_POTION_RED, false, &noVariable, NONE); + itemTable[GREEN_POTION_REFILL] = Item(RG_GREEN_POTION_REFILL, Text{"Green Potion Refill", "Recharge de Potion Verte", "Recarga de poción verde"}, ITEMTYPE_REFILL, GI_POTION_GREEN, false, &noVariable, NONE); + itemTable[BLUE_POTION_REFILL] = Item(RG_BLUE_POTION_REFILL, Text{"Blue Potion Refill", "Recharge de Potion Bleue", "Recarga de poción azul"}, ITEMTYPE_REFILL, GI_POTION_BLUE, false, &noVariable, NONE); //Treasure Game - itemTable[TREASURE_GAME_HEART] = Item(Text{"Piece of Heart (Treasure Chest Minigame)", "Quart de Coeur (Chasse-aux-Trésors)", "Pieza de corazón (Cofre del Tesoro)"}, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, &PieceOfHeart, TREASURE_GAME_HEART); - itemTable[TREASURE_GAME_GREEN_RUPEE] = Item(Text{"Green Rupee (Treasure Chest Minigame)", "Rubis Vert (Chasse-aux-Trésors)", "Rupia Verde (Cofre del Tesoro)"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE, false, &noVariable, TREASURE_GAME_GREEN_RUPEE); + itemTable[TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{"Piece of Heart (Treasure Chest Minigame)", "Quart de Coeur (Chasse-aux-Trésors)", "Pieza de corazón (Cofre del Tesoro)"}, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, &PieceOfHeart, TREASURE_GAME_HEART); + itemTable[TREASURE_GAME_GREEN_RUPEE] = Item(RG_TREASURE_GAME_GREEN_RUPEE, Text{"Green Rupee (Treasure Chest Minigame)", "Rubis Vert (Chasse-aux-Trésors)", "Rupia Verde (Cofre del Tesoro)"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE, false, &noVariable, TREASURE_GAME_GREEN_RUPEE); - //Shop Items price - itemTable[BUY_DEKU_NUT_5] = Item(Text{"Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Comprar nueces deku (5)"}, ITEMTYPE_SHOP, 0x00, true, &Nuts, DEKU_NUTS_5, 15); - itemTable[BUY_ARROWS_30] = Item(Text{"Buy Arrows (30)", "Acheter: Flèches (30)", "Comprar flechas (30)"}, ITEMTYPE_SHOP, 0x01, true, &BuyArrow, ARROWS_30, 60); - itemTable[BUY_ARROWS_50] = Item(Text{"Buy Arrows (50)", "Acheter: Flèches (50)", "Comprar flechas (50)"}, ITEMTYPE_SHOP, 0x02, true, &BuyArrow, ARROWS_30, 90); - itemTable[BUY_BOMBS_525] = Item(Text{"Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Comprar bombas (5) [25]"}, ITEMTYPE_SHOP, 0x03, true, &BuyBomb, BOMBS_5, 25); - itemTable[BUY_DEKU_NUT_10] = Item(Text{"Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Comprar Nueces deku (10)"}, ITEMTYPE_SHOP, 0x04, true, &Nuts, DEKU_NUTS_10, 30); - itemTable[BUY_DEKU_STICK_1] = Item(Text{"Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Comprar palos deku (1)"}, ITEMTYPE_SHOP, 0x05, true, &Sticks, DEKU_STICK_1, 10); - itemTable[BUY_BOMBS_10] = Item(Text{"Buy Bombs (10)", "Acheter: Bombes (10)", "Comprar Bombas (10)"}, ITEMTYPE_SHOP, 0x06, true, &BuyBomb, BOMBS_10, 50); - itemTable[BUY_FISH] = Item(Text{"Buy Fish", "Acheter: Poisson", "Comprar pez"}, ITEMTYPE_SHOP, 0x07, true, &FishAccess, BOTTLE_WITH_FISH, 200); - itemTable[BUY_RED_POTION_30] = Item(Text{"Buy Red Potion [30]", "Acheter: Potion Rouge [30]", "Comprar poción roja [30]"}, ITEMTYPE_SHOP, 0x08, false, &noVariable, BOTTLE_WITH_RED_POTION, 30); - itemTable[BUY_GREEN_POTION] = Item(Text{"Buy Green Potion", "Acheter: Potion Verte", "Comprar poción verde"}, ITEMTYPE_SHOP, 0x09, true, &BuyGPotion, BOTTLE_WITH_GREEN_POTION, 30); - itemTable[BUY_BLUE_POTION] = Item(Text{"Buy Blue Potion", "Acheter: Potion Bleue", "Comprar poción azul"}, ITEMTYPE_SHOP, 0x0A, true, &BuyBPotion, BOTTLE_WITH_BLUE_POTION, 100); - itemTable[BUY_HYLIAN_SHIELD] = Item(Text{"Buy Hylian Shield", "Acheter: Bouclier Hylien", "Comprar escudo hyliano"}, ITEMTYPE_SHOP, 0x0C, true, &HylianShield, HYLIAN_SHIELD, 80); - itemTable[BUY_DEKU_SHIELD] = Item(Text{"Buy Deku Shield", "Acheter: Bouclier Mojo", "Comprar escudo deku"}, ITEMTYPE_SHOP, 0x0D, true, &DekuShield, DEKU_SHIELD, 40); - itemTable[BUY_GORON_TUNIC] = Item(Text{"Buy Goron Tunic", "Acheter: Tunique Goron", "Comprar sayo goron"}, ITEMTYPE_SHOP, 0x0E, true, &GoronTunic, GORON_TUNIC, 200); - itemTable[BUY_ZORA_TUNIC] = Item(Text{"Buy Zora Tunic", "Acheter: Tunique Zora", "Comprar sayo zora"}, ITEMTYPE_SHOP, 0x0F, true, &ZoraTunic, ZORA_TUNIC, 300); - itemTable[BUY_HEART] = Item(Text{"Buy Heart", "Acheter: Coeur de Vie", "Comprar corazón"}, ITEMTYPE_SHOP, 0x10, false, &noVariable, RECOVERY_HEART, 10); - itemTable[BUY_BOMBCHU_10] = Item(Text{"Buy Bombchu (10)", "Acheter: Missiles (10)", "Comprar bombchus (10)"}, ITEMTYPE_SHOP, 0x15, true, &BuyBombchus10, BOMBCHU_10, 99); - itemTable[BUY_BOMBCHU_20] = Item(Text{"Buy Bombchu (20)", "Acheter: Missiles (20)", "Comprar bombchus (20)"}, ITEMTYPE_SHOP, 0x16, true, &BuyBombchus20, BOMBCHU_20, 180); - itemTable[BUY_BOMBCHU_5] = Item(Text{"Buy Bombchu (5)", "Acheter: Missiles (5)", "Comprar bombchus (5)"}, ITEMTYPE_SHOP, 0x18, true, &BuyBombchus5, BOMBCHU_5, 60); - itemTable[BUY_DEKU_SEEDS_30] = Item(Text{"Buy Deku Seeds (30)", "Acheter: Graines Mojo (30)", "Comprar semillas deku (30)"}, ITEMTYPE_SHOP, 0x1D, true, &BuySeed, DEKU_SEEDS_30, 30); - itemTable[SOLD_OUT] = Item(Text{"Sold Out", "Vendu", "Vendido"}, ITEMTYPE_SHOP, 0x26, false, &noVariable, NONE, 0); - itemTable[BUY_BLUE_FIRE] = Item(Text{"Buy Blue Fire", "Acheter: Flamme Bleue", "Comprar fuego azul"}, ITEMTYPE_SHOP, 0x27, true, &BlueFireAccess, BOTTLE_WITH_BLUE_FIRE, 300); - itemTable[BUY_BOTTLE_BUG] = Item(Text{"Buy Bottle Bug", "Acheter: Insecte en bouteille", "Comprar bichos"}, ITEMTYPE_SHOP, 0x28, true, &BugsAccess, BOTTLE_WITH_BUGS, 50); - itemTable[BUY_POE] = Item(Text{"Buy Poe", "Acheter: Esprit", "Comprar Poe"}, ITEMTYPE_SHOP, 0x2A, false, &noVariable, BOTTLE_WITH_BIG_POE, 30); - itemTable[BUY_FAIRYS_SPIRIT] = Item(Text{"Buy Fairy's Spirit", "Acheter: Esprit de Fée", "Comprar hada"}, ITEMTYPE_SHOP, 0x2B, true, &FairyAccess, BOTTLE_WITH_FAIRY, 50); - itemTable[BUY_ARROWS_10] = Item(Text{"Buy Arrows (10)", "Acheter: Flèches (10)", "Comprar flechas (10)"}, ITEMTYPE_SHOP, 0x2C, true, &BuyArrow, ARROWS_10, 20); - itemTable[BUY_BOMBS_20] = Item(Text{"Buy Bombs (20)", "Acheter: Bombes (20)", "Comprar bombas (20)"}, ITEMTYPE_SHOP, 0x2D, true, &BuyBomb, BOMBS_20, 80); - itemTable[BUY_BOMBS_30] = Item(Text{"Buy Bombs (30)", "Acheter: Bombes (30)", "Comprar bombas (30)"}, ITEMTYPE_SHOP, 0x2E, true, &BuyBomb, BOMBS_20, 120); - itemTable[BUY_BOMBS_535] = Item(Text{"Buy Bombs (5) [35]", "Acheter: Bombes (5) [35]", "Comprar bombas (5) [35]"}, ITEMTYPE_SHOP, 0x2F, true, &BuyBomb, BOMBS_5, 35); - itemTable[BUY_RED_POTION_40] = Item(Text{"Buy Red Potion [40]", "Acheter: Potion Rouge [40]", "Comprar poción roja [40]"}, ITEMTYPE_SHOP, 0x30, false, &noVariable, BOTTLE_WITH_RED_POTION, 40); - itemTable[BUY_RED_POTION_50] = Item(Text{"Buy Red Potion [50]", "Acheter: Potion Rouge [50]", "Comprar poción roja [50]"}, ITEMTYPE_SHOP, 0x31, false, &noVariable, BOTTLE_WITH_RED_POTION, 50); + //Shop Items price + itemTable[BUY_DEKU_NUT_5] = Item(RG_BUY_DEKU_NUT_5, Text{"Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Comprar nueces deku (5)"}, ITEMTYPE_SHOP, 0x00, true, &Nuts, DEKU_NUTS_5, 15); + itemTable[BUY_ARROWS_30] = Item(RG_BUY_ARROWS_30, Text{"Buy Arrows (30)", "Acheter: Flèches (30)", "Comprar flechas (30)"}, ITEMTYPE_SHOP, 0x01, true, &BuyArrow, ARROWS_30, 60); + itemTable[BUY_ARROWS_50] = Item(RG_BUY_ARROWS_50, Text{"Buy Arrows (50)", "Acheter: Flèches (50)", "Comprar flechas (50)"}, ITEMTYPE_SHOP, 0x02, true, &BuyArrow, ARROWS_30, 90); + itemTable[BUY_BOMBS_525] = Item(RG_BUY_BOMBS_525, Text{"Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Comprar bombas (5) [25]"}, ITEMTYPE_SHOP, 0x03, true, &BuyBomb, BOMBS_5, 25); + itemTable[BUY_DEKU_NUT_10] = Item(RG_BUY_DEKU_NUT_10, Text{"Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Comprar Nueces deku (10)"}, ITEMTYPE_SHOP, 0x04, true, &Nuts, DEKU_NUTS_10, 30); + itemTable[BUY_DEKU_STICK_1] = Item(RG_BUY_DEKU_STICK_1, Text{"Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Comprar palos deku (1)"}, ITEMTYPE_SHOP, 0x05, true, &Sticks, DEKU_STICK_1, 10); + itemTable[BUY_BOMBS_10] = Item(RG_BUY_BOMBS_10, Text{"Buy Bombs (10)", "Acheter: Bombes (10)", "Comprar Bombas (10)"}, ITEMTYPE_SHOP, 0x06, true, &BuyBomb, BOMBS_10, 50); + itemTable[BUY_FISH] = Item(RG_BUY_FISH, Text{"Buy Fish", "Acheter: Poisson", "Comprar pez"}, ITEMTYPE_SHOP, 0x07, true, &FishAccess, BOTTLE_WITH_FISH, 200); + itemTable[BUY_RED_POTION_30] = Item(RG_BUY_RED_POTION_30, Text{"Buy Red Potion [30]", "Acheter: Potion Rouge [30]", "Comprar poción roja [30]"}, ITEMTYPE_SHOP, 0x08, false, &noVariable, BOTTLE_WITH_RED_POTION, 30); + itemTable[BUY_GREEN_POTION] = Item(RG_BUY_GREEN_POTION, Text{"Buy Green Potion", "Acheter: Potion Verte", "Comprar poción verde"}, ITEMTYPE_SHOP, 0x09, true, &BuyGPotion, BOTTLE_WITH_GREEN_POTION, 30); + itemTable[BUY_BLUE_POTION] = Item(RG_BUY_BLUE_POTION, Text{"Buy Blue Potion", "Acheter: Potion Bleue", "Comprar poción azul"}, ITEMTYPE_SHOP, 0x0A, true, &BuyBPotion, BOTTLE_WITH_BLUE_POTION, 100); + itemTable[BUY_HYLIAN_SHIELD] = Item(RG_BUY_HYLIAN_SHIELD, Text{"Buy Hylian Shield", "Acheter: Bouclier Hylien", "Comprar escudo hyliano"}, ITEMTYPE_SHOP, 0x0C, true, &HylianShield, HYLIAN_SHIELD, 80); + itemTable[BUY_DEKU_SHIELD] = Item(RG_BUY_DEKU_SHIELD, Text{"Buy Deku Shield", "Acheter: Bouclier Mojo", "Comprar escudo deku"}, ITEMTYPE_SHOP, 0x0D, true, &DekuShield, DEKU_SHIELD, 40); + itemTable[BUY_GORON_TUNIC] = Item(RG_BUY_GORON_TUNIC, Text{"Buy Goron Tunic", "Acheter: Tunique Goron", "Comprar sayo goron"}, ITEMTYPE_SHOP, 0x0E, true, &GoronTunic, GORON_TUNIC, 200); + itemTable[BUY_ZORA_TUNIC] = Item(RG_BUY_ZORA_TUNIC, Text{"Buy Zora Tunic", "Acheter: Tunique Zora", "Comprar sayo zora"}, ITEMTYPE_SHOP, 0x0F, true, &ZoraTunic, ZORA_TUNIC, 300); + itemTable[BUY_HEART] = Item(RG_BUY_HEART, Text{"Buy Heart", "Acheter: Coeur de Vie", "Comprar corazón"}, ITEMTYPE_SHOP, 0x10, false, &noVariable, RECOVERY_HEART, 10); + itemTable[BUY_BOMBCHU_10] = Item(RG_BUY_BOMBCHU_10, Text{"Buy Bombchu (10)", "Acheter: Missiles (10)", "Comprar bombchus (10)"}, ITEMTYPE_SHOP, 0x15, true, &BuyBombchus10, BOMBCHU_10, 99); + itemTable[BUY_BOMBCHU_20] = Item(RG_BUY_BOMBCHU_20, Text{"Buy Bombchu (20)", "Acheter: Missiles (20)", "Comprar bombchus (20)"}, ITEMTYPE_SHOP, 0x16, true, &BuyBombchus20, BOMBCHU_20, 180); + itemTable[BUY_BOMBCHU_5] = Item(RG_BUY_BOMBCHU_5, Text{"Buy Bombchu (5)", "Acheter: Missiles (5)", "Comprar bombchus (5)"}, ITEMTYPE_SHOP, 0x18, true, &BuyBombchus5, BOMBCHU_5, 60); + itemTable[BUY_DEKU_SEEDS_30] = Item(RG_BUY_DEKU_SEEDS_30, Text{"Buy Deku Seeds (30)", "Acheter: Graines Mojo (30)", "Comprar semillas deku (30)"}, ITEMTYPE_SHOP, 0x1D, true, &BuySeed, DEKU_SEEDS_30, 30); + itemTable[SOLD_OUT] = Item(RG_SOLD_OUT, Text{"Sold Out", "Rupture de stock", "Vendido"}, ITEMTYPE_SHOP, 0x26, false, &noVariable, NONE, 0); + itemTable[BUY_BLUE_FIRE] = Item(RG_BUY_BLUE_FIRE, Text{"Buy Blue Fire", "Acheter: Flamme Bleue", "Comprar fuego azul"}, ITEMTYPE_SHOP, 0x27, true, &BlueFireAccess, BOTTLE_WITH_BLUE_FIRE, 300); + itemTable[BUY_BOTTLE_BUG] = Item(RG_BUY_BOTTLE_BUG, Text{"Buy Bottle Bug", "Acheter: Insecte en bouteille", "Comprar bichos"}, ITEMTYPE_SHOP, 0x28, true, &BugsAccess, BOTTLE_WITH_BUGS, 50); + itemTable[BUY_POE] = Item(RG_BUY_POE, Text{"Buy Poe", "Acheter: Esprit", "Comprar Poe"}, ITEMTYPE_SHOP, 0x2A, false, &noVariable, BOTTLE_WITH_BIG_POE, 30); + itemTable[BUY_FAIRYS_SPIRIT] = Item(RG_BUY_FAIRYS_SPIRIT, Text{"Buy Fairy's Spirit", "Acheter: Esprit de Fée", "Comprar hada"}, ITEMTYPE_SHOP, 0x2B, true, &FairyAccess, BOTTLE_WITH_FAIRY, 50); + itemTable[BUY_ARROWS_10] = Item(RG_BUY_ARROWS_10, Text{"Buy Arrows (10)", "Acheter: Flèches (10)", "Comprar flechas (10)"}, ITEMTYPE_SHOP, 0x2C, true, &BuyArrow, ARROWS_10, 20); + itemTable[BUY_BOMBS_20] = Item(RG_BUY_BOMBS_20, Text{"Buy Bombs (20)", "Acheter: Bombes (20)", "Comprar bombas (20)"}, ITEMTYPE_SHOP, 0x2D, true, &BuyBomb, BOMBS_20, 80); + itemTable[BUY_BOMBS_30] = Item(RG_BUY_BOMBS_30, Text{"Buy Bombs (30)", "Acheter: Bombes (30)", "Comprar bombas (30)"}, ITEMTYPE_SHOP, 0x2E, true, &BuyBomb, BOMBS_20, 120); + itemTable[BUY_BOMBS_535] = Item(RG_BUY_BOMBS_535, Text{"Buy Bombs (5) [35]", "Acheter: Bombes (5) [35]", "Comprar bombas (5) [35]"}, ITEMTYPE_SHOP, 0x2F, true, &BuyBomb, BOMBS_5, 35); + itemTable[BUY_RED_POTION_40] = Item(RG_BUY_RED_POTION_40, Text{"Buy Red Potion [40]", "Acheter: Potion Rouge [40]", "Comprar poción roja [40]"}, ITEMTYPE_SHOP, 0x30, false, &noVariable, BOTTLE_WITH_RED_POTION, 40); + itemTable[BUY_RED_POTION_50] = Item(RG_BUY_RED_POTION_50, Text{"Buy Red Potion [50]", "Acheter: Potion Rouge [50]", "Comprar poción roja [50]"}, ITEMTYPE_SHOP, 0x31, false, &noVariable, BOTTLE_WITH_RED_POTION, 50); - itemTable[TRIFORCE] = Item(Text{"Triforce", "Triforce", "Trifuerza"}, ITEMTYPE_EVENT, GI_RUPEE_RED_LOSE, false, &noVariable, NONE); - itemTable[HINT] = Item(Text{"Hint", "Indice", "Pista"}, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE); + itemTable[TRIFORCE] = Item(RG_TRIFORCE, Text{"Triforce", "Triforce", "Trifuerza"}, ITEMTYPE_EVENT, GI_RUPEE_RED_LOSE, false, &noVariable, NONE); + itemTable[HINT] = Item(RG_HINT, Text{"Hint", "Indice", "Pista"}, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE); -// itemTable[HOOKSHOT] = Item(Text{"Hookshot", "Grappin", "Gancho"}, ITEMTYPE_ITEM, 0x80, true, &ProgressiveHookshot, HOOKSHOT); -// itemTable[LONGSHOT] = Item(Text{"Longshot", "Super-Grappin", "Supergancho"}, ITEMTYPE_ITEM, 0x80, true, &ProgressiveHookshot, LONGSHOT); -// itemTable[FAIRY_OCARINA] = Item(Text{"Fairy Ocarina", "Ocarina des fées", "Ocarina de las Hadas"}, ITEMTYPE_ITEM, 0x8B, true, &ProgressiveOcarina, FAIRY_OCARINA); -// itemTable[OCARINA_OF_TIME] = Item(Text{"Ocarina of Time", "Ocarina du Temps", "Ocarina del Tiempo"}, ITEMTYPE_ITEM, 0x8B, true, &ProgressiveOcarina, OCARINA_OF_TIME); -// itemTable[BOMB_BAG] = Item(Text{"Bomb Bag", "Sac de Bombes", "Saco de bombas"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, BOMB_BAG); -// itemTable[BIG_BOMB_BAG] = Item(Text{"Big Bomb Bag", "Grand Sac de Bombes", "Saco de bombas grande"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, BIG_BOMB_BAG); -// itemTable[BIGGEST_BOMB_BAG] = Item(Text{"Biggest Bomb Bag", "Énorme Sac de Bombes", "Saco de bombas gigante"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, BIGGEST_BOMB_BAG); -// itemTable[FAIRY_BOW] = Item(Text{"Fairy Bow", "Arc des Fées", "Arco de las Hadas"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, FAIRY_BOW); -// itemTable[BIG_QUIVER] = Item(Text{"Big Quiver", "Grand carquois", "Carcaj grande"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, BIG_QUIVER); -// itemTable[BIGGEST_QUIVER] = Item(Text{"Biggest Quiver", "Énorme carquois", "Carcaj gigante"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, BIGGEST_QUIVER); -// itemTable[FAIRY_SLINGSHOT] = Item(Text{"Fairy Slingshot", "Lance-Pierre des Fées", "Resortera de las hadas"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, FAIRY_SLINGSHOT); -// itemTable[BIG_BULLET_BAG] = Item(Text{"Big Deku Seed Bullet Bag", "Grand sac de graines mojo", "Bolsa de semillas deku grande"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, BIG_BULLET_BAG); -// itemTable[BIGGEST_BULLET_BAD] = Item(Text{"Biggest Deku Seed Bullet Bag", "Énorme sac de graines mojo", "Bolsa de semillas deku gigante"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, BIGGEST_BULLET_BAD); -// itemTable[GORONS_BRACELET] = Item(Text{"Goron's Bracelet", "Bracelet Goron", "Brazalete de los Goron"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, GORONS_BRACELET); -// itemTable[SILVER_GAUNTLETS] = Item(Text{"Silver Gauntlets", "Gantelets d'argent", "Guantes de plata"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, SILVER_GAUNTLETS); -// itemTable[GOLDEN_GAUNTLETS] = Item(Text{"Golden Gauntlets", "Gantelets d'or", "Guantes de oro"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, GOLDEN_GAUNTLETS); -// itemTable[SILVER_SCALE] = Item(Text{"Silver Scale", "Écaille d'argent", "Escama de Plata"}, ITEMTYPE_ITEM, 0x86, true, &ProgressiveScale, SILVER_SCALE); -// itemTable[GOLDEN_SCALE] = Item(Text{"Golden Scale", "Écaille d'or", "Escama de Oro"}, ITEMTYPE_ITEM, 0x86, true, &ProgressiveScale, GOLDEN_SCALE); -// itemTable[ADULT_WALLET] = Item(Text{"Adult Wallet", "Bourse d'adulte", "Bolsa de adulto"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, ADULT_WALLET); -// itemTable[GIANT_WALLET] = Item(Text{"Giant Wallet", "Bourse de géant", "Bolsa gigante"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, GIANT_WALLET); -// itemTable[TYCOON_WALLET] = Item(Text{"Tycoon Wallet", "Bourse de star", "Bolsa de ricachón"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, TYCOON_WALLET); -// itemTable[DEKU_NUT_CAPACITY_30] = Item(Text{"Deku Nut Capacity (30)", "Capacité de noix Mojo (20)", "Capacidad de nueces deku (40)"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, DEKU_NUT_CAPACITY_30); -// itemTable[DEKU_NUT_CAPACITY_40] = Item(Text{"Deku Nut Capacity (40)", "Capacité de noix Mojo (30)", "Capacidad de nueces deku (50)"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, DEKU_NUT_CAPACITY_40); -// itemTable[DEKU_NUT_CAPACITY_20] = Item(Text{"Deku Stick Capacity (20)", "Capacité de Bâtons Mojo (20)", "Capacidad de palos deku (20)"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, DEKU_NUT_CAPACITY_20); -// itemTable[DEKU_NUT_CAPACITY_30] = Item(Text{"Deku Nut Capacity (30)", "Capacité de noix Mojo (20)", "Capacidad de nueces deku (40)"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, DEKU_NUT_CAPACITY_30); -// itemTable[MAGIC_METER] = Item(Text{"Magic Meter", "Jauge de Magie", "Poder mágico"}, ITEMTYPE_ITEM, 0x8A, true, &ProgressiveMagic, MAGIC_METER); -// itemTable[ENHANCED_MAGIC_METER] = Item(Text{"Enhanced Magic Meter", "Jauge de Magie améliorée", "Poder mágico mejorado"}, ITEMTYPE_ITEM, 0x8A, true, &ProgressiveMagic, ENHANCED_MAGIC_METER); +// itemTable[HOOKSHOT] = Item(RG_HOOKSHOT, Text{"Hookshot", "Grappin", "Gancho"}, ITEMTYPE_ITEM, 0x80, true, &ProgressiveHookshot, HOOKSHOT); +// itemTable[LONGSHOT] = Item(RG_LONGSHOT, Text{"Longshot", "Super-Grappin", "Supergancho"}, ITEMTYPE_ITEM, 0x80, true, &ProgressiveHookshot, LONGSHOT); +// itemTable[FAIRY_OCARINA] = Item(RG_FAIRY_OCARINA, Text{"Fairy Ocarina", "Ocarina des fées", "Ocarina de las Hadas"}, ITEMTYPE_ITEM, 0x8B, true, &ProgressiveOcarina, FAIRY_OCARINA); +// itemTable[OCARINA_OF_TIME] = Item(RG_OCARINA_OF_TIME, Text{"Ocarina of Time", "Ocarina du Temps", "Ocarina del Tiempo"}, ITEMTYPE_ITEM, 0x8B, true, &ProgressiveOcarina, OCARINA_OF_TIME); +// itemTable[BOMB_BAG] = Item(RG_BOMB_BAG, Text{"Bomb Bag", "Sac de Bombes", "Saco de bombas"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, BOMB_BAG); +// itemTable[BIG_BOMB_BAG] = Item(RG_BIG_BOMB_BAG, Text{"Big Bomb Bag", "Grand Sac de Bombes", "Saco de bombas grande"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, BIG_BOMB_BAG); +// itemTable[BIGGEST_BOMB_BAG] = Item(RG_BIGGEST_BOMB_BAG, Text{"Biggest Bomb Bag", "Énorme Sac de Bombes", "Saco de bombas gigante"}, ITEMTYPE_ITEM, 0x82, true, &ProgressiveBombBag, BIGGEST_BOMB_BAG); +// itemTable[FAIRY_BOW] = Item(RG_FAIRY_BOW, Text{"Fairy Bow", "Arc des Fées", "Arco de las Hadas"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, FAIRY_BOW); +// itemTable[BIG_QUIVER] = Item(RG_BIG_QUIVER, Text{"Big Quiver", "Grand carquois", "Carcaj grande"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, BIG_QUIVER); +// itemTable[BIGGEST_QUIVER] = Item(RG_BIGGEST_QUIVER, Text{"Biggest Quiver", "Énorme carquois", "Carcaj gigante"}, ITEMTYPE_ITEM, 0x83, true, &ProgressiveBow, BIGGEST_QUIVER); +// itemTable[FAIRY_SLINGSHOT] = Item(RG_FAIRY_SLINGSHOT, Text{"Fairy Slingshot", "Lance-Pierre des Fées", "Resortera de las hadas"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, FAIRY_SLINGSHOT); +// itemTable[BIG_BULLET_BAG] = Item(RG_BIG_BULLET_BAG, Text{"Big Deku Seed Bullet Bag", "Grand sac de graines mojo", "Bolsa de semillas deku grande"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, BIG_BULLET_BAG); +// itemTable[BIGGEST_BULLET_BAD] = Item(RG_BIGGEST_BULLET_BAD, Text{"Biggest Deku Seed Bullet Bag", "Énorme sac de graines mojo", "Bolsa de semillas deku gigante"}, ITEMTYPE_ITEM, 0x84, true, &ProgressiveBulletBag, BIGGEST_BULLET_BAD); +// itemTable[GORONS_BRACELET] = Item(RG_GORONS_BRACELET, Text{"Goron's Bracelet", "Bracelet Goron", "Brazalete de los Goron"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, GORONS_BRACELET); +// itemTable[SILVER_GAUNTLETS] = Item(RG_SILVER_GAUNTLETS, Text{"Silver Gauntlets", "Gantelets d'argent", "Guantes de plata"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, SILVER_GAUNTLETS); +// itemTable[GOLDEN_GAUNTLETS] = Item(RG_GOLDEN_GAUNTLETS, Text{"Golden Gauntlets", "Gantelets d'or", "Guantes de oro"}, ITEMTYPE_ITEM, 0x81, true, &ProgressiveStrength, GOLDEN_GAUNTLETS); +// itemTable[SILVER_SCALE] = Item(RG_SILVER_SCALE, Text{"Silver Scale", "Écaille d'argent", "Escama de Plata"}, ITEMTYPE_ITEM, 0x86, true, &ProgressiveScale, SILVER_SCALE); +// itemTable[GOLDEN_SCALE] = Item(RG_GOLDEN_SCALE, Text{"Golden Scale", "Écaille d'or", "Escama de Oro"}, ITEMTYPE_ITEM, 0x86, true, &ProgressiveScale, GOLDEN_SCALE); +// itemTable[ADULT_WALLET] = Item(RG_ADULT_WALLET, Text{"Adult Wallet", "Grande Bourse", "Bolsa de adulto"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, ADULT_WALLET); +// itemTable[GIANT_WALLET] = Item(RG_GIANT_WALLET, Text{"Giant Wallet", "Bourse de Géant", "Bolsa gigante"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, GIANT_WALLET); +// itemTable[TYCOON_WALLET] = Item(RG_TYCOON_WALLET, Text{"Tycoon Wallet", "Bourse de Magnat", "Bolsa de ricachón"}, ITEMTYPE_ITEM, 0x85, true, &ProgressiveWallet, TYCOON_WALLET); +// itemTable[DEKU_NUT_CAPACITY_30] = Item(RG_DEKU_NUT_CAPACITY_30, Text{"Deku Nut Capacity (30)", "Capacité de noix Mojo (20)", "Capacidad de nueces deku (40)"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, DEKU_NUT_CAPACITY_30); +// itemTable[DEKU_NUT_CAPACITY_40] = Item(RG_DEKU_NUT_CAPACITY_40, Text{"Deku Nut Capacity (40)", "Capacité de noix Mojo (30)", "Capacidad de nueces deku (50)"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, DEKU_NUT_CAPACITY_40); +// itemTable[DEKU_NUT_CAPACITY_20] = Item(RG_DEKU_NUT_CAPACITY_20, Text{"Deku Stick Capacity (20)", "Capacité de Bâtons Mojo (20)", "Capacidad de palos deku (20)"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, DEKU_NUT_CAPACITY_20); +// itemTable[DEKU_NUT_CAPACITY_30] = Item(RG_DEKU_NUT_CAPACITY_30, Text{"Deku Nut Capacity (30)", "Capacité de noix Mojo (20)", "Capacidad de nueces deku (40)"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, DEKU_NUT_CAPACITY_30); +// itemTable[MAGIC_METER] = Item(RG_MAGIC_METER, Text{"Magic Meter", "Jauge de Magie", "Poder mágico"}, ITEMTYPE_ITEM, 0x8A, true, &ProgressiveMagic, MAGIC_METER); +// itemTable[ENHANCED_MAGIC_METER] = Item(RG_ENHANCED_MAGIC_METER, Text{"Enhanced Magic Meter", "Jauge de Magie améliorée", "Poder mágico mejorado"}, ITEMTYPE_ITEM, 0x8A, true, &ProgressiveMagic, ENHANCED_MAGIC_METER); } @@ -288,3 +289,7 @@ void NewItem(const uint32_t itemKey, const Item item) { itemTable[itemKey] = item; } + +std::array* GetFullItemTable_() { + return &itemTable; +} diff --git a/soh/soh/Enhancements/randomizer/3drando/item_list.hpp b/soh/soh/Enhancements/randomizer/3drando/item_list.hpp index c1244c3ce..62604c9c4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_list.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_list.hpp @@ -6,3 +6,4 @@ void ItemTable_Init(); Item& ItemTable(uint32_t itemKey); void NewItem(uint32_t itemKey, Item item); +std::array* GetFullItemTable_(); diff --git a/soh/soh/Enhancements/randomizer/3drando/item_location.cpp b/soh/soh/Enhancements/randomizer/3drando/item_location.cpp index 83cf12b30..bfe04eb82 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_location.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_location.cpp @@ -7,782 +7,788 @@ #include "debug.hpp" #include "keys.hpp" #include +#include "../randomizerTypes.h" //Location definitions static std::array locationTable; void LocationTable_Init() { - locationTable[NONE] = ItemLocation::Base (0xFF, 0xFF, "Invalid Location", NONE, NONE, {}, SpoilerCollectionCheck::None()); + locationTable[NONE] = ItemLocation::Base (RC_UNKNOWN_CHECK, 0xFF, 0xFF, "Invalid Location", NONE, NONE, {}, SpoilerCollectionCheck::None()); //Kokiri Forest scene flag name hint key (hint_list.cpp) vanilla item categories collection check (if needed) collection check group - locationTable[KF_KOKIRI_SWORD_CHEST] = ItemLocation::Chest (0x55, 0x00, "KF Kokiri Sword Chest", KF_KOKIRI_SWORD_CHEST, KOKIRI_SWORD, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_MIDOS_TOP_LEFT_CHEST] = ItemLocation::Chest (0x28, 0x00, "KF Mido Top Left Chest", KF_MIDOS_TOP_LEFT_CHEST, BLUE_RUPEE, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_MIDOS_TOP_RIGHT_CHEST] = ItemLocation::Chest (0x28, 0x01, "KF Mido Top Right Chest", KF_MIDOS_TOP_RIGHT_CHEST, BLUE_RUPEE, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_MIDOS_BOTTOM_LEFT_CHEST] = ItemLocation::Chest (0x28, 0x02, "KF Mido Bottom Left Chest", KF_MIDOS_BOTTOM_LEFT_CHEST, GREEN_RUPEE, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_MIDOS_BOTTOM_RIGHT_CHEST] = ItemLocation::Chest (0x28, 0x03, "KF Mido Bottom Right Chest", KF_MIDOS_BOTTOM_RIGHT_CHEST, RECOVERY_HEART, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_STORMS_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x0C, "KF Storms Grotto Chest", KF_STORMS_GROTTO_CHEST, RED_RUPEE, {Category::cKokiriForest, Category::cForest, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_KOKIRI_SWORD_CHEST] = ItemLocation::Chest (RC_KF_KOKIRI_SWORD_CHEST, 0x55, 0x00, "KF Kokiri Sword Chest", KF_KOKIRI_SWORD_CHEST, KOKIRI_SWORD, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_MIDOS_TOP_LEFT_CHEST] = ItemLocation::Chest (RC_KF_MIDOS_TOP_LEFT_CHEST, 0x28, 0x00, "KF Mido Top Left Chest", KF_MIDOS_TOP_LEFT_CHEST, BLUE_RUPEE, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_MIDOS_TOP_RIGHT_CHEST] = ItemLocation::Chest (RC_KF_MIDOS_TOP_RIGHT_CHEST, 0x28, 0x01, "KF Mido Top Right Chest", KF_MIDOS_TOP_RIGHT_CHEST, BLUE_RUPEE, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_MIDOS_BOTTOM_LEFT_CHEST] = ItemLocation::Chest (RC_KF_MIDOS_BOTTOM_LEFT_CHEST, 0x28, 0x02, "KF Mido Bottom Left Chest", KF_MIDOS_BOTTOM_LEFT_CHEST, GREEN_RUPEE, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_MIDOS_BOTTOM_RIGHT_CHEST] = ItemLocation::Chest (RC_KF_MIDOS_BOTTOM_RIGHT_CHEST, 0x28, 0x03, "KF Mido Bottom Right Chest", KF_MIDOS_BOTTOM_RIGHT_CHEST, RECOVERY_HEART, {Category::cKokiriForest, Category::cForest,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_STORMS_GROTTO_CHEST] = ItemLocation::Chest (RC_KF_STORMS_GROTTO_CHEST, 0x3E, 0x0C, "KF Storms Grotto Chest", KF_STORMS_GROTTO_CHEST, RED_RUPEE, {Category::cKokiriForest, Category::cForest, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); //Lost Woods - locationTable[LW_NEAR_SHORTCUTS_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x14, "LW Near Shortcuts Grotto Chest", LW_NEAR_SHORTCUTS_GROTTO_CHEST, BLUE_RUPEE, {Category::cLostWoods, Category::cForest, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_SKULL_KID] = ItemLocation::Base (0x5B, 0x3E, "LW Skull Kid", LW_SKULL_KID, PIECE_OF_HEART, {Category::cLostWoods, Category::cForest,}, SpoilerCollectionCheck::ItemGetInf(30), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_TRADE_COJIRO] = ItemLocation::Base (0x5B, 0x1F, "LW Trade Cojiro", LW_TRADE_COJIRO, ODD_MUSHROOM, {Category::cLostWoods, Category::cForest, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(37), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_TRADE_ODD_POTION] = ItemLocation::Base (0x5B, 0x21, "LW Trade Odd Potion", LW_TRADE_ODD_POTION, ODD_POTION, {Category::cLostWoods, Category::cForest, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(57), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_OCARINA_MEMORY_GAME] = ItemLocation::Base (0x5B, 0x76, "LW Ocarina Memory Game", LW_OCARINA_MEMORY_GAME, PIECE_OF_HEART, {Category::cLostWoods, Category::cForest, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(31), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_TARGET_IN_WOODS] = ItemLocation::Base (0x5B, 0x60, "LW Target in Woods", LW_TARGET_IN_WOODS, PROGRESSIVE_SLINGSHOT, {Category::cLostWoods, Category::cForest,}, SpoilerCollectionCheck::ItemGetInf(21), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT] = ItemLocation::Base (0x5B, 0x30, "LW Deku Scrub Near Deku Theater Right",LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, BUY_DEKU_NUT_5, {Category::cLostWoods, Category::cForest, Category::cDekuScrub}, SpoilerCollectionCheck::Scrub(0x5B, 0x01), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT] = ItemLocation::Base (0x5B, 0x31, "LW Deku Scrub Near Deku Theater Left", LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, BUY_DEKU_STICK_1, {Category::cLostWoods, Category::cForest, Category::cDekuScrub}, SpoilerCollectionCheck::Scrub(0x5B, 0x02), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_DEKU_SCRUB_NEAR_BRIDGE] = ItemLocation::Base (0x5B, 0x77, "LW Deku Scrub Near Bridge", LW_DEKU_SCRUB_NEAR_BRIDGE, PROGRESSIVE_STICK_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cDekuScrub, Category::cDekuScrubUpgrades}, SpoilerCollectionCheck::Scrub(0x5B, 0x0A), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(0xF5, 0x33, "LW Deku Scrub Grotto Rear", LW_DEKU_SCRUB_GROTTO_REAR, BUY_DEKU_SEEDS_30, {Category::cLostWoods, Category::cForest, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1F, 0x04), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(0xF5, 0x79, "LW Deku Scrub Grotto Front", LW_DEKU_SCRUB_GROTTO_FRONT, PROGRESSIVE_NUT_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cDekuScrub, Category::cDekuScrubUpgrades, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1F, 0x0B), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[DEKU_THEATER_SKULL_MASK] = ItemLocation::Base (0x3E, 0x77, "Deku Theater Skull Mask", DEKU_THEATER_SKULL_MASK, PROGRESSIVE_STICK_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cGrotto}, SpoilerCollectionCheck::ItemGetInf(22), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[DEKU_THEATER_MASK_OF_TRUTH] = ItemLocation::Base (0x3E, 0x7A, "Deku Theater Mask of Truth", DEKU_THEATER_MASK_OF_TRUTH, PROGRESSIVE_NUT_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cNeedSpiritualStones, Category::cGrotto}, SpoilerCollectionCheck::ItemGetInf(23), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_NEAR_SHORTCUTS_GROTTO_CHEST] = ItemLocation::Chest (RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, 0x3E, 0x14, "LW Near Shortcuts Grotto Chest", LW_NEAR_SHORTCUTS_GROTTO_CHEST, BLUE_RUPEE, {Category::cLostWoods, Category::cForest, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_SKULL_KID] = ItemLocation::Base (RC_LW_SKULL_KID, 0x5B, 0x3E, "LW Skull Kid", LW_SKULL_KID, PIECE_OF_HEART, {Category::cLostWoods, Category::cForest,}, SpoilerCollectionCheck::ItemGetInf(30), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_TRADE_COJIRO] = ItemLocation::Base (RC_LW_TRADE_COJIRO, 0x5B, 0x1F, "LW Trade Cojiro", LW_TRADE_COJIRO, ODD_MUSHROOM, {Category::cLostWoods, Category::cForest, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(37), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_TRADE_ODD_POTION] = ItemLocation::Base (RC_LW_TRADE_ODD_POTION, 0x5B, 0x21, "LW Trade Odd Potion", LW_TRADE_ODD_POTION, ODD_POTION, {Category::cLostWoods, Category::cForest, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(57), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_OCARINA_MEMORY_GAME] = ItemLocation::Base (RC_LW_OCARINA_MEMORY_GAME, 0x5B, 0x76, "LW Ocarina Memory Game", LW_OCARINA_MEMORY_GAME, PIECE_OF_HEART, {Category::cLostWoods, Category::cForest, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(31), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_TARGET_IN_WOODS] = ItemLocation::Base (RC_LW_TARGET_IN_WOODS, 0x5B, 0x60, "LW Target in Woods", LW_TARGET_IN_WOODS, PROGRESSIVE_SLINGSHOT, {Category::cLostWoods, Category::cForest,}, SpoilerCollectionCheck::ItemGetInf(21), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT] = ItemLocation::Base (RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, 0x5B, 0x30, "LW Deku Scrub Near Deku Theater Right",LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, BUY_DEKU_NUT_5, {Category::cLostWoods, Category::cForest, Category::cDekuScrub}, SpoilerCollectionCheck::Scrub(0x5B, 0x01), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT] = ItemLocation::Base (RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, 0x5B, 0x31, "LW Deku Scrub Near Deku Theater Left", LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, BUY_DEKU_STICK_1, {Category::cLostWoods, Category::cForest, Category::cDekuScrub}, SpoilerCollectionCheck::Scrub(0x5B, 0x02), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_DEKU_SCRUB_NEAR_BRIDGE] = ItemLocation::Base (RC_LW_DEKU_SCRUB_NEAR_BRIDGE, 0x5B, 0x77, "LW Deku Scrub Near Bridge", LW_DEKU_SCRUB_NEAR_BRIDGE, PROGRESSIVE_STICK_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cDekuScrub, Category::cDekuScrubUpgrades}, SpoilerCollectionCheck::Scrub(0x5B, 0x0A), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(RC_LW_DEKU_SCRUB_GROTTO_REAR, 0xF5, 0x33, "LW Deku Scrub Grotto Rear", LW_DEKU_SCRUB_GROTTO_REAR, BUY_DEKU_SEEDS_30, {Category::cLostWoods, Category::cForest, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1F, 0x04), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(RC_LW_DEKU_SCRUB_GROTTO_FRONT, 0xF5, 0x79, "LW Deku Scrub Grotto Front", LW_DEKU_SCRUB_GROTTO_FRONT, PROGRESSIVE_NUT_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cDekuScrub, Category::cDekuScrubUpgrades, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1F, 0x0B), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[DEKU_THEATER_SKULL_MASK] = ItemLocation::Base (RC_DEKU_THEATER_SKULL_MASK, 0x3E, 0x77, "Deku Theater Skull Mask", DEKU_THEATER_SKULL_MASK, PROGRESSIVE_STICK_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cGrotto}, SpoilerCollectionCheck::ItemGetInf(22), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[DEKU_THEATER_MASK_OF_TRUTH] = ItemLocation::Base (RC_DEKU_THEATER_MASK_OF_TRUTH, 0x3E, 0x7A, "Deku Theater Mask of Truth", DEKU_THEATER_MASK_OF_TRUTH, PROGRESSIVE_NUT_UPGRADE, {Category::cLostWoods, Category::cForest, Category::cNeedSpiritualStones, Category::cGrotto}, SpoilerCollectionCheck::ItemGetInf(23), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); //Sacred Forest Meadow - locationTable[SFM_WOLFOS_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x11, "SFM Wolfos Grotto Chest", SFM_WOLFOS_GROTTO_CHEST, PURPLE_RUPEE, {Category::cSacredForestMeadow, Category::cForest, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[SFM_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(0xEE, 0x39, "SFM Deku Scrub Grotto Rear", SFM_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cSacredForestMeadow, Category::cForest, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x18, 0x08), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[SFM_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(0xEE, 0x3A, "SFM Deku Scrub Grotto Front", SFM_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cSacredForestMeadow, Category::cForest, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x18, 0x09), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[SFM_WOLFOS_GROTTO_CHEST] = ItemLocation::Chest (RC_SFM_WOLFOS_GROTTO_CHEST, 0x3E, 0x11, "SFM Wolfos Grotto Chest", SFM_WOLFOS_GROTTO_CHEST, PURPLE_RUPEE, {Category::cSacredForestMeadow, Category::cForest, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[SFM_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(RC_SFM_DEKU_SCRUB_GROTTO_REAR, 0xEE, 0x39, "SFM Deku Scrub Grotto Rear", SFM_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cSacredForestMeadow, Category::cForest, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x18, 0x08), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[SFM_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, 0xEE, 0x3A, "SFM Deku Scrub Grotto Front", SFM_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cSacredForestMeadow, Category::cForest, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x18, 0x09), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); //Hyrule Field - locationTable[HF_SOUTHEAST_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x02, "HF Southeast Grotto Chest", HF_SOUTHEAST_GROTTO_CHEST, RED_RUPEE, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[HF_OPEN_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x03, "HF Open Grotto Chest", HF_OPEN_GROTTO_CHEST, BLUE_RUPEE, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[HF_NEAR_MARKET_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x00, "HF Near Market Grotto Chest", HF_NEAR_MARKET_GROTTO_CHEST, BLUE_RUPEE, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[HF_OCARINA_OF_TIME_ITEM] = ItemLocation::Base (0x51, 0x0C, "HF Ocarina of Time Item", HF_OCARINA_OF_TIME_ITEM, PROGRESSIVE_OCARINA, {Category::cHyruleField, Category::cNeedSpiritualStones,}, SpoilerCollectionCheck::EventChkInf(0x43), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[HF_TEKTITE_GROTTO_FREESTANDING_POH] = ItemLocation::Collectable(0x3E, 0x01, "HF Tektite Grotto Freestanding PoH", HF_TEKTITE_GROTTO_FREESTANDING_POH, PIECE_OF_HEART, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[HF_DEKU_SCRUB_GROTTO] = ItemLocation::GrottoScrub(0xE6, 0x3E, "HF Deku Scrub Grotto", HF_DEKU_SCRUB_GROTTO, PIECE_OF_HEART, {Category::cHyruleField, Category::cDekuScrub, Category::cDekuScrubUpgrades, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x10, 0x03), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_SOUTHEAST_GROTTO_CHEST] = ItemLocation::Chest (RC_HF_SOUTHEAST_GROTTO_CHEST, 0x3E, 0x02, "HF Southeast Grotto Chest", HF_SOUTHEAST_GROTTO_CHEST, RED_RUPEE, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_OPEN_GROTTO_CHEST] = ItemLocation::Chest (RC_HF_OPEN_GROTTO_CHEST, 0x3E, 0x03, "HF Open Grotto Chest", HF_OPEN_GROTTO_CHEST, BLUE_RUPEE, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_NEAR_MARKET_GROTTO_CHEST] = ItemLocation::Chest (RC_HF_NEAR_MARKET_GROTTO_CHEST, 0x3E, 0x00, "HF Near Market Grotto Chest", HF_NEAR_MARKET_GROTTO_CHEST, BLUE_RUPEE, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_OCARINA_OF_TIME_ITEM] = ItemLocation::Base (RC_HF_OCARINA_OF_TIME_ITEM, 0x51, 0x0C, "HF Ocarina of Time Item", HF_OCARINA_OF_TIME_ITEM, PROGRESSIVE_OCARINA, {Category::cHyruleField, Category::cNeedSpiritualStones,}, SpoilerCollectionCheck::EventChkInf(0x43), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_TEKTITE_GROTTO_FREESTANDING_POH] = ItemLocation::Collectable(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, 0x3E, 0x01, "HF Tektite Grotto Freestanding PoH", HF_TEKTITE_GROTTO_FREESTANDING_POH, PIECE_OF_HEART, {Category::cHyruleField, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_DEKU_SCRUB_GROTTO] = ItemLocation::GrottoScrub(RC_HF_DEKU_SCRUB_GROTTO, 0xE6, 0x3E, "HF Deku Scrub Grotto", HF_DEKU_SCRUB_GROTTO, PIECE_OF_HEART, {Category::cHyruleField, Category::cDekuScrub, Category::cDekuScrubUpgrades, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x10, 0x03), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); //Lake Hylia - locationTable[LH_CHILD_FISHING] = ItemLocation::Base (0x49, 0x3E, "LH Child Fishing", LH_CHILD_FISHING, PIECE_OF_HEART, {Category::cLakeHylia, Category::cMinigame,}, SpoilerCollectionCheck::Fishing(0x02), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_ADULT_FISHING] = ItemLocation::Base (0x49, 0x38, "LH Adult Fishing", LH_ADULT_FISHING, PROGRESSIVE_SCALE, {Category::cLakeHylia, Category::cMinigame,}, SpoilerCollectionCheck::Fishing(0x03), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_LAB_DIVE] = ItemLocation::Base (0x38, 0x3E, "LH Lab Dive", LH_LAB_DIVE, PIECE_OF_HEART, {Category::cLakeHylia,}, SpoilerCollectionCheck::ItemGetInf(24), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_TRADE_FROG] = ItemLocation::Base (0x38, 0x25, "LH Lab Trade Eyeball Frog", LH_TRADE_FROG, EYEDROPS, {Category::cLakeHylia, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(61), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_UNDERWATER_ITEM] = ItemLocation::Base (0x57, 0x15, "LH Underwater Item", LH_UNDERWATER_ITEM, RUTOS_LETTER, {Category::cLakeHylia,}, SpoilerCollectionCheck::EventChkInf(0x31), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_SUN] = ItemLocation::Base (0x57, 0x58, "LH Sun", LH_SUN, FIRE_ARROWS, {Category::cLakeHylia,}, SpoilerCollectionCheck::Chest(0x57, 0x00), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_FREESTANDING_POH] = ItemLocation::Collectable(0x57, 0x1E, "LH Freestanding PoH", LH_FREESTANDING_POH, PIECE_OF_HEART, {Category::cLakeHylia,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(0xEF, 0x30, "LH Deku Scrub Grotto Left", LH_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cLakeHylia, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x19, 0x01), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(0xEF, 0x37, "LH Deku Scrub Grotto Right", LH_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cLakeHylia, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x19, 0x06), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(0xEF, 0x33, "LH Deku Scrub Grotto Center", LH_DEKU_SCRUB_GROTTO_CENTER, BUY_DEKU_SEEDS_30, {Category::cLakeHylia, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x19, 0x04), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_CHILD_FISHING] = ItemLocation::Base (RC_LH_CHILD_FISHING, 0x49, 0x3E, "LH Child Fishing", LH_CHILD_FISHING, PIECE_OF_HEART, {Category::cLakeHylia, Category::cMinigame,}, SpoilerCollectionCheck::Fishing(0x02), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_ADULT_FISHING] = ItemLocation::Base (RC_LH_ADULT_FISHING, 0x49, 0x38, "LH Adult Fishing", LH_ADULT_FISHING, PROGRESSIVE_SCALE, {Category::cLakeHylia, Category::cMinigame,}, SpoilerCollectionCheck::Fishing(0x03), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_LAB_DIVE] = ItemLocation::Base (RC_LH_LAB_DIVE, 0x38, 0x3E, "LH Lab Dive", LH_LAB_DIVE, PIECE_OF_HEART, {Category::cLakeHylia,}, SpoilerCollectionCheck::ItemGetInf(24), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_TRADE_FROG] = ItemLocation::Base (RC_LH_TRADE_FROG, 0x38, 0x25, "LH Lab Trade Eyeball Frog", LH_TRADE_FROG, EYEDROPS, {Category::cLakeHylia, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(61), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_UNDERWATER_ITEM] = ItemLocation::Base (RC_LH_UNDERWATER_ITEM, 0x57, 0x15, "LH Underwater Item", LH_UNDERWATER_ITEM, RUTOS_LETTER, {Category::cLakeHylia,}, SpoilerCollectionCheck::EventChkInf(0x31), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_SUN] = ItemLocation::Base (RC_LH_SUN, 0x57, 0x58, "LH Sun", LH_SUN, FIRE_ARROWS, {Category::cLakeHylia,}, SpoilerCollectionCheck::Chest(0x57, 0x00), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_FREESTANDING_POH] = ItemLocation::Collectable(RC_LH_FREESTANDING_POH, 0x57, 0x1E, "LH Freestanding PoH", LH_FREESTANDING_POH, PIECE_OF_HEART, {Category::cLakeHylia,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_LEFT, 0xEF, 0x30, "LH Deku Scrub Grotto Left", LH_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cLakeHylia, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x19, 0x01), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, 0xEF, 0x37, "LH Deku Scrub Grotto Right", LH_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cLakeHylia, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x19, 0x06), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_CENTER, 0xEF, 0x33, "LH Deku Scrub Grotto Center", LH_DEKU_SCRUB_GROTTO_CENTER, BUY_DEKU_SEEDS_30, {Category::cLakeHylia, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x19, 0x04), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); //Gerudo Valley - locationTable[GV_CHEST] = ItemLocation::Chest (0x5A, 0x00, "GV Chest", GV_CHEST, PURPLE_RUPEE, {Category::cGerudoValley, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_TRADE_SAW] = ItemLocation::Base (0x5A, 0x22, "GV Trade Saw", GV_TRADE_SAW, BROKEN_SWORD, {Category::cGerudoValley, Category::cGerudo, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(58), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_WATERFALL_FREESTANDING_POH] = ItemLocation::Collectable(0x5A, 0x01, "GV Waterfall Freestanding PoH", GV_WATERFALL_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGerudoValley, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_CRATE_FREESTANDING_POH] = ItemLocation::Collectable(0x5A, 0x02, "GV Crate Freestanding PoH", GV_CRATE_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGerudoValley, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(0xF0, 0x39, "GV Deku Scrub Grotto Rear", GV_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cGerudoValley, Category::cGerudo, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1A, 0x08), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(0xF0, 0x3A, "GV Deku Scrub Grotto Front", GV_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cGerudoValley, Category::cGerudo, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1A, 0x09), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_CHEST] = ItemLocation::Chest (RC_GV_CHEST, 0x5A, 0x00, "GV Chest", GV_CHEST, PURPLE_RUPEE, {Category::cGerudoValley, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_TRADE_SAW] = ItemLocation::Base (RC_GV_TRADE_SAW, 0x5A, 0x22, "GV Trade Saw", GV_TRADE_SAW, BROKEN_SWORD, {Category::cGerudoValley, Category::cGerudo, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(58), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_WATERFALL_FREESTANDING_POH] = ItemLocation::Collectable(RC_GV_WATERFALL_FREESTANDING_POH, 0x5A, 0x01, "GV Waterfall Freestanding PoH", GV_WATERFALL_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGerudoValley, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_CRATE_FREESTANDING_POH] = ItemLocation::Collectable(RC_GV_CRATE_FREESTANDING_POH, 0x5A, 0x02, "GV Crate Freestanding PoH", GV_CRATE_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGerudoValley, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(RC_GV_DEKU_SCRUB_GROTTO_REAR, 0xF0, 0x39, "GV Deku Scrub Grotto Rear", GV_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cGerudoValley, Category::cGerudo, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1A, 0x08), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(RC_GV_DEKU_SCRUB_GROTTO_FRONT, 0xF0, 0x3A, "GV Deku Scrub Grotto Front", GV_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cGerudoValley, Category::cGerudo, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x1A, 0x09), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); //Gerudo Fortress - locationTable[GF_CHEST] = ItemLocation::Chest (0x5D, 0x00, "GF Chest", GF_CHEST, PIECE_OF_HEART, {Category::cGerudoFortress, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_HBA_1000_POINTS] = ItemLocation::Base (0x5D, 0x3E, "GF HBA 1000 Points", GF_HBA_1000_POINTS, PIECE_OF_HEART, {Category::cGerudoFortress, Category::cGerudo, Category::cMinigame}, SpoilerCollectionCheck::InfTable(0x19, 0x08), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_HBA_1500_POINTS] = ItemLocation::Base (0x5D, 0x30, "GF HBA 1500 Points", GF_HBA_1500_POINTS, PROGRESSIVE_BOW, {Category::cGerudoFortress, Category::cGerudo, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(7), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_GERUDO_MEMBERSHIP_CARD] = ItemLocation::Base (0x0C, 0x3A, "GF Gerudo Membership Card", GF_GERUDO_MEMBERSHIP_CARD, GERUDO_MEMBERSHIP_CARD, {Category::cGerudoFortress, Category::cGerudo,}, SpoilerCollectionCheck::GerudoToken(), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_NORTH_F1_CARPENTER] = ItemLocation::Collectable(0x0C, 0x0C, "GF North F1 Carpenter", GF_NORTH_F1_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_NORTH_F2_CARPENTER] = ItemLocation::Collectable(0x0C, 0x0A, "GF North F2 Carpenter", GF_NORTH_F2_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_SOUTH_F1_CARPENTER] = ItemLocation::Collectable(0x0C, 0x0E, "GF South F1 Carpenter", GF_SOUTH_F1_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_SOUTH_F2_CARPENTER] = ItemLocation::Collectable(0x0C, 0x0F, "GF South F2 Carpenter", GF_SOUTH_F2_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_CHEST] = ItemLocation::Chest (RC_GF_CHEST, 0x5D, 0x00, "GF Chest", GF_CHEST, PIECE_OF_HEART, {Category::cGerudoFortress, Category::cGerudo,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_HBA_1000_POINTS] = ItemLocation::Base (RC_GF_HBA_1000_POINTS, 0x5D, 0x3E, "GF HBA 1000 Points", GF_HBA_1000_POINTS, PIECE_OF_HEART, {Category::cGerudoFortress, Category::cGerudo, Category::cMinigame}, SpoilerCollectionCheck::InfTable(0x19, 0x08), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_HBA_1500_POINTS] = ItemLocation::Base (RC_GF_HBA_1500_POINTS, 0x5D, 0x30, "GF HBA 1500 Points", GF_HBA_1500_POINTS, PROGRESSIVE_BOW, {Category::cGerudoFortress, Category::cGerudo, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(7), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_GERUDO_MEMBERSHIP_CARD] = ItemLocation::Base (RC_GF_GERUDO_MEMBERSHIP_CARD, 0x0C, 0x3A, "GF Gerudo Membership Card", GF_GERUDO_MEMBERSHIP_CARD, GERUDO_MEMBERSHIP_CARD, {Category::cGerudoFortress, Category::cGerudo,}, SpoilerCollectionCheck::GerudoToken(), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_NORTH_F1_CARPENTER] = ItemLocation::Collectable(RC_GF_NORTH_F1_CARPENTER, 0x0C, 0x0C, "GF North F1 Carpenter", GF_NORTH_F1_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_NORTH_F2_CARPENTER] = ItemLocation::Collectable(RC_GF_NORTH_F2_CARPENTER, 0x0C, 0x0A, "GF North F2 Carpenter", GF_NORTH_F2_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_SOUTH_F1_CARPENTER] = ItemLocation::Collectable(RC_GF_SOUTH_F1_CARPENTER, 0x0C, 0x0E, "GF South F1 Carpenter", GF_SOUTH_F1_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_SOUTH_F2_CARPENTER] = ItemLocation::Collectable(RC_GF_SOUTH_F2_CARPENTER, 0x0C, 0x0F, "GF South F2 Carpenter", GF_SOUTH_F2_CARPENTER, GERUDO_FORTRESS_SMALL_KEY, {Category::cGerudoFortress, Category::cGerudo, Category::cVanillaGFSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); //Haunted Wasteland - locationTable[WASTELAND_CHEST] = ItemLocation::Chest (0x5E, 0x00, "Wasteland Chest", WASTELAND_CHEST, PURPLE_RUPEE, {Category::cHauntedWasteland,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[WASTELAND_BOMBCHU_SALESMAN] = ItemLocation::Base (0x5E, 0x03, "Wasteland Carpet Salesman", WASTELAND_BOMBCHU_SALESMAN, BOMBCHU_10, {Category::cHauntedWasteland, Category::cMerchant,}, SpoilerCollectionCheck::EventChkInf(0x34), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[WASTELAND_CHEST] = ItemLocation::Chest (RC_WASTELAND_CHEST, 0x5E, 0x00, "Wasteland Chest", WASTELAND_CHEST, PURPLE_RUPEE, {Category::cHauntedWasteland,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[WASTELAND_BOMBCHU_SALESMAN] = ItemLocation::Base (RC_WASTELAND_BOMBCHU_SALESMAN, 0x5E, 0x03, "Wasteland Carpet Salesman", WASTELAND_BOMBCHU_SALESMAN, BOMBCHU_10, {Category::cHauntedWasteland, Category::cMerchant,}, SpoilerCollectionCheck::EventChkInf(0x34), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); //Desert Colossus - locationTable[COLOSSUS_FREESTANDING_POH] = ItemLocation::Collectable(0x5C, 0x0D, "Colossus Freestanding PoH", COLOSSUS_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDesertColossus,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[COLOSSUS_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(0xFD, 0x39, "Colossus Deku Scrub Grotto Rear", COLOSSUS_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cDesertColossus, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x27, 0x08), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[COLOSSUS_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(0xFD, 0x3A, "Colossus Deku Scrub Grotto Front", COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cDesertColossus, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x27, 0x09), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[COLOSSUS_FREESTANDING_POH] = ItemLocation::Collectable(RC_COLOSSUS_FREESTANDING_POH, 0x5C, 0x0D, "Colossus Freestanding PoH", COLOSSUS_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDesertColossus,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[COLOSSUS_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, 0xFD, 0x39, "Colossus Deku Scrub Grotto Rear", COLOSSUS_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cDesertColossus, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x27, 0x08), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[COLOSSUS_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, 0xFD, 0x3A, "Colossus Deku Scrub Grotto Front", COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cDesertColossus, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x27, 0x09), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); //Market - locationTable[MARKET_TREASURE_CHEST_GAME_REWARD] = ItemLocation::Chest (0x10, 0x0A, "MK Treasure Chest Game Reward", MARKET_TREASURE_CHEST_GAME_REWARD, TREASURE_GAME_HEART, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(19), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_BOWLING_FIRST_PRIZE] = ItemLocation::Base (0x4B, 0x33, "MK Bombchu Bowling First Prize", MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, PROGRESSIVE_BOMB_BAG, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(25), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_BOWLING_SECOND_PRIZE] = ItemLocation::Base (0x4B, 0x3E, "MK Bombchu Bowling Second Prize", MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, PIECE_OF_HEART, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(26), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_BOWLING_BOMBCHUS] = ItemLocation::Base (0x4B, 0xFF, "MK Bombchu Bowling Bombchus", NONE, BOMBCHU_DROP, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_LOST_DOG] = ItemLocation::Base (0x35, 0x3E, "MK Lost Dog", MARKET_LOST_DOG, PIECE_OF_HEART, {Category::cInnerMarket, Category::cMarket,}, SpoilerCollectionCheck::InfTable(0x19, 0x09), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_SHOOTING_GALLERY_REWARD] = ItemLocation::Base (0x42, 0x60, "MK Shooting Gallery", MARKET_SHOOTING_GALLERY_REWARD, PROGRESSIVE_SLINGSHOT, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_10_BIG_POES] = ItemLocation::Base (0x4D, 0x0F, "MK 10 Big Poes", MARKET_10_BIG_POES, EMPTY_BOTTLE, {Category::cInnerMarket, Category::cMarket,}, SpoilerCollectionCheck::BigPoePoints(), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_1] = ItemLocation::Chest (0x10, 0x01, "MK Chest Game First Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_1, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_2] = ItemLocation::Chest (0x10, 0x03, "MK Chest Game Second Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_2, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_3] = ItemLocation::Chest (0x10, 0x05, "MK Chest Game Third Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_3, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_4] = ItemLocation::Chest (0x10, 0x07, "MK Chest Game Fourth Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_4, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_5] = ItemLocation::Chest (0x10, 0x09, "MK Chest Game Fifth Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_5, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_TREASURE_CHEST_GAME_REWARD] = ItemLocation::Chest (RC_MARKET_TREASURE_CHEST_GAME_REWARD, 0x10, 0x0A, "MK Treasure Chest Game Reward", MARKET_TREASURE_CHEST_GAME_REWARD, TREASURE_GAME_HEART, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(19), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_BOWLING_FIRST_PRIZE] = ItemLocation::Base (RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, 0x4B, 0x33, "MK Bombchu Bowling First Prize", MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, PROGRESSIVE_BOMB_BAG, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(25), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_BOWLING_SECOND_PRIZE] = ItemLocation::Base (RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, 0x4B, 0x3E, "MK Bombchu Bowling Second Prize", MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, PIECE_OF_HEART, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(26), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_BOWLING_BOMBCHUS] = ItemLocation::Base (RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS, 0x4B, 0xFF, "MK Bombchu Bowling Bombchus", NONE, BOMBCHU_DROP, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_LOST_DOG] = ItemLocation::Base (RC_MARKET_LOST_DOG, 0x35, 0x3E, "MK Lost Dog", MARKET_LOST_DOG, PIECE_OF_HEART, {Category::cInnerMarket, Category::cMarket,}, SpoilerCollectionCheck::InfTable(0x19, 0x09), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_SHOOTING_GALLERY_REWARD] = ItemLocation::Base (RC_MARKET_SHOOTING_GALLERY_REWARD, 0x42, 0x60, "MK Shooting Gallery", MARKET_SHOOTING_GALLERY_REWARD, PROGRESSIVE_SLINGSHOT, {Category::cInnerMarket, Category::cMarket, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_10_BIG_POES] = ItemLocation::Base (RC_MARKET_10_BIG_POES, 0x4D, 0x0F, "MK 10 Big Poes", MARKET_10_BIG_POES, EMPTY_BOTTLE, {Category::cInnerMarket, Category::cMarket,}, SpoilerCollectionCheck::BigPoePoints(), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_1] = ItemLocation::Chest (RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, 0x10, 0x01, "MK Chest Game First Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_1, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_2] = ItemLocation::Chest (RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, 0x10, 0x03, "MK Chest Game Second Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_2, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_3] = ItemLocation::Chest (RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, 0x10, 0x05, "MK Chest Game Third Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_3, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_4] = ItemLocation::Chest (RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, 0x10, 0x07, "MK Chest Game Fourth Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_4, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_TREASURE_CHEST_GAME_ITEM_5] = ItemLocation::Chest (RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, 0x10, 0x09, "MK Chest Game Fifth Room Chest", MARKET_TREASURE_CHEST_GAME_ITEM_5, TREASURE_GAME_SMALL_KEY, {Category::cInnerMarket, Category::cMarket, Category::cMinigame, Category::cChestMinigame}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); //Hyrule Castle - locationTable[HC_MALON_EGG] = ItemLocation::Base (0x5F, 0x47, "HC Malon Egg", HC_MALON_EGG, WEIRD_EGG, {Category::cHyruleCastle, Category::cMarket,}, SpoilerCollectionCheck::EventChkInf(0x12), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[HC_ZELDAS_LETTER] = ItemLocation::Base (0x4A, 0x0B, "HC Zeldas Letter", HC_ZELDAS_LETTER, ZELDAS_LETTER, {Category::cHyruleCastle, Category::cMarket,}, SpoilerCollectionCheck::EventChkInf(0x40), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[HC_MALON_EGG] = ItemLocation::Base (RC_HC_MALON_EGG, 0x5F, 0x47, "HC Malon Egg", HC_MALON_EGG, WEIRD_EGG, {Category::cHyruleCastle, Category::cMarket,}, SpoilerCollectionCheck::EventChkInf(0x12), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[HC_ZELDAS_LETTER] = ItemLocation::Base (RC_HC_ZELDAS_LETTER, 0x4A, 0x0B, "HC Zeldas Letter", HC_ZELDAS_LETTER, ZELDAS_LETTER, {Category::cHyruleCastle, Category::cMarket,}, SpoilerCollectionCheck::EventChkInf(0x40), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); //Kakariko - locationTable[KAK_REDEAD_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x0A, "Kak Redead Grotto Chest", KAK_REDEAD_GROTTO_CHEST, HUGE_RUPEE, {Category::cKakarikoVillage, Category::cKakariko, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_OPEN_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x08, "Kak Open Grotto Chest", KAK_OPEN_GROTTO_CHEST, RED_RUPEE, {Category::cKakarikoVillage, Category::cKakariko, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_10_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (0x50, 0x45, "Kak 10 Gold Skulltula Reward", KAK_10_GOLD_SKULLTULA_REWARD, PROGRESSIVE_WALLET, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDA), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_20_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (0x50, 0x39, "Kak 20 Gold Skulltula Reward", KAK_20_GOLD_SKULLTULA_REWARD, STONE_OF_AGONY, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDB), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_30_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (0x50, 0x46, "Kak 30 Gold Skulltula Reward", KAK_30_GOLD_SKULLTULA_REWARD, PROGRESSIVE_WALLET, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDC), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_40_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (0x50, 0x03, "Kak 40 Gold Skulltula Reward", KAK_40_GOLD_SKULLTULA_REWARD, BOMBCHU_10, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDD), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_50_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (0x50, 0x3E, "Kak 50 Gold Skulltula Reward", KAK_50_GOLD_SKULLTULA_REWARD, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDE), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_MAN_ON_ROOF] = ItemLocation::Base (0x52, 0x3E, "Kak Man on Roof", KAK_MAN_ON_ROOF, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheck::ItemGetInf(29), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_SHOOTING_GALLERY_REWARD] = ItemLocation::Base (0x42, 0x30, "Kak Shooting Gallery Reward", KAK_SHOOTING_GALLERY_REWARD, PROGRESSIVE_BOW, {Category::cKakarikoVillage, Category::cKakariko, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_TRADE_ODD_MUSHROOM] = ItemLocation::Base (0x4E, 0x20, "Kak Trade Odd Mushroom", KAK_TRADE_ODD_MUSHROOM, ODD_POTION, {Category::cKakarikoVillage, Category::cKakariko, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(56), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_ANJU_AS_ADULT] = ItemLocation::Base (0x52, 0x1D, "Kak Anju as Adult", KAK_ANJU_AS_ADULT, CLAIM_CHECK, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheck::ItemGetInf(36), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_ANJU_AS_CHILD] = ItemLocation::Base (0x52, 0x0F, "Kak Anju as Child", KAK_ANJU_AS_CHILD, EMPTY_BOTTLE, {Category::cKakarikoVillage, Category::cKakariko, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_TRADE_POCKET_CUCCO] = ItemLocation::Base (0x52, 0x0E, "Kak Trade Pocket Cucco", KAK_TRADE_POCKET_CUCCO, COJIRO, {Category::cKakarikoVillage, Category::cKakariko, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(38), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_IMPAS_HOUSE_FREESTANDING_POH] = ItemLocation::Collectable(0x37, 0x01, "Kak Impas House Freestanding PoH", KAK_IMPAS_HOUSE_FREESTANDING_POH, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_WINDMILL_FREESTANDING_POH] = ItemLocation::Collectable(0x48, 0x01, "Kak Windmill Freestanding PoH", KAK_WINDMILL_FREESTANDING_POH, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_REDEAD_GROTTO_CHEST] = ItemLocation::Chest (RC_KAK_REDEAD_GROTTO_CHEST, 0x3E, 0x0A, "Kak Redead Grotto Chest", KAK_REDEAD_GROTTO_CHEST, HUGE_RUPEE, {Category::cKakarikoVillage, Category::cKakariko, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_OPEN_GROTTO_CHEST] = ItemLocation::Chest (RC_KAK_OPEN_GROTTO_CHEST, 0x3E, 0x08, "Kak Open Grotto Chest", KAK_OPEN_GROTTO_CHEST, RED_RUPEE, {Category::cKakarikoVillage, Category::cKakariko, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_10_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (RC_KAK_10_GOLD_SKULLTULA_REWARD, 0x50, 0x45, "Kak 10 Gold Skulltula Reward", KAK_10_GOLD_SKULLTULA_REWARD, PROGRESSIVE_WALLET, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDA), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_20_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (RC_KAK_20_GOLD_SKULLTULA_REWARD, 0x50, 0x39, "Kak 20 Gold Skulltula Reward", KAK_20_GOLD_SKULLTULA_REWARD, STONE_OF_AGONY, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDB), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_30_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (RC_KAK_30_GOLD_SKULLTULA_REWARD, 0x50, 0x46, "Kak 30 Gold Skulltula Reward", KAK_30_GOLD_SKULLTULA_REWARD, PROGRESSIVE_WALLET, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDC), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_40_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (RC_KAK_40_GOLD_SKULLTULA_REWARD, 0x50, 0x03, "Kak 40 Gold Skulltula Reward", KAK_40_GOLD_SKULLTULA_REWARD, BOMBCHU_10, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDD), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_50_GOLD_SKULLTULA_REWARD] = ItemLocation::Base (RC_KAK_50_GOLD_SKULLTULA_REWARD, 0x50, 0x3E, "Kak 50 Gold Skulltula Reward", KAK_50_GOLD_SKULLTULA_REWARD, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko, Category::cSkulltulaHouse}, SpoilerCollectionCheck::EventChkInf(0xDE), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_MAN_ON_ROOF] = ItemLocation::Base (RC_KAK_MAN_ON_ROOF, 0x52, 0x3E, "Kak Man on Roof", KAK_MAN_ON_ROOF, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheck::ItemGetInf(29), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_SHOOTING_GALLERY_REWARD] = ItemLocation::Base (RC_KAK_SHOOTING_GALLERY_REWARD, 0x42, 0x30, "Kak Shooting Gallery Reward", KAK_SHOOTING_GALLERY_REWARD, PROGRESSIVE_BOW, {Category::cKakarikoVillage, Category::cKakariko, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_TRADE_ODD_MUSHROOM] = ItemLocation::Base (RC_KAK_TRADE_ODD_MUSHROOM, 0x4E, 0x20, "Kak Trade Odd Mushroom", KAK_TRADE_ODD_MUSHROOM, ODD_POTION, {Category::cKakarikoVillage, Category::cKakariko, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(56), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_ANJU_AS_ADULT] = ItemLocation::Base (RC_KAK_ANJU_AS_ADULT, 0x52, 0x1D, "Kak Anju as Adult", KAK_ANJU_AS_ADULT, CLAIM_CHECK, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheck::ItemGetInf(36), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_ANJU_AS_CHILD] = ItemLocation::Base (RC_KAK_ANJU_AS_CHILD, 0x52, 0x0F, "Kak Anju as Child", KAK_ANJU_AS_CHILD, EMPTY_BOTTLE, {Category::cKakarikoVillage, Category::cKakariko, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_TRADE_POCKET_CUCCO] = ItemLocation::Base (RC_KAK_TRADE_POCKET_CUCCO, 0x52, 0x0E, "Kak Trade Pocket Cucco", KAK_TRADE_POCKET_CUCCO, COJIRO, {Category::cKakarikoVillage, Category::cKakariko, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(38), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_IMPAS_HOUSE_FREESTANDING_POH] = ItemLocation::Collectable(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, 0x37, 0x01, "Kak Impas House Freestanding PoH", KAK_IMPAS_HOUSE_FREESTANDING_POH, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_WINDMILL_FREESTANDING_POH] = ItemLocation::Collectable(RC_KAK_WINDMILL_FREESTANDING_POH, 0x48, 0x01, "Kak Windmill Freestanding PoH", KAK_WINDMILL_FREESTANDING_POH, PIECE_OF_HEART, {Category::cKakarikoVillage, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); //Graveyard - locationTable[GRAVEYARD_SHIELD_GRAVE_CHEST] = ItemLocation::Chest (0x40, 0x00, "GY Shield Grave Chest", GRAVEYARD_SHIELD_GRAVE_CHEST, HYLIAN_SHIELD, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_HEART_PIECE_GRAVE_CHEST] = ItemLocation::Chest (0x3F, 0x00, "GY Heart Piece Grave Chest", GRAVEYARD_HEART_PIECE_GRAVE_CHEST, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_COMPOSERS_GRAVE_CHEST] = ItemLocation::Chest (0x41, 0x00, "GY Composers Grave Chest", GRAVEYARD_COMPOSERS_GRAVE_CHEST, BOMBS_5, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_HOOKSHOT_CHEST] = ItemLocation::Chest (0x48, 0x00, "GY Hookshot Chest", GRAVEYARD_HOOKSHOT_CHEST, PROGRESSIVE_HOOKSHOT, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_DAMPE_RACE_FREESTANDING_POH] = ItemLocation::Collectable(0x48, 0x07, "GY Dampe Race Freestanding PoH", GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko, Category::cMinigame}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_FREESTANDING_POH] = ItemLocation::Collectable(0x53, 0x04, "GY Freestanding PoH", GRAVEYARD_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR] = ItemLocation::Collectable(0x53, 0x08, "GY Dampe Gravedigging Tour", GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheck::ItemGetInf(20), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_SHIELD_GRAVE_CHEST] = ItemLocation::Chest (RC_GRAVEYARD_SHIELD_GRAVE_CHEST, 0x40, 0x00, "GY Shield Grave Chest", GRAVEYARD_SHIELD_GRAVE_CHEST, HYLIAN_SHIELD, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_HEART_PIECE_GRAVE_CHEST] = ItemLocation::Chest (RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, 0x3F, 0x00, "GY Heart Piece Grave Chest", GRAVEYARD_HEART_PIECE_GRAVE_CHEST, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_COMPOSERS_GRAVE_CHEST] = ItemLocation::Chest (RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, 0x41, 0x00, "GY Composers Grave Chest", GRAVEYARD_COMPOSERS_GRAVE_CHEST, BOMBS_5, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_HOOKSHOT_CHEST] = ItemLocation::Chest (RC_GRAVEYARD_HOOKSHOT_CHEST, 0x48, 0x00, "GY Hookshot Chest", GRAVEYARD_HOOKSHOT_CHEST, PROGRESSIVE_HOOKSHOT, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_DAMPE_RACE_FREESTANDING_POH] = ItemLocation::Collectable(RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, 0x48, 0x07, "GY Dampe Race Freestanding PoH", GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko, Category::cMinigame}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_FREESTANDING_POH] = ItemLocation::Collectable(RC_GRAVEYARD_FREESTANDING_POH, 0x53, 0x04, "GY Freestanding PoH", GRAVEYARD_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR] = ItemLocation::Collectable(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, 0x53, 0x08, "GY Dampe Gravedigging Tour", GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, PIECE_OF_HEART, {Category::cGraveyard, Category::cKakariko,}, SpoilerCollectionCheck::ItemGetInf(20), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); //Death Mountain - locationTable[DMT_CHEST] = ItemLocation::Chest (0x60, 0x01, "DMT Chest", DMT_CHEST, PURPLE_RUPEE, {Category::cDeathMountainTrail, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_STORMS_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x17, "DMT Storms Grotto Chest", DMT_STORMS_GROTTO_CHEST, HUGE_RUPEE, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_TRADE_BROKEN_SWORD] = ItemLocation::Base (0x60, 0x23, "DMT Trade Broken Sword", DMT_TRADE_BROKEN_SWORD, PRESCRIPTION, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cAdultTrade}, SpoilerCollectionCheck::Biggoron(0x4), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_TRADE_EYEDROPS] = ItemLocation::Base (0x60, 0x26, "DMT Trade Eyedrops", DMT_TRADE_EYEDROPS, CLAIM_CHECK, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cAdultTrade}, SpoilerCollectionCheck::Biggoron(0x2), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_TRADE_CLAIM_CHECK] = ItemLocation::Base (0x60, 0x57, "DMT Trade Claim Check", DMT_TRADE_CLAIM_CHECK, BIGGORON_SWORD, {Category::cDeathMountainTrail, Category::cDeathMountain}, SpoilerCollectionCheck::Biggoron(0x1), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_FREESTANDING_POH] = ItemLocation::Collectable(0x60, 0x1E, "DMT Freestanding PoH", DMT_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDeathMountainTrail, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_CHEST] = ItemLocation::Chest (RC_DMT_CHEST, 0x60, 0x01, "DMT Chest", DMT_CHEST, PURPLE_RUPEE, {Category::cDeathMountainTrail, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_STORMS_GROTTO_CHEST] = ItemLocation::Chest (RC_DMT_STORMS_GROTTO_CHEST, 0x3E, 0x17, "DMT Storms Grotto Chest", DMT_STORMS_GROTTO_CHEST, HUGE_RUPEE, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_TRADE_BROKEN_SWORD] = ItemLocation::Base (RC_DMT_TRADE_BROKEN_SWORD, 0x60, 0x23, "DMT Trade Broken Sword", DMT_TRADE_BROKEN_SWORD, PRESCRIPTION, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cAdultTrade}, SpoilerCollectionCheck::Biggoron(0x4), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_TRADE_EYEDROPS] = ItemLocation::Base (RC_DMT_TRADE_EYEDROPS, 0x60, 0x26, "DMT Trade Eyedrops", DMT_TRADE_EYEDROPS, CLAIM_CHECK, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cAdultTrade}, SpoilerCollectionCheck::Biggoron(0x2), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_TRADE_CLAIM_CHECK] = ItemLocation::Base (RC_DMT_TRADE_CLAIM_CHECK, 0x60, 0x57, "DMT Trade Claim Check", DMT_TRADE_CLAIM_CHECK, BIGGORON_SWORD, {Category::cDeathMountainTrail, Category::cDeathMountain}, SpoilerCollectionCheck::Biggoron(0x1), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_FREESTANDING_POH] = ItemLocation::Collectable(RC_DMT_FREESTANDING_POH, 0x60, 0x1E, "DMT Freestanding PoH", DMT_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDeathMountainTrail, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); //Goron City - locationTable[GC_MAZE_LEFT_CHEST] = ItemLocation::Chest (0x62, 0x00, "GC Maze Left Chest", GC_MAZE_LEFT_CHEST, HUGE_RUPEE, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_MAZE_RIGHT_CHEST] = ItemLocation::Chest (0x62, 0x01, "GC Maze Right Chest", GC_MAZE_RIGHT_CHEST, PURPLE_RUPEE, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_MAZE_CENTER_CHEST] = ItemLocation::Chest (0x62, 0x02, "GC Maze Center Chest", GC_MAZE_CENTER_CHEST, PURPLE_RUPEE, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_ROLLING_GORON_AS_CHILD] = ItemLocation::Base (0x62, 0x34, "GC Rolling Goron as Child", GC_ROLLING_GORON_AS_CHILD, PROGRESSIVE_BOMB_BAG, {Category::cGoronCity,}, SpoilerCollectionCheck::InfTable(0x11, 0x06), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_ROLLING_GORON_AS_ADULT] = ItemLocation::Base (0x62, 0x2C, "GC Rolling Goron as Adult", GC_ROLLING_GORON_AS_ADULT, GORON_TUNIC, {Category::cGoronCity,}, SpoilerCollectionCheck::InfTable(0x10, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_DARUNIAS_JOY] = ItemLocation::Base (0x62, 0x54, "GC Darunias Joy", GC_DARUNIAS_JOY, PROGRESSIVE_STRENGTH, {Category::cGoronCity,}, SpoilerCollectionCheck::EventChkInf(0x36), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_POT_FREESTANDING_POH] = ItemLocation::Collectable(0x62, 0x1F, "GC Pot Freestanding PoH", GC_POT_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(0xFB, 0x30, "GC Deku Scrub Grotto Left", GC_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cGoronCity, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x25, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(0xFB, 0x37, "GC Deku Scrub Grotto Right", GC_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cGoronCity, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x25, 0x06), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(0xFB, 0x33, "GC Deku Scrub Grotto Center", GC_DEKU_SCRUB_GROTTO_CENTER, BUY_ARROWS_30, {Category::cGoronCity, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x25, 0x04), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_MEDIGORON] = ItemLocation::Base (0x62, 0x51, "GC Medigoron", GC_MEDIGORON, GIANTS_KNIFE, {Category::cGoronCity, Category::cMerchant,}, SpoilerCollectionCheck::EventChkInf(0x35), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_MAZE_LEFT_CHEST] = ItemLocation::Chest (RC_GC_MAZE_LEFT_CHEST, 0x62, 0x00, "GC Maze Left Chest", GC_MAZE_LEFT_CHEST, HUGE_RUPEE, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_MAZE_RIGHT_CHEST] = ItemLocation::Chest (RC_GC_MAZE_RIGHT_CHEST, 0x62, 0x01, "GC Maze Right Chest", GC_MAZE_RIGHT_CHEST, PURPLE_RUPEE, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_MAZE_CENTER_CHEST] = ItemLocation::Chest (RC_GC_MAZE_CENTER_CHEST, 0x62, 0x02, "GC Maze Center Chest", GC_MAZE_CENTER_CHEST, PURPLE_RUPEE, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_ROLLING_GORON_AS_CHILD] = ItemLocation::Base (RC_GC_ROLLING_GORON_AS_CHILD, 0x62, 0x34, "GC Rolling Goron as Child", GC_ROLLING_GORON_AS_CHILD, PROGRESSIVE_BOMB_BAG, {Category::cGoronCity,}, SpoilerCollectionCheck::InfTable(0x11, 0x06), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_ROLLING_GORON_AS_ADULT] = ItemLocation::Base (RC_GC_ROLLING_GORON_AS_ADULT, 0x62, 0x2C, "GC Rolling Goron as Adult", GC_ROLLING_GORON_AS_ADULT, GORON_TUNIC, {Category::cGoronCity,}, SpoilerCollectionCheck::InfTable(0x10, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_DARUNIAS_JOY] = ItemLocation::Base (RC_GC_DARUNIAS_JOY, 0x62, 0x54, "GC Darunias Joy", GC_DARUNIAS_JOY, PROGRESSIVE_STRENGTH, {Category::cGoronCity,}, SpoilerCollectionCheck::EventChkInf(0x36), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_POT_FREESTANDING_POH] = ItemLocation::Collectable(RC_GC_POT_FREESTANDING_POH, 0x62, 0x1F, "GC Pot Freestanding PoH", GC_POT_FREESTANDING_POH, PIECE_OF_HEART, {Category::cGoronCity,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_LEFT, 0xFB, 0x30, "GC Deku Scrub Grotto Left", GC_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cGoronCity, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x25, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, 0xFB, 0x37, "GC Deku Scrub Grotto Right", GC_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cGoronCity, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x25, 0x06), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_CENTER, 0xFB, 0x33, "GC Deku Scrub Grotto Center", GC_DEKU_SCRUB_GROTTO_CENTER, BUY_ARROWS_30, {Category::cGoronCity, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x25, 0x04), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_MEDIGORON] = ItemLocation::Base (RC_GC_MEDIGORON, 0x62, 0x51, "GC Medigoron", GC_MEDIGORON, GIANTS_KNIFE, {Category::cGoronCity, Category::cMerchant,}, SpoilerCollectionCheck::EventChkInf(0x35), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); //Death Mountain Crater - locationTable[DMC_UPPER_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x1A, "DMC Upper Grotto Chest", DMC_UPPER_GROTTO_CHEST, BOMBS_20, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_WALL_FREESTANDING_POH] = ItemLocation::Collectable(0x61, 0x02, "DMC Wall Freestanding PoH", DMC_WALL_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDeathMountainCrater, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_VOLCANO_FREESTANDING_POH] = ItemLocation::Collectable(0x61, 0x08, "DMC Volcano Freestanding PoH", DMC_VOLCANO_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDeathMountainCrater, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_DEKU_SCRUB] = ItemLocation::Base (0x61, 0x37, "DMC Deku Scrub", DMC_DEKU_SCRUB, BUY_BOMBS_535, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub}, SpoilerCollectionCheck::Scrub(0x61, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(0xF9, 0x30, "DMC Deku Scrub Grotto Left", DMC_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x23, 0x01), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(0xF9, 0x37, "DMC Deku Scrub Grotto Right", DMC_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x23, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(0xF9, 0x33, "DMC Deku Scrub Grotto Center", DMC_DEKU_SCRUB_GROTTO_CENTER, BUY_ARROWS_30, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x23, 0x04), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_UPPER_GROTTO_CHEST] = ItemLocation::Chest (RC_DMC_UPPER_GROTTO_CHEST, 0x3E, 0x1A, "DMC Upper Grotto Chest", DMC_UPPER_GROTTO_CHEST, BOMBS_20, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_WALL_FREESTANDING_POH] = ItemLocation::Collectable(RC_DMC_WALL_FREESTANDING_POH, 0x61, 0x02, "DMC Wall Freestanding PoH", DMC_WALL_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDeathMountainCrater, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_VOLCANO_FREESTANDING_POH] = ItemLocation::Collectable(RC_DMC_VOLCANO_FREESTANDING_POH, 0x61, 0x08, "DMC Volcano Freestanding PoH", DMC_VOLCANO_FREESTANDING_POH, PIECE_OF_HEART, {Category::cDeathMountainCrater, Category::cDeathMountain,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_DEKU_SCRUB] = ItemLocation::Base (RC_DMC_DEKU_SCRUB, 0x61, 0x37, "DMC Deku Scrub", DMC_DEKU_SCRUB, BUY_BOMBS_535, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub}, SpoilerCollectionCheck::Scrub(0x61, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, 0xF9, 0x30, "DMC Deku Scrub Grotto Left", DMC_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x23, 0x01), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, 0xF9, 0x37, "DMC Deku Scrub Grotto Right", DMC_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x23, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, 0xF9, 0x33, "DMC Deku Scrub Grotto Center", DMC_DEKU_SCRUB_GROTTO_CENTER, BUY_ARROWS_30, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x23, 0x04), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); //Zoras River - locationTable[ZR_OPEN_GROTTO_CHEST] = ItemLocation::Chest (0x3E, 0x09, "ZR Open Grotto Chest", ZR_OPEN_GROTTO_CHEST, RED_RUPEE, {Category::cZorasRiver, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_MAGIC_BEAN_SALESMAN] = ItemLocation::Base (0x54, 0x16, "ZR Magic Bean Salesman", ZR_MAGIC_BEAN_SALESMAN, MAGIC_BEAN, {Category::cZorasRiver,}, SpoilerCollectionCheck::MagicBeans(0x54, 0x01), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_FROGS_IN_THE_RAIN] = ItemLocation::Base (0x54, 0x3E, "ZR Frogs in the Rain", ZR_FROGS_IN_THE_RAIN, PIECE_OF_HEART, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_FROGS_OCARINA_GAME] = ItemLocation::Base (0x54, 0x76, "ZR Frogs Ocarina Game", ZR_FROGS_OCARINA_GAME, PIECE_OF_HEART, {Category::cZorasRiver, Category::cMinigame,}, SpoilerCollectionCheck::EventChkInf(0xD0), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH] = ItemLocation::Collectable(0x54, 0x04, "ZR Near Open Grotto Freestanding PoH", ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasRiver,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_NEAR_DOMAIN_FREESTANDING_POH] = ItemLocation::Collectable(0x54, 0x0B, "ZR Near Domain Freestanding PoH", ZR_NEAR_DOMAIN_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasRiver,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(0xEB, 0x39, "ZR Deku Scrub Grotto Rear", ZR_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cZorasRiver, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x15, 0x08), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(0xEB, 0x3A, "ZR Deku Scrub Grotto Front", ZR_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cZorasRiver, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x15, 0x09), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_OPEN_GROTTO_CHEST] = ItemLocation::Chest (RC_ZR_OPEN_GROTTO_CHEST, 0x3E, 0x09, "ZR Open Grotto Chest", ZR_OPEN_GROTTO_CHEST, RED_RUPEE, {Category::cZorasRiver, Category::cGrotto,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_MAGIC_BEAN_SALESMAN] = ItemLocation::Base (RC_ZR_MAGIC_BEAN_SALESMAN, 0x54, 0x16, "ZR Magic Bean Salesman", ZR_MAGIC_BEAN_SALESMAN, MAGIC_BEAN, {Category::cZorasRiver,}, SpoilerCollectionCheck::MagicBeans(0x54, 0x01), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_ZELDAS_LULLABY] = ItemLocation::Base (RC_ZR_FROGS_ZELDAS_LULLABY, 0x54, 0x3E, "ZR Frogs Zelda's Lullaby", ZR_FROGS_ZELDAS_LULLABY, PURPLE_RUPEE, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_EPONAS_SONG] = ItemLocation::Base (RC_ZR_FROGS_EPONAS_SONG, 0x54, 0x3E, "ZR Frogs Epona's Song", ZR_FROGS_EPONAS_SONG, PURPLE_RUPEE, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_SARIAS_SONG] = ItemLocation::Base (RC_ZR_FROGS_SARIAS_SONG, 0x54, 0x3E, "ZR Frogs Saria's Song", ZR_FROGS_SARIAS_SONG, PURPLE_RUPEE, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_SUNS_SONG] = ItemLocation::Base (RC_ZR_FROGS_SUNS_SONG, 0x54, 0x3E, "ZR Frogs Sun's Song", ZR_FROGS_SUNS_SONG, PURPLE_RUPEE, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_SONG_OF_TIME] = ItemLocation::Base (RC_ZR_FROGS_SONG_OF_TIME, 0x54, 0x3E, "ZR Frogs Song of Time", ZR_FROGS_SONG_OF_TIME, PURPLE_RUPEE, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_IN_THE_RAIN] = ItemLocation::Base (RC_ZR_FROGS_IN_THE_RAIN, 0x54, 0x3E, "ZR Frogs in the Rain", ZR_FROGS_IN_THE_RAIN, PIECE_OF_HEART, {Category::cZorasRiver,}, SpoilerCollectionCheck::EventChkInf(0xD6), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_FROGS_OCARINA_GAME] = ItemLocation::Base (RC_ZR_FROGS_OCARINA_GAME, 0x54, 0x76, "ZR Frogs Ocarina Game", ZR_FROGS_OCARINA_GAME, PIECE_OF_HEART, {Category::cZorasRiver, Category::cMinigame,}, SpoilerCollectionCheck::EventChkInf(0xD0), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH] = ItemLocation::Collectable(RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, 0x54, 0x04, "ZR Near Open Grotto Freestanding PoH", ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasRiver,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_NEAR_DOMAIN_FREESTANDING_POH] = ItemLocation::Collectable(RC_ZR_NEAR_DOMAIN_FREESTANDING_POH, 0x54, 0x0B, "ZR Near Domain Freestanding PoH", ZR_NEAR_DOMAIN_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasRiver,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_DEKU_SCRUB_GROTTO_REAR] = ItemLocation::GrottoScrub(RC_ZR_DEKU_SCRUB_GROTTO_REAR, 0xEB, 0x39, "ZR Deku Scrub Grotto Rear", ZR_DEKU_SCRUB_GROTTO_REAR, BUY_RED_POTION_30, {Category::cZorasRiver, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x15, 0x08), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_DEKU_SCRUB_GROTTO_FRONT] = ItemLocation::GrottoScrub(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, 0xEB, 0x3A, "ZR Deku Scrub Grotto Front", ZR_DEKU_SCRUB_GROTTO_FRONT, BUY_GREEN_POTION, {Category::cZorasRiver, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x15, 0x09), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); //Zoras Domain - locationTable[ZD_CHEST] = ItemLocation::Chest (0x58, 0x00, "ZD Chest", ZD_CHEST, PIECE_OF_HEART, {Category::cZorasDomain,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_DIVING_MINIGAME] = ItemLocation::Base (0x58, 0x37, "ZD Diving Minigame", ZD_DIVING_MINIGAME, PROGRESSIVE_SCALE, {Category::cZorasDomain, Category::cMinigame,}, SpoilerCollectionCheck::EventChkInf(0x38), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_KING_ZORA_THAWED] = ItemLocation::Base (0x58, 0x2D, "ZD King Zora Thawed", ZD_KING_ZORA_THAWED, ZORA_TUNIC, {Category::cZorasDomain,}, SpoilerCollectionCheck::InfTable(0x13, 0x01), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_TRADE_PRESCRIPTION] = ItemLocation::Base (0x58, 0x24, "ZD Trade Prescription", ZD_TRADE_PRESCRIPTION, EYEBALL_FROG, {Category::cZorasDomain, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(60), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_CHEST] = ItemLocation::Chest (RC_ZD_CHEST, 0x58, 0x00, "ZD Chest", ZD_CHEST, PIECE_OF_HEART, {Category::cZorasDomain,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_DIVING_MINIGAME] = ItemLocation::Base (RC_ZD_DIVING_MINIGAME, 0x58, 0x37, "ZD Diving Minigame", ZD_DIVING_MINIGAME, PROGRESSIVE_SCALE, {Category::cZorasDomain, Category::cMinigame,}, SpoilerCollectionCheck::EventChkInf(0x38), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_KING_ZORA_THAWED] = ItemLocation::Base (RC_ZD_KING_ZORA_THAWED, 0x58, 0x2D, "ZD King Zora Thawed", ZD_KING_ZORA_THAWED, ZORA_TUNIC, {Category::cZorasDomain,}, SpoilerCollectionCheck::InfTable(0x13, 0x01), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_TRADE_PRESCRIPTION] = ItemLocation::Base (RC_ZD_TRADE_PRESCRIPTION, 0x58, 0x24, "ZD Trade Prescription", ZD_TRADE_PRESCRIPTION, EYEBALL_FROG, {Category::cZorasDomain, Category::cAdultTrade}, SpoilerCollectionCheck::ItemGetInf(60), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); //Zoras Fountain - locationTable[ZF_ICEBERG_FREESTANDING_POH] = ItemLocation::Collectable(0x59, 0x01, "ZF Iceberg Freestanding PoH", ZF_ICEBERG_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasFountain,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZF_BOTTOM_FREESTANDING_POH] = ItemLocation::Collectable(0x59, 0x14, "ZF Bottom Freestanding PoH", ZF_BOTTOM_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasFountain,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZF_ICEBERG_FREESTANDING_POH] = ItemLocation::Collectable(RC_ZF_ICEBERC_FREESTANDING_POH, 0x59, 0x01, "ZF Iceberg Freestanding PoH", ZF_ICEBERG_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasFountain,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZF_BOTTOM_FREESTANDING_POH] = ItemLocation::Collectable(RC_ZF_BOTTOM_FREESTANDING_POH, 0x59, 0x14, "ZF Bottom Freestanding PoH", ZF_BOTTOM_FREESTANDING_POH, PIECE_OF_HEART, {Category::cZorasFountain,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); //Lon Lon Ranch - locationTable[LLR_TALONS_CHICKENS] = ItemLocation::Base (0x4C, 0x14, "LLR Talons Chickens", LLR_TALONS_CHICKENS, BOTTLE_WITH_MILK, {Category::cLonLonRanch, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(10), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_FREESTANDING_POH] = ItemLocation::Collectable(0x4C, 0x01, "LLR Freestanding PoH", LLR_FREESTANDING_POH, PIECE_OF_HEART, {Category::cLonLonRanch,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(0xFC, 0x30, "LLR Deku Scrub Grotto Left", LLR_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cLonLonRanch, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x26, 0x01), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(0xFC, 0x37, "LLR Deku Scrub Grotto Right", LLR_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cLonLonRanch, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x26, 0x06), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(0xFC, 0x33, "LLR Deku Scrub Grotto Center", LLR_DEKU_SCRUB_GROTTO_CENTER, BUY_DEKU_SEEDS_30, {Category::cLonLonRanch, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x26, 0x04), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_TALONS_CHICKENS] = ItemLocation::Base (RC_LLR_TALONS_CHICKENS, 0x4C, 0x14, "LLR Talons Chickens", LLR_TALONS_CHICKENS, BOTTLE_WITH_MILK, {Category::cLonLonRanch, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(10), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_FREESTANDING_POH] = ItemLocation::Collectable(RC_LLR_FREESTANDING_POH, 0x4C, 0x01, "LLR Freestanding PoH", LLR_FREESTANDING_POH, PIECE_OF_HEART, {Category::cLonLonRanch,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_DEKU_SCRUB_GROTTO_LEFT] = ItemLocation::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, 0xFC, 0x30, "LLR Deku Scrub Grotto Left", LLR_DEKU_SCRUB_GROTTO_LEFT, BUY_DEKU_NUT_5, {Category::cLonLonRanch, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x26, 0x01), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_DEKU_SCRUB_GROTTO_RIGHT] = ItemLocation::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, 0xFC, 0x37, "LLR Deku Scrub Grotto Right", LLR_DEKU_SCRUB_GROTTO_RIGHT, BUY_BOMBS_535, {Category::cLonLonRanch, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x26, 0x06), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_DEKU_SCRUB_GROTTO_CENTER] = ItemLocation::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, 0xFC, 0x33, "LLR Deku Scrub Grotto Center", LLR_DEKU_SCRUB_GROTTO_CENTER, BUY_DEKU_SEEDS_30, {Category::cLonLonRanch, Category::cDekuScrub, Category::cGrotto}, SpoilerCollectionCheck::Scrub(0x26, 0x04), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); /*------------------- --- DUNGEONS --- -------------------*/ //Deku Tree Vanilla - locationTable[DEKU_TREE_MAP_CHEST] = ItemLocation::Chest (0x00, 0x03, "Deku Tree Map Chest", DEKU_TREE_MAP_CHEST, DEKU_TREE_MAP, {Category::cDekuTree, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_COMPASS_CHEST] = ItemLocation::Chest (0x00, 0x02, "Deku Tree Compass Chest", DEKU_TREE_COMPASS_CHEST, DEKU_TREE_COMPASS, {Category::cDekuTree, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_COMPASS_ROOM_SIDE_CHEST] = ItemLocation::Chest (0x00, 0x06, "Deku Tree Compass Room Side Chest", DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_BASEMENT_CHEST] = ItemLocation::Chest (0x00, 0x04, "Deku Tree Basement Chest", DEKU_TREE_BASEMENT_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_SLINGSHOT_CHEST] = ItemLocation::Chest (0x00, 0x01, "Deku Tree Slingshot Chest", DEKU_TREE_SLINGSHOT_CHEST, PROGRESSIVE_SLINGSHOT, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST] = ItemLocation::Chest (0x00, 0x05, "Deku Tree Slingshot Room Side Chest", DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MAP_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MAP_CHEST, 0x00, 0x03, "Deku Tree Map Chest", DEKU_TREE_MAP_CHEST, DEKU_TREE_MAP, {Category::cDekuTree, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_COMPASS_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_COMPASS_CHEST, 0x00, 0x02, "Deku Tree Compass Chest", DEKU_TREE_COMPASS_CHEST, DEKU_TREE_COMPASS, {Category::cDekuTree, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_COMPASS_ROOM_SIDE_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, 0x00, 0x06, "Deku Tree Compass Room Side Chest", DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_BASEMENT_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_BASEMENT_CHEST, 0x00, 0x04, "Deku Tree Basement Chest", DEKU_TREE_BASEMENT_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_SLINGSHOT_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_SLINGSHOT_CHEST, 0x00, 0x01, "Deku Tree Slingshot Chest", DEKU_TREE_SLINGSHOT_CHEST, PROGRESSIVE_SLINGSHOT, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, 0x00, 0x05, "Deku Tree Slingshot Room Side Chest", DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); //Deku Tree MQ - locationTable[DEKU_TREE_MQ_MAP_CHEST] = ItemLocation::Chest (0x00, 0x03, "Deku Tree MQ Map Chest", DEKU_TREE_MQ_MAP_CHEST, DEKU_TREE_MAP, {Category::cDekuTree, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x00, 0x01, "Deku Tree MQ Compass Chest", DEKU_TREE_MQ_COMPASS_CHEST, DEKU_TREE_COMPASS, {Category::cDekuTree, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_SLINGSHOT_CHEST] = ItemLocation::Chest (0x00, 0x06, "Deku Tree MQ Slingshot Chest", DEKU_TREE_MQ_SLINGSHOT_CHEST, PROGRESSIVE_SLINGSHOT, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST] = ItemLocation::Chest (0x00, 0x02, "Deku Tree MQ Slingshot Room Back Chest", DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, DEKU_SHIELD, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_BASEMENT_CHEST] = ItemLocation::Chest (0x00, 0x04, "Deku Tree MQ Basement Chest", DEKU_TREE_MQ_BASEMENT_CHEST, DEKU_SHIELD, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST] = ItemLocation::Chest (0x00, 0x05, "Deku Tree MQ Before Spinning Log Chest", DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST] = ItemLocation::Chest (0x00, 0x00, "Deku Tree MQ After Spinning Log Chest", DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, PURPLE_RUPEE, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_DEKU_SCRUB] = ItemLocation::Base (0x00, 0x34, "Deku Tree MQ Deku Scrub", DEKU_TREE_MQ_DEKU_SCRUB, BUY_DEKU_SHIELD, {Category::cDekuTree, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x00, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_MAP_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_MAP_CHEST, 0x00, 0x03, "Deku Tree MQ Map Chest", DEKU_TREE_MQ_MAP_CHEST, DEKU_TREE_MAP, {Category::cDekuTree, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_COMPASS_CHEST, 0x00, 0x01, "Deku Tree MQ Compass Chest", DEKU_TREE_MQ_COMPASS_CHEST, DEKU_TREE_COMPASS, {Category::cDekuTree, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_SLINGSHOT_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, 0x00, 0x06, "Deku Tree MQ Slingshot Chest", DEKU_TREE_MQ_SLINGSHOT_CHEST, PROGRESSIVE_SLINGSHOT, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, 0x00, 0x02, "Deku Tree MQ Slingshot Room Back Chest", DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, DEKU_SHIELD, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_BASEMENT_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_BASEMENT_CHEST, 0x00, 0x04, "Deku Tree MQ Basement Chest", DEKU_TREE_MQ_BASEMENT_CHEST, DEKU_SHIELD, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, 0x00, 0x05, "Deku Tree MQ Before Spinning Log Chest", DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, RECOVERY_HEART, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST] = ItemLocation::Chest (RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, 0x00, 0x00, "Deku Tree MQ After Spinning Log Chest", DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, PURPLE_RUPEE, {Category::cDekuTree,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_DEKU_SCRUB] = ItemLocation::Base (RC_DEKU_TREE_MQ_DEKU_SCRUB, 0x00, 0x34, "Deku Tree MQ Deku Scrub", DEKU_TREE_MQ_DEKU_SCRUB, BUY_DEKU_SHIELD, {Category::cDekuTree, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x00, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); //Dodongos Cavern Shared - locationTable[DODONGOS_CAVERN_BOSS_ROOM_CHEST] = ItemLocation::Chest (0x12, 0x00, "Dodongos Cavern Boss Room Chest", DODONGOS_CAVERN_BOSS_ROOM_CHEST, BOMBS_5, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_BOSS_ROOM_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, 0x12, 0x00, "Dodongos Cavern Boss Room Chest", DODONGOS_CAVERN_BOSS_ROOM_CHEST, BOMBS_5, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); //Dodongos Cavern Vanilla - locationTable[DODONGOS_CAVERN_MAP_CHEST] = ItemLocation::Chest (0x01, 0x08, "Dodongos Cavern Map Chest", DODONGOS_CAVERN_MAP_CHEST, DODONGOS_CAVERN_MAP, {Category::cDodongosCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_COMPASS_CHEST] = ItemLocation::Chest (0x01, 0x05, "Dodongos Cavern Compass Chest", DODONGOS_CAVERN_COMPASS_CHEST, DODONGOS_CAVERN_COMPASS, {Category::cDodongosCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST] = ItemLocation::Chest (0x01, 0x06, "Dodongos Cavern Bomb Flower Platform Chest", DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, RED_RUPEE, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_BOMB_BAG_CHEST] = ItemLocation::Chest (0x01, 0x04, "Dodongos Cavern Bomb Bag Chest", DODONGOS_CAVERN_BOMB_BAG_CHEST, PROGRESSIVE_BOMB_BAG, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_END_OF_BRIDGE_CHEST] = ItemLocation::Chest (0x01, 0x0A, "Dodongos Cavern End Of Bridge Chest", DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, DEKU_SHIELD, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT] = ItemLocation::Base (0x01, 0x30, "Dodongos Cavern Deku Scrub Near Bomb Bag Left", DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, BUY_DEKU_NUT_5, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS] = ItemLocation::Base (0x01, 0x31, "Dodongos Cavern Deku Scrub Side Room Near Dodongos", DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, BUY_DEKU_STICK_1, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT] = ItemLocation::Base (0x01, 0x33, "Dodongos Cavern Deku Scrub Near Bomb Bag Right", DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, BUY_DEKU_SEEDS_30, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_DEKU_SCRUB_LOBBY] = ItemLocation::Base (0x01, 0x34, "Dodongos Cavern Deku Scrub Lobby", DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, BUY_DEKU_SHIELD, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MAP_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MAP_CHEST, 0x01, 0x08, "Dodongos Cavern Map Chest", DODONGOS_CAVERN_MAP_CHEST, DODONGOS_CAVERN_MAP, {Category::cDodongosCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_COMPASS_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_COMPASS_CHEST, 0x01, 0x05, "Dodongos Cavern Compass Chest", DODONGOS_CAVERN_COMPASS_CHEST, DODONGOS_CAVERN_COMPASS, {Category::cDodongosCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, 0x01, 0x06, "Dodongos Cavern Bomb Flower Platform Chest", DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, RED_RUPEE, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_BOMB_BAG_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, 0x01, 0x04, "Dodongos Cavern Bomb Bag Chest", DODONGOS_CAVERN_BOMB_BAG_CHEST, PROGRESSIVE_BOMB_BAG, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_END_OF_BRIDGE_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, 0x01, 0x0A, "Dodongos Cavern End Of Bridge Chest", DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, DEKU_SHIELD, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT] = ItemLocation::Base (RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, 0x01, 0x30, "Dodongos Cavern Deku Scrub Near Bomb Bag Left", DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, BUY_DEKU_NUT_5, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS] = ItemLocation::Base (RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, 0x01, 0x31, "Dodongos Cavern Deku Scrub Side Room Near Dodongos", DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, BUY_DEKU_STICK_1, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT] = ItemLocation::Base (RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, 0x01, 0x33, "Dodongos Cavern Deku Scrub Near Bomb Bag Right", DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, BUY_DEKU_SEEDS_30, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_DEKU_SCRUB_LOBBY] = ItemLocation::Base (RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, 0x01, 0x34, "Dodongos Cavern Deku Scrub Lobby", DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, BUY_DEKU_SHIELD, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); //Dodongos Cavern MQ - locationTable[DODONGOS_CAVERN_MQ_MAP_CHEST] = ItemLocation::Chest (0x01, 0x00, "Dodongos Cavern MQ Map Chest", DODONGOS_CAVERN_MQ_MAP_CHEST, DODONGOS_CAVERN_MAP, {Category::cDodongosCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST] = ItemLocation::Chest (0x01, 0x04, "Dodongos Cavern MQ Bomb Bag Chest", DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, PROGRESSIVE_BOMB_BAG, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x01, 0x05, "Dodongos Cavern MQ Compass Chest", DODONGOS_CAVERN_MQ_COMPASS_CHEST, DODONGOS_CAVERN_COMPASS, {Category::cDodongosCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST] = ItemLocation::Chest (0x01, 0x02, "Dodongos Cavern MQ Larvae Room Chest", DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, DEKU_SHIELD, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST] = ItemLocation::Chest (0x01, 0x03, "Dodongos Cavern MQ Torch Puzzle Room Chest", DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, BLUE_RUPEE, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST] = ItemLocation::Chest (0x01, 0x01, "Dodongos Cavern MQ Under Grave Chest", DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, HYLIAN_SHIELD, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR] = ItemLocation::Base (0x01, 0x31, "Dodongos Cavern Deku Scrub Lobby Rear", DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, BUY_DEKU_STICK_1, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT] = ItemLocation::Base (0x01, 0x33, "Dodongos Cavern Deku Scrub Lobby Front", DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, BUY_DEKU_SEEDS_30, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE] = ItemLocation::Base (0x01, 0x34, "Dodongos Cavern Deku Scrub Staircase", DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, BUY_DEKU_SHIELD, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS] = ItemLocation::Base (0x01, 0x39, "Dodongos Cavern Deku Scrub Side Room Near Lower Lizalfos",DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, BUY_RED_POTION_30, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_MAP_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MQ_MAP_CHEST, 0x01, 0x00, "Dodongos Cavern MQ Map Chest", DODONGOS_CAVERN_MQ_MAP_CHEST, DODONGOS_CAVERN_MAP, {Category::cDodongosCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, 0x01, 0x04, "Dodongos Cavern MQ Bomb Bag Chest", DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, PROGRESSIVE_BOMB_BAG, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, 0x01, 0x05, "Dodongos Cavern MQ Compass Chest", DODONGOS_CAVERN_MQ_COMPASS_CHEST, DODONGOS_CAVERN_COMPASS, {Category::cDodongosCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, 0x01, 0x02, "Dodongos Cavern MQ Larvae Room Chest", DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, DEKU_SHIELD, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, 0x01, 0x03, "Dodongos Cavern MQ Torch Puzzle Room Chest", DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, BLUE_RUPEE, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST] = ItemLocation::Chest (RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, 0x01, 0x01, "Dodongos Cavern MQ Under Grave Chest", DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, HYLIAN_SHIELD, {Category::cDodongosCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR] = ItemLocation::Base (RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, 0x01, 0x31, "Dodongos Cavern Deku Scrub Lobby Rear", DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, BUY_DEKU_STICK_1, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT] = ItemLocation::Base (RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, 0x01, 0x33, "Dodongos Cavern Deku Scrub Lobby Front", DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, BUY_DEKU_SEEDS_30, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE] = ItemLocation::Base (RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, 0x01, 0x34, "Dodongos Cavern Deku Scrub Staircase", DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, BUY_DEKU_SHIELD, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS] = ItemLocation::Base (RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, 0x01, 0x39, "Dodongos Cavern Deku Scrub Side Room Near Lower Lizalfos",DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, BUY_RED_POTION_30, {Category::cDodongosCavern, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x01, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); //Jabu Jabus Belly Vanilla - locationTable[JABU_JABUS_BELLY_MAP_CHEST] = ItemLocation::Chest (0x02, 0x02, "Jabu Jabus Belly Map Chest", JABU_JABUS_BELLY_MAP_CHEST, JABU_JABUS_BELLY_MAP, {Category::cJabuJabusBelly, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_COMPASS_CHEST] = ItemLocation::Chest (0x02, 0x04, "Jabu Jabus Belly Compass Chest", JABU_JABUS_BELLY_COMPASS_CHEST, JABU_JABUS_BELLY_COMPASS, {Category::cJabuJabusBelly, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_BOOMERANG_CHEST] = ItemLocation::Chest (0x02, 0x01, "Jabu Jabus Belly Boomerang Chest", JABU_JABUS_BELLY_BOOMERANG_CHEST, BOOMERANG, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_DEKU_SCRUB] = ItemLocation::Base (0x02, 0x30, "Jabu Jabus Belly Deku Scrub", JABU_JABUS_BELLY_DEKU_SCRUB, BUY_DEKU_NUT_5, {Category::cJabuJabusBelly, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x02, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MAP_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MAP_CHEST, 0x02, 0x02, "Jabu Jabus Belly Map Chest", JABU_JABUS_BELLY_MAP_CHEST, JABU_JABUS_BELLY_MAP, {Category::cJabuJabusBelly, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_COMPASS_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_COMPASS_CHEST, 0x02, 0x04, "Jabu Jabus Belly Compass Chest", JABU_JABUS_BELLY_COMPASS_CHEST, JABU_JABUS_BELLY_COMPASS, {Category::cJabuJabusBelly, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_BOOMERANG_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, 0x02, 0x01, "Jabu Jabus Belly Boomerang Chest", JABU_JABUS_BELLY_BOOMERANG_CHEST, BOOMERANG, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_DEKU_SCRUB] = ItemLocation::Base (RC_JABU_JABUS_BELLY_DEKU_SCRUB, 0x02, 0x30, "Jabu Jabus Belly Deku Scrub", JABU_JABUS_BELLY_DEKU_SCRUB, BUY_DEKU_NUT_5, {Category::cJabuJabusBelly, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x02, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); //Jabu Jabus Belly MQ - locationTable[JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST] = ItemLocation::Chest (0x02, 0x05, "Jabu Jabus Belly MQ First Room Side Chest", JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_MAP_CHEST] = ItemLocation::Chest (0x02, 0x03, "Jabu Jabus Belly MQ Map Chest", JABU_JABUS_BELLY_MQ_MAP_CHEST, JABU_JABUS_BELLY_MAP, {Category::cJabuJabusBelly, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST] = ItemLocation::Chest (0x02, 0x02, "Jabu Jabus Belly MQ Second Room Lower Chest", JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x02, 0x00, "Jabu Jabus Belly MQ Compass Chest", JABU_JABUS_BELLY_MQ_COMPASS_CHEST, JABU_JABUS_BELLY_COMPASS, {Category::cJabuJabusBelly, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST] = ItemLocation::Chest (0x02, 0x07, "Jabu Jabus Belly MQ Second Room Upper Chest", JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, RECOVERY_HEART, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST] = ItemLocation::Chest (0x02, 0x08, "Jabu Jabus Belly MQ Basement Near Switches Chest", JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST] = ItemLocation::Chest (0x02, 0x04, "Jabu Jabus Belly MQ Basement Near Vines Chest", JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, BOMBCHU_10, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST] = ItemLocation::Chest (0x02, 0x0A, "Jabu Jabus Belly MQ Near Boss Chest", JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, DEKU_SHIELD, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST] = ItemLocation::Chest (0x02, 0x09, "Jabu Jabus Belly MQ Falling Like Like Room Chest", JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, DEKU_STICK_1, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST] = ItemLocation::Chest (0x02, 0x01, "Jabu Jabus Belly MQ Boomerang Room Small Chest", JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST] = ItemLocation::Chest (0x02, 0x06, "Jabu Jabus Belly MQ Boomerang Chest", JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, BOOMERANG, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, 0x02, 0x05, "Jabu Jabus Belly MQ First Room Side Chest", JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_MAP_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, 0x02, 0x03, "Jabu Jabus Belly MQ Map Chest", JABU_JABUS_BELLY_MQ_MAP_CHEST, JABU_JABUS_BELLY_MAP, {Category::cJabuJabusBelly, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, 0x02, 0x02, "Jabu Jabus Belly MQ Second Room Lower Chest", JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_COMPASS_CHEST, 0x02, 0x00, "Jabu Jabus Belly MQ Compass Chest", JABU_JABUS_BELLY_MQ_COMPASS_CHEST, JABU_JABUS_BELLY_COMPASS, {Category::cJabuJabusBelly, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, 0x02, 0x07, "Jabu Jabus Belly MQ Second Room Upper Chest", JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, RECOVERY_HEART, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, 0x02, 0x08, "Jabu Jabus Belly MQ Basement Near Switches Chest", JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, 0x02, 0x04, "Jabu Jabus Belly MQ Basement Near Vines Chest", JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, BOMBCHU_10, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, 0x02, 0x0A, "Jabu Jabus Belly MQ Near Boss Chest", JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, DEKU_SHIELD, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, 0x02, 0x09, "Jabu Jabus Belly MQ Falling Like Like Room Chest", JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, DEKU_STICK_1, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, 0x02, 0x01, "Jabu Jabus Belly MQ Boomerang Room Small Chest", JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, DEKU_NUTS_5, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST] = ItemLocation::Chest (RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, 0x02, 0x06, "Jabu Jabus Belly MQ Boomerang Chest", JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, BOOMERANG, {Category::cJabuJabusBelly,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); //COW //Forest Temple Vanilla - locationTable[FOREST_TEMPLE_FIRST_ROOM_CHEST] = ItemLocation::Chest (0x03, 0x03, "Forest Temple First Room Chest", FOREST_TEMPLE_FIRST_ROOM_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_FIRST_STALFOS_CHEST] = ItemLocation::Chest (0x03, 0x00, "Forest Temple First Stalfos Chest", FOREST_TEMPLE_FIRST_STALFOS_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST] = ItemLocation::Chest (0x03, 0x05, "Forest Temple Raised Island Courtyard Chest", FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST, RECOVERY_HEART, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x03, 0x01, "Forest Temple Map Chest", FOREST_TEMPLE_MAP_CHEST, FOREST_TEMPLE_MAP, {Category::cForestTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_WELL_CHEST] = ItemLocation::Chest (0x03, 0x09, "Forest Temple Well Chest", FOREST_TEMPLE_WELL_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST] = ItemLocation::Chest (0x03, 0x07, "Forest Temple Falling Ceiling Room Chest", FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, ARROWS_10, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_EYE_SWITCH_CHEST] = ItemLocation::Chest (0x03, 0x04, "Forest Temple Eye Switch Chest", FOREST_TEMPLE_EYE_SWITCH_CHEST, ARROWS_30, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x03, 0x0E, "Forest Temple Boss Key Chest", FOREST_TEMPLE_BOSS_KEY_CHEST, FOREST_TEMPLE_BOSS_KEY, {Category::cForestTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_FLOORMASTER_CHEST] = ItemLocation::Chest (0x03, 0x02, "Forest Temple Floormaster Chest", FOREST_TEMPLE_FLOORMASTER_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_BOW_CHEST] = ItemLocation::Chest (0x03, 0x0C, "Forest Temple Bow Chest", FOREST_TEMPLE_BOW_CHEST, PROGRESSIVE_BOW, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_RED_POE_CHEST] = ItemLocation::Chest (0x03, 0x0D, "Forest Temple Red Poe Chest", FOREST_TEMPLE_RED_POE_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_BLUE_POE_CHEST] = ItemLocation::Chest (0x03, 0x0F, "Forest Temple Blue Poe Chest", FOREST_TEMPLE_BLUE_POE_CHEST, FOREST_TEMPLE_COMPASS, {Category::cForestTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_BASEMENT_CHEST] = ItemLocation::Chest (0x03, 0x0B, "Forest Temple Basement Chest", FOREST_TEMPLE_BASEMENT_CHEST, ARROWS_5, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_FIRST_ROOM_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, 0x03, 0x03, "Forest Temple First Room Chest", FOREST_TEMPLE_FIRST_ROOM_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_FIRST_STALFOS_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, 0x03, 0x00, "Forest Temple First Stalfos Chest", FOREST_TEMPLE_FIRST_STALFOS_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST, 0x03, 0x05, "Forest Temple Raised Island Courtyard Chest", FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST, RECOVERY_HEART, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MAP_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MAP_CHEST, 0x03, 0x01, "Forest Temple Map Chest", FOREST_TEMPLE_MAP_CHEST, FOREST_TEMPLE_MAP, {Category::cForestTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_WELL_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_WELL_CHEST, 0x03, 0x09, "Forest Temple Well Chest", FOREST_TEMPLE_WELL_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, 0x03, 0x07, "Forest Temple Falling Ceiling Room Chest", FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, ARROWS_10, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_EYE_SWITCH_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, 0x03, 0x04, "Forest Temple Eye Switch Chest", FOREST_TEMPLE_EYE_SWITCH_CHEST, ARROWS_30, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_BOSS_KEY_CHEST, 0x03, 0x0E, "Forest Temple Boss Key Chest", FOREST_TEMPLE_BOSS_KEY_CHEST, FOREST_TEMPLE_BOSS_KEY, {Category::cForestTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_FLOORMASTER_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_FLOORMASTER_CHEST, 0x03, 0x02, "Forest Temple Floormaster Chest", FOREST_TEMPLE_FLOORMASTER_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_BOW_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_BOW_CHEST, 0x03, 0x0C, "Forest Temple Bow Chest", FOREST_TEMPLE_BOW_CHEST, PROGRESSIVE_BOW, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_RED_POE_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_RED_POE_CHEST, 0x03, 0x0D, "Forest Temple Red Poe Chest", FOREST_TEMPLE_RED_POE_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_BLUE_POE_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_BLUE_POE_CHEST, 0x03, 0x0F, "Forest Temple Blue Poe Chest", FOREST_TEMPLE_BLUE_POE_CHEST, FOREST_TEMPLE_COMPASS, {Category::cForestTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_BASEMENT_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_BASEMENT_CHEST, 0x03, 0x0B, "Forest Temple Basement Chest", FOREST_TEMPLE_BASEMENT_CHEST, ARROWS_5, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); //Forest Temple MQ - locationTable[FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST] = ItemLocation::Chest (0x03, 0x03, "Forest Temple MQ First Room Chest", FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_WOLFOS_CHEST] = ItemLocation::Chest (0x03, 0x00, "Forest Temple MQ Wolfos Chest", FOREST_TEMPLE_MQ_WOLFOS_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_BOW_CHEST] = ItemLocation::Chest (0x03, 0x0C, "Forest Temple MQ Bow Chest", FOREST_TEMPLE_MQ_BOW_CHEST, PROGRESSIVE_BOW, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST] = ItemLocation::Chest (0x03, 0x01, "Forest Temple MQ Raised Island Courtyard Lower Chest", FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST] = ItemLocation::Chest (0x03, 0x05, "Forest Temple MQ Raised Island Courtyard Upper Chest", FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_WELL_CHEST] = ItemLocation::Chest (0x03, 0x09, "Forest Temple MQ Well Chest", FOREST_TEMPLE_MQ_WELL_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (0x03, 0x0D, "Forest Temple MQ Map Chest", FOREST_TEMPLE_MQ_MAP_CHEST, FOREST_TEMPLE_MAP, {Category::cForestTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x03, 0x0F, "Forest Temple MQ Compass Chest", FOREST_TEMPLE_MQ_COMPASS_CHEST, FOREST_TEMPLE_COMPASS, {Category::cForestTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST] = ItemLocation::Chest (0x03, 0x06, "Forest Temple MQ Falling Ceiling Room Chest", FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, ARROWS_5, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_BASEMENT_CHEST] = ItemLocation::Chest (0x03, 0x0B, "Forest Temple MQ Basement Chest", FOREST_TEMPLE_MQ_BASEMENT_CHEST, ARROWS_5, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_REDEAD_CHEST] = ItemLocation::Chest (0x03, 0x02, "Forest Temple MQ Redead Chest", FOREST_TEMPLE_MQ_REDEAD_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (0x03, 0x0E, "Forest Temple MQ Boss Key Chest", FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, FOREST_TEMPLE_BOSS_KEY, {Category::cForestTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, 0x03, 0x03, "Forest Temple MQ First Room Chest", FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_WOLFOS_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST, 0x03, 0x00, "Forest Temple MQ Wolfos Chest", FOREST_TEMPLE_MQ_WOLFOS_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_BOW_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_BOW_CHEST, 0x03, 0x0C, "Forest Temple MQ Bow Chest", FOREST_TEMPLE_MQ_BOW_CHEST, PROGRESSIVE_BOW, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, 0x03, 0x01, "Forest Temple MQ Raised Island Courtyard Lower Chest", FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, 0x03, 0x05, "Forest Temple MQ Raised Island Courtyard Upper Chest", FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_WELL_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_WELL_CHEST, 0x03, 0x09, "Forest Temple MQ Well Chest", FOREST_TEMPLE_MQ_WELL_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_MAP_CHEST, 0x03, 0x0D, "Forest Temple MQ Map Chest", FOREST_TEMPLE_MQ_MAP_CHEST, FOREST_TEMPLE_MAP, {Category::cForestTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_COMPASS_CHEST, 0x03, 0x0F, "Forest Temple MQ Compass Chest", FOREST_TEMPLE_MQ_COMPASS_CHEST, FOREST_TEMPLE_COMPASS, {Category::cForestTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, 0x03, 0x06, "Forest Temple MQ Falling Ceiling Room Chest", FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, ARROWS_5, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_BASEMENT_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, 0x03, 0x0B, "Forest Temple MQ Basement Chest", FOREST_TEMPLE_MQ_BASEMENT_CHEST, ARROWS_5, {Category::cForestTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_REDEAD_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, 0x03, 0x02, "Forest Temple MQ Redead Chest", FOREST_TEMPLE_MQ_REDEAD_CHEST, FOREST_TEMPLE_SMALL_KEY, {Category::cForestTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, 0x03, 0x0E, "Forest Temple MQ Boss Key Chest", FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, FOREST_TEMPLE_BOSS_KEY, {Category::cForestTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); //Fire Temple Vanilla - locationTable[FIRE_TEMPLE_NEAR_BOSS_CHEST] = ItemLocation::Chest (0x04, 0x01, "Fire Temple Near Boss Chest", FIRE_TEMPLE_NEAR_BOSS_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_FLARE_DANCER_CHEST] = ItemLocation::Chest (0x04, 0x00, "Fire Temple Flare Dancer Chest", FIRE_TEMPLE_FLARE_DANCER_CHEST, BOMBS_10, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x04, 0x0C, "Fire Temple Boss Key Chest", FIRE_TEMPLE_BOSS_KEY_CHEST, FIRE_TEMPLE_BOSS_KEY, {Category::cFireTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST] = ItemLocation::Chest (0x04, 0x02, "Fire Temple Big Lava Room Blocked Door Chest", FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST] = ItemLocation::Chest (0x04, 0x04, "Fire Temple Big Lava Room Lower Open Door Chest", FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST] = ItemLocation::Chest (0x04, 0x03, "Fire Temple Boulder Maze Lower Chest", FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST] = ItemLocation::Chest (0x04, 0x06, "Fire Temple Boulder Maze Upper Chest", FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST] = ItemLocation::Chest (0x04, 0x08, "Fire Temple Boulder Maze Side Room Chest", FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST] = ItemLocation::Chest (0x04, 0x0B, "Fire Temple Boulder Maze Shortcut Chest", FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_SCARECROW_CHEST] = ItemLocation::Chest (0x04, 0x0D, "Fire Temple Scarecrow Chest", FIRE_TEMPLE_SCARECROW_CHEST, HUGE_RUPEE, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x04, 0x0A, "Fire Temple Map Chest", FIRE_TEMPLE_MAP_CHEST, FIRE_TEMPLE_MAP, {Category::cFireTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (0x04, 0x07, "Fire Temple Compass Chest", FIRE_TEMPLE_COMPASS_CHEST, FIRE_TEMPLE_COMPASS, {Category::cFireTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_HIGHEST_GORON_CHEST] = ItemLocation::Chest (0x04, 0x09, "Fire Temple Highest Goron Chest", FIRE_TEMPLE_HIGHEST_GORON_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MEGATON_HAMMER_CHEST] = ItemLocation::Chest (0x04, 0x05, "Fire Temple Megaton Hammer Chest", FIRE_TEMPLE_MEGATON_HAMMER_CHEST, MEGATON_HAMMER, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_NEAR_BOSS_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_NEAR_BOSS_CHEST, 0x04, 0x01, "Fire Temple Near Boss Chest", FIRE_TEMPLE_NEAR_BOSS_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_FLARE_DANCER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, 0x04, 0x00, "Fire Temple Flare Dancer Chest", FIRE_TEMPLE_FLARE_DANCER_CHEST, BOMBS_10, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BOSS_KEY_CHEST, 0x04, 0x0C, "Fire Temple Boss Key Chest", FIRE_TEMPLE_BOSS_KEY_CHEST, FIRE_TEMPLE_BOSS_KEY, {Category::cFireTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, 0x04, 0x02, "Fire Temple Big Lava Room Blocked Door Chest", FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, 0x04, 0x04, "Fire Temple Big Lava Room Lower Open Door Chest", FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, 0x04, 0x03, "Fire Temple Boulder Maze Lower Chest", FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, 0x04, 0x06, "Fire Temple Boulder Maze Upper Chest", FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, 0x04, 0x08, "Fire Temple Boulder Maze Side Room Chest", FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, 0x04, 0x0B, "Fire Temple Boulder Maze Shortcut Chest", FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_SCARECROW_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_SCARECROW_CHEST, 0x04, 0x0D, "Fire Temple Scarecrow Chest", FIRE_TEMPLE_SCARECROW_CHEST, HUGE_RUPEE, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MAP_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MAP_CHEST, 0x04, 0x0A, "Fire Temple Map Chest", FIRE_TEMPLE_MAP_CHEST, FIRE_TEMPLE_MAP, {Category::cFireTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_COMPASS_CHEST, 0x04, 0x07, "Fire Temple Compass Chest", FIRE_TEMPLE_COMPASS_CHEST, FIRE_TEMPLE_COMPASS, {Category::cFireTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_HIGHEST_GORON_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, 0x04, 0x09, "Fire Temple Highest Goron Chest", FIRE_TEMPLE_HIGHEST_GORON_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MEGATON_HAMMER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, 0x04, 0x05, "Fire Temple Megaton Hammer Chest", FIRE_TEMPLE_MEGATON_HAMMER_CHEST, MEGATON_HAMMER, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); //Fire Temple MQ - locationTable[FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST] = ItemLocation::Chest (0x04, 0x07, "Fire Temple MQ Near Boss Chest", FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST] = ItemLocation::Chest (0x04, 0x00, "Fire Temple MQ Megaton Hammer Chest", FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, MEGATON_HAMMER, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x04, 0x0B, "Fire Temple MQ Compass Chest", FIRE_TEMPLE_MQ_COMPASS_CHEST, FIRE_TEMPLE_COMPASS, {Category::cFireTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST] = ItemLocation::Chest (0x04, 0x03, "Fire Temple MQ Lizalfos Maze Lower Chest", FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, BOMBS_10, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST] = ItemLocation::Chest (0x04, 0x06, "Fire Temple MQ Lizalfos Maze Upper Chest", FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, BOMBS_10, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_CHEST_ON_FIRE] = ItemLocation::Chest (0x04, 0x05, "Fire Temple MQ Chest on Fire", FIRE_TEMPLE_MQ_CHEST_ON_FIRE, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST] = ItemLocation::Chest (0x04, 0x02, "Fire Temple MQ Map Room Side Chest", FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, HYLIAN_SHIELD, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (0x04, 0x0C, "Fire Temple MQ Map Chest", FIRE_TEMPLE_MQ_MAP_CHEST, FIRE_TEMPLE_MAP, {Category::cFireTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (0x04, 0x04, "Fire Temple MQ Boss Key Chest", FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, FIRE_TEMPLE_BOSS_KEY, {Category::cFireTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST] = ItemLocation::Chest (0x04, 0x01, "Fire Temple MQ Big Lava Room Blocked Door Chest", FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST] = ItemLocation::Chest (0x04, 0x08, "Fire Temple MQ Lizalfos Maze Side Room Chest", FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_FREESTANDING_KEY] = ItemLocation::Collectable(0x04, 0x1C, "Fire Temple MQ Freestanding Key", FIRE_TEMPLE_MQ_FREESTANDING_KEY, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, 0x04, 0x07, "Fire Temple MQ Near Boss Chest", FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, 0x04, 0x00, "Fire Temple MQ Megaton Hammer Chest", FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, MEGATON_HAMMER, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, 0x04, 0x0B, "Fire Temple MQ Compass Chest", FIRE_TEMPLE_MQ_COMPASS_CHEST, FIRE_TEMPLE_COMPASS, {Category::cFireTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, 0x04, 0x03, "Fire Temple MQ Lizalfos Maze Lower Chest", FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, BOMBS_10, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, 0x04, 0x06, "Fire Temple MQ Lizalfos Maze Upper Chest", FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, BOMBS_10, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_CHEST_ON_FIRE] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE, 0x04, 0x05, "Fire Temple MQ Chest on Fire", FIRE_TEMPLE_MQ_CHEST_ON_FIRE, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, 0x04, 0x02, "Fire Temple MQ Map Room Side Chest", FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, HYLIAN_SHIELD, {Category::cFireTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_MAP_CHEST, 0x04, 0x0C, "Fire Temple MQ Map Chest", FIRE_TEMPLE_MQ_MAP_CHEST, FIRE_TEMPLE_MAP, {Category::cFireTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, 0x04, 0x04, "Fire Temple MQ Boss Key Chest", FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, FIRE_TEMPLE_BOSS_KEY, {Category::cFireTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, 0x04, 0x01, "Fire Temple MQ Big Lava Room Blocked Door Chest", FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST] = ItemLocation::Chest (RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, 0x04, 0x08, "Fire Temple MQ Lizalfos Maze Side Room Chest", FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_FREESTANDING_KEY] = ItemLocation::Collectable(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, 0x04, 0x1C, "Fire Temple MQ Freestanding Key", FIRE_TEMPLE_MQ_FREESTANDING_KEY, FIRE_TEMPLE_SMALL_KEY, {Category::cFireTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); //Water Temple Vanilla - locationTable[WATER_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x05, 0x02, "Water Temple Map Chest", WATER_TEMPLE_MAP_CHEST, WATER_TEMPLE_MAP, {Category::cWaterTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (0x05, 0x09, "Water Temple Compass Chest", WATER_TEMPLE_COMPASS_CHEST, WATER_TEMPLE_COMPASS, {Category::cWaterTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_TORCHES_CHEST] = ItemLocation::Chest (0x05, 0x01, "Water Temple Torches Chest", WATER_TEMPLE_TORCHES_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_DRAGON_CHEST] = ItemLocation::Chest (0x05, 0x0A, "Water Temple Dragon Chest", WATER_TEMPLE_DRAGON_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST] = ItemLocation::Chest (0x05, 0x08, "Water Temple Central Bow Target Chest", WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_CENTRAL_PILLAR_CHEST] = ItemLocation::Chest (0x05, 0x06, "Water Temple Central Pillar Chest", WATER_TEMPLE_CENTRAL_PILLAR_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_CRACKED_WALL_CHEST] = ItemLocation::Chest (0x05, 0x00, "Water Temple Cracked Wall Chest", WATER_TEMPLE_CRACKED_WALL_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x05, 0x05, "Water Temple Boss Key Chest", WATER_TEMPLE_BOSS_KEY_CHEST, WATER_TEMPLE_BOSS_KEY, {Category::cWaterTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_LONGSHOT_CHEST] = ItemLocation::Chest (0x05, 0x07, "Water Temple Longshot Chest", WATER_TEMPLE_LONGSHOT_CHEST, PROGRESSIVE_HOOKSHOT, {Category::cWaterTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_RIVER_CHEST] = ItemLocation::Chest (0x05, 0x03, "Water Temple River Chest", WATER_TEMPLE_RIVER_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MAP_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_MAP_CHEST, 0x05, 0x02, "Water Temple Map Chest", WATER_TEMPLE_MAP_CHEST, WATER_TEMPLE_MAP, {Category::cWaterTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_COMPASS_CHEST, 0x05, 0x09, "Water Temple Compass Chest", WATER_TEMPLE_COMPASS_CHEST, WATER_TEMPLE_COMPASS, {Category::cWaterTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_TORCHES_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_TORCHES_CHEST, 0x05, 0x01, "Water Temple Torches Chest", WATER_TEMPLE_TORCHES_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_DRAGON_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_DRAGON_CHEST, 0x05, 0x0A, "Water Temple Dragon Chest", WATER_TEMPLE_DRAGON_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, 0x05, 0x08, "Water Temple Central Bow Target Chest", WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_CENTRAL_PILLAR_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, 0x05, 0x06, "Water Temple Central Pillar Chest", WATER_TEMPLE_CENTRAL_PILLAR_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_CRACKED_WALL_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_CRACKED_WALL_CHEST, 0x05, 0x00, "Water Temple Cracked Wall Chest", WATER_TEMPLE_CRACKED_WALL_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_BOSS_KEY_CHEST, 0x05, 0x05, "Water Temple Boss Key Chest", WATER_TEMPLE_BOSS_KEY_CHEST, WATER_TEMPLE_BOSS_KEY, {Category::cWaterTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_LONGSHOT_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_LONGSHOT_CHEST, 0x05, 0x07, "Water Temple Longshot Chest", WATER_TEMPLE_LONGSHOT_CHEST, PROGRESSIVE_HOOKSHOT, {Category::cWaterTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_RIVER_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_RIVER_CHEST, 0x05, 0x03, "Water Temple River Chest", WATER_TEMPLE_RIVER_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); //Water Temple MQ - locationTable[WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST] = ItemLocation::Chest (0x05, 0x06, "Water Temple MQ Central Pillar Chest", WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (0x05, 0x05, "Water Temple MQ Boss Key Chest", WATER_TEMPLE_MQ_BOSS_KEY_CHEST, WATER_TEMPLE_BOSS_KEY, {Category::cWaterTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_LONGSHOT_CHEST] = ItemLocation::Chest (0x05, 0x00, "Water Temple MQ Longshot Chest", WATER_TEMPLE_MQ_LONGSHOT_CHEST, PROGRESSIVE_HOOKSHOT, {Category::cWaterTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x05, 0x01, "Water Temple MQ Compass Chest", WATER_TEMPLE_MQ_COMPASS_CHEST, WATER_TEMPLE_COMPASS, {Category::cWaterTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (0x05, 0x02, "Water Temple MQ Map Chest", WATER_TEMPLE_MQ_MAP_CHEST, WATER_TEMPLE_MAP, {Category::cWaterTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_FREESTANDING_KEY] = ItemLocation::Collectable(0x05, 0x01, "Water Temple MQ Freestanding Key", WATER_TEMPLE_MQ_FREESTANDING_KEY, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, 0x05, 0x06, "Water Temple MQ Central Pillar Chest", WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST, 0x05, 0x05, "Water Temple MQ Boss Key Chest", WATER_TEMPLE_MQ_BOSS_KEY_CHEST, WATER_TEMPLE_BOSS_KEY, {Category::cWaterTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_LONGSHOT_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, 0x05, 0x00, "Water Temple MQ Longshot Chest", WATER_TEMPLE_MQ_LONGSHOT_CHEST, PROGRESSIVE_HOOKSHOT, {Category::cWaterTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_MQ_COMPASS_CHEST, 0x05, 0x01, "Water Temple MQ Compass Chest", WATER_TEMPLE_MQ_COMPASS_CHEST, WATER_TEMPLE_COMPASS, {Category::cWaterTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (RC_WATER_TEMPLE_MQ_MAP_CHEST, 0x05, 0x02, "Water Temple MQ Map Chest", WATER_TEMPLE_MQ_MAP_CHEST, WATER_TEMPLE_MAP, {Category::cWaterTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_FREESTANDING_KEY] = ItemLocation::Collectable(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, 0x05, 0x01, "Water Temple MQ Freestanding Key", WATER_TEMPLE_MQ_FREESTANDING_KEY, WATER_TEMPLE_SMALL_KEY, {Category::cWaterTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); //Spirit Temple Shared - locationTable[SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST] = ItemLocation::Chest (0x5C, 0x0B, "Spirit Temple Silver Gauntlets Chest", SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, PROGRESSIVE_STRENGTH, {Category::cSpiritTemple, Category::cDesertColossus}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST] = ItemLocation::Chest (0x5C, 0x09, "Spirit Temple Mirror Shield Chest", SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, MIRROR_SHIELD, {Category::cSpiritTemple, Category::cDesertColossus}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, 0x5C, 0x0B, "Spirit Temple Silver Gauntlets Chest", SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, PROGRESSIVE_STRENGTH, {Category::cSpiritTemple, Category::cDesertColossus}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, 0x5C, 0x09, "Spirit Temple Mirror Shield Chest", SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, MIRROR_SHIELD, {Category::cSpiritTemple, Category::cDesertColossus}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); //Spirit Temple Vanilla - locationTable[SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST] = ItemLocation::Chest (0x06, 0x08, "Spirit Temple Child Bridge Chest", SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, DEKU_SHIELD, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST] = ItemLocation::Chest (0x06, 0x00, "Spirit Temple Child Early Torches Chest", SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (0x06, 0x04, "Spirit Temple Compass Chest", SPIRIT_TEMPLE_COMPASS_CHEST, SPIRIT_TEMPLE_COMPASS, {Category::cSpiritTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST] = ItemLocation::Chest (0x06, 0x07, "Spirit Temple Early Adult Right Chest", SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST] = ItemLocation::Chest (0x06, 0x0D, "Spirit Temple First Mirror Left Chest", SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, ICE_TRAP, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST] = ItemLocation::Chest (0x06, 0x0E, "Spirit Temple First Mirror Right Chest", SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x06, 0x03, "Spirit Temple Map Chest", SPIRIT_TEMPLE_MAP_CHEST, SPIRIT_TEMPLE_MAP, {Category::cSpiritTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST] = ItemLocation::Chest (0x06, 0x06, "Spirit Temple Child Climb North Chest", SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST] = ItemLocation::Chest (0x06, 0x0C, "Spirit Temple Child Climb East Chest", SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, DEKU_SHIELD, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST] = ItemLocation::Chest (0x06, 0x01, "Spirit Temple Sun Block Room Chest", SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST] = ItemLocation::Chest (0x06, 0x02, "Spirit Temple Statue Room Hand Chest", SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST] = ItemLocation::Chest (0x06, 0x0F, "Spirit Temple Statue Room Northeast Chest", SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, BLUE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST] = ItemLocation::Chest (0x06, 0x05, "Spirit Temple Near Four Armos Chest", SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST] = ItemLocation::Chest (0x06, 0x14, "Spirit Temple Hallway Right Invisible Chest", SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST] = ItemLocation::Chest (0x06, 0x15, "Spirit Temple Hallway Left Invisible Chest", SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x06, 0x0A, "Spirit Temple Boss Key Chest", SPIRIT_TEMPLE_BOSS_KEY_CHEST, SPIRIT_TEMPLE_BOSS_KEY, {Category::cSpiritTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_TOPMOST_CHEST] = ItemLocation::Chest (0x06, 0x12, "Spirit Temple Topmost Chest", SPIRIT_TEMPLE_TOPMOST_CHEST, BOMBS_20, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, 0x06, 0x08, "Spirit Temple Child Bridge Chest", SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, DEKU_SHIELD, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, 0x06, 0x00, "Spirit Temple Child Early Torches Chest", SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_COMPASS_CHEST, 0x06, 0x04, "Spirit Temple Compass Chest", SPIRIT_TEMPLE_COMPASS_CHEST, SPIRIT_TEMPLE_COMPASS, {Category::cSpiritTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, 0x06, 0x07, "Spirit Temple Early Adult Right Chest", SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, 0x06, 0x0D, "Spirit Temple First Mirror Left Chest", SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, ICE_TRAP, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, 0x06, 0x0E, "Spirit Temple First Mirror Right Chest", SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MAP_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MAP_CHEST, 0x06, 0x03, "Spirit Temple Map Chest", SPIRIT_TEMPLE_MAP_CHEST, SPIRIT_TEMPLE_MAP, {Category::cSpiritTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, 0x06, 0x06, "Spirit Temple Child Climb North Chest", SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, 0x06, 0x0C, "Spirit Temple Child Climb East Chest", SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, DEKU_SHIELD, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, 0x06, 0x01, "Spirit Temple Sun Block Room Chest", SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, 0x06, 0x02, "Spirit Temple Statue Room Hand Chest", SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, 0x06, 0x0F, "Spirit Temple Statue Room Northeast Chest", SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, BLUE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, 0x06, 0x05, "Spirit Temple Near Four Armos Chest", SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, 0x06, 0x14, "Spirit Temple Hallway Right Invisible Chest", SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, 0x06, 0x15, "Spirit Temple Hallway Left Invisible Chest", SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, 0x06, 0x0A, "Spirit Temple Boss Key Chest", SPIRIT_TEMPLE_BOSS_KEY_CHEST, SPIRIT_TEMPLE_BOSS_KEY, {Category::cSpiritTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_TOPMOST_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_TOPMOST_CHEST, 0x06, 0x12, "Spirit Temple Topmost Chest", SPIRIT_TEMPLE_TOPMOST_CHEST, BOMBS_20, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); //Spirit Temple MQ - locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST] = ItemLocation::Chest (0x06, 0x1A, "Spirit Temple MQ Entrance Front Left Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST] = ItemLocation::Chest (0x06, 0x1F, "Spirit Temple MQ Entrance Back Right Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST] = ItemLocation::Chest (0x06, 0x1B, "Spirit Temple MQ Entrance Front Right Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST] = ItemLocation::Chest (0x06, 0x1E, "Spirit Temple MQ Entrance Back Left Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST] = ItemLocation::Chest (0x06, 0x1D, "Spirit Temple MQ Child Hammer Switch Chest", SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (0x06, 0x00, "Spirit Temple MQ Map Chest", SPIRIT_TEMPLE_MQ_MAP_CHEST, SPIRIT_TEMPLE_MAP, {Category::cSpiritTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST] = ItemLocation::Chest (0x06, 0x08, "Spirit Temple MQ Map Room Enemy Chest", SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST] = ItemLocation::Chest (0x06, 0x06, "Spirit Temple MQ Child Climb North Chest", SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST] = ItemLocation::Chest (0x06, 0x0C, "Spirit Temple MQ Child Climb South Chest", SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x06, 0x03, "Spirit Temple MQ Compass Chest", SPIRIT_TEMPLE_MQ_COMPASS_CHEST, SPIRIT_TEMPLE_COMPASS, {Category::cSpiritTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST] = ItemLocation::Chest (0x06, 0x0F, "Spirit Temple MQ Statue Room Lullaby Chest", SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, BLUE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST] = ItemLocation::Chest (0x06, 0x02, "Spirit Temple MQ Statue Room Invisible Chest", SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST] = ItemLocation::Chest (0x06, 0x1C, "Spirit Temple MQ Silver Block Hallway Chest", SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST] = ItemLocation::Chest (0x06, 0x01, "Spirit Temple MQ Sun Block Room Chest", SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST] = ItemLocation::Chest (0x06, 0x07, "Spirit Temple MQ Symphony Room Chest", SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, PURPLE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST] = ItemLocation::Chest (0x06, 0x04, "Spirit Temple MQ Leever Room Chest", SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, PURPLE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST] = ItemLocation::Chest (0x06, 0x19, "Spirit Temple MQ Beamos Room Chest", SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST] = ItemLocation::Chest (0x06, 0x18, "Spirit Temple MQ Chest Switch Chest", SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, ICE_TRAP, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (0x06, 0x05, "Spirit Temple MQ Boss Key Chest", SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, SPIRIT_TEMPLE_BOSS_KEY, {Category::cSpiritTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST] = ItemLocation::Chest (0x06, 0x12, "Spirit Temple MQ Mirror Puzzle Invisible Chest", SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, 0x06, 0x1A, "Spirit Temple MQ Entrance Front Left Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, 0x06, 0x1F, "Spirit Temple MQ Entrance Back Right Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST, 0x06, 0x1B, "Spirit Temple MQ Entrance Front Right Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, 0x06, 0x1E, "Spirit Temple MQ Entrance Back Left Chest", SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, 0x06, 0x1D, "Spirit Temple MQ Child Hammer Switch Chest", SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_MAP_CHEST, 0x06, 0x00, "Spirit Temple MQ Map Chest", SPIRIT_TEMPLE_MQ_MAP_CHEST, SPIRIT_TEMPLE_MAP, {Category::cSpiritTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST, 0x06, 0x08, "Spirit Temple MQ Map Room Enemy Chest", SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, 0x06, 0x06, "Spirit Temple MQ Child Climb North Chest", SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, BOMBCHU_10, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, 0x06, 0x0C, "Spirit Temple MQ Child Climb South Chest", SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST, 0x06, 0x03, "Spirit Temple MQ Compass Chest", SPIRIT_TEMPLE_MQ_COMPASS_CHEST, SPIRIT_TEMPLE_COMPASS, {Category::cSpiritTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, 0x06, 0x0F, "Spirit Temple MQ Statue Room Lullaby Chest", SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, BLUE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, 0x06, 0x02, "Spirit Temple MQ Statue Room Invisible Chest", SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, 0x06, 0x1C, "Spirit Temple MQ Silver Block Hallway Chest", SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, 0x06, 0x01, "Spirit Temple MQ Sun Block Room Chest", SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, 0x06, 0x07, "Spirit Temple MQ Symphony Room Chest", SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, PURPLE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, 0x06, 0x04, "Spirit Temple MQ Leever Room Chest", SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, PURPLE_RUPEE, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, 0x06, 0x19, "Spirit Temple MQ Beamos Room Chest", SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, RECOVERY_HEART, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, 0x06, 0x18, "Spirit Temple MQ Chest Switch Chest", SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, ICE_TRAP, {Category::cSpiritTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, 0x06, 0x05, "Spirit Temple MQ Boss Key Chest", SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, SPIRIT_TEMPLE_BOSS_KEY, {Category::cSpiritTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, 0x06, 0x12, "Spirit Temple MQ Mirror Puzzle Invisible Chest", SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, SPIRIT_TEMPLE_SMALL_KEY, {Category::cSpiritTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); //Shadow Temple Vanilla - locationTable[SHADOW_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x07, 0x01, "Shadow Temple Map Chest", SHADOW_TEMPLE_MAP_CHEST, SHADOW_TEMPLE_MAP, {Category::cShadowTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_HOVER_BOOTS_CHEST] = ItemLocation::Chest (0x07, 0x07, "Shadow Temple Hover Boots Chest", SHADOW_TEMPLE_HOVER_BOOTS_CHEST, HOVER_BOOTS, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (0x07, 0x03, "Shadow Temple Compass Chest", SHADOW_TEMPLE_COMPASS_CHEST, SHADOW_TEMPLE_COMPASS, {Category::cShadowTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST] = ItemLocation::Chest (0x07, 0x02, "Shadow Temple Early Silver Rupee Chest", SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST] = ItemLocation::Chest (0x07, 0x0C, "Shadow Temple Invisible Blades Visible Chest", SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST] = ItemLocation::Chest (0x07, 0x16, "Shadow Temple Invisible Blades Invisible Chest", SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, ARROWS_30, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST] = ItemLocation::Chest (0x07, 0x05, "Shadow Temple Falling Spikes Lower Chest", SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST] = ItemLocation::Chest (0x07, 0x06, "Shadow Temple Falling Spikes Upper Chest", SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST] = ItemLocation::Chest (0x07, 0x04, "Shadow Temple Falling Spikes Switch Chest", SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST] = ItemLocation::Chest (0x07, 0x09, "Shadow Temple Invisible Spikes Chest", SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_WIND_HINT_CHEST] = ItemLocation::Chest (0x07, 0x15, "Shadow Temple Wind Hint Chest", SHADOW_TEMPLE_WIND_HINT_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST] = ItemLocation::Chest (0x07, 0x08, "Shadow Temple After Wind Enemy Chest", SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST] = ItemLocation::Chest (0x07, 0x14, "Shadow Temple After Wind Hidden Chest", SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST] = ItemLocation::Chest (0x07, 0x0A, "Shadow Temple Spike Walls Left Chest", SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x07, 0x0B, "Shadow Temple Boss Key Chest", SHADOW_TEMPLE_BOSS_KEY_CHEST, SHADOW_TEMPLE_BOSS_KEY, {Category::cShadowTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST] = ItemLocation::Chest (0x07, 0x0D, "Shadow Temple Invisible Floormaster Chest", SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_FREESTANDING_KEY] = ItemLocation::Collectable(0x07, 0x01, "Shadow Temple Freestanding Key", SHADOW_TEMPLE_FREESTANDING_KEY, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MAP_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MAP_CHEST, 0x07, 0x01, "Shadow Temple Map Chest", SHADOW_TEMPLE_MAP_CHEST, SHADOW_TEMPLE_MAP, {Category::cShadowTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_HOVER_BOOTS_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST, 0x07, 0x07, "Shadow Temple Hover Boots Chest", SHADOW_TEMPLE_HOVER_BOOTS_CHEST, HOVER_BOOTS, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_COMPASS_CHEST, 0x07, 0x03, "Shadow Temple Compass Chest", SHADOW_TEMPLE_COMPASS_CHEST, SHADOW_TEMPLE_COMPASS, {Category::cShadowTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, 0x07, 0x02, "Shadow Temple Early Silver Rupee Chest", SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, 0x07, 0x0C, "Shadow Temple Invisible Blades Visible Chest", SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, 0x07, 0x16, "Shadow Temple Invisible Blades Invisible Chest", SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, ARROWS_30, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, 0x07, 0x05, "Shadow Temple Falling Spikes Lower Chest", SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, 0x07, 0x06, "Shadow Temple Falling Spikes Upper Chest", SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, 0x07, 0x04, "Shadow Temple Falling Spikes Switch Chest", SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, 0x07, 0x09, "Shadow Temple Invisible Spikes Chest", SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_WIND_HINT_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_WIND_HINT_CHEST, 0x07, 0x15, "Shadow Temple Wind Hint Chest", SHADOW_TEMPLE_WIND_HINT_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, 0x07, 0x08, "Shadow Temple After Wind Enemy Chest", SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, 0x07, 0x14, "Shadow Temple After Wind Hidden Chest", SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, 0x07, 0x0A, "Shadow Temple Spike Walls Left Chest", SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, 0x07, 0x0B, "Shadow Temple Boss Key Chest", SHADOW_TEMPLE_BOSS_KEY_CHEST, SHADOW_TEMPLE_BOSS_KEY, {Category::cShadowTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, 0x07, 0x0D, "Shadow Temple Invisible Floormaster Chest", SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_FREESTANDING_KEY] = ItemLocation::Collectable(RC_SHADOW_TEMPLE_FREESTANDING_KEY, 0x07, 0x01, "Shadow Temple Freestanding Key", SHADOW_TEMPLE_FREESTANDING_KEY, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); //Shadow Temple MQ - locationTable[SHADOW_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x07, 0x01, "Shadow Temple MQ Compass Chest", SHADOW_TEMPLE_MQ_COMPASS_CHEST, SHADOW_TEMPLE_COMPASS, {Category::cShadowTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST] = ItemLocation::Chest (0x07, 0x07, "Shadow Temple MQ Hover Boots Chest", SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, HOVER_BOOTS, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST] = ItemLocation::Chest (0x07, 0x03, "Shadow Temple MQ Early Gibdos Chest", SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (0x07, 0x02, "Shadow Temple MQ Map Chest", SHADOW_TEMPLE_MQ_MAP_CHEST, SHADOW_TEMPLE_MAP, {Category::cShadowTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST] = ItemLocation::Chest (0x07, 0x0F, "Shadow Temple MQ Beamos Silver Rupees Chest", SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, ARROWS_5, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST] = ItemLocation::Chest (0x07, 0x04, "Shadow Temple MQ Falling Spikes Switch Chest", SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST] = ItemLocation::Chest (0x07, 0x05, "Shadow Temple MQ Falling Spikes Lower Chest", SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST] = ItemLocation::Chest (0x07, 0x06, "Shadow Temple MQ Falling Spikes Upper Chest", SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, ARROWS_5, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST] = ItemLocation::Chest (0x07, 0x09, "Shadow Temple MQ Invisible Spikes Chest", SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (0x07, 0x0B, "Shadow Temple MQ Boss Key Chest", SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, SHADOW_TEMPLE_BOSS_KEY, {Category::cShadowTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST] = ItemLocation::Chest (0x07, 0x0A, "Shadow Temple MQ Spike Walls Left Chest", SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST] = ItemLocation::Chest (0x07, 0x10, "Shadow Temple MQ Stalfos Room Chest", SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, RED_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST] = ItemLocation::Chest (0x07, 0x16, "Shadow Temple MQ Invisible Blades Invisible Chest", SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST] = ItemLocation::Chest (0x07, 0x0C, "Shadow Temple MQ Invisible Blades Visible Chest", SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST] = ItemLocation::Chest (0x07, 0x0D, "Shadow Temple MQ Bomb Flower Chest", SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_WIND_HINT_CHEST] = ItemLocation::Chest (0x07, 0x15, "Shadow Temple MQ Wind Hint Chest", SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST] = ItemLocation::Chest (0x07, 0x14, "Shadow Temple MQ After Wind Hidden Chest", SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, ARROWS_5, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST] = ItemLocation::Chest (0x07, 0x08, "Shadow Temple MQ After Wind Enemy Chest", SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST] = ItemLocation::Chest (0x07, 0x0E, "Shadow Temple MQ Near Ship Invisible Chest", SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_FREESTANDING_KEY] = ItemLocation::Collectable(0x07, 0x06, "Shadow Temple MQ Freestanding Key", SHADOW_TEMPLE_MQ_FREESTANDING_KEY, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, 0x07, 0x01, "Shadow Temple MQ Compass Chest", SHADOW_TEMPLE_MQ_COMPASS_CHEST, SHADOW_TEMPLE_COMPASS, {Category::cShadowTemple, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, 0x07, 0x07, "Shadow Temple MQ Hover Boots Chest", SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, HOVER_BOOTS, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, 0x07, 0x03, "Shadow Temple MQ Early Gibdos Chest", SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_MAP_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_MAP_CHEST, 0x07, 0x02, "Shadow Temple MQ Map Chest", SHADOW_TEMPLE_MQ_MAP_CHEST, SHADOW_TEMPLE_MAP, {Category::cShadowTemple, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, 0x07, 0x0F, "Shadow Temple MQ Beamos Silver Rupees Chest", SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, ARROWS_5, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, 0x07, 0x04, "Shadow Temple MQ Falling Spikes Switch Chest", SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, 0x07, 0x05, "Shadow Temple MQ Falling Spikes Lower Chest", SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, 0x07, 0x06, "Shadow Temple MQ Falling Spikes Upper Chest", SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, ARROWS_5, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, 0x07, 0x09, "Shadow Temple MQ Invisible Spikes Chest", SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, 0x07, 0x0B, "Shadow Temple MQ Boss Key Chest", SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, SHADOW_TEMPLE_BOSS_KEY, {Category::cShadowTemple, Category::cVanillaBossKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, 0x07, 0x0A, "Shadow Temple MQ Spike Walls Left Chest", SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, 0x07, 0x10, "Shadow Temple MQ Stalfos Room Chest", SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, RED_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, 0x07, 0x16, "Shadow Temple MQ Invisible Blades Invisible Chest", SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, 0x07, 0x0C, "Shadow Temple MQ Invisible Blades Visible Chest", SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, 0x07, 0x0D, "Shadow Temple MQ Bomb Flower Chest", SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, ARROWS_10, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_WIND_HINT_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, 0x07, 0x15, "Shadow Temple MQ Wind Hint Chest", SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, 0x07, 0x14, "Shadow Temple MQ After Wind Hidden Chest", SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, ARROWS_5, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, 0x07, 0x08, "Shadow Temple MQ After Wind Enemy Chest", SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, BLUE_RUPEE, {Category::cShadowTemple,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST] = ItemLocation::Chest (RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, 0x07, 0x0E, "Shadow Temple MQ Near Ship Invisible Chest", SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_FREESTANDING_KEY] = ItemLocation::Collectable(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, 0x07, 0x06, "Shadow Temple MQ Freestanding Key", SHADOW_TEMPLE_MQ_FREESTANDING_KEY, SHADOW_TEMPLE_SMALL_KEY, {Category::cShadowTemple, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); //Bottom of the Well Vanilla - locationTable[BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST] = ItemLocation::Chest (0x08, 0x08, "Bottom of the Well Front Left Fake Wall Chest", BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST] = ItemLocation::Chest (0x08, 0x02, "Bottom of the Well Front Center Bombable Chest", BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, BOMBCHU_10, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST] = ItemLocation::Chest (0x08, 0x05, "Bottom of the Well Right Bottom Fake Wall Chest", BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_COMPASS_CHEST] = ItemLocation::Chest (0x08, 0x01, "Bottom of the Well Compass Chest", BOTTOM_OF_THE_WELL_COMPASS_CHEST, BOTTOM_OF_THE_WELL_COMPASS, {Category::cBottomOfTheWell, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST] = ItemLocation::Chest (0x08, 0x0E, "Bottom of the Well Center Skulltula Chest", BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, DEKU_NUTS_5, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST] = ItemLocation::Chest (0x08, 0x04, "Bottom of the Well Back Left Bombable Chest", BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, DEKU_NUTS_10, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (0x08, 0x03, "Bottom of the Well Lens of Truth Chest", BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cBottomOfTheWell, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_INVISIBLE_CHEST] = ItemLocation::Chest (0x08, 0x14, "Bottom of the Well Invisible Chest", BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, HUGE_RUPEE, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST] = ItemLocation::Chest (0x08, 0x10, "Bottom of the Well Underwater Front Chest", BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, BOMBS_10, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST] = ItemLocation::Chest (0x08, 0x09, "Bottom of the Well Underwater Left Chest", BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, RECOVERY_HEART, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MAP_CHEST] = ItemLocation::Chest (0x08, 0x07, "Bottom of the Well Map Chest", BOTTOM_OF_THE_WELL_MAP_CHEST, BOTTOM_OF_THE_WELL_MAP, {Category::cBottomOfTheWell, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST] = ItemLocation::Chest (0x08, 0x0A, "Bottom of the Well Fire Keese Chest", BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, DEKU_SHIELD, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST] = ItemLocation::Chest (0x08, 0x0C, "Bottom of the Well Like Like Chest", BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, HYLIAN_SHIELD, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_FREESTANDING_KEY] = ItemLocation::Collectable(0x08, 0x01, "Bottom of the Well Freestanding Key", BOTTOM_OF_THE_WELL_FREESTANDING_KEY, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, 0x08, 0x08, "Bottom of the Well Front Left Fake Wall Chest", BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, 0x08, 0x02, "Bottom of the Well Front Center Bombable Chest", BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, BOMBCHU_10, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, 0x08, 0x05, "Bottom of the Well Right Bottom Fake Wall Chest", BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_COMPASS_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST, 0x08, 0x01, "Bottom of the Well Compass Chest", BOTTOM_OF_THE_WELL_COMPASS_CHEST, BOTTOM_OF_THE_WELL_COMPASS, {Category::cBottomOfTheWell, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, 0x08, 0x0E, "Bottom of the Well Center Skulltula Chest", BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, DEKU_NUTS_5, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, 0x08, 0x04, "Bottom of the Well Back Left Bombable Chest", BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, DEKU_NUTS_10, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, 0x08, 0x03, "Bottom of the Well Lens of Truth Chest", BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cBottomOfTheWell, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_INVISIBLE_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, 0x08, 0x14, "Bottom of the Well Invisible Chest", BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, HUGE_RUPEE, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, 0x08, 0x10, "Bottom of the Well Underwater Front Chest", BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, BOMBS_10, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, 0x08, 0x09, "Bottom of the Well Underwater Left Chest", BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, RECOVERY_HEART, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MAP_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_MAP_CHEST, 0x08, 0x07, "Bottom of the Well Map Chest", BOTTOM_OF_THE_WELL_MAP_CHEST, BOTTOM_OF_THE_WELL_MAP, {Category::cBottomOfTheWell, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, 0x08, 0x0A, "Bottom of the Well Fire Keese Chest", BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, DEKU_SHIELD, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, 0x08, 0x0C, "Bottom of the Well Like Like Chest", BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, HYLIAN_SHIELD, {Category::cBottomOfTheWell,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_FREESTANDING_KEY] = ItemLocation::Collectable(RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, 0x08, 0x01, "Bottom of the Well Freestanding Key", BOTTOM_OF_THE_WELL_FREESTANDING_KEY, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); //Bottom of the Well MQBottomOfTheWell] - locationTable[BOTTOM_OF_THE_WELL_MQ_MAP_CHEST] = ItemLocation::Chest (0x08, 0x03, "Bottom of the Well MQ Map Chest", BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, BOTTOM_OF_THE_WELL_MAP, {Category::cBottomOfTheWell, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (0x08, 0x01, "Bottom of the Well MQ Lens of Truth Chest", BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cBottomOfTheWell, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x08, 0x02, "Bottom of the Well MQ Compass Chest", BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, BOTTOM_OF_THE_WELL_COMPASS, {Category::cBottomOfTheWell, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY] = ItemLocation::Collectable(0x08, 0x02, "Bottom of the Well MQ Dead Hand Freestanding Key", BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY] = ItemLocation::Collectable(0x08, 0x01, "Bottom of the Well MQ East Inner Room Freestanding Key",BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_MAP_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, 0x08, 0x03, "Bottom of the Well MQ Map Chest", BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, BOTTOM_OF_THE_WELL_MAP, {Category::cBottomOfTheWell, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, 0x08, 0x01, "Bottom of the Well MQ Lens of Truth Chest", BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cBottomOfTheWell, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, 0x08, 0x02, "Bottom of the Well MQ Compass Chest", BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, BOTTOM_OF_THE_WELL_COMPASS, {Category::cBottomOfTheWell, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY] = ItemLocation::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, 0x08, 0x02, "Bottom of the Well MQ Dead Hand Freestanding Key", BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY] = ItemLocation::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, 0x08, 0x01, "Bottom of the Well MQ East Inner Room Freestanding Key",BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, BOTTOM_OF_THE_WELL_SMALL_KEY, {Category::cBottomOfTheWell, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); //Ice Cavern Vanilla - locationTable[ICE_CAVERN_MAP_CHEST] = ItemLocation::Chest (0x09, 0x00, "Ice Cavern Map Chest", ICE_CAVERN_MAP_CHEST, ICE_CAVERN_MAP, {Category::cIceCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_COMPASS_CHEST] = ItemLocation::Chest (0x09, 0x01, "Ice Cavern Compass Chest", ICE_CAVERN_COMPASS_CHEST, ICE_CAVERN_COMPASS, {Category::cIceCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_IRON_BOOTS_CHEST] = ItemLocation::Chest (0x09, 0x02, "Ice Cavern Iron Boots Chest", ICE_CAVERN_IRON_BOOTS_CHEST, IRON_BOOTS, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_FREESTANDING_POH] = ItemLocation::Collectable(0x09, 0x01, "Ice Cavern Freestanding PoH", ICE_CAVERN_FREESTANDING_POH, PIECE_OF_HEART, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MAP_CHEST] = ItemLocation::Chest (RC_ICE_CAVERN_MAP_CHEST, 0x09, 0x00, "Ice Cavern Map Chest", ICE_CAVERN_MAP_CHEST, ICE_CAVERN_MAP, {Category::cIceCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_COMPASS_CHEST] = ItemLocation::Chest (RC_ICE_CAVERN_COMPASS_CHEST, 0x09, 0x01, "Ice Cavern Compass Chest", ICE_CAVERN_COMPASS_CHEST, ICE_CAVERN_COMPASS, {Category::cIceCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_IRON_BOOTS_CHEST] = ItemLocation::Chest (RC_ICE_CAVERN_IRON_BOOTS_CHEST, 0x09, 0x02, "Ice Cavern Iron Boots Chest", ICE_CAVERN_IRON_BOOTS_CHEST, IRON_BOOTS, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_FREESTANDING_POH] = ItemLocation::Collectable(RC_ICE_CAVERN_FREESTANDING_POH, 0x09, 0x01, "Ice Cavern Freestanding PoH", ICE_CAVERN_FREESTANDING_POH, PIECE_OF_HEART, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); //Ice Cavern MQIceCavern] - locationTable[ICE_CAVERN_MQ_IRON_BOOTS_CHEST] = ItemLocation::Chest (0x09, 0x02, "Ice Cavern MQ Iron Boots Chest", ICE_CAVERN_MQ_IRON_BOOTS_CHEST, IRON_BOOTS, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_MQ_COMPASS_CHEST] = ItemLocation::Chest (0x09, 0x00, "Ice Cavern MQ Compass Chest", ICE_CAVERN_MQ_COMPASS_CHEST, ICE_CAVERN_COMPASS, {Category::cIceCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_MQ_MAP_CHEST] = ItemLocation::Chest (0x09, 0x01, "Ice Cavern MQ Map Chest", ICE_CAVERN_MQ_MAP_CHEST, ICE_CAVERN_MAP, {Category::cIceCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_MQ_FREESTANDING_POH] = ItemLocation::Collectable(0x09, 0x01, "Ice Cavern MQ Freestanding PoH", ICE_CAVERN_MQ_FREESTANDING_POH, PIECE_OF_HEART, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_IRON_BOOTS_CHEST] = ItemLocation::Chest (RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST, 0x09, 0x02, "Ice Cavern MQ Iron Boots Chest", ICE_CAVERN_MQ_IRON_BOOTS_CHEST, IRON_BOOTS, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_COMPASS_CHEST] = ItemLocation::Chest (RC_ICE_CAVERN_MQ_COMPASS_CHEST, 0x09, 0x00, "Ice Cavern MQ Compass Chest", ICE_CAVERN_MQ_COMPASS_CHEST, ICE_CAVERN_COMPASS, {Category::cIceCavern, Category::cVanillaCompass,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_MAP_CHEST] = ItemLocation::Chest (RC_ICE_CAVERN_MQ_MAP_CHEST, 0x09, 0x01, "Ice Cavern MQ Map Chest", ICE_CAVERN_MQ_MAP_CHEST, ICE_CAVERN_MAP, {Category::cIceCavern, Category::cVanillaMap,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_FREESTANDING_POH] = ItemLocation::Collectable(RC_ICE_CAVERN_MQ_FREESTANDING_POH, 0x09, 0x01, "Ice Cavern MQ Freestanding PoH", ICE_CAVERN_MQ_FREESTANDING_POH, PIECE_OF_HEART, {Category::cIceCavern,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); //Gerudo Training Ground Vanilla - locationTable[GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST] = ItemLocation::Chest (0x0B, 0x13, "Gerudo Training Grounds Lobby Left Chest", GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST] = ItemLocation::Chest (0x0B, 0x07, "Gerudo Training Grounds Lobby Right Chest", GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_STALFOS_CHEST] = ItemLocation::Chest (0x0B, 0x00, "Gerudo Training Grounds Stalfos Chest", GERUDO_TRAINING_GROUNDS_STALFOS_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_BEAMOS_CHEST] = ItemLocation::Chest (0x0B, 0x01, "Gerudo Training Grounds Beamos Chest", GERUDO_TRAINING_GROUNDS_BEAMOS_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HIDDEN_CEILING_CHEST] = ItemLocation::Chest (0x0B, 0x0B, "Gerudo Training Grounds Hidden Ceiling Chest", GERUDO_TRAINING_GROUNDS_HIDDEN_CEILING_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_FIRST_CHEST] = ItemLocation::Chest (0x0B, 0x06, "Gerudo Training Grounds Maze Path First Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_FIRST_CHEST, PURPLE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_SECOND_CHEST] = ItemLocation::Chest (0x0B, 0x0A, "Gerudo Training Grounds Maze Path Second Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_SECOND_CHEST, RED_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_THIRD_CHEST] = ItemLocation::Chest (0x0B, 0x09, "Gerudo Training Grounds Maze Path Third Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_THIRD_CHEST, ARROWS_30, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST] = ItemLocation::Chest (0x0B, 0x0C, "Gerudo Training Grounds Maze Path Final Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST, ICE_ARROWS, {Category::cGerudoTrainingGrounds, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_CENTRAL_CHEST] = ItemLocation::Chest (0x0B, 0x05, "Gerudo Training Grounds Maze Right Central Chest", GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_CENTRAL_CHEST, BOMBCHU_5, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_SIDE_CHEST] = ItemLocation::Chest (0x0B, 0x08, "Gerudo Training Grounds Maze Right Side Chest", GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_SIDE_CHEST, ARROWS_30, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST] = ItemLocation::Chest (0x0B, 0x0D, "Gerudo Training Grounds Underwater Silver Rupee Chest", GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_CLEAR_CHEST] = ItemLocation::Chest (0x0B, 0x12, "Gerudo Training Grounds Hammer Room Clear Chest", GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_CLEAR_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_SWITCH_CHEST] = ItemLocation::Chest (0x0B, 0x10, "Gerudo Training Grounds Hammer Room Switch Chest", GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_SWITCH_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_EYE_STATUE_CHEST] = ItemLocation::Chest (0x0B, 0x03, "Gerudo Training Grounds Eye Statue Chest", GERUDO_TRAINING_GROUNDS_EYE_STATUE_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_NEAR_SCARECROW_CHEST] = ItemLocation::Chest (0x0B, 0x04, "Gerudo Training Grounds Near Scarecrow Chest", GERUDO_TRAINING_GROUNDS_NEAR_SCARECROW_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_BEFORE_HEAVY_BLOCK_CHEST] = ItemLocation::Chest (0x0B, 0x11, "Gerudo Training Grounds Before Heavy Block Chest", GERUDO_TRAINING_GROUNDS_BEFORE_HEAVY_BLOCK_CHEST, ARROWS_30, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FIRST_CHEST] = ItemLocation::Chest (0x0B, 0x0F, "Gerudo Training Grounds Heavy Block First Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FIRST_CHEST, HUGE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_SECOND_CHEST] = ItemLocation::Chest (0x0B, 0x0E, "Gerudo Training Grounds Heavy Block Second Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_SECOND_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_THIRD_CHEST] = ItemLocation::Chest (0x0B, 0x14, "Gerudo Training Grounds Heavy Block Third Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_THIRD_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FOURTH_CHEST] = ItemLocation::Chest (0x0B, 0x02, "Gerudo Training Grounds Heavy Block Fourth Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FOURTH_CHEST, ICE_TRAP, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_FREESTANDING_KEY] = ItemLocation::Collectable(0x0B, 0x01, "Gerudo Training Grounds Freestanding Key", GERUDO_TRAINING_GROUNDS_FREESTANDING_KEY, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, 0x0B, 0x13, "Gerudo Training Grounds Lobby Left Chest", GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, 0x0B, 0x07, "Gerudo Training Grounds Lobby Right Chest", GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_STALFOS_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, 0x0B, 0x00, "Gerudo Training Grounds Stalfos Chest", GERUDO_TRAINING_GROUNDS_STALFOS_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_BEAMOS_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, 0x0B, 0x01, "Gerudo Training Grounds Beamos Chest", GERUDO_TRAINING_GROUNDS_BEAMOS_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HIDDEN_CEILING_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, 0x0B, 0x0B, "Gerudo Training Grounds Hidden Ceiling Chest", GERUDO_TRAINING_GROUNDS_HIDDEN_CEILING_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_FIRST_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, 0x0B, 0x06, "Gerudo Training Grounds Maze Path First Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_FIRST_CHEST, PURPLE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_SECOND_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST, 0x0B, 0x0A, "Gerudo Training Grounds Maze Path Second Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_SECOND_CHEST, RED_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_THIRD_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST, 0x0B, 0x09, "Gerudo Training Grounds Maze Path Third Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_THIRD_CHEST, ARROWS_30, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, 0x0B, 0x0C, "Gerudo Training Grounds Maze Path Final Chest", GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST, ICE_ARROWS, {Category::cGerudoTrainingGrounds, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_CENTRAL_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, 0x0B, 0x05, "Gerudo Training Grounds Maze Right Central Chest", GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_CENTRAL_CHEST, BOMBCHU_5, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_SIDE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, 0x0B, 0x08, "Gerudo Training Grounds Maze Right Side Chest", GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_SIDE_CHEST, ARROWS_30, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, 0x0B, 0x0D, "Gerudo Training Grounds Underwater Silver Rupee Chest", GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_CLEAR_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, 0x0B, 0x12, "Gerudo Training Grounds Hammer Room Clear Chest", GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_CLEAR_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_SWITCH_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, 0x0B, 0x10, "Gerudo Training Grounds Hammer Room Switch Chest", GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_SWITCH_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_EYE_STATUE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, 0x0B, 0x03, "Gerudo Training Grounds Eye Statue Chest", GERUDO_TRAINING_GROUNDS_EYE_STATUE_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_NEAR_SCARECROW_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, 0x0B, 0x04, "Gerudo Training Grounds Near Scarecrow Chest", GERUDO_TRAINING_GROUNDS_NEAR_SCARECROW_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_BEFORE_HEAVY_BLOCK_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, 0x0B, 0x11, "Gerudo Training Grounds Before Heavy Block Chest", GERUDO_TRAINING_GROUNDS_BEFORE_HEAVY_BLOCK_CHEST, ARROWS_30, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FIRST_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, 0x0B, 0x0F, "Gerudo Training Grounds Heavy Block First Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FIRST_CHEST, HUGE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_SECOND_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, 0x0B, 0x0E, "Gerudo Training Grounds Heavy Block Second Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_SECOND_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_THIRD_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, 0x0B, 0x14, "Gerudo Training Grounds Heavy Block Third Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_THIRD_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FOURTH_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, 0x0B, 0x02, "Gerudo Training Grounds Heavy Block Fourth Chest", GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FOURTH_CHEST, ICE_TRAP, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_FREESTANDING_KEY] = ItemLocation::Collectable(RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, 0x0B, 0x01, "Gerudo Training Grounds Freestanding Key", GERUDO_TRAINING_GROUNDS_FREESTANDING_KEY, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); //Gerudo Training Grounds MQ - locationTable[GERUDO_TRAINING_GROUNDS_MQ_LOBBY_RIGHT_CHEST] = ItemLocation::Chest (0x0B, 0x07, "Gerudo Training Grounds MQ Lobby Right Chest", GERUDO_TRAINING_GROUNDS_MQ_LOBBY_RIGHT_CHEST, BOMBCHU_5, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_LOBBY_LEFT_CHEST] = ItemLocation::Chest (0x0B, 0x13, "Gerudo Training Grounds MQ Lobby Left Chest", GERUDO_TRAINING_GROUNDS_MQ_LOBBY_LEFT_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_FIRST_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (0x0B, 0x00, "Gerudo Training Grounds MQ First Iron Knuckle Chest", GERUDO_TRAINING_GROUNDS_MQ_FIRST_IRON_KNUCKLE_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_BEFORE_HEAVY_BLOCK_CHEST] = ItemLocation::Chest (0x0B, 0x11, "Gerudo Training Grounds MQ Before Heavy Block Chest", GERUDO_TRAINING_GROUNDS_MQ_BEFORE_HEAVY_BLOCK_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_EYE_STATUE_CHEST] = ItemLocation::Chest (0x0B, 0x03, "Gerudo Training Grounds MQ Eye Statue Chest", GERUDO_TRAINING_GROUNDS_MQ_EYE_STATUE_CHEST, BOMBCHU_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_FLAME_CIRCLE_CHEST] = ItemLocation::Chest (0x0B, 0x0E, "Gerudo Training Grounds MQ Flame Circle Chest", GERUDO_TRAINING_GROUNDS_MQ_FLAME_CIRCLE_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_SECOND_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (0x0B, 0x12, "Gerudo Training Grounds MQ Second Iron Knuckle Chest", GERUDO_TRAINING_GROUNDS_MQ_SECOND_IRON_KNUCKLE_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_DINOLFOS_CHEST] = ItemLocation::Chest (0x0B, 0x01, "Gerudo Training Grounds MQ Dinolfos Chest", GERUDO_TRAINING_GROUNDS_MQ_DINOLFOS_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST] = ItemLocation::Chest (0x0B, 0x04, "Gerudo Training Grounds MQ Ice Arrows Chest", GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST, ICE_ARROWS, {Category::cGerudoTrainingGrounds, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_CENTRAL_CHEST] = ItemLocation::Chest (0x0B, 0x05, "Gerudo Training Grounds MQ Maze Right Central Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_CENTRAL_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_FIRST_CHEST] = ItemLocation::Chest (0x0B, 0x06, "Gerudo Training Grounds MQ Maze Path First Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_FIRST_CHEST, GREEN_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_SIDE_CHEST] = ItemLocation::Chest (0x0B, 0x08, "Gerudo Training Grounds MQ Maze Right Side Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_SIDE_CHEST, TREASURE_GAME_GREEN_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_THIRD_CHEST] = ItemLocation::Chest (0x0B, 0x09, "Gerudo Training Grounds MQ Maze Path Third Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_THIRD_CHEST, TREASURE_GAME_GREEN_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_SECOND_CHEST] = ItemLocation::Chest (0x0B, 0x0A, "Gerudo Training Grounds MQ Maze Path Second Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_SECOND_CHEST, RED_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST] = ItemLocation::Chest (0x0B, 0x0B, "Gerudo Training Grounds MQ Hidden Ceiling Chest", GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST, PURPLE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST] = ItemLocation::Chest (0x0B, 0x0D, "Gerudo Training Grounds MQ Underwater Silver Rupee Chest",GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST, TREASURE_GAME_GREEN_RUPEE, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); - locationTable[GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST] = ItemLocation::Chest (0x0B, 0x02, "Gerudo Training Grounds MQ Heavy Block Chest", GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST, PURPLE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_LOBBY_RIGHT_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, 0x0B, 0x07, "Gerudo Training Grounds MQ Lobby Right Chest", GERUDO_TRAINING_GROUNDS_MQ_LOBBY_RIGHT_CHEST, BOMBCHU_5, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_LOBBY_LEFT_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, 0x0B, 0x13, "Gerudo Training Grounds MQ Lobby Left Chest", GERUDO_TRAINING_GROUNDS_MQ_LOBBY_LEFT_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_FIRST_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, 0x0B, 0x00, "Gerudo Training Grounds MQ First Iron Knuckle Chest", GERUDO_TRAINING_GROUNDS_MQ_FIRST_IRON_KNUCKLE_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_BEFORE_HEAVY_BLOCK_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, 0x0B, 0x11, "Gerudo Training Grounds MQ Before Heavy Block Chest", GERUDO_TRAINING_GROUNDS_MQ_BEFORE_HEAVY_BLOCK_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_EYE_STATUE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, 0x0B, 0x03, "Gerudo Training Grounds MQ Eye Statue Chest", GERUDO_TRAINING_GROUNDS_MQ_EYE_STATUE_CHEST, BOMBCHU_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_FLAME_CIRCLE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, 0x0B, 0x0E, "Gerudo Training Grounds MQ Flame Circle Chest", GERUDO_TRAINING_GROUNDS_MQ_FLAME_CIRCLE_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_SECOND_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, 0x0B, 0x12, "Gerudo Training Grounds MQ Second Iron Knuckle Chest", GERUDO_TRAINING_GROUNDS_MQ_SECOND_IRON_KNUCKLE_CHEST, ARROWS_10, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_DINOLFOS_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, 0x0B, 0x01, "Gerudo Training Grounds MQ Dinolfos Chest", GERUDO_TRAINING_GROUNDS_MQ_DINOLFOS_CHEST, GERUDO_TRAINING_GROUNDS_SMALL_KEY, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, 0x0B, 0x04, "Gerudo Training Grounds MQ Ice Arrows Chest", GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST, ICE_ARROWS, {Category::cGerudoTrainingGrounds, Category::cSongDungeonReward}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_CENTRAL_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, 0x0B, 0x05, "Gerudo Training Grounds MQ Maze Right Central Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_CENTRAL_CHEST, BLUE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_FIRST_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST, 0x0B, 0x06, "Gerudo Training Grounds MQ Maze Path First Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_FIRST_CHEST, GREEN_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_SIDE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, 0x0B, 0x08, "Gerudo Training Grounds MQ Maze Right Side Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_SIDE_CHEST, TREASURE_GAME_GREEN_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_THIRD_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, 0x0B, 0x09, "Gerudo Training Grounds MQ Maze Path Third Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_THIRD_CHEST, TREASURE_GAME_GREEN_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_SECOND_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST, 0x0B, 0x0A, "Gerudo Training Grounds MQ Maze Path Second Chest", GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_SECOND_CHEST, RED_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, 0x0B, 0x0B, "Gerudo Training Grounds MQ Hidden Ceiling Chest", GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST, PURPLE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, 0x0B, 0x0D, "Gerudo Training Grounds MQ Underwater Silver Rupee Chest",GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST, TREASURE_GAME_GREEN_RUPEE, {Category::cGerudoTrainingGrounds, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); + locationTable[GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST] = ItemLocation::Chest (RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, 0x0B, 0x02, "Gerudo Training Grounds MQ Heavy Block Chest", GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST, PURPLE_RUPEE, {Category::cGerudoTrainingGrounds,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_TRAINING_GROUND); //Ganons Castle Shared - locationTable[GANONS_TOWER_BOSS_KEY_CHEST] = ItemLocation::Chest (0x0A, 0x0B, "Ganon's Tower Boss Key Chest", GANONS_TOWER_BOSS_KEY_CHEST, GANONS_CASTLE_BOSS_KEY, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_TOWER_BOSS_KEY_CHEST] = ItemLocation::Chest (RC_GANONS_TOWER_BOSS_KEY_CHEST, 0x0A, 0x0B, "Ganon's Tower Boss Key Chest", GANONS_TOWER_BOSS_KEY_CHEST, GANONS_CASTLE_BOSS_KEY, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); //Ganons Castle Vanilla - locationTable[GANONS_CASTLE_FOREST_TRIAL_CHEST] = ItemLocation::Chest (0x0D, 0x09, "Ganon's Castle Forest Trial Chest", GANONS_CASTLE_FOREST_TRIAL_CHEST, BLUE_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST] = ItemLocation::Chest (0x0D, 0x07, "Ganon's Castle Water Trial Left Chest", GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST] = ItemLocation::Chest (0x0D, 0x06, "Ganon's Castle Water Trial Right Chest", GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST] = ItemLocation::Chest (0x0D, 0x08, "Ganon's Castle Shadow Trial Front Chest", GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, BLUE_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST] = ItemLocation::Chest (0x0D, 0x05, "Ganon's Castle Shadow Trial Golden Gauntlets Chest", GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, PROGRESSIVE_STRENGTH, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST] = ItemLocation::Chest (0x0D, 0x12, "Ganon's Castle Spirit Trial Crystal Switch Chest", GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, BOMBCHU_20, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST] = ItemLocation::Chest (0x0D, 0x14, "Ganon's Castle Spirit Trial Invisible Chest", GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST] = ItemLocation::Chest (0x0D, 0x0C, "Ganon's Castle Light Trial First Left Chest", GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, BLUE_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST] = ItemLocation::Chest (0x0D, 0x0B, "Ganon's Castle Light Trial Second Left Chest", GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST] = ItemLocation::Chest (0x0D, 0x0D, "Ganon's Castle Light Trial Third Left Chest", GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST] = ItemLocation::Chest (0x0D, 0x0E, "Ganon's Castle Light Trial First Right Chest", GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST] = ItemLocation::Chest (0x0D, 0x0A, "Ganon's Castle Light Trial Second Right Chest", GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, ARROWS_30, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST] = ItemLocation::Chest (0x0D, 0x0F, "Ganon's Castle Light Trial Third Right Chest", GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST] = ItemLocation::Chest (0x0D, 0x10, "Ganon's Castle Light Trial Invisible Enemies Chest", GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST] = ItemLocation::Chest (0x0D, 0x11, "Ganon's Castle Light Trial Lullaby Chest", GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT] = ItemLocation::Base (0x0D, 0x37, "Ganon's Castle Deku Scrub Center-Left", GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, BUY_BOMBS_535, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x06), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT] = ItemLocation::Base (0x0D, 0x33, "Ganon's Castle Deku Scrub Center-Right", GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, BUY_ARROWS_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_DEKU_SCRUB_RIGHT] = ItemLocation::Base (0x0D, 0x39, "Ganon's Castle Deku Scrub Right", GANONS_CASTLE_DEKU_SCRUB_RIGHT, BUY_RED_POTION_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_DEKU_SCRUB_LEFT] = ItemLocation::Base (0x0D, 0x3A, "Ganon's Castle Deku Scrub Left", GANONS_CASTLE_DEKU_SCRUB_LEFT, BUY_GREEN_POTION, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x09), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_FOREST_TRIAL_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, 0x0D, 0x09, "Ganon's Castle Forest Trial Chest", GANONS_CASTLE_FOREST_TRIAL_CHEST, BLUE_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, 0x0D, 0x07, "Ganon's Castle Water Trial Left Chest", GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, 0x0D, 0x06, "Ganon's Castle Water Trial Right Chest", GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, 0x0D, 0x08, "Ganon's Castle Shadow Trial Front Chest", GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, BLUE_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, 0x0D, 0x05, "Ganon's Castle Shadow Trial Golden Gauntlets Chest", GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, PROGRESSIVE_STRENGTH, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, 0x0D, 0x12, "Ganon's Castle Spirit Trial Crystal Switch Chest", GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, BOMBCHU_20, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, 0x0D, 0x14, "Ganon's Castle Spirit Trial Invisible Chest", GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, 0x0D, 0x0C, "Ganon's Castle Light Trial First Left Chest", GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, BLUE_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, 0x0D, 0x0B, "Ganon's Castle Light Trial Second Left Chest", GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST, 0x0D, 0x0D, "Ganon's Castle Light Trial Third Left Chest", GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST, 0x0D, 0x0E, "Ganon's Castle Light Trial First Right Chest", GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, 0x0D, 0x0A, "Ganon's Castle Light Trial Second Right Chest", GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, ARROWS_30, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, 0x0D, 0x0F, "Ganon's Castle Light Trial Third Right Chest", GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, ICE_TRAP, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, 0x0D, 0x10, "Ganon's Castle Light Trial Invisible Enemies Chest", GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, 0x0D, 0x11, "Ganon's Castle Light Trial Lullaby Chest", GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT] = ItemLocation::Base (RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, 0x0D, 0x37, "Ganon's Castle Deku Scrub Center-Left", GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, BUY_BOMBS_535, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x06), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT] = ItemLocation::Base (RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, 0x0D, 0x33, "Ganon's Castle Deku Scrub Center-Right", GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, BUY_ARROWS_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_DEKU_SCRUB_RIGHT] = ItemLocation::Base (RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, 0x0D, 0x39, "Ganon's Castle Deku Scrub Right", GANONS_CASTLE_DEKU_SCRUB_RIGHT, BUY_RED_POTION_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_DEKU_SCRUB_LEFT] = ItemLocation::Base (RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, 0x0D, 0x3A, "Ganon's Castle Deku Scrub Left", GANONS_CASTLE_DEKU_SCRUB_LEFT, BUY_GREEN_POTION, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x09), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); //Ganons Castle MQ - locationTable[GANONS_CASTLE_MQ_WATER_TRIAL_CHEST] = ItemLocation::Chest (0x0D, 0x01, "Ganon's Castle MQ Water Trial Chest", GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, RED_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST] = ItemLocation::Chest (0x0D, 0x02, "Ganon's Castle MQ Forest Trial Eye Switch Chest", GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST] = ItemLocation::Chest (0x0D, 0x03, "Ganon's Castle MQ Forest Trial Frozen Eye Switch Chest",GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, BOMBS_5, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST] = ItemLocation::Chest (0x0D, 0x04, "Ganon's Castle MQ Light Trial Lullaby Chest", GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST] = ItemLocation::Chest (0x0D, 0x00, "Ganon's Castle MQ Shadow Trial Bomb Flower Chest", GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST] = ItemLocation::Chest (0x0D, 0x05, "Ganon's Castle MQ Shadow Trial Eye Switch Chest", GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST] = ItemLocation::Chest (0x0D, 0x06, "Ganon's Castle MQ Spirit Trial Golden Gauntlets Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, PROGRESSIVE_STRENGTH, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST] = ItemLocation::Chest (0x0D, 0x07, "Ganon's Castle MQ Spirit Trial Sun Back Right Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST] = ItemLocation::Chest (0x0D, 0x08, "Ganon's Castle MQ Spirit Trial Sun Back Left Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST] = ItemLocation::Chest (0x0D, 0x09, "Ganon's Castle MQ Spirit Trial Sun Front Left Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST] = ItemLocation::Chest (0x0D, 0x0A, "Ganon's Castle MQ Spirit Trial First Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, BOMBCHU_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST] = ItemLocation::Chest (0x0D, 0x14, "Ganon's Castle MQ Spirit Trial Invisible Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY] = ItemLocation::Collectable(0x0D, 0x01, "Ganon's Castle MQ Forest Trial Freestanding Key", GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT] = ItemLocation::Base (0x0D, 0x30, "Ganon's Castle MQ Deku Scrub Right", GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, BUY_DEKU_NUT_5, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT] = ItemLocation::Base (0x0D, 0x37, "Ganon's Castle MQ Deku Scrub Center-Left", GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, BUY_BOMBS_535, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x06), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER] = ItemLocation::Base (0x0D, 0x33, "Ganon's Castle MQ Deku Scrub Center", GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, BUY_ARROWS_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT] = ItemLocation::Base (0x0D, 0x39, "Ganon's Castle MQ Deku Scrub Center-Right", GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, BUY_RED_POTION_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT] = ItemLocation::Base (0x0D, 0x3A, "Ganon's Castle MQ Deku Scrub Left", GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, BUY_GREEN_POTION, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x09), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_WATER_TRIAL_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, 0x0D, 0x01, "Ganon's Castle MQ Water Trial Chest", GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, RED_RUPEE, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST, 0x0D, 0x02, "Ganon's Castle MQ Forest Trial Eye Switch Chest", GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, 0x0D, 0x03, "Ganon's Castle MQ Forest Trial Frozen Eye Switch Chest",GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, BOMBS_5, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, 0x0D, 0x04, "Ganon's Castle MQ Light Trial Lullaby Chest", GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, 0x0D, 0x00, "Ganon's Castle MQ Shadow Trial Bomb Flower Chest", GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, 0x0D, 0x05, "Ganon's Castle MQ Shadow Trial Eye Switch Chest", GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, 0x0D, 0x06, "Ganon's Castle MQ Spirit Trial Golden Gauntlets Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, PROGRESSIVE_STRENGTH, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, 0x0D, 0x07, "Ganon's Castle MQ Spirit Trial Sun Back Right Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, 0x0D, 0x08, "Ganon's Castle MQ Spirit Trial Sun Back Left Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, 0x0D, 0x09, "Ganon's Castle MQ Spirit Trial Sun Front Left Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, RECOVERY_HEART, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, 0x0D, 0x0A, "Ganon's Castle MQ Spirit Trial First Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, BOMBCHU_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST] = ItemLocation::Chest (RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, 0x0D, 0x14, "Ganon's Castle MQ Spirit Trial Invisible Chest", GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, ARROWS_10, {Category::cGanonsCastle,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY] = ItemLocation::Collectable(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, 0x0D, 0x01, "Ganon's Castle MQ Forest Trial Freestanding Key", GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, GANONS_CASTLE_SMALL_KEY, {Category::cGanonsCastle, Category::cVanillaSmallKey}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT] = ItemLocation::Base (RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, 0x0D, 0x30, "Ganon's Castle MQ Deku Scrub Right", GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, BUY_DEKU_NUT_5, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT] = ItemLocation::Base (RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, 0x0D, 0x37, "Ganon's Castle MQ Deku Scrub Center-Left", GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, BUY_BOMBS_535, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x06), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER] = ItemLocation::Base (RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, 0x0D, 0x33, "Ganon's Castle MQ Deku Scrub Center", GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, BUY_ARROWS_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT] = ItemLocation::Base (RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, 0x0D, 0x39, "Ganon's Castle MQ Deku Scrub Center-Right", GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, BUY_RED_POTION_30, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT] = ItemLocation::Base (RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, 0x0D, 0x3A, "Ganon's Castle MQ Deku Scrub Left", GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, BUY_GREEN_POTION, {Category::cGanonsCastle, Category::cDekuScrub,}, SpoilerCollectionCheck::Scrub(0x0D, 0x09), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); /*------------------------------- --- GOLD SKULLTULA TOKENS --- -------------------------------*/ //Dungeons - locationTable[DEKU_TREE_GS_BASEMENT_BACK_ROOM] = ItemLocation::GSToken(0x00, 0x01, "Deku Tree GS Basement Back Room", DEKU_TREE_GS_BASEMENT_BACK_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_GS_BASEMENT_GATE] = ItemLocation::GSToken(0x00, 0x02, "Deku Tree GS Basement Gate", DEKU_TREE_GS_BASEMENT_GATE, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_GS_BASEMENT_VINES] = ItemLocation::GSToken(0x00, 0x04, "Deku Tree GS Basement Vines", DEKU_TREE_GS_BASEMENT_VINES, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_GS_COMPASS_ROOM] = ItemLocation::GSToken(0x00, 0x08, "Deku Tree GS Compass Room", DEKU_TREE_GS_COMPASS_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_GS_BASEMENT_BACK_ROOM] = ItemLocation::GSToken(RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, 0x00, 0x01, "Deku Tree GS Basement Back Room", DEKU_TREE_GS_BASEMENT_BACK_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_GS_BASEMENT_GATE] = ItemLocation::GSToken(RC_DEKU_TREE_GS_BASEMENT_GATE, 0x00, 0x02, "Deku Tree GS Basement Gate", DEKU_TREE_GS_BASEMENT_GATE, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_GS_BASEMENT_VINES] = ItemLocation::GSToken(RC_DEKU_TREE_GS_BASEMENT_VINES, 0x00, 0x04, "Deku Tree GS Basement Vines", DEKU_TREE_GS_BASEMENT_VINES, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_GS_COMPASS_ROOM] = ItemLocation::GSToken(RC_DEKU_TREE_GS_COMPASS_ROOM, 0x00, 0x08, "Deku Tree GS Compass Room", DEKU_TREE_GS_COMPASS_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_GS_LOBBY] = ItemLocation::GSToken(0x00, 0x02, "Deku Tree MQ GS Lobby", DEKU_TREE_MQ_GS_LOBBY, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_GS_COMPASS_ROOM] = ItemLocation::GSToken(0x00, 0x08, "Deku Tree MQ GS Compass Room", DEKU_TREE_MQ_GS_COMPASS_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM] = ItemLocation::GSToken(0x00, 0x04, "Deku Tree MQ GS Basement Graves Room", DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM] = ItemLocation::GSToken(0x00, 0x01, "Deku Tree MQ GS Basement Back Room", DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_GS_LOBBY] = ItemLocation::GSToken(RC_DEKU_TREE_MQ_GS_LOBBY, 0x00, 0x02, "Deku Tree MQ GS Lobby", DEKU_TREE_MQ_GS_LOBBY, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_GS_COMPASS_ROOM] = ItemLocation::GSToken(RC_DEKU_TREE_MQ_GS_COMPASS_ROOM, 0x00, 0x08, "Deku Tree MQ GS Compass Room", DEKU_TREE_MQ_GS_COMPASS_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM] = ItemLocation::GSToken(RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, 0x00, 0x04, "Deku Tree MQ GS Basement Graves Room", DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM] = ItemLocation::GSToken(RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, 0x00, 0x01, "Deku Tree MQ GS Basement Back Room", DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, {Category::cDekuTree, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS] = ItemLocation::GSToken(0x01, 0x01, "Dodongos Cavern GS Vines Above Stairs", DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_GS_SCARECROW] = ItemLocation::GSToken(0x01, 0x02, "Dodongos Cavern GS Scarecrow", DODONGOS_CAVERN_GS_SCARECROW, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS] = ItemLocation::GSToken(0x01, 0x04, "Dodongos Cavern GS Alcove Above Stairs", DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_GS_BACK_ROOM] = ItemLocation::GSToken(0x01, 0x08, "Dodongos Cavern GS Back Room", DODONGOS_CAVERN_GS_BACK_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS] = ItemLocation::GSToken(0x01, 0x10, "Dodongos Cavern GS Side Room Near Lower Lizalfos", DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, 0x01, 0x01, "Dodongos Cavern GS Vines Above Stairs", DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_GS_SCARECROW] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_GS_SCARECROW, 0x01, 0x02, "Dodongos Cavern GS Scarecrow", DODONGOS_CAVERN_GS_SCARECROW, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, 0x01, 0x04, "Dodongos Cavern GS Alcove Above Stairs", DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_GS_BACK_ROOM] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_GS_BACK_ROOM, 0x01, 0x08, "Dodongos Cavern GS Back Room", DODONGOS_CAVERN_GS_BACK_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, 0x01, 0x10, "Dodongos Cavern GS Side Room Near Lower Lizalfos", DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM] = ItemLocation::GSToken(0x01, 0x02, "Dodongos Cavern MQ GS Scrub Room", DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM] = ItemLocation::GSToken(0x01, 0x08, "Dodongos Cavern MQ GS Song of Time Block Room", DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM] = ItemLocation::GSToken(0x01, 0x04, "Dodongos Cavern MQ GS Lizalfos Room", DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM] = ItemLocation::GSToken(0x01, 0x10, "Dodongos Cavern MQ GS Larvae Room", DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[DODONGOS_CAVERN_MQ_GS_BACK_AREA] = ItemLocation::GSToken(0x01, 0x01, "Dodongos Cavern MQ GS Back Room", DODONGOS_CAVERN_MQ_GS_BACK_AREA, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, 0x01, 0x02, "Dodongos Cavern MQ GS Scrub Room", DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, 0x01, 0x08, "Dodongos Cavern MQ GS Song of Time Block Room", DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, 0x01, 0x04, "Dodongos Cavern MQ GS Lizalfos Room", DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, 0x01, 0x10, "Dodongos Cavern MQ GS Larvae Room", DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[DODONGOS_CAVERN_MQ_GS_BACK_AREA] = ItemLocation::GSToken(RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA, 0x01, 0x01, "Dodongos Cavern MQ GS Back Room", DODONGOS_CAVERN_MQ_GS_BACK_AREA, {Category::cDodongosCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER] = ItemLocation::GSToken(0x02, 0x01, "Jabu Jabus Belly GS Lobby Basement Lower", JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER] = ItemLocation::GSToken(0x02, 0x02, "Jabu Jabus Belly GS Lobby Basement Upper", JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_GS_NEAR_BOSS] = ItemLocation::GSToken(0x02, 0x04, "Jabu Jabus Belly GS Near Boss", JABU_JABUS_BELLY_GS_NEAR_BOSS, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM] = ItemLocation::GSToken(0x02, 0x08, "Jabu Jabus Belly GS Water Switch Room", JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, 0x02, 0x01, "Jabu Jabus Belly GS Lobby Basement Lower", JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, 0x02, 0x02, "Jabu Jabus Belly GS Lobby Basement Upper", JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_GS_NEAR_BOSS] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, 0x02, 0x04, "Jabu Jabus Belly GS Near Boss", JABU_JABUS_BELLY_GS_NEAR_BOSS, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, 0x02, 0x08, "Jabu Jabus Belly GS Water Switch Room", JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM] = ItemLocation::GSToken(0x02, 0x04, "Jabu Jabus Belly MQ GS Tail Parasan Room", JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM] = ItemLocation::GSToken(0x02, 0x08, "Jabu Jabus Belly MQ GS Invisible Enemies Room", JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM] = ItemLocation::GSToken(0x02, 0x01, "Jabu Jabus Belly MQ GS Boomerang Chest Room", JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS] = ItemLocation::GSToken(0x02, 0x02, "Jabu Jabus Belly MQ GS Near Boss", JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, 0x02, 0x04, "Jabu Jabus Belly MQ GS Tail Parasan Room", JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, 0x02, 0x08, "Jabu Jabus Belly MQ GS Invisible Enemies Room", JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, 0x02, 0x01, "Jabu Jabus Belly MQ GS Boomerang Chest Room", JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS] = ItemLocation::GSToken(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, 0x02, 0x02, "Jabu Jabus Belly MQ GS Near Boss", JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, {Category::cJabuJabusBelly, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD] = ItemLocation::GSToken(0x03, 0x01, "Forest Temple GS Raised Island Courtyard", FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_GS_FIRST_ROOM] = ItemLocation::GSToken(0x03, 0x02, "Forest Temple GS First Room", FOREST_TEMPLE_GS_FIRST_ROOM, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD] = ItemLocation::GSToken(0x03, 0x04, "Forest Temple GS Level Island Courtyard", FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_GS_LOBBY] = ItemLocation::GSToken(0x03, 0x08, "Forest Temple GS Lobby", FOREST_TEMPLE_GS_LOBBY, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_GS_BASEMENT] = ItemLocation::GSToken(0x03, 0x10, "Forest Temple GS Basement", FOREST_TEMPLE_GS_BASEMENT, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD] = ItemLocation::GSToken(RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, 0x03, 0x01, "Forest Temple GS Raised Island Courtyard", FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_GS_FIRST_ROOM] = ItemLocation::GSToken(RC_FOREST_TEMPLE_GS_FIRST_ROOM, 0x03, 0x02, "Forest Temple GS First Room", FOREST_TEMPLE_GS_FIRST_ROOM, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD] = ItemLocation::GSToken(RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, 0x03, 0x04, "Forest Temple GS Level Island Courtyard", FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_GS_LOBBY] = ItemLocation::GSToken(RC_FOREST_TEMPLE_GS_LOBBY, 0x03, 0x08, "Forest Temple GS Lobby", FOREST_TEMPLE_GS_LOBBY, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_GS_BASEMENT] = ItemLocation::GSToken(RC_FOREST_TEMPLE_GS_BASEMENT, 0x03, 0x10, "Forest Temple GS Basement", FOREST_TEMPLE_GS_BASEMENT, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY] = ItemLocation::GSToken(0x03, 0x02, "Forest Temple MQ GS First Hallway", FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM] = ItemLocation::GSToken(0x03, 0x10, "Forest Temple MQ GS Block Push Room", FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD] = ItemLocation::GSToken(0x03, 0x01, "Forest Temple MQ GS Raised Island Courtyard", FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD] = ItemLocation::GSToken(0x03, 0x04, "Forest Temple MQ GS Level Island Courtyard", FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FOREST_TEMPLE_MQ_GS_WELL] = ItemLocation::GSToken(0x03, 0x08, "Forest Temple MQ GS Well", FOREST_TEMPLE_MQ_GS_WELL, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY] = ItemLocation::GSToken(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, 0x03, 0x02, "Forest Temple MQ GS First Hallway", FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM] = ItemLocation::GSToken(RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, 0x03, 0x10, "Forest Temple MQ GS Block Push Room", FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD] = ItemLocation::GSToken(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, 0x03, 0x01, "Forest Temple MQ GS Raised Island Courtyard", FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD] = ItemLocation::GSToken(RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, 0x03, 0x04, "Forest Temple MQ GS Level Island Courtyard", FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FOREST_TEMPLE_MQ_GS_WELL] = ItemLocation::GSToken(RC_FOREST_TEMPLE_MQ_GS_WELL, 0x03, 0x08, "Forest Temple MQ GS Well", FOREST_TEMPLE_MQ_GS_WELL, {Category::cForestTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM] = ItemLocation::GSToken(0x04, 0x01, "Fire Temple GS Song of Time Room", FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_GS_BOSS_KEY_LOOP] = ItemLocation::GSToken(0x04, 0x02, "Fire Temple GS Boss Key Loop", FIRE_TEMPLE_GS_BOSS_KEY_LOOP, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_GS_BOULDER_MAZE] = ItemLocation::GSToken(0x04, 0x04, "Fire Temple GS Boulder Maze", FIRE_TEMPLE_GS_BOULDER_MAZE, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_GS_SCARECROW_TOP] = ItemLocation::GSToken(0x04, 0x08, "Fire Temple GS Scarecrow Top", FIRE_TEMPLE_GS_SCARECROW_TOP, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_GS_SCARECROW_CLIMB] = ItemLocation::GSToken(0x04, 0x10, "Fire Temple GS Scarecrow Climb", FIRE_TEMPLE_GS_SCARECROW_CLIMB, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM] = ItemLocation::GSToken(RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, 0x04, 0x01, "Fire Temple GS Song of Time Room", FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_GS_BOSS_KEY_LOOP] = ItemLocation::GSToken(RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, 0x04, 0x02, "Fire Temple GS Boss Key Loop", FIRE_TEMPLE_GS_BOSS_KEY_LOOP, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_GS_BOULDER_MAZE] = ItemLocation::GSToken(RC_FIRE_TEMPLE_GS_BOULDER_MAZE, 0x04, 0x04, "Fire Temple GS Boulder Maze", FIRE_TEMPLE_GS_BOULDER_MAZE, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_GS_SCARECROW_TOP] = ItemLocation::GSToken(RC_FIRE_TEMPLE_GS_SCARECROW_TOP, 0x04, 0x08, "Fire Temple GS Scarecrow Top", FIRE_TEMPLE_GS_SCARECROW_TOP, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_GS_SCARECROW_CLIMB] = ItemLocation::GSToken(RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, 0x04, 0x10, "Fire Temple GS Scarecrow Climb", FIRE_TEMPLE_GS_SCARECROW_CLIMB, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE] = ItemLocation::GSToken(0x04, 0x02, "Fire Temple MQ GS Above Fire Wall Maze", FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER] = ItemLocation::GSToken(0x04, 0x08, "Fire Temple MQ GS Fire Wall Maze Center", FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR] = ItemLocation::GSToken(0x04, 0x01, "Fire Temple MQ GS Big Lava Room Open Door", FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM] = ItemLocation::GSToken(0x04, 0x10, "Fire Temple MQ GS Fire Wall Maze Side Room", FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE] = ItemLocation::GSToken(0x04, 0x04, "Fire Temple MQ GS Skull on Fire", FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE] = ItemLocation::GSToken(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE, 0x04, 0x02, "Fire Temple MQ GS Above Fire Wall Maze", FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER] = ItemLocation::GSToken(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, 0x04, 0x08, "Fire Temple MQ GS Fire Wall Maze Center", FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR] = ItemLocation::GSToken(RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, 0x04, 0x01, "Fire Temple MQ GS Big Lava Room Open Door", FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM] = ItemLocation::GSToken(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, 0x04, 0x10, "Fire Temple MQ GS Fire Wall Maze Side Room", FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE] = ItemLocation::GSToken(RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, 0x04, 0x04, "Fire Temple MQ GS Skull on Fire", FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, {Category::cFireTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[WATER_TEMPLE_GS_BEHIND_GATE] = ItemLocation::GSToken(0x05, 0x01, "Water Temple GS Behind Gate", WATER_TEMPLE_GS_BEHIND_GATE, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM] = ItemLocation::GSToken(0x05, 0x02, "Water Temple GS Falling Platform Room", WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_GS_CENTRAL_PILLAR] = ItemLocation::GSToken(0x05, 0x04, "Water Temple GS Central Pillar", WATER_TEMPLE_GS_CENTRAL_PILLAR, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST] = ItemLocation::GSToken(0x05, 0x08, "Water Temple GS Near Boss Key Chest", WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_GS_RIVER] = ItemLocation::GSToken(0x05, 0x10, "Water Temple GS River", WATER_TEMPLE_GS_RIVER, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_GS_BEHIND_GATE] = ItemLocation::GSToken(RC_WATER_TEMPLE_GS_BEHIND_GATE, 0x05, 0x01, "Water Temple GS Behind Gate", WATER_TEMPLE_GS_BEHIND_GATE, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM] = ItemLocation::GSToken(RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, 0x05, 0x02, "Water Temple GS Falling Platform Room", WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_GS_CENTRAL_PILLAR] = ItemLocation::GSToken(RC_WATER_TEMPLE_GS_CENTRAL_PILLAR, 0x05, 0x04, "Water Temple GS Central Pillar", WATER_TEMPLE_GS_CENTRAL_PILLAR, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST] = ItemLocation::GSToken(RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, 0x05, 0x08, "Water Temple GS Near Boss Key Chest", WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_GS_RIVER] = ItemLocation::GSToken(RC_WATER_TEMPLE_GS_RIVER, 0x05, 0x10, "Water Temple GS River", WATER_TEMPLE_GS_RIVER, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH] = ItemLocation::GSToken(0x05, 0x04, "Water Temple MQ GS Before Upper Water Switch", WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA] = ItemLocation::GSToken(0x05, 0x08, "Water Temple MQ GS Freestanding Key Area", WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY] = ItemLocation::GSToken(0x05, 0x01, "Water Temple MQ GS Lizalfos Hallway", WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_GS_RIVER] = ItemLocation::GSToken(0x05, 0x02, "Water Temple MQ GS River", WATER_TEMPLE_MQ_GS_RIVER, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH] = ItemLocation::GSToken(0x05, 0x10, "Water Temple MQ GS Triple Wall Torch", WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH] = ItemLocation::GSToken(RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, 0x05, 0x04, "Water Temple MQ GS Before Upper Water Switch", WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA] = ItemLocation::GSToken(RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, 0x05, 0x08, "Water Temple MQ GS Freestanding Key Area", WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY] = ItemLocation::GSToken(RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, 0x05, 0x01, "Water Temple MQ GS Lizalfos Hallway", WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_GS_RIVER] = ItemLocation::GSToken(RC_WATER_TEMPLE_MQ_GS_RIVER, 0x05, 0x02, "Water Temple MQ GS River", WATER_TEMPLE_MQ_GS_RIVER, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH] = ItemLocation::GSToken(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, 0x05, 0x10, "Water Temple MQ GS Triple Wall Torch", WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, {Category::cWaterTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM] = ItemLocation::GSToken(0x06, 0x01, "Spirit Temple GS Hall After Sun Block Room", SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_GS_BOULDER_ROOM] = ItemLocation::GSToken(0x06, 0x02, "Spirit Temple GS Boulder Room", SPIRIT_TEMPLE_GS_BOULDER_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_GS_LOBBY] = ItemLocation::GSToken(0x06, 0x04, "Spirit Temple GS Lobby", SPIRIT_TEMPLE_GS_LOBBY, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM] = ItemLocation::GSToken(0x06, 0x08, "Spirit Temple GS Sun on Floor Room", SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_GS_METAL_FENCE] = ItemLocation::GSToken(0x06, 0x10, "Spirit Temple GS Metal Fence", SPIRIT_TEMPLE_GS_METAL_FENCE, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, 0x06, 0x01, "Spirit Temple GS Hall After Sun Block Room", SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_GS_BOULDER_ROOM] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, 0x06, 0x02, "Spirit Temple GS Boulder Room", SPIRIT_TEMPLE_GS_BOULDER_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_GS_LOBBY] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_GS_LOBBY, 0x06, 0x04, "Spirit Temple GS Lobby", SPIRIT_TEMPLE_GS_LOBBY, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM, 0x06, 0x08, "Spirit Temple GS Sun on Floor Room", SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_GS_METAL_FENCE] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, 0x06, 0x10, "Spirit Temple GS Metal Fence", SPIRIT_TEMPLE_GS_METAL_FENCE, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM] = ItemLocation::GSToken(0x06, 0x08, "Spirit Temple MQ GS Symphony Room", SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM] = ItemLocation::GSToken(0x06, 0x02, "Spirit Temple MQ GS Leever Room", SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST] = ItemLocation::GSToken(0x06, 0x04, "Spirit Temple MQ GS Nine Thrones Room West", SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH] = ItemLocation::GSToken(0x06, 0x10, "Spirit Temple MQ GS Nine Thrones Room North", SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM] = ItemLocation::GSToken(0x06, 0x01, "Spirit Temple MQ GS Sun Block Room", SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, 0x06, 0x08, "Spirit Temple MQ GS Symphony Room", SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, 0x06, 0x02, "Spirit Temple MQ GS Leever Room", SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, 0x06, 0x04, "Spirit Temple MQ GS Nine Thrones Room West", SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, 0x06, 0x10, "Spirit Temple MQ GS Nine Thrones Room North", SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM] = ItemLocation::GSToken(RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, 0x06, 0x01, "Spirit Temple MQ GS Sun Block Room", SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, {Category::cSpiritTemple, Category::cSkulltula}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SHADOW_TEMPLE_GS_SINGLE_GIANT_POT] = ItemLocation::GSToken(0x07, 0x01, "Shadow Temple GS Single Giant Pot", SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM] = ItemLocation::GSToken(0x07, 0x02, "Shadow Temple GS Falling Spikes Room", SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT] = ItemLocation::GSToken(0x07, 0x04, "Shadow Temple GS Triple Giant Pot", SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM] = ItemLocation::GSToken(0x07, 0x08, "Shadow Temple GS Like Like Room", SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_GS_NEAR_SHIP] = ItemLocation::GSToken(0x07, 0x10, "Shadow Temple GS Near Ship", SHADOW_TEMPLE_GS_NEAR_SHIP, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_GS_SINGLE_GIANT_POT] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, 0x07, 0x01, "Shadow Temple GS Single Giant Pot", SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, 0x07, 0x02, "Shadow Temple GS Falling Spikes Room", SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, 0x07, 0x04, "Shadow Temple GS Triple Giant Pot", SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, 0x07, 0x08, "Shadow Temple GS Like Like Room", SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_GS_NEAR_SHIP] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, 0x07, 0x10, "Shadow Temple GS Near Ship", SHADOW_TEMPLE_GS_NEAR_SHIP, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM] = ItemLocation::GSToken(0x07, 0x02, "Shadow Temple MQ GS Falling Spikes Room", SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM] = ItemLocation::GSToken(0x07, 0x01, "Shadow Temple MQ GS Wind Hint Room", SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_GS_AFTER_WIND] = ItemLocation::GSToken(0x07, 0x08, "Shadow Temple MQ GS After Wind", SHADOW_TEMPLE_MQ_GS_AFTER_WIND, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_GS_AFTER_SHIP] = ItemLocation::GSToken(0x07, 0x10, "Shadow Temple MQ GS After Ship", SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[SHADOW_TEMPLE_MQ_GS_NEAR_BOSS] = ItemLocation::GSToken(0x07, 0x04, "Shadow Temple MQ GS Near Boss", SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, 0x07, 0x02, "Shadow Temple MQ GS Falling Spikes Room", SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, 0x07, 0x01, "Shadow Temple MQ GS Wind Hint Room", SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_GS_AFTER_WIND] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND, 0x07, 0x08, "Shadow Temple MQ GS After Wind", SHADOW_TEMPLE_MQ_GS_AFTER_WIND, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_GS_AFTER_SHIP] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, 0x07, 0x10, "Shadow Temple MQ GS After Ship", SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[SHADOW_TEMPLE_MQ_GS_NEAR_BOSS] = ItemLocation::GSToken(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, 0x07, 0x04, "Shadow Temple MQ GS Near Boss", SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, {Category::cShadowTemple, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE] = ItemLocation::GSToken(0x08, 0x01, "Bottom of the Well GS Like Like Cage", BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM] = ItemLocation::GSToken(0x08, 0x02, "Bottom of the Well GS East Inner Room", BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM] = ItemLocation::GSToken(0x08, 0x04, "Bottom of the Well GS West Inner Room", BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE] = ItemLocation::GSToken(RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, 0x08, 0x01, "Bottom of the Well GS Like Like Cage", BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM] = ItemLocation::GSToken(RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, 0x08, 0x02, "Bottom of the Well GS East Inner Room", BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM] = ItemLocation::GSToken(RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, 0x08, 0x04, "Bottom of the Well GS West Inner Room", BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT] = ItemLocation::GSToken(0x08, 0x01, "Bottom of the Well MQ GS Basement", BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM] = ItemLocation::GSToken(0x08, 0x04, "Bottom of the Well MQ GS Coffin Room", BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM] = ItemLocation::GSToken(0x08, 0x02, "Bottom of the Well MQ GS West Inner Room", BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT] = ItemLocation::GSToken(RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, 0x08, 0x01, "Bottom of the Well MQ GS Basement", BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM] = ItemLocation::GSToken(RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, 0x08, 0x04, "Bottom of the Well MQ GS Coffin Room", BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); + locationTable[BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM] = ItemLocation::GSToken(RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, 0x08, 0x02, "Bottom of the Well MQ GS West Inner Room", BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, {Category::cBottomOfTheWell, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BOTTOM_OF_THE_WELL); - locationTable[ICE_CAVERN_GS_PUSH_BLOCK_ROOM] = ItemLocation::GSToken(0x09, 0x01, "Ice Cavern GS Push Block Room", ICE_CAVERN_GS_PUSH_BLOCK_ROOM, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM] = ItemLocation::GSToken(0x09, 0x02, "Ice Cavern GS Spinning Scythe Room", ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_GS_HEART_PIECE_ROOM] = ItemLocation::GSToken(0x09, 0x04, "Ice Cavern GS Heart Piece Room", ICE_CAVERN_GS_HEART_PIECE_ROOM, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_GS_PUSH_BLOCK_ROOM] = ItemLocation::GSToken(RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, 0x09, 0x01, "Ice Cavern GS Push Block Room", ICE_CAVERN_GS_PUSH_BLOCK_ROOM, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM] = ItemLocation::GSToken(RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, 0x09, 0x02, "Ice Cavern GS Spinning Scythe Room", ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_GS_HEART_PIECE_ROOM] = ItemLocation::GSToken(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, 0x09, 0x04, "Ice Cavern GS Heart Piece Room", ICE_CAVERN_GS_HEART_PIECE_ROOM, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_MQ_GS_SCARECROW] = ItemLocation::GSToken(0x09, 0x01, "Ice Cavern MQ GS Scarecrow", ICE_CAVERN_MQ_GS_SCARECROW, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_MQ_GS_ICE_BLOCK] = ItemLocation::GSToken(0x09, 0x04, "Ice Cavern MQ GS Ice Block", ICE_CAVERN_MQ_GS_ICE_BLOCK, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[ICE_CAVERN_MQ_GS_RED_ICE] = ItemLocation::GSToken(0x09, 0x02, "Ice Cavern MQ GS Red Ice", ICE_CAVERN_MQ_GS_RED_ICE, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_GS_SCARECROW] = ItemLocation::GSToken(RC_ICE_CAVERN_MQ_GS_SCARECROW, 0x09, 0x01, "Ice Cavern MQ GS Scarecrow", ICE_CAVERN_MQ_GS_SCARECROW, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_GS_ICE_BLOCK] = ItemLocation::GSToken(RC_ICE_CAVERN_MQ_GS_ICE_BLOCK, 0x09, 0x04, "Ice Cavern MQ GS Ice Block", ICE_CAVERN_MQ_GS_ICE_BLOCK, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[ICE_CAVERN_MQ_GS_RED_ICE] = ItemLocation::GSToken(RC_ICE_CAVERN_MQ_GS_RED_ICE, 0x09, 0x02, "Ice Cavern MQ GS Red Ice", ICE_CAVERN_MQ_GS_RED_ICE, {Category::cIceCavern, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); //Overworld - locationTable[KF_GS_BEAN_PATCH] = ItemLocation::GSToken(0x0C, 0x01, "KF GS Bean Patch", KF_GS_BEAN_PATCH, {Category::cKokiriForest, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_GS_KNOW_IT_ALL_HOUSE] = ItemLocation::GSToken(0x0C, 0x02, "KF GS Know It All House", KF_GS_KNOW_IT_ALL_HOUSE, {Category::cKokiriForest, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_GS_HOUSE_OF_TWINS] = ItemLocation::GSToken(0x0C, 0x04, "KF GS House of Twins", KF_GS_HOUSE_OF_TWINS, {Category::cKokiriForest, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_KF_GS_BEAN_PATCH, 0x0C, 0x01, "KF GS Bean Patch", KF_GS_BEAN_PATCH, {Category::cKokiriForest, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_GS_KNOW_IT_ALL_HOUSE] = ItemLocation::GSToken(RC_KF_GS_KNOW_IT_ALL_HOUSE, 0x0C, 0x02, "KF GS Know It All House", KF_GS_KNOW_IT_ALL_HOUSE, {Category::cKokiriForest, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_GS_HOUSE_OF_TWINS] = ItemLocation::GSToken(RC_KF_GS_HOUSE_OF_TWINS, 0x0C, 0x04, "KF GS House of Twins", KF_GS_HOUSE_OF_TWINS, {Category::cKokiriForest, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[LW_GS_BEAN_PATCH_NEAR_BRIDGE] = ItemLocation::GSToken(0x0D, 0x01, "LW GS Bean Patch Near Bridge", LW_GS_BEAN_PATCH_NEAR_BRIDGE, {Category::cLostWoods, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_GS_BEAN_PATCH_NEAR_THEATER] = ItemLocation::GSToken(0x0D, 0x02, "LW GS Bean Patch Near Theater", LW_GS_BEAN_PATCH_NEAR_THEATER, {Category::cLostWoods, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[LW_GS_ABOVE_THEATER] = ItemLocation::GSToken(0x0D, 0x04, "LW GS Above Theater", LW_GS_ABOVE_THEATER, {Category::cLostWoods, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[SFM_GS] = ItemLocation::GSToken(0x0D, 0x08, "SFM GS", SFM_GS, {Category::cSacredForestMeadow, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_GS_BEAN_PATCH_NEAR_BRIDGE] = ItemLocation::GSToken(RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE, 0x0D, 0x01, "LW GS Bean Patch Near Bridge", LW_GS_BEAN_PATCH_NEAR_BRIDGE, {Category::cLostWoods, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_GS_BEAN_PATCH_NEAR_THEATER] = ItemLocation::GSToken(RC_LW_GS_BEAN_PATCH_NEAR_THEATER, 0x0D, 0x02, "LW GS Bean Patch Near Theater", LW_GS_BEAN_PATCH_NEAR_THEATER, {Category::cLostWoods, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[LW_GS_ABOVE_THEATER] = ItemLocation::GSToken(RC_LW_GS_ABOVE_THEATER, 0x0D, 0x04, "LW GS Above Theater", LW_GS_ABOVE_THEATER, {Category::cLostWoods, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[SFM_GS] = ItemLocation::GSToken(RC_SFM_GS, 0x0D, 0x08, "SFM GS", SFM_GS, {Category::cSacredForestMeadow, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[HF_GS_COW_GROTTO] = ItemLocation::GSToken(0x0A, 0x01, "HF GS Cow Grotto", HF_GS_COW_GROTTO, {Category::cHyruleField, Category::cSkulltula, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[HF_GS_NEAR_KAK_GROTTO] = ItemLocation::GSToken(0x0A, 0x02, "HF GS Near Kak Grotto", HF_GS_NEAR_KAK_GROTTO, {Category::cHyruleField, Category::cSkulltula, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_GS_COW_GROTTO] = ItemLocation::GSToken(RC_HF_GS_COW_GROTTO, 0x0A, 0x01, "HF GS Cow Grotto", HF_GS_COW_GROTTO, {Category::cHyruleField, Category::cSkulltula, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[HF_GS_NEAR_KAK_GROTTO] = ItemLocation::GSToken(RC_HF_GS_NEAR_KAK_GROTTO, 0x0A, 0x02, "HF GS Near Kak Grotto", HF_GS_NEAR_KAK_GROTTO, {Category::cHyruleField, Category::cSkulltula, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[LH_GS_BEAN_PATCH] = ItemLocation::GSToken(0x12, 0x01, "LH GS Bean Patch", LH_GS_BEAN_PATCH, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_GS_SMALL_ISLAND] = ItemLocation::GSToken(0x12, 0x02, "LH GS Small Island", LH_GS_SMALL_ISLAND, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_GS_LAB_WALL] = ItemLocation::GSToken(0x12, 0x04, "LH GS Lab Wall", LH_GS_LAB_WALL, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_GS_LAB_CRATE] = ItemLocation::GSToken(0x12, 0x08, "LH GS Lab Crate", LH_GS_LAB_CRATE, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[LH_GS_TREE] = ItemLocation::GSToken(0x12, 0x10, "LH GS Tree", LH_GS_TREE, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_LH_GS_BEAN_PATCH, 0x12, 0x01, "LH GS Bean Patch", LH_GS_BEAN_PATCH, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_GS_SMALL_ISLAND] = ItemLocation::GSToken(RC_LH_GS_SMALL_ISLAND, 0x12, 0x02, "LH GS Small Island", LH_GS_SMALL_ISLAND, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_GS_LAB_WALL] = ItemLocation::GSToken(RC_LH_GS_LAB_WALL, 0x12, 0x04, "LH GS Lab Wall", LH_GS_LAB_WALL, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_GS_LAB_CRATE] = ItemLocation::GSToken(RC_LH_GS_LAB_CRATE, 0x12, 0x08, "LH GS Lab Crate", LH_GS_LAB_CRATE, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); + locationTable[LH_GS_TREE] = ItemLocation::GSToken(RC_LH_GS_TREE, 0x12, 0x10, "LH GS Tree", LH_GS_TREE, {Category::cLakeHylia, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA); - locationTable[GV_GS_BEAN_PATCH] = ItemLocation::GSToken(0x13, 0x01, "GV GS Bean Patch", GV_GS_BEAN_PATCH, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_GS_SMALL_BRIDGE] = ItemLocation::GSToken(0x13, 0x02, "GV GS Small Bridge", GV_GS_SMALL_BRIDGE, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_GS_PILLAR] = ItemLocation::GSToken(0x13, 0x04, "GV GS Pillar", GV_GS_PILLAR, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GV_GS_BEHIND_TENT] = ItemLocation::GSToken(0x13, 0x08, "GV GS Behind Tent", GV_GS_BEHIND_TENT, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_GV_GS_BEAN_PATCH, 0x13, 0x01, "GV GS Bean Patch", GV_GS_BEAN_PATCH, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_GS_SMALL_BRIDGE] = ItemLocation::GSToken(RC_GV_GS_SMALL_BRIDGE, 0x13, 0x02, "GV GS Small Bridge", GV_GS_SMALL_BRIDGE, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_GS_PILLAR] = ItemLocation::GSToken(RC_GV_GS_PILLAR, 0x13, 0x04, "GV GS Pillar", GV_GS_PILLAR, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GV_GS_BEHIND_TENT] = ItemLocation::GSToken(RC_GV_GS_BEHIND_TENT, 0x13, 0x08, "GV GS Behind Tent", GV_GS_BEHIND_TENT, {Category::cGerudoValley, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_GS_ARCHERY_RANGE] = ItemLocation::GSToken(0x14, 0x01, "GF GS Archery Range", GF_GS_ARCHERY_RANGE, {Category::cGerudoFortress, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[GF_GS_TOP_FLOOR] = ItemLocation::GSToken(0x14, 0x02, "GF GS Top Floor", GF_GS_TOP_FLOOR, {Category::cGerudoFortress, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_GS_ARCHERY_RANGE] = ItemLocation::GSToken(RC_GF_GS_ARCHERY_RANGE, 0x14, 0x01, "GF GS Archery Range", GF_GS_ARCHERY_RANGE, {Category::cGerudoFortress, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[GF_GS_TOP_FLOOR] = ItemLocation::GSToken(RC_GF_GS_TOP_FLOOR, 0x14, 0x02, "GF GS Top Floor", GF_GS_TOP_FLOOR, {Category::cGerudoFortress, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[WASTELAND_GS] = ItemLocation::GSToken(0x15, 0x02, "Wasteland GS", WASTELAND_GS, {Category::cHauntedWasteland, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[COLOSSUS_GS_BEAN_PATCH] = ItemLocation::GSToken(0x15, 0x01, "Colossus GS Bean Patch", COLOSSUS_GS_BEAN_PATCH, {Category::cDesertColossus, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[COLOSSUS_GS_HILL] = ItemLocation::GSToken(0x15, 0x04, "Colossus GS Hill", COLOSSUS_GS_HILL, {Category::cDesertColossus, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[COLOSSUS_GS_TREE] = ItemLocation::GSToken(0x15, 0x08, "Colossus GS Tree", COLOSSUS_GS_TREE, {Category::cDesertColossus, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[WASTELAND_GS] = ItemLocation::GSToken(RC_WASTELAND_GS, 0x15, 0x02, "Wasteland GS", WASTELAND_GS, {Category::cHauntedWasteland, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[COLOSSUS_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_COLOSSUS_GS_BEAN_PATCH, 0x15, 0x01, "Colossus GS Bean Patch", COLOSSUS_GS_BEAN_PATCH, {Category::cDesertColossus, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[COLOSSUS_GS_HILL] = ItemLocation::GSToken(RC_COLOSSUS_GS_HILL, 0x15, 0x04, "Colossus GS Hill", COLOSSUS_GS_HILL, {Category::cDesertColossus, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[COLOSSUS_GS_TREE] = ItemLocation::GSToken(RC_COLOSSUS_GS_TREE, 0x15, 0x08, "Colossus GS Tree", COLOSSUS_GS_TREE, {Category::cDesertColossus, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[OGC_GS] = ItemLocation::GSToken(0x0E, 0x01, "OGC GS", OGC_GS, {Category::cOutsideGanonsCastle, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[HC_GS_STORMS_GROTTO] = ItemLocation::GSToken(0x0E, 0x02, "HC GS Storms Grotto", HC_GS_STORMS_GROTTO, {Category::cHyruleCastle, Category::cSkulltula, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[HC_GS_TREE] = ItemLocation::GSToken(0x0E, 0x04, "HC GS Tree", HC_GS_TREE, {Category::cHyruleCastle, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_GS_GUARD_HOUSE] = ItemLocation::GSToken(0x0E, 0x08, "Market GS Guard House", MARKET_GS_GUARD_HOUSE, {Category::cInnerMarket, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[OGC_GS] = ItemLocation::GSToken(RC_OGC_GS, 0x0E, 0x01, "OGC GS", OGC_GS, {Category::cOutsideGanonsCastle, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[HC_GS_STORMS_GROTTO] = ItemLocation::GSToken(RC_HC_GS_STORMS_GROTTO, 0x0E, 0x02, "HC GS Storms Grotto", HC_GS_STORMS_GROTTO, {Category::cHyruleCastle, Category::cSkulltula, Category::cGrotto}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[HC_GS_TREE] = ItemLocation::GSToken(RC_HC_GS_TREE, 0x0E, 0x04, "HC GS Tree", HC_GS_TREE, {Category::cHyruleCastle, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_GS_GUARD_HOUSE] = ItemLocation::GSToken(RC_MARKET_GS_GUARD_HOUSE, 0x0E, 0x08, "Market GS Guard House", MARKET_GS_GUARD_HOUSE, {Category::cInnerMarket, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[KAK_GS_HOUSE_UNDER_CONSTRUCTION] = ItemLocation::GSToken(0x10, 0x08, "Kak GS House Under Construction", KAK_GS_HOUSE_UNDER_CONSTRUCTION, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_GS_SKULLTULA_HOUSE] = ItemLocation::GSToken(0x10, 0x10, "Kak GS Skulltula House", KAK_GS_SKULLTULA_HOUSE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_GS_GUARDS_HOUSE] = ItemLocation::GSToken(0x10, 0x02, "Kak GS Guards House", KAK_GS_GUARDS_HOUSE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_GS_TREE] = ItemLocation::GSToken(0x10, 0x20, "Kak GS Tree", KAK_GS_TREE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_GS_WATCHTOWER] = ItemLocation::GSToken(0x10, 0x04, "Kak GS Watchtower", KAK_GS_WATCHTOWER, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_GS_ABOVE_IMPAS_HOUSE] = ItemLocation::GSToken(0x10, 0x40, "Kak GS Above Impas House", KAK_GS_ABOVE_IMPAS_HOUSE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_GS_HOUSE_UNDER_CONSTRUCTION] = ItemLocation::GSToken(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, 0x10, 0x08, "Kak GS House Under Construction", KAK_GS_HOUSE_UNDER_CONSTRUCTION, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_GS_SKULLTULA_HOUSE] = ItemLocation::GSToken(RC_KAK_GS_SKULLTULA_HOUSE, 0x10, 0x10, "Kak GS Skulltula House", KAK_GS_SKULLTULA_HOUSE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_GS_GUARDS_HOUSE] = ItemLocation::GSToken(RC_KAK_GS_GUARDS_HOUSE, 0x10, 0x02, "Kak GS Guards House", KAK_GS_GUARDS_HOUSE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_GS_TREE] = ItemLocation::GSToken(RC_KAK_GS_TREE, 0x10, 0x20, "Kak GS Tree", KAK_GS_TREE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_GS_WATCHTOWER] = ItemLocation::GSToken(RC_KAK_GS_WATCHTOWER, 0x10, 0x04, "Kak GS Watchtower", KAK_GS_WATCHTOWER, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_GS_ABOVE_IMPAS_HOUSE] = ItemLocation::GSToken(RC_KAK_GS_ABOVE_IMPAS_HOUSE, 0x10, 0x40, "Kak GS Above Impas House", KAK_GS_ABOVE_IMPAS_HOUSE, {Category::cKakarikoVillage, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_GS_WALL] = ItemLocation::GSToken(0x10, 0x80, "Graveyard GS Wall", GRAVEYARD_GS_WALL, {Category::cGraveyard, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[GRAVEYARD_GS_BEAN_PATCH] = ItemLocation::GSToken(0x10, 0x01, "Graveyard GS Bean Patch", GRAVEYARD_GS_BEAN_PATCH, {Category::cGraveyard, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_GS_WALL] = ItemLocation::GSToken(RC_GRAVEYARD_GS_WALL, 0x10, 0x80, "Graveyard GS Wall", GRAVEYARD_GS_WALL, {Category::cGraveyard, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[GRAVEYARD_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_GRAVEYARD_GS_BEAN_PATCH, 0x10, 0x01, "Graveyard GS Bean Patch", GRAVEYARD_GS_BEAN_PATCH, {Category::cGraveyard, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[DMC_GS_BEAN_PATCH] = ItemLocation::GSToken(0x0F, 0x01, "DMC GS Bean Patch", DMC_GS_BEAN_PATCH, {Category::cDeathMountainCrater, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_GS_CRATE] = ItemLocation::GSToken(0x0F, 0x80, "DMC GS Crate", DMC_GS_CRATE, {Category::cDeathMountainCrater, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_DMC_GS_BEAN_PATCH, 0x0F, 0x01, "DMC GS Bean Patch", DMC_GS_BEAN_PATCH, {Category::cDeathMountainCrater, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_GS_CRATE] = ItemLocation::GSToken(RC_DMC_GS_CRATE, 0x0F, 0x80, "DMC GS Crate", DMC_GS_CRATE, {Category::cDeathMountainCrater, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_GS_BEAN_PATCH] = ItemLocation::GSToken(0x0F, 0x02, "DMT GS Bean Patch", DMT_GS_BEAN_PATCH, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_GS_NEAR_KAK] = ItemLocation::GSToken(0x0F, 0x04, "DMT GS Near Kak", DMT_GS_NEAR_KAK, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_GS_ABOVE_DODONGOS_CAVERN] = ItemLocation::GSToken(0x0F, 0x08, "DMT GS Above Dodongos Cavern", DMT_GS_ABOVE_DODONGOS_CAVERN, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMT_GS_FALLING_ROCKS_PATH] = ItemLocation::GSToken(0x0F, 0x10, "DMT GS Falling Rocks Path", DMT_GS_FALLING_ROCKS_PATH, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_GS_BEAN_PATCH] = ItemLocation::GSToken(RC_DMT_GS_BEAN_PATCH, 0x0F, 0x02, "DMT GS Bean Patch", DMT_GS_BEAN_PATCH, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_GS_NEAR_KAK] = ItemLocation::GSToken(RC_DMT_GS_NEAR_KAK, 0x0F, 0x04, "DMT GS Near Kak", DMT_GS_NEAR_KAK, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_GS_ABOVE_DODONGOS_CAVERN] = ItemLocation::GSToken(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, 0x0F, 0x08, "DMT GS Above Dodongos Cavern", DMT_GS_ABOVE_DODONGOS_CAVERN, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMT_GS_FALLING_ROCKS_PATH] = ItemLocation::GSToken(RC_DMT_GS_FALLING_ROCKS_PATH, 0x0F, 0x10, "DMT GS Falling Rocks Path", DMT_GS_FALLING_ROCKS_PATH, {Category::cDeathMountainTrail, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[GC_GS_CENTER_PLATFORM] = ItemLocation::GSToken(0x0F, 0x20, "GC GS Center Platform", GC_GS_CENTER_PLATFORM, {Category::cGoronCity, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_GS_BOULDER_MAZE] = ItemLocation::GSToken(0x0F, 0x40, "GC GS Boulder Maze", GC_GS_BOULDER_MAZE, {Category::cGoronCity, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_GS_CENTER_PLATFORM] = ItemLocation::GSToken(RC_GC_GS_CENTER_PLATFORM, 0x0F, 0x20, "GC GS Center Platform", GC_GS_CENTER_PLATFORM, {Category::cGoronCity, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_GS_BOULDER_MAZE] = ItemLocation::GSToken(RC_GC_GS_BOULDER_MAZE, 0x0F, 0x40, "GC GS Boulder Maze", GC_GS_BOULDER_MAZE, {Category::cGoronCity, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[ZR_GS_LADDER] = ItemLocation::GSToken(0x11, 0x01, "ZR GS Ladder", ZR_GS_LADDER, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_GS_TREE] = ItemLocation::GSToken(0x11, 0x02, "ZR GS Tree", ZR_GS_TREE, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_GS_ABOVE_BRIDGE] = ItemLocation::GSToken(0x11, 0x08, "ZR GS Above Bridge", ZR_GS_ABOVE_BRIDGE, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZR_GS_NEAR_RAISED_GROTTOS] = ItemLocation::GSToken(0x11, 0x10, "ZR GS Near Raised Grottos", ZR_GS_NEAR_RAISED_GROTTOS, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_GS_LADDER] = ItemLocation::GSToken(RC_ZR_GS_LADDER, 0x11, 0x01, "ZR GS Ladder", ZR_GS_LADDER, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_GS_TREE] = ItemLocation::GSToken(RC_ZR_GS_TREE, 0x11, 0x02, "ZR GS Tree", ZR_GS_TREE, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_GS_ABOVE_BRIDGE] = ItemLocation::GSToken(RC_ZR_GS_ABOVE_BRIDGE, 0x11, 0x08, "ZR GS Above Bridge", ZR_GS_ABOVE_BRIDGE, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); + locationTable[ZR_GS_NEAR_RAISED_GROTTOS] = ItemLocation::GSToken(RC_ZR_GS_NEAR_RAISED_GROTTOS, 0x11, 0x10, "ZR GS Near Raised Grottos", ZR_GS_NEAR_RAISED_GROTTOS, {Category::cZorasRiver, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER); - locationTable[ZD_GS_FROZEN_WATERFALL] = ItemLocation::GSToken(0x11, 0x40, "ZD GS Frozen Waterfall", ZD_GS_FROZEN_WATERFALL, {Category::cZorasDomain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZF_GS_ABOVE_THE_LOG] = ItemLocation::GSToken(0x11, 0x04, "ZF GS Above The Log", ZF_GS_ABOVE_THE_LOG, {Category::cZorasFountain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZF_GS_HIDDEN_CAVE] = ItemLocation::GSToken(0x11, 0x20, "ZF GS Hidden Cave", ZF_GS_HIDDEN_CAVE, {Category::cZorasFountain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZF_GS_TREE] = ItemLocation::GSToken(0x11, 0x80, "ZF GS Tree", ZF_GS_TREE, {Category::cZorasFountain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_GS_FROZEN_WATERFALL] = ItemLocation::GSToken(RC_ZD_GS_FROZEN_WATERFALL, 0x11, 0x40, "ZD GS Frozen Waterfall", ZD_GS_FROZEN_WATERFALL, {Category::cZorasDomain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZF_GS_ABOVE_THE_LOG] = ItemLocation::GSToken(RC_ZF_GS_ABOVE_THE_LOG, 0x11, 0x04, "ZF GS Above The Log", ZF_GS_ABOVE_THE_LOG, {Category::cZorasFountain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZF_GS_HIDDEN_CAVE] = ItemLocation::GSToken(RC_ZF_GS_HIDDEN_CAVE, 0x11, 0x20, "ZF GS Hidden Cave", ZF_GS_HIDDEN_CAVE, {Category::cZorasFountain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZF_GS_TREE] = ItemLocation::GSToken(RC_ZF_GS_TREE, 0x11, 0x80, "ZF GS Tree", ZF_GS_TREE, {Category::cZorasFountain, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[LLR_GS_BACK_WALL] = ItemLocation::GSToken(0x0B, 0x01, "LLR GS Back Wall", LLR_GS_BACK_WALL, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_GS_RAIN_SHED] = ItemLocation::GSToken(0x0B, 0x02, "LLR GS Rain Shed", LLR_GS_RAIN_SHED, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_GS_HOUSE_WINDOW] = ItemLocation::GSToken(0x0B, 0x04, "LLR GS House Window", LLR_GS_HOUSE_WINDOW, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_GS_TREE] = ItemLocation::GSToken(0x0B, 0x08, "LLR GS Tree", LLR_GS_TREE, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_GS_BACK_WALL] = ItemLocation::GSToken(RC_LLR_GS_BACK_WALL, 0x0B, 0x01, "LLR GS Back Wall", LLR_GS_BACK_WALL, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_GS_RAIN_SHED] = ItemLocation::GSToken(RC_LLR_GS_RAIN_SHED, 0x0B, 0x02, "LLR GS Rain Shed", LLR_GS_RAIN_SHED, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_GS_HOUSE_WINDOW] = ItemLocation::GSToken(RC_LLR_GS_HOUSE_WINDOW, 0x0B, 0x04, "LLR GS House Window", LLR_GS_HOUSE_WINDOW, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_GS_TREE] = ItemLocation::GSToken(RC_LLR_GS_TREE, 0x0B, 0x08, "LLR GS Tree", LLR_GS_TREE, {Category::cLonLonRanch, Category::cSkulltula,}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); /*------------------------------- --- BOSSES --- -------------------------------*/ - locationTable[LINKS_POCKET] = ItemLocation::Reward (0xFF, 0xFF, "Link's Pocket", LINKS_POCKET, LIGHT_MEDALLION, {}, SpoilerCollectionCheck::AlwaysCollected(), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[QUEEN_GOHMA] = ItemLocation::Reward (0xFF, DUNGEON_DEKU_TREE, "Queen Gohma", QUEEN_GOHMA, KOKIRI_EMERALD, {}, SpoilerCollectionCheck::EventChkInf(0x09), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[KING_DODONGO] = ItemLocation::Reward (0xFF, DUNGEON_DODONGOS_CAVERN, "King Dodongo", KING_DODONGO, GORON_RUBY, {}, SpoilerCollectionCheck::EventChkInf(0x25), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[BARINADE] = ItemLocation::Reward (0xFF, DUNGEON_JABUJABUS_BELLY, "Barinade", BARINADE, ZORA_SAPPHIRE, {}, SpoilerCollectionCheck::EventChkInf(0x37), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[PHANTOM_GANON] = ItemLocation::Reward (0xFF, DUNGEON_FOREST_TEMPLE, "Phantom Ganon", PHANTOM_GANON, FOREST_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x48), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[VOLVAGIA] = ItemLocation::Reward (0xFF, DUNGEON_FIRE_TEMPLE, "Volvagia", VOLVAGIA, FIRE_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x49), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[MORPHA] = ItemLocation::Reward (0xFF, DUNGEON_WATER_TEMPLE, "Morpha", MORPHA, WATER_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x4A), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[TWINROVA] = ItemLocation::Reward (0xFF, DUNGEON_SPIRIT_TEMPLE, "Twinrova", TWINROVA, SPIRIT_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x47), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[BONGO_BONGO] = ItemLocation::Reward (0xFF, DUNGEON_SHADOW_TEMPLE, "Bongo Bongo", BONGO_BONGO, SHADOW_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x46), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); - locationTable[GANON] = ItemLocation::Reward (0xFF, 0xF0, "Ganon", NONE, TRIFORCE, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[LINKS_POCKET] = ItemLocation::Reward (RC_LINKS_POCKET, 0xFF, 0xFF, "Link's Pocket", LINKS_POCKET, LIGHT_MEDALLION, {}, SpoilerCollectionCheck::AlwaysCollected(), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[QUEEN_GOHMA] = ItemLocation::Reward (RC_QUEEN_GOHMA, 0xFF, DUNGEON_DEKU_TREE, "Queen Gohma", QUEEN_GOHMA, KOKIRI_EMERALD, {}, SpoilerCollectionCheck::EventChkInf(0x09), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[KING_DODONGO] = ItemLocation::Reward (RC_KING_DODONGO, 0xFF, DUNGEON_DODONGOS_CAVERN, "King Dodongo", KING_DODONGO, GORON_RUBY, {}, SpoilerCollectionCheck::EventChkInf(0x25), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[BARINADE] = ItemLocation::Reward (RC_BARINADE, 0xFF, DUNGEON_JABUJABUS_BELLY, "Barinade", BARINADE, ZORA_SAPPHIRE, {}, SpoilerCollectionCheck::EventChkInf(0x37), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[PHANTOM_GANON] = ItemLocation::Reward (RC_PHANTOM_GANON, 0xFF, DUNGEON_FOREST_TEMPLE, "Phantom Ganon", PHANTOM_GANON, FOREST_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x48), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[VOLVAGIA] = ItemLocation::Reward (RC_VOLVAGIA, 0xFF, DUNGEON_FIRE_TEMPLE, "Volvagia", VOLVAGIA, FIRE_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x49), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[MORPHA] = ItemLocation::Reward (RC_MORPHA, 0xFF, DUNGEON_WATER_TEMPLE, "Morpha", MORPHA, WATER_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x4A), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[TWINROVA] = ItemLocation::Reward (RC_TWINROVA, 0xFF, DUNGEON_SPIRIT_TEMPLE, "Twinrova", TWINROVA, SPIRIT_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x47), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[BONGO_BONGO] = ItemLocation::Reward (RC_BONGO_BONGO, 0xFF, DUNGEON_SHADOW_TEMPLE, "Bongo Bongo", BONGO_BONGO, SHADOW_MEDALLION, {}, SpoilerCollectionCheck::EventChkInf(0x46), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[GANON] = ItemLocation::Reward (RC_GANON, 0xFF, 0xF0, "Ganon", NONE, TRIFORCE, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); /*------------------------------- ---HEART CONTAINERS --- -------------------------------*/ - locationTable[DEKU_TREE_QUEEN_GOHMA_HEART] = ItemLocation::Base (0x11, 0x4F, "Deku Tree Queen Gohma Heart Container", DEKU_TREE_QUEEN_GOHMA_HEART, HEART_CONTAINER, {Category::cDekuTree, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x11, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); - locationTable[DODONGOS_CAVERN_KING_DODONGO_HEART] = ItemLocation::Base (0x12, 0x4F, "Dodongos Cavern King Dodongo Heart Container", DODONGOS_CAVERN_KING_DODONGO_HEART, HEART_CONTAINER, {Category::cDodongosCavern, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x12, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); - locationTable[JABU_JABUS_BELLY_BARINADE_HEART] = ItemLocation::Base (0x13, 0x4F, "Jabu Jabus Belly Barinade Heart Container", JABU_JABUS_BELLY_BARINADE_HEART, HEART_CONTAINER, {Category::cJabuJabusBelly, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x13, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); - locationTable[FOREST_TEMPLE_PHANTOM_GANON_HEART] = ItemLocation::Base (0x14, 0x4F, "Forest Temple Phantom Ganon Heart Container", FOREST_TEMPLE_PHANTOM_GANON_HEART, HEART_CONTAINER, {Category::cForestTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x14, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); - locationTable[FIRE_TEMPLE_VOLVAGIA_HEART] = ItemLocation::Base (0x15, 0x4F, "Fire Temple Volvagia Heart Container", FIRE_TEMPLE_VOLVAGIA_HEART, HEART_CONTAINER, {Category::cFireTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x15, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); - locationTable[WATER_TEMPLE_MORPHA_HEART] = ItemLocation::Base (0x16, 0x4F, "Water Temple Morpha Heart Container", WATER_TEMPLE_MORPHA_HEART, HEART_CONTAINER, {Category::cWaterTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x16, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); - locationTable[SPIRIT_TEMPLE_TWINROVA_HEART] = ItemLocation::Base (0x17, 0x4F, "Spirit Temple Twinrova Heart Container", SPIRIT_TEMPLE_TWINROVA_HEART, HEART_CONTAINER, {Category::cSpiritTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x17, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); - locationTable[SHADOW_TEMPLE_BONGO_BONGO_HEART] = ItemLocation::Base (0x18, 0x4F, "Shadow Temple Bongo Bongo Heart Container", SHADOW_TEMPLE_BONGO_BONGO_HEART, HEART_CONTAINER, {Category::cShadowTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x18, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); + locationTable[DEKU_TREE_QUEEN_GOHMA_HEART] = ItemLocation::Base (RC_DEKU_TREE_QUEEN_GOHMA_HEART, 0x11, 0x4F, "Deku Tree Queen Gohma Heart Container", DEKU_TREE_QUEEN_GOHMA_HEART, HEART_CONTAINER, {Category::cDekuTree, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x11, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DEKU_TREE); + locationTable[DODONGOS_CAVERN_KING_DODONGO_HEART] = ItemLocation::Base (RC_DODONGOS_CAVERN_KING_DODONGO_HEART, 0x12, 0x4F, "Dodongos Cavern King Dodongo Heart Container", DODONGOS_CAVERN_KING_DODONGO_HEART, HEART_CONTAINER, {Category::cDodongosCavern, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x12, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN); + locationTable[JABU_JABUS_BELLY_BARINADE_HEART] = ItemLocation::Base (RC_JABU_JABUS_BELLY_BARINADE_HEART, 0x13, 0x4F, "Jabu Jabus Belly Barinade Heart Container", JABU_JABUS_BELLY_BARINADE_HEART, HEART_CONTAINER, {Category::cJabuJabusBelly, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x13, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[FOREST_TEMPLE_PHANTOM_GANON_HEART] = ItemLocation::Base (RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, 0x14, 0x4F, "Forest Temple Phantom Ganon Heart Container", FOREST_TEMPLE_PHANTOM_GANON_HEART, HEART_CONTAINER, {Category::cForestTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x14, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FOREST_TEMPLE); + locationTable[FIRE_TEMPLE_VOLVAGIA_HEART] = ItemLocation::Base (RC_FIRE_TEMPLE_VOLVAGIA_HEART, 0x15, 0x4F, "Fire Temple Volvagia Heart Container", FIRE_TEMPLE_VOLVAGIA_HEART, HEART_CONTAINER, {Category::cFireTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x15, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_FIRE_TEMPLE); + locationTable[WATER_TEMPLE_MORPHA_HEART] = ItemLocation::Base (RC_WATER_TEMPLE_MORPHA_HEART, 0x16, 0x4F, "Water Temple Morpha Heart Container", WATER_TEMPLE_MORPHA_HEART, HEART_CONTAINER, {Category::cWaterTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x16, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WATER_TEMPLE); + locationTable[SPIRIT_TEMPLE_TWINROVA_HEART] = ItemLocation::Base (RC_SPIRIT_TEMPLE_TWINROVA_HEART, 0x17, 0x4F, "Spirit Temple Twinrova Heart Container", SPIRIT_TEMPLE_TWINROVA_HEART, HEART_CONTAINER, {Category::cSpiritTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x17, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SPIRIT_TEMPLE); + locationTable[SHADOW_TEMPLE_BONGO_BONGO_HEART] = ItemLocation::Base (RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, 0x18, 0x4F, "Shadow Temple Bongo Bongo Heart Container", SHADOW_TEMPLE_BONGO_BONGO_HEART, HEART_CONTAINER, {Category::cShadowTemple, Category::cBossHeart, Category::cSongDungeonReward}, SpoilerCollectionCheck::Collectable(0x18, 0x1F), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SHADOW_TEMPLE); /*------------------------------- --- CUTSCENES --- -------------------------------*/ - locationTable[TOT_LIGHT_ARROWS_CUTSCENE] = ItemLocation::Delayed(0xFF, 0x01, "ToT Light Arrow Cutscene", TOT_LIGHT_ARROWS_CUTSCENE, LIGHT_ARROWS, {Category::cTempleOfTime, Category::cMarket}, SpoilerCollectionCheck::EventChkInf(0xC4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[LW_GIFT_FROM_SARIA] = ItemLocation::Delayed(0xFF, 0x02, "LW Gift From Saria", LW_GIFT_FROM_SARIA, PROGRESSIVE_OCARINA, {Category::cLostWoods, Category::cForest}, SpoilerCollectionCheck::EventChkInf(0xC1), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[ZF_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(0xFF, 0x10, "ZF Great Fairy Reward", ZF_GREAT_FAIRY_REWARD, FARORES_WIND, {Category::cZorasFountain, Category::cFairies}, SpoilerCollectionCheck::ItemGetInf(16), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[HC_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(0xFF, 0x11, "HC Great Fairy Reward", HC_GREAT_FAIRY_REWARD, DINS_FIRE, {Category::cHyruleCastle, Category::cMarket, Category::cFairies}, SpoilerCollectionCheck::ItemGetInf(17), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[COLOSSUS_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(0xFF, 0x12, "Colossus Great Fairy Reward", COLOSSUS_GREAT_FAIRY_REWARD, NAYRUS_LOVE, {Category::cDesertColossus, Category::cFairies}, SpoilerCollectionCheck::ItemGetInf(18), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[DMT_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(0xFF, 0x13, "DMT Great Fairy Reward", DMT_GREAT_FAIRY_REWARD, PROGRESSIVE_MAGIC_METER, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cFairies}, SpoilerCollectionCheck::Chest(0x3B, 0x00), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[DMC_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(0xFF, 0x14, "DMC Great Fairy Reward", DMC_GREAT_FAIRY_REWARD, PROGRESSIVE_MAGIC_METER, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cFairies}, SpoilerCollectionCheck::Chest(0x3B, 0x01), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[OGC_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(0xFF, 0x15, "OGC Great Fairy Reward", OGC_GREAT_FAIRY_REWARD, DOUBLE_DEFENSE, {Category::cOutsideGanonsCastle, Category::cFairies}, SpoilerCollectionCheck::Chest(0x3B, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); + locationTable[TOT_LIGHT_ARROWS_CUTSCENE] = ItemLocation::Delayed(RC_TOT_LIGHT_ARROWS_CUTSCENE, 0xFF, 0x01, "ToT Light Arrow Cutscene", TOT_LIGHT_ARROWS_CUTSCENE, LIGHT_ARROWS, {Category::cTempleOfTime, Category::cMarket}, SpoilerCollectionCheck::EventChkInf(0xC4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[LW_GIFT_FROM_SARIA] = ItemLocation::Delayed(RC_LW_GIFT_FROM_SARIA, 0xFF, 0x02, "LW Gift From Saria", LW_GIFT_FROM_SARIA, PROGRESSIVE_OCARINA, {Category::cLostWoods, Category::cForest}, SpoilerCollectionCheck::EventChkInf(0xC1), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[ZF_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(RC_ZF_GREAT_FAIRY_REWARD, 0xFF, 0x10, "ZF Great Fairy Reward", ZF_GREAT_FAIRY_REWARD, FARORES_WIND, {Category::cZorasFountain, Category::cFairies}, SpoilerCollectionCheck::ItemGetInf(16), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[HC_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(RC_HC_GREAT_FAIRY_REWARD, 0xFF, 0x11, "HC Great Fairy Reward", HC_GREAT_FAIRY_REWARD, DINS_FIRE, {Category::cHyruleCastle, Category::cMarket, Category::cFairies}, SpoilerCollectionCheck::ItemGetInf(17), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[COLOSSUS_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(RC_COLOSSUS_GREAT_FAIRY_REWARD, 0xFF, 0x12, "Colossus Great Fairy Reward", COLOSSUS_GREAT_FAIRY_REWARD, NAYRUS_LOVE, {Category::cDesertColossus, Category::cFairies}, SpoilerCollectionCheck::ItemGetInf(18), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[DMT_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(RC_DMT_GREAT_FAIRY_REWARD, 0xFF, 0x13, "DMT Great Fairy Reward", DMT_GREAT_FAIRY_REWARD, PROGRESSIVE_MAGIC_METER, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cFairies}, SpoilerCollectionCheck::Chest(0x3B, 0x00), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[DMC_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(RC_DMC_GREAT_FAIRY_REWARD, 0xFF, 0x14, "DMC Great Fairy Reward", DMC_GREAT_FAIRY_REWARD, PROGRESSIVE_MAGIC_METER, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cFairies}, SpoilerCollectionCheck::Chest(0x3B, 0x01), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[OGC_GREAT_FAIRY_REWARD] = ItemLocation::Delayed(RC_OGC_GREAT_FAIRY_REWARD, 0xFF, 0x15, "OGC Great Fairy Reward", OGC_GREAT_FAIRY_REWARD, DOUBLE_DEFENSE, {Category::cOutsideGanonsCastle, Category::cFairies}, SpoilerCollectionCheck::Chest(0x3B, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE); - locationTable[SHEIK_IN_FOREST] = ItemLocation::Delayed(0xFF, 0x20, "Sheik in Forest", SHEIK_IN_FOREST, MINUET_OF_FOREST, {Category::cSacredForestMeadow, Category::cForest, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x50), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[SHEIK_IN_CRATER] = ItemLocation::Delayed(0xFF, 0x21, "Sheik in Crater", SHEIK_IN_CRATER, BOLERO_OF_FIRE, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x51), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[SHEIK_IN_ICE_CAVERN] = ItemLocation::Delayed(0xFF, 0x22, "Sheik in Ice Cavern", SHEIK_IN_ICE_CAVERN, SERENADE_OF_WATER, {Category::cIceCavern, Category::cSong, Category::cSongDungeonReward}, SpoilerCollectionCheck::EventChkInf(0x52), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); - locationTable[SHEIK_AT_COLOSSUS] = ItemLocation::Delayed(0xFF, 0x23, "Sheik at Colossus", SHEIK_AT_COLOSSUS, REQUIEM_OF_SPIRIT, {Category::cDesertColossus, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0xAC), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[SHEIK_IN_KAKARIKO] = ItemLocation::Delayed(0xFF, 0x24, "Sheik in Kakariko", SHEIK_IN_KAKARIKO, NOCTURNE_OF_SHADOW, {Category::cKakarikoVillage, Category::cKakariko, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0xAA), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[SHEIK_AT_TEMPLE] = ItemLocation::Delayed(0xFF, 0x25, "Sheik at Temple", SHEIK_AT_TEMPLE, PRELUDE_OF_LIGHT, {Category::cTempleOfTime, Category::cMarket, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x55), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[SONG_FROM_IMPA] = ItemLocation::Delayed(0xFF, 0x26, "Song from Impa", SONG_FROM_IMPA, ZELDAS_LULLABY, {Category::cHyruleCastle, Category::cMarket, Category::cSong, Category::cSongDungeonReward}, SpoilerCollectionCheck::EventChkInf(0x59), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[SONG_FROM_MALON] = ItemLocation::Delayed(0xFF, 0x27, "Song from Malon", SONG_FROM_MALON, EPONAS_SONG, {Category::cLonLonRanch, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x58), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[SONG_FROM_SARIA] = ItemLocation::Delayed(0xFF, 0x28, "Song from Saria", SONG_FROM_SARIA, SARIAS_SONG, {Category::cSacredForestMeadow, Category::cForest, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x57), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); - locationTable[SONG_FROM_COMPOSERS_GRAVE] = ItemLocation::Delayed(0xFF, 0x29, "Song from Composers Grave", SONG_FROM_COMPOSERS_GRAVE, SUNS_SONG, {Category::cGraveyard, Category::cKakariko, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x5A), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[SONG_FROM_OCARINA_OF_TIME] = ItemLocation::Delayed(0xFF, 0x2A, "Song from Ocarina of Time", SONG_FROM_OCARINA_OF_TIME, SONG_OF_TIME, {Category::cHyruleField, Category::cSong, Category::cNeedSpiritualStones,}, SpoilerCollectionCheck::EventChkInf(0xA9), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[SONG_FROM_WINDMILL] = ItemLocation::Delayed(0xFF, 0x2B, "Song from Windmill", SONG_FROM_WINDMILL, SONG_OF_STORMS, {Category::cKakarikoVillage, Category::cKakariko, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x5B), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[SHEIK_IN_FOREST] = ItemLocation::Delayed(RC_SHEIK_IN_FOREST, 0xFF, 0x20, "Sheik in Forest", SHEIK_IN_FOREST, MINUET_OF_FOREST, {Category::cSacredForestMeadow, Category::cForest, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x50), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[SHEIK_IN_CRATER] = ItemLocation::Delayed(RC_SHEIK_IN_CRATER, 0xFF, 0x21, "Sheik in Crater", SHEIK_IN_CRATER, BOLERO_OF_FIRE, {Category::cDeathMountainCrater, Category::cDeathMountain, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x51), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[SHEIK_IN_ICE_CAVERN] = ItemLocation::Delayed(RC_SHEIK_IN_ICE_CAVERN, 0xFF, 0x22, "Sheik in Ice Cavern", SHEIK_IN_ICE_CAVERN, SERENADE_OF_WATER, {Category::cIceCavern, Category::cSong, Category::cSongDungeonReward}, SpoilerCollectionCheck::EventChkInf(0x52), SpoilerCollectionCheckGroup::GROUP_DUNGEON_ICE_CAVERN); + locationTable[SHEIK_AT_COLOSSUS] = ItemLocation::Delayed(RC_SHEIK_AT_COLOSSUS, 0xFF, 0x23, "Sheik at Colossus", SHEIK_AT_COLOSSUS, REQUIEM_OF_SPIRIT, {Category::cDesertColossus, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0xAC), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[SHEIK_IN_KAKARIKO] = ItemLocation::Delayed(RC_SHEIK_IN_KAKARIKO, 0xFF, 0x24, "Sheik in Kakariko", SHEIK_IN_KAKARIKO, NOCTURNE_OF_SHADOW, {Category::cKakarikoVillage, Category::cKakariko, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0xAA), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[SHEIK_AT_TEMPLE] = ItemLocation::Delayed(RC_SHEIK_AT_TEMPLE, 0xFF, 0x25, "Sheik at Temple", SHEIK_AT_TEMPLE, PRELUDE_OF_LIGHT, {Category::cTempleOfTime, Category::cMarket, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x55), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[SONG_FROM_IMPA] = ItemLocation::Delayed(RC_SONG_FROM_IMPA, 0xFF, 0x26, "Song from Impa", SONG_FROM_IMPA, ZELDAS_LULLABY, {Category::cHyruleCastle, Category::cMarket, Category::cSong, Category::cSongDungeonReward}, SpoilerCollectionCheck::EventChkInf(0x59), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[SONG_FROM_MALON] = ItemLocation::Delayed(RC_SONG_FROM_MALON, 0xFF, 0x27, "Song from Malon", SONG_FROM_MALON, EPONAS_SONG, {Category::cLonLonRanch, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x58), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[SONG_FROM_SARIA] = ItemLocation::Delayed(RC_SONG_FROM_SARIA, 0xFF, 0x28, "Song from Saria", SONG_FROM_SARIA, SARIAS_SONG, {Category::cSacredForestMeadow, Category::cForest, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x57), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS); + locationTable[SONG_FROM_COMPOSERS_GRAVE] = ItemLocation::Delayed(RC_SONG_FROM_ROYAL_FAMILYS_TOMB, 0xFF, 0x29, "Song from Composers Grave", SONG_FROM_COMPOSERS_GRAVE, SUNS_SONG, {Category::cGraveyard, Category::cKakariko, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x5A), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[SONG_FROM_OCARINA_OF_TIME] = ItemLocation::Delayed(RC_SONG_FROM_OCARINA_OF_TIME, 0xFF, 0x2A, "Song from Ocarina of Time", SONG_FROM_OCARINA_OF_TIME, SONG_OF_TIME, {Category::cHyruleField, Category::cSong, Category::cNeedSpiritualStones,}, SpoilerCollectionCheck::EventChkInf(0xA9), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[SONG_FROM_WINDMILL] = ItemLocation::Delayed(RC_SONG_FROM_WINDMILL, 0xFF, 0x2B, "Song from Windmill", SONG_FROM_WINDMILL, SONG_OF_STORMS, {Category::cKakarikoVillage, Category::cKakariko, Category::cSong,}, SpoilerCollectionCheck::EventChkInf(0x5B), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); /*------------------------------- --- COWS --- -------------------------------*/ - locationTable[KF_LINKS_HOUSE_COW] = ItemLocation::Base (0x34, 0x15, "KF Links House Cow", KF_LINKS_HOUSE_COW, MILK, {Category::cForest, Category::cCow, Category::cMinigame}, SpoilerCollectionCheck::Cow(0x34, 0x15), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[HF_COW_GROTTO_COW] = ItemLocation::Base (0x3E, 0x16, "HF Cow Grotto Cow", HF_COW_GROTTO_COW, MILK, {Category::cHyruleField, Category::cCow, Category::cGrotto}, SpoilerCollectionCheck::Cow(0x3E, 0x16), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); - locationTable[LLR_STABLES_LEFT_COW] = ItemLocation::Base (0x36, 0x16, "LLR Stables Left Cow", LLR_STABLES_LEFT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x36, 0x16), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_STABLES_RIGHT_COW] = ItemLocation::Base (0x36, 0x15, "LLR Stables Right Cow", LLR_STABLES_RIGHT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x36, 0x15), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_TOWER_LEFT_COW] = ItemLocation::Base (0x4C, 0x15, "LLR Tower Left Cow", LLR_TOWER_LEFT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x4C, 0x16), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[LLR_TOWER_RIGHT_COW] = ItemLocation::Base (0x4C, 0x16, "LLR Tower Right Cow", LLR_TOWER_RIGHT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x4C, 0x15), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); - locationTable[KAK_IMPAS_HOUSE_COW] = ItemLocation::Base (0x37, 0x15, "Kak Impas House Cow", KAK_IMPAS_HOUSE_COW, MILK, {Category::cKakarikoVillage, Category::cKakariko, Category::cCow}, SpoilerCollectionCheck::Cow(0x37, 0x15), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[DMT_COW_GROTTO_COW] = ItemLocation::Base (0x3E, 0x15, "DMT Cow Grotto Cow", DMT_COW_GROTTO_COW, MILK, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cCow, Category::cGrotto}, SpoilerCollectionCheck::Cow(0x3E, 0x15), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); - locationTable[GV_COW] = ItemLocation::Base (0x5A, 0x15, "GV Cow", GV_COW, MILK, {Category::cGerudoValley, Category::cGerudo, Category::cCow}, SpoilerCollectionCheck::Cow(0x5A, 0x15), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); - locationTable[JABU_JABUS_BELLY_MQ_COW] = ItemLocation::Base (0x02, 0x15, "Jabu Jabus Belly MQ Cow", JABU_JABUS_BELLY_MQ_COW, MILK, {Category::cJabuJabusBelly, Category::cCow}, SpoilerCollectionCheck::Cow(0x02, 0x15), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); + locationTable[KF_LINKS_HOUSE_COW] = ItemLocation::Base (RC_KF_LINKS_HOUSE_COW, 0x34, 0x15, "KF Links House Cow", KF_LINKS_HOUSE_COW, MILK, {Category::cForest, Category::cCow, Category::cMinigame}, SpoilerCollectionCheck::Cow(0x34, 0x15), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[HF_COW_GROTTO_COW] = ItemLocation::Base (RC_HF_COW_GROTTO_COW, 0x3E, 0x16, "HF Cow Grotto Cow", HF_COW_GROTTO_COW, MILK, {Category::cHyruleField, Category::cCow, Category::cGrotto}, SpoilerCollectionCheck::Cow(0x3E, 0x16), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD); + locationTable[LLR_STABLES_LEFT_COW] = ItemLocation::Base (RC_LLR_STABLES_LEFT_COW, 0x36, 0x16, "LLR Stables Left Cow", LLR_STABLES_LEFT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x36, 0x16), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_STABLES_RIGHT_COW] = ItemLocation::Base (RC_LLR_STABLES_RIGHT_COW, 0x36, 0x15, "LLR Stables Right Cow", LLR_STABLES_RIGHT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x36, 0x15), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_TOWER_LEFT_COW] = ItemLocation::Base (RC_LLR_TOWER_LEFT_COW, 0x4C, 0x15, "LLR Tower Left Cow", LLR_TOWER_LEFT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x4C, 0x16), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[LLR_TOWER_RIGHT_COW] = ItemLocation::Base (RC_LLR_TOWER_RIGHT_COW, 0x4C, 0x16, "LLR Tower Right Cow", LLR_TOWER_RIGHT_COW, MILK, {Category::cLonLonRanch, Category::cCow}, SpoilerCollectionCheck::Cow(0x4C, 0x15), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH); + locationTable[KAK_IMPAS_HOUSE_COW] = ItemLocation::Base (RC_KAK_IMPAS_HOUSE_COW, 0x37, 0x15, "Kak Impas House Cow", KAK_IMPAS_HOUSE_COW, MILK, {Category::cKakarikoVillage, Category::cKakariko, Category::cCow}, SpoilerCollectionCheck::Cow(0x37, 0x15), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[DMT_COW_GROTTO_COW] = ItemLocation::Base (RC_DMT_COW_GROTTO_COW, 0x3E, 0x15, "DMT Cow Grotto Cow", DMT_COW_GROTTO_COW, MILK, {Category::cDeathMountainTrail, Category::cDeathMountain, Category::cCow, Category::cGrotto}, SpoilerCollectionCheck::Cow(0x3E, 0x15), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN); + locationTable[GV_COW] = ItemLocation::Base (RC_GV_COW, 0x5A, 0x15, "GV Cow", GV_COW, MILK, {Category::cGerudoValley, Category::cGerudo, Category::cCow}, SpoilerCollectionCheck::Cow(0x5A, 0x15), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY); + locationTable[JABU_JABUS_BELLY_MQ_COW] = ItemLocation::Base (RC_JABU_JABUS_BELLY_MQ_COW, 0x02, 0x15, "Jabu Jabus Belly MQ Cow", JABU_JABUS_BELLY_MQ_COW, MILK, {Category::cJabuJabusBelly, Category::cCow}, SpoilerCollectionCheck::Cow(0x02, 0x15), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY); /*------------------------------- --- SHOPS --- @@ -791,126 +797,126 @@ void LocationTable_Init() { 7 5 1 3 -------------------------------*/ - locationTable[KF_SHOP_ITEM_1] = ItemLocation::Base(0x2D, 0x30, "KF Shop Item 1", KF_SHOP_ITEM_1, BUY_DEKU_SHIELD, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 0), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_2] = ItemLocation::Base(0x2D, 0x31, "KF Shop Item 2", KF_SHOP_ITEM_2, BUY_DEKU_NUT_5, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 1), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_3] = ItemLocation::Base(0x2D, 0x32, "KF Shop Item 3", KF_SHOP_ITEM_3, BUY_DEKU_NUT_10, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 2), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_4] = ItemLocation::Base(0x2D, 0x33, "KF Shop Item 4", KF_SHOP_ITEM_4, BUY_DEKU_STICK_1, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 3), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_5] = ItemLocation::Base(0x2D, 0x34, "KF Shop Item 5", KF_SHOP_ITEM_5, BUY_DEKU_SEEDS_30, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 4), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_6] = ItemLocation::Base(0x2D, 0x35, "KF Shop Item 6", KF_SHOP_ITEM_6, BUY_ARROWS_10, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 5), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_7] = ItemLocation::Base(0x2D, 0x36, "KF Shop Item 7", KF_SHOP_ITEM_7, BUY_ARROWS_30, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 6), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KF_SHOP_ITEM_8] = ItemLocation::Base(0x2D, 0x37, "KF Shop Item 8", KF_SHOP_ITEM_8, BUY_HEART, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 7), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_1] = ItemLocation::Base(RC_KF_SHOP_ITEM_1, 0x2D, 0x30, "KF Shop Item 1", KF_SHOP_ITEM_1, BUY_DEKU_SHIELD, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 0), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_2] = ItemLocation::Base(RC_KF_SHOP_ITEM_2, 0x2D, 0x31, "KF Shop Item 2", KF_SHOP_ITEM_2, BUY_DEKU_NUT_5, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 1), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_3] = ItemLocation::Base(RC_KF_SHOP_ITEM_3, 0x2D, 0x32, "KF Shop Item 3", KF_SHOP_ITEM_3, BUY_DEKU_NUT_10, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 2), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_4] = ItemLocation::Base(RC_KF_SHOP_ITEM_4, 0x2D, 0x33, "KF Shop Item 4", KF_SHOP_ITEM_4, BUY_DEKU_STICK_1, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 3), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_5] = ItemLocation::Base(RC_KF_SHOP_ITEM_5, 0x2D, 0x34, "KF Shop Item 5", KF_SHOP_ITEM_5, BUY_DEKU_SEEDS_30, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 4), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_6] = ItemLocation::Base(RC_KF_SHOP_ITEM_6, 0x2D, 0x35, "KF Shop Item 6", KF_SHOP_ITEM_6, BUY_ARROWS_10, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 5), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_7] = ItemLocation::Base(RC_KF_SHOP_ITEM_7, 0x2D, 0x36, "KF Shop Item 7", KF_SHOP_ITEM_7, BUY_ARROWS_30, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 6), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); + locationTable[KF_SHOP_ITEM_8] = ItemLocation::Base(RC_KF_SHOP_ITEM_8, 0x2D, 0x37, "KF Shop Item 8", KF_SHOP_ITEM_8, BUY_HEART, {Category::cKokiriForest, Category::cForest, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2D, 7), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST); - locationTable[KAK_POTION_SHOP_ITEM_1] = ItemLocation::Base(0x30, 0x30, "Kak Potion Shop Item 1", KAK_POTION_SHOP_ITEM_1, BUY_DEKU_NUT_5, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 0), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_2] = ItemLocation::Base(0x30, 0x31, "Kak Potion Shop Item 2", KAK_POTION_SHOP_ITEM_2, BUY_FISH, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_3] = ItemLocation::Base(0x30, 0x32, "Kak Potion Shop Item 3", KAK_POTION_SHOP_ITEM_3, BUY_RED_POTION_30, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_4] = ItemLocation::Base(0x30, 0x33, "Kak Potion Shop Item 4", KAK_POTION_SHOP_ITEM_4, BUY_GREEN_POTION, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_5] = ItemLocation::Base(0x30, 0x34, "Kak Potion Shop Item 5", KAK_POTION_SHOP_ITEM_5, BUY_BLUE_FIRE, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_6] = ItemLocation::Base(0x30, 0x35, "Kak Potion Shop Item 6", KAK_POTION_SHOP_ITEM_6, BUY_BOTTLE_BUG, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_7] = ItemLocation::Base(0x30, 0x36, "Kak Potion Shop Item 7", KAK_POTION_SHOP_ITEM_7, BUY_POE, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_POTION_SHOP_ITEM_8] = ItemLocation::Base(0x30, 0x37, "Kak Potion Shop Item 8", KAK_POTION_SHOP_ITEM_8, BUY_FAIRYS_SPIRIT, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_1] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_1, 0x30, 0x30, "Kak Potion Shop Item 1", KAK_POTION_SHOP_ITEM_1, BUY_DEKU_NUT_5, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 0), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_2] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_2, 0x30, 0x31, "Kak Potion Shop Item 2", KAK_POTION_SHOP_ITEM_2, BUY_FISH, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_3] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_3, 0x30, 0x32, "Kak Potion Shop Item 3", KAK_POTION_SHOP_ITEM_3, BUY_RED_POTION_30, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_4] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_4, 0x30, 0x33, "Kak Potion Shop Item 4", KAK_POTION_SHOP_ITEM_4, BUY_GREEN_POTION, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_5] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_5, 0x30, 0x34, "Kak Potion Shop Item 5", KAK_POTION_SHOP_ITEM_5, BUY_BLUE_FIRE, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_6] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_6, 0x30, 0x35, "Kak Potion Shop Item 6", KAK_POTION_SHOP_ITEM_6, BUY_BOTTLE_BUG, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_7] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_7, 0x30, 0x36, "Kak Potion Shop Item 7", KAK_POTION_SHOP_ITEM_7, BUY_POE, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_POTION_SHOP_ITEM_8] = ItemLocation::Base(RC_KAK_POTION_SHOP_ITEM_8, 0x30, 0x37, "Kak Potion Shop Item 8", KAK_POTION_SHOP_ITEM_8, BUY_FAIRYS_SPIRIT, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x30, 7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_1] = ItemLocation::Base(0x32, 0x30, "MK Bombchu Shop Item 1", MARKET_BOMBCHU_SHOP_ITEM_1, BUY_BOMBCHU_5, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_2] = ItemLocation::Base(0x32, 0x31, "MK Bombchu Shop Item 2", MARKET_BOMBCHU_SHOP_ITEM_2, BUY_BOMBCHU_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_3] = ItemLocation::Base(0x32, 0x32, "MK Bombchu Shop Item 3", MARKET_BOMBCHU_SHOP_ITEM_3, BUY_BOMBCHU_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_4] = ItemLocation::Base(0x32, 0x33, "MK Bombchu Shop Item 4", MARKET_BOMBCHU_SHOP_ITEM_4, BUY_BOMBCHU_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_5] = ItemLocation::Base(0x32, 0x34, "MK Bombchu Shop Item 5", MARKET_BOMBCHU_SHOP_ITEM_5, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_6] = ItemLocation::Base(0x32, 0x35, "MK Bombchu Shop Item 6", MARKET_BOMBCHU_SHOP_ITEM_6, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_7] = ItemLocation::Base(0x32, 0x36, "MK Bombchu Shop Item 7", MARKET_BOMBCHU_SHOP_ITEM_7, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BOMBCHU_SHOP_ITEM_8] = ItemLocation::Base(0x32, 0x37, "MK Bombchu Shop Item 8", MARKET_BOMBCHU_SHOP_ITEM_8, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_1] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_1, 0x32, 0x30, "MK Bombchu Shop Item 1", MARKET_BOMBCHU_SHOP_ITEM_1, BUY_BOMBCHU_5, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_2] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_2, 0x32, 0x31, "MK Bombchu Shop Item 2", MARKET_BOMBCHU_SHOP_ITEM_2, BUY_BOMBCHU_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_3] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_3, 0x32, 0x32, "MK Bombchu Shop Item 3", MARKET_BOMBCHU_SHOP_ITEM_3, BUY_BOMBCHU_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_4] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_4, 0x32, 0x33, "MK Bombchu Shop Item 4", MARKET_BOMBCHU_SHOP_ITEM_4, BUY_BOMBCHU_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_5] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_5, 0x32, 0x34, "MK Bombchu Shop Item 5", MARKET_BOMBCHU_SHOP_ITEM_5, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_6] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_6, 0x32, 0x35, "MK Bombchu Shop Item 6", MARKET_BOMBCHU_SHOP_ITEM_6, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_7] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_7, 0x32, 0x36, "MK Bombchu Shop Item 7", MARKET_BOMBCHU_SHOP_ITEM_7, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BOMBCHU_SHOP_ITEM_8] = ItemLocation::Base(RC_MARKET_BOMBCHU_SHOP_ITEM_8, 0x32, 0x37, "MK Bombchu Shop Item 8", MARKET_BOMBCHU_SHOP_ITEM_8, BUY_BOMBCHU_20, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x32, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_1] = ItemLocation::Base(0x31, 0x30, "MK Potion Shop Item 1", MARKET_POTION_SHOP_ITEM_1, BUY_GREEN_POTION, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_2] = ItemLocation::Base(0x31, 0x31, "MK Potion Shop Item 2", MARKET_POTION_SHOP_ITEM_2, BUY_BLUE_FIRE, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_3] = ItemLocation::Base(0x31, 0x32, "MK Potion Shop Item 3", MARKET_POTION_SHOP_ITEM_3, BUY_RED_POTION_30, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_4] = ItemLocation::Base(0x31, 0x33, "MK Potion Shop Item 4", MARKET_POTION_SHOP_ITEM_4, BUY_FAIRYS_SPIRIT, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_5] = ItemLocation::Base(0x31, 0x34, "MK Potion Shop Item 5", MARKET_POTION_SHOP_ITEM_5, BUY_DEKU_NUT_5, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_6] = ItemLocation::Base(0x31, 0x35, "MK Potion Shop Item 6", MARKET_POTION_SHOP_ITEM_6, BUY_BOTTLE_BUG, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_7] = ItemLocation::Base(0x31, 0x36, "MK Potion Shop Item 7", MARKET_POTION_SHOP_ITEM_7, BUY_POE, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_POTION_SHOP_ITEM_8] = ItemLocation::Base(0x31, 0x37, "MK Potion Shop Item 8", MARKET_POTION_SHOP_ITEM_8, BUY_FISH, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_1] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_1, 0x31, 0x30, "MK Potion Shop Item 1", MARKET_POTION_SHOP_ITEM_1, BUY_GREEN_POTION, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_2] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_2, 0x31, 0x31, "MK Potion Shop Item 2", MARKET_POTION_SHOP_ITEM_2, BUY_BLUE_FIRE, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_3] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_3, 0x31, 0x32, "MK Potion Shop Item 3", MARKET_POTION_SHOP_ITEM_3, BUY_RED_POTION_30, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_4] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_4, 0x31, 0x33, "MK Potion Shop Item 4", MARKET_POTION_SHOP_ITEM_4, BUY_FAIRYS_SPIRIT, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_5] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_5, 0x31, 0x34, "MK Potion Shop Item 5", MARKET_POTION_SHOP_ITEM_5, BUY_DEKU_NUT_5, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_6] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_6, 0x31, 0x35, "MK Potion Shop Item 6", MARKET_POTION_SHOP_ITEM_6, BUY_BOTTLE_BUG, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_7] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_7, 0x31, 0x36, "MK Potion Shop Item 7", MARKET_POTION_SHOP_ITEM_7, BUY_POE, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_POTION_SHOP_ITEM_8] = ItemLocation::Base(RC_MARKET_POTION_SHOP_ITEM_8, 0x31, 0x37, "MK Potion Shop Item 8", MARKET_POTION_SHOP_ITEM_8, BUY_FISH, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x31, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_1] = ItemLocation::Base(0x2C, 0x30, "MK Bazaar Item 1", MARKET_BAZAAR_ITEM_1, BUY_HYLIAN_SHIELD, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_2] = ItemLocation::Base(0x2C, 0x31, "MK Bazaar Item 2", MARKET_BAZAAR_ITEM_2, BUY_BOMBS_535, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_3] = ItemLocation::Base(0x2C, 0x32, "MK Bazaar Item 3", MARKET_BAZAAR_ITEM_3, BUY_DEKU_NUT_5, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_4] = ItemLocation::Base(0x2C, 0x33, "MK Bazaar Item 4", MARKET_BAZAAR_ITEM_4, BUY_HEART, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_5] = ItemLocation::Base(0x2C, 0x34, "MK Bazaar Item 5", MARKET_BAZAAR_ITEM_5, BUY_ARROWS_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_6] = ItemLocation::Base(0x2C, 0x35, "MK Bazaar Item 6", MARKET_BAZAAR_ITEM_6, BUY_ARROWS_50, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_7] = ItemLocation::Base(0x2C, 0x36, "MK Bazaar Item 7", MARKET_BAZAAR_ITEM_7, BUY_DEKU_STICK_1, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[MARKET_BAZAAR_ITEM_8] = ItemLocation::Base(0x2C, 0x37, "MK Bazaar Item 8", MARKET_BAZAAR_ITEM_8, BUY_ARROWS_30, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_1] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_1, 0x2C, 0x30, "MK Bazaar Item 1", MARKET_BAZAAR_ITEM_1, BUY_HYLIAN_SHIELD, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_2] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_2, 0x2C, 0x31, "MK Bazaar Item 2", MARKET_BAZAAR_ITEM_2, BUY_BOMBS_535, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_3] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_3, 0x2C, 0x32, "MK Bazaar Item 3", MARKET_BAZAAR_ITEM_3, BUY_DEKU_NUT_5, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_4] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_4, 0x2C, 0x33, "MK Bazaar Item 4", MARKET_BAZAAR_ITEM_4, BUY_HEART, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_5] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_5, 0x2C, 0x34, "MK Bazaar Item 5", MARKET_BAZAAR_ITEM_5, BUY_ARROWS_10, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_6] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_6, 0x2C, 0x35, "MK Bazaar Item 6", MARKET_BAZAAR_ITEM_6, BUY_ARROWS_50, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_7] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_7, 0x2C, 0x36, "MK Bazaar Item 7", MARKET_BAZAAR_ITEM_7, BUY_DEKU_STICK_1, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); + locationTable[MARKET_BAZAAR_ITEM_8] = ItemLocation::Base(RC_MARKET_BAZAAR_ITEM_8, 0x2C, 0x37, "MK Bazaar Item 8", MARKET_BAZAAR_ITEM_8, BUY_ARROWS_30, {Category::cInnerMarket, Category::cMarket, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2C, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE); - locationTable[KAK_BAZAAR_ITEM_1] = ItemLocation::Base(0x2C, 0x38, "Kak Bazaar Item 1", KAK_BAZAAR_ITEM_1, BUY_HYLIAN_SHIELD, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 0), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_2] = ItemLocation::Base(0x2C, 0x39, "Kak Bazaar Item 2", KAK_BAZAAR_ITEM_2, BUY_BOMBS_535, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_3] = ItemLocation::Base(0x2C, 0x3A, "Kak Bazaar Item 3", KAK_BAZAAR_ITEM_3, BUY_DEKU_NUT_5, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_4] = ItemLocation::Base(0x2C, 0x3B, "Kak Bazaar Item 4", KAK_BAZAAR_ITEM_4, BUY_HEART, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_5] = ItemLocation::Base(0x2C, 0x3C, "Kak Bazaar Item 5", KAK_BAZAAR_ITEM_5, BUY_ARROWS_10, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_6] = ItemLocation::Base(0x2C, 0x3D, "Kak Bazaar Item 6", KAK_BAZAAR_ITEM_6, BUY_ARROWS_50, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_7] = ItemLocation::Base(0x2C, 0x3E, "Kak Bazaar Item 7", KAK_BAZAAR_ITEM_7, BUY_DEKU_STICK_1, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[KAK_BAZAAR_ITEM_8] = ItemLocation::Base(0x2C, 0x3F, "Kak Bazaar Item 8", KAK_BAZAAR_ITEM_8, BUY_ARROWS_30, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_1] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_1, 0x2C, 0x38, "Kak Bazaar Item 1", KAK_BAZAAR_ITEM_1, BUY_HYLIAN_SHIELD, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 0), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_2] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_2, 0x2C, 0x39, "Kak Bazaar Item 2", KAK_BAZAAR_ITEM_2, BUY_BOMBS_535, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_3] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_3, 0x2C, 0x3A, "Kak Bazaar Item 3", KAK_BAZAAR_ITEM_3, BUY_DEKU_NUT_5, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_4] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_4, 0x2C, 0x3B, "Kak Bazaar Item 4", KAK_BAZAAR_ITEM_4, BUY_HEART, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_5] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_5, 0x2C, 0x3C, "Kak Bazaar Item 5", KAK_BAZAAR_ITEM_5, BUY_ARROWS_10, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_6] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_6, 0x2C, 0x3D, "Kak Bazaar Item 6", KAK_BAZAAR_ITEM_6, BUY_ARROWS_50, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_7] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_7, 0x2C, 0x3E, "Kak Bazaar Item 7", KAK_BAZAAR_ITEM_7, BUY_DEKU_STICK_1, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); + locationTable[KAK_BAZAAR_ITEM_8] = ItemLocation::Base(RC_KAK_BAZAAR_ITEM_8, 0x2C, 0x3F, "Kak Bazaar Item 8", KAK_BAZAAR_ITEM_8, BUY_ARROWS_30, {Category::cKakarikoVillage, Category::cKakariko, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x33, 7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO); - locationTable[ZD_SHOP_ITEM_1] = ItemLocation::Base(0x2F, 0x30, "ZD Shop Item 1", ZD_SHOP_ITEM_1, BUY_ZORA_TUNIC, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 0), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_2] = ItemLocation::Base(0x2F, 0x31, "ZD Shop Item 2", ZD_SHOP_ITEM_2, BUY_ARROWS_10, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 1), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_3] = ItemLocation::Base(0x2F, 0x32, "ZD Shop Item 3", ZD_SHOP_ITEM_3, BUY_HEART, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 2), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_4] = ItemLocation::Base(0x2F, 0x33, "ZD Shop Item 4", ZD_SHOP_ITEM_4, BUY_ARROWS_30, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 3), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_5] = ItemLocation::Base(0x2F, 0x34, "ZD Shop Item 5", ZD_SHOP_ITEM_5, BUY_DEKU_NUT_5, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 4), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_6] = ItemLocation::Base(0x2F, 0x35, "ZD Shop Item 6", ZD_SHOP_ITEM_6, BUY_ARROWS_50, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 5), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_7] = ItemLocation::Base(0x2F, 0x36, "ZD Shop Item 7", ZD_SHOP_ITEM_7, BUY_FISH, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 6), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[ZD_SHOP_ITEM_8] = ItemLocation::Base(0x2F, 0x37, "ZD Shop Item 8", ZD_SHOP_ITEM_8, BUY_RED_POTION_50, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 7), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_1] = ItemLocation::Base(RC_ZD_SHOP_ITEM_1, 0x2F, 0x30, "ZD Shop Item 1", ZD_SHOP_ITEM_1, BUY_ZORA_TUNIC, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 0), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_2] = ItemLocation::Base(RC_ZD_SHOP_ITEM_2, 0x2F, 0x31, "ZD Shop Item 2", ZD_SHOP_ITEM_2, BUY_ARROWS_10, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 1), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_3] = ItemLocation::Base(RC_ZD_SHOP_ITEM_3, 0x2F, 0x32, "ZD Shop Item 3", ZD_SHOP_ITEM_3, BUY_HEART, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 2), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_4] = ItemLocation::Base(RC_ZD_SHOP_ITEM_4, 0x2F, 0x33, "ZD Shop Item 4", ZD_SHOP_ITEM_4, BUY_ARROWS_30, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 3), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_5] = ItemLocation::Base(RC_ZD_SHOP_ITEM_5, 0x2F, 0x34, "ZD Shop Item 5", ZD_SHOP_ITEM_5, BUY_DEKU_NUT_5, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 4), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_6] = ItemLocation::Base(RC_ZD_SHOP_ITEM_6, 0x2F, 0x35, "ZD Shop Item 6", ZD_SHOP_ITEM_6, BUY_ARROWS_50, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 5), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_7] = ItemLocation::Base(RC_ZD_SHOP_ITEM_7, 0x2F, 0x36, "ZD Shop Item 7", ZD_SHOP_ITEM_7, BUY_FISH, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 6), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); + locationTable[ZD_SHOP_ITEM_8] = ItemLocation::Base(RC_ZD_SHOP_ITEM_8, 0x2F, 0x37, "ZD Shop Item 8", ZD_SHOP_ITEM_8, BUY_RED_POTION_50, {Category::cZorasDomain, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2F, 7), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN); - locationTable[GC_SHOP_ITEM_1] = ItemLocation::Base(0x2E, 0x30, "GC Shop Item 1", GC_SHOP_ITEM_1, BUY_BOMBS_525, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 0), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_2] = ItemLocation::Base(0x2E, 0x31, "GC Shop Item 2", GC_SHOP_ITEM_2, BUY_BOMBS_10, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 1), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_3] = ItemLocation::Base(0x2E, 0x32, "GC Shop Item 3", GC_SHOP_ITEM_3, BUY_BOMBS_20, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 2), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_4] = ItemLocation::Base(0x2E, 0x33, "GC Shop Item 4", GC_SHOP_ITEM_4, BUY_BOMBS_30, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 3), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_5] = ItemLocation::Base(0x2E, 0x34, "GC Shop Item 5", GC_SHOP_ITEM_5, BUY_GORON_TUNIC, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 4), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_6] = ItemLocation::Base(0x2E, 0x35, "GC Shop Item 6", GC_SHOP_ITEM_6, BUY_HEART, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 5), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_7] = ItemLocation::Base(0x2E, 0x36, "GC Shop Item 7", GC_SHOP_ITEM_7, BUY_RED_POTION_40, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 6), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); - locationTable[GC_SHOP_ITEM_8] = ItemLocation::Base(0x2E, 0x37, "GC Shop Item 8", GC_SHOP_ITEM_8, BUY_HEART, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 7), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_1] = ItemLocation::Base(RC_GC_SHOP_ITEM_1, 0x2E, 0x30, "GC Shop Item 1", GC_SHOP_ITEM_1, BUY_BOMBS_525, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 0), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_2] = ItemLocation::Base(RC_GC_SHOP_ITEM_2, 0x2E, 0x31, "GC Shop Item 2", GC_SHOP_ITEM_2, BUY_BOMBS_10, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 1), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_3] = ItemLocation::Base(RC_GC_SHOP_ITEM_3, 0x2E, 0x32, "GC Shop Item 3", GC_SHOP_ITEM_3, BUY_BOMBS_20, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 2), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_4] = ItemLocation::Base(RC_GC_SHOP_ITEM_4, 0x2E, 0x33, "GC Shop Item 4", GC_SHOP_ITEM_4, BUY_BOMBS_30, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 3), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_5] = ItemLocation::Base(RC_GC_SHOP_ITEM_5, 0x2E, 0x34, "GC Shop Item 5", GC_SHOP_ITEM_5, BUY_GORON_TUNIC, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 4), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_6] = ItemLocation::Base(RC_GC_SHOP_ITEM_6, 0x2E, 0x35, "GC Shop Item 6", GC_SHOP_ITEM_6, BUY_HEART, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 5), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_7] = ItemLocation::Base(RC_GC_SHOP_ITEM_7, 0x2E, 0x36, "GC Shop Item 7", GC_SHOP_ITEM_7, BUY_RED_POTION_40, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 6), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); + locationTable[GC_SHOP_ITEM_8] = ItemLocation::Base(RC_GC_SHOP_ITEM_8, 0x2E, 0x37, "GC Shop Item 8", GC_SHOP_ITEM_8, BUY_HEART, {Category::cGoronCity, Category::cShop}, SpoilerCollectionCheck::ShopItem(0x2E, 7), SpoilerCollectionCheckGroup::GROUP_GORON_CITY); /*------------------------------- --- GOSSIP STONES --- -------------------------------*/ // These are not actual locations, but are filler spots used for hint reachability. - OoT Randomizer // flag + 0x400 = message ID - locationTable[DMC_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x05, "DMC Gossip Stone", {}); - locationTable[DMT_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x04, "DMT Gossip Stone", {}); - locationTable[COLOSSUS_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x1A, "Colossus Gossip Stone", {}); - locationTable[DODONGOS_CAVERN_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x14, "Dodongo's Cavern Gossip Stone", {}); - locationTable[GV_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x11, "GV Gossip Stone", {}); - locationTable[GC_MAZE_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x15, "GC Maze Gossip Stone", {}); - locationTable[GC_MEDIGORON_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x19, "GC Medigoron Gossip Stone", {}); - locationTable[GRAVEYARD_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x0A, "GY Gossip Stone", {}); - locationTable[HC_MALON_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x12, "HC Malon Gossip Stone", {}); - locationTable[HC_ROCK_WALL_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x0B, "HC Rock Wall Gossip Stone", {}); - locationTable[HC_STORMS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x13, "HC Storms Grotto Gossip Stone", {}); - locationTable[KF_DEKU_TREE_GOSSIP_STONE_LEFT] = ItemLocation::HintStone(0x00, 0x1F, "KF Deku Tree Left Gossip Stone", {}); - locationTable[KF_DEKU_TREE_GOSSIP_STONE_RIGHT] = ItemLocation::HintStone(0x00, 0x20, "KF Deku Tree Right Gossip Stone", {}); - locationTable[KF_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x1E, "KF Gossip Stone", {}); - locationTable[LH_LAB_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x03, "LH Lab Gossip Stone", {}); - locationTable[LH_GOSSIP_STONE_SOUTHEAST] = ItemLocation::HintStone(0x00, 0x0F, "LH Southeast Gossip Stone", {}); - locationTable[LH_GOSSIP_STONE_SOUTHWEST] = ItemLocation::HintStone(0x00, 0x08, "LH Southwest Gossip Stone", {}); - locationTable[LW_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x1D, "LW Gossip Stone", {}); - locationTable[SFM_MAZE_GOSSIP_STONE_LOWER] = ItemLocation::HintStone(0x00, 0x16, "SFM Maze Lower Gossip Stone", {}); - locationTable[SFM_MAZE_GOSSIP_STONE_UPPER] = ItemLocation::HintStone(0x00, 0x17, "SFM Maze Upper Gossip Stone", {}); - locationTable[SFM_SARIA_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x1C, "SFM Saria Gossip Stone", {}); - locationTable[TOT_GOSSIP_STONE_LEFT] = ItemLocation::HintStone(0x00, 0x06, "ToT Left Gossip Stone", {}); - locationTable[TOT_GOSSIP_STONE_RIGHT] = ItemLocation::HintStone(0x00, 0x07, "ToT Left Center Gossip Stone", {}); - locationTable[TOT_GOSSIP_STONE_RIGHT_CENTER] = ItemLocation::HintStone(0x00, 0x10, "ToT Right Center Gossip Stone", {}); - locationTable[TOT_GOSSIP_STONE_LEFT_CENTER] = ItemLocation::HintStone(0x00, 0x0E, "ToT Right Gossip Stone", {}); - locationTable[ZD_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x09, "ZD Gossip Stone", {}); - locationTable[ZF_FAIRY_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x01, "Fairy Gossip Stone", {}); - locationTable[ZF_JABU_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x02, "Jabu Gossip Stone", {}); - locationTable[ZR_NEAR_GROTTOS_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x0D, "ZR Near Grottos Gossip Stone", {}); - locationTable[ZR_NEAR_DOMAIN_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x0C, "ZR Near Domain Gossip Stone", {}); - locationTable[HF_COW_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x1B, "HF Cow Grotto Gossip Stone", {}); + locationTable[DMC_GOSSIP_STONE] = ItemLocation::HintStone(RC_DMC_GOSSIP_STONE, 0x00, 0x05, "DMC Gossip Stone", {}); + locationTable[DMT_GOSSIP_STONE] = ItemLocation::HintStone(RC_DMT_GOSSIP_STONE, 0x00, 0x04, "DMT Gossip Stone", {}); + locationTable[COLOSSUS_GOSSIP_STONE] = ItemLocation::HintStone(RC_COLOSSUS_GOSSIP_STONE, 0x00, 0x1A, "Colossus Gossip Stone", {}); + locationTable[DODONGOS_CAVERN_GOSSIP_STONE] = ItemLocation::HintStone(RC_DODONGOS_CAVERN_GOSSIP_STONE, 0x00, 0x14, "Dodongo's Cavern Gossip Stone", {}); + locationTable[GV_GOSSIP_STONE] = ItemLocation::HintStone(RC_GV_GOSSIP_STONE, 0x00, 0x11, "GV Gossip Stone", {}); + locationTable[GC_MAZE_GOSSIP_STONE] = ItemLocation::HintStone(RC_GC_MAZE_GOSSIP_STONE, 0x00, 0x15, "GC Maze Gossip Stone", {}); + locationTable[GC_MEDIGORON_GOSSIP_STONE] = ItemLocation::HintStone(RC_GC_MEDIGORON_GOSSIP_STONE, 0x00, 0x19, "GC Medigoron Gossip Stone", {}); + locationTable[GRAVEYARD_GOSSIP_STONE] = ItemLocation::HintStone(RC_GY_GOSSIP_STONE, 0x00, 0x0A, "GY Gossip Stone", {}); + locationTable[HC_MALON_GOSSIP_STONE] = ItemLocation::HintStone(RC_HC_MALON_GOSSIP_STONE, 0x00, 0x12, "HC Malon Gossip Stone", {}); + locationTable[HC_ROCK_WALL_GOSSIP_STONE] = ItemLocation::HintStone(RC_HC_ROCK_WALL_GOSSIP_STONE, 0x00, 0x0B, "HC Rock Wall Gossip Stone", {}); + locationTable[HC_STORMS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_HC_STORMS_GROTTO_GOSSIP_STONE, 0x00, 0x13, "HC Storms Grotto Gossip Stone", {}); + locationTable[KF_DEKU_TREE_GOSSIP_STONE_LEFT] = ItemLocation::HintStone(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE, 0x00, 0x1F, "KF Deku Tree Left Gossip Stone", {}); + locationTable[KF_DEKU_TREE_GOSSIP_STONE_RIGHT] = ItemLocation::HintStone(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, 0x00, 0x20, "KF Deku Tree Right Gossip Stone", {}); + locationTable[KF_GOSSIP_STONE] = ItemLocation::HintStone(RC_KF_GOSSIP_STONE, 0x00, 0x1E, "KF Gossip Stone", {}); + locationTable[LH_LAB_GOSSIP_STONE] = ItemLocation::HintStone(RC_LH_LAB_GOSSIP_STONE, 0x00, 0x03, "LH Lab Gossip Stone", {}); + locationTable[LH_GOSSIP_STONE_SOUTHEAST] = ItemLocation::HintStone(RC_LH_SOUTHEAST_GOSSIP_STONE, 0x00, 0x0F, "LH Southeast Gossip Stone", {}); + locationTable[LH_GOSSIP_STONE_SOUTHWEST] = ItemLocation::HintStone(RC_LH_SOUTHWEST_GOSSIP_STONE, 0x00, 0x08, "LH Southwest Gossip Stone", {}); + locationTable[LW_GOSSIP_STONE] = ItemLocation::HintStone(RC_LW_GOSSIP_STONE, 0x00, 0x1D, "LW Gossip Stone", {}); + locationTable[SFM_MAZE_GOSSIP_STONE_LOWER] = ItemLocation::HintStone(RC_SFM_MAZE_LOWER_GOSSIP_STONE, 0x00, 0x16, "SFM Maze Lower Gossip Stone", {}); + locationTable[SFM_MAZE_GOSSIP_STONE_UPPER] = ItemLocation::HintStone(RC_SFM_MAZE_UPPER_GOSSIP_STONE, 0x00, 0x17, "SFM Maze Upper Gossip Stone", {}); + locationTable[SFM_SARIA_GOSSIP_STONE] = ItemLocation::HintStone(RC_SFM_SARIA_GOSSIP_STONE, 0x00, 0x1C, "SFM Saria Gossip Stone", {}); + locationTable[TOT_GOSSIP_STONE_LEFT] = ItemLocation::HintStone(RC_TOT_LEFT_GOSSIP_STONE, 0x00, 0x06, "ToT Left Gossip Stone", {}); + locationTable[TOT_GOSSIP_STONE_RIGHT] = ItemLocation::HintStone(RC_TOT_RIGHT_GOSSIP_STONE, 0x00, 0x07, "ToT Left Center Gossip Stone", {}); + locationTable[TOT_GOSSIP_STONE_RIGHT_CENTER] = ItemLocation::HintStone(RC_TOT_RIGHT_CENTER_GOSSIP_STONE, 0x00, 0x10, "ToT Right Center Gossip Stone", {}); + locationTable[TOT_GOSSIP_STONE_LEFT_CENTER] = ItemLocation::HintStone(RC_TOT_LEFT_CENTER_GOSSIP_STONE, 0x00, 0x0E, "ToT Right Gossip Stone", {}); + locationTable[ZD_GOSSIP_STONE] = ItemLocation::HintStone(RC_ZD_GOSSIP_STONE, 0x00, 0x09, "ZD Gossip Stone", {}); + locationTable[ZF_FAIRY_GOSSIP_STONE] = ItemLocation::HintStone(RC_FAIRY_GOSSIP_STONE, 0x00, 0x01, "Fairy Gossip Stone", {}); + locationTable[ZF_JABU_GOSSIP_STONE] = ItemLocation::HintStone(RC_JABU_GOSSIP_STONE, 0x00, 0x02, "Jabu Gossip Stone", {}); + locationTable[ZR_NEAR_GROTTOS_GOSSIP_STONE] = ItemLocation::HintStone(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, 0x00, 0x0D, "ZR Near Grottos Gossip Stone", {}); + locationTable[ZR_NEAR_DOMAIN_GOSSIP_STONE] = ItemLocation::HintStone(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, 0x00, 0x0C, "ZR Near Domain Gossip Stone", {}); + locationTable[HF_COW_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_HF_COW_GROTTO_GOSSIP_STONE, 0x00, 0x1B, "HF Cow Grotto Gossip Stone", {}); - locationTable[HF_NEAR_MARKET_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x30, "HF Near Market Gossip Stone", {}); - locationTable[HF_SOUTHEAST_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x32, "HF Southeast Gossip Stone", {}); - locationTable[HF_OPEN_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x33, "HF Open Grotto Gossip Stone", {}); - locationTable[KAK_OPEN_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x38, "Kak Open Grotto Gossip Stone", {}); - locationTable[ZR_OPEN_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x39, "ZR Open Grotto Gossip Stone", {}); - locationTable[KF_STORMS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x3C, "KF Storms Gossip Stone", {}); - locationTable[LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x34, "LW Near Shortcuts Gossip Stone", {}); - locationTable[DMT_STORMS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x37, "DMT Storms Grotto Gossip Stone", {}); - locationTable[DMC_UPPER_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(0x00, 0x3A, "DMC Upper Grotto Gossip Stone", {}); + locationTable[HF_NEAR_MARKET_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_HF_NEAR_MARKET_GOSSIP_STONE, 0x00, 0x30, "HF Near Market Gossip Stone", {}); + locationTable[HF_SOUTHEAST_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_HF_SOUTHEAST_GOSSIP_STONE, 0x00, 0x32, "HF Southeast Gossip Stone", {}); + locationTable[HF_OPEN_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_HF_OPEN_GROTTO_GOSSIP_STONE, 0x00, 0x33, "HF Open Grotto Gossip Stone", {}); + locationTable[KAK_OPEN_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, 0x00, 0x38, "Kak Open Grotto Gossip Stone", {}); + locationTable[ZR_OPEN_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, 0x00, 0x39, "ZR Open Grotto Gossip Stone", {}); + locationTable[KF_STORMS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_KF_STORMS_GOSSIP_STONE, 0x00, 0x3C, "KF Storms Gossip Stone", {}); + locationTable[LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_LW_NEAR_SHORTCUTS_GOSSIP_STONE, 0x00, 0x34, "LW Near Shortcuts Gossip Stone", {}); + locationTable[DMT_STORMS_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, 0x00, 0x37, "DMT Storms Grotto Gossip Stone", {}); + locationTable[DMC_UPPER_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, 0x00, 0x3A, "DMC Upper Grotto Gossip Stone", {}); - locationTable[GANONDORF_HINT] = ItemLocation::OtherHint(0x00, 0x00, "Ganondorf Hint", {}); + locationTable[GANONDORF_HINT] = ItemLocation::OtherHint(RC_GANONDORF_HINT, 0x00, 0x00, "Ganondorf Hint", {}); } std::vector KF_ShopLocations = { @@ -1005,6 +1011,56 @@ std::vector> ShopLocationLists = { GC_ShopLocations, }; +//List of scrubs, used for pricing the scrubs +std::vector ScrubLocations = { + LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, + LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, + LW_DEKU_SCRUB_NEAR_BRIDGE, + LW_DEKU_SCRUB_GROTTO_REAR, + LW_DEKU_SCRUB_GROTTO_FRONT, + SFM_DEKU_SCRUB_GROTTO_REAR, + SFM_DEKU_SCRUB_GROTTO_FRONT, + HF_DEKU_SCRUB_GROTTO, + LH_DEKU_SCRUB_GROTTO_LEFT, + LH_DEKU_SCRUB_GROTTO_RIGHT, + LH_DEKU_SCRUB_GROTTO_CENTER, + GV_DEKU_SCRUB_GROTTO_REAR, + GV_DEKU_SCRUB_GROTTO_FRONT, + COLOSSUS_DEKU_SCRUB_GROTTO_REAR, + COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, + GC_DEKU_SCRUB_GROTTO_LEFT, + GC_DEKU_SCRUB_GROTTO_RIGHT, + GC_DEKU_SCRUB_GROTTO_CENTER, + DMC_DEKU_SCRUB, + DMC_DEKU_SCRUB_GROTTO_LEFT, + DMC_DEKU_SCRUB_GROTTO_RIGHT, + DMC_DEKU_SCRUB_GROTTO_CENTER, + ZR_DEKU_SCRUB_GROTTO_REAR, + ZR_DEKU_SCRUB_GROTTO_FRONT, + LLR_DEKU_SCRUB_GROTTO_LEFT, + LLR_DEKU_SCRUB_GROTTO_RIGHT, + LLR_DEKU_SCRUB_GROTTO_CENTER, + DEKU_TREE_MQ_DEKU_SCRUB, + DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, + DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, + DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, + DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, + DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, + DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, + DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, + DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, + JABU_JABUS_BELLY_DEKU_SCRUB, + GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, + GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, + GANONS_CASTLE_DEKU_SCRUB_RIGHT, + GANONS_CASTLE_DEKU_SCRUB_LEFT, + GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, + GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, + GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, + GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, + GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, +}; + //List of gossip stone locations for hints std::vector gossipStoneLocations = { DMC_GOSSIP_STONE, @@ -1302,6 +1358,11 @@ std::vector overworldLocations = { //Zoras River ZR_OPEN_GROTTO_CHEST, ZR_MAGIC_BEAN_SALESMAN, + ZR_FROGS_ZELDAS_LULLABY, + ZR_FROGS_EPONAS_SONG, + ZR_FROGS_SARIAS_SONG, + ZR_FROGS_SUNS_SONG, + ZR_FROGS_SONG_OF_TIME, ZR_FROGS_IN_THE_RAIN, ZR_FROGS_OCARINA_GAME, ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, diff --git a/soh/soh/Enhancements/randomizer/3drando/item_location.hpp b/soh/soh/Enhancements/randomizer/3drando/item_location.hpp index 2f6bdc52d..efe1a6257 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_location.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_location.hpp @@ -9,6 +9,7 @@ #include #include "spoiler_log.hpp" #include "item_list.hpp" +#include "../randomizerTypes.h" enum ItemOverride_Type { OVR_BASE_ITEM = 0, @@ -154,8 +155,8 @@ public: class ItemLocation { public: ItemLocation() = default; - ItemLocation(uint8_t scene_, ItemLocationType type_, uint8_t flag_, std::string name_, uint32_t hintKey_, uint32_t vanillaItem_, std::vector categories_, uint16_t price_ = 0, SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup_ = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) - : scene(scene_), type(type_), flag(flag_), name(std::move(name_)), hintKey(hintKey_), vanillaItem(vanillaItem_), categories(std::move(categories_)), price(price_), collectionCheck(collectionCheck_), collectionCheckGroup(collectionCheckGroup_) {} + ItemLocation(RandomizerCheck rc_, uint8_t scene_, ItemLocationType type_, uint8_t flag_, std::string name_, uint32_t hintKey_, uint32_t vanillaItem_, std::vector categories_, uint16_t price_ = 0, SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup_ = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) + : rc(rc_), scene(scene_), type(type_), flag(flag_), name(std::move(name_)), hintKey(hintKey_), vanillaItem(vanillaItem_), categories(std::move(categories_)), price(price_), collectionCheck(collectionCheck_), collectionCheckGroup(collectionCheckGroup_) {} ItemOverride_Key Key() const { ItemOverride_Key key; @@ -167,6 +168,10 @@ public: return key; } + RandomizerCheck GetRandomizerCheck() const { + return rc; + } + SpoilerCollectionCheck GetCollectionCheck() const { return collectionCheck; } @@ -252,8 +257,8 @@ public: } void SetPrice(uint16_t price_) { - //don't override price if the price was set for shopsanity - if (hasShopsanityPrice) { + //don't override price if the price was set for shopsanity/scrubsanity + if (hasShopsanityPrice || hasScrubsanityPrice) { return; } price = price_; @@ -264,10 +269,19 @@ public: hasShopsanityPrice = true; } + void SetScrubsanityPrice(uint16_t price_) { + price = price_; + hasScrubsanityPrice = true; + } + bool HasShopsanityPrice() const { return hasShopsanityPrice; } + bool HasScrubsanityPrice() const { + return hasScrubsanityPrice; + } + bool IsExcluded() const { return excludedOption.Value(); } @@ -368,48 +382,48 @@ public: } } - static auto Base(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::Base, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; + static auto Base(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::Base, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; } - static auto Chest(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::Chest, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, SpoilerCollectionCheck(SpoilerCollectionCheckType::SPOILER_CHK_CHEST, scene, flag), collectionCheckGroup}; + static auto Chest(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::Chest, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, SpoilerCollectionCheck(SpoilerCollectionCheckType::SPOILER_CHK_CHEST, scene, flag), collectionCheckGroup}; } - static auto Chest(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::Chest, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; + static auto Chest(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::Chest, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; } - static auto Collectable(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::Collectable, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, SpoilerCollectionCheck(SpoilerCollectionCheckType::SPOILER_CHK_COLLECTABLE, scene, flag), collectionCheckGroup}; + static auto Collectable(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::Collectable, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, SpoilerCollectionCheck(SpoilerCollectionCheckType::SPOILER_CHK_COLLECTABLE, scene, flag), collectionCheckGroup}; } - static auto Collectable(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::Collectable, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; + static auto Collectable(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::Collectable, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; } - static auto GSToken(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::GSToken, flag, std::move(name), hintKey, GOLD_SKULLTULA_TOKEN, std::move(categories), 0, SpoilerCollectionCheck(SpoilerCollectionCheckType::SPOILER_CHK_GOLD_SKULLTULA, scene, flag), collectionCheckGroup}; + static auto GSToken(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, std::vector&& categories, SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::GSToken, flag, std::move(name), hintKey, GOLD_SKULLTULA_TOKEN, std::move(categories), 0, SpoilerCollectionCheck(SpoilerCollectionCheckType::SPOILER_CHK_GOLD_SKULLTULA, scene, flag), collectionCheckGroup}; } - static auto GrottoScrub(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::GrottoScrub, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; + static auto GrottoScrub(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::GrottoScrub, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; } - static auto Delayed(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::Delayed, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; + static auto Delayed(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::Delayed, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; } - static auto Reward(uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { - return ItemLocation{scene, ItemLocationType::TempleReward, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; + static auto Reward(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, const uint32_t hintKey, const uint32_t vanillaItem, std::vector&& categories, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), SpoilerCollectionCheckGroup collectionCheckGroup = SpoilerCollectionCheckGroup::GROUP_NO_GROUP) { + return ItemLocation{rc, scene, ItemLocationType::TempleReward, flag, std::move(name), hintKey, vanillaItem, std::move(categories), 0, collectionCheck, collectionCheckGroup}; } - static auto OtherHint(uint8_t scene, uint8_t flag, std::string&& name, std::vector&& categories) { - return ItemLocation{scene, ItemLocationType::OtherHint, flag, std::move(name), NONE, NONE, std::move(categories)}; + static auto OtherHint(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, std::vector&& categories) { + return ItemLocation{rc, scene, ItemLocationType::OtherHint, flag, std::move(name), NONE, NONE, std::move(categories)}; } - static auto HintStone(uint8_t scene, uint8_t flag, std::string&& name, std::vector&& categories) { - return ItemLocation{scene, ItemLocationType::HintStone, flag, std::move(name), NONE, NONE, std::move(categories)}; + static auto HintStone(RandomizerCheck rc, uint8_t scene, uint8_t flag, std::string&& name, std::vector&& categories) { + return ItemLocation{rc, scene, ItemLocationType::HintStone, flag, std::move(name), NONE, NONE, std::move(categories)}; } void ResetVariables() { @@ -421,10 +435,12 @@ public: isHintable = false; price = 0; hasShopsanityPrice = false; + hasScrubsanityPrice = false; hidden = false; } private: + RandomizerCheck rc; uint8_t scene; ItemLocationType type; uint8_t flag; @@ -445,6 +461,7 @@ private: bool isHintable = false; uint32_t parentRegion = NONE; bool hasShopsanityPrice = false; + bool hasScrubsanityPrice = false; bool hidden = false; }; @@ -461,6 +478,8 @@ ItemLocation* Location(uint32_t locKey); extern std::vector> ShopLocationLists; +extern std::vector ScrubLocations; + extern std::vector gossipStoneLocations; extern std::vector dungeonRewardLocations; diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index ad85bd401..d6676fa6c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -729,6 +729,16 @@ void GenerateItemPool() { PlaceItemInLocation(WASTELAND_BOMBCHU_SALESMAN, BOMBCHU_10, false, true); } + if (ShuffleFrogSongRupees) { + AddItemToMainPool(PURPLE_RUPEE, 5); + } else { + PlaceItemInLocation(ZR_FROGS_ZELDAS_LULLABY, PURPLE_RUPEE, false, true); + PlaceItemInLocation(ZR_FROGS_EPONAS_SONG, PURPLE_RUPEE, false, true); + PlaceItemInLocation(ZR_FROGS_SARIAS_SONG, PURPLE_RUPEE, false, true); + PlaceItemInLocation(ZR_FROGS_SUNS_SONG, PURPLE_RUPEE, false, true); + PlaceItemInLocation(ZR_FROGS_SONG_OF_TIME, PURPLE_RUPEE, false, true); + } + if (ShuffleAdultTradeQuest) { AddItemToMainPool(POCKET_EGG); AddItemToMainPool(COJIRO); diff --git a/soh/soh/Enhancements/randomizer/3drando/keys.hpp b/soh/soh/Enhancements/randomizer/3drando/keys.hpp index 3e8d8f5cd..0ce91d6a4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/keys.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/keys.hpp @@ -472,6 +472,11 @@ typedef enum { //ZORA'S_RIVER ZR_MAGIC_BEAN_SALESMAN, ZR_OPEN_GROTTO_CHEST, + ZR_FROGS_ZELDAS_LULLABY, + ZR_FROGS_EPONAS_SONG, + ZR_FROGS_SARIAS_SONG, + ZR_FROGS_SUNS_SONG, + ZR_FROGS_SONG_OF_TIME, ZR_FROGS_IN_THE_RAIN, ZR_FROGS_OCARINA_GAME, ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, 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 e46bfff0a..6c57b161b 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 @@ -235,7 +235,7 @@ void AreaTable_Init_DodongosCavern() { areaTable[DODONGOS_CAVERN_BOSS_ROOM] = Area("Dodongos Cavern Boss Room", "Dodongos Cavern", DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&DodongosCavernClear, {[]{return DodongosCavernClear || (Here(DODONGOS_CAVERN_BOSS_ROOM, []{return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield);}) && (Bombs || GoronBracelet) && (IsAdult || Sticks || KokiriSword));}, - /*Glitched*/[]{return Here(DODONGOS_CAVERN_BOSS_ROOM, []{return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield) || (GlitchBlueFireWall && BlueFire);}) && (HasExplosives || GoronBracelet) && (IsAdult || Sticks || KokiriSword || CanUse(MEGATON_HAMMER));}}), + /*Glitched*/[]{return Here(DODONGOS_CAVERN_BOSS_ROOM, []{return HasExplosives || (CanUse(MEGATON_HAMMER) && CanShield) || (GlitchBlueFireWall && HasBottle && BlueFireAccess);}) && (HasExplosives || GoronBracelet) && (IsAdult || Sticks || KokiriSword || CanUse(MEGATON_HAMMER));}}), }, { //Locations LocationAccess(DODONGOS_CAVERN_BOSS_ROOM_CHEST, {[]{return true;}}), 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 383b72b9f..7b3bb11fa 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 @@ -86,8 +86,8 @@ void AreaTable_Init_GanonsCastle() { areaTable[GANONS_CASTLE_SPIRIT_TRIAL] = Area("Ganon's Castle Spirit Trial", "Ganon's Castle", GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { //Events - EventAccess(&NutPot, {[]{return NutPot || ((LogicSpiritTrialHookshot || CanUse(HOOKSHOT)) && HasBombchus && Bow && MirrorShield && IsAdult);}}), - EventAccess(&SpiritTrialClear, {[]{return CanUse(LIGHT_ARROWS) && MirrorShield && HasBombchus && (LogicSpiritTrialHookshot || CanUse(HOOKSHOT));}}), + EventAccess(&NutPot, {[]{return NutPot || ((LogicSpiritTrialHookshot || CanUse(HOOKSHOT)) && HasBombchus && Bow && (MirrorShield || (SunlightArrows && CanUse(LIGHT_ARROWS))) && IsAdult);}}), + EventAccess(&SpiritTrialClear, {[]{return CanUse(LIGHT_ARROWS) && (MirrorShield || SunlightArrows) && HasBombchus && (LogicSpiritTrialHookshot || CanUse(HOOKSHOT));}}), }, { //Locations LocationAccess(GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, {[]{return LogicSpiritTrialHookshot || CanUse(HOOKSHOT);}}), @@ -189,16 +189,16 @@ void AreaTable_Init_GanonsCastle() { areaTable[GANONS_CASTLE_MQ_SPIRIT_TRIAL] = Area("Ganon's Castle MQ Spirit Castle", "Ganons Castle", GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { //Events - EventAccess(&SpiritTrialClear, {[]{return IsAdult && CanUse(LIGHT_ARROWS) && Hammer && HasBombchus && FireArrows && MirrorShield;}}), - EventAccess(&NutPot, {[]{return NutPot || (Hammer && HasBombchus && IsAdult && CanUse(FIRE_ARROWS) && MirrorShield);}}), + EventAccess(&SpiritTrialClear, {[]{return IsAdult && CanUse(LIGHT_ARROWS) && Hammer && HasBombchus && ((FireArrows && MirrorShield) || SunlightArrows);}}), + EventAccess(&NutPot, {[]{return NutPot || (Hammer && HasBombchus && IsAdult && ((CanUse(FIRE_ARROWS) && MirrorShield) || (SunlightArrows && CanUse(LIGHT_ARROWS))));}}), }, { //Locations LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, {[]{return IsAdult && Bow && Hammer;}}), LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, {[]{return IsAdult && Bow && Hammer && HasBombchus && (LogicLensCastleMQ || CanUse(LENS_OF_TRUTH));}}), - LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD);}}), - LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD);}}), - LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, {[]{return IsAdult && Hammer && HasBombchus && CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD);}}), - LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD);}}), + LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && ((CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD)) || (SunlightArrows && CanUse(LIGHT_ARROWS)));}}), + LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && ((CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD)) || (SunlightArrows && CanUse(LIGHT_ARROWS)));}}), + LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, {[]{return IsAdult && Hammer && HasBombchus && ((CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD)) || (SunlightArrows && CanUse(LIGHT_ARROWS)));}}), + LocationAccess(GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && ((CanUse(FIRE_ARROWS) && CanUse(MIRROR_SHIELD)) || (SunlightArrows && CanUse(LIGHT_ARROWS)));}}), }, {}); areaTable[GANONS_CASTLE_MQ_LIGHT_TRIAL] = Area("Ganon's Castle MQ Light Trial", "Ganons Castle", GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, { 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 4bfd7c269..21668ae95 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 @@ -51,7 +51,7 @@ void AreaTable_Init_SpiritTemple() { ((SmallKeys(SPIRIT_TEMPLE, 3) || (SmallKeys(SPIRIT_TEMPLE, 2) && BombchusInLogic && ShuffleDungeonEntrances.Is(SHUFFLEDUNGEONS_OFF))) && CanUse(SILVER_GAUNTLETS) && (HasProjectile(HasProjectileAge::Adult) || CanTakeDamage));}}), }, { //Exits - Entrance(SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return HasExplosives;}}), + Entrance(SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return HasExplosives || (SunlightArrows && CanUse(LIGHT_ARROWS));}}), }); areaTable[SPIRIT_TEMPLE_EARLY_ADULT] = Area("Early Adult Spirit Temple", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { @@ -114,7 +114,7 @@ void AreaTable_Init_SpiritTemple() { areaTable[SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Central Locked Door", "Spirit Temple", SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LocationAccess(SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, {[]{return MirrorShield && HasExplosives;}}), + LocationAccess(SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, {[]{return (MirrorShield || (SunlightArrows && CanUse(LIGHT_ARROWS))) && HasExplosives;}}), LocationAccess(SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, {[]{return (LogicLensSpirit || CanUse(LENS_OF_TRUTH)) && HasExplosives;}}), LocationAccess(SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, {[]{return (LogicLensSpirit || CanUse(LENS_OF_TRUTH)) && HasExplosives;}}), }, { @@ -128,7 +128,7 @@ void AreaTable_Init_SpiritTemple() { }, { //Locations LocationAccess(SPIRIT_TEMPLE_BOSS_KEY_CHEST, {[]{return CanPlay(ZeldasLullaby) && ((CanTakeDamage && LogicFlamingChests) || (Bow && Hookshot));}}), - LocationAccess(SPIRIT_TEMPLE_TOPMOST_CHEST, {[]{return MirrorShield;}}), + LocationAccess(SPIRIT_TEMPLE_TOPMOST_CHEST, {[]{return MirrorShield || (SunlightArrows && CanUse(LIGHT_ARROWS));}}), LocationAccess(SPIRIT_TEMPLE_TWINROVA_HEART, {[]{return MirrorShield && HasExplosives && Hookshot && BossKeySpiritTemple;}}), LocationAccess(TWINROVA, {[]{return MirrorShield && HasExplosives && Hookshot && BossKeySpiritTemple;}}), }, {}); @@ -172,12 +172,12 @@ void AreaTable_Init_SpiritTemple() { LocationAccess(SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, {[]{return (LogicLensSpiritMQ || CanUse(LENS_OF_TRUTH));}}), LocationAccess(SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, {[]{return SmallKeys(SPIRIT_TEMPLE, 5);}}), LocationAccess(SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, {[]{return SmallKeys(SPIRIT_TEMPLE, 5) && CanPlay(SongOfTime);}}), - LocationAccess(SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, {[]{return SmallKeys(SPIRIT_TEMPLE, 5) && CanPlay(SongOfTime) && MirrorShield;}}), + LocationAccess(SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, {[]{return SmallKeys(SPIRIT_TEMPLE, 5) && CanPlay(SongOfTime) && (MirrorShield || (SunlightArrows && CanUse(LIGHT_ARROWS)));}}), LocationAccess(SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, {[]{return SmallKeys(SPIRIT_TEMPLE, 7);}}), LocationAccess(SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, {[]{return SmallKeys(SPIRIT_TEMPLE, 7);}}), }, { //Exits - Entrance(SPIRIT_TEMPLE_MQ_LOWER_ADULT, {[]{return MirrorShield && IsAdult && CanUse(FIRE_ARROWS);}}), + Entrance(SPIRIT_TEMPLE_MQ_LOWER_ADULT, {[]{return (MirrorShield || (SunlightArrows && CanUse(LIGHT_ARROWS))) && IsAdult && CanUse(FIRE_ARROWS);}}), //Trick: MirrorShield && IsAdult && (CanUse(FIRE_ARROWS) || (LogicSpiritMQLowerAdult && CanUse(DINS_FIRE) && Bow)) Entrance(SPIRIT_TEMPLE_MQ_SHARED, {[]{return true;}}), Entrance(SPIRIT_TEMPLE_MQ_BOSS_AREA, {[]{return SmallKeys(SPIRIT_TEMPLE, 6) && CanPlay(ZeldasLullaby) && Hammer;}}), 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 bff5d7563..3b257e16a 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 @@ -31,6 +31,21 @@ void AreaTable_Init_ZorasDomain() { LocationAccess(ZR_FROGS_IN_THE_RAIN, {[]{return IsChild && CanPlay(SongOfStorms);}, /*Glitched*/[]{return (CanDoGlitch(GlitchType::OutdoorBombOI, GlitchDifficulty::ADVANCED) || ((Bugs || Fish) && CanShield && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED)) || ((Bugs || Fish) && CanShield && HasBombchus && CanDoGlitch(GlitchType::ActionSwap, GlitchDifficulty::ADVANCED))) && IsChild && SongOfStorms;}}), + LocationAccess(ZR_FROGS_ZELDAS_LULLABY, {[]{return IsChild && CanPlay(ZeldasLullaby);}, + /*Glitched*/[]{return (CanDoGlitch(GlitchType::OutdoorBombOI, GlitchDifficulty::ADVANCED) || ((Bugs || Fish) && CanShield && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED)) || + ((Bugs || Fish) && CanShield && HasBombchus && CanDoGlitch(GlitchType::ActionSwap, GlitchDifficulty::ADVANCED))) && IsChild && ZeldasLullaby;}}), + LocationAccess(ZR_FROGS_EPONAS_SONG, {[]{return IsChild && CanPlay(EponasSong);}, + /*Glitched*/[]{return (CanDoGlitch(GlitchType::OutdoorBombOI, GlitchDifficulty::ADVANCED) || ((Bugs || Fish) && CanShield && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED)) || + ((Bugs || Fish) && CanShield && HasBombchus && CanDoGlitch(GlitchType::ActionSwap, GlitchDifficulty::ADVANCED))) && IsChild && EponasSong;}}), + LocationAccess(ZR_FROGS_SARIAS_SONG, {[]{return IsChild && CanPlay(SariasSong);}, + /*Glitched*/[]{return (CanDoGlitch(GlitchType::OutdoorBombOI, GlitchDifficulty::ADVANCED) || ((Bugs || Fish) && CanShield && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED)) || + ((Bugs || Fish) && CanShield && HasBombchus && CanDoGlitch(GlitchType::ActionSwap, GlitchDifficulty::ADVANCED))) && IsChild && SariasSong;}}), + LocationAccess(ZR_FROGS_SUNS_SONG, {[]{return IsChild && CanPlay(SunsSong);}, + /*Glitched*/[]{return (CanDoGlitch(GlitchType::OutdoorBombOI, GlitchDifficulty::ADVANCED) || ((Bugs || Fish) && CanShield && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED)) || + ((Bugs || Fish) && CanShield && HasBombchus && CanDoGlitch(GlitchType::ActionSwap, GlitchDifficulty::ADVANCED))) && IsChild && SunsSong;}}), + LocationAccess(ZR_FROGS_SONG_OF_TIME, {[]{return IsChild && CanPlay(SongOfTime);}, + /*Glitched*/[]{return (CanDoGlitch(GlitchType::OutdoorBombOI, GlitchDifficulty::ADVANCED) || ((Bugs || Fish) && CanShield && CanDoGlitch(GlitchType::QPA, GlitchDifficulty::ADVANCED)) || + ((Bugs || Fish) && CanShield && HasBombchus && CanDoGlitch(GlitchType::ActionSwap, GlitchDifficulty::ADVANCED))) && IsChild && SongOfTime;}}), LocationAccess(ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, {[]{return IsChild || CanUse(HOVER_BOOTS) || (IsAdult && LogicZoraRiverLower);}}), LocationAccess(ZR_NEAR_DOMAIN_FREESTANDING_POH, {[]{return IsChild || CanUse(HOVER_BOOTS) || (IsAdult && LogicZoraRiverUpper);}}), LocationAccess(ZR_GS_LADDER, {[]{return IsChild && AtNight && CanChildAttack && CanGetNightTimeGS;}}), diff --git a/soh/soh/Enhancements/randomizer/3drando/logic.cpp b/soh/soh/Enhancements/randomizer/3drando/logic.cpp index f85e4ed2a..f2845c756 100644 --- a/soh/soh/Enhancements/randomizer/3drando/logic.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/logic.cpp @@ -685,7 +685,7 @@ namespace Logic { MasterSword = MasterSword || IsAdult; BiggoronSword = BiggoronSword || ProgressiveGiantKnife >= 2; - ScarecrowSong = ScarecrowSong || (ChildScarecrow && AdultScarecrow); + ScarecrowSong = ScarecrowSong || FreeScarecrow || (ChildScarecrow && AdultScarecrow); Scarecrow = Hookshot && CanPlay(ScarecrowSong); DistantScarecrow = Longshot && CanPlay(ScarecrowSong); @@ -702,7 +702,7 @@ namespace Logic { Nuts = DekuNutDrop || Nuts; Sticks = DekuStickDrop || Sticks; Bugs = HasBottle && BugsAccess; - BlueFire = HasBottle && BlueFireAccess; + BlueFire = (HasBottle && BlueFireAccess) || (BlueFireArrows && CanUse(ICE_ARROWS)); Fish = HasBottle && FishAccess; Fairy = HasBottle && FairyAccess; diff --git a/soh/soh/Enhancements/randomizer/3drando/menu.cpp b/soh/soh/Enhancements/randomizer/3drando/menu.cpp index 468758fe3..d566dd64a 100644 --- a/soh/soh/Enhancements/randomizer/3drando/menu.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/menu.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "cosmetics.hpp" @@ -516,12 +517,12 @@ void PrintOptionDescription() { printf("\x1b[22;0H%s", description.data()); } -std::string GenerateRandomizer(std::unordered_map cvarSettings) { +std::string GenerateRandomizer(std::unordered_map cvarSettings, std::set excludedLocations) { // if a blank seed was entered, make a random one srand(time(NULL)); Settings::seed = std::to_string(rand()); - int ret = Playthrough::Playthrough_Init(std::hash{}(Settings::seed), cvarSettings); + int ret = Playthrough::Playthrough_Init(std::hash{}(Settings::seed), cvarSettings, excludedLocations); if (ret < 0) { if (ret == -1) { // Failed to generate after 5 tries printf("\n\nFailed to generate after 5 tries.\nPress B to go back to the menu.\nA different seed might be " @@ -541,8 +542,18 @@ std::string GenerateRandomizer(std::unordered_map } Settings::Keysanity.RestoreDelayedOption(); } - - return "./Randomizer/" + Settings::seed + ".json"; + std::ostringstream fileNameStream; + for (int i = 0; i < Settings::hashIconIndexes.size(); i++) { + if (i) { + fileNameStream << '-'; + } + if (Settings::hashIconIndexes[i] < 10) { + fileNameStream << '0'; + } + fileNameStream << std::to_string(Settings::hashIconIndexes[i]); + } + std::string fileName = fileNameStream.str(); + return "./Randomizer/" + fileName + ".json"; } std::string GetInput(const char* hintText) { diff --git a/soh/soh/Enhancements/randomizer/3drando/menu.hpp b/soh/soh/Enhancements/randomizer/3drando/menu.hpp index 737c1d3cf..6be641f03 100644 --- a/soh/soh/Enhancements/randomizer/3drando/menu.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/menu.hpp @@ -2,6 +2,7 @@ #include #include +#include #include "soh/Enhancements/randomizer/randomizerTypes.h" #define MAIN_MENU 0 @@ -45,7 +46,7 @@ void PrintResetToDefaultsMenu(); void PrintGenerateMenu(); void ClearDescription(); void PrintOptionDescription(); -std::string GenerateRandomizer(std::unordered_map cvarSettings); +std::string GenerateRandomizer(std::unordered_map cvarSetting, std::set excludedLocations); std::string GetInput(const char* hintText); extern void MenuInit(); diff --git a/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp b/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp index cfcbdfa91..87fba2e50 100644 --- a/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/playthrough.cpp @@ -10,7 +10,7 @@ namespace Playthrough { -int Playthrough_Init(uint32_t seed, std::unordered_map cvarSettings) { +int Playthrough_Init(uint32_t seed, std::unordered_map cvarSettings, std::set excludedLocations) { // initialize the RNG with just the seed incase any settings need to be // resolved to something random Random_Init(seed); @@ -21,7 +21,7 @@ int Playthrough_Init(uint32_t seed, std::unordered_map{}(Settings::seed + settingsStr); Random_Init(finalHash); + Settings::hash = std::to_string(finalHash); Logic::UpdateHelpers(); diff --git a/soh/soh/Enhancements/randomizer/3drando/playthrough.hpp b/soh/soh/Enhancements/randomizer/3drando/playthrough.hpp index 5fd0e19ff..0adcce387 100644 --- a/soh/soh/Enhancements/randomizer/3drando/playthrough.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/playthrough.hpp @@ -4,6 +4,6 @@ #include "item_location.hpp" namespace Playthrough { -int Playthrough_Init(uint32_t seed, std::unordered_map cvarSettings); +int Playthrough_Init(uint32_t seed, std::unordered_map cvarSettings, std::set excludedLocations); int Playthrough_Repeat(int count = 1); } diff --git a/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp b/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp index ac68e579b..8262798d3 100644 --- a/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp @@ -11,7 +11,7 @@ #define TICKS_PER_SEC 268123480.0 -void RandoMain::GenerateRando(std::unordered_map cvarSettings) { +void RandoMain::GenerateRando(std::unordered_map cvarSettings, std::set excludedLocations) { HintTable_Init(); ItemTable_Init(); LocationTable_Init(); @@ -19,10 +19,16 @@ void RandoMain::GenerateRando(std::unordered_map cvarS // std::string settingsFileName = "./randomizer/latest_settings.json"; // CVar_SetString("gLoadedPreset", settingsFileName.c_str()); - std::string fileName = Ship::Window::GetPathRelativeToAppDirectory(GenerateRandomizer(cvarSettings).c_str()); + std::string fileName = Ship::Window::GetPathRelativeToAppDirectory(GenerateRandomizer(cvarSettings, excludedLocations).c_str()); CVar_SetString("gSpoilerLog", fileName.c_str()); CVar_Save(); CVar_Load(); CVar_SetS32("gNewSeedGenerated", 1); } + +std::array* RandoMain::GetFullItemTable() { + ItemTable_Init(); + + return GetFullItemTable_(); +} diff --git a/soh/soh/Enhancements/randomizer/3drando/rando_main.hpp b/soh/soh/Enhancements/randomizer/3drando/rando_main.hpp index 523620d1e..907e780e9 100644 --- a/soh/soh/Enhancements/randomizer/3drando/rando_main.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/rando_main.hpp @@ -1,5 +1,8 @@ #pragma once +#include "item.hpp" + namespace RandoMain { -void GenerateRando(std::unordered_map cvarSettings); +void GenerateRando(std::unordered_map cvarSettings, std::set excludedLocations); +std::array* GetFullItemTable(); } diff --git a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp index edca583e5..aa0c4637b 100644 --- a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp @@ -385,6 +385,13 @@ string_view merchantsHintsDesc = "These hints will make Medigoron and the "The Clearer Hints setting will affect how they\n" // "refer to the item."; // /*------------------------------ // +| SHUFFLE FROG SONG RUPEES | // +------------------------------*/ // +string_view frogSongRupeesDesc = "Enabling this adds 5 Purple Rupees to the item\n" // + "pool and shuffles the rewards from playing Zelda's\n" + "Lullaby, Epona's Song, Saria's Song, Sun's Song,\n" + "and Song of Time to the frogs in Zora's River.\n";// +/*------------------------------ // | SHUFFLE ADULT TRADE | // ------------------------------*/ // string_view adultTradeDesc = "Enabling this adds all of the adult trade quest\n"// @@ -586,6 +593,13 @@ string_view kingZoraSpeedRandom = "King Zora will move out of the way in 1 string_view completeMaskDesc = "Once the happy mask shop is opened, all masks\n" // "will be available to be borrowed."; // /*------------------------------ // +| ENABLE GLITCH CUTSCENES | // +------------------------------*/ // +string_view glitchCutscenesDesc = "The cutscenes of the Poes in Forest Temple and\n" // + "Darunia in Fire Temple will not be skipped.\n" // + "These cutscenes are only useful for glitched\n" // + "gameplay and can be safely skipped otherwise."; // +/*------------------------------ // | QUICK TEXT | // ------------------------------*/ // string_view quickTextDesc0 = "Quick text will be unchanged, requiring\n" // @@ -882,6 +896,16 @@ string_view gkDurabilityRandomSafe = "Each Giant's Knife will get a random du "between 10 and 50, with an average of 30."; // // /*------------------------------ // +| BLUE FIRE ARROWS | // +------------------------------*/ // +string_view blueFireArrowsDesc = "Ice Arrows gain the ability to melt red ice\n" // + "and break the mud walls in Dodongo's Cavern."; // +/*------------------------------ // +| SUNLIGHT ARROWS | // +------------------------------*/ // +string_view sunlightArrowsDesc = "Light Arrows gain the ability to activate sun\n" // + "switches."; // +/*------------------------------ // | MULTIPLAYER | // ------------------------------*/ // string_view mp_EnabledDesc = "Enables multiplayer.\n" // diff --git a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp index 396fdd24c..224563d5e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp @@ -126,6 +126,8 @@ extern string_view magicBeansDesc; extern string_view merchantsDesc; extern string_view merchantsHintsDesc; +extern string_view frogSongRupeesDesc; + extern string_view adultTradeDesc; extern string_view chestMinigameDesc; @@ -196,6 +198,8 @@ extern string_view kingZoraSpeedRandom; extern string_view completeMaskDesc; +extern string_view glitchCutscenesDesc; + extern string_view quickTextDesc0; extern string_view quickTextDesc1; extern string_view quickTextDesc2; @@ -280,6 +284,9 @@ extern string_view gkDurabilityVanilla; extern string_view gkDurabilityRandomRisk; extern string_view gkDurabilityRandomSafe; +extern string_view blueFireArrowsDesc; +extern string_view sunlightArrowsDesc; + extern string_view mp_EnabledDesc; extern string_view mp_SharedProgressDesc; extern string_view mp_SyncIdDesc; diff --git a/soh/soh/Enhancements/randomizer/3drando/settings.cpp b/soh/soh/Enhancements/randomizer/3drando/settings.cpp index 05fc10c4b..ddc5b315c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/settings.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/settings.cpp @@ -20,6 +20,7 @@ using namespace SFX; namespace Settings { std::string seed; + std::string hash; std::string version = RANDOMIZER_VERSION "-" COMMIT_NUMBER; std::array hashIconIndexes; @@ -52,19 +53,19 @@ namespace Settings { // Setting name, Options, Setting Descriptions (assigned in setting_descriptions.cpp) Category (default: Setting),Default index (default: 0), Default hidden (default: false) //Open Settings Any option index past the last description will use the last description Option RandomizeOpen = Option::Bool("Randomize Settings", {"No","Yes"}, {openRandomize}, OptionCategory::Toggle); - Option OpenForest = Option::U8 ("Forest", {"Closed", "Open", "Closed Deku"}, {forestClosed, forestOpen, forestClosedDeku}, OptionCategory::Setting, OPENFOREST_OPEN); + Option OpenForest = Option::U8 ("Forest", {"Closed", "Closed Deku", "Open"}, {forestClosed, forestClosedDeku, forestOpen}, OptionCategory::Setting, OPENFOREST_CLOSED); Option OpenKakariko = Option::U8 ("Kakariko Gate", {"Closed", "Open"}, {kakGateClosed, kakGateOpen}); - Option OpenDoorOfTime = Option::U8 ("Door of Time", {"Open", "Closed", "Intended"}, {doorOfTimeOpen, doorOfTimeClosed, doorOfTimeIntended}); - Option ZorasFountain = Option::U8 ("Zora's Fountain", {"Normal", "Adult", "Open"}, {fountainNormal, fountainAdult, fountainOpen}); + Option OpenDoorOfTime = Option::U8 ("Door of Time", {"Closed", "Song only", "Open"}, {doorOfTimeIntended, doorOfTimeClosed, doorOfTimeOpen}); + Option ZorasFountain = Option::U8 ("Zora's Fountain", {"Closed", "Closed as child", "Open"}, {fountainNormal, fountainAdult, fountainOpen}); Option GerudoFortress = Option::U8 ("Gerudo Fortress", {"Normal", "Fast", "Open"}, {gerudoNormal, gerudoFast, gerudoOpen}); - Option Bridge = Option::U8 ("Rainbow Bridge", {"Open", "Vanilla", "Stones", "Medallions", "Rewards", "Dungeons", "Tokens"}, {bridgeOpen, bridgeVanilla, bridgeStones, bridgeMedallions, bridgeRewards, bridgeDungeons, bridgeTokens}, OptionCategory::Setting, RAINBOWBRIDGE_VANILLA); - Option BridgeStoneCount = Option::U8 (" Stone Count", {NumOpts(0, 3)}, {bridgeStoneCountDesc}, OptionCategory::Setting, 1, true); - Option BridgeMedallionCount= Option::U8 (" Medallion Count", {NumOpts(0, 6)}, {bridgeMedallionCountDesc}, OptionCategory::Setting, 1, true); - Option BridgeRewardCount = Option::U8 (" Reward Count", {NumOpts(0, 9)}, {bridgeRewardCountDesc}, OptionCategory::Setting, 1, true); - Option BridgeDungeonCount = Option::U8 (" Dungeon Count", {NumOpts(0, 8)}, {bridgeDungeonCountDesc}, OptionCategory::Setting, 1, true); - Option BridgeTokenCount = Option::U8 (" Token Count", {NumOpts(0, 100)}, {bridgeTokenCountDesc}, OptionCategory::Setting, 1, true); + Option Bridge = Option::U8 ("Rainbow Bridge", {"Vanilla", "Always open", "Stones", "Medallions", "Dungeon rewards", "Dungeons", "Tokens"}, {bridgeVanilla, bridgeOpen, bridgeStones, bridgeMedallions, bridgeRewards, bridgeDungeons, bridgeTokens}, OptionCategory::Setting, RAINBOWBRIDGE_VANILLA); + Option BridgeStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 3)}, {bridgeStoneCountDesc}, OptionCategory::Setting, 1, true); + Option BridgeMedallionCount= Option::U8 ("Medallion Count", {NumOpts(0, 6)}, {bridgeMedallionCountDesc}, OptionCategory::Setting, 1, true); + Option BridgeRewardCount = Option::U8 ("Reward Count", {NumOpts(0, 9)}, {bridgeRewardCountDesc}, OptionCategory::Setting, 1, true); + Option BridgeDungeonCount = Option::U8 ("Dungeon Count", {NumOpts(0, 8)}, {bridgeDungeonCountDesc}, OptionCategory::Setting, 1, true); + Option BridgeTokenCount = Option::U8 ("Token Count", {NumOpts(0, 100)}, {bridgeTokenCountDesc}, OptionCategory::Setting, 1, true); Option RandomGanonsTrials = Option::Bool("Random Ganon's Trials", {"Off", "On"}, {randomGanonsTrialsDesc}, OptionCategory::Setting, ON); - Option GanonsTrialsCount = Option::U8 (" Trial Count", {NumOpts(0, 6)}, {ganonsTrialCountDesc}, OptionCategory::Setting, 1, true); + Option GanonsTrialsCount = Option::U8 ("Trial Count", {NumOpts(0, 6)}, {ganonsTrialCountDesc}, OptionCategory::Setting, 1, true); std::vector