From 84130b8046ff70c5aa3c63e0e749bb62860e77bf Mon Sep 17 00:00:00 2001 From: Pepe20129 <72659707+Pepe20129@users.noreply.github.com> Date: Thu, 3 Oct 2024 01:31:11 +0200 Subject: [PATCH] Add 5, 6 & 7 item shopsanity. (#4280) * Format shops.cpp * Add 5, 6 & 7 item shopsanity * Guarantee a bombchu refill * Fish first shop item index * Clean up NonShopItems * Split count options * Improve item ordering Ensure potions, blue fire and fairy on shopsanity 6 and less. There are no hearts in the first 28 items (the ones from n64 rando). * Post-merge fixes --- .../Enhancements/debugger/debugSaveEditor.cpp | 11 +- soh/soh/Enhancements/presets.h | 5 +- .../Enhancements/randomizer/3drando/fill.cpp | 35 +- .../randomizer/3drando/item_pool.cpp | 10 +- .../Enhancements/randomizer/3drando/shops.cpp | 1776 +++++++++-------- .../Enhancements/randomizer/3drando/shops.hpp | 5 +- .../randomizer/3drando/spoiler_log.cpp | 2 +- soh/soh/Enhancements/randomizer/context.cpp | 7 +- soh/soh/Enhancements/randomizer/item.cpp | 18 +- .../randomizer/option_descriptions.cpp | 16 +- .../Enhancements/randomizer/randomizer.cpp | 14 +- .../Enhancements/randomizer/randomizerTypes.h | 22 +- .../randomizer/randomizer_check_objects.cpp | 12 +- .../randomizer/randomizer_check_tracker.cpp | 7 +- .../randomizer/randomizer_item_tracker.cpp | 8 +- soh/soh/Enhancements/randomizer/settings.cpp | 29 +- .../overlays/actors/ovl_En_Ossan/z_en_ossan.c | 10 +- 17 files changed, 1095 insertions(+), 892 deletions(-) diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 55fafc505..46f142054 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -1320,7 +1320,16 @@ void DrawEquipmentTab() { "Giant (500)", }; // only display Tycoon wallet if you're in a save file that would allow it. - if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) > RO_SHOPSANITY_ZERO_ITEMS) { + if ( + IS_RANDO && + !( + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) == RO_SHOPSANITY_OFF || + ( + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) == RO_SHOPSANITY_SPECIFIC_COUNT && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY_COUNT) == RO_SHOPSANITY_COUNT_ZERO_ITEMS + ) + ) + ) { const std::string walletName = "Tycoon (999)"; walletNamesImpl.push_back(walletName); } diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index 5a4b2443c..53f41daad 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -1121,7 +1121,8 @@ const std::vector hellModePresetEntries = { PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LinksPocket"), RO_LINKS_POCKET_NOTHING), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_RANDOM_NUMBER), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_DUNGEON_REWARDS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_FOUR_ITEMS), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_SPECIFIC_COUNT), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityCount"), RO_SHOPSANITY_COUNT_FOUR_ITEMS), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_SHOPSANITY_PRICE_TYCOON), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), 1), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBeans"), 1), @@ -1177,7 +1178,7 @@ const std::vector BenchmarkPresetEntries = { PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), RO_DUNGEON_REWARDS_END_OF_DUNGEON), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LinksPocket"), RO_LINKS_POCKET_DUNGEON_REWARD), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_FOUR_ITEMS), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_COUNT_FOUR_ITEMS), //RANDOTODO add refactored price/scrub/merchant settings PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_ON), diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 953b9338a..08861f7b4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1158,7 +1158,7 @@ int Fill() { //Temporarily add shop items to the ItemPool so that entrance randomization //can validate the world using deku/hylian shields StartPerformanceTimer(PT_ENTRANCE_SHUFFLE); - AddElementsToPool(ItemPool, GetMinVanillaShopItems(32)); //assume worst case shopsanity 4 + AddElementsToPool(ItemPool, GetMinVanillaShopItems(8)); //assume worst case shopsanity 7 if (ctx->GetOption(RSK_SHUFFLE_ENTRANCES)) { SPDLOG_INFO("Shuffling Entrances..."); if (ctx->GetEntranceShuffler()->ShuffleAllEntrances() == ENTRANCE_SHUFFLE_FAILURE) { @@ -1175,36 +1175,41 @@ int Fill() { //ctx->showItemProgress = true; //Place shop items first, since a buy shield is needed to place a dungeon reward on Gohma due to access - + StartPerformanceTimer(PT_SHOPSANITY); - NonShopItems = {}; + NonShopItems.clear(); if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF)) { SPDLOG_INFO("Placing Vanilla Shop Items..."); PlaceVanillaShopItems(); //Place vanilla shop items in vanilla location } else { SPDLOG_INFO("Shuffling Shop Items"); int total_replaced = 0; - if (ctx->GetOption(RSK_SHOPSANITY).IsNot(RO_SHOPSANITY_ZERO_ITEMS)) { //Shopsanity 1-4, random - //Initialize NonShopItems - ItemAndPrice init; - init.Name = Text{"No Item", "Sin objeto", "Pas d'objet"}; - init.Price = -1; - init.Repurchaseable = false; - NonShopItems.assign(32, init); - //Indices from OoTR. So shopsanity one will overwrite 7, three will overwrite 7, 5, 8, etc. - const std::array indices = {7, 5, 8, 6}; + if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_RANDOM) || ctx->GetOption(RSK_SHOPSANITY_COUNT).IsNot(RO_SHOPSANITY_COUNT_ZERO_ITEMS)) { //Shopsanity 1-7, random + /* + Indices from OoTR. So shopsanity one will overwrite 7, three will overwrite 7, 5, 8, etc. + 8 6 2 4 + 7 5 1 3 + */ + const std::array indices = { 7, 5, 8, 6, 3, 1, 4, 2 }; //Overwrite appropriate number of shop items #define LOCATIONS_PER_SHOP 8 for (size_t i = 0; i < Rando::StaticData::GetShopLocations().size() / LOCATIONS_PER_SHOP; i++) { - int num_to_replace = GetShopsanityReplaceAmount(); //1-4 shop items will be overwritten, depending on settings + int num_to_replace = GetShopsanityReplaceAmount(); //1-7 shop items will be overwritten, depending on settings total_replaced += num_to_replace; for (int j = 0; j < num_to_replace; j++) { int itemindex = indices[j]; int shopsanityPrice = GetRandomShopPrice(); - NonShopItems[TransformShopIndex(i * LOCATIONS_PER_SHOP + itemindex - 1)].Price = - shopsanityPrice; // Set price to be retrieved by the patch and textboxes + NonShopItems[Rando::StaticData::GetShopLocations()[i * LOCATIONS_PER_SHOP + itemindex - 1]].Price = shopsanityPrice; // Set price to be retrieved by the patch and textboxes ctx->GetItemLocation(Rando::StaticData::GetShopLocations()[i * LOCATIONS_PER_SHOP + itemindex - 1])->SetCustomPrice(shopsanityPrice); } + for (int j = num_to_replace; j < 8; j++) { + ItemAndPrice init; + init.Name = Text { "No Item", "Sin objeto", "Pas d'objet" }; + init.Price = -1; + init.Repurchaseable = false; + int itemindex = indices[j]; + NonShopItems[Rando::StaticData::GetShopLocations()[i * LOCATIONS_PER_SHOP + itemindex - 1]] = init; // Set price to be retrieved by the patch and textboxes + } } #undef LOCATIONS_PER_SHOP } diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 33e6df5d4..464995df7 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1159,9 +1159,15 @@ void GenerateItemPool() { } //Shopsanity - if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_ZERO_ITEMS)) { + if ( + ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || + ( + ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && + ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS) + ) + ) { AddItemsToPool(ItemPool, normalRupees); - } else { //Shopsanity 1-4, random + } else { AddItemsToPool(ItemPool, shopsanityRupees); //Shopsanity gets extra large rupees } diff --git a/soh/soh/Enhancements/randomizer/3drando/shops.cpp b/soh/soh/Enhancements/randomizer/3drando/shops.cpp index 1aeb3379b..001c62ced 100644 --- a/soh/soh/Enhancements/randomizer/3drando/shops.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/shops.cpp @@ -3,12 +3,12 @@ #include "random.hpp" #include "shops.hpp" +#include #include #include #include "z64item.h" - -std::vector NonShopItems = {}; +std::map NonShopItems = {}; static std::array, 0xF1> trickNameTable; // Table of trick names for ice traps bool initTrickNames = false; //Indicates if trick ice trap names have been initialized yet @@ -29,82 +29,85 @@ void PlaceVanillaShopItems() { //Shopsanity random will have anywhere from the first 32 to the first 56, so the order of items after 32 is relevant std::vector GetMinVanillaShopItems(int total_replaced) { std::vector minShopItems = { - RG_BUY_DEKU_SHIELD, - RG_BUY_HYLIAN_SHIELD, - RG_BUY_GORON_TUNIC, - RG_BUY_ZORA_TUNIC, - RG_BUY_DEKU_NUTS_5, - RG_BUY_DEKU_NUTS_5, - RG_BUY_DEKU_NUTS_10, - RG_BUY_DEKU_STICK_1, - RG_BUY_DEKU_STICK_1, - RG_BUY_DEKU_SEEDS_30, - RG_BUY_ARROWS_10, - RG_BUY_ARROWS_10, - RG_BUY_ARROWS_30, - RG_BUY_ARROWS_50, - RG_BUY_BOMBCHUS_10, - RG_BUY_BOMBCHUS_10, - RG_BUY_BOMBCHUS_10, - RG_BUY_BOMBCHUS_20, - RG_BUY_BOMBS_525, - RG_BUY_BOMBS_535, - RG_BUY_BOMBS_10, - RG_BUY_BOMBS_20, - RG_BUY_GREEN_POTION, - RG_BUY_RED_POTION_30, - RG_BUY_BLUE_FIRE, - RG_BUY_FAIRYS_SPIRIT, - RG_BUY_BOTTLE_BUG, - RG_BUY_FISH, - //^First 28 items from OoTR - RG_BUY_HYLIAN_SHIELD, - RG_BUY_BOTTLE_BUG, - RG_BUY_DEKU_STICK_1, - RG_BUY_FAIRYS_SPIRIT, - //^First 32 items: Always guaranteed - RG_BUY_BLUE_FIRE, - RG_BUY_FISH, - RG_BUY_BOMBCHUS_10, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_10, - RG_BUY_BOMBCHUS_20, - RG_BUY_BOMBS_535, - RG_BUY_RED_POTION_30, - //^First 40 items: Exist on shopsanity 3 or less - RG_BUY_BOMBS_30, - RG_BUY_BOMBCHUS_20, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_10, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_30, - RG_BUY_RED_POTION_40, - RG_BUY_FISH, - //^First 48 items: Exist on shopsanity 2 or less - RG_BUY_BOMBCHUS_20, - RG_BUY_ARROWS_30, - RG_BUY_RED_POTION_50, - RG_BUY_ARROWS_30, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_50, - RG_BUY_ARROWS_50, - RG_BUY_GREEN_POTION, - //^First 56 items: Exist on shopsanity 1 or less - RG_BUY_POE, - RG_BUY_POE, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - //^All 64 items: Only exist with shopsanity 0 - }; - //Now delete however many items there are to replace - for (int i = 0; i < total_replaced; i++) { - minShopItems.pop_back(); - } - return minShopItems; + RG_BUY_DEKU_SHIELD, + RG_BUY_HYLIAN_SHIELD, + RG_BUY_GORON_TUNIC, + RG_BUY_ZORA_TUNIC, + RG_BUY_DEKU_NUTS_5, + RG_BUY_BOMBS_20, + RG_BUY_BOMBCHUS_10, + RG_BUY_DEKU_STICK_1, + //^First 8 items: Exist on shopsanity 7 or less + RG_BUY_FAIRYS_SPIRIT, + RG_BUY_DEKU_SEEDS_30, + RG_BUY_ARROWS_10, + RG_BUY_BLUE_FIRE, + RG_BUY_RED_POTION_30, + RG_BUY_GREEN_POTION, + RG_BUY_DEKU_NUTS_10, + RG_BUY_BOMBCHUS_10, + //^First 16 items: Exist on shopsanity 6 or less + RG_BUY_BOMBCHUS_10, + RG_BUY_BOMBCHUS_20, + RG_BUY_BOMBS_525, + RG_BUY_BOMBS_535, + RG_BUY_BOMBS_10, + RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_30, + RG_BUY_ARROWS_50, + //^First 24 items: Exist on shopsanity 5 or less + RG_BUY_ARROWS_10, + RG_BUY_FAIRYS_SPIRIT, + RG_BUY_BOTTLE_BUG, + RG_BUY_FISH, + //^First 28 items from OoTR + RG_BUY_HYLIAN_SHIELD, + RG_BUY_BOTTLE_BUG, + RG_BUY_DEKU_STICK_1, + RG_BUY_DEKU_STICK_1, + //^First 32 items: Exist on shopsanity 4 or less + RG_BUY_BLUE_FIRE, + RG_BUY_FISH, + RG_BUY_BOMBCHUS_10, + RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_10, + RG_BUY_BOMBCHUS_20, + RG_BUY_BOMBS_535, + RG_BUY_RED_POTION_30, + //^First 40 items: Exist on shopsanity 3 or less + RG_BUY_BOMBS_30, + RG_BUY_BOMBCHUS_20, + RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_10, + RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_30, + RG_BUY_RED_POTION_40, + RG_BUY_FISH, + //^First 48 items: Exist on shopsanity 2 or less + RG_BUY_BOMBCHUS_20, + RG_BUY_ARROWS_30, + RG_BUY_RED_POTION_50, + RG_BUY_ARROWS_30, + RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_50, + RG_BUY_ARROWS_50, + RG_BUY_GREEN_POTION, + //^First 56 items: Exist on shopsanity 1 or less + RG_BUY_POE, + RG_BUY_POE, + RG_BUY_HEART, + RG_BUY_HEART, + RG_BUY_HEART, + RG_BUY_HEART, + RG_BUY_HEART, + RG_BUY_HEART, + //^All 64 items: Only exist with shopsanity 0 + }; + //Now delete however many items there are to replace + for (int i = 0; i < total_replaced; i++) { + minShopItems.pop_back(); + } + return minShopItems; } //This table contains a cumulative probability for each possible shop price based on @@ -115,12 +118,12 @@ std::vector GetMinVanillaShopItems(int total_replaced) { //Average price ~126 //~38% chance of needing no wallet, ~45% chance of needing 1, ~17% chance of needing 2 static constexpr std::array ShopPriceProbability= { - 0.005326994, 0.014908518, 0.027114719, 0.041315285, 0.057136304, 0.074325887, 0.092667151, 0.112002061, 0.132198214, 0.153125390, - 0.174696150, 0.196810540, 0.219388148, 0.242361379, 0.265657012, 0.289205134, 0.312970402, 0.336877590, 0.360881110, 0.384932772, - 0.408976198, 0.432982176, 0.456902494, 0.480686053, 0.504313389, 0.527746488, 0.550938554, 0.573856910, 0.596465330, 0.618736235, - 0.640646600, 0.662162782, 0.683240432, 0.703859801, 0.724001242, 0.743631336, 0.762722631, 0.781259986, 0.799198449, 0.816521905, - 0.833208595, 0.849243398, 0.864579161, 0.879211177, 0.893112051, 0.906263928, 0.918639420, 0.930222611, 0.940985829, 0.950914731, - 0.959992180, 0.968187000, 0.975495390, 0.981884488, 0.987344345, 0.991851853, 0.995389113, 0.997937921, 0.999481947, 1.000000000, + 0.005326994, 0.014908518, 0.027114719, 0.041315285, 0.057136304, 0.074325887, 0.092667151, 0.112002061, 0.132198214, 0.153125390, + 0.174696150, 0.196810540, 0.219388148, 0.242361379, 0.265657012, 0.289205134, 0.312970402, 0.336877590, 0.360881110, 0.384932772, + 0.408976198, 0.432982176, 0.456902494, 0.480686053, 0.504313389, 0.527746488, 0.550938554, 0.573856910, 0.596465330, 0.618736235, + 0.640646600, 0.662162782, 0.683240432, 0.703859801, 0.724001242, 0.743631336, 0.762722631, 0.781259986, 0.799198449, 0.816521905, + 0.833208595, 0.849243398, 0.864579161, 0.879211177, 0.893112051, 0.906263928, 0.918639420, 0.930222611, 0.940985829, 0.950914731, + 0.959992180, 0.968187000, 0.975495390, 0.981884488, 0.987344345, 0.991851853, 0.995389113, 0.997937921, 0.999481947, 1.000000000, }; // Generate random number from 5 to wallet max @@ -131,7 +134,7 @@ int GetPriceFromMax(int max) { // Get random price out of available "affordable prices", or just return 10 if Starter wallet is selected (no need to randomly select // from a single element) int GetPriceAffordable() { - auto ctx = Rando::Context::GetInstance(); + auto ctx = Rando::Context::GetInstance(); if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_STARTER)) { return 10; } @@ -146,7 +149,7 @@ int GetPriceAffordable() { } int GetRandomShopPrice() { - auto ctx = Rando::Context::GetInstance(); + auto ctx = Rando::Context::GetInstance(); // If Shopsanity prices aren't Balanced, but Affordable is on, don't GetPriceFromMax if (ctx->GetOption(RSK_SHOPSANITY_PRICES_AFFORDABLE).Is(true) && ctx->GetOption(RSK_SHOPSANITY_PRICES).IsNot(RO_SHOPSANITY_PRICE_BALANCED)) { return GetPriceAffordable(); @@ -156,16 +159,13 @@ int GetRandomShopPrice() { int max = 0; // check settings for a wallet tier selection and set max amount as method for setting true randomization - if(ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_STARTER)) { + if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_STARTER)) { max = 19; // 95/5 - } - else if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_ADULT)) { + } else if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_ADULT)) { max = 40; // 200/5 - } - else if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_GIANT)) { + } else if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_GIANT)) { max = 100; // 500/5 - } - else if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_TYCOON)) { + } else if (ctx->GetOption(RSK_SHOPSANITY_PRICES).Is(RO_SHOPSANITY_PRICE_TYCOON)) { max = 199; // 995/5 } if (max != 0) { @@ -175,8 +175,8 @@ int GetRandomShopPrice() { int price = 150; // JUST in case something fails with the randomization, return sane price for balanced double random = RandomDouble(); //Randomly generated probability value for (size_t i = 0; i < ShopPriceProbability.size(); i++) { - if (random < ShopPriceProbability[i]) { //The randomly generated value has surpassed the total probability up to this point, so this is the generated price + if (random < ShopPriceProbability[i]) { price = i * 5; //i in range [0, 59], output in range [0, 295] in increments of 5 break; } @@ -188,8 +188,8 @@ int GetRandomShopPrice() { // multiplied by 20 instead of 60 to give values in rage [0, 95] in increments of 5 //Average price ~31 static constexpr std::array ScrubPriceProbability = { - 0.097500187, 0.190002748, 0.277509301, 0.360018376, 0.437522571, 0.510021715, 0.577520272, 0.640029304, 0.697527584, 0.750024535, - 0.797518749, 0.840011707, 0.877508776, 0.910010904, 0.937504342, 0.960004661, 0.977502132, 0.989998967, 0.997500116, 1.000000000, + 0.097500187, 0.190002748, 0.277509301, 0.360018376, 0.437522571, 0.510021715, 0.577520272, 0.640029304, 0.697527584, 0.750024535, + 0.797518749, 0.840011707, 0.877508776, 0.910010904, 0.937504342, 0.960004661, 0.977502132, 0.989998967, 0.997500116, 1.000000000, }; int16_t GetRandomScrubPrice() { @@ -202,748 +202,884 @@ int16_t GetRandomScrubPrice() { return -1; } -//Get 1 to 4, or a random number from 1-4 depending on shopsanity setting +//Get 0 to 7, or a random number from 1-7 depending on shopsanity setting int GetShopsanityReplaceAmount() { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_ONE_ITEM)) { - return 1; - } else if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_TWO_ITEMS)) { - return 2; - } else if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_THREE_ITEMS)) { - return 3; - } else if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_FOUR_ITEMS)) { - return 4; - } else { //Random, get number in [1, 4] - return Random(1, 5); - } + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF)) { + return 0; + } else if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT)) { + if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS)) { + return 0; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ONE_ITEM)) { + return 1; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_TWO_ITEMS)) { + return 2; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_THREE_ITEMS)) { + return 3; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_FOUR_ITEMS)) { + return 4; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_FIVE_ITEMS)) { + return 5; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_SIX_ITEMS)) { + return 6; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_SEVEN_ITEMS)) { + return 7; + } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_EIGHT_ITEMS)) { + return 8; //temporarily unreachable due to logic limitations + } + } else { //Random, get number in [1, 7] + return Random(1, 8); + } } //Initialize the table of trick names with an easy, medium, and hard name for each language void InitTrickNames() { - trickNameTable[RG_KOKIRI_SWORD] = { - Text{"Korok Sword", "Épée Korok", "Espada Korok"}, - Text{"Hero's Sword", "Épée du Héros", "Espada del héroe"}, - Text{"Razor Sword", "Lame Rasoir", "Espada de esmeril"}}; - trickNameTable[RG_MASTER_SWORD] = { //Master Sword without the GI enum - Text{"Goddess Sword", "Épée de la déesse", "Espada Divina"}, - Text{"Gilded Sword", "Excalibur", "Espada de los Sabios"}, - Text{"Magical Sword", "Lame dorée", "Fay"}}; - trickNameTable[RG_GIANTS_KNIFE] = { - Text{"Medigoron's Sword", "l'Épée de Medigoron", "La espada de Medigoron"}, - Text{"Razor Sword", "Lame Rasoir", "Espada de esmeril"}, - Text{"Royal Claymore", "Claymore Royale", "Royal Claymore"}}; - trickNameTable[RG_BIGGORON_SWORD] = { - Text{"Power Sword", "Épée de Puissance", "Espada de poder"}, - Text{"Fierce Deity Sword", "Épée du dieu démon", "Espada de la Fiera Deidad"}, - Text{"Tempered Sword", "Épée de Légende Nv.2", "Espada Maestra mejorada"}, - Text{"Biggoron's Knife", "Lame de Grogoron", "Daga de Biggoron"}}; - trickNameTable[RG_DEKU_SHIELD] = { - Text{"Boko Shield", "Bouclier Boko", "Escudo Boko"}, - Text{"Ordon Shield", "Bouclier de Toal", "Escudo de Ordon"}, - Text{"Wooden Shield", "Bouclier de Bois", "Escudo de madera"}}; - trickNameTable[RG_HYLIAN_SHIELD] = { - Text{"Hyrule Shield", "Bouclier d'Hyrule", "Escudo Hylian"}, - Text{"Goddess Shield", "Bouclier Sacré", "Escudo Divino"}, - Text{"Hero's Shield", "Bouclier du Héros", "Escudo del héroe"}}; - trickNameTable[RG_MIRROR_SHIELD] = { - Text{"Magic Mirror", "Miroir Magique", "Escudo mágico"}, - Text{"Magical Shield", "Bouclier Magique", "Escudo arcano"}, - Text{"Mirror of Twilight", "Miroir des Ombres", "Espejo del Crepúsculo"}}; - trickNameTable[RG_GORON_TUNIC] = { - Text{"Gerudo Top", "Tunique Gerudo", "Pechera gerudo"}, - Text{"Flamebreaker Armor", "Armure de Pierre", " Armadura ignífuga"}, - Text{"Red Mail", "Habits Rouges", "Ropas rojas"}}; - trickNameTable[RG_ZORA_TUNIC] = { - Text{"Rito Tunic", "Tunique Rito", "Sayo rito"}, - Text{"Mermaid Suit", "Costume de sirène", "Costume de sirène"}, - Text{"Zora Armor", "Armure Zora", "Túnica Zora"}, - Text{"Blue Mail", "Habits Bleus", "Ropas azules"}}; - trickNameTable[RG_IRON_BOOTS] = { - Text{"Iron Hoofs", "Patins de Plomb", "Botas férreas"}, - Text{"Snow Boots", "Bottes de Neige", "Botas de nieve"}, - Text{"Red Boots", "Bottes rouges", "Botas rojas"}, - Text{"Zora Greaves", "Bottes Zora", "Zora Greaves"}, - Text{"Boots of Power", "Bottes de Puissance", "Botas de plomo"}}; - trickNameTable[RG_HOVER_BOOTS] = { - Text{"Hover Hoofs", "Patins des airs", "Botas flotadoras"}, - Text{"Golden Boots", "Bottes dorées", "Botas de Oro"}, - Text{"Pegasus Boots", "Bottes pégase", "Botas de Pegaso"}, - Text{"Boots of Speed", "Bottes de vitesse", "Botas del desierto"}}; - trickNameTable[RG_WEIRD_EGG] = { - Text{"Poached Egg", "Oeuf à la coque", "Huevo pasado"}, - Text{"Lon Lon Egg", "Oeuf Lon Lon", "Huevo Lon Lon"}, - Text{"Zora Egg", "Oeuf Zora", "Huevo Zora"}}; - trickNameTable[RG_ZELDAS_LETTER] = { + trickNameTable[RG_KOKIRI_SWORD] = { + Text{"Korok Sword", "Épée Korok", "Espada Korok"}, + Text{"Hero's Sword", "Épée du Héros", "Espada del héroe"}, + Text{"Razor Sword", "Lame Rasoir", "Espada de esmeril"} + }; + trickNameTable[RG_MASTER_SWORD] = { + Text{"Goddess Sword", "Épée de la déesse", "Espada Divina"}, + Text{"Gilded Sword", "Excalibur", "Espada de los Sabios"}, + Text{"Magical Sword", "Lame dorée", "Fay"} + }; + trickNameTable[RG_GIANTS_KNIFE] = { + Text{"Medigoron's Sword", "l'Épée de Medigoron", "La espada de Medigoron"}, + Text{"Razor Sword", "Lame Rasoir", "Espada de esmeril"}, + Text{"Royal Claymore", "Claymore Royale", "Royal Claymore"} + }; + trickNameTable[RG_BIGGORON_SWORD] = { + Text{"Power Sword", "Épée de Puissance", "Espada de poder"}, + Text{"Fierce Deity Sword", "Épée du dieu démon", "Espada de la Fiera Deidad"}, + Text{"Tempered Sword", "Épée de Légende Nv.2", "Espada Maestra mejorada"}, + Text{"Biggoron's Knife", "Lame de Grogoron", "Daga de Biggoron"} + }; + trickNameTable[RG_DEKU_SHIELD] = { + Text{"Boko Shield", "Bouclier Boko", "Escudo Boko"}, + Text{"Ordon Shield", "Bouclier de Toal", "Escudo de Ordon"}, + Text{"Wooden Shield", "Bouclier de Bois", "Escudo de madera"} + }; + trickNameTable[RG_HYLIAN_SHIELD] = { + Text{"Hyrule Shield", "Bouclier d'Hyrule", "Escudo Hylian"}, + Text{"Goddess Shield", "Bouclier Sacré", "Escudo Divino"}, + Text{"Hero's Shield", "Bouclier du Héros", "Escudo del héroe"} + }; + trickNameTable[RG_MIRROR_SHIELD] = { + Text{"Magic Mirror", "Miroir Magique", "Escudo mágico"}, + Text{"Magical Shield", "Bouclier Magique", "Escudo arcano"}, + Text{"Mirror of Twilight", "Miroir des Ombres", "Espejo del Crepúsculo"} + }; + trickNameTable[RG_GORON_TUNIC] = { + Text{"Gerudo Top", "Tunique Gerudo", "Pechera gerudo"}, + Text{"Flamebreaker Armor", "Armure de Pierre", " Armadura ignífuga"}, + Text{"Red Mail", "Habits Rouges", "Ropas rojas"} + }; + trickNameTable[RG_ZORA_TUNIC] = { + Text{"Rito Tunic", "Tunique Rito", "Sayo rito"}, + Text{"Mermaid Suit", "Costume de sirène", "Costume de sirène"}, + Text{"Zora Armor", "Armure Zora", "Túnica Zora"}, + Text{"Blue Mail", "Habits Bleus", "Ropas azules"} + }; + trickNameTable[RG_IRON_BOOTS] = { + Text{"Iron Hoofs", "Patins de Plomb", "Botas férreas"}, + Text{"Snow Boots", "Bottes de Neige", "Botas de nieve"}, + Text{"Red Boots", "Bottes rouges", "Botas rojas"}, + Text{"Zora Greaves", "Bottes Zora", "Zora Greaves"}, + Text{"Boots of Power", "Bottes de Puissance", "Botas de plomo"} + }; + trickNameTable[RG_HOVER_BOOTS] = { + Text{"Hover Hoofs", "Patins des airs", "Botas flotadoras"}, + Text{"Golden Boots", "Bottes dorées", "Botas de Oro"}, + Text{"Pegasus Boots", "Bottes pégase", "Botas de Pegaso"}, + Text{"Boots of Speed", "Bottes de vitesse", "Botas del desierto"} + }; + trickNameTable[RG_WEIRD_EGG] = { + Text{"Poached Egg", "Oeuf à la coque", "Huevo pasado"}, + Text{"Lon Lon Egg", "Oeuf Lon Lon", "Huevo Lon Lon"}, + Text{"Zora Egg", "Oeuf Zora", "Huevo Zora"} + }; + trickNameTable[RG_ZELDAS_LETTER] = { Text{"Ruto's Letter", "Lettre de Ruto", "Carta de Ruto"}, - Text{"Royal Letter", "Lettre Eoyale", "Carta para Kafei"}, - Text{"Zelda's Business Card", "Carte d'affaires de Zelda", "Carta"}, - Text{"Letter to Kafei", "Lettre pour Kafei", "Carta para Kafei "}, - Text{"Goat's Letter", "Lettre de la Chèvre", "Carta de la Cabra"}, - Text{"Maggie's Letter", "Lettre de Maggy", "Carta de Dolores"}}; - trickNameTable[RG_BOOMERANG] = { - Text{"Banana", "Banane", "Plátano"}, - Text{"Prank Fetch Toy", "Inséparable Bâtonnet", "Bumerang"}, - Text{"Gale Boomerang", "Boomerang Tornade", "Bumerán tornado"}, - Text{"Magic Boomerang", "Boomerang Magique", "Bumerán mágico"}}; - trickNameTable[RG_LENS_OF_TRUTH] = { - Text{"Sheikah-leidoscope", "Sheikah-léidoscope", "Monóculo de la Verdad"}, - Text{"Sheikah Sensor", "Sonar Sheikah", "Sensor Sheikah"}, - Text{"Crystal of Vision", "Cristal de Vision", "Cristal de Visión"}, - Text{"Magnifying Lens", "Loupe", "Lente Aumentadora"}}; - trickNameTable[RG_MEGATON_HAMMER] = { - Text{"Goron Gavel", "Masse Perforatrice", "Mazo Goron"}, - Text{"Magic Hammer", "Marteau Magique", "Martillo mágico"}, - Text{"Skull Hammer", "Maillet Ressort", "Martillo de hierro"}}; - trickNameTable[RG_STONE_OF_AGONY] = { - Text{"Cave Charm", "Charme de grotte", "Amuleto de la cueva"}, - Text{"Stone of Agahnim", "Fragment d'Agahnim", "Piedra de Agahnim"}, - Text{"Shard of Agony", "Fragment de Souffrance", "Piedra de la Agonía"}, - Text{"Pirate's Charm", "Pierre de Pirate", "Amuleto Pirata"}}; - trickNameTable[RG_DINS_FIRE] = { - Text{"Eldin's Fire", "Feu d'Eldin", "Fuego de Eldin"}, - Text{"Din's Blaze", "Flamme de Din", "Poder de Din"}, - Text{"Magic Lantern", "Lanterne Magique", "Linterna mágica"}, - Text{"Ether Medallion", "Médaillon d'Éther", "Medallón de Tesoro"}, - Text{"Bombos Medallion", "Médaillon des Flammes", "Medallón del Temblor"}}; - trickNameTable[RG_FARORES_WIND] = { - Text{"Faron's Wind", "Vent de Firone", "Viento de Farone"}, - Text{"Farore's Windfall", "Zéphyr de Farore", "Valor de Farore"}, - Text{"Tingle Air", "Tingle Air", "Tingle de aire"}, - Text{"Travel Medallion", "Amulette de téléportation", "Medallón Maligno"}, - Text{"Irene's Taxi", "Le taxi d'Aëline", "El taxi de Airín"}}; - trickNameTable[RG_NAYRUS_LOVE] = { - Text{"Lanayru's Love", "Amour de Lanelle", "Amor de Lanayru"}, - Text{"Nayru's Passion", "Passion de Nayru", "Sabiduría de Nayru"}, - Text{"Tingle Shield", "Bouclier Tingle", "Escudo de hormigueo"}, - Text{"Shield Spell", "Bouclier Magique", "Hechizo de Protección"}, - Text{"Magic Armor", "Armure Magique", "Armadura mágica"}}; - trickNameTable[RG_FIRE_ARROWS] = { - Text{"Fire Rod", "Baguette de feu", "Cetro de fuego"}, - Text{"Bomb Arrow", "Flèche-Bombe", "Flecha bomba"}, - Text{"Red Candle", "Bougie Rouge", "Vela roja"}}; - trickNameTable[RG_ICE_ARROWS] = { - Text{"Ice Rod", "Baguette des Glaces", "Cetro de Hielo"}, - Text{"Ancient Arrow", "Flèche Archéonique", "Flecha ancestral"}, - Text{"Ice Trap Arrow", "Flèche de Piège de Glace", "Cetro de hielo"}}; - trickNameTable[RG_LIGHT_ARROWS] = { - Text{"Wind Arrow", "Flèche de Vent", "Flecha del Viento"}, - Text{"Wand of Gamelon", "Baguette de Gamelon", "Varita de Gamelón"}, - Text{"Shock Arrow", "Flèches Électriques", "Flecha eléctrica"}, - Text{"Silver Arrow", "Flèches d'Argent", "Flecha de plata"}}; - trickNameTable[RG_GERUDO_MEMBERSHIP_CARD] = { - Text{"Desert Title Deed", "Abonnement Gerudo", "Escritura del desierto"}, - Text{"Sickle Moon Flag", "Drapeau du croissant de lune", "Bandera de la Luna Creciente"}, - Text{"Complimentary ID", "Bon de félicitation", "Cupón especial"}, - Text{"Gerudo's Card", "Carte Goron", "Tóken Gerudo"}, - Text{"Gerudo's Membership Card", "Autographe de Nabooru", "Tarjeta Gerudo"}}; + Text{"Royal Letter", "Lettre Eoyale", "Carta para Kafei"}, + Text{"Zelda's Business Card", "Carte d'affaires de Zelda", "Carta"}, + Text{"Letter to Kafei", "Lettre pour Kafei", "Carta para Kafei "}, + Text{"Goat's Letter", "Lettre de la Chèvre", "Carta de la Cabra"}, + Text{"Maggie's Letter", "Lettre de Maggy", "Carta de Dolores"} + }; + trickNameTable[RG_BOOMERANG] = { + Text{"Banana", "Banane", "Plátano"}, + Text{"Prank Fetch Toy", "Inséparable Bâtonnet", "Bumerang"}, + Text{"Gale Boomerang", "Boomerang Tornade", "Bumerán tornado"}, + Text{"Magic Boomerang", "Boomerang Magique", "Bumerán mágico"} + }; + trickNameTable[RG_LENS_OF_TRUTH] = { + Text{"Sheikah-leidoscope", "Sheikah-léidoscope", "Monóculo de la Verdad"}, + Text{"Sheikah Sensor", "Sonar Sheikah", "Sensor Sheikah"}, + Text{"Crystal of Vision", "Cristal de Vision", "Cristal de Visión"}, + Text{"Magnifying Lens", "Loupe", "Lente Aumentadora"} + }; + trickNameTable[RG_MEGATON_HAMMER] = { + Text{"Goron Gavel", "Masse Perforatrice", "Mazo Goron"}, + Text{"Magic Hammer", "Marteau Magique", "Martillo mágico"}, + Text{"Skull Hammer", "Maillet Ressort", "Martillo de hierro"} + }; + trickNameTable[RG_STONE_OF_AGONY] = { + Text{"Cave Charm", "Charme de grotte", "Amuleto de la cueva"}, + Text{"Stone of Agahnim", "Fragment d'Agahnim", "Piedra de Agahnim"}, + Text{"Shard of Agony", "Fragment de Souffrance", "Piedra de la Agonía"}, + Text{"Pirate's Charm", "Pierre de Pirate", "Amuleto Pirata"} + }; + trickNameTable[RG_DINS_FIRE] = { + Text{"Eldin's Fire", "Feu d'Eldin", "Fuego de Eldin"}, + Text{"Din's Blaze", "Flamme de Din", "Poder de Din"}, + Text{"Magic Lantern", "Lanterne Magique", "Linterna mágica"}, + Text{"Ether Medallion", "Médaillon d'Éther", "Medallón de Tesoro"}, + Text{"Bombos Medallion", "Médaillon des Flammes", "Medallón del Temblor"} + }; + trickNameTable[RG_FARORES_WIND] = { + Text{"Faron's Wind", "Vent de Firone", "Viento de Farone"}, + Text{"Farore's Windfall", "Zéphyr de Farore", "Valor de Farore"}, + Text{"Tingle Air", "Tingle Air", "Tingle de aire"}, + Text{"Travel Medallion", "Amulette de téléportation", "Medallón Maligno"}, + Text{"Irene's Taxi", "Le taxi d'Aëline", "El taxi de Airín"} + }; + trickNameTable[RG_NAYRUS_LOVE] = { + Text{"Lanayru's Love", "Amour de Lanelle", "Amor de Lanayru"}, + Text{"Nayru's Passion", "Passion de Nayru", "Sabiduría de Nayru"}, + Text{"Tingle Shield", "Bouclier Tingle", "Escudo de hormigueo"}, + Text{"Shield Spell", "Bouclier Magique", "Hechizo de Protección"}, + Text{"Magic Armor", "Armure Magique", "Armadura mágica"} + }; + trickNameTable[RG_FIRE_ARROWS] = { + Text{"Fire Rod", "Baguette de feu", "Cetro de fuego"}, + Text{"Bomb Arrow", "Flèche-Bombe", "Flecha bomba"}, + Text{"Red Candle", "Bougie Rouge", "Vela roja"} + }; + trickNameTable[RG_ICE_ARROWS] = { + Text{"Ice Rod", "Baguette des Glaces", "Cetro de Hielo"}, + Text{"Ancient Arrow", "Flèche Archéonique", "Flecha ancestral"}, + Text{"Ice Trap Arrow", "Flèche de Piège de Glace", "Cetro de hielo"} + }; + trickNameTable[RG_LIGHT_ARROWS] = { + Text{"Wind Arrow", "Flèche de Vent", "Flecha del Viento"}, + Text{"Wand of Gamelon", "Baguette de Gamelon", "Varita de Gamelón"}, + Text{"Shock Arrow", "Flèches Électriques", "Flecha eléctrica"}, + Text{"Silver Arrow", "Flèches d'Argent", "Flecha de plata"} + }; + trickNameTable[RG_GERUDO_MEMBERSHIP_CARD] = { + Text{"Desert Title Deed", "Abonnement Gerudo", "Escritura del desierto"}, + Text{"Sickle Moon Flag", "Drapeau du croissant de lune", "Bandera de la Luna Creciente"}, + Text{"Complimentary ID", "Bon de félicitation", "Cupón especial"}, + Text{"Gerudo's Card", "Carte Goron", "Tóken Gerudo"}, + Text{"Gerudo's Membership Card", "Autographe de Nabooru", "Tarjeta Gerudo"} + }; - trickNameTable[RG_MAGIC_BEAN_PACK] = { - Text{"Funky Bean Pack", "Paquet de Fèves Magiques", "Lote de frijoles mágicos"}, - Text{"Grapple Berries", "Baies de grappin", "Bayas de garfio"}, - Text{"Crenel Bean Pack", "Paquet de Haricots Gonggle", "Lote de alubias mágicas"}, - Text{"Mystical Seed Pack", "Pack de graines mystiques", "Paquete de semillas místicas"}}; - trickNameTable[RG_DOUBLE_DEFENSE] = { - Text{"Diamond Hearts", "Coeurs de Diamant", "Contenedor de diamante"}, - Text{"Double Damage", "Double Souffrance", "Doble daño receptivo"}, - Text{"Quadruple Defence", "Quadruple Défence", "Defensa cuádruple"}}; + trickNameTable[RG_MAGIC_BEAN_PACK] = { + Text{"Funky Bean Pack", "Paquet de Fèves Magiques", "Lote de frijoles mágicos"}, + Text{"Grapple Berries", "Baies de grappin", "Bayas de garfio"}, + Text{"Crenel Bean Pack", "Paquet de Haricots Gonggle", "Lote de alubias mágicas"}, + Text{"Mystical Seed Pack", "Pack de graines mystiques", "Paquete de semillas místicas"} + }; + trickNameTable[RG_DOUBLE_DEFENSE] = { + Text{"Diamond Hearts", "Coeurs de Diamant", "Contenedor de diamante"}, + Text{"Double Damage", "Double Souffrance", "Doble daño receptivo"}, + Text{"Quadruple Defence", "Quadruple Défence", "Defensa cuádruple"} + }; - trickNameTable[RG_POCKET_EGG] = { - Text{"Arpagos Egg", "Oeuf d'Arpagos", "Huevo de Arpagos"}, - Text{"Lon Lon Egg", "oeuf Lon Lon", "Huevo Lon Lon"}, - Text{"Zora Egg", "oeuf Zora", "Huevo del Pez Viento"}}; - trickNameTable[RG_POCKET_EGG] = { - Text{"D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada portátil"}, - Text{"Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko"}, - Text{"Hatched Cucco", "Cocotte éclose", "Pollo de bolsillo"}}; - trickNameTable[RG_COJIRO] = { - Text{"Blucco", "Chair-Qui-Poule", "Cucazul"}, - Text{"Piyoko", "Piyoko", "Piyoko"}, - Text{"Dark Cucco", "Cocotte Sombre", "Cucco oscuro"}, - Text{"Grog's Cucco", "Cocotte de Grog", "Cuco de Grog"}}; - trickNameTable[RG_ODD_MUSHROOM] = { - Text{"Magic Mushroom", "Champignon magique", "Champiñón mágico"}, - Text{"Endura Shroom", "Champi Vigueur", "Champiñón del bosque"}, - Text{"Sleepy Toadstool", "Crapaud Fatigué", "Seta durmiente"}, - Text{"Mushroom", "Champignon", "Seta"}}; - trickNameTable[RG_ODD_POTION] = { - Text{"Odd Medicine", "Élixir suspect", "Poción rara"}, - Text{"Granny's Poultice", "Mixture de Granny", "Medicina de la abuela"}, - Text{"Mushroom Poultice", "Mixture de champignon", "Medicina de champiñones"}, - Text{"Secret Medicine", "Médicament", "Pócima secreta"}, - Text{"Mushroom Spores", "Spores de Champignons", "Esporas de hongos"}, - Text{"Hanyu Spore", "Hanyu Spore", "Espora Hanyu"}}; - trickNameTable[RG_POACHERS_SAW] = { - Text{"Carpenter's Saw", "Scie du charpentier", "Sierra del carpintero"}, - Text{"Poacher's Sword", "Hache du chasseur", "Espada del capataz"}, - Text{"Ancient Bladesaw", "Longue Épée Archéonique", "Mandoble ancestral"}, - Text{"Woodcutter's Axe", "Hache du Bûcheron", "Hacha de leñador"}, - Text{"Grog's Saw", "Scie de Grog", "Sierra del Cazador Furtivo"}}; - trickNameTable[RG_BROKEN_SWORD] = { - Text{"Broken Biggoron's Sword", "Épée brisée de Grogoron", "Espada de Biggoron rota"}, - Text{"Broken Giant's Knife", "Lame des Géants brisée", "Daga gigante rota"}, - Text{"Broken Noble Sword", "Épée noble brisée", "Espada noble rota"}, - Text{"Broken Picori Blade", "Épée Minish brisée", "Espada minish rota"}, - Text{"Decayed Master Sword", "Épée de légende pourrie", "Espada decadente de leyenda"}}; - trickNameTable[RG_PRESCRIPTION] = { - Text{"Biggoron's Prescription", "Ordonnance de Grogoron", "Receta de Biggoron"}, - Text{"Eyedrop Prescription", "Ordonnance de gouttes", "Receta ocular"}, - Text{"Urgent Prescription", "Ordonnance urgente", "Prescripción"}, - Text{"Swordsman's Scroll", "Précis d'escrime", "Esgrimidorium"}, - Text{"Portrait of Oren", "Portrait d'Orlène", "Retrato de Oren"}, - Text{"Letter to King Zora", "Lettre au roi Zora", "Carta al Rey Zora"}}; - trickNameTable[RG_EYEBALL_FROG] = { - Text{"Don Gero", "Don Gero", "Don Gero"}, - Text{"Hot-Footed Frog", "Grenouille à pieds chauds", "Rana de patas calientes"}, - Text{"Lost Swordsmith", "Forgeron perdu", "Espadachín perdido"}, - Text{"Eyedrop Frog", "Grenouille-qui-louche", "Globo Ocular de Rana"}}; - trickNameTable[RG_EYEDROPS] = { - Text{"Biggoron's Eyedrops", "Gouttes de Grogoron", "Gotas de Biggoron"}, - Text{"Hyrule's Finest Eyedrops", "Eau du Lac Hylia", "Gotas oculares"}, - Text{"Moon's Tear", "Larme de Lune", "Lágrima de Luna"}, - Text{"Engine Grease", "Graisse moteur", "Grasa del motor"}, - Text{"Zora Perfume", "Parfum Zora", "Perfume Zora"}}; - trickNameTable[RG_CLAIM_CHECK] = { - Text{"Clay Check", "Certificat Grogoron", "Comprobante de Reclamación"}, - Text{"Ancient Tablet", "Stèle ancienne", "Litografía arcana"}, - Text{"Sheikah Slate", "Tablette Sheikah", "Piedra Sheikah"}, - Text{"Cyclone Slate", "Ardoise des tornades", "Pizarra de los Torbellinos"}}; + trickNameTable[RG_POCKET_EGG] = { + Text{"Arpagos Egg", "Oeuf d'Arpagos", "Huevo de Arpagos"}, + Text{"Lon Lon Egg", "oeuf Lon Lon", "Huevo Lon Lon"}, + Text{"Zora Egg", "oeuf Zora", "Huevo del Pez Viento"} + }; + trickNameTable[RG_POCKET_EGG] = { + Text{"D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada portátil"}, + Text{"Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko"}, + Text{"Hatched Cucco", "Cocotte éclose", "Pollo de bolsillo"} + }; + trickNameTable[RG_COJIRO] = { + Text{"Blucco", "Chair-Qui-Poule", "Cucazul"}, + Text{"Piyoko", "Piyoko", "Piyoko"}, + Text{"Dark Cucco", "Cocotte Sombre", "Cucco oscuro"}, + Text{"Grog's Cucco", "Cocotte de Grog", "Cuco de Grog"} + }; + trickNameTable[RG_ODD_MUSHROOM] = { + Text{"Magic Mushroom", "Champignon magique", "Champiñón mágico"}, + Text{"Endura Shroom", "Champi Vigueur", "Champiñón del bosque"}, + Text{"Sleepy Toadstool", "Crapaud Fatigué", "Seta durmiente"}, + Text{"Mushroom", "Champignon", "Seta"} + }; + trickNameTable[RG_ODD_POTION] = { + Text{"Odd Medicine", "Élixir suspect", "Poción rara"}, + Text{"Granny's Poultice", "Mixture de Granny", "Medicina de la abuela"}, + Text{"Mushroom Poultice", "Mixture de champignon", "Medicina de champiñones"}, + Text{"Secret Medicine", "Médicament", "Pócima secreta"}, + Text{"Mushroom Spores", "Spores de Champignons", "Esporas de hongos"}, + Text{"Hanyu Spore", "Hanyu Spore", "Espora Hanyu"} + }; + trickNameTable[RG_POACHERS_SAW] = { + Text{"Carpenter's Saw", "Scie du charpentier", "Sierra del carpintero"}, + Text{"Poacher's Sword", "Hache du chasseur", "Espada del capataz"}, + Text{"Ancient Bladesaw", "Longue Épée Archéonique", "Mandoble ancestral"}, + Text{"Woodcutter's Axe", "Hache du Bûcheron", "Hacha de leñador"}, + Text{"Grog's Saw", "Scie de Grog", "Sierra del Cazador Furtivo"} + }; + trickNameTable[RG_BROKEN_SWORD] = { + Text{"Broken Biggoron's Sword", "Épée brisée de Grogoron", "Espada de Biggoron rota"}, + Text{"Broken Giant's Knife", "Lame des Géants brisée", "Daga gigante rota"}, + Text{"Broken Noble Sword", "Épée noble brisée", "Espada noble rota"}, + Text{"Broken Picori Blade", "Épée Minish brisée", "Espada minish rota"}, + Text{"Decayed Master Sword", "Épée de légende pourrie", "Espada decadente de leyenda"} + }; + trickNameTable[RG_PRESCRIPTION] = { + Text{"Biggoron's Prescription", "Ordonnance de Grogoron", "Receta de Biggoron"}, + Text{"Eyedrop Prescription", "Ordonnance de gouttes", "Receta ocular"}, + Text{"Urgent Prescription", "Ordonnance urgente", "Prescripción"}, + Text{"Swordsman's Scroll", "Précis d'escrime", "Esgrimidorium"}, + Text{"Portrait of Oren", "Portrait d'Orlène", "Retrato de Oren"}, + Text{"Letter to King Zora", "Lettre au roi Zora", "Carta al Rey Zora"} + }; + trickNameTable[RG_EYEBALL_FROG] = { + Text{"Don Gero", "Don Gero", "Don Gero"}, + Text{"Hot-Footed Frog", "Grenouille à pieds chauds", "Rana de patas calientes"}, + Text{"Lost Swordsmith", "Forgeron perdu", "Espadachín perdido"}, + Text{"Eyedrop Frog", "Grenouille-qui-louche", "Globo Ocular de Rana"} + }; + trickNameTable[RG_EYEDROPS] = { + Text{"Biggoron's Eyedrops", "Gouttes de Grogoron", "Gotas de Biggoron"}, + Text{"Hyrule's Finest Eyedrops", "Eau du Lac Hylia", "Gotas oculares"}, + Text{"Moon's Tear", "Larme de Lune", "Lágrima de Luna"}, + Text{"Engine Grease", "Graisse moteur", "Grasa del motor"}, + Text{"Zora Perfume", "Parfum Zora", "Perfume Zora"} + }; + trickNameTable[RG_CLAIM_CHECK] = { + Text{"Clay Check", "Certificat Grogoron", "Comprobante de Reclamación"}, + Text{"Ancient Tablet", "Stèle ancienne", "Litografía arcana"}, + Text{"Sheikah Slate", "Tablette Sheikah", "Piedra Sheikah"}, + Text{"Cyclone Slate", "Ardoise des tornades", "Pizarra de los Torbellinos"} + }; - trickNameTable[RG_GOLD_SKULLTULA_TOKEN] = { - Text{"Skulltula Token", "Bon de Skulltula dorée", "Símbolo de Skulltula"}, - Text{"Golden Skulltula Spirit", "Pièce de Skulltula dorée", "Tóken de Skulltula Dorada"}, - Text{"Gold Walltula Token", "Jeton de Walltula dorée", "Skulltula dorada"}, - Text{"Maiamai", "Ti'gorneau", "Maimai"}, - Text{"Gratitude Crystal", "Cristal de gratitude", "Gema de gratitud"}, - Text{"Korok Seed", "Noix korogu", "Semilla de kolog"}}; + trickNameTable[RG_GOLD_SKULLTULA_TOKEN] = { + Text{"Skulltula Token", "Bon de Skulltula dorée", "Símbolo de Skulltula"}, + Text{"Golden Skulltula Spirit", "Pièce de Skulltula dorée", "Tóken de Skulltula Dorada"}, + Text{"Gold Walltula Token", "Jeton de Walltula dorée", "Skulltula dorada"}, + Text{"Maiamai", "Ti'gorneau", "Maimai"}, + Text{"Gratitude Crystal", "Cristal de gratitude", "Gema de gratitud"}, + Text{"Korok Seed", "Noix korogu", "Semilla de kolog"} + }; - trickNameTable[RG_PROGRESSIVE_HOOKSHOT] = { - Text{"Progressive Grappling Hook", "Lance-chaîne (prog.)", "Garra progresiva"}, - Text{"Progressive Clawshot", "Grappin-griffe (prog.)", "Zarpa progresiva"}, - Text{"Progressive Gripshot", "Grappince (prog.)", "Enganchador progresivo"}, - Text{"Progressive Rope", "Corde (prog.)", "Cuerda progresivo"}}; - trickNameTable[RG_PROGRESSIVE_STRENGTH] = { - Text{"Power Glove", "Gant de Puissance (prog.)", "Guanteletes progresivos"}, - Text{"Power Bracelet", "Bracelet de Force (prog.)", "Brasaletes progresivos"}, - Text{"Magic Bracelet", "Bracelet Magique (prog.)", "Manoplas progresivas"}}; - trickNameTable[RG_PROGRESSIVE_BOMB_BAG] = { - Text{"Progressive Bomb Capacity", "Capacité de bombes (prog.)", "Mayor capacidad de bombas"}, - Text{"Progressive Bomb Pack", "Paquet de bombes (prog.)", "Zurrón de bombas progresivo"}, - Text{"Progressive Bomb Box", "Boîte à bombes (prog.)", "Bolsa de bombas progresiva"}, - Text{"Progressive Blast Mask", "Masque d'Explosion (prog.)", "Máscara explosiva progresiva"}, - Text{"Progressive Powder Kegs", "Baril de Poudre (prog.)", "Barril de polvo progresivo"}, - Text{"Progressive Remote Bombs", "Bombes à distance (prog.)", "Bombas remotas progresivas"}}; - trickNameTable[RG_PROGRESSIVE_BOW] = { - Text{"Progressive Arrow Capacity", "Capacité de flèches (prog.)", "Mayor capacidad de flechas"}, - Text{"Progressive Hero's Bow", "Arc du héros (prog.)", "Arco del héroe progresivo"}, - Text{"Progressive Arrow Holder", "Arbalète (prog.)", "Ballesta progresiva"}, - Text{"Progressive Crossbow", "Arbalète (prog.)", "Ballesta progresiva"}, - Text{"Progressive Sacred Bow", "Arc sacré (prog)", "Arco Sagrado Progresivo"}, - Text{"Progressive Lynel Bow", "Arc de Lynel (prog.)", "Arco de centaleón Progresivo"}}; - trickNameTable[RG_PROGRESSIVE_SLINGSHOT] = { - Text{"Progressive Seed Capacity", "Capacité de graines (prog.)", "Mayor capacidad de semillas"}, - Text{"Progressive Catapult", "Catapulte (prog.)", "Catapulta progresiva"}, - Text{"Progressive Scattershot", "Lance-Pierre rafale (prog.)", "Resortera múltiple progresiva"}, - Text{"Progressive Seed Launcher", "Lanceur de semences (prog.)", "Lanzador de semillas progresivo"}, - Text{"Progressive Seed Satchel", "Sac de graines (prog.)", "Bolsa de semillas progresiva"}}; - trickNameTable[RG_PROGRESSIVE_WALLET] = { - Text{"Progressive Rupee Capacity", "Capacité de rubis (prog.)", "Mayor capacidad de rupias"}, - Text{"Progressive Purse", "Sacoche (prog.)", "Cartera de rupias progresiva"}, - Text{"Progressive Rupee Bag", "Sac à rubis (prog.)", "Zurrón de rupias progresivo"}, - Text{"Progressive Rupoor Capacity", "Capacité de Roupir (prog.)", "Capacidad progresiva Rupobre"}, - Text{"Progressive Spoils Bag", "Sac à Butin (prog.)", "Bolsa de trofeos progresiva"}, - Text{"Progressive Ruby Bag", "Capacité du sac Ruby (prog.)", "Bolso Ruby progresivo"}}; - trickNameTable[RG_PROGRESSIVE_SCALE] = { - Text{"Progressive Flippers", "Palmes de Zora (prog.)", "Aletas de zora progresiva"}, - Text{"Progressive Dragon's Scale", "Écaille du dragon d'eau (prog.)", "Escama dragón acuático progresiva"}, - Text{"Progressive Diving Ability", "Plongée (prog.)", "Buceo progresivo"}, - Text{"Progressive Pearl", "Perle (prog.)", "Perla progresiva"}, - Text{"Progressive Scute", "Bulle (prog.)", "Fragmento Zora progresivo"}}; - trickNameTable[RG_PROGRESSIVE_NUT_UPGRADE] = { - Text{"Progressive Nut Pack", "Paquet de noix (prog.)", "Mayor capacidad de semillas"}, - Text{"Progressive Bait Bag", "Sac à Appâts (prog.)", "Bolsa de cebo progresiva"}, - Text{"Progressive Pear Capacity", "Capacité de poire (prog.)", "Capacidad progresiva de pera"}, - Text{"Progressive Nut Bag", "Sac de noix (prog.)", "Bolsa de nueces progresiva"}, - Text{"Progressive Husk Capacity", "Capacité de noisettes (prog.)", "Mayor capacidad de castañas"}}; - trickNameTable[RG_PROGRESSIVE_STICK_UPGRADE] = { - Text{"Progressive Stick Bag", "Sac de bâtons (prog.)", "Mayor capacidad de ramas deku"}, - Text{"Progressive Stick Pack", "Paquet de bâtons Mojo (prog.)", "Mayor capacidad de bastones"}, - Text{"Progressive Branch Capacity", "Capacité de la succursale (prog.)", "Capacidad progresiva de la sucursal"}, - Text{"Progressive Rod Capacity", "Capacité de tiges (prog.)", "Mayor capacidad de cetros deku"}}; - trickNameTable[RG_PROGRESSIVE_BOMBCHUS] = { - Text{"Progressive Bomblings", "Bombinsectes (prog.)", "Bombinsectos progresivos"}, - Text{"Progressive Sentrobe Bombs", "Bombe de Sphérodrone (prog.)", "Bomba de helicobot progresivo"}, - Text{"Progressive Bomb-ombs", "Bombe Soldat (prog.)", "Soldado bomba progresivo"}, - Text{"Progressive Missiles", "Missiles (prog.)", "Misiles progresivos"}, - Text{"Progressive Bombchu Bag", "Sac à Bombchu (prog.)", "Bombachus progresivos"}}; - trickNameTable[RG_PROGRESSIVE_MAGIC_METER] = { - Text{"Progressive Stamina Meter", "Jauge d'endurance (prog.)", "Medidor de vigor progresivo"}, - Text{"Progressive Energy Gauge", "Jauge d'énergie (prog.)", "Medidor de energía progresivo"}, - Text{"Progressive Magic Powder", "Poudre magique (prog.)", "Medidor de carga progresivo"}}; - trickNameTable[RG_PROGRESSIVE_OCARINA] = { - Text{"Progressive Memento", "Souvenir (prog.)", "Silbato progresivo"}, - Text{"Progressive Whistle", "Siffler (prog.)", "Silbido progresivo"}, - Text{"Progressive Flute", "Flûte (prog.)", "Flauta progresiva"}, - Text{"Progressive Recorder", "Harmonica (prog.)", "Armónica progresiva"}}; - trickNameTable[RG_PROGRESSIVE_GORONSWORD] = { - Text{"Progressive Titan Blade", "Lame des Titans (prog.)", "Hoja del Titán progresiva"}, - Text{"Progressive Goron Knife", "Lame Goron (prog.)", "Daga Goron progresiva"}, - Text{"Progressive Giant Sword", "Épée géante (prog.)", "Espada gigante progresiva"}, - Text{"Progressive Darknut Sword", "Épée de Darknut (prog.)", "Espada Darknut progresiva"}, - Text{"Progressive Power Sword", "Épée de Puissance (prog.)", "Espada de poder progresiva"}, - Text{"Progressive Big Stabby", "Gros coup de poignard (prog.)", "Gran puñalada progresiva"}}; + trickNameTable[RG_PROGRESSIVE_HOOKSHOT] = { + Text{"Progressive Grappling Hook", "Lance-chaîne (prog.)", "Garra progresiva"}, + Text{"Progressive Clawshot", "Grappin-griffe (prog.)", "Zarpa progresiva"}, + Text{"Progressive Gripshot", "Grappince (prog.)", "Enganchador progresivo"}, + Text{"Progressive Rope", "Corde (prog.)", "Cuerda progresivo"} + }; + trickNameTable[RG_PROGRESSIVE_STRENGTH] = { + Text{"Power Glove", "Gant de Puissance (prog.)", "Guanteletes progresivos"}, + Text{"Power Bracelet", "Bracelet de Force (prog.)", "Brasaletes progresivos"}, + Text{"Magic Bracelet", "Bracelet Magique (prog.)", "Manoplas progresivas"} + }; + trickNameTable[RG_PROGRESSIVE_BOMB_BAG] = { + Text{"Progressive Bomb Capacity", "Capacité de bombes (prog.)", "Mayor capacidad de bombas"}, + Text{"Progressive Bomb Pack", "Paquet de bombes (prog.)", "Zurrón de bombas progresivo"}, + Text{"Progressive Bomb Box", "Boîte à bombes (prog.)", "Bolsa de bombas progresiva"}, + Text{"Progressive Blast Mask", "Masque d'Explosion (prog.)", "Máscara explosiva progresiva"}, + Text{"Progressive Powder Kegs", "Baril de Poudre (prog.)", "Barril de polvo progresivo"}, + Text{"Progressive Remote Bombs", "Bombes à distance (prog.)", "Bombas remotas progresivas"} + }; + trickNameTable[RG_PROGRESSIVE_BOW] = { + Text{"Progressive Arrow Capacity", "Capacité de flèches (prog.)", "Mayor capacidad de flechas"}, + Text{"Progressive Hero's Bow", "Arc du héros (prog.)", "Arco del héroe progresivo"}, + Text{"Progressive Arrow Holder", "Arbalète (prog.)", "Ballesta progresiva"}, + Text{"Progressive Crossbow", "Arbalète (prog.)", "Ballesta progresiva"}, + Text{"Progressive Sacred Bow", "Arc sacré (prog)", "Arco Sagrado Progresivo"}, + Text{"Progressive Lynel Bow", "Arc de Lynel (prog.)", "Arco de centaleón Progresivo"} + }; + trickNameTable[RG_PROGRESSIVE_SLINGSHOT] = { + Text{"Progressive Seed Capacity", "Capacité de graines (prog.)", "Mayor capacidad de semillas"}, + Text{"Progressive Catapult", "Catapulte (prog.)", "Catapulta progresiva"}, + Text{"Progressive Scattershot", "Lance-Pierre rafale (prog.)", "Resortera múltiple progresiva"}, + Text{"Progressive Seed Launcher", "Lanceur de semences (prog.)", "Lanzador de semillas progresivo"}, + Text{"Progressive Seed Satchel", "Sac de graines (prog.)", "Bolsa de semillas progresiva"} + }; + trickNameTable[RG_PROGRESSIVE_WALLET] = { + Text{"Progressive Rupee Capacity", "Capacité de rubis (prog.)", "Mayor capacidad de rupias"}, + Text{"Progressive Purse", "Sacoche (prog.)", "Cartera de rupias progresiva"}, + Text{"Progressive Rupee Bag", "Sac à rubis (prog.)", "Zurrón de rupias progresivo"}, + Text{"Progressive Rupoor Capacity", "Capacité de Roupir (prog.)", "Capacidad progresiva Rupobre"}, + Text{"Progressive Spoils Bag", "Sac à Butin (prog.)", "Bolsa de trofeos progresiva"}, + Text{"Progressive Ruby Bag", "Capacité du sac Ruby (prog.)", "Bolso Ruby progresivo"} + }; + trickNameTable[RG_PROGRESSIVE_SCALE] = { + Text{"Progressive Flippers", "Palmes de Zora (prog.)", "Aletas de zora progresiva"}, + Text{"Progressive Dragon's Scale", "Écaille du dragon d'eau (prog.)", "Escama dragón acuático progresiva"}, + Text{"Progressive Diving Ability", "Plongée (prog.)", "Buceo progresivo"}, + Text{"Progressive Pearl", "Perle (prog.)", "Perla progresiva"}, + Text{"Progressive Scute", "Bulle (prog.)", "Fragmento Zora progresivo"} + }; + trickNameTable[RG_PROGRESSIVE_NUT_UPGRADE] = { + Text{"Progressive Nut Pack", "Paquet de noix (prog.)", "Mayor capacidad de semillas"}, + Text{"Progressive Bait Bag", "Sac à Appâts (prog.)", "Bolsa de cebo progresiva"}, + Text{"Progressive Pear Capacity", "Capacité de poire (prog.)", "Capacidad progresiva de pera"}, + Text{"Progressive Nut Bag", "Sac de noix (prog.)", "Bolsa de nueces progresiva"}, + Text{"Progressive Husk Capacity", "Capacité de noisettes (prog.)", "Mayor capacidad de castañas"} + }; + trickNameTable[RG_PROGRESSIVE_STICK_UPGRADE] = { + Text{"Progressive Stick Bag", "Sac de bâtons (prog.)", "Mayor capacidad de ramas deku"}, + Text{"Progressive Stick Pack", "Paquet de bâtons Mojo (prog.)", "Mayor capacidad de bastones"}, + Text{"Progressive Branch Capacity", "Capacité de la succursale (prog.)", "Capacidad progresiva de la sucursal"}, + Text{"Progressive Rod Capacity", "Capacité de tiges (prog.)", "Mayor capacidad de cetros deku"} + }; + trickNameTable[RG_PROGRESSIVE_BOMBCHUS] = { + Text{"Progressive Bomblings", "Bombinsectes (prog.)", "Bombinsectos progresivos"}, + Text{"Progressive Sentrobe Bombs", "Bombe de Sphérodrone (prog.)", "Bomba de helicobot progresivo"}, + Text{"Progressive Bomb-ombs", "Bombe Soldat (prog.)", "Soldado bomba progresivo"}, + Text{"Progressive Missiles", "Missiles (prog.)", "Misiles progresivos"}, + Text{"Progressive Bombchu Bag", "Sac à Bombchu (prog.)", "Bombachus progresivos"} + }; + trickNameTable[RG_PROGRESSIVE_MAGIC_METER] = { + Text{"Progressive Stamina Meter", "Jauge d'endurance (prog.)", "Medidor de vigor progresivo"}, + Text{"Progressive Energy Gauge", "Jauge d'énergie (prog.)", "Medidor de energía progresivo"}, + Text{"Progressive Magic Powder", "Poudre magique (prog.)", "Medidor de carga progresivo"} + }; + trickNameTable[RG_PROGRESSIVE_OCARINA] = { + Text{"Progressive Memento", "Souvenir (prog.)", "Silbato progresivo"}, + Text{"Progressive Whistle", "Siffler (prog.)", "Silbido progresivo"}, + Text{"Progressive Flute", "Flûte (prog.)", "Flauta progresiva"}, + Text{"Progressive Recorder", "Harmonica (prog.)", "Armónica progresiva"} + }; + trickNameTable[RG_PROGRESSIVE_GORONSWORD] = { + Text{"Progressive Titan Blade", "Lame des Titans (prog.)", "Hoja del Titán progresiva"}, + Text{"Progressive Goron Knife", "Lame Goron (prog.)", "Daga Goron progresiva"}, + Text{"Progressive Giant Sword", "Épée géante (prog.)", "Espada gigante progresiva"}, + Text{"Progressive Darknut Sword", "Épée de Darknut (prog.)", "Espada Darknut progresiva"}, + Text{"Progressive Power Sword", "Épée de Puissance (prog.)", "Espada de poder progresiva"}, + Text{"Progressive Big Stabby", "Gros coup de poignard (prog.)", "Gran puñalada progresiva"} + }; - trickNameTable[RG_EMPTY_BOTTLE] = { - Text{"Empty Canteen", "Cantine vide", "cantimplora vacía"}, - Text{"Vial of Winds", "Fiole de vents", "Vial de Vientos"}, - Text{"Tingle Bottle", "Flacon de Tingle", "Botella de Tingle"}, - Text{"Magic Bottle", "Flacon magique", "Frasco feérico"}, - Text{"Glass Bottle", "Flacon de verre", "Botella de cristal"}, - Text{"Bottle with Water", "Flacon d'eau", "Botella Tingle"}}; - trickNameTable[RG_BOTTLE_WITH_MILK] = { - Text{"Bottle with Chateau Romani", "Flacon de cuvée Romani", "Botella de Reserva Romani"}, - Text{"Bottle with Premium Milk", "Flacon avec lait de qualité supérieure", "Biberón con leche Premium"}, - Text{"Bottle with Mystery Milk", "Flacon de lait grand cru", "Botella de leche extra"}, - Text{"Bottle with Fresh Milk", "Flacon de lait frais", "Botella de leche fresca"},}; - trickNameTable[RG_BOTTLE_WITH_RED_POTION] = { - Text{"Bottle with Red Chu Jelly", "Flacon de gelée Chuchu rouge", "Jugo de Chuchu Rojo"}, - Text{"Bottle with Hibiscus Potion", "Flacon de potion de Hibiscus", "Botella de poción de Hibisco"}, - Text{"Bottle with Medicine of Life", "Flacon d'élixir rouge", "Botella de medicina de la vida"}, - Text{"Bottle with Heart Potion", "Flacon de potion de soin", "Botella de poción de salud"}}; - trickNameTable[RG_BOTTLE_WITH_GREEN_POTION] = { - Text{"Bottle with Green Chu Jelly", "Flacon de gelée Chuchu verte", "Jugo de Chuchu Verde"}, - Text{"Bottle with Lamp Oil", "Flacon de Huile à lanterne", "Botella de Aceite de candil "}, - Text{"Bottle with Medicine of Magic", "Flacon d'élixir vert", "Botella de medicina mágica"}, - Text{"Bottle with Stamina Potion", "Flacon d'Endurol", "Botella de elixir vigorizante"}}; - trickNameTable[RG_BOTTLE_WITH_BLUE_POTION] = { - Text{"Bottle with Blue Chu Jelly", "Flacon de gelée Chuchu bleue", "Jugo de Chuchu Azul"}, - Text{"Bottle with Water of Life", "Flacon d'élixir bleu", "Botella de agua de la vida"}, - Text{"Bottle with Air Potion", "Flacon de potion d'oxygène", "Botella de oxígeno"}}; - trickNameTable[RG_BOTTLE_WITH_FAIRY] = { - Text{"Bottle with Forest Firefly", "Flacon avec une luciole", "Luciérnaga del bosque"}, - Text{"Bottle with Deku Princess", "Flacon avec Deku Princess", "Botella con Deku Princess"}, - Text{"Bottle with Stray Fairy", "Flacon avec une fée perdue", "Hada perdida en una botella"}}; - trickNameTable[RG_BOTTLE_WITH_FISH] = { - Text{"Bottle with Small Jabu-Jabu", "Flacon avec mini Jabu-Jabu", "Lord Chapu-Chapu embotellado"}, - Text{"Bottle with Reekfish", "Flacon avec Reekfish", "Reekfish embotellada"}, - Text{"Bottle with Hyrule Bass", "Flacon avec perche d'Hyrule", "Locha de Hyrule embotellada"}, - Text{"Bottle with Hyrule Loach", "Flacon avec loche d'Hyrule", "Perca de Términa embotellada"}}; - trickNameTable[RG_BOTTLE_WITH_BLUE_FIRE] = { - Text{"Bottle with Will-O-Wisp", "Flacon avec feu follet", "Botella de llama azul"}, - Text{"Bottle with Ancient Flame", "Flacon de flamme ancienne", "Botella de fuego ancestral"}, - Text{"Bottle with a Blue Candle", "Flacon avec une bougie bleue", "Botella con una vela azul"}, - Text{"Bottle with Red Ice", "Flacon de Glace Rouge", "Botella de Hielo rojo"}, - Text{"Bottle with Nayru's Flame", "Flacon de flamme de Nayru", "Botella de llamas de Nayru"}}; - trickNameTable[RG_BOTTLE_WITH_BUGS] = { - Text{"Bottle with Baby Tektites", "Flacon de bébé Araknon", "Tektites en una botella"}, - Text{"Bottle with A Beetle", "Flacon avec un scarabée", "Botella con un escarabajo"}, - Text{"Bottle with Lanayru Ants", "Flacon de fourmis de Lanelle", "Celestarabajo embotellado"}, - Text{"Bottle with Insects", "Flacon de bibittes", "Saltabosques embotellados"}, - Text{"Bottle with a Golden Bee", "Flacon avec une abeille dorée", "Botella con una abeja dorada"}}; - trickNameTable[RG_BOTTLE_WITH_POE] = { - Text{"Bottle with Ghini", "Flacon avec Ghini", "Ghini en una botella"}, - Text{"Bottle with Reapling", "Flacon avec Âme Damnée", "Reapling en una botella"}, - Text{"Bottle with Imp Poe", "Flacon avec Spectre", "Espectro en una botella"}, - Text{"Bottle with Anti-Fairy", "Flacon avec Tetdoss", "Whisp en una botella"}}; + trickNameTable[RG_EMPTY_BOTTLE] = { + Text{"Empty Canteen", "Cantine vide", "cantimplora vacía"}, + Text{"Vial of Winds", "Fiole de vents", "Vial de Vientos"}, + Text{"Tingle Bottle", "Flacon de Tingle", "Botella de Tingle"}, + Text{"Magic Bottle", "Flacon magique", "Frasco feérico"}, + Text{"Glass Bottle", "Flacon de verre", "Botella de cristal"}, + Text{"Bottle with Water", "Flacon d'eau", "Botella Tingle"} + }; + trickNameTable[RG_BOTTLE_WITH_MILK] = { + Text{"Bottle with Chateau Romani", "Flacon de cuvée Romani", "Botella de Reserva Romani"}, + Text{"Bottle with Premium Milk", "Flacon avec lait de qualité supérieure", "Biberón con leche Premium"}, + Text{"Bottle with Mystery Milk", "Flacon de lait grand cru", "Botella de leche extra"}, + Text{"Bottle with Fresh Milk", "Flacon de lait frais", "Botella de leche fresca"},}; + trickNameTable[RG_BOTTLE_WITH_RED_POTION] = { + Text{"Bottle with Red Chu Jelly", "Flacon de gelée Chuchu rouge", "Jugo de Chuchu Rojo"}, + Text{"Bottle with Hibiscus Potion", "Flacon de potion de Hibiscus", "Botella de poción de Hibisco"}, + Text{"Bottle with Medicine of Life", "Flacon d'élixir rouge", "Botella de medicina de la vida"}, + Text{"Bottle with Heart Potion", "Flacon de potion de soin", "Botella de poción de salud"} + }; + trickNameTable[RG_BOTTLE_WITH_GREEN_POTION] = { + Text{"Bottle with Green Chu Jelly", "Flacon de gelée Chuchu verte", "Jugo de Chuchu Verde"}, + Text{"Bottle with Lamp Oil", "Flacon de Huile à lanterne", "Botella de Aceite de candil "}, + Text{"Bottle with Medicine of Magic", "Flacon d'élixir vert", "Botella de medicina mágica"}, + Text{"Bottle with Stamina Potion", "Flacon d'Endurol", "Botella de elixir vigorizante"} + }; + trickNameTable[RG_BOTTLE_WITH_BLUE_POTION] = { + Text{"Bottle with Blue Chu Jelly", "Flacon de gelée Chuchu bleue", "Jugo de Chuchu Azul"}, + Text{"Bottle with Water of Life", "Flacon d'élixir bleu", "Botella de agua de la vida"}, + Text{"Bottle with Air Potion", "Flacon de potion d'oxygène", "Botella de oxígeno"} + }; + trickNameTable[RG_BOTTLE_WITH_FAIRY] = { + Text{"Bottle with Forest Firefly", "Flacon avec une luciole", "Luciérnaga del bosque"}, + Text{"Bottle with Deku Princess", "Flacon avec Deku Princess", "Botella con Deku Princess"}, + Text{"Bottle with Stray Fairy", "Flacon avec une fée perdue", "Hada perdida en una botella"} + }; + trickNameTable[RG_BOTTLE_WITH_FISH] = { + Text{"Bottle with Small Jabu-Jabu", "Flacon avec mini Jabu-Jabu", "Lord Chapu-Chapu embotellado"}, + Text{"Bottle with Reekfish", "Flacon avec Reekfish", "Reekfish embotellada"}, + Text{"Bottle with Hyrule Bass", "Flacon avec perche d'Hyrule", "Locha de Hyrule embotellada"}, + Text{"Bottle with Hyrule Loach", "Flacon avec loche d'Hyrule", "Perca de Términa embotellada"} + }; + trickNameTable[RG_BOTTLE_WITH_BLUE_FIRE] = { + Text{"Bottle with Will-O-Wisp", "Flacon avec feu follet", "Botella de llama azul"}, + Text{"Bottle with Ancient Flame", "Flacon de flamme ancienne", "Botella de fuego ancestral"}, + Text{"Bottle with a Blue Candle", "Flacon avec une bougie bleue", "Botella con una vela azul"}, + Text{"Bottle with Red Ice", "Flacon de Glace Rouge", "Botella de Hielo rojo"}, + Text{"Bottle with Nayru's Flame", "Flacon de flamme de Nayru", "Botella de llamas de Nayru"} + }; + trickNameTable[RG_BOTTLE_WITH_BUGS] = { + Text{"Bottle with Baby Tektites", "Flacon de bébé Araknon", "Tektites en una botella"}, + Text{"Bottle with A Beetle", "Flacon avec un scarabée", "Botella con un escarabajo"}, + Text{"Bottle with Lanayru Ants", "Flacon de fourmis de Lanelle", "Celestarabajo embotellado"}, + Text{"Bottle with Insects", "Flacon de bibittes", "Saltabosques embotellados"}, + Text{"Bottle with a Golden Bee", "Flacon avec une abeille dorée", "Botella con una abeja dorada"} + }; + trickNameTable[RG_BOTTLE_WITH_POE] = { + Text{"Bottle with Ghini", "Flacon avec Ghini", "Ghini en una botella"}, + Text{"Bottle with Reapling", "Flacon avec Âme Damnée", "Reapling en una botella"}, + Text{"Bottle with Imp Poe", "Flacon avec Spectre", "Espectro en una botella"}, + Text{"Bottle with Anti-Fairy", "Flacon avec Tetdoss", "Whisp en una botella"} + }; - trickNameTable[RG_RUTOS_LETTER] = { - Text{"Bottle with Maggie's Letter", "Flacon avec lettre de Maggy", "Carta de Dolores"}, - Text{"Bottle with Letter to Kafei", "Flacon avec lettre pour Kafei", "Carta para Kafei"}, - Text{"Bottle with Zelda's Letter", "Flacon avec Lettre de Zelda", "Carta náutica"}}; - trickNameTable[RG_BOTTLE_WITH_BIG_POE] = { - Text{"Bottle with Composer Brother", "Flacon avec un compositeur", "Hermana Poe embotellada"}, - Text{"Bottle with Jalhalla", "Flacon avec Jalhalla", "Yaihalla embotellado"}, - Text{"Bottle with Grim Repoe", "Flacon avec le Faucheur", "Bubble en una botella"}}; + trickNameTable[RG_RUTOS_LETTER] = { + Text{"Bottle with Maggie's Letter", "Flacon avec lettre de Maggy", "Carta de Dolores"}, + Text{"Bottle with Letter to Kafei", "Flacon avec lettre pour Kafei", "Carta para Kafei"}, + Text{"Bottle with Zelda's Letter", "Flacon avec Lettre de Zelda", "Carta náutica"} + }; + trickNameTable[RG_BOTTLE_WITH_BIG_POE] = { + Text{"Bottle with Composer Brother", "Flacon avec un compositeur", "Hermana Poe embotellada"}, + Text{"Bottle with Jalhalla", "Flacon avec Jalhalla", "Yaihalla embotellado"}, + Text{"Bottle with Grim Repoe", "Flacon avec le Faucheur", "Bubble en una botella"} + }; - trickNameTable[RG_ZELDAS_LULLABY] = { - Text{"Ballad of the Goddess", "Chant de la déesse", "Cántico de la Diosa"}, - Text{"Song of Healing", "Chant de l'apaisement", "Canción de curación"}, - Text{"Song of the Hero", "Chant du héros", "Canción del héroe"}}; - trickNameTable[RG_EPONAS_SONG] = { - Text{"Song of Birds","Chant des oiseaux","Cantar del ave"}, - Text{"Song of Soaring", "Chant de l'envol", "Canción del viento"}, - Text{"Song of Horse", "Chant du cheval", "Chant du cheval"}}; - trickNameTable[RG_SARIAS_SONG] = { - Text{"Mido's Song", "La chanson de Mido", "La canción de Mido"}, - Text{"Kass' Theme", "Le thème de Kass", "El tema de Kass"}, - Text{"Tune of Echoes", "Chant des Échos ", "Melodía del Eco "}}; - trickNameTable[RG_SUNS_SONG] = { - Text{"Song of Passing", "Mambo de Manbo", "Melodía del transcurrir"}, - Text{"Command Melody", "Air du marionnettiste", "Cara al Sol"}, - Text{"Moon's Song", "La chanson de Moon", "La canción de la luna"}}; - trickNameTable[RG_SONG_OF_TIME] = { - Text{"Song of Double Time", "Chant accéléré", "Canción del doble tiempo"}, - Text{"Inverted Song of Time", "Chant du temps inversé", "Canción del tiempo invertida"}, - Text{"Tune of Ages", "Chant du Temps", "Melodía del Tiempo"}}; - trickNameTable[RG_SONG_OF_STORMS] = { - Text{"Ballad of Gales", "Requiem de la tornade", "Melodía del Tornado"}, - Text{"Frog's Song of Soul", "Rap des grenouilles", "Canción del alma de la rana"}, - Text{"Wind's Requiem", "Mélodie du vent", "Melodía del Viento"}}; - trickNameTable[RG_MINUET_OF_FOREST] = { - Text{"Saria's Karaoke", "Karaoké de Saria", "Dueto del bosque"}, - Text{"Sonata of Awakening", "Sonate de l'éveil", "Sonata del despertar"}, - Text{"Wind God's Aria", "Hymne du dieu du vent", "Melodía del Espíritu del Viento"}}; - trickNameTable[RG_BOLERO_OF_FIRE] = { - Text{"Darunia's Tango", "Tango de Darunia", "Coro del fuego"}, - Text{"Tune of Currents", "Chants des Flux", "Melodía de las Corrientes"}, - Text{"Goron Lullaby", "Berceuse des Gorons", "Nana goron"}}; - trickNameTable[RG_SERENADE_OF_WATER] = { - Text{"Ruto's Blues", "Blues de Ruto", "Sonata del agua"}, - Text{"New Wave Bossa Nova", "Bossa-nova des flots", "Bossanova de las olas"}, - Text{"Manbo's Mambo", "Mambo de Manbo", "Mambo de Manbo"}}; - trickNameTable[RG_REQUIEM_OF_SPIRIT] = { - Text{"Nabooru's Reggae", "Reggae de Nabooru", "Reggae del espíritu"}, - Text{"Elegy of Emptiness", "Hymne du vide", "Elegía al vacío"}, - Text{"Earth God's Lyric", "Hymne du dieu de la terre", "Melodía del Espíritu de la Tierra"}}; - trickNameTable[RG_NOCTURNE_OF_SHADOW] = { - Text{"Impa's Death Metal", "Death métal d'Impa", "Diurno de la sombra"}, - Text{"Oath to Order", "Ode de l'appel", "Oda al orden"}, - Text{"Song of Discovery", "Chant des secrets", "Canto revelador"}}; - trickNameTable[RG_PRELUDE_OF_LIGHT] = { - Text{"Rauru's Sing-Along", "Chansonnette de Rauru", "Predulio de luz"}, - Text{"Ballad of the Wind Fish", "Ballade sur Poisson-Rêve", "Balada del Piez Viento"}, - Text{"Song of Light", "Chant de la lumière", "Sonidos de la luz"}}; + trickNameTable[RG_ZELDAS_LULLABY] = { + Text{"Ballad of the Goddess", "Chant de la déesse", "Cántico de la Diosa"}, + Text{"Song of Healing", "Chant de l'apaisement", "Canción de curación"}, + Text{"Song of the Hero", "Chant du héros", "Canción del héroe"} + }; + trickNameTable[RG_EPONAS_SONG] = { + Text{"Song of Birds","Chant des oiseaux","Cantar del ave"}, + Text{"Song of Soaring", "Chant de l'envol", "Canción del viento"}, + Text{"Song of Horse", "Chant du cheval", "Chant du cheval"} + }; + trickNameTable[RG_SARIAS_SONG] = { + Text{"Mido's Song", "La chanson de Mido", "La canción de Mido"}, + Text{"Kass' Theme", "Le thème de Kass", "El tema de Kass"}, + Text{"Tune of Echoes", "Chant des Échos ", "Melodía del Eco "} + }; + trickNameTable[RG_SUNS_SONG] = { + Text{"Song of Passing", "Mambo de Manbo", "Melodía del transcurrir"}, + Text{"Command Melody", "Air du marionnettiste", "Cara al Sol"}, + Text{"Moon's Song", "La chanson de Moon", "La canción de la luna"} + }; + trickNameTable[RG_SONG_OF_TIME] = { + Text{"Song of Double Time", "Chant accéléré", "Canción del doble tiempo"}, + Text{"Inverted Song of Time", "Chant du temps inversé", "Canción del tiempo invertida"}, + Text{"Tune of Ages", "Chant du Temps", "Melodía del Tiempo"} + }; + trickNameTable[RG_SONG_OF_STORMS] = { + Text{"Ballad of Gales", "Requiem de la tornade", "Melodía del Tornado"}, + Text{"Frog's Song of Soul", "Rap des grenouilles", "Canción del alma de la rana"}, + Text{"Wind's Requiem", "Mélodie du vent", "Melodía del Viento"} + }; + trickNameTable[RG_MINUET_OF_FOREST] = { + Text{"Saria's Karaoke", "Karaoké de Saria", "Dueto del bosque"}, + Text{"Sonata of Awakening", "Sonate de l'éveil", "Sonata del despertar"}, + Text{"Wind God's Aria", "Hymne du dieu du vent", "Melodía del Espíritu del Viento"} + }; + trickNameTable[RG_BOLERO_OF_FIRE] = { + Text{"Darunia's Tango", "Tango de Darunia", "Coro del fuego"}, + Text{"Tune of Currents", "Chants des Flux", "Melodía de las Corrientes"}, + Text{"Goron Lullaby", "Berceuse des Gorons", "Nana goron"} + }; + trickNameTable[RG_SERENADE_OF_WATER] = { + Text{"Ruto's Blues", "Blues de Ruto", "Sonata del agua"}, + Text{"New Wave Bossa Nova", "Bossa-nova des flots", "Bossanova de las olas"}, + Text{"Manbo's Mambo", "Mambo de Manbo", "Mambo de Manbo"} + }; + trickNameTable[RG_REQUIEM_OF_SPIRIT] = { + Text{"Nabooru's Reggae", "Reggae de Nabooru", "Reggae del espíritu"}, + Text{"Elegy of Emptiness", "Hymne du vide", "Elegía al vacío"}, + Text{"Earth God's Lyric", "Hymne du dieu de la terre", "Melodía del Espíritu de la Tierra"} + }; + trickNameTable[RG_NOCTURNE_OF_SHADOW] = { + Text{"Impa's Death Metal", "Death métal d'Impa", "Diurno de la sombra"}, + Text{"Oath to Order", "Ode de l'appel", "Oda al orden"}, + Text{"Song of Discovery", "Chant des secrets", "Canto revelador"} + }; + trickNameTable[RG_PRELUDE_OF_LIGHT] = { + Text{"Rauru's Sing-Along", "Chansonnette de Rauru", "Predulio de luz"}, + Text{"Ballad of the Wind Fish", "Ballade sur Poisson-Rêve", "Balada del Piez Viento"}, + Text{"Song of Light", "Chant de la lumière", "Sonidos de la luz"} + }; - trickNameTable[RG_KOKIRI_EMERALD] = { - Text{"Pendant of Courage", "Pendentif du courage", "Colgante del valor"}, - Text{"Farore's Pearl", "Perle de Farore", "Orbe de Farore"}, - Text{"Aquanine", "Smaragdine", "Yerbánida"}, - Text{"Farore's Emerald", "Émeraude de Farore", "Esmeralda de Farore"}, - Text{"Kokiri's Peridot", "Péridot Kokiri", "Ágata de los Kokiri"}}; - trickNameTable[RG_GORON_RUBY] = { - Text{"Pendant of Power", "Pendentif de la force", "Colgante del poder"}, - Text{"Din's Pearl", "Perle de Din", "Orbe de Din"}, - Text{"Crimsonine", "Alzanine", "Bermellina"}, - Text{"Din's Ruby", "Rubis de Din", "Rubí de Din"}, - Text{"Goron's Garnet", "Grenat Goron", "Topacio de los Goron"}}; - trickNameTable[RG_ZORA_SAPPHIRE] = { - Text{"Pendant of Wisdom", "Pendentif de la sagesse", "Colgante de la sabiduría"}, - Text{"Nayru's Pearl", "Perle de Nayru", "Orbe de Nayru"}, - Text{"Azurine", "Aquanine", "Azurina"}, - Text{"Nayru's Sapphire", "Saphir de Nayru", "Zafiro de Nayru"}, - Text{"Zora's Aquamarine", "Aquamarine Zora", "Lapislázuli de los Zora"}}; - trickNameTable[RG_FOREST_MEDALLION] = { - Text{"Wind Medallion", "Médaillon du vent", "Medallón del Viento"}, - Text{"Wind Element", "Elément Vent", "Elemento de aire"}, - Text{"Saria's Medallion", "Médaillon de Saria", "Medallón de Saria"}, - Text{"Sign of Air", "Glyphe de l'air", "Glifo de aire"}, - Text{"Medallion of Forest", "Médaillon du Temple de la Forêt", "Medalla del Bosque"}}; - trickNameTable[RG_FIRE_MEDALLION] = { - Text{"Fire Element", "Elément Feu", "Elemento de fuego"}, - Text{"Darunia's Medallion", "Médaillon de Darunia", "Medallón de Darunia"}, - Text{"Sign of Fire", "Glyphe de feu", "Glifo de fuego"}, - Text{"Medallion of Fire", "Médaillon du Temple du Feu", "Medalla del Fuego"}}; - trickNameTable[RG_WATER_MEDALLION] = { - Text{"Water Element", "Elément Eau", "Elemento de agua"}, - Text{"Ice Medallion", "Médaillon de glace", "Medallón Helado"}, - Text{"Ruto's Medallion", "Médaillon de Ruto", "Medallón de Ruto"}, - Text{"Sign of Water", "Glyphe de l'eau", "Glifo de agua"}, - Text{"Medallion of Water", "Médaillon du Temple de l'Eau", "Medalla del Agua"}}; - trickNameTable[RG_SPIRIT_MEDALLION] = { - Text{"Earth Element", "Elément Terre", "Elemento de tierra"}, - Text{"Nabooru's Medallion", "Médaillon de Nabooru", "Medallón de Nabooru"}, - Text{"Sign of Earth", "Glyphe de la Terre", "Glifo de la tierra"}, - Text{"Medallion of Spirit", "Médaillon du Temple de l'Esprit", "Medalla del Espíritu"}}; - trickNameTable[RG_SHADOW_MEDALLION] = { - Text{"Fused Shadow", "Cristal d'ombre", "Sombra Fundida"}, - Text{"Impa's Medallion", "Médaillon d'Impa", "Medallón de Impa"}, - Text{"Sign of Illusion", "Glyphe de l'illusion", "Glifo de ilusión"}, - Text{"Medallion of Shadow", "Médaillon du Temple de l'Ombre", "Medalla de la Sombra"}}; - trickNameTable[RG_LIGHT_MEDALLION] = { - Text{"Compass of Light", "Boussole de lumière", "Brújula de Luz"}, - Text{"Rauru's Medallion", "Médaillon de Rauru", "Medallón de Rauru"}, - Text{"Sign of Destiny", "Glyphe du destin", "Glifo del destino"}, - Text{"Medallion of Light", "Médaillon du temple de lumière", "Medalla de la Luz"}}; + trickNameTable[RG_KOKIRI_EMERALD] = { + Text{"Pendant of Courage", "Pendentif du courage", "Colgante del valor"}, + Text{"Farore's Pearl", "Perle de Farore", "Orbe de Farore"}, + Text{"Aquanine", "Smaragdine", "Yerbánida"}, + Text{"Farore's Emerald", "Émeraude de Farore", "Esmeralda de Farore"}, + Text{"Kokiri's Peridot", "Péridot Kokiri", "Ágata de los Kokiri"} + }; + trickNameTable[RG_GORON_RUBY] = { + Text{"Pendant of Power", "Pendentif de la force", "Colgante del poder"}, + Text{"Din's Pearl", "Perle de Din", "Orbe de Din"}, + Text{"Crimsonine", "Alzanine", "Bermellina"}, + Text{"Din's Ruby", "Rubis de Din", "Rubí de Din"}, + Text{"Goron's Garnet", "Grenat Goron", "Topacio de los Goron"} + }; + trickNameTable[RG_ZORA_SAPPHIRE] = { + Text{"Pendant of Wisdom", "Pendentif de la sagesse", "Colgante de la sabiduría"}, + Text{"Nayru's Pearl", "Perle de Nayru", "Orbe de Nayru"}, + Text{"Azurine", "Aquanine", "Azurina"}, + Text{"Nayru's Sapphire", "Saphir de Nayru", "Zafiro de Nayru"}, + Text{"Zora's Aquamarine", "Aquamarine Zora", "Lapislázuli de los Zora"} + }; + trickNameTable[RG_FOREST_MEDALLION] = { + Text{"Wind Medallion", "Médaillon du vent", "Medallón del Viento"}, + Text{"Wind Element", "Elément Vent", "Elemento de aire"}, + Text{"Saria's Medallion", "Médaillon de Saria", "Medallón de Saria"}, + Text{"Sign of Air", "Glyphe de l'air", "Glifo de aire"}, + Text{"Medallion of Forest", "Médaillon du Temple de la Forêt", "Medalla del Bosque"} + }; + trickNameTable[RG_FIRE_MEDALLION] = { + Text{"Fire Element", "Elément Feu", "Elemento de fuego"}, + Text{"Darunia's Medallion", "Médaillon de Darunia", "Medallón de Darunia"}, + Text{"Sign of Fire", "Glyphe de feu", "Glifo de fuego"}, + Text{"Medallion of Fire", "Médaillon du Temple du Feu", "Medalla del Fuego"} + }; + trickNameTable[RG_WATER_MEDALLION] = { + Text{"Water Element", "Elément Eau", "Elemento de agua"}, + Text{"Ice Medallion", "Médaillon de glace", "Medallón Helado"}, + Text{"Ruto's Medallion", "Médaillon de Ruto", "Medallón de Ruto"}, + Text{"Sign of Water", "Glyphe de l'eau", "Glifo de agua"}, + Text{"Medallion of Water", "Médaillon du Temple de l'Eau", "Medalla del Agua"} + }; + trickNameTable[RG_SPIRIT_MEDALLION] = { + Text{"Earth Element", "Elément Terre", "Elemento de tierra"}, + Text{"Nabooru's Medallion", "Médaillon de Nabooru", "Medallón de Nabooru"}, + Text{"Sign of Earth", "Glyphe de la Terre", "Glifo de la tierra"}, + Text{"Medallion of Spirit", "Médaillon du Temple de l'Esprit", "Medalla del Espíritu"} + }; + trickNameTable[RG_SHADOW_MEDALLION] = { + Text{"Fused Shadow", "Cristal d'ombre", "Sombra Fundida"}, + Text{"Impa's Medallion", "Médaillon d'Impa", "Medallón de Impa"}, + Text{"Sign of Illusion", "Glyphe de l'illusion", "Glifo de ilusión"}, + Text{"Medallion of Shadow", "Médaillon du Temple de l'Ombre", "Medalla de la Sombra"} + }; + trickNameTable[RG_LIGHT_MEDALLION] = { + Text{"Compass of Light", "Boussole de lumière", "Brújula de Luz"}, + Text{"Rauru's Medallion", "Médaillon de Rauru", "Medallón de Rauru"}, + Text{"Sign of Destiny", "Glyphe du destin", "Glifo del destino"}, + Text{"Medallion of Light", "Médaillon du temple de lumière", "Medalla de la Luz"} + }; - trickNameTable[RG_RECOVERY_HEART] = { - Text{"Love", "Bisou", "Te amo"}, - Text{"Life", "Vie", "vida"}, - Text{"HP", "VP", "VP"}}; - trickNameTable[RG_GREEN_RUPEE] = { - Text{"False Greg", "Faux Greg", "Falso Greg"}, - Text{"One Ruby", "Un rubis", "Un rubí"}, - Text{"Rupoor (1)", "Roupir (1)", "Rupobre (1)"}, - Text{"One Rupee", "Un rubis", "Guaraní hyliano"}, - Text{"Rupee (1)", "Rubis (1)", "Peso hyliano"}}; - trickNameTable[RG_BLUE_RUPEE] = { - Text{"Blupee", "Bleubi", "Azupia"}, - Text{"Five Rubies", "Cinq Rubys", "Cinco rubíes"}, - Text{"Five Rupees", "Cinq rubis", "Bolívar hyliano"}, - Text{"Rupee (5)", "Rubis (5)", "Peso hyliano"}, - Text{"Rupoor (5)", "Roupir (5)", "Rupobre (5)"}}; - trickNameTable[RG_RED_RUPEE] = { - Text{"Big 20", "Grand 20", "Los 20 grandes"}, - Text{"Twenty Rubies", "vingt rubis", "Veinte rubíes"}, - Text{"Rupoor (20)", "Roupir (20)", "Rupobre (20)"}, - Text{"Twenty Rupees", "Vingt rubis", "Colon hyliano"}, - Text{"Rupee (20)", "Rubis (20)", "Peso hyliano"}}; - trickNameTable[RG_PURPLE_RUPEE] = { - Text{"Purpee", "pourbi", "morupiua"}, - Text{"Fifty Rubies", "cinquante rubis", "Cincuenta rubíes"}, - Text{"Rupoor (50)", "Roupir (50)", "Rupobre (50)"}, - Text{"Fifty Rupees", "Cinquante rubis", "Balboa hyliano"}, - Text{"Rupee (50)", "Rubis (50)", "Peso hyliano"}}; - trickNameTable[RG_HUGE_RUPEE] = { - Text{"Hugo", "Or Rubi", "Oro Rubi"}, - Text{"Two Hundred Rubies", "deux cents rubis", "Doscientos rubíes"}, - Text{"Diamond", "Diamant", "Diamante"}, - Text{"Huge Ruby", "Énorme rubis", "Rubi gigante"}, - Text{"Two Hundred Rupees", "Deux cent rubis", "Euro hyliano"}, - Text{"Rupee (200)", "Rubis (200)", "Dólar hyliano"}}; - trickNameTable[RG_PIECE_OF_HEART] = { - Text{"Pizza Heart", "Fromage de cœur", "Pieza de Chorizo"}, - Text{"Little Bit Of Love", "Un peu d'amour", "Un poco de amor"}, - Text{"Rare Peach Stone", "Pierre de pêche rare", "Pierre de pêche rare"}}; - trickNameTable[RG_HEART_CONTAINER] = { - Text{"Crystal Heart", "Cœur de cristal", "Corazón de cristal"}, - Text{"Life Heart", "Cœur de vie", "Vida Corazón"}, - Text{"Lots of Love", "Beaucoup d'amour", "Mucho amor"}}; - trickNameTable[RG_TRIFORCE_PIECE] = { - Text{"Piece of Cheese", "Morceau de Fromage", "Piece of Cheese"}, - Text{"Triforce Shard", "Éclat de Triforce", "Triforce Shard"}, - Text{"Shiny Rock", "Caiiloux Brillant", "Shiny Rock"}}; - trickNameTable[RG_GOHMA_SOUL] = { - Text{"Spider Sense", "", ""}, - Text{"Deku Spirit", "", ""}, - Text("Ghost of Ghoma", "", "")}; - trickNameTable[RG_KING_DODONGO_SOUL] = { - Text{"Lizard Soul", "", ""}, - Text{"Regal Remains", "", ""}, - Text{"Dodongo's Core", "", ""}}; - trickNameTable[RG_BARINADE_SOUL] = { - Text{"Parasitic Poltergeist", "", ""}, - Text{"Jabu Insides", "", ""}, - Text{"Barinade Bacteria", "", ""}}; - trickNameTable[RG_PHANTOM_GANON_SOUL] = { - Text{"Bigger Poe", "", ""}, - Text{"Sacred Forest Pine Tree", "", ""}, - Text{"Ganon's Phantom", "", ""}}; - trickNameTable[RG_VOLVAGIA_SOUL] = { - Text{"Dragon Roast", "", ""}, - Text{"Hot n' Ready", "", ""}, - Text{"Volvagia's Vitality", "", ""}}; - trickNameTable[RG_MORPHA_SOUL] = { - Text{"Dihydrogen Monoxide", "", ""}, - Text{"Morpha Molecules", "", ""}, - Text{"Wet Stuff", "", ""}}; - trickNameTable[RG_BONGO_BONGO_SOUL] = { - Text{"Shadow Soul", "", ""}, - Text{"Dark Essence", "", ""}, - Text{"Bongo Bongo's Bongo", "", ""}}; - trickNameTable[RG_TWINROVA_SOUL] = { - Text{"Sandy Ashes", "", ""}, - Text{"Spiritual Spirit", "", ""}, - Text{"Twin Rovers", "", ""}}; - trickNameTable[RG_GANON_SOUL] = { - Text{"Pure Evil", "", ""}, - Text{"Ganon's Ghost", "", ""}, - Text{"Pork", "", ""}}; - trickNameTable[RG_FISHING_POLE] = { - Text{"Fish Tickler", "Fish Tickler", "Fish Tickler"}, - Text{"Floating Lure", "Floating Lure", "Floating Lure"}, - Text{"Fishing Reel", "Fishing Reel", "Fishing Reel"}}; + trickNameTable[RG_RECOVERY_HEART] = { + Text{"Love", "Bisou", "Te amo"}, + Text{"Life", "Vie", "vida"}, + Text{"HP", "VP", "VP"} + }; + trickNameTable[RG_GREEN_RUPEE] = { + Text{"False Greg", "Faux Greg", "Falso Greg"}, + Text{"One Ruby", "Un rubis", "Un rubí"}, + Text{"Rupoor (1)", "Roupir (1)", "Rupobre (1)"}, + Text{"One Rupee", "Un rubis", "Guaraní hyliano"}, + Text{"Rupee (1)", "Rubis (1)", "Peso hyliano"} + }; + trickNameTable[RG_BLUE_RUPEE] = { + Text{"Blupee", "Bleubi", "Azupia"}, + Text{"Five Rubies", "Cinq Rubys", "Cinco rubíes"}, + Text{"Five Rupees", "Cinq rubis", "Bolívar hyliano"}, + Text{"Rupee (5)", "Rubis (5)", "Peso hyliano"}, + Text{"Rupoor (5)", "Roupir (5)", "Rupobre (5)"} + }; + trickNameTable[RG_RED_RUPEE] = { + Text{"Big 20", "Grand 20", "Los 20 grandes"}, + Text{"Twenty Rubies", "vingt rubis", "Veinte rubíes"}, + Text{"Rupoor (20)", "Roupir (20)", "Rupobre (20)"}, + Text{"Twenty Rupees", "Vingt rubis", "Colon hyliano"}, + Text{"Rupee (20)", "Rubis (20)", "Peso hyliano"} + }; + trickNameTable[RG_PURPLE_RUPEE] = { + Text{"Purpee", "pourbi", "morupiua"}, + Text{"Fifty Rubies", "cinquante rubis", "Cincuenta rubíes"}, + Text{"Rupoor (50)", "Roupir (50)", "Rupobre (50)"}, + Text{"Fifty Rupees", "Cinquante rubis", "Balboa hyliano"}, + Text{"Rupee (50)", "Rubis (50)", "Peso hyliano"} + }; + trickNameTable[RG_HUGE_RUPEE] = { + Text{"Hugo", "Or Rubi", "Oro Rubi"}, + Text{"Two Hundred Rubies", "deux cents rubis", "Doscientos rubíes"}, + Text{"Diamond", "Diamant", "Diamante"}, + Text{"Huge Ruby", "Énorme rubis", "Rubi gigante"}, + Text{"Two Hundred Rupees", "Deux cent rubis", "Euro hyliano"}, + Text{"Rupee (200)", "Rubis (200)", "Dólar hyliano"} + }; + trickNameTable[RG_PIECE_OF_HEART] = { + Text{"Pizza Heart", "Fromage de cœur", "Pieza de Chorizo"}, + Text{"Little Bit Of Love", "Un peu d'amour", "Un poco de amor"}, + Text{"Rare Peach Stone", "Pierre de pêche rare", "Pierre de pêche rare"} + }; + trickNameTable[RG_HEART_CONTAINER] = { + Text{"Crystal Heart", "Cœur de cristal", "Corazón de cristal"}, + Text{"Life Heart", "Cœur de vie", "Vida Corazón"}, + Text{"Lots of Love", "Beaucoup d'amour", "Mucho amor"} + }; + trickNameTable[RG_TRIFORCE_PIECE] = { + Text{"Piece of Cheese", "Morceau de Fromage", "Piece of Cheese"}, + Text{"Triforce Shard", "Éclat de Triforce", "Triforce Shard"}, + Text{"Shiny Rock", "Caiiloux Brillant", "Shiny Rock"} + }; - trickNameTable[RG_OCARINA_A_BUTTON] = { - Text{"Ocarina J Button", "", ""}, - Text{"Ocarina Ayy Button", "", ""}, - Text{"Ocarina A Trigger", "", ""} }; - trickNameTable[RG_OCARINA_C_UP_BUTTON] = { - Text{"Ocarina C North Button", "", ""}, - Text{"Ocarina C App Button", "", ""}, - Text{"Ocarina Sup Button", "", ""} }; - trickNameTable[RG_OCARINA_C_DOWN_BUTTON] = { - Text{"Ocarina C South Button", "", ""}, - Text{"Ocarina Z Down Button", "", ""}, - Text{"Ocarina See Down Button", "", ""}, - Text{"Ocarina C Dawn Button", "", ""} }; - trickNameTable[RG_OCARINA_C_LEFT_BUTTON] = { - Text{"Ocarina C West Button", "", ""}, - Text{"Ocarina Sea Left Button", "", ""}, - Text{"Ocarina C Lift Button", "", ""}, - Text{"Ocarina Rewind Button", "", ""} }; - trickNameTable[RG_OCARINA_C_RIGHT_BUTTON] = { - Text{"Ocarina C East Button", "", ""}, - Text{"Ocarina C Wright Button", "", ""}, - Text{"Overworld C Right Button", "", ""} }; + trickNameTable[RG_GOHMA_SOUL] = { + Text{"Spider Sense", "", ""}, + Text{"Deku Spirit", "", ""}, + Text{"Ghost of Ghoma", "", ""} + }; + trickNameTable[RG_KING_DODONGO_SOUL] = { + Text{"Lizard Soul", "", ""}, + Text{"Regal Remains", "", ""}, + Text{"Dodongo's Core", "", ""} + }; + trickNameTable[RG_BARINADE_SOUL] = { + Text{"Parasitic Poltergeist", "", ""}, + Text{"Jabu Insides", "", ""}, + Text{"Barinade Bacteria", "", ""} + }; + trickNameTable[RG_PHANTOM_GANON_SOUL] = { + Text{"Bigger Poe", "", ""}, + Text{"Sacred Forest Pine Tree", "", ""}, + Text{"Ganon's Phantom", "", ""} + }; + trickNameTable[RG_VOLVAGIA_SOUL] = { + Text{"Dragon Roast", "", ""}, + Text{"Hot n' Ready", "", ""}, + Text{"Volvagia's Vitality", "", ""} + }; + trickNameTable[RG_MORPHA_SOUL] = { + Text{"Dihydrogen Monoxide", "", ""}, + Text{"Morpha Molecules", "", ""}, + Text{"Wet Stuff", "", ""} + }; + trickNameTable[RG_BONGO_BONGO_SOUL] = { + Text{"Shadow Soul", "", ""}, + Text{"Dark Essence", "", ""}, + Text{"Bongo Bongo's Bongo", "", ""} + }; + trickNameTable[RG_TWINROVA_SOUL] = { + Text{"Sandy Ashes", "", ""}, + Text{"Spiritual Spirit", "", ""}, + Text{"Twin Rovers", "", ""} + }; + trickNameTable[RG_GANON_SOUL] = { + Text{"Pure Evil", "", ""}, + Text{"Ganon's Ghost", "", ""}, + Text{"Pork", "", ""} + }; -/* - //Names for individual upgrades, in case progressive names are replaced - trickNameTable[GI_HOOKSHOT] = { - Text{"Grappling Hook", "Grappin-griffe", "Gancho lanzable"}, - Text{"Clawshot", "Lance-chaîne", "Zarpa"}, - Text{"Gripshot", "Grappince", "Enganchador"}}; - trickNameTable[GI_LONGSHOT] = { - Text{"Longshot, no strings attached", "Grappin sans attrape", "Gancho lanzable más largo"}, - Text{"Double Clawshot", "Double-grappin", "Superzarpa"}, - Text{"Switch Hook", "Great grappin", "Gancho chulo"}}; - trickNameTable[GI_BOMB_BAG_1] = { - Text{"Bomb Capacity (20)", "Capacité de bombes (20)", "Bolsa de bombas (contiene 20)"}, - Text{"Bronze Bomb Bag", "Sac de Bombes de bronze", "Saco de bronce de bombas"}, - Text{"Small Bomb Bag", "Petit Sac de Bombes", "Zurrón de bombas pequeño"}}; - trickNameTable[GI_BOMB_BAG_2] = { - Text{"Bomb Capacity (30)", "Capacité de bombes (30)", "Bolsa de bombas (contiene 30)"}, - Text{"Silver Bomb Bag", "Sac de Bombes d'argent", "Saco plateado de bombas"}, - Text{"Medium Bomb Bag", "Sac de Bombes moyen", "Zurrón de bombas mediano"}}; - trickNameTable[GI_BOMB_BAG_3] = { - Text{"Bomb Capacity (40)", "Capacité de bombes (40)", "Bolsa de bombas (contiene 40)"}, - Text{"Golden Bomb Bag", "Sac de Bombes d'or", "Saco dorado de bombas"}, - Text{"Large Bomb Bag", "Gros Sac de Bombes", "Zurrón de bombas grande"}}; - trickNameTable[GI_BOW_1] = { - Text{"Bow", "Arc", "Arco del Hada"}, - Text{"Hero's Bow", "Arc du héros", "Arco del héroe"}, - Text{"Small Quiver", "Petit carquois", "Saco de flechas pequeño"}}; - trickNameTable[GI_BOW_2] = { - Text{"Arrow Capacity (40)", "Capacité de flèches (40)", "Capacidad de flechas (40)"}, - Text{"Silver Quiver", "Carquois d'argent", "Carcaj plateado"}, - Text{"Medium Quiver", "Carquois moyen", "Saco de flechas mediano"}}; - trickNameTable[GI_BOW_3] = { - Text{"Arrow Capacity (50)", "Capacité de flèches (50)", "Capacidad de flechas (50)"}, - Text{"Golden Quiver", "Carquois d'or", "Carcaj dorado"}, - Text{"Large Quiver", "Gros carquois", "Saco de flechas grande"}}; - trickNameTable[GI_SLINGSHOT_1] = { - Text{"Slingshot", "Lance-Pierre", "Tirachinas del Hada"}, - Text{"Scattershot", "Lance-Pierre rafale", "Tirachinas múltiple"}, - Text{"Small Seed Satchel", "Petit sac de graines", "Bolsa de semillas pequeña"}}; - trickNameTable[GI_SLINGSHOT_2] = { - Text{"Deku Seed Capacity (40)", "Capacité de graines (40)", "Capacidad de semillas (40)"}, - Text{"Silver Deku Seed Bullet Bag", "Sac de graines d'argent", "Bolsa de balas (contiene 40)"}, - Text{"Medium Seed Satchel", "Sac de graines moyen", "Bolsa de semillas mediana"}}; - trickNameTable[GI_SLINGSHOT_3] = { - Text{"Deku Seed Capacity (50)", "Capacité de graines (50)", "Capacidad de semillas (50)"}, - Text{"Golden Deku Seed Bullet Bag", "Sac de graines d'or", "Bolsa de balas (contiene 50)"}, - Text{"Large Seed Satchel", "Gros sac de graines", "Bolsa de semillas grande"}}; - trickNameTable[GI_STRENGTH_1] = { - Text{"Goron's Gauntlet", "Gantelet Goron", "Brazalete amarillo"}, - Text{"Power Bracelet", "Bracelet de force", "Brazalete de fuerza"}, - Text{"Magic Bracelet", "Bracelet de Lavio", "Brazalete de Ravio"}}; - trickNameTable[GI_STRENGTH_2] = { - Text{"Silver Bracelets", "Bracelets d'argent", "Guantes Moguma"}, - Text{"Power Gloves", "Gant de puissance", "Guante del Poder"}, - Text{"Magic Gauntlets", "Gantelet magique", "Guante mágico"}}; - trickNameTable[GI_STRENGTH_3] = { - Text{"Golden Bracelets", "Bracelets d'or", "Guantelete de Thanos"}, - Text{"Titan's Mitts", "Moufle de titan", "Guantes de Titán"}, - Text{"Magnetic Gloves", "Magnéto-gants", "Guantes de fuego"}}; - trickNameTable[GI_SCALE_1] = { - Text{"Silver Pearl", "Perle d'argent", "Perla de Plata progresiva"}, - Text{"Adult Scale", "Écaille d'adulte", "Bola de bolos zora"}, - Text{"Zora Scale", "Écaille Zora", "Escama de Zora"}}; - trickNameTable[GI_SCALE_2] = { - Text{"Golden Pearl", "Perle d'or", "Perla de Oro progresiva"}, - Text{"Giant Scale", "Écaille de géant", "Escama de Faren"}, - Text{"Water Dragon Scale", "Écaille du dragon de l'eau", "Escama de dragón acuático"}}; - trickNameTable[GI_WALLET_1] = { - Text{"Rupee Capacity (200)", "Capacité de rubis (200)", "Capacidad de rupias (200)"}, - Text{"Silver Wallet", "Bourse d'argent", "Cartera de rupias de adulto"}, - Text{"Medium Wallet", "Bourse moyenne", "Zurrón de rupias mediano"}}; - trickNameTable[GI_WALLET_2] = { - Text{"Rupee Capacity (500)", "Capacité de rubis (500)", "Capacidad de rupias (500)"}, - Text{"Golden Wallet", "Bourse d'or", "Cartera de rupias gigante"}, - Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias grande"}}; - trickNameTable[GI_WALLET_3] = { - Text{"Rupee Capacity (999)", "Capacité de rubis (999)", "Capacidad de rupias (999)"}, - Text{"Golden Wallet", "Bourse d'or", "Cartera de ricachón"}, - Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias gigante"}}; - trickNameTable[GI_DEKU_NUT_UPGRADE_1] = { - Text{"Deku Bomb Capacity (30)", "Capacité de bombes Mojo (30)", "Capacidad de semillas deku (40)"}, - Text{"Baba Nut Capacity (30)", "Capacité de noix Baba (30)", "Capacidad de nueces baba (40)"}, - Text{"Deku Nut Pack (30)", "Paquet de noix Mojo (30)", "Capacidad de nueces mojo (40)"}}; - trickNameTable[GI_DEKU_NUT_UPGRADE_2] = { - Text{"Deku Bomb Capacity (40)", "Capacité de bombes Mojo (40)", "Capacidad de semillas deku (50)"}, - Text{"Baba Nut Capacity (40)", "Capacité de noix Baba (40)", "Capacidad de nueces baba (50)"}, - Text{"Deku Nut Pack (40)", "Paquet de noix Mojo (40)", "Capacidad de nueces mojo (50)"}}; - trickNameTable[GI_DEKU_STICK_UPGRADE_1] = { - Text{"Deku Rod Capacity (20)", "Capacité de tiges Mojo (20)", "Capacidad de palos mojo (20)"}, - Text{"Boko Stick Capacity (20)", "Capacité de Bâtons Boko (20)", "Capacidad de palos boko (20)"}, - Text{"Deku Stick Pack (20)", "Paquet de bâtons Mojo (20)", "Capacidad de bastones deku (20)"}}; - trickNameTable[GI_DEKU_STICK_UPGRADE_2] = { - Text{"Deku Rod Capacity (30)", "Capacité de tiges Mojo (30)", "Capacidad de palos mojo (30)"}, - Text{"Boko Stick Capacity (30)", "Capacité de Bâtons Boko (30)", "Capacidad de palos boko (30)"}, - Text{"Deku Stick Pack (30)", "Paquet de bâtons Mojo (30)", "Capacidad de bastones deku (30)"}}; - trickNameTable[GI_MAGIC_1] = { - Text{"Stamina Meter", "Jauge d'endurance", "Medidor de vigor"}, - Text{"Energy Meter", "Jauge d'énergie", "Medidor de energía"}, - Text{"Magic Powder", "Poudre magique", "Medidor de carga"}}; - trickNameTable[GI_MAGIC_2] = { - Text{"Enhanced Stamina Meter", "Jauge d'endurance améliorée", "Medidor de vigor mejorado"}, - Text{"Enhanced Energy Meter", "Jauge d'énergie améliorée", "Medidor de energía mejorado"}, - Text{"Enhanced Magic Powder", "Poudre magique améliorée", "Medidor de carga mejorado"}}; - trickNameTable[GI_OCARINA_1] = { - Text{"Ocarina", "Ocarina", "Ocarina"}, - Text{"Saria's Ocarina", "Ocarina de Saria", "Ocarina de Saria"}, - Text{"Wood Ocarina", "Ocarina de bois", "Ocarina del Hada"}}; - trickNameTable[GI_OCARINA_2] = { - Text{"Flute", "Flûte", "Flauta"}, - Text{"Zelda's Ocarina", "Ocarina de Zelda", "Ocarina de Zelda"}, - Text{"Ocarina of Winds", "Ocarina des vents", "Ocarina del Viento"}}; - trickNameTable[GI_CUCCO] = { - Text{"D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada"}, - Text{"Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko"}, - Text{"Hatched Cucco", "Cocotte éclose", "Pollo"}}; - trickNameTable[GI_MASK_KEATON] = { - Text{"Kee... Something Mask", "Masque de Quiche", "Máscara Kealgo"}, - Text{"Kitsune Mask", "Masque de Kitsune", "Máscara Kitsune"}, - Text{"Kafei's Mask", "Masque de Kafei", "Máscara de Kafei"}}; - trickNameTable[GI_MASK_SKULL] = { - Text{"Skull Kid's Mask", "Masque de Skull Kid", "Máscara de Skull Kid"}, - Text{"Stalfos Mask", "Masque de squelette", "Máscara de Stalfos"}, - Text{"Captain's Hat", "Heaume du capitaine", "Casco del capitán"}}; - trickNameTable[GI_MASK_SPOOKY] = { - Text{"Skrik Mask", "Masque Skrik", "Máscara Escalofriante"}, - Text{"ReDead Mask", "Masque de Remort", "Máscara de ReDead"}, - Text{"Gibdo Mask", "Masque de Gibdo", "Careta de Gibdo"}}; - trickNameTable[GI_MASK_BUNNY] = { - Text{"Peppy Mask", "Masque de Peppy", "Capucha de Pascua"}, - Text{"Bunny Ears", "Oreilles de lapin", "Orejas de conejo"}, - Text{"Postman's Hat", "Casquette du facteur", "Gorra de cartero"}}; - trickNameTable[GI_MASK_GORON] = { - Text{"Goro Mask", "Masque Goro", "Máscara Goro"}, - Text{"Mask of Goron", "Masque des Gorons", "Máscara de los Goron"}, - Text{"Darunia Mask", "Masque de Darunia", "Máscara de Darmani"}}; - trickNameTable[GI_MASK_ZORA] = { - Text{"Zola Mask", "Masque Zola", "Máscara Zola"}, - Text{"Mask of Zora", "Masque des Zoras", "Máscara de los Zora"}, - Text{"Ruto Mask", "Masque de Ruto", "Máscara de Mikau"}}; - trickNameTable[GI_MASK_GERUDO] = { - Text{"Ganguro Mask", "Masque de Ganguro", "Máscara Canguro"}, - Text{"Mask of Gerudo", "Masque des Gerudos", "Máscara de las Gerudo"}, - Text{"Nabooru Mask", "Masque de Nabooru", "Máscara de Nabooru"}}; - trickNameTable[GI_MASK_TRUTH] = { - Text{"Sheikah Mask", "Masque Sheikah", "Máscara Sheikah"}, - Text{"Mask of Gossip", "Masque de potins", "Máscara chismosa"}, - Text{"Eye of Truth", "oeil de vérité", "Ojo de la Verdad"}};*/ + trickNameTable[RG_FISHING_POLE] = { + Text{"Fish Tickler", "Fish Tickler", "Fish Tickler"}, + Text{"Floating Lure", "Floating Lure", "Floating Lure"}, + Text{"Fishing Reel", "Fishing Reel", "Fishing Reel"} + }; + + trickNameTable[RG_OCARINA_A_BUTTON] = { + Text{"Ocarina J Button", "", ""}, + Text{"Ocarina Ayy Button", "", ""}, + Text{"Ocarina A Trigger", "", ""} + }; + trickNameTable[RG_OCARINA_C_UP_BUTTON] = { + Text{"Ocarina C North Button", "", ""}, + Text{"Ocarina C App Button", "", ""}, + Text{"Ocarina Sup Button", "", ""} + }; + trickNameTable[RG_OCARINA_C_DOWN_BUTTON] = { + Text{"Ocarina C South Button", "", ""}, + Text{"Ocarina Z Down Button", "", ""}, + Text{"Ocarina See Down Button", "", ""}, + Text{"Ocarina C Dawn Button", "", ""} + }; + trickNameTable[RG_OCARINA_C_LEFT_BUTTON] = { + Text{"Ocarina C West Button", "", ""}, + Text{"Ocarina Sea Left Button", "", ""}, + Text{"Ocarina C Lift Button", "", ""}, + Text{"Ocarina Rewind Button", "", ""} + }; + trickNameTable[RG_OCARINA_C_RIGHT_BUTTON] = { + Text{"Ocarina C East Button", "", ""}, + Text{"Ocarina C Wright Button", "", ""}, + Text{"Overworld C Right Button", "", ""} + }; + + /* + //Names for individual upgrades, in case progressive names are replaced + trickNameTable[GI_HOOKSHOT] = { + Text{"Grappling Hook", "Grappin-griffe", "Gancho lanzable"}, + Text{"Clawshot", "Lance-chaîne", "Zarpa"}, + Text{"Gripshot", "Grappince", "Enganchador"} + }; + trickNameTable[GI_LONGSHOT] = { + Text{"Longshot, no strings attached", "Grappin sans attrape", "Gancho lanzable más largo"}, + Text{"Double Clawshot", "Double-grappin", "Superzarpa"}, + Text{"Switch Hook", "Great grappin", "Gancho chulo"} + }; + trickNameTable[GI_BOMB_BAG_1] = { + Text{"Bomb Capacity (20)", "Capacité de bombes (20)", "Bolsa de bombas (contiene 20)"}, + Text{"Bronze Bomb Bag", "Sac de Bombes de bronze", "Saco de bronce de bombas"}, + Text{"Small Bomb Bag", "Petit Sac de Bombes", "Zurrón de bombas pequeño"} + }; + trickNameTable[GI_BOMB_BAG_2] = { + Text{"Bomb Capacity (30)", "Capacité de bombes (30)", "Bolsa de bombas (contiene 30)"}, + Text{"Silver Bomb Bag", "Sac de Bombes d'argent", "Saco plateado de bombas"}, + Text{"Medium Bomb Bag", "Sac de Bombes moyen", "Zurrón de bombas mediano"} + }; + trickNameTable[GI_BOMB_BAG_3] = { + Text{"Bomb Capacity (40)", "Capacité de bombes (40)", "Bolsa de bombas (contiene 40)"}, + Text{"Golden Bomb Bag", "Sac de Bombes d'or", "Saco dorado de bombas"}, + Text{"Large Bomb Bag", "Gros Sac de Bombes", "Zurrón de bombas grande"} + }; + trickNameTable[GI_BOW_1] = { + Text{"Bow", "Arc", "Arco del Hada"}, + Text{"Hero's Bow", "Arc du héros", "Arco del héroe"}, + Text{"Small Quiver", "Petit carquois", "Saco de flechas pequeño"} + }; + trickNameTable[GI_BOW_2] = { + Text{"Arrow Capacity (40)", "Capacité de flèches (40)", "Capacidad de flechas (40)"}, + Text{"Silver Quiver", "Carquois d'argent", "Carcaj plateado"}, + Text{"Medium Quiver", "Carquois moyen", "Saco de flechas mediano"} + }; + trickNameTable[GI_BOW_3] = { + Text{"Arrow Capacity (50)", "Capacité de flèches (50)", "Capacidad de flechas (50)"}, + Text{"Golden Quiver", "Carquois d'or", "Carcaj dorado"}, + Text{"Large Quiver", "Gros carquois", "Saco de flechas grande"} + }; + trickNameTable[GI_SLINGSHOT_1] = { + Text{"Slingshot", "Lance-Pierre", "Tirachinas del Hada"}, + Text{"Scattershot", "Lance-Pierre rafale", "Tirachinas múltiple"}, + Text{"Small Seed Satchel", "Petit sac de graines", "Bolsa de semillas pequeña"} + }; + trickNameTable[GI_SLINGSHOT_2] = { + Text{"Deku Seed Capacity (40)", "Capacité de graines (40)", "Capacidad de semillas (40)"}, + Text{"Silver Deku Seed Bullet Bag", "Sac de graines d'argent", "Bolsa de balas (contiene 40)"}, + Text{"Medium Seed Satchel", "Sac de graines moyen", "Bolsa de semillas mediana"} + }; + trickNameTable[GI_SLINGSHOT_3] = { + Text{"Deku Seed Capacity (50)", "Capacité de graines (50)", "Capacidad de semillas (50)"}, + Text{"Golden Deku Seed Bullet Bag", "Sac de graines d'or", "Bolsa de balas (contiene 50)"}, + Text{"Large Seed Satchel", "Gros sac de graines", "Bolsa de semillas grande"} + }; + trickNameTable[GI_STRENGTH_1] = { + Text{"Goron's Gauntlet", "Gantelet Goron", "Brazalete amarillo"}, + Text{"Power Bracelet", "Bracelet de force", "Brazalete de fuerza"}, + Text{"Magic Bracelet", "Bracelet de Lavio", "Brazalete de Ravio"} + }; + trickNameTable[GI_STRENGTH_2] = { + Text{"Silver Bracelets", "Bracelets d'argent", "Guantes Moguma"}, + Text{"Power Gloves", "Gant de puissance", "Guante del Poder"}, + Text{"Magic Gauntlets", "Gantelet magique", "Guante mágico"} + }; + trickNameTable[GI_STRENGTH_3] = { + Text{"Golden Bracelets", "Bracelets d'or", "Guantelete de Thanos"}, + Text{"Titan's Mitts", "Moufle de titan", "Guantes de Titán"}, + Text{"Magnetic Gloves", "Magnéto-gants", "Guantes de fuego"} + }; + trickNameTable[GI_SCALE_1] = { + Text{"Silver Pearl", "Perle d'argent", "Perla de Plata progresiva"}, + Text{"Adult Scale", "Écaille d'adulte", "Bola de bolos zora"}, + Text{"Zora Scale", "Écaille Zora", "Escama de Zora"} + }; + trickNameTable[GI_SCALE_2] = { + Text{"Golden Pearl", "Perle d'or", "Perla de Oro progresiva"}, + Text{"Giant Scale", "Écaille de géant", "Escama de Faren"}, + Text{"Water Dragon Scale", "Écaille du dragon de l'eau", "Escama de dragón acuático"} + }; + trickNameTable[GI_WALLET_1] = { + Text{"Rupee Capacity (200)", "Capacité de rubis (200)", "Capacidad de rupias (200)"}, + Text{"Silver Wallet", "Bourse d'argent", "Cartera de rupias de adulto"}, + Text{"Medium Wallet", "Bourse moyenne", "Zurrón de rupias mediano"} + }; + trickNameTable[GI_WALLET_2] = { + Text{"Rupee Capacity (500)", "Capacité de rubis (500)", "Capacidad de rupias (500)"}, + Text{"Golden Wallet", "Bourse d'or", "Cartera de rupias gigante"}, + Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias grande"} + }; + trickNameTable[GI_WALLET_3] = { + Text{"Rupee Capacity (999)", "Capacité de rubis (999)", "Capacidad de rupias (999)"}, + Text{"Golden Wallet", "Bourse d'or", "Cartera de ricachón"}, + Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias gigante"} + }; + trickNameTable[GI_DEKU_NUT_UPGRADE_1] = { + Text{"Deku Bomb Capacity (30)", "Capacité de bombes Mojo (30)", "Capacidad de semillas deku (40)"}, + Text{"Baba Nut Capacity (30)", "Capacité de noix Baba (30)", "Capacidad de nueces baba (40)"}, + Text{"Deku Nut Pack (30)", "Paquet de noix Mojo (30)", "Capacidad de nueces mojo (40)"} + }; + trickNameTable[GI_DEKU_NUT_UPGRADE_2] = { + Text{"Deku Bomb Capacity (40)", "Capacité de bombes Mojo (40)", "Capacidad de semillas deku (50)"}, + Text{"Baba Nut Capacity (40)", "Capacité de noix Baba (40)", "Capacidad de nueces baba (50)"}, + Text{"Deku Nut Pack (40)", "Paquet de noix Mojo (40)", "Capacidad de nueces mojo (50)"} + }; + trickNameTable[GI_DEKU_STICK_UPGRADE_1] = { + Text{"Deku Rod Capacity (20)", "Capacité de tiges Mojo (20)", "Capacidad de palos mojo (20)"}, + Text{"Boko Stick Capacity (20)", "Capacité de Bâtons Boko (20)", "Capacidad de palos boko (20)"}, + Text{"Deku Stick Pack (20)", "Paquet de bâtons Mojo (20)", "Capacidad de bastones deku (20)"} + }; + trickNameTable[GI_DEKU_STICK_UPGRADE_2] = { + Text{"Deku Rod Capacity (30)", "Capacité de tiges Mojo (30)", "Capacidad de palos mojo (30)"}, + Text{"Boko Stick Capacity (30)", "Capacité de Bâtons Boko (30)", "Capacidad de palos boko (30)"}, + Text{"Deku Stick Pack (30)", "Paquet de bâtons Mojo (30)", "Capacidad de bastones deku (30)"} + }; + trickNameTable[GI_MAGIC_1] = { + Text{"Stamina Meter", "Jauge d'endurance", "Medidor de vigor"}, + Text{"Energy Meter", "Jauge d'énergie", "Medidor de energía"}, + Text{"Magic Powder", "Poudre magique", "Medidor de carga"} + }; + trickNameTable[GI_MAGIC_2] = { + Text{"Enhanced Stamina Meter", "Jauge d'endurance améliorée", "Medidor de vigor mejorado"}, + Text{"Enhanced Energy Meter", "Jauge d'énergie améliorée", "Medidor de energía mejorado"}, + Text{"Enhanced Magic Powder", "Poudre magique améliorée", "Medidor de carga mejorado"} + }; + trickNameTable[GI_OCARINA_1] = { + Text{"Ocarina", "Ocarina", "Ocarina"}, + Text{"Saria's Ocarina", "Ocarina de Saria", "Ocarina de Saria"}, + Text{"Wood Ocarina", "Ocarina de bois", "Ocarina del Hada"} + }; + trickNameTable[GI_OCARINA_2] = { + Text{"Flute", "Flûte", "Flauta"}, + Text{"Zelda's Ocarina", "Ocarina de Zelda", "Ocarina de Zelda"}, + Text{"Ocarina of Winds", "Ocarina des vents", "Ocarina del Viento"} + }; + trickNameTable[GI_CUCCO] = { + Text{"D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada"}, + Text{"Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko"}, + Text{"Hatched Cucco", "Cocotte éclose", "Pollo"} + }; + trickNameTable[GI_MASK_KEATON] = { + Text{"Kee... Something Mask", "Masque de Quiche", "Máscara Kealgo"}, + Text{"Kitsune Mask", "Masque de Kitsune", "Máscara Kitsune"}, + Text{"Kafei's Mask", "Masque de Kafei", "Máscara de Kafei"} + }; + trickNameTable[GI_MASK_SKULL] = { + Text{"Skull Kid's Mask", "Masque de Skull Kid", "Máscara de Skull Kid"}, + Text{"Stalfos Mask", "Masque de squelette", "Máscara de Stalfos"}, + Text{"Captain's Hat", "Heaume du capitaine", "Casco del capitán"} + }; + trickNameTable[GI_MASK_SPOOKY] = { + Text{"Skrik Mask", "Masque Skrik", "Máscara Escalofriante"}, + Text{"ReDead Mask", "Masque de Remort", "Máscara de ReDead"}, + Text{"Gibdo Mask", "Masque de Gibdo", "Careta de Gibdo"} + }; + trickNameTable[GI_MASK_BUNNY] = { + Text{"Peppy Mask", "Masque de Peppy", "Capucha de Pascua"}, + Text{"Bunny Ears", "Oreilles de lapin", "Orejas de conejo"}, + Text{"Postman's Hat", "Casquette du facteur", "Gorra de cartero"} + }; + trickNameTable[GI_MASK_GORON] = { + Text{"Goro Mask", "Masque Goro", "Máscara Goro"}, + Text{"Mask of Goron", "Masque des Gorons", "Máscara de los Goron"}, + Text{"Darunia Mask", "Masque de Darunia", "Máscara de Darmani"} + }; + trickNameTable[GI_MASK_ZORA] = { + Text{"Zola Mask", "Masque Zola", "Máscara Zola"}, + Text{"Mask of Zora", "Masque des Zoras", "Máscara de los Zora"}, + Text{"Ruto Mask", "Masque de Ruto", "Máscara de Mikau"} + }; + trickNameTable[GI_MASK_GERUDO] = { + Text{"Ganguro Mask", "Masque de Ganguro", "Máscara Canguro"}, + Text{"Mask of Gerudo", "Masque des Gerudos", "Máscara de las Gerudo"}, + Text{"Nabooru Mask", "Masque de Nabooru", "Máscara de Nabooru"} + }; + trickNameTable[GI_MASK_TRUTH] = { + Text{"Sheikah Mask", "Masque Sheikah", "Máscara Sheikah"}, + Text{"Mask of Gossip", "Masque de potins", "Máscara chismosa"}, + Text{"Eye of Truth", "oeil de vérité", "Ojo de la Verdad"} + }; + */ } //Generate a fake name for the ice trap based on the item it's displayed as Text GetIceTrapName(uint8_t id) { - //If the trick names table has not been initialized, do so - if (!initTrickNames) { - InitTrickNames(); - initTrickNames = true; - } - //Randomly get the easy, medium, or hard name for the given item id - return RandomElement(trickNameTable[id]); -} - -//Get shop index based on a given location -static std::map ShopNameToNum = {{"KF Shop", 0}, {"Kak Potion Shop", 1}, {"MK Bombchu Shop", 2}, {"MK Potion Shop", 3}, - {"MK Bazaar", 4}, {"Kak Bazaar", 5}, {"ZD Shop", 6}, {"GC Shop", 7}}; -int GetShopIndex(RandomizerCheck loc) { - //Kind of hacky, but extract the shop and item position from the name - const std::string& name(Rando::StaticData::GetLocation(loc)->GetName()); - int split = name.find(" Item "); - std::string_view shop(name.c_str(), split); - int pos = std::stoi(name.substr(split+6, 1)) - 1; - int shopnum = ShopNameToNum[shop]; - return shopnum*8 + pos; -} - -//Without this transformed index, shop-related tables and arrays would need 64 entries- But only half of that is needed for shopsanity -//So we use this transformation to map only important indices to an array with 32 entries in the following manner: -//Shop index: 4 5 6 7 12 13 14 15 20 21 22 23... -//Transformed: 0 1 2 3 4 5 6 7 8 9 10 11... -//So we first divide the shop index by 4, then by 2 which basically tells us the index of the shop it's in, -//then multiply by 4 since there are 4 items per shop -//And finally we use a modulo by 4 to get the index within the "shop" of 4 items, and add -int TransformShopIndex(int index) { - return 4*((index / 4) / 2) + index % 4; -} + //If the trick names table has not been initialized, do so + if (!initTrickNames) { + InitTrickNames(); + initTrickNames = true; + } + //Randomly get the easy, medium, or hard name for the given item id + return RandomElement(trickNameTable[id]); +} \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/3drando/shops.hpp b/soh/soh/Enhancements/randomizer/3drando/shops.hpp index 33cf57ff4..152e64d0f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/shops.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/shops.hpp @@ -2,7 +2,6 @@ #include "../context.h" #include -#include struct ItemAndPrice { Text Name; @@ -16,7 +15,5 @@ extern int GetRandomShopPrice(); extern int16_t GetRandomScrubPrice(); extern int GetShopsanityReplaceAmount(); extern Text GetIceTrapName(uint8_t id); -extern int GetShopIndex(RandomizerCheck loc); -extern int TransformShopIndex(int index); -extern std::vector NonShopItems; +extern std::map NonShopItems; diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index 10301d297..5ec183b50 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -160,7 +160,7 @@ void WriteIngameSpoilerLog() { // PURPLE TODO: LOCALIZATION auto locItem = itemLocation->GetPlacedItemName().GetEnglish(); if (itemLocation->GetPlacedRandomizerGet() == RG_ICE_TRAP && loc->GetRCType() == RCTYPE_SHOP) { - locItem = NonShopItems[TransformShopIndex(GetShopIndex(key))].Name.GetEnglish(); + locItem = NonShopItems[key].Name.GetEnglish(); } if (stringOffsetMap.find(locItem) == stringOffsetMap.end()) { if (spoilerStringOffset + locItem.size() + 1 >= SPOILER_STRING_DATA_SIZE) { diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index a81295bea..18f187c4d 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -106,9 +106,8 @@ void Context::PlaceItemInLocation(const RandomizerCheck locKey, const Randomizer // If we're placing a non-shop item in a shop location, we want to record it for custom messages if (StaticData::RetrieveItem(item).GetItemType() != ITEMTYPE_SHOP && StaticData::GetLocation(locKey)->GetRCType() == RCTYPE_SHOP) { - const int index = TransformShopIndex(GetShopIndex(locKey)); - NonShopItems[index].Name = StaticData::RetrieveItem(item).GetName(); - NonShopItems[index].Repurchaseable = + NonShopItems[locKey].Name = StaticData::RetrieveItem(item).GetName(); + NonShopItems[locKey].Repurchaseable = StaticData::RetrieveItem(item).GetItemType() == ITEMTYPE_REFILL || StaticData::RetrieveItem(item).GetHintKey() == RHT_PROGRESSIVE_BOMBCHUS; } @@ -214,7 +213,7 @@ void Context::CreateItemOverrides() { val.SetTrickName(GetIceTrapName(val.LooksLike())); // If this is ice trap is in a shop, change the name based on what the model will look like if (loc->GetRCType() == RCTYPE_SHOP) { - NonShopItems[TransformShopIndex(GetShopIndex(locKey))].Name = val.GetTrickName(); + NonShopItems[locKey].Name = val.GetTrickName(); } overrides[locKey] = val; } diff --git a/soh/soh/Enhancements/randomizer/item.cpp b/soh/soh/Enhancements/randomizer/item.cpp index 85d0d71cf..2d3f48451 100644 --- a/soh/soh/Enhancements/randomizer/item.cpp +++ b/soh/soh/Enhancements/randomizer/item.cpp @@ -81,16 +81,22 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio if (giEntry != nullptr) { return giEntry; } - auto logic = Rando::Context::GetInstance()->GetLogic(); + std::shared_ptr ctx = Rando::Context::GetInstance(); + auto logic = ctx->GetLogic(); RandomizerGet actual = RG_NONE; - const bool tycoonWallet = - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) > RO_SHOPSANITY_ZERO_ITEMS; - const u8 infiniteUpgrades = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_INFINITE_UPGRADES); + const bool tycoonWallet = !( + ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || + ( + ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && + ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS) + ) + ); + const u8 infiniteUpgrades = ctx->GetOption(RSK_INFINITE_UPGRADES).Value(); switch (randomizerGet) { case RG_PROGRESSIVE_STICK_UPGRADE: switch (logic->CurrentUpgrade(UPG_STICKS)) { case 0: - if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_DEKU_STICK_BAG)) { + if (ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG)) { actual = RG_DEKU_STICK_BAG; break; } @@ -119,7 +125,7 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio case RG_PROGRESSIVE_NUT_UPGRADE: switch (logic->CurrentUpgrade(UPG_NUTS)) { case 0: - if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_DEKU_NUT_BAG)) { + if (ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG)) { actual = RG_DEKU_NUT_BAG; break; } diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 597b46db6..547d675df 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -263,13 +263,19 @@ void Settings::CreateOptionDescriptions() { "The deku nut bag is required to hold deku nuts."; mOptionDescriptions[RSK_SHOPSANITY] = "Off - All shop items will be the same as vanilla.\n" "\n" - "0 Items - Vanilla shop items will be shuffled among different shops.\n" - "\n" - "1-4 Items - Vanilla shop items will be shuffled among different shops, and " - "each shop will contain 1-4 non-vanilla shop items.\n" + "Specifc Count - Vanilla shop items will be shuffled among different shops, and " + "each shop will contain a specifc number (0-7) of non-vanilla shop items.\n" "\n" "Random - Vanilla shop items will be shuffled among different shops, and " - "each shop will contain a random number(1-4) of non-vanilla shop items.\n"; + "each shop will contain a random number (1-7) of non-vanilla shop items."; + mOptionDescriptions[RSK_SHOPSANITY_COUNT] = "0 Items - Vanilla shop items will be shuffled among different shops.\n" + "\n" + "1-7 Items - Vanilla shop items will be shuffled among different shops, and " + "each shop will contain 1-7 non-vanilla shop items.\n" + /* + "\n" + "8 Items - All shops will contain 8 non-vanilla shop items.\n" + */; mOptionDescriptions[RSK_SHOPSANITY_PRICES] = "Balanced - The default randomization. Shop prices for shopsanity items will range between 0 to 300 rupees, " "with a bias towards values slightly below the middle of the range, in multiples of 5.\n " diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index c5f9849e1..45c794244 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -367,7 +367,13 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe // Shopsanity with at least one item shuffled allows for a third wallet upgrade. // This is needed since Plentiful item pool also adds a third progressive wallet // but we should *not* get Tycoon's Wallet in that mode. - bool tycoonWallet = GetRandoSettingValue(RSK_SHOPSANITY) > RO_SHOPSANITY_ZERO_ITEMS; + bool tycoonWallet = !( + GetRandoSettingValue(RSK_SHOPSANITY) == RO_SHOPSANITY_OFF || + ( + GetRandoSettingValue(RSK_SHOPSANITY) == RO_SHOPSANITY_SPECIFIC_COUNT && + GetRandoSettingValue(RSK_SHOPSANITY_COUNT) == RO_SHOPSANITY_COUNT_ZERO_ITEMS + ) + ); // Same thing with the infinite upgrades, if we're not shuffling them // and we're using the Plentiful item pool, we should prevent the infinite @@ -1138,9 +1144,13 @@ ShopItemIdentity Randomizer::IdentifyShopItem(s32 sceneNum, u8 slotIndex) { shopItemIdentity.itemPrice = -1; shopItemIdentity.enGirlAShopItem = 0x32; + if (slotIndex == 0) { + return shopItemIdentity; + } + Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_GIRLA, // Bazaar (SHOP1) scene is reused, so if entering from Kak use debug scene to identify - (sceneNum == SCENE_BAZAAR && gSaveContext.entranceIndex == ENTR_BAZAAR_0) ? SCENE_TEST01 : sceneNum, slotIndex); + (sceneNum == SCENE_BAZAAR && gSaveContext.entranceIndex == ENTR_BAZAAR_0) ? SCENE_TEST01 : sceneNum, slotIndex - 1); if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { shopItemIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 4d05cffd8..324e90149 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -3767,6 +3767,7 @@ typedef enum { RSK_SHUFFLE_SONGS, RSK_SHUFFLE_TOKENS, RSK_SHOPSANITY, + RSK_SHOPSANITY_COUNT, RSK_SHOPSANITY_PRICES, RSK_SHOPSANITY_PRICES_AFFORDABLE, RSK_SHUFFLE_SCRUBS, @@ -3976,17 +3977,26 @@ typedef enum { RO_BRIDGE_WILDCARD_REWARD, } RandoOptionBridgeRewards; -//Shopsanity settings (off, 0-4 items, random) +//Shopsanity settings (off, specific count, random) typedef enum { RO_SHOPSANITY_OFF, - RO_SHOPSANITY_ZERO_ITEMS, - RO_SHOPSANITY_ONE_ITEM, - RO_SHOPSANITY_TWO_ITEMS, - RO_SHOPSANITY_THREE_ITEMS, - RO_SHOPSANITY_FOUR_ITEMS, + RO_SHOPSANITY_SPECIFIC_COUNT, RO_SHOPSANITY_RANDOM, } RandoOptionShopsanity; +//Shopsanity count settings (0-7 items) +typedef enum { + RO_SHOPSANITY_COUNT_ZERO_ITEMS, + RO_SHOPSANITY_COUNT_ONE_ITEM, + RO_SHOPSANITY_COUNT_TWO_ITEMS, + RO_SHOPSANITY_COUNT_THREE_ITEMS, + RO_SHOPSANITY_COUNT_FOUR_ITEMS, + RO_SHOPSANITY_COUNT_FIVE_ITEMS, + RO_SHOPSANITY_COUNT_SIX_ITEMS, + RO_SHOPSANITY_COUNT_SEVEN_ITEMS, + RO_SHOPSANITY_COUNT_EIGHT_ITEMS, +} RandoOptionShopsanityCount; + //Shopsanity price ranges typedef enum { RO_SHOPSANITY_PRICE_BALANCED, //Balanced random from 0-300 diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index 4614a24d1..45bb928ac 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -119,8 +119,16 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { (CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) != RO_MQ_DUNGEONS_SET_NUMBER || CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeonCount"), 12) < 12) // at least one vanilla dungeon ) && - (location.GetRCType() != RCTYPE_SHOP || - CVarGetInteger(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_OFF) > RO_SHOPSANITY_ZERO_ITEMS) && + ( + location.GetRCType() != RCTYPE_SHOP || + !( + ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || + ( + ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && + ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS) + ) + ) + ) && (location.GetRCType() != RCTYPE_SCRUB || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_OFF) != RO_SCRUBS_OFF || location.GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO || diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 33fe121da..469a16f76 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -1101,12 +1101,11 @@ void EndFloatWindows() { } void LoadSettings() { - //If in randomzer (n64ddFlag), then get the setting and check if in general we should be showing the settings + //If in randomzer, then get the setting and check if in general we should be showing the settings //If in vanilla, _try_ to show items that at least are needed for 100% - showShops = IS_RANDO ? ( - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_OFF && - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_ZERO_ITEMS) + showShops = IS_RANDO ? + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_OFF : false; showBeans = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MAGIC_BEANS) == RO_GENERIC_YES diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index e2bbc92a4..2b67e105d 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -390,7 +390,13 @@ ItemTrackerNumbers GetItemCurrentAndMax(ItemTrackerItem item) { case ITEM_WALLET_ADULT: case ITEM_WALLET_GIANT: result.currentCapacity = IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_HAS_WALLET) ? 0 : CUR_CAPACITY(UPG_WALLET); - result.maxCapacity = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) > RO_SHOPSANITY_ZERO_ITEMS ? 999 : 500; + result.maxCapacity = !IS_RANDO || ( + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) == RO_SHOPSANITY_OFF || + ( + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) == RO_SHOPSANITY_SPECIFIC_COUNT && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY_COUNT) == RO_SHOPSANITY_COUNT_ZERO_ITEMS + ) + ) ? 500 : 999; result.currentAmmo = gSaveContext.rupees; break; case ITEM_BOMBCHU: diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 5bbd66d58..4ecdd5b18 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -97,7 +97,8 @@ void Settings::CreateOptions() { mOptions[RSK_SHUFFLE_DUNGEON_REWARDS] = Option::U8("Shuffle Dungeon Rewards", {"End of Dungeons", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS], WidgetType::Combobox, RO_DUNGEON_REWARDS_END_OF_DUNGEON); mOptions[RSK_LINKS_POCKET] = Option::U8("Link's Pocket", {"Dungeon Reward", "Advancement", "Anything", "Nothing"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("LinksPocket"), "", WidgetType::Combobox, RO_LINKS_POCKET_DUNGEON_REWARD); mOptions[RSK_SHUFFLE_SONGS] = Option::U8("Shuffle Songs", {"Song Locations", "Dungeon Rewards", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleSongs"), mOptionDescriptions[RSK_SHUFFLE_SONGS], WidgetType::Combobox, RO_SONG_SHUFFLE_SONG_LOCATIONS); - mOptions[RSK_SHOPSANITY] = Option::U8("Shopsanity", {"Off", "0 Items", "1 Item", "2 Items", "3 Items", "4 Items", "Random"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Shopsanity"), mOptionDescriptions[RSK_SHOPSANITY], WidgetType::Combobox, RO_SHOPSANITY_OFF); + mOptions[RSK_SHOPSANITY] = Option::U8("Shopsanity", {"Off", "Specific Count", "Random"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Shopsanity"), mOptionDescriptions[RSK_SHOPSANITY], WidgetType::Combobox, RO_SHOPSANITY_OFF); + mOptions[RSK_SHOPSANITY_COUNT] = Option::U8("Shopsanity Item Count", {NumOpts(0, 7/*8*/)}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShopsanityCount"), mOptionDescriptions[RSK_SHOPSANITY_COUNT], WidgetType::Slider, 0, false, IMFLAG_NONE); mOptions[RSK_SHOPSANITY_PRICES] = Option::U8("Shopsanity Prices", {"Balanced", "Starting Wallet", "Adult Wallet", "Giant's Wallet", "Tycoon's Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), mOptionDescriptions[RSK_SHOPSANITY_PRICES], WidgetType::Combobox, RO_SHOPSANITY_PRICE_BALANCED, false, IMFLAG_NONE); mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE] = Option::Bool("Affordable Prices", CVAR_RANDOMIZER_SETTING("ShopsanityPricesAffordable"), mOptionDescriptions[RSK_SHOPSANITY_PRICES_AFFORDABLE]); mOptions[RSK_SHUFFLE_TOKENS] = Option::U8("Tokensanity", {"Off", "Dungeons", "Overworld", "All Tokens"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleTokens"), mOptionDescriptions[RSK_SHUFFLE_TOKENS], WidgetType::Combobox, RO_TOKENSANITY_OFF); @@ -672,6 +673,7 @@ void Settings::CreateOptions() { }, false, WidgetContainerType::COLUMN); mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI] = OptionGroup::SubGroup("Shuffle NPCs & Merchants", { &mOptions[RSK_SHOPSANITY], + &mOptions[RSK_SHOPSANITY_COUNT], &mOptions[RSK_SHOPSANITY_PRICES], &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], &mOptions[RSK_FISHSANITY], @@ -876,6 +878,7 @@ void Settings::CreateOptions() { &mOptions[RSK_LINKS_POCKET], &mOptions[RSK_SHUFFLE_SONGS], &mOptions[RSK_SHOPSANITY], + &mOptions[RSK_SHOPSANITY_COUNT], &mOptions[RSK_SHOPSANITY_PRICES], &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], &mOptions[RSK_FISHSANITY], @@ -1084,6 +1087,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], &mOptions[RSK_SHUFFLE_SONGS], &mOptions[RSK_SHOPSANITY], + &mOptions[RSK_SHOPSANITY_COUNT], &mOptions[RSK_SHOPSANITY_PRICES], &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], &mOptions[RSK_FISHSANITY], @@ -1125,6 +1129,7 @@ void Settings::CreateOptions() { { "Shuffle Settings:Shuffle Songs", RSK_SHUFFLE_SONGS }, { "Shuffle Settings:Shuffle Gerudo Membership Card", RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD }, { "Shuffle Settings:Shopsanity", RSK_SHOPSANITY }, + { "Shuffle Settings:Shopsanity Specific Count", RSK_SHOPSANITY_COUNT }, { "Shuffle Settings:Shopsanity Prices", RSK_SHOPSANITY_PRICES }, { "Shuffle Settings:Affordable Prices", RSK_SHOPSANITY_PRICES_AFFORDABLE }, { "Shuffle Settings:Fishsanity", RSK_FISHSANITY }, @@ -1605,13 +1610,20 @@ void Settings::UpdateOptionProperties() { // Hide shopsanity prices if shopsanity is off or zero switch (CVarGetInteger(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_OFF)) { case RO_SHOPSANITY_OFF: - case RO_SHOPSANITY_ZERO_ITEMS: mOptions[RSK_SHOPSANITY].AddFlag(IMFLAG_SEPARATOR_BOTTOM); + mOptions[RSK_SHOPSANITY_COUNT].Hide(); mOptions[RSK_SHOPSANITY_PRICES].Hide(); mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Hide(); break; + case RO_SHOPSANITY_SPECIFIC_COUNT: + mOptions[RSK_SHOPSANITY].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM); + mOptions[RSK_SHOPSANITY_COUNT].Unhide(); + mOptions[RSK_SHOPSANITY_PRICES].Unhide(); + mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Unhide(); + break; default: mOptions[RSK_SHOPSANITY].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM); + mOptions[RSK_SHOPSANITY_COUNT].Hide(); mOptions[RSK_SHOPSANITY_PRICES].Unhide(); mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Unhide(); break; @@ -2300,6 +2312,7 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) { case RSK_CUCCO_COUNT: case RSK_FISHSANITY_POND_COUNT: case RSK_STARTING_SKULLTULA_TOKEN: + case RSK_SHOPSANITY_COUNT: numericValueString = it.value(); mOptions[index].SetSelectedIndex(std::stoi(numericValueString)); break; @@ -2323,16 +2336,8 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) { case RSK_SHOPSANITY: if (it.value() == "Off") { mOptions[index].SetSelectedIndex(RO_SHOPSANITY_OFF); - } else if (it.value() == "0 Items") { - mOptions[index].SetSelectedIndex(RO_SHOPSANITY_ZERO_ITEMS); - } else if (it.value() == "1 Item") { - mOptions[index].SetSelectedIndex(RO_SHOPSANITY_ONE_ITEM); - } else if (it.value() == "2 Items") { - mOptions[index].SetSelectedIndex(RO_SHOPSANITY_TWO_ITEMS); - } else if (it.value() == "3 Items") { - mOptions[index].SetSelectedIndex(RO_SHOPSANITY_THREE_ITEMS); - } else if (it.value() == "4 Items") { - mOptions[index].SetSelectedIndex(RO_SHOPSANITY_FOUR_ITEMS); + } else if (it.value() == "Specific Count") { + mOptions[index].SetSelectedIndex(RO_SHOPSANITY_SPECIFIC_COUNT); } else if (it.value() == "Random") { mOptions[index].SetSelectedIndex(RO_SHOPSANITY_RANDOM); } diff --git a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 0e09af177..3be24eb91 100644 --- a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -432,7 +432,7 @@ void EnOssan_SpawnItemsOnShelves(EnOssan* this, PlayState* play, ShopItem* shopI } else { itemParams = sShopItemReplaceFunc[shopItems->shopItemIndex](shopItems->shopItemIndex); if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_OFF) { - ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, i); + ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, i + 1); if (shopItemIdentity.randomizerCheck != RC_UNKNOWN_CHECK) { itemParams = shopItemIdentity.enGirlAShopItem; @@ -452,7 +452,7 @@ void EnOssan_SpawnItemsOnShelves(EnOssan* this, PlayState* play, ShopItem* shopI shelves->actor.shape.rot.x, shelves->actor.shape.rot.y + sItemShelfRot[i], shelves->actor.shape.rot.z, itemParams, true); if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_OFF) { - this->shelfSlots[i]->randoSlotIndex = i; + this->shelfSlots[i]->randoSlotIndex = i + 1; } } } @@ -1391,7 +1391,7 @@ void EnOssan_GiveItemWithFanfare(PlayState* play, EnOssan* this) { if (!IS_RANDO) { Actor_OfferGetItem(&this->actor, play, this->shelfSlots[this->cursorIndex]->getItemId, 120.0f, 120.0f); } else { - ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->cursorIndex); + ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->cursorIndex + 1); // en_ossan/en_girla are also used for the happy mask shop, which never has randomized items // and returns RC_UNKNOWN_CHECK, in which case we should fall back to vanilla logic if (shopItemIdentity.randomizerCheck != RC_UNKNOWN_CHECK) { @@ -1738,7 +1738,7 @@ void EnOssan_State_GiveItemWithFanfare(EnOssan* this, PlayState* play, Player* p if (!IS_RANDO) { Actor_OfferGetItem(&this->actor, play, this->shelfSlots[this->cursorIndex]->getItemId, 120.0f, 120.0f); } else { - ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->cursorIndex); + ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->cursorIndex + 1); // en_ossan/en_girla are also used for the happy mask shop, which never has randomized items // and returns RC_UNKNOWN_CHECK, in which case we should fall back to vanilla logic if (shopItemIdentity.randomizerCheck != RC_UNKNOWN_CHECK) { @@ -1754,7 +1754,7 @@ void EnOssan_State_GiveItemWithFanfare(EnOssan* this, PlayState* play, Player* p void EnOssan_State_ItemPurchased(EnOssan* this, PlayState* play, Player* player) { EnGirlA* item; EnGirlA* itemTemp; - ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->cursorIndex); + ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->cursorIndex + 1); GetItemEntry getItemEntry; if (shopItemIdentity.randomizerCheck != RC_UNKNOWN_CHECK) { getItemEntry = Randomizer_GetItemFromKnownCheck(shopItemIdentity.randomizerCheck, shopItemIdentity.ogItemId);