diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index df59d6770..a17b1879f 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -25,7 +25,7 @@ typedef enum GetItemCategory { /* 0x01 */ ITEM_CATEGORY_LESSER, /* 0x02 */ ITEM_CATEGORY_BOSS_KEY, /* 0x03 */ ITEM_CATEGORY_SMALL_KEY, - /* 0x04 */ ITEM_CATEGORY_SKULLTULA_TOKEN, + /* 0x04 */ ITEM_CATEGORY_SKULL_TOKEN, /* 0x05 */ ITEM_CATEGORY_MAJOR, } GetItemCategory; diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 2ac5a3592..402fdecf4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -72,7 +72,7 @@ static void RemoveStartingItemsFromPool() { } else if (startingItem == ItemPool[i] || (Rando::StaticData::RetrieveItem(startingItem).IsBottleItem() && Rando::StaticData::RetrieveItem(ItemPool[i]).IsBottleItem())) { if (AdditionalHeartContainers > 0 && - (startingItem == RG_PIECE_OF_HEART || startingItem == RG_TREASURE_GAME_HEART)) { + (startingItem == RG_PIECE_OF_HEART || startingItem == RG_TCG_PIECE_OF_HEART)) { ItemPool[i] = RG_HEART_CONTAINER; AdditionalHeartContainers--; } else { @@ -848,7 +848,7 @@ static void AssumedFill(const std::vector& items, const std::vect // NOLINTNEXTLINE(clang-diagnostic-unused-variable) for (const RandomizerGet item : items) { SPDLOG_DEBUG("\t"); - SPDLOG_DEBUG(Rando::StaticData::RetrieveItem(item).GetName().GetEnglish()); + SPDLOG_DEBUG(Rando::StaticData::RetrieveItem(item).GetName().GetForCurrentLanguage(MF_RAW)); SPDLOG_DEBUG("\n"); } SPDLOG_DEBUG("\nAllowed Locations:\n"); @@ -888,7 +888,6 @@ static void AssumedFill(const std::vector& items, const std::vect Shuffle(itemsToPlace); while (!itemsToPlace.empty()) { RandomizerGet item = std::move(itemsToPlace.back()); - Rando::StaticData::RetrieveItem(item).SetAsPlaythrough(); itemsToPlace.pop_back(); // assume we have all unplaced items @@ -907,7 +906,7 @@ static void AssumedFill(const std::vector& items, const std::vect if (accessibleLocations.empty()) { SPDLOG_DEBUG("\nCANNOT PLACE "); - SPDLOG_DEBUG(Rando::StaticData::RetrieveItem(item).GetName().GetEnglish()); + SPDLOG_DEBUG(Rando::StaticData::RetrieveItem(item).GetName().GetForCurrentLanguage(MF_RAW)); SPDLOG_DEBUG(". TRYING AGAIN...\n"); // reset any locations that got an item @@ -1135,14 +1134,12 @@ static void RandomizeDungeonItems() { } if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_ANY_DUNGEON)) { - auto gerudoKeys = FilterAndEraseFromPool(ItemPool, [](const auto i) { - return i == RG_GERUDO_FORTRESS_SMALL_KEY || i == RG_GERUDO_FORTRESS_KEY_RING; - }); + auto gerudoKeys = FilterAndEraseFromPool( + ItemPool, [](const auto i) { return i == RG_HIDEOUT_SMALL_KEY || i == RG_HIDEOUT_KEY_RING; }); AddElementsToPool(anyDungeonItems, gerudoKeys); } else if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_OVERWORLD)) { - auto gerudoKeys = FilterAndEraseFromPool(ItemPool, [](const auto i) { - return i == RG_GERUDO_FORTRESS_SMALL_KEY || i == RG_GERUDO_FORTRESS_KEY_RING; - }); + auto gerudoKeys = FilterAndEraseFromPool( + ItemPool, [](const auto i) { return i == RG_HIDEOUT_SMALL_KEY || i == RG_HIDEOUT_KEY_RING; }); AddElementsToPool(overworldItems, gerudoKeys); } diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp index 21891ff81..c79a977b4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp @@ -29,7 +29,7 @@ void StaticData::HintTable_Init() { /*-------------------------- | GENERAL TEXT | ---------------------------*/ - hintTextTable[RHT_NONE] = HintText(CustomMessage("No Hint", "Kein Hinweis", "Pas d'Indice" )); + hintTextTable[RHT_NONE] = HintText(CustomMessage("No Hint", "Kein Hinweis", "Pas d'Indice" ), {}, {}, CustomMessage("No Item", "Rien", "Kein Artikel")); hintTextTable[RHT_WAY_OF_THE_HERO] = HintText(CustomMessage( "They say that #[[1]]# is on #the way of the hero#.", /*german*/ "Man erzählt sich, daß #[[1]]# #der Weg des Helden# verlaufe.", @@ -1004,7 +1004,7 @@ void StaticData::HintTable_Init() { hintTextTable[RHT_CASTLE_GROUNDS] = HintText(CustomMessage("the Castle Grounds", /*german*/ "auf dem Schloßgelände", - /*french*/ "le Château d'Hyrule")); + /*french*/ "le Château d'Hyrule")); //TRANSLATE_TODO name differently to RHT_HYRULE_CASTLE // /*spanish*/ hintTextTable[RHT_HYRULE_CASTLE] = HintText(CustomMessage("Hyrule Castle", diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp index f5195c91d..dc7447b80 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp @@ -17,8 +17,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un ágil puñal CustomMessage("a starter slasher", /*german*/"ein Schlitzer für Anfänger", /*french*/"une arme de débutant"), // /*spanish*/una hoja de principiantes - CustomMessage("a switchblade", /*german*/"ein Taschenmesser", /*french*/"un canif")}); - // /*spanish*/una navaja + CustomMessage("a switchblade", /*german*/"ein Taschenmesser", /*french*/"un canif") + // /*spanish*/una navaja + }, + CustomMessage("the Kokiri Sword", /*german*/"das Kokiri-Schwert", /*french*/"l'Épée Kokiri")); hintTextTable[RHT_MASTER_SWORD] = HintText(CustomMessage("the Master Sword", /*german*/"das Master-Schwert", /*french*/"l'Épée de Légende"), // /*spanish*/la Espada Maestra @@ -28,8 +30,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("evil's bane", /*german*/"der Ruin des Bösen", /*french*/"le fléau du mal"), // /*spanish*/la destructora del mal - CustomMessage("a seven year limbo", /*german*/"eine siebenjährige Erwartung", /*french*/"une stase de sept ans")}); - // /*spanish*/unos siete años de espera + CustomMessage("a seven year limbo", /*german*/"eine siebenjährige Erwartung", /*french*/"une stase de sept ans") + // /*spanish*/unos siete años de espera + }, + CustomMessage("Master Sword", "Master-Schwert", "Épée de Legende")); hintTextTable[RHT_GIANTS_KNIFE] = HintText(CustomMessage("the Giant's Knife", /*german*/"das Langschwert", /*french*/"la Lame des Géants"), // /*spanish*/la daga gigante @@ -39,8 +43,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a fragile blade", /*german*/"eine fragile Klinge", /*french*/"une lame fragile"), // /*spanish*/una frágil hoja - CustomMessage("a breakable cleaver", /*german*/"ein brüchiger Spalter", /*french*/"un espadon de verre")}); - // /*spanish*/un rompible acero + CustomMessage("a breakable cleaver", /*german*/"ein brüchiger Spalter", /*french*/"un espadon de verre") + // /*spanish*/un rompible acero + }, + CustomMessage("Giant's Knife", "Langschwert", "Lame des Géants")); hintTextTable[RHT_BIGGORON_SWORD] = HintText(CustomMessage("the Biggoron Sword", /*german*/"das Biggoron-Schwert", /*french*/"l'Épée de Biggoron"), // /*spanish*/la Espada de Biggoron @@ -50,8 +56,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("the biggest blade", /*german*/"die größte Klinge", /*french*/"une lame gigantesque"), // /*spanish*/el mayor mandoble - CustomMessage("a colossal cleaver", /*german*/"ein kolossaler Spalter", /*french*/"un espadon colossal")}); - // /*spanish*/un estoque colosal + CustomMessage("a colossal cleaver", /*german*/"ein kolossaler Spalter", /*french*/"un espadon colossal") + // /*spanish*/un estoque colosal + }, + CustomMessage("Biggoron's Sword", "Biggoron-Schwert", "Épée de Biggoron")); hintTextTable[RHT_DEKU_SHIELD] = HintText(CustomMessage("a Deku Shield", /*german*/"ein Deku-Schild", /*french*/"un Bouclier Mojo"), // /*spanish*/un escudo deku @@ -61,8 +69,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a wooden ward", /*german*/"ein hölzerner Schutz", /*french*/"un écu d'écorce"), // /*spanish*/una protección del bosque - CustomMessage("a burnable barrier", /*german*/"eine brennbare Barriere", /*french*/"une protection inflammable")}); - // /*spanish*/una barrera quemable + CustomMessage("a burnable barrier", /*german*/"eine brennbare Barriere", /*french*/"une protection inflammable") + // /*spanish*/una barrera quemable + }, + CustomMessage("Deku Shield", "Deku-Schild", "Bouclier Mojo")); hintTextTable[RHT_HYLIAN_SHIELD] = HintText(CustomMessage("a Hylian Shield", /*german*/"ein Hylia-Schild", /*french*/"un Bouclier Hylien"), // /*spanish*/un escudo hyliano @@ -72,8 +82,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a steel safeguard", /*german*/"ein eiserner Schutz", /*french*/"une carapace d'acier"), // /*spanish*/una protección de acero - CustomMessage("Like Like's metal meal", /*german*/"Raubschleims Metallmahlzeit", /*french*/"un amuse-gueule de Pudding")}); - // /*spanish*/un alimento de Like Like + CustomMessage("Like Like's metal meal", /*german*/"Raubschleims Metallmahlzeit", /*french*/"un amuse-gueule de Pudding") + // /*spanish*/un alimento de Like Like + }, + CustomMessage("Hylian Shield", "Hylia-Schild", "Bouclier Hylien")); hintTextTable[RHT_MIRROR_SHIELD] = HintText(CustomMessage("the Mirror Shield", /*german*/"der Spiegel-Schild", /*french*/"le Bouclier Miroir"), // /*spanish*/el escudo espejo @@ -85,8 +97,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una muralla reflectora CustomMessage("Medusa's weakness", /*german*/"Medusas Schwäche", /*french*/"la faiblesse de Méduse"), // /*spanish*/la debilidad de Medusa - CustomMessage("a silvered surface", /*german*/"eine silberne Oberfläche", /*french*/"une surface argentée")}); - // /*spanish*/una superficie plateada + CustomMessage("a silvered surface", /*german*/"eine silberne Oberfläche", /*french*/"une surface argentée") + // /*spanish*/una superficie plateada + }, + CustomMessage("Mirror Shield", "Spiegel-Schild", "Bouclier Miroir")); hintTextTable[RHT_GORON_TUNIC] = HintText(CustomMessage("a Goron Tunic", /*german*/"eine Goronen-Rüstung", /*french*/"une Tunique Goron"), // /*spanish*/un sayo goron @@ -98,8 +112,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una vestimenta rubí CustomMessage("fireproof fabric", /*german*/"feuerfestes Gewebe", /*french*/"un trésor anti-flamme"), // /*spanish*/una ignífuga prenda - CustomMessage("cooking clothes", /*german*/"eine Kochschürze", /*french*/"une tenue de cuisine")}); - // /*spanish*/unos abrasantes ropajes + CustomMessage("cooking clothes", /*german*/"eine Kochschürze", /*french*/"une tenue de cuisine") + // /*spanish*/unos abrasantes ropajes + }, + CustomMessage("Goron Tunic", "Goronen-Rüstung", "Tunique Goron")); hintTextTable[RHT_ZORA_TUNIC] = HintText(CustomMessage("a Zora Tunic", /*german*/"eine Zora-Rüstung", /*french*/"une Tunique Zora"), // /*spanish*/un sayo zora @@ -113,8 +129,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una vestidura zafiro CustomMessage("scuba gear", /*german*/"eine Taucherausrüstung", /*french*/"un habit de plongée"), // /*spanish*/un traje impermeable - CustomMessage("a swimsuit", /*german*/"ein Badeanzug", /*french*/"un costume de baignade")}); - // /*spanish*/unos ropajes sumergibles + CustomMessage("a swimsuit", /*german*/"ein Badeanzug", /*french*/"un costume de baignade") + // /*spanish*/unos ropajes sumergibles + }, + CustomMessage("Zora Tunic", "Zora-Rüstung", "Tunique Zora")); hintTextTable[RHT_IRON_BOOTS] = HintText(CustomMessage("the Iron Boots", /*german*/"die Eisenstiefel€", /*french*/"une paire de Bottes de plomb"), // /*spanish*/las botas de hierro @@ -128,8 +146,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("sink shoes", /*german*/"Sinkschuhe€", /*french*/"un boulet de fer"), // /*spanish*/un calzado de las profundidades - CustomMessage("clank cleats", /*german*/"scheppernde Stollen€", /*french*/"une paire de talons bruyants")}); - // /*spanish*/unas suelas férreas + CustomMessage("clank cleats", /*german*/"scheppernde Stollen€", /*french*/"une paire de talons bruyants") + // /*spanish*/unas suelas férreas + }, + CustomMessage("Iron Boots", "Eisenstiefel", "Bottes de plomb")); hintTextTable[RHT_HOVER_BOOTS] = HintText(CustomMessage("the Hover Boots", /*german*/"die Gleitstiefel€", /*french*/"une paire de Bottes des airs"), // /*spanish*/las botas voladoras @@ -141,8 +161,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/unas suelas resvaladizas CustomMessage("sacred slippers", /*german*/"heilige Pantoffeln€", /*french*/"une paire de pantoufles sacrées"), // /*spanish*/unos escurridizos botines - CustomMessage("spacewalkers", /*german*/"Weltraumstiefel€", /*french*/"une paire de bottes spatiales")}); - // /*spanish*/un calzado antigravitatorio + CustomMessage("spacewalkers", /*german*/"Weltraumstiefel€", /*french*/"une paire de bottes spatiales") + // /*spanish*/un calzado antigravitatorio + }, + CustomMessage("Hover Boots", "Gleitstiefel", "Bottes de airs")); hintTextTable[RHT_ZELDAS_LETTER] = HintText(CustomMessage("Zelda's Letter", /*german*/"Zeldas Brief", /*french*/"la Lettre de Zelda"), // /*spanish*/la carta de Zelda @@ -151,8 +173,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un autógrafo CustomMessage("royal stationery", /*german*/"königliches Briefpapier", /*french*/"du papier royal"), // /*spanish*/un escrito real - CustomMessage("royal snail mail", /*german*/"königliche Schneckenpost", /*french*/"une enveloppe royale")}); - // /*spanish*/correo de la realeza + CustomMessage("royal snail mail", /*german*/"königliche Schneckenpost", /*french*/"une enveloppe royale") + // /*spanish*/correo de la realeza + }, + CustomMessage("Zelda's Letter", "Zeldas Brief", "Lettre de Zelda")); hintTextTable[RHT_WEIRD_EGG] = HintText(CustomMessage("the Weird Egg", /*german*/"ein seltsames Ei", /*french*/"l'Oeuf Curieux"), // /*spanish*/el huevo extraño @@ -160,8 +184,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("an egg", /*german*/"ein Ei", /*french*/"un oeuf") // /*spanish*/un huevo }, { - CustomMessage("a chicken dilemma", /*german*/"ein Hühnerdilemma", /*french*/"un drôle d'ovale")}); - // /*spanish*/el dilema de la gallina + CustomMessage("a chicken dilemma", /*german*/"ein Hühnerdilemma", /*french*/"un drôle d'ovale") + // /*spanish*/el dilema de la gallina + }, + CustomMessage("Weird Egg", "Seltsames Ei", "Oeuf Curieux")); hintTextTable[RHT_BOOMERANG] = HintText(CustomMessage("the Boomerang", /*german*/"der Bumerang", /*french*/"le Boomerang"), // /*spanish*/el bumerán @@ -175,8 +201,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un plátano CustomMessage("a stun stick", /*german*/"ein Betäubungswerkzeug", /*french*/"un bâton étourdissant"), // /*spanish*/un palo aturdidor - CustomMessage("a yellow angle", /*german*/"ein gelber Winkel", /*french*/"un angle jaune")}); - // /*spanish*/un ángulo amarillo + CustomMessage("a yellow angle", /*german*/"ein gelber Winkel", /*french*/"un angle jaune") + // /*spanish*/un ángulo amarillo + }, + CustomMessage("Boomerang", "Bumerang", "Boomerang")); hintTextTable[RHT_LENS_OF_TRUTH] = HintText(CustomMessage("the Lens of Truth", /*german*/"das Auge der Wahrheit", /*french*/"le Monocle de Vérité"), // /*spanish*/la Lupa de la Verdad @@ -190,8 +218,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/el rastreador paranormal CustomMessage("true sight", /*german*/"wahre Sicht", /*french*/"le troisième œil"), // /*spanish*/el ojo que todo ve - CustomMessage("a detective's tool", /*german*/"ein Detektivwerkzeug", /*french*/"un trésor Sheikah")}); - // /*spanish*/la revelación verdadera + CustomMessage("a detective's tool", /*german*/"ein Detektivwerkzeug", /*french*/"un trésor Sheikah") + // /*spanish*/la revelación verdadera + }, + CustomMessage("Lens of Truth", "Auge der Wahrheit", "Monocle de Vérité")); hintTextTable[RHT_MEGATON_HAMMER] = HintText(CustomMessage("the Megaton Hammer", /*german*/"der Stahlhammer", /*french*/"la Masse des Titans"), // /*spanish*/el martillo Megatón @@ -203,8 +233,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un destructor de dragones CustomMessage("the metal mallet", /*german*/"ein stählerner Schlägel", /*french*/"un outil de construction"), // /*spanish*/un mazo de metal - CustomMessage("the heavy hitter", /*german*/"ein schwerer Schläger", /*french*/"un poids lourd")}); - // /*spanish*/un machacador + CustomMessage("the heavy hitter", /*german*/"ein schwerer Schläger", /*french*/"un poids lourd") + // /*spanish*/un machacador + }, + CustomMessage("Megaton Hammer", "Stahlhammer", "Masse des Titans")); hintTextTable[RHT_STONE_OF_AGONY] = HintText(CustomMessage("the Stone of Agony", /*german*/"der Stein des Wissens", /*french*/"la Pierre de Souffrance"), // /*spanish*/la Piedra de la Agonía @@ -216,8 +248,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("the shake stone", /*german*/"der Schüttelstein", /*french*/"le fragment vibrant"), // /*spanish*/el fragmento tintineante - CustomMessage("a gray alarm", /*german*/"ein grauer Alarm", /*french*/"une alerte bleue")}); - // /*spanish*/una azul alarma + CustomMessage("a gray alarm", /*german*/"ein grauer Alarm", /*french*/"une alerte bleue") + // /*spanish*/una azul alarma + }, + CustomMessage("Stone of Agony", "Stein des Wissens", "Pierre de Souffrance")); hintTextTable[RHT_DINS_FIRE] = HintText(CustomMessage("Din's Fire", /*german*/"Dins Feuerinferno", /*french*/"le Feu de Din"), // /*spanish*/el Fuego de Din @@ -229,8 +263,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un incendio CustomMessage("a heat wave", /*german*/"eine Hitzewelle", /*french*/"une vague de chaleur"), // /*spanish*/una onda de calor - CustomMessage("a red ball", /*german*/"ein roter Ball", /*french*/"une explosion de flammes")}); - // /*spanish*/una roja esfera + CustomMessage("a red ball", /*german*/"ein roter Ball", /*french*/"une explosion de flammes") + // /*spanish*/una roja esfera + }, + CustomMessage("Din's Fire", "Dins Feuerinferno", "Feu de Din")); hintTextTable[RHT_FARORES_WIND] = HintText(CustomMessage("Farore's Wind", /*german*/"Farores Donnersturm", /*french*/"le Vent de Farore"), // /*spanish*/el Viento de Farore @@ -242,8 +278,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un teletransportador CustomMessage("a relocation rune", /*german*/"eine Umzugsrune", /*french*/"une rune de relocation"), // /*spanish*/una runa de transporte - CustomMessage("a green ball", /*german*/"ein grüner Ball", /*french*/"une boule verte")}); - // /*spanish*/una verde esfera + CustomMessage("a green ball", /*german*/"ein grüner Ball", /*french*/"une boule verte") + // /*spanish*/una verde esfera + }, + CustomMessage("Farore's Wind", "Farores Donnersturm", "Vent de Farore")); hintTextTable[RHT_NAYRUS_LOVE] = HintText(CustomMessage("Nayru's Love", /*german*/"Nayrus Umarmung", /*french*/"l'Amour de Nayru"), // /*spanish*/el Amor de Nayru @@ -255,8 +293,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una seguridad temporal CustomMessage("an impregnable aura", /*german*/"eine undurchdringliche Aura", /*french*/"un aura impénétrable"), // /*spanish*/un aura impenetrable - CustomMessage("a blue barrier", /*german*/"eine blaue Barriere", /*french*/"une toison bleu")}); - // /*spanish*/una barrera azul + CustomMessage("a blue barrier", /*german*/"eine blaue Barriere", /*french*/"une toison bleu") + // /*spanish*/una barrera azul + }, + CustomMessage("Nayru's Love", "Nayrus Umarmung", "Amour de Nayru")); hintTextTable[RHT_FIRE_ARROWS] = HintText(CustomMessage("the Fire Arrows", /*german*/"die Feuer-Pfeile€", /*french*/"les Flèches de Feu"), // /*spanish*/la flecha de fuego @@ -268,8 +308,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/el ardiente aguijón CustomMessage("the burning bolts", /*german*/"die Brennstifte€", /*french*/"un obus enflammé"), // /*spanish*/las puntas ígneas - CustomMessage("a magma missile", /*german*/"eine vulkanische Rakete", /*french*/"un missile volcanique")}); - // /*spanish*/el misil abrasador + CustomMessage("a magma missile", /*german*/"eine vulkanische Rakete", /*french*/"un missile volcanique") + // /*spanish*/el misil abrasador + }, + CustomMessage("Fire Arrow", "Feuer-Pfeile", "Flèche de Feu")); hintTextTable[RHT_ICE_ARROWS] = HintText(CustomMessage("the Ice Arrows", /*german*/"die Eis-Pfeile€", /*french*/"les Flèches de Glace"), // /*spanish*/la flecha de hielo @@ -283,8 +325,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/el misil congelador CustomMessage("the frostbite bolts", /*german*/"die Froststifte€", /*french*/"un froid mordant"), // /*spanish*/las puntas gélidas - CustomMessage("an iceberg maker", /*german*/"ein Eisbergmacher", /*french*/"une aiguille glaciale")}); - // /*spanish*/el control de escarcha + CustomMessage("an iceberg maker", /*german*/"ein Eisbergmacher", /*french*/"une aiguille glaciale") + // /*spanish*/el control de escarcha + }, + CustomMessage("Ice Arrow", "Eis-Pfeile", "Flèche de Glace")); hintTextTable[RHT_LIGHT_ARROWS] = HintText(CustomMessage("the Light Arrows", /*german*/"die Licht-Pfeile€", /*french*/"les Flèches de Lumière"), // /*spanish*/la flecha de luz @@ -298,8 +342,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/el disparo luminoso CustomMessage("Ganondorf's bane", /*german*/"Ganondorfs Verderben", /*french*/"le fléau de Ganondorf"), // /*spanish*/la perdición de Ganondorf - CustomMessage("the lighting bolts", /*german*/"die Lichtstifte€", /*french*/"l'éclair sacré")}); - // /*spanish*/las puntas resplandecientes + CustomMessage("the lighting bolts", /*german*/"die Lichtstifte€", /*french*/"l'éclair sacré") + // /*spanish*/las puntas resplandecientes + }, + CustomMessage("Light Arrow", "Licht-Pfeile", "Flèche de Lumière")); hintTextTable[RHT_GERUDO_MEMBERSHIP_CARD] = HintText(CustomMessage("the Gerudo Membership Card", /*german*/"der Gerudo-Pass", /*french*/"la Carte Gerudo"), // /*spanish*/el pase de socio gerudo @@ -309,8 +355,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a girl club membership", /*german*/"eine Mitgliedskarte", /*french*/"une carte de membre"), // /*spanish*/una fémina membresía - CustomMessage("a desert tribe's pass", /*german*/"ein Pass eines Wüstenstammes", /*french*/"un laissez-passer")}); - // /*spanish*/el vale del desierto + CustomMessage("a desert tribe's pass", /*german*/"ein Pass eines Wüstenstammes", /*french*/"un laissez-passer") + // /*spanish*/el vale del desierto + }, + CustomMessage("Gerudo Membership Card", "Gerudo-Pass", "Carte Gerudo")); hintTextTable[RHT_MAGIC_BEAN] = HintText(CustomMessage("a Magic Bean", /*german*/"eine Wundererbse", /*french*/"un Haricot Magique"), // /*spanish*/una judía mágica @@ -318,8 +366,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("something sometimes buried", /*german*/"etwas gelegentlich Vergrabenes", /*french*/"une chose parfois enterrée") // /*spanish*/algo a veces enterrado }, { - CustomMessage("a wizardly legume", /*german*/"eine zauberhafte Hülse", /*french*/"un légume ensorcelé")}); - // /*spanish*/una legumbre hechizada + CustomMessage("a wizardly legume", /*german*/"eine zauberhafte Hülse", /*french*/"un légume ensorcelé") + // /*spanish*/una legumbre hechizada + }, + CustomMessage("Magic Bean", "Wundererbse", "Haricots Magiques")); hintTextTable[RHT_MAGIC_BEAN_PACK] = HintText(CustomMessage("Magic Beans", /*german*/"Wundererbsen-Packung", /*french*/"un Paquet de Haricots Magiques"), // /*spanish*/unas judías mágicas @@ -327,8 +377,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("something sometimes buried", /*german*/"etwas gelegentlich Vergrabenes", /*french*/"une chose parfois enterrée") // /*spanish*/algo a veces enterrado }, { - CustomMessage("wizardly legumes", /*german*/"zauberhafte Hülsen", /*french*/"un paquet de légumes ensorcelés")}); - // /*spanish*/unas legumbres hechizadas + CustomMessage("wizardly legumes", /*german*/"zauberhafte Hülsen", /*french*/"un paquet de légumes ensorcelés") + // /*spanish*/unas legumbres hechizadas + }, + CustomMessage("Magic Bean Pack", "Wundererbsen-Packung", "Paquet de Haricots Magiques")); hintTextTable[RHT_DOUBLE_DEFENSE] = HintText(CustomMessage("Double Defense", /*german*/"Doppelte Verteidigung", /*french*/"la Double Défence"), // /*spanish*/la doble defensa @@ -342,8 +394,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un contorno blanco CustomMessage("damage decrease", /*german*/"Schadensverringerung", /*french*/"une protection supplémentaire"), // /*spanish*/una reducción de daño - CustomMessage("strengthened love", /*german*/"gestärkte Liebe", /*french*/"un amour coriace")}); - // /*spanish*/un amor fortalecido + CustomMessage("strengthened love", /*german*/"gestärkte Liebe", /*french*/"un amour coriace") + // /*spanish*/un amor fortalecido + }, + CustomMessage("Double Defense", "Doppelte Verteidigung", "Double Défence")); hintTextTable[RHT_GOLD_SKULLTULA_TOKEN] = HintText(CustomMessage("a Gold Skulltula Token", /*german*/"ein Skulltula-Symbol", /*french*/"un Symbole de Skulltula d'or"), // /*spanish*/un símbolo de skulltula dorada @@ -359,23 +413,27 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una figura arácnida CustomMessage("spider remains", /*german*/"Spinnenüberreste€", /*french*/"une dépouille dorée"), // /*spanish*/unos restos dorados - CustomMessage("one percent of a curse", /*german*/"ein Prozent eines Fluches", /*french*/"un centième de malédiction")}); - // /*spanish*/una centésima de una maldición + CustomMessage("one percent of a curse", /*german*/"ein Prozent eines Fluches", /*french*/"un centième de malédiction") + // /*spanish*/una centésima de una maldición + }, + CustomMessage("Gold Skulltula Token", "Skulltula-Symbol", "Symbole de Skulltula d'Or")); hintTextTable[RHT_POCKET_EGG] = HintText(CustomMessage("the Pocket Egg", /*german*/"das Ei", /*french*/"l'Oeuf de Poche"), - // /*spanish*/el huevo de bolsillo - { - CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges"), - // /*spanish*/un objeto de una misión secundaria - CustomMessage("an egg", /*german*/"ein Ei", /*french*/"un oeuf") - // /*spanish*/un huevo - }, { - CustomMessage("a Cucco container", /*german*/"ein Hühnerbehälter", /*french*/"un réservoir à Cocotte"), - // /*spanish*/cuco contenido - CustomMessage("a Cucco, eventually", /*german*/"schlussendlich ein Huhn", /*french*/"un poussin éventuel"), - // /*spanish*/un futuro cuco - CustomMessage("a fowl youth", /*german*/"ein junges Geflügel", /*french*/"une omelette crue")}); - // /*spanish*/una dulce juventud + // /*spanish*/el huevo de bolsillo + { + CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges"), + // /*spanish*/un objeto de una misión secundaria + CustomMessage("an egg", /*german*/"ein Ei", /*french*/"un oeuf") + // /*spanish*/un huevo + }, { + CustomMessage("a Cucco container", /*german*/"ein Hühnerbehälter", /*french*/"un réservoir à Cocotte"), + // /*spanish*/cuco contenido + CustomMessage("a Cucco, eventually", /*german*/"schlussendlich ein Huhn", /*french*/"un poussin éventuel"), + // /*spanish*/un futuro cuco + CustomMessage("a fowl youth", /*german*/"ein junges Geflügel", /*french*/"une omelette crue") + // /*spanish*/una dulce juventud + }, + CustomMessage("Pocket Egg", "Ei", "Oeuf de poche")); hintTextTable[RHT_POCKET_CUCCO] = HintText(CustomMessage("the Pocket Cucco", /*german*/"Kiki", /*french*/"la Cocotte de Poche"), // /*spanish*/el cuco de bolsillo @@ -383,8 +441,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a little clucker", /*german*/"ein kleiner Gackerer", /*french*/"un petit glousseur")}); - // /*spanish*/un pollito chiquito + CustomMessage("a little clucker", /*german*/"ein kleiner Gackerer", /*french*/"un petit glousseur") + // /*spanish*/un pollito chiquito + }, + CustomMessage("Pocket Cucco", TODO_TRANSLATE, TODO_TRANSLATE)); hintTextTable[RHT_COJIRO] = HintText(CustomMessage("Cojiro", /*german*/"Henni", /*french*/"le p'tit poulet"), // /*spanish*/a Cojiro @@ -392,8 +452,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a cerulean capon", /*german*/"ein himmelsblauer Hahn", /*french*/"un paon azur")}); - // /*spanish*/un cerúleo capón + CustomMessage("a cerulean capon", /*german*/"ein himmelsblauer Hahn", /*french*/"un paon azur") + // /*spanish*/un cerúleo capón + }, + CustomMessage("Cojiro", "Henni", "P'tit Poulet")); hintTextTable[RHT_ODD_MUSHROOM] = HintText(CustomMessage("an Odd Mushroom", /*german*/"ein Schimmelpilz", /*french*/"un Champignon Suspect"), // /*spanish*/un champiñón extraño @@ -401,8 +463,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a powder ingredient", /*german*/"eine Puderzutat", /*french*/"un ingrédient à poudre")}); - // /*spanish*/un oloroso ingrediente + CustomMessage("a powder ingredient", /*german*/"eine Puderzutat", /*french*/"un ingrédient à poudre") + // /*spanish*/un oloroso ingrediente + }, + CustomMessage("Odd Mushroom", "Schimmelpilz", "Champigon Suspect")); hintTextTable[RHT_ODD_POTION] = HintText(CustomMessage("an Odd Potion", /*german*/"ein Modertrank", /*french*/"une Mixture Suspecte"), // /*spanish*/una medicina rara @@ -414,8 +478,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("Granny's goodies", /*german*/"Omas Leckereien€", /*french*/"la confiserie de mamie")}); - // /*spanish*/la especialidad de la abuela + CustomMessage("Granny's goodies", /*german*/"Omas Leckereien€", /*french*/"la confiserie de mamie") + // /*spanish*/la especialidad de la abuela + }, + CustomMessage("Odd Potion", "Modertrank", "Mixture Suspecte")); hintTextTable[RHT_POACHERS_SAW] = HintText(CustomMessage("the Poacher's Saw", /*german*/"eine Säge", /*french*/"la Scie du Chasseur"), // /*spanish*/la sierra del furtivo @@ -423,8 +489,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a tree killer", /*german*/"ein Baumtöter", /*french*/"un coupeur d'arbres")}); - // /*spanish*/un destructor de árboles + CustomMessage("a tree killer", /*german*/"ein Baumtöter", /*french*/"un coupeur d'arbres") + // /*spanish*/un destructor de árboles + }, + CustomMessage("Poacher's Saw", "Säge", "Scie du Chasseur")); hintTextTable[RHT_BROKEN_SWORD] = HintText(CustomMessage("the Broken Goron's Sword", /*german*/"das zerbrochene Goronen-Schwert", /*french*/"l'Épée Brisée de Goron"), // /*spanish*/la espada goron rota @@ -434,8 +502,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a sword", /*german*/"ein Schwert", /*french*/"une épée") // /*spanish*/una espada }, { - CustomMessage("a shattered slicer", /*german*/"ein zersplitterter Schneider", /*french*/"une arme cassée")}); - // /*spanish*/una rebanadora rota + CustomMessage("a shattered slicer", /*german*/"ein zersplitterter Schneider", /*french*/"une arme cassée") + // /*spanish*/una rebanadora rota + }, + CustomMessage("Broken Goron's Sword", "zerbr. Goronen-Schwert", "Épée Brisée de Goron")); hintTextTable[RHT_PRESCRIPTION] = HintText(CustomMessage("the Prescription", /*german*/"ein Rezept", /*french*/"une Ordonnance"), // /*spanish*/la receta @@ -445,8 +515,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a pill pamphlet", /*german*/"eine Pillenbroschüre", /*french*/"un document urgent"), // /*spanish*/un instructivo medicinal - CustomMessage("a doctor's note", /*german*/"ein ärztliches Attest", /*french*/"un papier médical")}); - // /*spanish*/unas notas del doctor + CustomMessage("a doctor's note", /*german*/"ein ärztliches Attest", /*french*/"un papier médical") + // /*spanish*/unas notas del doctor + }, + CustomMessage("Prescription", "Rezept", "Ordonnance")); hintTextTable[RHT_EYEBALL_FROG] = HintText(CustomMessage("the Eyeball Frog", /*german*/"ein Glotzfrosch", /*french*/"le Crapaud-qui-louche"), // /*spanish*/la rana de ojos saltones @@ -454,8 +526,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a perceiving polliwog", /*german*/"eine wahrnehmende Kaulquappe", /*french*/"un amphibien")}); - // /*spanish*/un variopinto batracio + CustomMessage("a perceiving polliwog", /*german*/"eine wahrnehmende Kaulquappe", /*french*/"un amphibien") + // /*spanish*/un variopinto batracio + }, + CustomMessage("Eyeball Frog", "Glotzfrosch", "Crapaud-qui-louche")); hintTextTable[RHT_EYEDROPS] = HintText(CustomMessage("the Eyedrops", /*german*/"Augentropfen", /*french*/"une phiole de Super-Gouttes"), // /*spanish*/las supergotas oculares @@ -463,8 +537,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a vision vial", /*german*/"eine Sichtphiole", /*french*/"une solution oculaire")}); - // /*spanish*/un remedio para la vista + CustomMessage("a vision vial", /*german*/"eine Sichtphiole", /*french*/"une solution oculaire") + // /*spanish*/un remedio para la vista + }, + CustomMessage("World's Finest Eyedrops", "Augentropfen", "Super Gouttes")); hintTextTable[RHT_CLAIM_CHECK] = HintText(CustomMessage("the Claim Check", /*german*/"ein Zertifikat", /*french*/"un Certificat"), // /*spanish*/el recibo @@ -472,8 +548,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a trade quest item", /*german*/"ein Handelsgegenstand", /*french*/"un objet de quête d'échanges") // /*spanish*/un objeto de una misión secundaria }, { - CustomMessage("a three day wait", /*german*/"eine dreitägige Erwartung", /*french*/"un rendez-vous dans trois jours")}); - // /*spanish*/unos tres días de espera + CustomMessage("a three day wait", /*german*/"eine dreitägige Erwartung", /*french*/"un rendez-vous dans trois jours") + }, + // /*spanish*/unos tres días de espera + CustomMessage("Claim Check", "Zertifikat", "Certificat")); hintTextTable[RHT_PROGRESSIVE_HOOKSHOT] = HintText(CustomMessage("a Hookshot", /*german*/"ein Fanghaken", /*french*/"un Grappin"), // /*spanish*/un gancho @@ -487,8 +565,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un recuerdo de Dampé CustomMessage("the Grapple Beam", /*german*/"der Grapple Beam", /*french*/"le rayon grippeur"), // /*spanish*/una garra metálica - CustomMessage("the BOING! chain", /*german*/"die BOING!-Kette", /*french*/"la chaîne de BOING!")}); - // /*spanish*/una cadena retráctil + CustomMessage("the BOING! chain", /*german*/"die BOING!-Kette", /*french*/"la chaîne de BOING!") + // /*spanish*/una cadena retráctil + }, + CustomMessage("Progressive Hookshot", "Fanghaken (prog.)", "Grappin (prog.)")); hintTextTable[RHT_PROGRESSIVE_STRENGTH] = HintText(CustomMessage("a Strength Upgrade", /*german*/"eine Kraftsteigerung", /*french*/"une Amélioration de Force"), // /*spanish*/un aumento de fuerza @@ -500,8 +580,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/unos poderosos guanteletes CustomMessage("metal mittens", /*german*/"Metall-Fäustlinge€", /*french*/"une paire de mitaines"), // /*spanish*/unas manoplas metálicas - CustomMessage("the heavy lifty", /*german*/"der Schwerlastheber", /*french*/"la puissance de dix hommes")}); - // /*spanish*/un levantamiento pesado + CustomMessage("the heavy lifty", /*german*/"der Schwerlastheber", /*french*/"la puissance de dix hommes") + // /*spanish*/un levantamiento pesado + }, + CustomMessage("Strength Upgrade", "Stärke (prog.)", "Amélioration de Force (prog.)")); hintTextTable[RHT_PROGRESSIVE_BOMB_BAG] = HintText(CustomMessage("a Bomb Bag", /*german*/"eine Bombentasche", /*french*/"un Sac de Bombes"), // /*spanish*/un saco de bombas @@ -513,8 +595,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an explosive container", /*german*/"ein Explosivbehälter", /*french*/"un porte-grenade"), // /*spanish*/un recipiente explosivo - CustomMessage("a blast bag", /*german*/"ein Dodongomagen", /*french*/"un estomac de Dodongo")}); - // /*spanish*/un zurrón de estallidos + CustomMessage("a blast bag", /*german*/"ein Dodongomagen", /*french*/"un estomac de Dodongo") + // /*spanish*/un zurrón de estallidos + }, + CustomMessage("Progressive Bomb Bag", "Bombentasche (prog.)", "Sac de Bombes (prog.)")); hintTextTable[RHT_PROGRESSIVE_BOW] = HintText(CustomMessage("a Fairy Bow", /*german*/"ein Feen-Bogen", /*french*/"l'Arc des Fées"), // /*spanish*/un arco de las hadas @@ -524,8 +608,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an archery enabler", /*german*/"ein Bogenschussermöglicher", /*french*/"un facilitateur de tir"), // /*spanish*/un tiro al blanco - CustomMessage("a danger dart launcher", /*german*/"ein Pfeilwerfer", /*french*/"un tire-fléchette")}); - // /*spanish*/un peligroso lanzadardos + CustomMessage("a danger dart launcher", /*german*/"ein Pfeilwerfer", /*french*/"un tire-fléchette") + // /*spanish*/un peligroso lanzadardos + }, + CustomMessage("Progressive Bow", "Bogen (prog.)", "Arc (prog.)")); hintTextTable[RHT_PROGRESSIVE_SLINGSHOT] = HintText(CustomMessage("a Slingshot", /*german*/"eine Feen-Schleuder", /*french*/"un Lance-Pierre"), // /*spanish*/una resortera de las hadas @@ -537,8 +623,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un lanzasemillas CustomMessage("a rubberband", /*german*/"ein Gummiband", /*french*/"un élastique"), // /*spanish*/un tirachinas - CustomMessage("a child's catapult", /*german*/"ein Kinderkatapult", /*french*/"un jouet d'enfant")}); + CustomMessage("a child's catapult", /*german*/"ein Kinderkatapult", /*french*/"un jouet d'enfant") // /*spanish*/una catapulta infantil + }, + CustomMessage("Progressive Slingshot", "Schleuder (prog.)", "Lance-Pierre (prog.)")); hintTextTable[RHT_PROGRESSIVE_WALLET] = HintText(CustomMessage("a Wallet", /*german*/"eine Geldbörse", /*french*/"une Bourse"), // /*spanish*/una bolsa de rupias @@ -550,8 +638,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una cartera de dinero CustomMessage("a gem purse", /*german*/"ein Edelsteinportemonnaie", /*french*/"une sacoche"), // /*spanish*/un zurrón de gemas - CustomMessage("a portable bank", /*german*/"eine tragbare Bank", /*french*/"une petite banque")}); - // /*spanish*/un banco portable + CustomMessage("a portable bank", /*german*/"eine tragbare Bank", /*french*/"une petite banque") + // /*spanish*/un banco portable + }, + CustomMessage("Progressive Wallet", "Geldbörse (prog.)", "Bourse (prog.)")); hintTextTable[RHT_PROGRESSIVE_SCALE] = HintText(CustomMessage("a Zora Scale", /*german*/"eine Zora-Schuppe", /*french*/"une Écaille Zora"), // /*spanish*/una escama Zora @@ -561,8 +651,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a deeper dive", /*german*/"eine Tauchblase", /*french*/"une bulle de plongée"), // /*spanish*/un profundo buceo - CustomMessage("a piece of Zora", /*german*/"ein Zora-Fragment", /*french*/"un morceau de Zora")}); - // /*spanish*/un fragmento de Zora + CustomMessage("a piece of Zora", /*german*/"ein Zora-Fragment", /*french*/"un morceau de Zora") + // /*spanish*/un fragmento de Zora + }, + CustomMessage("Progressive Scale", "Zora-Schuppe (prog.)", "Écaille (prog.)")); hintTextTable[RHT_PROGRESSIVE_NUT_UPGRADE] = HintText(CustomMessage("Deku Nut Capacity", /*german*/"Deku-Nuß-Kapazität", /*french*/"une Augmentation de Noix Mojo"), // /*spanish*/un aumento de nueces deku @@ -574,8 +666,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("more nuts", /*german*/"mehr Nüsse€", /*french*/"encore plus de noix"), // /*spanish*/más semillas de nogal - CustomMessage("flashbang storage", /*german*/"Blendgranatenvorrat", /*french*/"un sac à noix")}); - // /*spanish*/más frutos aturdidores + CustomMessage("flashbang storage", /*german*/"Blendgranatenvorrat", /*french*/"un sac à noix") + // /*spanish*/más frutos aturdidores + }, + CustomMessage("Progressive Nut Capacity", "Nuß-Kapazität (prog.)", "Capacité de Noix (prog.)")); hintTextTable[RHT_PROGRESSIVE_STICK_UPGRADE] = HintText(CustomMessage("Deku Stick Capacity", /*german*/"Deku-Stab-Kapazität", /*french*/"une augmentation de bâtons Mojo"), // /*spanish*/un aumento de palos deku @@ -585,8 +679,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("lumber racks", /*german*/"Holzgestelle€", /*french*/"un paquet de bois"), // /*spanish*/más bastones - CustomMessage("more flammable twigs", /*german*/"mehr entflammbare Zweige", /*french*/"beaucoup de branches")}); - // /*spanish*/más varas + CustomMessage("more flammable twigs", /*german*/"mehr entflammbare Zweige", /*french*/"beaucoup de branches") + // /*spanish*/más varas + }, + CustomMessage("Progressive Stick Capacity", "Stab-Kapazität (prog.)", "Capacité de Bâtons (prog.)")); hintTextTable[RHT_PROGRESSIVE_MAGIC_METER] = HintText(CustomMessage("a Magic Meter", /*german*/"Magische Kraft", /*french*/"une Jauge de Magie"), // /*spanish*/un aumento de poder mágico @@ -598,8 +694,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una maestría mística CustomMessage("pixie dust", /*german*/"Feenstaub", /*french*/"de la poudre de fée"), // /*spanish*/un polvo de hada - CustomMessage("a green rectangle", /*german*/"ein grünes Rechteck", /*french*/"un rectangle vert")}); - // /*spanish*/una verduzca barra + CustomMessage("a green rectangle", /*german*/"ein grünes Rechteck", /*french*/"un rectangle vert") + // /*spanish*/una verduzca barra + }, + CustomMessage("Progressive Magic Meter", "Magische Kraft (prog.)", "Jauge de Magie (prog.)")); hintTextTable[RHT_PROGRESSIVE_OCARINA] = HintText(CustomMessage("an Ocarina", /*german*/"eine Okarina", /*french*/"un ocarina"), // /*spanish*/una ocarina @@ -611,8 +709,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a flute", /*german*/"eine Flöte", /*french*/"un bec musical"), // /*spanish*/un utensilio musical - CustomMessage("a music maker", /*german*/"ein Musikmacher", /*french*/"un porteur de chansons")}); - // /*spanish*/un instrumento + CustomMessage("a music maker", /*german*/"ein Musikmacher", /*french*/"un porteur de chansons") + // /*spanish*/un instrumento + }, + CustomMessage("Progressive Ocarina", "Okarina (prog.)", "Ocarina (prog.)")); hintTextTable[RHT_PROGRESSIVE_BOMBCHUS] = HintText(CustomMessage("Bombchus", /*german*/"Krabbelminen€", /*french*/"un paquet de Missiles"), // /*spanish*/unos bombchus @@ -628,8 +728,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/unos explosivos ratoncitos CustomMessage("wall crawlers", /*german*/"Wandkrabbler€", /*french*/"un rapide grimpeur"), // /*spanish*/unos trepaparedes - CustomMessage("trail blazers", /*german*/"Vorreiter€", /*french*/"un zigzag éclatant")}); - // /*spanish*/unas ratas propulsadas + CustomMessage("trail blazers", /*german*/"Vorreiter€", /*french*/"un zigzag éclatant") + // /*spanish*/unas ratas propulsadas + }, + CustomMessage("Progressive Bombchu", "Krabbelminen (prog.)", "Missiles (prog.)")); hintTextTable[RHT_PROGRESSIVE_GORONSWORD] = HintText(CustomMessage("a Goron Sword", /*german*/"ein Goronen-Schwert", /*french*/"une épée Goron"), // /*spanish*/una espada goron @@ -639,8 +741,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a long blade", /*german*/"eine lange Klinge", /*french*/"une longue lame"), // /*spanish*/una gran hoja - CustomMessage("a Goron weapon", /*german*/"eine Goronenwaffe", /*french*/"une arme Goron")}); - // /*spanish*/un arma goron + CustomMessage("a Goron weapon", /*german*/"eine Goronenwaffe", /*french*/"une arme Goron") + // /*spanish*/un arma goron + }, + CustomMessage("Progressive Goron Sword", "Goronen-Schwert (prog.)", "Épée Goron (prog.)")); hintTextTable[RHT_EMPTY_BOTTLE] = HintText(CustomMessage("a bottle", /*german*/"eine leere Flasche", /*french*/"un flacon vide"), // /*spanish*/una botella @@ -652,8 +756,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un recipiente de cristal CustomMessage("an empty jar", /*german*/"ein leeres Gefäß", /*french*/"une jarre incassable"), // /*spanish*/un frasco vacío - CustomMessage("encased air", /*german*/"eingeschlossene Luft", /*french*/"un bocal d'air")}); - // /*spanish*/aire a presión + CustomMessage("encased air", /*german*/"eingeschlossene Luft", /*french*/"un bocal d'air") + // /*spanish*/aire a presión + }, + CustomMessage("Empty Bottle", "Leere Flasche", "Bouteille Vide")); hintTextTable[RHT_BOTTLE_WITH_MILK] = HintText(CustomMessage("a Milk Bottle", /*german*/"eine Flasche mit Milch", /*french*/"un flacon de lait"), // /*spanish*/una botella de leche @@ -665,8 +771,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una fuente de calcio CustomMessage("a white liquid", /*german*/"eine weiße Flüssigkeit", /*french*/"un liquide blanc"), // /*spanish*/una bebida nutritiva - CustomMessage("a baby's breakfast", /*german*/"ein Babyfrühstück", /*french*/"du jus pour bébé")}); - // /*spanish*/un trago para bebés + CustomMessage("a baby's breakfast", /*german*/"ein Babyfrühstück", /*french*/"du jus pour bébé") + // /*spanish*/un trago para bebés + }, + CustomMessage("Bottle with Milk", "Flasche (Milch)", "Bouteille avec du Lait")); hintTextTable[RHT_BOTTLE_WITH_RED_POTION] = HintText(CustomMessage("a Red Potion Bottle", /*german*/"eine Flasche mit rotem Elixier", /*french*/"un flacon de potion rouge"), // /*spanish*/una botella de poción roja @@ -676,8 +784,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a vitality vial", /*german*/"eine Vitalitätsphiole", /*french*/"un mélange de vitalité"), // /*spanish*/una pócima vitalicia - CustomMessage("a red liquid", /*german*/"eine rote Flüssigkeit", /*french*/"un liquide rouge")}); - // /*spanish*/un remedio rojizo + CustomMessage("a red liquid", /*german*/"eine rote Flüssigkeit", /*french*/"un liquide rouge") + // /*spanish*/un remedio rojizo + }, + CustomMessage("Bottle with Red Potion", "Flasche (rotes Elixier)", "Bouteille avec une Potion Rouge")); hintTextTable[RHT_BOTTLE_WITH_GREEN_POTION] = HintText(CustomMessage("a Green Potion Bottle", /*german*/"eine Flasche mit grünem Elixier", /*french*/"un flacon de potion verte"), // /*spanish*/una botella de poción verde @@ -687,8 +797,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a magic mixture", /*german*/"eine magische Mixtur", /*french*/"une réserve magique"), // /*spanish*/un potingue mágico - CustomMessage("a green liquid", /*german*/"eine grüne Flüssigkeit", /*french*/"un liquide vert")}); - // /*spanish*/un remedio verduzco + CustomMessage("a green liquid", /*german*/"eine grüne Flüssigkeit", /*french*/"un liquide vert") + // /*spanish*/un remedio verduzco + }, + CustomMessage("Bottle with Green Potion", "Flasche (Grünes Elixier)", "Bouteille avec une Potion Verte")); hintTextTable[RHT_BOTTLE_WITH_BLUE_POTION] = HintText(CustomMessage("a Blue Potion Bottle", /*german*/"eine Flasche mit blauem Elixier", /*french*/"un flacon de potion bleue"), // /*spanish*/una botella de poción azul @@ -698,8 +810,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an ailment antidote", /*german*/"ein Allheilmittel", /*french*/"l'élixir ultime"), // /*spanish*/un antídoto para el dolor - CustomMessage("a blue liquid", /*german*/"eine blaue Flüssigkeit", /*french*/"un liquide bleu")}); - // /*spanish*/un remedio índigo + CustomMessage("a blue liquid", /*german*/"Flasche (Blaues Elixier)", /*french*/"un liquide bleu") + // /*spanish*/un remedio índigo + }, + CustomMessage("Bottle with Blue Potion", "Flasche mit blauem Elixier", "Bouteille avec une Potion Bleue")); hintTextTable[RHT_BOTTLE_WITH_FAIRY] = HintText(CustomMessage("a Fairy Bottle", /*german*/"eine Flasche mit Fee", /*french*/"une fée en flacon"), // /*spanish*/un hada en una botella @@ -711,8 +825,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un hada atrapada CustomMessage("an extra life", /*german*/"ein Extraleben", /*french*/"une vie de rechange"), // /*spanish*/una oportunidad más - CustomMessage("Navi's cousin", /*german*/"Navis Cousine", /*french*/"le cousin de Navi")}); - // /*spanish*/una prima de Navi + CustomMessage("Navi's cousin", /*german*/"Navis Cousine", /*french*/"le cousin de Navi") + // /*spanish*/una prima de Navi + }, + CustomMessage("Bottle with Fairy", "Flasche (Fee)", "Bouteille avec une Fée")); hintTextTable[RHT_BOTTLE_WITH_FISH] = HintText(CustomMessage("a Fish Bottle", /*german*/"eine Flasche mit Fisch", /*french*/"un poisson en flacon"), // /*spanish*/un pez en una botella @@ -722,8 +838,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an aquarium", /*german*/"ein Aquarium", /*french*/"un aquarium"), // /*spanish*/un escamado ser - CustomMessage("a deity's snack", /*german*/"ein göttlicher Snack", /*french*/"le repas d'un dieu marin")}); - // /*spanish*/un tentempié de cierta deidad + CustomMessage("a deity's snack", /*german*/"ein göttlicher Snack", /*french*/"le repas d'un dieu marin") + // /*spanish*/un tentempié de cierta deidad + }, + CustomMessage("Bottle with Fish", "Flasche (Fisch)", "Bouteille avec un Poisson")); hintTextTable[RHT_BOTTLE_WITH_BLUE_FIRE] = HintText(CustomMessage("a Blue Fire Bottle", /*german*/"eine Flasche mit blauem Feuer", /*french*/"une flamme bleue en flacon"), // /*spanish*/una botella de fuego azul @@ -733,8 +851,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a conflagration canteen", /*german*/"eine Brandfeldflasche", /*french*/"une mystérieuse flamme"), // /*spanish*/un incendio retenido - CustomMessage("an icemelt jar", /*german*/"ein eisschmelzendes Gefäß", /*french*/"un brasier glacial")}); - // /*spanish*/unas brasas enfrascadas + CustomMessage("an icemelt jar", /*german*/"ein eisschmelzendes Gefäß", /*french*/"un brasier glacial") + // /*spanish*/unas brasas enfrascadas + }, + CustomMessage("Bottle with Blue Fire", "Flasche (Blaues Feuer)", "Bouteille avec une Flamme Bleue")); hintTextTable[RHT_BOTTLE_WITH_BUGS] = HintText(CustomMessage("a Bug Bottle", /*german*/"eine Flasche mit Käfern", /*french*/"un insecte en flacon"), // /*spanish*/unos insectos en una botella @@ -744,8 +864,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an insectarium", /*german*/"ein Insektarium", /*french*/"un insectarium"), // /*spanish*/unos invertebrados seres - CustomMessage("Skulltula finders", /*german*/"Skulltula-Finder", /*french*/"une poignée de trouve-Skulltula")}); - // /*spanish*/unos rastreadores de skulltulas + CustomMessage("Skulltula finders", /*german*/"Skulltula-Finder", /*french*/"une poignée de trouve-Skulltula") + // /*spanish*/unos rastreadores de skulltulas + }, + CustomMessage("Bottle with Bugs", "Flasche (Käfer)", "Bouteille avec des Insectes")); hintTextTable[RHT_BOTTLE_WITH_POE] = HintText(CustomMessage("a Poe Bottle", /*german*/"eine Flasche mit Irrlicht", /*french*/"un Esprit en flacon"), // /*spanish*/un Poe en una botella @@ -755,8 +877,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a spooky ghost", /*german*/"ein gruseliger Geist", /*french*/"un effroyable fantôme"), // /*spanish*/un espantoso espectro - CustomMessage("a face in the jar", /*german*/"ein Gesicht im Gefäß", /*french*/"un visage dans un bocal")}); - // /*spanish*/una expresión enfrascada + CustomMessage("a face in the jar", /*german*/"ein Gesicht im Gefäß", /*french*/"un visage dans un bocal") + // /*spanish*/una expresión enfrascada + }, + CustomMessage("Bottle with Poe", "Flasche (Irrlicht)", "Bouteille avec un Esprit")); hintTextTable[RHT_BOTTLE_WITH_BIG_POE] = HintText(CustomMessage("a Big Poe Bottle", /*german*/"eine Flasche mit Nachtschwärmer", /*french*/"une Ame en flacon"), // /*spanish*/un Gran Poe en una botella @@ -766,8 +890,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("the spookiest ghost", /*german*/"der gruseligste Geist", /*french*/"un épouvantable spectre"), // /*spanish*/el espectro más espeluznante - CustomMessage("a sidequest spirit", /*german*/"ein Nebenmissionsgeist", /*french*/"un précieux esprit")}); - // /*spanish*/un buen valorado espíritu + CustomMessage("a sidequest spirit", /*german*/"ein Nebenmissionsgeist", /*french*/"un précieux esprit") + // /*spanish*/un buen valorado espíritu + }, + CustomMessage("Bottle with Big Poe", "Flasche (Nachtschwärmer)", "Bouteille avec une Âme")); hintTextTable[RHT_RUTOS_LETTER] = HintText(CustomMessage("Ruto's Letter", /*german*/"Rutos Brief", /*french*/"la lettre de Ruto"), // /*spanish*/la carta de Ruto @@ -781,8 +907,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un escrito mweep CustomMessage("an SOS call", /*german*/"ein Notrufsignal", /*french*/"un signal SOS"), // /*spanish*/una nota de socorro - CustomMessage("a fishy stationery", /*german*/"fischiges Briefpapier", /*french*/"un papier mouillé")}); - // /*spanish*/un mensaje de ayuda + CustomMessage("a fishy stationery", /*german*/"fischiges Briefpapier", /*french*/"un papier mouillé") + // /*spanish*/un mensaje de ayuda + }, + CustomMessage("Bottle with Ruto's Letter", "Flasche (Rutos Brief)", "Bouteille avec la Lettre de Ruto")); hintTextTable[RHT_ZELDAS_LULLABY] = HintText(CustomMessage("Zelda's Lullaby", /*german*/"Zeldas Wiegenlied", /*french*/"la berceuse de Zelda"), // /*spanish*/la Nana de Zelda @@ -794,8 +922,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a song of royal slumber", /*german*/"ein königliches Schlaflied", /*french*/"une chanson royale"), // /*spanish*/la canción real - CustomMessage("a triforce tune", /*german*/"die Melodie des Triforce", /*french*/"la musique sacrée")}); - // /*spanish*/la melodía de la trifuerza + CustomMessage("a triforce tune", /*german*/"die Melodie des Triforce", /*french*/"la musique sacrée") + // /*spanish*/la melodía de la trifuerza + }, + CustomMessage("Zelda's Lullaby", "Zeldas Wiegenlied", "Berceuse de Zelda")); hintTextTable[RHT_EPONAS_SONG] = HintText(CustomMessage("Epona's Song", /*german*/"Eponas Lied", /*french*/"le chant d'Epona"), // /*spanish*/la Canción de Epona @@ -807,8 +937,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una copla ecuestre CustomMessage("Malon's melody", /*german*/"Malons Melodie", /*french*/"la mélodie des vaches"), // /*spanish*/la sonata de Malon - CustomMessage("a ranch song", /*german*/"ein Lied des Ackers", /*french*/"le chant des champs")}); - // /*spanish*/un canto rupestre + CustomMessage("a ranch song", /*german*/"ein Lied des Ackers", /*french*/"le chant des champs") + // /*spanish*/un canto rupestre + }, + CustomMessage("Epona's Song", "Eponas Lied", "Chant d'Epona")); hintTextTable[RHT_SARIAS_SONG] = HintText(CustomMessage("Saria's Song", /*german*/"Salias Lied", /*french*/"le chant de Saria"), // /*spanish*/la Canción de Saria @@ -820,8 +952,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a song of dancing Gorons", /*german*/"ein Lied der tanzenden Goronen", /*french*/"une chanson danceuse"), // /*spanish*/un pegadizo tono goron - CustomMessage("Saria's phone number", /*german*/"Salias Telefonnummer", /*french*/"le téléphone d'une amie")}); - // /*spanish*/una consulta de asistencia + CustomMessage("Saria's phone number", /*german*/"Salias Telefonnummer", /*french*/"le téléphone d'une amie") + // /*spanish*/una consulta de asistencia + }, + CustomMessage("Saria's Song", "Salias Lied", "Chant de Saria")); hintTextTable[RHT_SUNS_SONG] = HintText(CustomMessage("the Sun's Song", /*german*/"die Hymne der Sonne", /*french*/"le chant du soleil"), // /*spanish*/la Canción del Sol @@ -835,8 +969,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un día soleado CustomMessage("the ReDead's bane", /*german*/"das Verderben der Remorts", /*french*/"le fléau des Éffrois"), // /*spanish*/la destructora de Redeads - CustomMessage("the Gibdo's bane", /*german*/"das Verderben der Gibdos", /*french*/"le fléau des Gibdo")}); + CustomMessage("the Gibdo's bane", /*german*/"das Verderben der Gibdos", /*french*/"le fléau des Gibdo") // /*spanish*/la destructora de Gibdos + }, + CustomMessage("Sun's Song", "Hymne der Sonne", "Chant du Soleil")); hintTextTable[RHT_SONG_OF_TIME] = HintText(CustomMessage("the Song of Time", /*german*/"die Hymne der Zeit", /*french*/"le chant du temps"), // /*spanish*/la Canción del tiempo @@ -846,8 +982,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a song 7 years long", /*german*/"ein sieben Jahre langes Lied", /*french*/"le flot du temps"), // /*spanish*/la setenada canción - CustomMessage("the tune of ages", /*german*/"die Melodie der Äonen", /*french*/"le Chant des Âges")}); - // /*spanish*/la melodía eónica + CustomMessage("the tune of ages", /*german*/"die Melodie der Äonen", /*french*/"le Chant des Âges") + // /*spanish*/la melodía eónica + }, + CustomMessage("Song of Time", "Hymne der Zeit", "Chant du Temps")); hintTextTable[RHT_SONG_OF_STORMS] = HintText(CustomMessage("the Song of Storms", /*german*/"die Hymne des Sturms", /*french*/"le chant des tempêtes"), // /*spanish*/la Canción de la Tormenta @@ -859,8 +997,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/la danza de la lluvia CustomMessage("a thunderstorm tune", /*german*/"die Melodie des Gewitters", /*french*/"une hymne foudroyante"), // /*spanish*/una sonata tormentosa - CustomMessage("windmill acceleration", /*german*/"eine Windmühlenbeschleunigung", /*french*/"l'accélérateur de moulins")}); + CustomMessage("windmill acceleration", /*german*/"eine Windmühlenbeschleunigung", /*french*/"l'accélérateur de moulins") + }, // /*spanish*/el arranque de molinos + CustomMessage("Song of Storms", "Hymne des Sturms", "Chant des Tempêtes")); hintTextTable[RHT_MINUET_OF_FOREST] = HintText(CustomMessage("the Minuet of Forest", /*german*/"das Menuett des Waldes", /*french*/"le menuet de la forêt"), // /*spanish*/el Minueto del bosque @@ -872,8 +1012,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/la canción de las copas CustomMessage("an arboreal anthem", /*german*/"eine baumartige Hymne", /*french*/"l'hymne sylvestre"), // /*spanish*/el himno forestal - CustomMessage("a green spark trail", /*german*/"grüne Funken€", /*french*/"une comète verte")}); + CustomMessage("a green spark trail", /*german*/"grüne Funken€", /*french*/"une comète verte") + }, // /*spanish*/el sendero esmeralda + CustomMessage("Minuet of Forest", "Menuett des Waldes", "Menuet des Bois")); hintTextTable[RHT_BOLERO_OF_FIRE] = HintText(CustomMessage("the Bolero of Fire", /*german*/"der Bolero des Feuers", /*french*/"le boléro du feu"), // /*spanish*/el Bolero del fuego @@ -885,8 +1027,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/la canción de la lava CustomMessage("a red spark trail", /*german*/"rote Funken€", /*french*/"une comète rouge"), // /*spanish*/el sendero rubí - CustomMessage("a volcanic verse", /*german*/"ein vulkanischer Vers", /*french*/"le souffle du volcan")}); + CustomMessage("a volcanic verse", /*german*/"ein vulkanischer Vers", /*french*/"le souffle du volcan") // /*spanish*/el verso volcánico + }, + CustomMessage("Bolero of Fire", "Bolero des Feuers", "Boléro du Feu")); hintTextTable[RHT_SERENADE_OF_WATER] = HintText(CustomMessage("the Serenade of Water", /*german*/"die Serenade des Wassers", /*french*/"la sérénade de l'eau"), // /*spanish*/la Serenata del agua @@ -898,8 +1042,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/la canción del estanque CustomMessage("a blue spark trail", /*german*/"blaue Funken€", /*french*/"une comète bleue"), // /*spanish*/el sendero zafiro - CustomMessage("the lake's lyric", /*german*/"die Lyrik des Sees", /*french*/"la voix du lac")}); - // /*spanish*/la letra del lago + CustomMessage("the lake's lyric", /*german*/"die Lyrik des Sees", /*french*/"la voix du lac") + // /*spanish*/la letra del lago + }, + CustomMessage("Serenade of Water", "Serenade des Wassers", "Sérénade de l'Eau")); hintTextTable[RHT_REQUIEM_OF_SPIRIT] = HintText(CustomMessage("the Requiem of Spirit", /*german*/"das Requiem der Geister", /*french*/"le requiem des esprits"), // /*spanish*/el Réquiem del espíritu @@ -911,8 +1057,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/la canción de la gran estatua CustomMessage("an orange spark trail", /*german*/"orangene Funken€", /*french*/"une comète orange"), // /*spanish*/el sendero ámbar - CustomMessage("the desert ditty", /*german*/"der Wind der Wüste", /*french*/"le vent du désert")}); - // /*spanish*/la estrofa del desierto + CustomMessage("the desert ditty", /*german*/"der Wind der Wüste", /*french*/"le vent du désert") + // /*spanish*/la estrofa del desierto + }, + CustomMessage("Requiem of Spirit", "Requiem der Geister", "Requiem des Esprits")); hintTextTable[RHT_NOCTURNE_OF_SHADOW] = HintText(CustomMessage("the Nocturne of Shadow", /*german*/"die Nocturne des Schattens", /*french*/"le nocturne de l'ombre"), // /*spanish*/el Nocturno de la sombra @@ -926,8 +1074,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una honra fúnebre CustomMessage("a haunted hymn", /*german*/"eine heimgesuchte Hymne", /*french*/"une chanson lugubre"), // /*spanish*/una estrofa encantada - CustomMessage("a purple spark trail", /*german*/"violette Funken€", /*french*/"une comète mauve")}); + CustomMessage("a purple spark trail", /*german*/"violette Funken€", /*french*/"une comète mauve") // /*spanish*/el sendero malva + }, + CustomMessage("Nocturne of Shadow", "Nocturne des Schattens", "Nocturne de l'Ombre")); hintTextTable[RHT_PRELUDE_OF_LIGHT] = HintText(CustomMessage("the Prelude of Light", /*german*/"die Kantate des Lichts", /*french*/"le prélude de la lumière"), // /*spanish*/el Preludio de la luz @@ -939,8 +1089,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/la melodía refulgente CustomMessage("a yellow spark trail", /*german*/"gelbe Funken€", /*french*/"une comète jaune"), // /*spanish*/el sendero resplandeciente - CustomMessage("the temple traveler", /*german*/"ein Tempelreisender", /*french*/"un chant de sanctuaire")}); + CustomMessage("the temple traveler", /*german*/"ein Tempelreisender", /*french*/"un chant de sanctuaire") // /*spanish*/la ruta del templo + }, + CustomMessage("Prelude of Light", "Kantate des Lichts", "Prélude de la Lumière")); hintTextTable[RHT_DEKU_TREE_MAP] = HintText(CustomMessage("the Deku Tree Map", /*german*/"die Labyrinth-Karte des Deku-Baumes", /*french*/"la carte de l'Arbre Mojo"), // /*spanish*/el mapa del Gran Árbol Deku @@ -950,8 +1102,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a mossy atlas", /*german*/"ein moosiger Atlas", /*french*/"un atlas boisé"), // /*spanish*/un atlas musgoso - CustomMessage("some mossy blueprints", /*german*/"moosige Baupläne€", /*french*/"un plan boisé")}); + CustomMessage("some mossy blueprints", /*german*/"moosige Baupläne€", /*french*/"un plan boisé") // /*spanish*/unos planos musgosos + }, + CustomMessage("Great Deku Tree Map", "Karte (Deku-Baum)", "Carte de l'Arbre Mojo")); hintTextTable[RHT_DODONGOS_CAVERN_MAP] = HintText(CustomMessage("the Dodongo's Cavern Map", /*german*/"die Labyrinth-Karte von Dodongos Höhle", /*french*/"la carte de la Caverne Dodongo"), // /*spanish*/el mapa de la Cueva de los Dodongos @@ -961,8 +1115,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a rocky atlas", /*german*/"eine felsiger Atlas", /*french*/"un atlas rocheux"), // /*spanish*/un atlas rocoso - CustomMessage("some rocky blueprints", /*german*/"felsige Baupläne€", /*french*/"un plan rocheux")}); + CustomMessage("some rocky blueprints", /*german*/"felsige Baupläne€", /*french*/"un plan rocheux") // /*spanish*/unos planos rocosos + }, + CustomMessage("Dodongo's Cavern Map", "Karte (Dodongos Höhle)", "Carte de la Caverne Dodongo")); hintTextTable[RHT_JABU_JABUS_BELLY_MAP] = HintText(CustomMessage("the Jabu-Jabu's Belly Map", /*german*/"die Labyrinth-Karte von Jabu-Jabus Bauch", /*french*/"la carte de Jabu-Jabu"), // /*spanish*/el mapa de la Tripa de Jabu-Jabu @@ -972,8 +1128,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a fishy atlas", /*german*/"ein fischiger Atlas", /*french*/"un atlas digéré"), // /*spanish*/un atlas digesto - CustomMessage("some fishy blueprints", /*german*/"fischige Baupläne€", /*french*/"un plan digéré")}); + CustomMessage("some fishy blueprints", /*german*/"fischige Baupläne€", /*french*/"un plan digéré") // /*spanish*/unos planos digestos + }, + CustomMessage("Jabu-Jabu's Belly Map", "Karte (Jabu-Jabus Bauch)", "Carte du Ventre de Jabu-Jabu")); hintTextTable[RHT_FOREST_TEMPLE_MAP] = HintText(CustomMessage("the Forest Temple Map", /*german*/"die Labyrinth-Karte des Waldtempels", /*french*/"la carte du Temple de la Forêt"), // /*spanish*/el mapa del Templo del Bosque @@ -983,8 +1141,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a sylvan atlas", /*german*/"ein waldiger Atlas", /*french*/"un atlas sylvestre"), // /*spanish*/un atlas enselvado - CustomMessage("some sylvan blueprints", /*german*/"waldige Baupläne€", /*french*/"un plan sylvestre")}); + CustomMessage("some sylvan blueprints", /*german*/"waldige Baupläne€", /*french*/"un plan sylvestre") // /*spanish*/unos planos enselvados + }, + CustomMessage("Forest Temple Map", "Karte (Waldtempel)", "Carte du Temple de la Forêt")); hintTextTable[RHT_FIRE_TEMPLE_MAP] = HintText(CustomMessage("the Fire Temple Map", /*german*/"die Labyrinth-Karte des Feuertempels", /*french*/"la carte du Temple du Feu"), // /*spanish*/el mapa del Templo del Fuego @@ -994,8 +1154,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a molten atlas", /*german*/"ein geschmolzener Atlas", /*french*/"un atlas fondu"), // /*spanish*/un atlas fundido - CustomMessage("some molten blueprints", /*german*/"geschmolzene Baupläne€", /*french*/"un plan fondu")}); + CustomMessage("some molten blueprints", /*german*/"geschmolzene Baupläne€", /*french*/"un plan fondu") // /*spanish*/unos planos fundidos + }, + CustomMessage("Fire Temple Map", "Karte (Feuertempel)", "Carte due Temple de Feu")); hintTextTable[RHT_WATER_TEMPLE_MAP] = HintText(CustomMessage("the Water Temple Map", /*german*/"die Labyrinth-Karte des Wassertempels", /*french*/"la carte du Temple de l'Eau"), // /*spanish*/el mapa del Templo del Agua @@ -1005,8 +1167,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a wet atlas", /*german*/"ein nasser Atlas", /*french*/"un atlas humide"), // /*spanish*/un atlas mojado - CustomMessage("some wet blueprints", /*german*/"nasse Baupläne€", /*french*/"un plan humide")}); + CustomMessage("some wet blueprints", /*german*/"nasse Baupläne€", /*french*/"un plan humide") // /*spanish*/unos planos mojados + }, + CustomMessage("Water Temple Map", "Karte (Wassertempel)", "Carte du Temple de l'Eau")); hintTextTable[RHT_SPIRIT_TEMPLE_MAP] = HintText(CustomMessage("the Spirit Temple Map", /*german*/"die Labyrinth-Karte des Geistertempels", /*french*/"la carte du Temple de l'Esprit"), // /*spanish*/el mapa del Templo del Espíritu @@ -1016,8 +1180,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a sandy atlas", /*german*/"ein sandiger Atlas", /*french*/"un atlas sableux"), // /*spanish*/un atlas arenoso - CustomMessage("some sandy blueprints", /*german*/"sandige Baupläne€", /*french*/"un plan sableux")}); + CustomMessage("some sandy blueprints", /*german*/"sandige Baupläne€", /*french*/"un plan sableux") // /*spanish*/unos planos arenosos + }, + CustomMessage("Spirit Temple Map", "Karte (Geistertempel)", "Carte due Temple de l'Esprit")); hintTextTable[RHT_SHADOW_TEMPLE_MAP] = HintText(CustomMessage("the Shadow Temple Map", /*german*/"die Labyrinth-Karte des Schattentempels", /*french*/"la carte du Temple de l'Ombre"), // /*spanish*/el mapa del Templo de las Sombras @@ -1027,19 +1193,23 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a creepy atlas", /*german*/"eine gruseliger Atlas", /*french*/"un atlas sinistre"), // /*spanish*/un atlas siniestra - CustomMessage("some creepy blueprints", /*german*/"gruselige Baupläne€", /*french*/"un plan sinistre")}); + CustomMessage("some creepy blueprints", /*german*/"gruselige Baupläne€", /*french*/"un plan sinistre") // /*spanish*/unos planos siniestras + }, + CustomMessage("Shadow Temple Map", "Karte (Schattentempel)", "Carte du Temple de l'Ombre")); - hintTextTable[RHT_BOTTOM_OF_THE_WELL_MAP] = HintText(CustomMessage("the Bottom of the Well Map", /*german*/"die Labyrinth-Karte vom Grund des Brunnens", /*french*/"la carte du fond du Puits"), - // /*spanish*/el mapa del Fondo del pozo - { - CustomMessage("a dungeon map", /*german*/"eine Labyrinth-Karte", /*french*/"une carte") - // /*spanish*/un mapa - }, { - CustomMessage("a moldy atlas", /*german*/"ein schimmeliger Atlas", /*french*/"un atlas moisi"), - // /*spanish*/un atlas mohoso - CustomMessage("some moldy blueprints", /*german*/"schimmelige Baupläne€", /*french*/"un plan moisi")}); - // /*spanish*/unos planos mohosos + hintTextTable[RHT_BOTW_MAP] = HintText(CustomMessage("the Bottom of the Well Map", /*german*/"die Labyrinth-Karte vom Grund des Brunnens", /*french*/"la carte du fond du Puits"), + // /*spanish*/el mapa del Fondo del pozo + { + CustomMessage("a dungeon map", /*german*/"eine Labyrinth-Karte", /*french*/"une carte") + // /*spanish*/un mapa + }, { + CustomMessage("a moldy atlas", /*german*/"ein schimmeliger Atlas", /*french*/"un atlas moisi"), + // /*spanish*/un atlas mohoso + CustomMessage("some moldy blueprints", /*german*/"schimmelige Baupläne€", /*french*/"un plan moisi") + // /*spanish*/unos planos mohosos + }, + CustomMessage("Bottom of the Well Map", "Karte (Grund des Brunnens)", "Carte du Puits")); hintTextTable[RHT_ICE_CAVERN_MAP] = HintText(CustomMessage("the Ice Cavern Map", /*german*/"die Labyrinth-Karte der Eishöhle", /*french*/"la carte de la Caverne Polaire"), // /*spanish*/el mapa de la Caverna de hielo @@ -1049,8 +1219,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a polar atlas", /*german*/"ein polarer Atlas", /*french*/"un atlas polaire"), // /*spanish*/un atlas polar - CustomMessage("some polar blueprints", /*german*/"polare Baupläne€", /*french*/"un plan polaire")}); + CustomMessage("some polar blueprints", /*german*/"polare Baupläne€", /*french*/"un plan polaire") // /*spanish*/unos planos polars + }, + CustomMessage("Ice Cavern Map", "Karte (Eishöhle)", "Carte de la Caverne Polaire")); hintTextTable[RHT_DEKU_TREE_COMPASS] = HintText(CustomMessage("the Deku Tree Compass", /*german*/"der Kompaß des Deku-Baumes", /*french*/"la boussole de l'Arbre Mojo"), // /*spanish*/la brújula del Gran Árbol Deku @@ -1060,8 +1232,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a mossy treasure tracker", /*german*/"ein moosiger Schatzfinder", /*french*/"un cherche-trésor boisé"), // /*spanish*/un zahorí musgoso - CustomMessage("a mossy magnetic needle", /*german*/"eine moosige Magnetnadel", /*french*/"une aimant boisée")}); + CustomMessage("a mossy magnetic needle", /*german*/"eine moosige Magnetnadel", /*french*/"une aimant boisée") // /*spanish*/un imán musgoso + }, + CustomMessage("Great Deku Tree Compass", "Kompaß (Deku-Baum)", "Boussole de l'Arbre Mojo")); hintTextTable[RHT_DODONGOS_CAVERN_COMPASS] = HintText(CustomMessage("the Dodongo's Cavern Compass", /*german*/"der Kompaß von Dodongos Höhle", /*french*/"la boussole de la Caverne Dodongo"), // /*spanish*/la brújula de la Cueva de los Dodongos @@ -1071,8 +1245,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a rocky treasure tracker", /*german*/"ein felsiger Schatzfinder", /*french*/"un cherche-trésor rocheux"), // /*spanish*/un zahorí rocoso - CustomMessage("a rocky magnetic needle", /*german*/"eine felsige Magnetnadel", /*french*/"une aimant rocheux")}); + CustomMessage("a rocky magnetic needle", /*german*/"eine felsige Magnetnadel", /*french*/"une aimant rocheux") // /*spanish*/un imán rocoso + }, + CustomMessage("Dodongo's Cavern Compass", "Kompaß (Dodongos Höhle)", "Boussole de la Caverne Dodongo")); hintTextTable[RHT_JABU_JABUS_BELLY_COMPASS] = HintText(CustomMessage("the Jabu-Jabu's Belly Compass", /*german*/"der Kompaß von Jabu-Jabus Bauch", /*french*/"la boussole de Jabu-Jabu"), // /*spanish*/la brújula de la Tripa de Jabu-Jabu @@ -1082,8 +1258,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a fishy treasure tracker", /*german*/"ein fischiger Schatzfinder", /*french*/"un cherche-trésor digéré"), // /*spanish*/un zahorí digesto - CustomMessage("a fishy magnetic needle", /*german*/"eine fischige Magnetnadel", /*french*/"une aimant digéré")}); - // /*spanish*/un imán digesto + CustomMessage("a fishy magnetic needle", /*german*/"eine fischige Magnetnadel", /*french*/"une aimant digéré") + // /*spanish*/un imán digesto + }, + CustomMessage("Jabu-Jabu's Belly Compass", "Kompaß (Jabu-Jabus Bauch)", "Boussole du Ventre de Jabu-Jabu")); hintTextTable[RHT_FOREST_TEMPLE_COMPASS] = HintText(CustomMessage("the Forest Temple Compass", /*german*/"der Kompaß des Waldtempels", /*french*/"la boussole du Temple de la Forêt"), // /*spanish*/la brújula del Templo del Bosque @@ -1093,8 +1271,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a sylvan treasure tracker", /*german*/"ein waldiger Schatzfinder", /*french*/"un cherche-trésor sylvestre"), // /*spanish*/un zahorí enselvado - CustomMessage("a sylvan magnetic needle", /*german*/"eine waldige Magnetnadel", /*french*/"une aimant sylvestre")}); + CustomMessage("a sylvan magnetic needle", /*german*/"eine waldige Magnetnadel", /*french*/"une aimant sylvestre") // /*spanish*/un imán enselvado + }, + CustomMessage("Forest Temple Compass", "Kompaß des Waldtempels", "Boussole du Temple de la Forêt")); hintTextTable[RHT_FIRE_TEMPLE_COMPASS] = HintText(CustomMessage("the Fire Temple Compass", /*german*/"der Kompaß des Feuertempels", /*french*/"la boussole du Temple du Feu"), // /*spanish*/la brújula del Templo del Fuego @@ -1104,8 +1284,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a molten treasure tracker", /*german*/"ein geschmolzener Schatzfinder", /*french*/"un cherche-trésor fondu"), // /*spanish*/un zahorí fundido - CustomMessage("a molten magnetic needle", /*german*/"eine geschmolzene Magnetnadel", /*french*/"une aimant fondu")}); - // /*spanish*/un imán fundido + CustomMessage("a molten magnetic needle", /*german*/"eine geschmolzene Magnetnadel", /*french*/"une aimant fondu") + // /*spanish*/un imán fundido + }, + CustomMessage("Fire Temple Compass", "Kompaß (Geistertempel)", "Boussole du Temple du Feu")); hintTextTable[RHT_WATER_TEMPLE_COMPASS] = HintText(CustomMessage("the Water Temple Compass", /*german*/"der Kompaß des Wassertempels", /*french*/"la boussole du Temple de l'Eau"), // /*spanish*/la brújula del Templo del Agua @@ -1115,8 +1297,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a wet treasure tracker", /*german*/"ein nasser Schatzfinder", /*french*/"un cherche-trésor humide"), // /*spanish*/un zahorí mojado - CustomMessage("a wet magnetic needle", /*german*/"eine nasse Magnetnadel", /*french*/"une aimant humide")}); + CustomMessage("a wet magnetic needle", /*german*/"eine nasse Magnetnadel", /*french*/"une aimant humide") // /*spanish*/un imán mojado + }, + CustomMessage("Water Temple Compass", "Kompaß (Wassertempel)", "Boussole du Temple de l'Eau")); hintTextTable[RHT_SPIRIT_TEMPLE_COMPASS] = HintText(CustomMessage("the Spirit Temple Compass", /*german*/"der Kompaß des Geistertempels", /*french*/"la boussole du Temple de l'Esprit"), // /*spanish*/la brújula del Templo del Espíritu @@ -1126,8 +1310,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a sandy treasure tracker", /*german*/"ein sandiger Schatzfinder", /*french*/"un cherche-trésor sableux"), // /*spanish*/un zahorí arenoso - CustomMessage("a sandy magnetic needle", /*german*/"eine sandige Magnetnadel", /*french*/"une aimant sableux")}); + CustomMessage("a sandy magnetic needle", /*german*/"eine sandige Magnetnadel", /*french*/"une aimant sableux") // /*spanish*/un imán arenoso + }, + CustomMessage("Spirit Temple Compass", "Kompaß (Geistertempel)", "Boussole due Temple de l'Esprit")); hintTextTable[RHT_SHADOW_TEMPLE_COMPASS] = HintText(CustomMessage("the Shadow Temple Compass", /*german*/"der Kompaß des Schattentempels", /*french*/"la boussole du Temple de l'Ombre"), // /*spanish*/la brújula del Templo de las Sombras @@ -1137,19 +1323,23 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a creepy treasure tracker", /*german*/"ein gruseliger Schatzfinder", /*french*/"un cherche-trésor sinistre"), // /*spanish*/un zahorí siniestra - CustomMessage("a creepy magnetic needle", /*german*/"eine gruselige Magnetnadel", /*french*/"une aimant sinistre")}); + CustomMessage("a creepy magnetic needle", /*german*/"eine gruselige Magnetnadel", /*french*/"une aimant sinistre") // /*spanish*/un imán siniestra + }, + CustomMessage("Shadow Temple Compass", "Kompaß (Schattentempel)", "Boussole du Temple de l'Ombre")); - hintTextTable[RHT_BOTTOM_OF_THE_WELL_COMPASS] = HintText(CustomMessage("the Bottom of the Well Compass", /*german*/"der Kompaß vom Grund des Brunnens", /*french*/"la boussole du fond du Puits"), - // /*spanish*/la brújula del Fondo del pozo - { - CustomMessage("a compass", /*german*/"ein Kompaß", /*french*/"une boussole") - // /*spanish*/una brújula - }, { - CustomMessage("a dank treasure tracker", /*german*/"ein schimmeliger Schatzfinder", /*french*/"un cherche-trésor moisi"), - // /*spanish*/un zahorí mohoso - CustomMessage("a dank magnetic needle", /*german*/"eine schimmelige Magnetnadel", /*french*/"une aimant moisi")}); - // /*spanish*/un imán mohoso + hintTextTable[RHT_BOTW_COMPASS] = HintText(CustomMessage("the Bottom of the Well Compass", /*german*/"der Kompaß vom Grund des Brunnens", /*french*/"la boussole du fond du Puits"), + // /*spanish*/la brújula del Fondo del pozo + { + CustomMessage("a compass", /*german*/"ein Kompaß", /*french*/"une boussole") + // /*spanish*/una brújula + }, { + CustomMessage("a dank treasure tracker", /*german*/"ein schimmeliger Schatzfinder", /*french*/"un cherche-trésor moisi"), + // /*spanish*/un zahorí mohoso + CustomMessage("a dank magnetic needle", /*german*/"eine schimmelige Magnetnadel", /*french*/"une aimant moisi") + // /*spanish*/un imán mohoso + }, + CustomMessage("Bottom of the Well Compass", "Kompaß (Grund des Brunnens)", "Boussole du Puits")); hintTextTable[RHT_ICE_CAVERN_COMPASS] = HintText(CustomMessage("the Ice Cavern Compass", /*german*/"der Kompaß der Eishöhle", /*french*/"la Boussole de la Caverne Polaire"), // /*spanish*/la brújula de la Caverna de hielo @@ -1159,8 +1349,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a polar treasure tracker", /*german*/"ein polarer Schatzfinder", /*french*/"un cherche-trésor polaire"), // /*spanish*/un zahorí polar - CustomMessage("a polar magnetic needle", /*german*/"eine polare Magnetnadel", /*french*/"une aimant polaire")}); + CustomMessage("a polar magnetic needle", /*german*/"eine polare Magnetnadel", /*french*/"une aimant polaire") // /*spanish*/un imán polar + }, + CustomMessage("Ice Cavern Compass", "Kompaß (Eishöhle)", "Boussole de la Caverne Polaire")); hintTextTable[RHT_FOREST_TEMPLE_BOSS_KEY] = HintText(CustomMessage("the Forest Temple Boss Key", /*german*/"der Master-Schlüssel des Waldtempels", /*french*/"la Clé d'Or du Temple de la Forêt"), // /*spanish*/la gran llave del Templo del Bosque @@ -1170,8 +1362,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a sylvan master of unlocking", /*german*/"ein waldiger Meister der Entriegelung", /*french*/"un anti-grosse porte sylvestre"), // /*spanish*/la clave enselvada de un jefe - CustomMessage("a sylvan dungeon's master pass", /*german*/"ein waldiger Labyrinth-Meisterpass", /*french*/"une clé maléfique sylvestre")}); + CustomMessage("a sylvan dungeon's master pass", /*german*/"ein waldiger Labyrinth-Meisterpass", /*french*/"une clé maléfique sylvestre") // /*spanish*/el pase maestro enselvado + }, + CustomMessage("Forest Temple Boss Key", "Master-Schlüssel (Waldtempel)", "Clé d'Or du Temple de la Forêt")); hintTextTable[RHT_FIRE_TEMPLE_BOSS_KEY] = HintText(CustomMessage("the Fire Temple Boss Key", /*german*/"der Master-Schlüssel des Feuertempels", /*french*/"la Clé d'Or du Temple du Feu"), // /*spanish*/la gran llave del Templo del Fuego @@ -1181,8 +1375,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a molten master of unlocking", /*german*/"ein geschmolzener Meister der Entriegelung", /*french*/"un anti-grosse porte fondu"), // /*spanish*/la clave fundido de un jefe - CustomMessage("a molten dungeon's master pass", /*german*/"ein geschmolzener Labyrinth-Meisterpass", /*french*/"une clé maléfique fondu")}); - // /*spanish*/el pase maestro fundido + CustomMessage("a molten dungeon's master pass", /*german*/"ein geschmolzener Labyrinth-Meisterpass", /*french*/"une clé maléfique fondu") + // /*spanish*/el pase maestro fundido + }, + CustomMessage("Fire Temple Boss Key", "Master-Schlüssel (Feuertempel)", "Clé d'Or du Temple du Feu")); hintTextTable[RHT_WATER_TEMPLE_BOSS_KEY] = HintText(CustomMessage("the Water Temple Boss Key", /*german*/"der Master-Schlüssel des Wassertempels", /*french*/"la Clé d'Or du Temple de l'Eau"), // /*spanish*/la gran llave del Templo del Agua @@ -1192,8 +1388,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a wet master of unlocking", /*german*/"ein nasser Meister der Entriegelung", /*french*/"un anti-grosse porte humide"), // /*spanish*/la clave mojado de un jefe - CustomMessage("a wet dungeon's master pass", /*german*/"ein nasser Labyrinth-Meisterpass", /*french*/"une clé maléfique humide")}); + CustomMessage("a wet dungeon's master pass", /*german*/"ein nasser Labyrinth-Meisterpass", /*french*/"une clé maléfique humide") // /*spanish*/el pase maestro mojado + }, + CustomMessage("Water Temple Boss Key", "Master-Schlüssel (Wassertempel)", "Clé d'Or du Temple de l'Eau")); hintTextTable[RHT_SPIRIT_TEMPLE_BOSS_KEY] = HintText(CustomMessage("the Spirit Temple Boss Key", /*german*/"der Master-Schlüssel des Geistertempels", /*french*/"la Clé d'Or du Temple de l'Esprit"), // /*spanish*/la gran llave del Templo del Espíritu @@ -1203,8 +1401,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a sandy master of unlocking", /*german*/"ein sandiger Meister der Entriegelung", /*french*/"un anti-grosse porte sableux"), // /*spanish*/la clave arenoso de un jefe - CustomMessage("a sandy dungeon's master pass", /*german*/"ein sandiger Labyrinth-Meisterpass", /*french*/"une clé maléfique sableux")}); + CustomMessage("a sandy dungeon's master pass", /*german*/"ein sandiger Labyrinth-Meisterpass", /*french*/"une clé maléfique sableux") // /*spanish*/el pase maestro arenoso + }, + CustomMessage("Spirit Temple Boss Key", "Master-Schlüssel (Geistertempel)", "Clé d'Or du Temple de l'Esprit")); hintTextTable[RHT_SHADOW_TEMPLE_BOSS_KEY] = HintText(CustomMessage("the Shadow Temple Boss Key", /*german*/"der Master-Schlüssel des Schattentempels", /*french*/"la Clé d'Or du Temple de l'Ombre"), // /*spanish*/la gran llave del Templo de las Sombras @@ -1214,8 +1414,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a creepy master of unlocking", /*german*/"ein gruseliger Meister der Entriegelung", /*french*/"un anti-grosse porte sinistre"), // /*spanish*/la clave siniestra de un jefe - CustomMessage("a creepy dungeon's master pass", /*german*/"ein gruseliger Labyrinth-Meisterpass", /*french*/"une clé maléfique sinistre")}); + CustomMessage("a creepy dungeon's master pass", /*german*/"ein gruseliger Labyrinth-Meisterpass", /*french*/"une clé maléfique sinistre") // /*spanish*/el pase maestro siniestra + }, + CustomMessage("Shadow Temple Boss Key", "Master-Schlüssel (Schattentempel)", "Clé d'Or du Temple de l'Ombre")); hintTextTable[RHT_GANONS_CASTLE_BOSS_KEY] = HintText(CustomMessage("the Ganon's Castle Boss Key", /*german*/"der Master-Schlüssel von Ganons Schloß", /*french*/"la Clé d'Or du Château de Ganon"), // /*spanish*/la gran llave del Castillo de Ganon @@ -1225,8 +1427,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a final master of unlocking", /*german*/"ein finaler Meister der Entriegelung", /*french*/"un anti-grosse porte final"), // /*spanish*/la clave final de un jefe - CustomMessage("a final dungeon's master pass", /*german*/"ein finaler Labyrinth-Meisterpass", /*french*/"une clé maléfique final")}); + CustomMessage("a final dungeon's master pass", /*german*/"ein finaler Labyrinth-Meisterpass", /*french*/"une clé maléfique final") // /*spanish*/el pase maestro final + }, + CustomMessage("Ganon's Castle Boss Key", "Master-Schlüssel (Ganons Schloß)", "Clé d'Or du Château de Ganon")); hintTextTable[RHT_FOREST_TEMPLE_SMALL_KEY] = HintText(CustomMessage("a Forest Temple Small Key", /*german*/"ein kleiner Schlüssel des Waldtempels", /*french*/"une petite clé du Temple de la Forêt"), // /*spanish*/una llave pequeña del Templo del Bosque @@ -1240,8 +1444,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase de una mazmorra enselvada CustomMessage("a sylvan lock remover", /*german*/"ein waldiger Schlossentferner", /*french*/"un efface-serrure sylvestre"), // /*spanish*/un destructor de cerraduras enselvada - CustomMessage("a sylvan lockpick", /*german*/"ein waldiger Dietrich", /*french*/"un crochet à porte sylvestre")}); + CustomMessage("a sylvan lockpick", /*german*/"ein waldiger Dietrich", /*french*/"un crochet à porte sylvestre") // /*spanish*/una apertura portentosa enselvada + }, + CustomMessage("Forest Temple Small Key", "Kleiner Schlüssel (Waldtempel)", "Petite Clé du Temple de la Forêt")); hintTextTable[RHT_FIRE_TEMPLE_SMALL_KEY] = HintText(CustomMessage("a Fire Temple Small Key", /*german*/"ein kleiner Schlüssel des Feuertempels", /*french*/"une petite clé du Temple du Feu"), // /*spanish*/una llave pequeña del Templo del Fuego @@ -1255,8 +1461,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase de una mazmorra fundida CustomMessage("a molten lock remover", /*german*/"ein geschmolzener Schlossentferner", /*french*/"un efface-serrure fondu"), // /*spanish*/un destructor de cerraduras fundida - CustomMessage("a molten lockpick", /*german*/"ein geschmolzener Dietrich", /*french*/"un crochet à porte fondu")}); - // /*spanish*/una apertura portentosa fundida + CustomMessage("a molten lockpick", /*german*/"ein geschmolzener Dietrich", /*french*/"un crochet à porte fondu") + // /*spanish*/una apertura portentosa fundida + }, + CustomMessage("Fire Temple Small Key", "Kleiner Schlüssel (Feuertempel)", "Petite Clé du Temple du Feu")); hintTextTable[RHT_WATER_TEMPLE_SMALL_KEY] = HintText(CustomMessage("a Water Temple Small Key", /*german*/"ein kleiner Schlüssel des Wassertempels", /*french*/"une petite clé du Temple de l'Eau"), // /*spanish*/una llave pequeña del Templo del Agua @@ -1270,8 +1478,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase de una mazmorra mojada CustomMessage("a wet lock remover", /*german*/"ein nasser Schlossentferner", /*french*/"un efface-serrure humide"), // /*spanish*/un destructor de cerraduras mojada - CustomMessage("a wet lockpick", /*german*/"ein nasser Dietrich", /*french*/"un crochet à porte humide")}); + CustomMessage("a wet lockpick", /*german*/"ein nasser Dietrich", /*french*/"un crochet à porte humide") // /*spanish*/una apertura portentosa mojada + }, + CustomMessage("Water Temple Small Key", "Kleiner Schlüssel (Wassertempel)", "Petite Clé du Temple de l'Eau")); hintTextTable[RHT_SPIRIT_TEMPLE_SMALL_KEY] = HintText(CustomMessage("a Spirit Temple Small Key", /*german*/"ein kleiner Schlüssel des Geistertempels", /*french*/"une petite clé du Temple de l'Esprit"), // /*spanish*/una llave pequeña del Templo del Espíritu @@ -1285,8 +1495,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase de una mazmorra arenosa CustomMessage("a sandy lock remover", /*german*/"ein sandiger Schlossentferner", /*french*/"un efface-serrure sableux"), // /*spanish*/un destructor de cerraduras arenosa - CustomMessage("a sandy lockpick", /*german*/"ein sandiger Dietrich", /*french*/"un crochet à porte sableux")}); + CustomMessage("a sandy lockpick", /*german*/"ein sandiger Dietrich", /*french*/"un crochet à porte sableux") // /*spanish*/una apertura portentosa arenosa + }, + CustomMessage("Spirit Temple Small Key", "Kleiner Schlüssel (Geistertempel)", "Petite Clé du Temple de l'Esprit")); hintTextTable[RHT_SHADOW_TEMPLE_SMALL_KEY] = HintText(CustomMessage("a Shadow Temple Small Key", /*german*/"ein kleiner Schlüssel des Schattentempels", /*french*/"une petite clé du Temple de l'Ombre"), // /*spanish*/una llave pequeña del Templo de las Sombras @@ -1300,81 +1512,312 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase de una mazmorra siniestra:a CustomMessage("a creepy lock remover", /*german*/"ein gruseliger Schlossentferner", /*french*/"un efface-serrure sinistre"), // /*spanish*/un destructor de cerraduras siniestra:a - CustomMessage("a creepy lockpick", /*german*/"ein gruseliger Dietrich", /*french*/"un crochet à porte sinistre")}); + CustomMessage("a creepy lockpick", /*german*/"ein gruseliger Dietrich", /*french*/"un crochet à porte sinistre") // /*spanish*/una apertura portentosa siniestra:a + }, + CustomMessage("Shadow Temple Small Key", "Kleiner Schlüssel (Schattentempel)", "Petite Clé du Temple de l'Ombre")); - hintTextTable[RHT_GERUDO_TRAINING_GROUND_SMALL_KEY] = HintText(CustomMessage("a Gerudo Training Ground Small Key", /*german*/"ein kleiner Schlüssel der Gerudo-Trainingsarena", /*french*/"une petite clé du Gymnase Gerudo"), - // /*spanish*/una llave pequeña del Centro de Instrucción Gerudo - { - CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") - // /*spanish*/una llave pequeña - }, { - CustomMessage("a labyrinthian tool for unlocking", /*german*/"ein verwirrendes Werkzeug zur Entriegelung", /*french*/"un anti-porte labyrinthique"), - // /*spanish*/una clave de una entrada laberíntica - CustomMessage("a labyrinthian dungeon pass", /*german*/"ein verwirrender Labyrinth-Pass", /*french*/"le rêve labyrinthique d'un prisonnier"), - // /*spanish*/un pase de una mazmorra laberíntica - CustomMessage("a labyrinthian lock remover", /*german*/"ein verwirrender Schlossentferner", /*french*/"un efface-serrure labyrinthique"), - // /*spanish*/un destructor de cerraduras laberíntica - CustomMessage("a labyrinthian lockpick", /*german*/"ein verwirrender Dietrich", /*french*/"un crochet à porte labyrinthique")}); - // /*spanish*/una apertura portentosa laberíntica + hintTextTable[RHT_GTG_SMALL_KEY] = HintText(CustomMessage("a Gerudo Training Ground Small Key", /*german*/"ein kleiner Schlüssel der Gerudo-Trainingsarena", /*french*/"une petite clé du Gymnase Gerudo"), + // /*spanish*/una llave pequeña del Centro de Instrucción Gerudo + { + CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") + // /*spanish*/una llave pequeña + }, { + CustomMessage("a labyrinthian tool for unlocking", /*german*/"ein verwirrendes Werkzeug zur Entriegelung", /*french*/"un anti-porte labyrinthique"), + // /*spanish*/una clave de una entrada laberíntica + CustomMessage("a labyrinthian dungeon pass", /*german*/"ein verwirrender Labyrinth-Pass", /*french*/"le rêve labyrinthique d'un prisonnier"), + // /*spanish*/un pase de una mazmorra laberíntica + CustomMessage("a labyrinthian lock remover", /*german*/"ein verwirrender Schlossentferner", /*french*/"un efface-serrure labyrinthique"), + // /*spanish*/un destructor de cerraduras laberíntica + CustomMessage("a labyrinthian lockpick", /*german*/"ein verwirrender Dietrich", /*french*/"un crochet à porte labyrinthique") + // /*spanish*/una apertura portentosa laberíntica + }, + CustomMessage("Training Ground Small Key", "Kleiner Schlüssel (Gerudo-Trainingsarena)", "Petite Clé du Gymnase Gerudo")); - hintTextTable[RHT_GERUDO_FORTRESS_SMALL_KEY] = HintText(CustomMessage("a Gerudo Fortress Small Key", /*german*/"ein kleiner Schlüssel des Diebesverstecks", /*french*/"une petite clé de la Repaire des Voleurs"), - // /*spanish*/una llave pequeña de la Fortaleza Gerudo - { - CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") - // /*spanish*/una llave pequeña - }, { - CustomMessage("an imprisoned tool for unlocking", /*german*/"ein gefangenes Werkzeug zur Entriegelung", /*french*/"un anti-porte emprisonné"), - // /*spanish*/una clave de una entrada encarcelada - CustomMessage("an imprisoned dungeon pass", /*german*/"ein gefangener Labyrinth-Pass", /*french*/"le rêve emprisonné d'un prisonnier"), - // /*spanish*/un pase de una mazmorra encarcelada - CustomMessage("an imprisoned lock remover", /*german*/"ein gefangener Schlossentferner", /*french*/"un efface-serrure emprisonné"), - // /*spanish*/un destructor de cerraduras encarcelada - CustomMessage("an imprisoned lockpick", /*german*/"ein gefangener Dietrich", /*french*/"un crochet à porte emprisonné")}); - // /*spanish*/una apertura portentosa encarcelada - - hintTextTable[RHT_BOTTOM_OF_THE_WELL_SMALL_KEY] = HintText(CustomMessage("a Bottom of the Well Small Key", /*german*/"ein kleiner Schlüssel vom Grund des Brunnens", /*french*/"une petite clé du fond du Puits"), - // /*spanish*/una llave pequeña del Fondo del pozo - { - CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") - // /*spanish*/una llave pequeña - }, { - CustomMessage("a moldy tool for unlocking", /*german*/"ein schimmeliges Werkzeug zur Entriegelung", /*french*/"un anti-porte moisi"), - // /*spanish*/una clave de una entrada mohosa - CustomMessage("a moldy dungeon pass", /*german*/"ein schimmeliger Labyrinth-Pass", /*french*/"le rêve moisi d'un prisonnier"), - // /*spanish*/un pase de una mazmorra mohosa - CustomMessage("a moldy lock remover", /*german*/"ein schimmeliger Schlossentferner", /*french*/"un efface-serrure moisi"), - // /*spanish*/un destructor de cerraduras mohosa - CustomMessage("a moldy lockpick", /*german*/"ein schimmeliger Dietrich", /*french*/"un crochet à porte moisi")}); - // /*spanish*/una apertura portentosa mohosa + hintTextTable[RHT_HIDEOUT_SMALL_KEY] = HintText(CustomMessage("a Gerudo Fortress Small Key", /*german*/"ein kleiner Schlüssel des Diebesverstecks", /*french*/"une petite clé de la Repaire des Voleurs"), + // /*spanish*/una llave pequeña de la Fortaleza Gerudo + { + CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") + // /*spanish*/una llave pequeña + }, { + CustomMessage("an imprisoned tool for unlocking", /*german*/"ein gefangenes Werkzeug zur Entriegelung", /*french*/"un anti-porte emprisonné"), + // /*spanish*/una clave de una entrada encarcelada + CustomMessage("an imprisoned dungeon pass", /*german*/"ein gefangener Labyrinth-Pass", /*french*/"le rêve emprisonné d'un prisonnier"), + // /*spanish*/un pase de una mazmorra encarcelada + CustomMessage("an imprisoned lock remover", /*german*/"ein gefangener Schlossentferner", /*french*/"un efface-serrure emprisonné"), + // /*spanish*/un destructor de cerraduras encarcelada + CustomMessage("an imprisoned lockpick", /*german*/"ein gefangener Dietrich", /*french*/"un crochet à porte emprisonné") + // /*spanish*/una apertura portentosa encarcelada + }, + CustomMessage("Gerudo Fortress Small Key", "Kleiner Schlüssel (Diebesversteck)", "Petite Clé du Repaire des Voleurs")); + hintTextTable[RHT_BOTW_SMALL_KEY] = HintText(CustomMessage("a Bottom of the Well Small Key", /*german*/"ein kleiner Schlüssel vom Grund des Brunnens", /*french*/"une petite clé du fond du Puits"), + // /*spanish*/una llave pequeña del Fondo del pozo + { + CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") + // /*spanish*/una llave pequeña + }, { + CustomMessage("a moldy tool for unlocking", /*german*/"ein schimmeliges Werkzeug zur Entriegelung", /*french*/"un anti-porte moisi"), + // /*spanish*/una clave de una entrada mohosa + CustomMessage("a moldy dungeon pass", /*german*/"ein schimmeliger Labyrinth-Pass", /*french*/"le rêve moisi d'un prisonnier"), + // /*spanish*/un pase de una mazmorra mohosa + CustomMessage("a moldy lock remover", /*german*/"ein schimmeliger Schlossentferner", /*french*/"un efface-serrure moisi"), + // /*spanish*/un destructor de cerraduras mohosa + CustomMessage("a moldy lockpick", /*german*/"ein schimmeliger Dietrich", /*french*/"un crochet à porte moisi") + // /*spanish*/una apertura portentosa mohosa + }, + CustomMessage("Bottom of the Well Small Key", "Kleiner Schlüssel (Grund des Brunnens)", "Petite Clé du Puits")); + hintTextTable[RHT_GANONS_CASTLE_SMALL_KEY] = HintText(CustomMessage("a Ganon's Castle Small Key", /*german*/"ein kleiner Schlüssel von Ganons Schloß", /*french*/"une petite clé du Château de Ganon"), // /*spanish*/una llave pequeña del Castillo de Ganon - { - CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") - // /*spanish*/una llave pequeña - }, { - CustomMessage("a final tool for unlocking", /*german*/"ein finales Werkzeug zur Entriegelung", /*french*/"un anti-porte final"), - // /*spanish*/una clave de una entrada final - CustomMessage("a final dungeon pass", /*german*/"ein finaler Labyrinth-Pass", /*french*/"le rêve final d'un prisonnier"), - // /*spanish*/un pase de una mazmorra final - CustomMessage("a final lock remover", /*german*/"ein finaler Schlossentferner", /*french*/"un efface-serrure final"), - // /*spanish*/un destructor de cerraduras final - CustomMessage("a final lockpick", /*german*/"ein finaler Dietrich", /*french*/"un crochet à porte final")}); - // /*spanish*/una apertura portentosa final + { + CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") + // /*spanish*/una llave pequeña + }, { + CustomMessage("a final tool for unlocking", /*german*/"ein finales Werkzeug zur Entriegelung", /*french*/"un anti-porte final"), + // /*spanish*/una clave de una entrada final + CustomMessage("a final dungeon pass", /*german*/"ein finaler Labyrinth-Pass", /*french*/"le rêve final d'un prisonnier"), + // /*spanish*/un pase de una mazmorra final + CustomMessage("a final lock remover", /*german*/"ein finaler Schlossentferner", /*french*/"un efface-serrure final"), + // /*spanish*/un destructor de cerraduras final + CustomMessage("a final lockpick", /*german*/"ein finaler Dietrich", /*french*/"un crochet à porte final") + // /*spanish*/una apertura portentosa final + }, + CustomMessage("Ganon's Castle Small Key", "Kleiner Schlüssel (Ganons Schloß)", "Petite Clé du Château de Ganon")); - hintTextTable[RHT_OVERWORLD_KEY] = HintText(CustomMessage("an Overworld Key", /*german*/"ein Schlüssel der Oberwelt", /*french*/"une clé de l'Overworld"), + + hintTextTable[RHT_TCG_SMALL_KEY] = HintText(CustomMessage("a Treasure Chest Shop Small Key", /*german*/"ein kleiner Schlüssel des Schatztruhenladens", /*french*/"une petite clé de la chasse aux trésors"), + // /*spanish*/una llave pequeña del Cofre del Tesoro + { + CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") + // /*spanish*/una llave pequeña + }, { + CustomMessage("a gambler's tool for unlocking", /*german*/"ein Spieler-Werkzeug zur Entschlüsselung", /*french*/"un anti-porte de parieur"), + // /*spanish*/una clave de un juego de azar + CustomMessage("a gambler's dungeon pass", /*german*/"ein Spieler-Dungeon-Pass", /*french*/"le rêve d'un prisonnier parieur"), + // /*spanish*/un pase de un juego de azar + CustomMessage("a gambler's lock remover", /*german*/"ein Spieler-Schlossentferner", /*french*/"un efface-serrure de parieur"), + // /*spanish*/un destructor de cerraduras del juego de azar + CustomMessage("a gambler's lockpick", /*german*/"ein Spieler-Dietrich", /*french*/"un crochet à serrure de parieur") + // /*spanish*/una apertura portentosa del juego de azar + }, + CustomMessage("Chest Game Small Key", "Kleiner Schlüssel (Truhenlotterie)", "Petite Clé du jeu la Chasse-aux-Trésors")); + + hintTextTable[RHT_GUARD_HOUSE_KEY] = HintText(CustomMessage("the Guard House's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("a key to pots", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Guard House Key", "Schlüssel (Wachhaus)", "Clé de la Maison des Gardes")); + + hintTextTable[RHT_MARKET_BAZAAR_KEY] = HintText(CustomMessage("Market Bazaar's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("a child's shopping key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Market Bazaar Key", "Schlüssel (Basar des Marktes)", "Clé du Bazar de la Place du Marché")); + + hintTextTable[RHT_MARKET_POTION_SHOP_KEY] = HintText(CustomMessage("the Market Potion Shop's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("past potion's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Market Potion Shop Key", "Schlüssel (Magie-Laden des Marktes)", "Clé du Magasin de Potions de la Place du Marché")); + + hintTextTable[RHT_MASK_SHOP_KEY] = HintText(CustomMessage("the Mask Shop's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the masqurade's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Mask Shop Key", "Schlüssel (Maskenladen)", "Clé de la Foire aux Masques")); + + hintTextTable[RHT_MARKET_SHOOTING_KEY] = HintText(CustomMessage("Market Shooting Gallery's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("slingshot shooting's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Market Shooting Gallery Key", "Schlüssel (Schießbude des Marktes)", "Clé du Stand de Tir de la Place du Marché")); + + hintTextTable[RHT_BOMBCHU_BOWLING_KEY] = HintText(CustomMessage("Bombchu Bowling's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("mouse golf's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Bombchu Bowling Alley Key", "Schlüssel (Minenbowlingbahn)", "Clé du Bowling Teigneux")); + + hintTextTable[RHT_TCG_BUILDING_KEY] = HintText(CustomMessage("Treasure Chest Game Building's key"), { - CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") - // /*spanish*/una llave + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior }, { - CustomMessage("a key to the world", /*german*/"ein Schlüssel zur Welt", /*french*/"une clé du monde"), - // /*spanish*/una llave al mundo - CustomMessage("a key to the kingdom", /*german*/"ein Schlüssel zum Königreich", /*french*/"une clé du royaume"), - // /*spanish*/una llave al reino - CustomMessage("a key to the universe", /*german*/"ein Schlüssel zum Universum", /*french*/"une clé de l'univers")}); - // /*spanish*/una llave al universo + CustomMessage("the gambling game's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Treasure Chest Game Building Key", "Schlüssel (Haus der Truhenlotterie)", "Clé de la Chasse au Trésor")); + + hintTextTable[RHT_BOMBCHU_SHOP_KEY] = HintText(CustomMessage("the Bombchu Shop's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("a mouse merchant's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Bombchu Shop Key", "Schlüssel (Krabbelminenladen)", "Clé du Magasin de Missiles")); + + hintTextTable[RHT_RICHARDS_HOUSE_KEY] = HintText(CustomMessage("Richard's House Key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("a lost puppy's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Richard's House Key", "Schlüssel (Richards Haus)", "Clé de la Maison de Kiki")); + + hintTextTable[RHT_ALLEY_HOUSE_KEY] = HintText(CustomMessage("the Alley House's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("a townhouse's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Alley House Key", "Schlüssel (Haus in der Gasse)", "Clé de la Maison de la Ruelle")); + + hintTextTable[RHT_KAK_BAZAAR_KEY] = HintText(CustomMessage("Kakariko Bazaar's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("adult's shopping key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Kakariko Bazaar Key", "Schlüssel (Basar von Kakariko)", "Clé du Bazar de Cocorico")); + + hintTextTable[RHT_KAK_POTION_SHOP_KEY] = HintText(CustomMessage("the Kakariko Potion Shop's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("future's potion key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Kakariko Potion Shop Key", "Schlüssel (Magie-Laden von Kakariko)", "Clé du Magasin de Potions de Cocorico")); + + hintTextTable[RHT_BOSS_HOUSE_KEY] = HintText(CustomMessage("the Boss's House's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the carpenter's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Boss's House Key", "Schlüssel (Haus des Chefs)", "Clé de la Maison du Chef des Ouvriers")); + + hintTextTable[RHT_GRANNYS_SHOP_KEY] = HintText(CustomMessage("Granny's Potion Shop's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the old woman's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Granny's Potion Shop Key", "Schlüssel (Asas Hexenladen)", "Clé de l'Apothicaire")); + + hintTextTable[RHT_SKULLTULA_HOUSE_KEY] = HintText(CustomMessage("the Skulltula House's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the cursed place's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Skulltula House Key", "Schlüssel (Skulltula-Haus)", "Clé de la Maison des Araignées")); + + hintTextTable[RHT_IMPAS_HOUSE_KEY] = HintText(CustomMessage("Impa's House's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the Shadow Sage's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Impa's House Key", "Schlüssel (Impas Haus)", "Clé de la Maison d'Impa")); + + hintTextTable[RHT_WINDMILL_KEY] = HintText(CustomMessage("the Windmill's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the grain grinder's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Windmill Key", "Schlüssel (Windmühle)", "Clé du Moulin")); + + hintTextTable[RHT_KAK_SHOOTING_KEY] = HintText(CustomMessage("Kakariko Shooting Gallery's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("bow shooting's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Kakariko Shooting Gallery Key", "Schlüssel (Schießbude von Kakariko)", "Clé du Stand de Tir de Cocorico")); + + hintTextTable[RHT_DAMPES_HUT_KEY] = HintText(CustomMessage("Dampe's Hut's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the small hut's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Dampe's Hut Key", "Schlüssel (Hütte des Totengräbers)", "Clé de la Cabane d'Igor")); + + hintTextTable[RHT_TALONS_HOUSE_KEY] = HintText(CustomMessage("Talon's House's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the layabout's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Talon's House Key", "Schlüssel (Talons Haus)", "Clé de la Maison de Talon")); + + hintTextTable[RHT_STABLES_KEY] = HintText(CustomMessage("the Stables' key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the key to the farm", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Stables Key", "Schlüssel (Ställe)", "Clé des Écuries")); + + hintTextTable[RHT_BACK_TOWER_KEY] = HintText(CustomMessage("the Back Tower's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the cowshed's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Back Tower Key", "Schlüssel (Lon Lon-Turm)", "Clé du Silo")); + + hintTextTable[RHT_HYLIA_LAB_KEY] = HintText(CustomMessage("the Hylia Laboratory's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the key to science", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Hylia Laboratory Key", "Schlüssel (Hylia-Labor)", "Clé du Laboratoire du Lac Hylia")); + + hintTextTable[RHT_FISHING_HOLE_KEY] = HintText(CustomMessage("the Fishing Hole's key"), + { + CustomMessage("an Overworld Key", /*german*/"ein Überwelt-Schlüssel", /*french*/"une clé de l'Overworld") + // /*spanish*/una llave del mundo exterior + }, { + CustomMessage("the fisherman's key", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Fishing Hole Key", "Schlüssel (Fischweiher)", "Clé de l'Étang")); hintTextTable[RHT_FOREST_TEMPLE_KEY_RING] = HintText(CustomMessage("a Forest Temple Key Ring", /*german*/"das Schlüsselbund des Waldtempels", /*french*/"un trousseau de clés du Temple de la Forêt"), // /*spanish*/un llavero del Templo del Bosque @@ -1388,8 +1831,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase vip de mazmorras silvestre CustomMessage("a sylvan jingling ring", /*german*/"ein waldiger Multifunktionsschlüssel", /*french*/"des efface-serrures sylvestres"), // /*spanish*/una cadena multiusos silvestre - CustomMessage("a sylvan skeleton key", /*german*/"ein waldiger Skelettschlüssel", /*french*/"des crochets à porte sylvestres")}); + CustomMessage("a sylvan skeleton key", /*german*/"ein waldiger Skelettschlüssel", /*french*/"des crochets à porte sylvestres") // /*spanish*/un anillo silvestre contra cerrojos + }, + CustomMessage("Forest Temple Key Ring", "Schlüsselbund (Waldtempel)", "Trousseau du Temple de la Forêt")); hintTextTable[RHT_FIRE_TEMPLE_KEY_RING] = HintText(CustomMessage("a Fire Temple Key Ring", /*german*/"das Schlüsselbund des Feuertempels", /*french*/"un trousseau de clés du Temple du Feu"), // /*spanish*/un llavero del Templo del Fuego @@ -1403,8 +1848,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase vip de mazmorras fundido CustomMessage("a molten jingling ring", /*german*/"ein geschmolzener Multifunktionsschlüssel", /*french*/"des efface-serrures fondus"), // /*spanish*/una cadena multiusos fundida - CustomMessage("a molten skeleton key", /*german*/"ein geschmolzener Skelettschlüssel", /*french*/"des crochets à porte fondus")}); - // /*spanish*/un anillo fundido contra cerrojos + CustomMessage("a molten skeleton key", /*german*/"ein geschmolzener Skelettschlüssel", /*french*/"des crochets à porte fondus") + // /*spanish*/un anillo fundido contra cerrojos + }, + CustomMessage("Fire Temple Key Ring", "Schlüsselbund (Feuertempel)", "Trousseau du Temple du Feu")); hintTextTable[RHT_WATER_TEMPLE_KEY_RING] = HintText(CustomMessage("a Water Temple Key Ring", /*german*/"das Schlüsselbund des Wassertempels", /*french*/"un trousseau de clés du Temple de l'Eau"), // /*spanish*/un llavero del Templo del Agua @@ -1418,8 +1865,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase vip de mazmorras abisal CustomMessage("a wet jingling ring", /*german*/"ein nasser Multifunktionsschlüssel", /*french*/"des efface-serrures humides"), // /*spanish*/una cadena multiusos abisal - CustomMessage("a wet skeleton key", /*german*/"ein nasser Skelettschlüssel", /*french*/"des crochets à porte humides")}); + CustomMessage("a wet skeleton key", /*german*/"ein nasser Skelettschlüssel", /*french*/"des crochets à porte humides") // /*spanish*/un anillo abisal contra cerrojos + }, + CustomMessage("Water Temple Key Ring", "Schlüsselbund (Wassertempel)", "Trousseau du Temple de l'Eau")); hintTextTable[RHT_SPIRIT_TEMPLE_KEY_RING] = HintText(CustomMessage("a Spirit Temple Key Ring", /*german*/"das Schlüsselbund des Geistertempels", /*french*/"un trousseau de clés du Temple de l'Esprit"), // /*spanish*/un llavero del Templo del Espíritu @@ -1433,8 +1882,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase vip de mazmorras arenoso CustomMessage("a sandy jingling ring", /*german*/"ein sandiger Multifunktionsschlüssel", /*french*/"des efface-serrures sableux"), // /*spanish*/una cadena multiusos arenosa - CustomMessage("a sandy skeleton key", /*german*/"ein sandiger Skelettschlüssel", /*french*/"des crochets à porte sableux")}); + CustomMessage("a sandy skeleton key", /*german*/"ein sandiger Skelettschlüssel", /*french*/"des crochets à porte sableux") // /*spanish*/un anillo arenoso contra cerrojos + }, + CustomMessage("Spirit Temple Key Ring", "Schlüsselbund (Geistertempel)", "Trousseau du Temple de l'Esprit")); hintTextTable[RHT_SHADOW_TEMPLE_KEY_RING] = HintText(CustomMessage("a Shadow Temple Key Ring", /*german*/"das Schlüsselbund des Schattentempels", /*french*/"un trousseau de clés du Temple de l'Ombre"), // /*spanish*/un llavero del Templo de las Sombras @@ -1448,53 +1899,61 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase vip de mazmorras tenebroso CustomMessage("a creepy jingling ring", /*german*/"ein gruseliger Multifunktionsschlüssel", /*french*/"des efface-serrures sinistres"), // /*spanish*/una cadena multiusos tenebrosa - CustomMessage("a creepy skeleton key", /*german*/"ein gruseliger Skelettschlüssel", /*french*/"des crochets à porte sinistres")}); + CustomMessage("a creepy skeleton key", /*german*/"ein gruseliger Skelettschlüssel", /*french*/"des crochets à porte sinistres") // /*spanish*/un anillo tenebroso contra cerrojos + }, + CustomMessage("Shadow Temple Key Ring", "Schlüsselbund (Schattentempel)", "Trousseau du Temple de l'Ombre")); - hintTextTable[RHT_GERUDO_TRAINING_GROUND_KEY_RING] = HintText(CustomMessage("a Gerudo Training Ground Key Ring", /*german*/"das Schlüsselbund der Gerudo-Trainingsarena", /*french*/"un trousseau de clés du Gymnase Gerudo"), - // /*spanish*/un llavero del Centro de Instrucción Gerudo - { - CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") - // /*spanish*/un llavero - }, { - CustomMessage("a labyrinthian toolbox for unlocking", /*german*/"eine verwirrende Werkzeugkiste zur Entriegelung", /*french*/"des anti-portes labyrinthiques"), - // /*spanish*/un conjunto laberíntico de cerrajero - CustomMessage("a labyrinthian dungeon season pass", /*german*/"ein verwirrender Labyrinth-Season-Pass", /*french*/"les rêves labyrinthiques d'un prisonnier"), - // /*spanish*/un pase vip de mazmorras laberíntico - CustomMessage("a labyrinthian jingling ring", /*german*/"ein verwirrender Multifunktionsschlüssel", /*french*/"des efface-serrures labyrinthiques"), - // /*spanish*/una cadena multiusos laberíntica - CustomMessage("a labyrinthian skeleton key", /*german*/"ein verwirrender Skelettschlüssel", /*french*/"des crochets à porte labyrinthiques")}); - // /*spanish*/un anillo laberíntico contra cerrojos + hintTextTable[RHT_GTG_KEY_RING] = HintText(CustomMessage("a Gerudo Training Ground Key Ring", /*german*/"das Schlüsselbund der Gerudo-Trainingsarena", /*french*/"un trousseau de clés du Gymnase Gerudo"), + // /*spanish*/un llavero del Centro de Instrucción Gerudo + { + CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") + // /*spanish*/un llavero + }, { + CustomMessage("a labyrinthian toolbox for unlocking", /*german*/"eine verwirrende Werkzeugkiste zur Entriegelung", /*french*/"des anti-portes labyrinthiques"), + // /*spanish*/un conjunto laberíntico de cerrajero + CustomMessage("a labyrinthian dungeon season pass", /*german*/"ein verwirrender Labyrinth-Season-Pass", /*french*/"les rêves labyrinthiques d'un prisonnier"), + // /*spanish*/un pase vip de mazmorras laberíntico + CustomMessage("a labyrinthian jingling ring", /*german*/"ein verwirrender Multifunktionsschlüssel", /*french*/"des efface-serrures labyrinthiques"), + // /*spanish*/una cadena multiusos laberíntica + CustomMessage("a labyrinthian skeleton key", /*german*/"ein verwirrender Skelettschlüssel", /*french*/"des crochets à porte labyrinthiques") + // /*spanish*/un anillo laberíntico contra cerrojos + }, + CustomMessage("Training Ground Key Ring", "Schlüsselbund (Grund des Brunnens)", "Trousseau du Gymnase Gerudo")); - hintTextTable[RHT_GERUDO_FORTRESS_KEY_RING] = HintText(CustomMessage("a Gerudo Fortress Key Ring", /*german*/"das Schlüsselbund des Diebesverstecks", /*french*/"un trousseau de clés de la Repaire des Voleurs"), - // /*spanish*/un llavero de la Fortaleza Gerudo - { - CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") - // /*spanish*/un llavero - }, { - CustomMessage("an imprisoned toolbox for unlocking", /*german*/"eine gefangene Werkzeugkiste zur Entriegelung", /*french*/"des anti-portes emprisonnés"), - // /*spanish*/un conjunto enjaulado de cerrajero - CustomMessage("an imprisoned dungeon season pass", /*german*/"ein gefangener Labyrinth-Season-Pass", /*french*/"les rêves emprisonnés d'un prisonnier"), - // /*spanish*/un pase vip de una mazmorra enjaulado - CustomMessage("an imprisoned jingling ring", /*german*/"ein gefangener Multifunktionsschlüssel", /*french*/"des efface-serrures emprisonnés"), - // /*spanish*/una cadena multiusos enjaulada - CustomMessage("an imprisoned skeleton key", /*german*/"ein gefangener Skelettschlüssel", /*french*/"des crochets à porte emprisonnés")}); - // /*spanish*/un anillo enjaulado contra cerrojos + hintTextTable[RHT_HIDEOUT_KEY_RING] = HintText(CustomMessage("a Gerudo Fortress Key Ring", /*german*/"das Schlüsselbund des Diebesverstecks", /*french*/"un trousseau de clés de la Repaire des Voleurs"), + // /*spanish*/un llavero de la Fortaleza Gerudo + { + CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") + // /*spanish*/un llavero + }, { + CustomMessage("an imprisoned toolbox for unlocking", /*german*/"eine gefangene Werkzeugkiste zur Entriegelung", /*french*/"des anti-portes emprisonnés"), + // /*spanish*/un conjunto enjaulado de cerrajero + CustomMessage("an imprisoned dungeon season pass", /*german*/"ein gefangener Labyrinth-Season-Pass", /*french*/"les rêves emprisonnés d'un prisonnier"), + // /*spanish*/un pase vip de una mazmorra enjaulado + CustomMessage("an imprisoned jingling ring", /*german*/"ein gefangener Multifunktionsschlüssel", /*french*/"des efface-serrures emprisonnés"), + // /*spanish*/una cadena multiusos enjaulada + CustomMessage("an imprisoned skeleton key", /*german*/"ein gefangener Skelettschlüssel", /*french*/"des crochets à porte emprisonnés") + // /*spanish*/un anillo enjaulado contra cerrojos + }, + CustomMessage("Gerudo Fortress Key Ring", "Schlüsselbund (Gerudo-Trainingsarena)", "Trousseau du Repaire des Voleurs")); - hintTextTable[RHT_BOTTOM_OF_THE_WELL_KEY_RING] = HintText(CustomMessage("a Bottom of the Well Key Ring", /*german*/"das Schlüsselbund vom Grund des Brunnens", /*french*/"un trousseau de clés du fond du Puits"), - // /*spanish*/un llavero del Fondo del pozo - { - CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") - // /*spanish*/un llavero - }, { - CustomMessage("a moldy toolbox for unlocking", /*german*/"eine schimmelige Werkzeugkiste zur Entriegelung", /*french*/"des anti-portes moisis"), - // /*spanish*/un conjunto subterráneo de cerrajero - CustomMessage("a moldy dungeon season pass", /*german*/"ein schimmeliger Labyrinth-Season-Pass", /*french*/"les rêves moisis d'un prisonnier"), - // /*spanish*/un pase vip de una mazmorra subterráneo - CustomMessage("a moldy jingling ring", /*german*/"ein schimmeliger Multifunktionsschlüssel", /*french*/"des efface-serrures moisis"), - // /*spanish*/una cadena multiusos subterránea - CustomMessage("a moldy skeleton key", /*german*/"ein schimmeliger Skelettschlüssel", /*french*/"des crochets à porte moisis")}); - // /*spanish*/un anillo subterráneo contra cerrojos + hintTextTable[RHT_BOTW_KEY_RING] = HintText(CustomMessage("a Bottom of the Well Key Ring", /*german*/"das Schlüsselbund vom Grund des Brunnens", /*french*/"un trousseau de clés du fond du Puits"), + // /*spanish*/un llavero del Fondo del pozo + { + CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") + // /*spanish*/un llavero + }, { + CustomMessage("a moldy toolbox for unlocking", /*german*/"eine schimmelige Werkzeugkiste zur Entriegelung", /*french*/"des anti-portes moisis"), + // /*spanish*/un conjunto subterráneo de cerrajero + CustomMessage("a moldy dungeon season pass", /*german*/"ein schimmeliger Labyrinth-Season-Pass", /*french*/"les rêves moisis d'un prisonnier"), + // /*spanish*/un pase vip de una mazmorra subterráneo + CustomMessage("a moldy jingling ring", /*german*/"ein schimmeliger Multifunktionsschlüssel", /*french*/"des efface-serrures moisis"), + // /*spanish*/una cadena multiusos subterránea + CustomMessage("a moldy skeleton key", /*german*/"ein schimmeliger Skelettschlüssel", /*french*/"des crochets à porte moisis") + // /*spanish*/un anillo subterráneo contra cerrojos + }, + CustomMessage("Bottom of the Well Key Ring", "Schlüsselbund (Diebesversteck)", "Trousseau du Puits")); hintTextTable[RHT_GANONS_CASTLE_KEY_RING] = HintText(CustomMessage("a Ganon's Castle Key Ring", /*german*/"das Schlüsselbund von Ganons Schloß", /*french*/"un trousseau de clés du Château de Ganon"), // /*spanish*/un llavero del Castillo de Ganon @@ -1508,33 +1967,22 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un pase vip de una mazmorra decisivo CustomMessage("a final jingling ring", /*german*/"ein finaler Multifunktionsschlüssel", /*french*/"des efface-serrures finaux"), // /*spanish*/una cadena multiusos decisiva - CustomMessage("a final skeleton key", /*german*/"ein finaler Skelettschlüssel", /*french*/"des crochets à porte finaux")}); + CustomMessage("a final skeleton key", /*german*/"ein finaler Skelettschlüssel", /*french*/"des crochets à porte finaux") // /*spanish*/un anillo decisivo multiusos + }, + CustomMessage("Ganon's Castle Key Ring", "Schlüsselbund (Ganons Schloß)", "Trousseau du Château de Ganon")); - hintTextTable[RHT_TREASURE_GAME_SMALL_KEY] = HintText(CustomMessage("a Treasure Chest Shop Small Key", /*german*/"ein kleiner Schlüssel der Truhenlotterie", /*french*/"une petite clé de la chasse aux trésors"), - // /*spanish*/una llave pequeña del Cofre del Tesoro - { - CustomMessage("a small key", /*german*/"ein kleiner Schlüssel", /*french*/"une petite clé") - // /*spanish*/una llave pequeña - }, { - CustomMessage("a gambler's tool for unlocking", /*german*/"ein Zocker-Werkzeug zur Entriegelung", /*french*/"un anti-porte de parieur"), - // /*spanish*/una clave de un juego de azar - CustomMessage("a gambler's dungeon pass", /*german*/"ein Zocker-Labyrinth-Pass", /*french*/"le rêve d'un prisonnier parieur"), - // /*spanish*/un pase de un juego de azar - CustomMessage("a gambler's lock remover", /*german*/"ein Zocker-Schlossentferner", /*french*/"un efface-serrure de parieur"), - // /*spanish*/un destructor de cerraduras del juego de azar - CustomMessage("a gambler's lockpick", /*german*/"ein Zocker-Dietrich", /*french*/"un crochet à serrure de parieur")}); - // /*spanish*/una apertura portentosa del juego de azar - - hintTextTable[RHT_TREASURE_GAME_KEY_RING] = HintText(CustomMessage("a Chest Game Key Ring", /*german*/ "das Schlüsselbund der Truhenlotterie", /*french*/ "TRANSLATE THIS"), + hintTextTable[RHT_TCG_KEY_RING] = HintText(CustomMessage("a Chest Game Key Ring", /*german*/ "das Schlüsselbund der Truhenlotterie", /*french*/ TODO_TRANSLATE), { CustomMessage("a key ring", /*german*/"ein Schlüsselbund", /*french*/"un trousseau de clés") // /*spanish*/un llavero }, { - CustomMessage("a gambler's toolbox for unlocking", /*german*/ "eine Zocker-Werkzeugkiste zur Entriegelung", /*french*/ "TRANSLATE THIS"), - CustomMessage("a gambler's season pass", /*german*/ "ein Zocker-Labyrinth-Season-Pass", /*french*/ "TRANSLATE THIS"), - CustomMessage("a gambler's jingling ring", /*german*/ "ein Zocker-Multifunktionsschlüssel", /*french*/ "TRANSLATE THIS"), - CustomMessage("a gambler's skeleton key", /*german*/ "ein Zocker-Skelettschlüssel", /*french*/ "TRANSLATE THIS")}); + CustomMessage("a gambler's toolbox for unlocking", /*german*/ "eine Zocker-Werkzeugkiste zur Entriegelung", /*french*/ TODO_TRANSLATE), + CustomMessage("a gambler's season pass", /*german*/ "ein Zocker-Labyrinth-Season-Pass", /*french*/ TODO_TRANSLATE), + CustomMessage("a gambler's jingling ring", /*german*/ "ein Zocker-Multifunktionsschlüssel", /*french*/ TODO_TRANSLATE), + CustomMessage("a gambler's skeleton key", /*german*/ "ein Zocker-Skelettschlüssel", /*french*/ TODO_TRANSLATE) + }, + CustomMessage("Chest Game Key Ring", "Schlüsselbund (Truhenlotterie)", "Trousseau du jeu la Chasse-aux-Trésors")); hintTextTable[RHT_KOKIRI_EMERALD] = HintText(CustomMessage("the Kokiri Emerald", /*german*/"der Kokiri-Smaragd", /*french*/"l'Émeraude Kokiri"), // /*spanish*/la Esmeralda de los Kokiri @@ -1544,8 +1992,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a green stone", /*german*/"ein grüner Stein", /*french*/"une pierre verte"), // /*spanish*/una piedra verde - CustomMessage("a gift before death", /*german*/"ein Geschenk vor dem Tod", /*french*/"le dernier souffle d'un arbre")}); + CustomMessage("a gift before death", /*german*/"ein Geschenk vor dem Tod", /*french*/"le dernier souffle d'un arbre") // /*spanish*/un obsequio testamentario + }, + CustomMessage("Kokiri's Emerald", "Kokiri-Smaragd", "Émeraude Kokiri")); hintTextTable[RHT_GORON_RUBY] = HintText(CustomMessage("the Goron Ruby", /*german*/"der Goronen-Rubin", /*french*/"le Rubis Goron"), // /*spanish*/el Rubí de los Goron @@ -1555,8 +2005,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a red stone", /*german*/"ein roter Stein", /*french*/"une pierre rouge"), // /*spanish*/una piedra carmín - CustomMessage("sworn brotherhood", /*german*/"die geschworene Bruderschaft", /*french*/"un serment de fraternité")}); + CustomMessage("sworn brotherhood", /*german*/"die geschworene Bruderschaft", /*french*/"un serment de fraternité") // /*spanish*/el juramento de hermanos de sangre + }, + CustomMessage("Goron's Ruby", "Goronen-Rubin", "Rubis Goron")); hintTextTable[RHT_ZORA_SAPPHIRE] = HintText(CustomMessage("the Zora Sapphire", /*german*/"der Zora-Saphir", /*french*/"le Saphir Zora"), // /*spanish*/el Zafiro de los Zora @@ -1566,8 +2018,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a blue stone", /*german*/"ein blauer Stein", /*french*/"une pierre bleue"), // /*spanish*/una piedra celeste - CustomMessage("an engagement gift", /*german*/"ein Verlobungsgeschenk", /*french*/"un cadeau de mariage")}); + CustomMessage("an engagement gift", /*german*/"ein Verlobungsgeschenk", /*french*/"un cadeau de mariage") + }, // /*spanish*/un regalo de compromiso + CustomMessage("Zora's Sapphire", "Zora-Saphir", "Saphir Zora")); hintTextTable[RHT_FOREST_MEDALLION] = HintText(CustomMessage("the Forest Medallion", /*german*/"das Amulett des Waldes", /*french*/"le Médaillon de la Forêt"), // /*spanish*/el Medallón del Bosque @@ -1577,8 +2031,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a green coin", /*german*/"eine grüne Münze", /*french*/"une pièce verte"), // /*spanish*/una moneda esmeralda - CustomMessage("Saria's friendship", /*german*/"Salias Freundschaft", /*french*/"l'amitié de Saria")}); + CustomMessage("Saria's friendship", /*german*/"Salias Freundschaft", /*french*/"l'amitié de Saria") // /*spanish*/la amistad de Saria + }, + CustomMessage("Forest Medallion", "Amulett des Waldes", "Médaillon de la Forêt")); hintTextTable[RHT_FIRE_MEDALLION] = HintText(CustomMessage("the Fire Medallion", /*german*/"das Amulett des Feuers", /*french*/"le Médaillon du Feu"), // /*spanish*/el Medallón del Fuego @@ -1588,8 +2044,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a red coin", /*german*/"eine rote Münze", /*french*/"une pièce rouge"), // /*spanish*/una moneda rubí - CustomMessage("Darunia's power", /*german*/"Darunias Kraft", /*french*/"la fraternité de Darunia")}); + CustomMessage("Darunia's power", /*german*/"Darunias Kraft", /*french*/"la fraternité de Darunia") // /*spanish*/la fraternidad de Darunia + }, + CustomMessage("Fire Medallion", "Amulett des Feuers", "Médaillon du Feu")); hintTextTable[RHT_WATER_MEDALLION] = HintText(CustomMessage("the Water Medallion", /*german*/"das Amulett des Wassers", /*french*/"le Médaillon de l'Eau"), // /*spanish*/el Medallón del Agua @@ -1599,8 +2057,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a blue coin", /*german*/"eine blaue Münze", /*french*/"une pièce bleue"), // /*spanish*/una moneda zafiro - CustomMessage("Ruto's power", /*german*/"Rutos Liebe", /*french*/"l'amour de Ruto")}); + CustomMessage("Ruto's power", /*german*/"Rutos Liebe", /*french*/"l'amour de Ruto") // /*spanish*/el amor de Ruto + }, + CustomMessage("Water Medallion", "Amulett des Wassers", "Médaillon de l'Eau")); hintTextTable[RHT_SPIRIT_MEDALLION] = HintText(CustomMessage("the Spirit Medallion", /*german*/"das Amulett der Geister", /*french*/"le Médaillon de l'Esprit"), // /*spanish*/el Medallón del Espíritu @@ -1610,8 +2070,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an orange coin", /*german*/"eine orangene Münze", /*french*/"une pièce orange"), // /*spanish*/una moneda ámbar - CustomMessage("Nabooru's power", /*german*/"Naborus Respekt", /*french*/"le respect de Nabooru")}); + CustomMessage("Nabooru's power", /*german*/"Naborus Respekt", /*french*/"le respect de Nabooru") // /*spanish*/el respeto de Nabooru + }, + CustomMessage("Spirit Medallion", "Amulett der Geister", "Médaillon de l'Esprit")); hintTextTable[RHT_SHADOW_MEDALLION] = HintText(CustomMessage("the Shadow Medallion", /*german*/"das Amulett des Schattens", /*french*/"le Médaillon de l'Ombre"), // /*spanish*/el Medallón de la Sombra @@ -1621,8 +2083,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a purple coin", /*german*/"eine violette Münze", /*french*/"une pièce pourpre"), // /*spanish*/una moneda malva - CustomMessage("Impa's power", /*german*/"Impas Vertrauen", /*french*/"la confiance d'Impa")}); + CustomMessage("Impa's power", /*german*/"Impas Vertrauen", /*french*/"la confiance d'Impa") // /*spanish*/la confianza de Impa + }, + CustomMessage("Shadow Medallion", "Amulett des Schattens", "Médaillon de l'Ombre")); hintTextTable[RHT_LIGHT_MEDALLION] = HintText(CustomMessage("the Light Medallion", /*german*/"das Amulett des Lichts", /*french*/"le Médaillon de la Lumière"), // /*spanish*/el Medallón de la Luz @@ -1632,8 +2096,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a yellow coin", /*german*/"eine gelbe Münze", /*french*/"une pièce jaune"), // /*spanish*/una moneda resplandeciente - CustomMessage("Rauru's power", /*german*/"Raurus Glaube", /*french*/"la foi de Rauru")}); + CustomMessage("Rauru's power", /*german*/"Raurus Glaube", /*french*/"la foi de Rauru") // /*spanish*/la fe de Rauru + }, + CustomMessage("Light Medallion", "Amulett des Lichts", "Médaillon de la Lumière")); hintTextTable[RHT_RECOVERY_HEART] = HintText(CustomMessage("a Recovery Heart", /*german*/"ein Herz", /*french*/"un coeur de vie"), // /*spanish*/un corazón @@ -1645,8 +2111,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una cura de regalo CustomMessage("a hearty meal", /*german*/"ein herzhaftes Mahl", /*french*/"un petit amour"), // /*spanish*/una sanación romántica - CustomMessage("a Band-Aid", /*german*/"ein Wundpflaster", /*french*/"un diachylon")}); + CustomMessage("a Band-Aid", /*german*/"ein Wundpflaster", /*french*/"un diachylon") // /*spanish*/un corazoncito sanador + }, + CustomMessage("Recovery Heart", "Herz", "Coeur de Vie")); hintTextTable[RHT_GREEN_RUPEE] = HintText(CustomMessage("a Green Rupee", /*german*/"ein grüner Rubin", /*french*/"un rubis vert"), // /*spanish*/una rupia verde @@ -1658,8 +2126,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una singular moneda CustomMessage("a penny", /*german*/"ein Pfennig", /*french*/"un sou"), // /*spanish*/un peso hyliano - CustomMessage("a green gem", /*german*/"ein grüner Edelstein", /*french*/"un joyau vert")}); + CustomMessage("a green gem", /*german*/"ein grüner Edelstein", /*french*/"un joyau vert") // /*spanish*/una gema verde + }, + CustomMessage("Green Rupee", "Grüner Rubin", "Rubis Vert")); hintTextTable[RHT_GREG_RUPEE] = HintText(CustomMessage("Greg", /*german*/"Greg", /*french*/"Greg"), // /*spanish*/Greg @@ -1669,8 +2139,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("an old friend", /*german*/"ein alter Freund", /*french*/"Greg"), // /*spanish*/Greg - CustomMessage("a glorious gem", /*german*/"ein glorioser Edelstein", /*french*/"Greg")}); + CustomMessage("a glorious gem", /*german*/"ein glorioser Edelstein", /*french*/"Greg") // /*spanish*/Greg + }, + CustomMessage("Greg the Green Rupee", "Greg der grüne Rubin", "Greg Rubin")); hintTextTable[RHT_BLUE_RUPEE] = HintText(CustomMessage("a Blue Rupee", /*german*/"ein blauer Rubin", /*french*/"un rubis bleu"), // /*spanish*/una rupia azul @@ -1680,8 +2152,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a common coin", /*german*/"eine gewöhnliche Münze", /*french*/"quelques sous"), // /*spanish*/una moneda usual - CustomMessage("a blue gem", /*german*/"ein blauer Edelstein", /*french*/"un joyau bleu")}); + CustomMessage("a blue gem", /*german*/"ein blauer Edelstein", /*french*/"un joyau bleu") // /*spanish*/una gema azul + }, + CustomMessage("Blue Rupee", "Blauer Rubin", "Rubis Bleu")); hintTextTable[RHT_RED_RUPEE] = HintText(CustomMessage("a Red Rupee", /*german*/"ein roter Rubin", /*french*/"un rubis rouge"), // /*spanish*/una rupia roja @@ -1691,8 +2165,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("couch cash", /*german*/"ein wenig Zaster", /*french*/"un peu de fric"), // /*spanish*/una buena moneda - CustomMessage("a red gem", /*german*/"ein roter Edelstein", /*french*/"un joyau rouge")}); + CustomMessage("a red gem", /*german*/"ein roter Edelstein", /*french*/"un joyau rouge") // /*spanish*/una gema roja + }, + CustomMessage("Red Rupee", "Roter Rubin", "Rubis Rouge")); hintTextTable[RHT_PURPLE_RUPEE] = HintText(CustomMessage("a Purple Rupee", /*german*/"ein violetter Rubin", /*french*/"un rubis pourpre"), // /*spanish*/una rupia morada @@ -1704,8 +2180,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/plata de calidad CustomMessage("a purple gem", /*german*/"ein violetter Edelstein", /*french*/"un joyau mauve"), // /*spanish*/una gema morada - CustomMessage("wealth", /*german*/"Wohlstand", /*french*/"la richesse")}); + CustomMessage("wealth", /*german*/"Wohlstand", /*french*/"la richesse") // /*spanish*/una buena riqueza + }, + CustomMessage("Purple Rupee", "Violetter Rubin", "Rubis Pourpre")); hintTextTable[RHT_HUGE_RUPEE] = HintText(CustomMessage("a Huge Rupee", /*german*/"ein goldener Rubin", /*french*/"un énorme rubis"), // /*spanish*/una rupia gigante @@ -1719,8 +2197,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/una gema amarilla CustomMessage("a giant gem", /*german*/"ein riesiger Edelstein", /*french*/"un gros joyau"), // /*spanish*/una gema descomunal - CustomMessage("great wealth", /*german*/"Reichtum", /*french*/"l'aisance financière")}); + CustomMessage("great wealth", /*german*/"Reichtum", /*french*/"l'aisance financière") // /*spanish*/dinero a caudales + }, + CustomMessage("Huge Rupee", "Goldener Rubin", "Énorme Rubis")); hintTextTable[RHT_PIECE_OF_HEART] = HintText(CustomMessage("a Piece of Heart", /*german*/"ein Herzteil", /*french*/"un Quart de Coeur"), // /*spanish*/una pieza de corazón @@ -1730,8 +2210,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a little love", /*german*/"ein wenig Liebe", /*french*/"un peu plus d'amour"), // /*spanish*/un cuarto de amor - CustomMessage("a broken heart", /*german*/"ein gebrochenes Herz", /*french*/"un coeur brisé")}); + CustomMessage("a broken heart", /*german*/"ein gebrochenes Herz", /*french*/"un coeur brisé") // /*spanish*/un corazón roto + }, + CustomMessage("Piece of Heart", "Herzteil", "Quart de Coeur")); hintTextTable[RHT_HEART_CONTAINER] = HintText(CustomMessage("a Heart Container", /*german*/"ein Herzcontainer", /*french*/"un Réceptacle de Coeur"), // /*spanish*/un contenedor de corazón @@ -1743,8 +2225,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/amor por doquier CustomMessage("a Valentine's gift", /*german*/"ein Valentinsgeschenk", /*french*/"un cadeau de Saint-Valentin"), // /*spanish*/un contenedor de afección - CustomMessage("a boss's organ", /*german*/"ein monströses Organ", /*french*/"un organe de monstre")}); + CustomMessage("a boss's organ", /*german*/"ein monströses Organ", /*french*/"un organe de monstre") // /*spanish*/los órganos de un jefe + }, + CustomMessage("Heart Container", "Herzcontainer", "Réceptacle de Coeur")); hintTextTable[RHT_ICE_TRAP] = HintText(CustomMessage("an Ice Trap", /*german*/"eine Eisfalle", /*french*/"un Piège de Glace"), // /*spanish*/una trampa de hielo @@ -1764,8 +2248,19 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un regalo de Ganon CustomMessage("a chilling discovery", /*german*/"eine kühle Entdeckung", /*french*/"une frissonante découverte"), // /*spanish*/un escalofriante hallazgo - CustomMessage("frosty fun", /*german*/"frostiger Spaß", /*french*/"une engelure")}); + CustomMessage("frosty fun", /*german*/"frostiger Spaß", /*french*/"une engelure") // /*spanish*/una gélida diversión + }, + CustomMessage("Ice Trap", "Eisfalle", "Piège de Glace")); + + + hintTextTable[RHT_MILK] = HintText(CustomMessage("some Milk", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Milk", "Lon Lon-Milch", "Lait")); + + hintTextTable[RHT_FISH] = HintText(CustomMessage("a Fish", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Fish", "Fisch", "Poisson")); hintTextTable[RHT_BOMBS_5] = HintText(CustomMessage("Bombs (5 pieces)", /*german*/"Bomben (5 Stück)€", /*french*/"une demi-dizaine de bombes"), // /*spanish*/unas (5) bombas @@ -1775,8 +2270,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a few explosives", /*german*/"wenig Explosives", /*french*/"une poignée de pétards"), // /*spanish*/un par de explosivos - CustomMessage("a few blast balls", /*german*/"ein paar Explosionskugeln€", /*french*/"une poignée de boules bleues")}); + CustomMessage("a few blast balls", /*german*/"ein paar Explosionskugeln€", /*french*/"une poignée de boules bleues") // /*spanish*/un par de estallidos + }, + CustomMessage("Bombs (5)", "Bomben (5)", "Bombes (5)")); hintTextTable[RHT_BOMBS_10] = HintText(CustomMessage("Bombs (10 pieces)", /*german*/"Bomben (10 Stück)€", /*french*/"une dizaine de bombes"), // /*spanish*/unas (10) bombas @@ -1786,8 +2283,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("some explosives", /*german*/"etwas Explosives", /*french*/"un paquet de pétards"), // /*spanish*/unos cuantos explosivos - CustomMessage("some blast balls", /*german*/"einige Explosionskugeln€", /*french*/"un paquet de boules bleues")}); + CustomMessage("some blast balls", /*german*/"einige Explosionskugeln€", /*french*/"un paquet de boules bleues") // /*spanish*/unos cuantos estallidos + }, + CustomMessage("Bombs (10)", "Bomben (10)", "Bombes (10)")); hintTextTable[RHT_BOMBS_20] = HintText(CustomMessage("Bombs (20 pieces)", /*german*/"Bomben (20 Stück)€", /*french*/"une vingtaine de bombes"), // /*spanish*/unas (20) bombas @@ -1797,8 +2296,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("lots-o-explosives", /*german*/"viel Explosives", /*french*/"une abondance de pétards"), // /*spanish*/un puñado de explosivos - CustomMessage("plenty of blast balls", /*german*/"viele Explosionskugeln€", /*french*/"une abondance de boules bleues")}); + CustomMessage("plenty of blast balls", /*german*/"viele Explosionskugeln€", /*french*/"une abondance de boules bleues") // /*spanish*/bastantes estallidos + }, + CustomMessage("Bombs (20)", "Bomben (20)", "Bombes (20)")); hintTextTable[RHT_BOMBCHUS_5] = HintText(CustomMessage("Bombchus (5 pieces)", /*german*/"Krabbelminen (5 Stück)€", /*french*/"une demi-dizaine de Missiles"), // /*spanish*/unos (5) bombchus @@ -1814,8 +2315,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un par de explosivos ratoncitos CustomMessage("a few wall crawlers", /*german*/"ein paar Wandkrabbler€", /*french*/"une poignée de rapides grimpeurs"), // /*spanish*/un par de trepaparedes - CustomMessage("a few trail blazers", /*german*/"ein paar Vorreiter€", /*french*/"une poignée de zigzags éclatants")}); + CustomMessage("a few trail blazers", /*german*/"ein paar Vorreiter€", /*french*/"une poignée de zigzags éclatants") // /*spanish*/un par de ratas propulsadas + }, + CustomMessage("Bombchus (5)", "Krabbelminen (5)", "Missiles (5)")); hintTextTable[RHT_BOMBCHUS_10] = HintText(CustomMessage("Bombchus (10 pieces)", /*german*/"Krabbelminen (10 Stück)€", /*french*/"une dizaine de Missiles"), // /*spanish*/unos (10) bombchus @@ -1831,8 +2334,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/unos cuantos explosivos ratoncitos CustomMessage("some wall crawlers", /*german*/"einige Wandkrabbler€", /*french*/"un paquet de rapides grimpeurs"), // /*spanish*/unos cuantos trepaparedes - CustomMessage("some trail blazers", /*german*/"einige Vorreiter€", /*french*/"un paquet de zigzags éclatants")}); + CustomMessage("some trail blazers", /*german*/"einige Vorreiter€", /*french*/"un paquet de zigzags éclatants") // /*spanish*/unas cuantas ratas propulsadas + }, + CustomMessage("Bombchus (10)", "Krabbelminen (10)", "Missiles (10)")); hintTextTable[RHT_BOMBCHUS_20] = HintText(CustomMessage("Bombchus (20 pieces)", /*german*/"Krabbelminen (20 Stück)€", /*french*/"une vingtaine de Missiles"), // /*spanish*/unos (20) bombchus @@ -1848,8 +2353,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/bastantes explosivos ratoncitos CustomMessage("plenty of wall crawlers", /*german*/"viele Wandkrabbler€", /*french*/"une abondance de rapides grimpeurs"), // /*spanish*/bastantes trepaparedes - CustomMessage("plenty of trail blazers", /*german*/"viele Vorreiter€", /*french*/"une abondance de zigzags éclatants")}); + CustomMessage("plenty of trail blazers", /*german*/"viele Vorreiter€", /*french*/"une abondance de zigzags éclatants") // /*spanish*/bastantes ratas propulsadas + }, + CustomMessage("Bombchus (20)", "Krabbelminen (20)", "Missiles (20)")); hintTextTable[RHT_ARROWS_5] = HintText(CustomMessage("Arrows (5 pieces)", /*german*/"Pfeile (5 Stück)€", /*french*/"une demi-dizaine de flèches"), // /*spanish*/unas (5) flechas @@ -1859,8 +2366,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a few danger darts", /*german*/"ein paar gefährliche Spitzen€", /*french*/"une poignée d'obus"), // /*spanish*/un par de peligrosos dardos - CustomMessage("a few sharp shafts", /*german*/"ein paar scharfe Stifte€", /*french*/"une poignée de piquets")}); + CustomMessage("a few sharp shafts", /*german*/"ein paar scharfe Stifte€", /*french*/"une poignée de piquets") // /*spanish*/un par de puntas afiladas + }, + CustomMessage("Arrows (5)", "Pfeile (5)", "Flèches (5)")); hintTextTable[RHT_ARROWS_10] = HintText(CustomMessage("Arrows (10 pieces)", /*german*/"Pfeile (10 Stück)€", /*french*/"une dizaine de flèches"), // /*spanish*/unas (10) flechas @@ -1870,8 +2379,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("some danger darts", /*german*/"einige gefährliche Spitzen€", /*french*/"un paquet d'obus"), // /*spanish*/unos cuantos peligrosos dardos - CustomMessage("some sharp shafts", /*german*/"einige scharfe Stifte€", /*french*/"un paquet de piquets")}); + CustomMessage("some sharp shafts", /*german*/"einige scharfe Stifte€", /*french*/"un paquet de piquets") // /*spanish*/unas cuantas puntas afiladas + }, + CustomMessage("Arrows (10)", "Pfeile (10)", "Flèches (10)")); hintTextTable[RHT_ARROWS_30] = HintText(CustomMessage("Arrows (30 pieces)", /*german*/"Pfeile (30 Stück)€", /*french*/"une trentaine de flèches"), // /*spanish*/unas (30) flechas @@ -1881,8 +2392,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("plenty of danger darts", /*german*/"viele gefährliche Spitzen€", /*french*/"une abondance d'obus"), // /*spanish*/bastantes peligrosos dardos - CustomMessage("plenty of sharp shafts", /*german*/"viele scharfe Stifte€", /*french*/"une abondance de piquets")}); + CustomMessage("plenty of sharp shafts", /*german*/"viele scharfe Stifte€", /*french*/"une abondance de piquets") // /*spanish*/bastantes puntas afiladas + }, + CustomMessage("Arrows (30)", "Pfeile (30)", "Flèches (30)")); hintTextTable[RHT_DEKU_NUTS_5] = HintText(CustomMessage("Deku Nuts (5 pieces)", /*german*/"Deku-Nüsse (5 Stück)€", /*french*/"une demi-dizaine de noix Mojo"), // /*spanish*/unas (5) nueces deku @@ -1896,8 +2409,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un par de nueces CustomMessage("some flashbangs", /*german*/"ein paar Blendgranaten€", /*french*/"une poignée d'éclats"), // /*spanish*/un par de semillas aturdidoras - CustomMessage("some scrub spit", /*german*/"etwas Deku-Spucke€", /*french*/"une poignée de crachats Mojo")}); + CustomMessage("some scrub spit", /*german*/"etwas Deku-Spucke€", /*french*/"une poignée de crachats Mojo") // /*spanish*/un par de escupitajos deku + }, + CustomMessage("Deku Nuts (5)", "Deku-Nüsse (5)", "Noix Mojo (5)")); hintTextTable[RHT_DEKU_NUTS_10] = HintText(CustomMessage("Deku Nuts (10 pieces)", /*german*/"Deku-Nüsse (10 Stück)€", /*french*/"une dizaine de noix Mojo"), // /*spanish*/unas (10) nueces deku @@ -1911,8 +2426,10 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un puñado de nueces CustomMessage("plenty of flashbangs", /*german*/"einige Blendgranaten€", /*french*/"un paquet d'éclats"), // /*spanish*/unas cuantas semillas aturdidoras - CustomMessage("plenty of scrub spit", /*german*/"einiges an Deku-Spucke€", /*french*/"un paquet de crachats Mojo")}); + CustomMessage("plenty of scrub spit", /*german*/"einiges an Deku-Spucke€", /*french*/"un paquet de crachats Mojo") // /*spanish*/unos cuantos escupitajos deku + }, + CustomMessage("Deku Nuts (10)", "Deku-Nüsse (10)", "Noix Mojo (10)")); hintTextTable[RHT_DEKU_SEEDS_30] = HintText(CustomMessage("Deku Seeds (30 pieces)", /*german*/"Deku-Kerne (30 Stück)€", /*french*/"une trentaine de graines Mojo"), // /*spanish*/unas (30) semillas deku @@ -1924,8 +2441,10 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("catapult ammo", /*german*/"Katapultmunition", /*french*/"un paquet de délicieuses munitions"), // /*spanish*/un par de munición infantil - CustomMessage("lots-o-seeds", /*german*/"viele Kerne€", /*french*/"un paquet de germes séchés")}); + CustomMessage("lots-o-seeds", /*german*/"viele Kerne€", /*french*/"un paquet de germes séchés") // /*spanish*/un puñado de semillas + }, + CustomMessage("Deku Seeds (30)", "Deku-Kerne (30)", "Graines Mojo (30)")); hintTextTable[RHT_DEKU_STICK_1] = HintText(CustomMessage("a Deku Stick", /*german*/"ein Deku-Stab", /*french*/"un bâton Mojo"), // /*spanish*/un palo deku @@ -1933,26 +2452,164 @@ void StaticData::HintTable_Init_Item() { CustomMessage("some Deku munitions", /*german*/"etwas Deku-Munition", /*french*/"un paquet de munitions Mojo") // /*spanish*/un montón de municiones Deku }, { - CustomMessage("a breakable branch", /*german*/"ein brüchiger Zweig", /*french*/"un bout de bois")}); + CustomMessage("a breakable branch", /*german*/"ein brüchiger Zweig", /*french*/"un bout de bois") // /*spanish*/un pequeño báculo + }, + CustomMessage("Deku Stick (1)", "Deku-Stab (1)", "Bâton Mojo (1)")); - hintTextTable[RHT_TREASURE_GAME_HEART] = HintText(CustomMessage("a Piece of Heart", /*german*/"ein Herzteil", /*french*/"un Quart de Coeur"), + hintTextTable[RHT_RED_POTION_REFILL] = HintText(CustomMessage("some Red Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Red Potion Refill", "Rotes Elixier", "Recharge de Potion Rouge")); + + hintTextTable[RHT_GREEN_POTION_REFILL] = HintText(CustomMessage("some Green Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Green Potion Refill", "Grünes Elixier", "Recharge de Potion Verte")); + + hintTextTable[RHT_BLUE_POTION_REFILL] = HintText(CustomMessage("some Blue Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Blue Potion Refill", "Blaues Elixier", "Recharge de Potion Bleue")); + + hintTextTable[RHT_TCG_PIECE_OF_HEART] = HintText(CustomMessage("a Piece of Heart", /*german*/"ein Herzteil", /*french*/"un Quart de Coeur"), // /*spanish*/el amor de la victoria { CustomMessage("something heart-shaped", /*german*/"etwas Herzförmiges", /*french*/"une chose en forme de coeur") // /*spanish*/algo con forma de corazón }, { - CustomMessage("a victory valentine", /*german*/"ein siegreicher Valentin", /*french*/"un amour gagnant")}); + CustomMessage("a victory valentine", /*german*/"ein siegreicher Valentin", /*french*/"un amour gagnant") // /*spanish*/el amor victorioso + }, + CustomMessage("Piece of Heart (WINNER)", "Herzteil (Truhenlotterie)", "Quart de Coeur (Chasse-aux-Trésors)")); - hintTextTable[RHT_TREASURE_GAME_GREEN_RUPEE] = HintText(CustomMessage("a Green Rupee", /*german*/"ein grüner Rubin", /*french*/"un rubis vert"), - // /*spanish*/una rupia verde - { - CustomMessage("some rupees", /*german*/"einige Rubine€", /*french*/"une quantité de rubis") - // /*spanish*/una cantidad de rupias - }, { - CustomMessage("the dollar of defeat", /*german*/"der Rubin der Niederlage", /*french*/"le rubis de la défaite")}); - // /*spanish*/el peso de la derrota + hintTextTable[RHT_LOSER_GREEN_RUPEE] = HintText(CustomMessage("a Green Rupee", /*german*/"ein grüner Rubin", /*french*/"un rubis vert"), + // /*spanish*/una rupia verde + { + CustomMessage("some rupees", /*german*/"einige Rubine€", /*french*/"une quantité de rubis") + // /*spanish*/una cantidad de rupias + }, { + CustomMessage("the dollar of defeat", /*german*/"der Rubin der Niederlage", /*french*/"le rubis de la défaite") + // /*spanish*/el peso de la derrota + }, + CustomMessage("Green Rupee (LOSER)", "Grüner Rubin (Truhenlotterie)", "Rubis Vert (Chasse-aux-Trésors)")); + + hintTextTable[RHT_BUY_DEKU_NUTS_5] = HintText(CustomMessage("Deku Nuts", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Deku Nut (5)", "Deku-Nüsse kaufen (5)", "Acheter: Noix Mojo (5)")); + + hintTextTable[RHT_BUY_ARROWS_30] = HintText(CustomMessage("Arrows", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Arrows (30)", "Pfeile kaufen (30)", "Acheter: Flèches (30)")); + + hintTextTable[RHT_BUY_ARROWS_50] = HintText(CustomMessage("Arrows", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Arrows (50)", "Pfeile kaufen (50)", "Acheter: Flèches (50)")); + + hintTextTable[RHT_BUY_BOMBS_525] = HintText(CustomMessage("cheap Bombs", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombs (5) [25]", "Bomben kaufen (5) [25]", "Acheter: Bombes (5) [25]")); + + hintTextTable[RHT_BUY_DEKU_NUTS_10] = HintText(CustomMessage("Deku Nuts", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Deku Nut (10)", "Deku-Nüsse kaufen (10)", "Acheter: Noix Mojo (10)")); + + hintTextTable[RHT_BUY_DEKU_STICK_1] = HintText(CustomMessage("Deku Sticks", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Deku-Stab kaufen (1)")); + + hintTextTable[RHT_BUY_BOMBS_10] = HintText(CustomMessage("Bombs", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombs (10)", "Bomben kaufen (10)", "Acheter: Bombes (10)")); + + hintTextTable[RHT_BUY_FISH] = HintText(CustomMessage("Fish", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Fish", "Fisch kaufen", "Acheter: Poisson")); + + hintTextTable[RHT_BUY_RED_POTION_30] = HintText(CustomMessage("cheap Red Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Red Potion [30]", "Rotes Elixier kaufen [30]", "Acheter: Potion Rouge [30]")); + + hintTextTable[RHT_BUY_GREEN_POTION] = HintText(CustomMessage("Green Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Green Potion", "Grünes Elixier kaufen", "Acheter: Potion Verte")); + + hintTextTable[RHT_BUY_BLUE_POTION] = HintText(CustomMessage("Blue Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Blue Potion", "Blaues Elixier kaufen", "Acheter: Potion Bleue")); + + hintTextTable[RHT_BUY_HYLIAN_SHIELD] = HintText(CustomMessage("Hylian Shields", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Hylian Shield", "Hylia-Schild kaufen", "Acheter: Bouclier Hylien")); + + hintTextTable[RHT_BUY_DEKU_SHIELD] = HintText(CustomMessage("Deku Shields", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Deku Shield", "Deku-Schild kaufen", "Acheter: Bouclier Mojo")); + + hintTextTable[RHT_BUY_GORON_TUNIC] = HintText(CustomMessage("Goron Tunics", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Goron Tunic", "Goronen-Rüstung kaufen", "Acheter: Tunique Goron")); + + hintTextTable[RHT_BUY_ZORA_TUNIC] = HintText(CustomMessage("Zora Tunics", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Zora Tunic", "Zora-Rüstung kaufen", "Acheter: Tunique Zora")); + + hintTextTable[RHT_BUY_HEART] = HintText(CustomMessage("Recovery Hearts", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Heart", "Herz kaufen", "Acheter: Coeur de Vie")); + + hintTextTable[RHT_BUY_BOMBCHUS_10] = HintText(CustomMessage("Bombchus", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombchu (10)", "Krabbelminen kaufen (10)", "Acheter: Missiles (10)")); + + hintTextTable[RHT_BUY_BOMBCHUS_20] = HintText(CustomMessage("Bulk Bombchus", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombchu (20)", "Krabbelminen kaufen (20)", "Acheter: Missiles (20)")); + + hintTextTable[RHT_BUY_DEKU_SEEDS_30] = HintText(CustomMessage("Deku Seeds", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Deku Seeds (30)", "Deku-Kerne kaufen (30)", "Acheter: Graines Mojo (30)")); + + hintTextTable[RHT_SOLD_OUT] = HintText(CustomMessage("Nothing", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Sold Out", "Ausverkauft", "Rupture de stock")); + + hintTextTable[RHT_BUY_BLUE_FIRE] = HintText(CustomMessage("Blue Fire", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Blue Fire", "Blaues Feuer kaufen", "Acheter: Flamme Bleue")); + + hintTextTable[RHT_BUY_BOTTLE_BUG] = HintText(CustomMessage("Bugs", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bottle Bug", "Käfer kaufen", "Acheter: Insecte en bouteille")); + + hintTextTable[RHT_BUY_POE] = HintText(CustomMessage("Poes", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Poe", "Irrlicht kaufen", "Acheter: Esprit")); + + hintTextTable[RHT_BUY_FAIRYS_SPIRIT] = HintText(CustomMessage("Fairies", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Fairy's Spirit", "Fee kaufen", "Acheter: Esprit de Fée")); + + hintTextTable[RHT_BUY_ARROWS_10] = HintText(CustomMessage("Arrows", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Arrows (10)", "Pfeile kaufen (10)", "Acheter: Flèches (10)")); + + hintTextTable[RHT_BUY_BOMBS_20] = HintText(CustomMessage("Bombs", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombs (20)", "Bomben kaufen (20)", "Acheter: Bombes (20)")); + + hintTextTable[RHT_BUY_BOMBS_30] = HintText(CustomMessage("bulk Bombs", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombs (30)", "Bomben kaufen (30)", "Acheter: Bombes (30)")); + + hintTextTable[RHT_BUY_BOMBS_535] = HintText(CustomMessage("pricy Bombs", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Bombs (5) [35]", "Bomben kaufen (5) [35]", "Acheter: Bombes (5) [35]")); + + hintTextTable[RHT_BUY_RED_POTION_40] = HintText(CustomMessage("Red Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Red Potion [40]", "Rotes Elixier kaufen [40]", "Acheter: Potion Rouge [40]")); + + hintTextTable[RHT_BUY_RED_POTION_50] = HintText(CustomMessage("pricy Red Potion", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Buy Red Potion [50]", "Rotes Elixier kaufen [50]", "Acheter: Potion Rouge [50]")); hintTextTable[RHT_TRIFORCE_PIECE] = HintText(CustomMessage("a Piece of the Triforce", /*german*/"ein Triforce-Splitter", /*french*/"un fragment de la Triforce"), // /*spanish*/un fragmento de la Trifuerza @@ -1961,29 +2618,37 @@ void StaticData::HintTable_Init_Item() { // /*spanish*/un trígono del triunfo CustomMessage("cheese", /*german*/"Käse", /*french*/"du fromage"), // /*spanish*/un porción de queso - CustomMessage("a gold fragment", /*german*/"ein Goldfragment", /*french*/"un fragment d'or")}); + CustomMessage("a gold fragment", /*german*/"ein Goldfragment", /*french*/"un fragment d'or") // /*spanish*/un fragmento dorado + }, + CustomMessage("Triforce Piece", "Triforce-Splitter", "Triforce Piece")); hintTextTable[RHT_GOHMA_SOUL] = HintText(CustomMessage("the soul of Gohma", /*german*/"Gohmas Seele", /*french*/"l'Âme de Gohma"), { CustomMessage("something webbed", /*german*/"etwas Verwobenes", /*french*/"un truc entoilé") }, { CustomMessage("an invasive soul", /*german*/"eine parasitäre Seele", /*french*/"une âme invasive"), - CustomMessage("some spider essence", /*german*/"etwas spinnenartige Essenz", /*french*/"une essence d'araignée")}); + CustomMessage("some spider essence", /*german*/"etwas spinnenartige Essenz", /*french*/"une essence d'araignée") + }, + CustomMessage("Gohma's Soul", "Gohmas Seele", "Âme de Gohma")); hintTextTable[RHT_KING_DODONGO_SOUL] = HintText(CustomMessage("the soul of King Dodongo", /*german*/"König Dodongos Seele", /*french*/"l'Âme du Roi Dodongo"), { CustomMessage("something explosive", /*german*/"etwas Explosives", /*french*/"un truc détonnant") }, { CustomMessage("a royal soul", /*german*/"eine königliche Seele", /*french*/"une âme royale"), - CustomMessage("some reptile essence", /*german*/"etwas reptilienartige Essenz", /*french*/"une essence de reptile")}); + CustomMessage("some reptile essence", /*german*/"etwas reptilienartige Essenz", /*french*/"une essence de reptile") + }, + CustomMessage("King Dodongo's Soul", "König Dodongos Seele", "Âme du Roi Dodongo")); hintTextTable[RHT_BARINADE_SOUL] = HintText(CustomMessage("the soul of Barinade", /*german*/"Barinades Seele", /*french*/"l'Âme de Barinade"), { CustomMessage("something fishy", /*german*/"etwas Fischiges", /*french*/"un truc gluant") }, { CustomMessage("an infectuous soul", /*german*/"eine infektiöse Seele", /*french*/"une âme infectieuse"), - CustomMessage("some parasitic essence", /*german*/"etwas elektrische Essenz", /*french*/"une essence parasitique")}); + CustomMessage("some parasitic essence", /*german*/"etwas elektrische Essenz", /*french*/"une essence parasitique") + }, + CustomMessage("Barinade's Soul", "Barinades Seele", "Âme de Barinade")); hintTextTable[RHT_PHANTOM_GANON_SOUL] = HintText(CustomMessage("the soul of Phantom Ganon", /*german*/"Phantom-Ganons Seele", /*french*/"l'Âme de Ganon Spectral"), { @@ -1991,35 +2656,45 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a duplicate soul", /*german*/"eine duplizierte Seele", /*french*/"une âme clonée"), - CustomMessage("some illusionary essence", /*german*/"etwas illusionäre Essenz", /*french*/"une essence illusoire")}); + CustomMessage("some illusionary essence", /*german*/"etwas illusionäre Essenz", /*french*/"une essence illusoire") + }, + CustomMessage("Phantom Ganon's Soul", "Phantom-Ganons Seele", "Âme de Ganon Spectral")); hintTextTable[RHT_VOLVAGIA_SOUL] = HintText(CustomMessage("the soul of Volvagia", /*german*/"Volvagias Seele", /*french*/"l'Âme de Volcania"), { CustomMessage("something hot", /*german*/"etwas Heißes", /*french*/"quelque chose de très chaud") }, { CustomMessage("a draconic soul", /*german*/"eine drakonische Seele", /*french*/"une essence draconique"), - CustomMessage("some magmatic essence", /*german*/"etwas magmatische Essenz", /*french*/"une essence magmatique")}); + CustomMessage("some magmatic essence", /*german*/"etwas magmatische Essenz", /*french*/"une essence magmatique") + }, + CustomMessage("Volvagia's Soul", "Volvagias Seele", "Âme de Volcania")); hintTextTable[RHT_MORPHA_SOUL] = HintText(CustomMessage("the soul of Morpha", /*german*/"Morphas Seele", /*french*/"l'Âme de Morpha"), { CustomMessage("something wet", /*german*/"etwas Nasses", /*french*/"un truc mouillé") }, { CustomMessage("an aquatic soul", /*german*/"eine aquatische Seele", /*french*/"une âme aquatique"), - CustomMessage("some liquid essence", /*german*/"etwas flüssige Essenz", /*french*/"une essence liquide")}); + CustomMessage("some liquid essence", /*german*/"etwas flüssige Essenz", /*french*/"une essence liquide") + }, + CustomMessage("Morpha's Soul", "Morphas Seele", "Âme de Morpha")); hintTextTable[RHT_BONGO_BONGO_SOUL] = HintText(CustomMessage("the soul of Bongo Bongo", /*german*/"Bongo Bongos Seele", /*french*/"l'Âme de Bongo Bongo"), { CustomMessage("something dark", /*german*/"etwas Dunkles", /*french*/"quelque chose de sombre") }, { CustomMessage("a shadowy soul", /*german*/"eine schattige Seele", /*french*/"une âme ténébreuse"), - CustomMessage("some handy essence", /*german*/"etwas bestialische Essenz", /*french*/"l'âme du tape m'en cinq")}); + CustomMessage("some handy essence", /*german*/"etwas bestialische Essenz", /*french*/"l'âme du tape m'en cinq") + }, + CustomMessage("Bongo Bongo's Soul", "Bongo Bongos Seele", "Âme de Bongo Bongo")); hintTextTable[RHT_TWINROVA_SOUL] = HintText(CustomMessage("the soul of Twinrova", /*german*/"Twinrovas Seele", /*french*/"l'Âme du Duo Maléfique"), { CustomMessage("something spiritual", /*german*/"etwas Geisterhaftes", /*french*/"un truc spirituel") }, { CustomMessage("old souls", /*german*/"alte Seelen", /*french*/"deux vieilles âmes"), - CustomMessage("twin essences", /*german*/"Zwillingsessenzen€", /*french*/"des essences jumelles")}); + CustomMessage("twin essences", /*german*/"Zwillingsessenzen€", /*french*/"des essences jumelles") + }, + CustomMessage("Twinrova's Soul", "Twinrovas Seele", "Âme du Duo Maléfique")); hintTextTable[RHT_GANON_SOUL] = HintText(CustomMessage("the soul of Ganon", /*german*/"Ganons Seele", /*french*/"l'Âme de Ganon"), { @@ -2028,14 +2703,16 @@ void StaticData::HintTable_Init_Item() { CustomMessage("an evil soul", /*german*/"eine böse Seele", /*french*/"une âme maléfique"), CustomMessage("some powerful essence", /*german*/"etwas mächtige Essenz", /*french*/"une essence incroyablement puissante")}); - hintTextTable[RHT_OCARINA_A_BUTTON] = HintText(CustomMessage("an Ocarina A Button", /*german*/"die A-Taste der Okarina", /*french*/"la Touche A de l'Ocarina"), + hintTextTable[RHT_OCARINA_A_BUTTON] = HintText(CustomMessage("an Ocarina A Button", /*german*/"eine Okarina A Taste", /*french*/"la Touche A de l'Ocarina"), // /*spanish*/un botón A de Ocarina { CustomMessage("something melodic", /*german*/"etwas Melodisches", /*french*/"quelque chose de mélodieux") // /*spanish*/algo melódico }, { - CustomMessage("a musical letter", /*german*/"ein musikalischer Brief", /*french*/"une lettre musicale")}); + CustomMessage("a musical letter", /*german*/"ein musikalischer Brief", /*french*/"une lettre musicale") // /*spanish*/una letra musical + }, + CustomMessage("Ocarina A Button", "A-Taste der Okarina", "Touche A de l'Ocarina")); hintTextTable[RHT_OCARINA_C_UP_BUTTON] = HintText(CustomMessage("an Ocarina C Up Button", /*german*/"die C-Oben-Taste der Okarina", /*french*/"la Touche C-Haut de l'Ocarina"), // /*spanish*/un botón C superior de Ocarina @@ -2043,8 +2720,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("something melodic", /*german*/"etwas Melodisches", /*french*/"quelque chose de mélodieux") // /*spanish*/algo melódico }, { - CustomMessage("a high tone", /*german*/"ein hoher Ton", /*french*/"une tonalité élevée")}); + CustomMessage("a high tone", /*german*/"ein hoher Ton", /*french*/"une tonalité élevée") // /*spanish*/un tono alto + }, + CustomMessage("Ocarina C Up Button", "C-Oben-Taste der Okarina", "Touche C-Haut de l'Ocarina")); hintTextTable[RHT_OCARINA_C_DOWN_BUTTON] = HintText(CustomMessage("an Ocarina C Down Button", /*german*/"die C-Unten-Taste der Okarina", /*french*/"la Touche C-Bas de l'Ocarina"), // /*spanish*/un botón C inferior de Ocarina @@ -2052,8 +2731,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("something melodic", /*german*/"etwas Melodisches", /*french*/"quelque chose de mélodieux") // /*spanish*/algo melódico }, { - CustomMessage("a low tone", /*german*/"ein tiefer Ton", /*french*/"une tonalité basse")}); + CustomMessage("a low tone", /*german*/"ein tiefer Ton", /*french*/"une tonalité basse") // /*spanish*/un tono bajo + }, + CustomMessage("Ocarina C Down Button", "C-Unten-Taste der Okarina", "Touche C-Bas de l'Ocarina")); hintTextTable[RHT_OCARINA_C_LEFT_BUTTON] = HintText(CustomMessage("an Ocarina C Left Button", /*german*/"die C-Links-Taste der Okarina", /*french*/"la Touche C-Gauche de l'Ocarina"), // /*spanish*/un botón C izquierdo de Ocarina @@ -2061,8 +2742,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("something melodic", /*german*/"etwas Melodisches", /*french*/"quelque chose de mélodieux") // /*spanish*/algo melódico }, { - CustomMessage("a leftward tone", /*german*/"ein linksseitiger Ton", /*french*/"une tonalité vers la gauche")}); + CustomMessage("a leftward tone", /*german*/"ein linksseitiger Ton", /*french*/"une tonalité vers la gauche") // /*spanish*/un tono hacia la izquierda + }, + CustomMessage("Ocarina C Left Button", "C-Links-Taste der Okarina", "Touche C-Gauche de l'Ocarina")); hintTextTable[RHT_OCARINA_C_RIGHT_BUTTON] = HintText(CustomMessage("an Ocarina C Right Button", /*german*/"die C-Rechts-Taste der Okarina", /*french*/"la Touche C-Droit de l'Ocarina"), // /*spanish*/un botón C derecho de Ocarina @@ -2070,8 +2753,10 @@ void StaticData::HintTable_Init_Item() { CustomMessage("something melodic", /*german*/"etwas Melodisches", /*french*/"quelque chose de mélodieux") // /*spanish*/algo melódico }, { - CustomMessage("a rightward tone", /*german*/"ein rechtsseitiger Ton", /*french*/"une tonalité vers la droite")}); + CustomMessage("a rightward tone", /*german*/"ein rechtsseitiger Ton", /*french*/"une tonalité vers la droite") // /*spanish*/un tono hacia la derecha + }, + CustomMessage("Ocarina C Right Button", "C-Rechts-Taste der Okarina", "Touche C-Droit de l'Ocarina")); hintTextTable[RHT_FISHING_POLE] = HintText(CustomMessage("a fishing pole", /*german*/"eine Angelrute", /*french*/"une canne à pêche"), // /*spanish*/caña de pescar @@ -2084,38 +2769,58 @@ void StaticData::HintTable_Init_Item() { hintTextTable[RHT_BOMBCHU_BAG] = HintText(CustomMessage("a Bombchu Bag", /*german*/"eine Krabbelminentasche", /*french*/"un Sac de Missiles Teigneux"), { - CustomMessage("explosives", /*german*/"Explosives", /*french*/"un paquet d'explosifs"), + CustomMessage("explosives", /*german*/"Explosives", /*french*/"un paquet d'explosifs"), // /*spanish*/un montón de explosivos - CustomMessage("something that can remove boulders", /*german*/"etwas zum Geröll entfernen", /*french*/"une chose qui enlève les rochers") + CustomMessage("something that can remove boulders", /*german*/"etwas zum Geröll entfernen", /*french*/"une chose qui enlève les rochers") // /*spanish*/algo que pueda quitar rocas }, { - CustomMessage("sack of mice", /*german*/"ein Sack Mäuse", /*french*/"un Sac rempli de souris")}); + CustomMessage("sack of mice", /*german*/"ein Sack Mäuse", /*french*/"un Sac rempli de souris") + }, + CustomMessage("Bombchu Bag", "Krabbelminentasche", TODO_TRANSLATE)); hintTextTable[RHT_SKELETON_KEY] = HintText(CustomMessage("a Skeleton Key", /*german*/ "der Skelettschlüssel", /*french*/ "une Clé Squelette"), // /*spanish*/una Llave Maestra { CustomMessage("a key", /*german*/ "ein Schlüssel", /*french*/ "une clé") // /*spanish*/una llave - }, - { CustomMessage("a master unlocker", /*german*/ "ein Meisterentsperrer", /*french*/ "un Kit de Déverrouillage") }); + }, { + CustomMessage("a master unlocker", /*german*/ "ein Meisterentsperrer", /*french*/ "un Kit de Déverrouillage") // /*spanish*/un desbloqueador maestro + }, + CustomMessage("Skeleton Key", "Skelettschlüssel", "Clé Squelette")); - //RANDOTODO if these are ever used for anything other than name, they want abscure and ambiguous hints - hintTextTable[RHT_QUIVER_INF] = HintText(CustomMessage("an infinite Quiver", /*german*/"der unendliche Köcher", /*french*/"un Carquois Infini")); - hintTextTable[RHT_BOMB_BAG_INF] = HintText(CustomMessage("an infinite Bomb Bag", /*german*/"die unendliche Bombentasche", /*french*/"un Sac de Bombe sans fond")); + hintTextTable[RHT_QUIVER_INF] = HintText(CustomMessage("an infinite Quiver", /*german*/"der unendliche Köcher", /*french*/"un Carquois Infini"), + {}, {}, + CustomMessage("Infinite Quiver", "Unendlicher Köcher", "Carquois Infini")); - hintTextTable[RHT_BULLET_BAG_INF] = HintText(CustomMessage("an infinite Bullet Bag", /*german*/"die unendliche Munitionstasche", /*french*/"un Sac de Graine sans fond")); + hintTextTable[RHT_BOMB_BAG_INF] = HintText(CustomMessage("an infinite Bomb Bag", /*german*/"die unendliche Bombentasche", /*french*/"un Sac de Bombe sans fond"), + {}, {}, + CustomMessage("Infinite Bomb Bag", "Unendliche Bombentasche", "Sac de Bombes Infini")); - hintTextTable[RHT_STICK_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Sticks", /*german*/"unendliche Deku-Stab-Kapazität", /*french*/"des Bâtons Mojo illimités")); + hintTextTable[RHT_BULLET_BAG_INF] = HintText(CustomMessage("an infinite Bullet Bag", /*german*/"die unendliche Munitionstasche", /*french*/"un Sac de Graine sans fond"), + {}, {}, + CustomMessage("Infinite Bullet Bag", "Unendliche Munitionstasche", "Sac de Graines Infinis")); - hintTextTable[RHT_NUT_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Nuts", /*german*/"unendliche Deku-Nuß-Kapazität", /*french*/"des Noix Mojo illimitées")); + hintTextTable[RHT_STICK_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Sticks", /*german*/"unendliche Deku-Stab-Kapazität", /*french*/"des Bâtons Mojo illimités"), + {}, {}, + CustomMessage("Infinite Stick Capacity", "Unendliche Deku-Stab-Kapazität", "Bâtons Mojo Infinis")); - hintTextTable[RHT_MAGIC_INF] = HintText(CustomMessage("unlimited Magic", /*german*/"unendliche Magische Kraft", /*french*/"de la Magie infinie")); + hintTextTable[RHT_NUT_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Nutss", /*german*/"unendliche Deku-Nuß-Kapazität", /*french*/"des Noix Mojo illimitées"), + {}, {}, + CustomMessage("Infinite Nut Capacity", "Unendliche Deku-Nuß-Kapazität", "Noix Mojo Infinies")); - hintTextTable[RHT_BOMBCHU_INF] = HintText(CustomMessage("infinite Bombchus", /*german*/"die unendliche Krabbelminentasche", /*french*/"des Missiles Teigneux illimités")); + hintTextTable[RHT_MAGIC_INF] = HintText(CustomMessage("unlimited Magic", /*german*/"unendliche Magische Kraft", /*french*/"de la Magie infinie"), + {}, {}, + CustomMessage("Infinite Magic Meter", "Unendliche Magische Kraft", "Magie Infinie")); - hintTextTable[RHT_WALLET_INF] = HintText(CustomMessage("an infinite Wallet", /*german*/"die unendliche Geldbörse", /*french*/"une Bourse sans fond")); + hintTextTable[RHT_BOMBCHU_INF] = HintText(CustomMessage("infinite Bombchus", /*german*/"die unendliche Krabbelminentasche", /*french*/"des Missiles Teigneux illimités"), + {}, {}, + CustomMessage("Infinite Bombchus", "Unendliche Krabbelminentasche", "Missiles Teigneux Infinis")); + + hintTextTable[RHT_WALLET_INF] = HintText(CustomMessage("an infinite Wallet", /*german*/"die unendliche Geldbörse", /*french*/"une Bourse sans fond"), + {}, {}, + CustomMessage("Infinite Wallet", "Unendliche Geldbörse", "Bourse Infinie")); hintTextTable[RHT_EPONA] = HintText(CustomMessage("Epona", /*german*/"Epona", /*french*/"Epona"), // /*spanish*/a Epona @@ -2132,7 +2837,141 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a four legged friend", /*german*/"ein vierbeiniger Freund", /*french*/"un puissant animal")}); // /*spanish*/una amiga cuadrúpeda + hintTextTable[RHT_TRIFORCE] = HintText(CustomMessage("the Triforce", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Triforce", "Triforce", "Triforce")); + + hintTextTable[RHT_HINT] = HintText(CustomMessage("a Hint", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Hint", "Hinweis", "Indice")); + + hintTextTable[RHT_HOOKSHOT] = HintText(CustomMessage("the Hookshot", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Hookshot", "Fanghaken", "Grappin")); + + hintTextTable[RHT_LONGSHOT] = HintText(CustomMessage("the Longshot", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Longshot", "Enterhaken", "Super-Grappin")); + + hintTextTable[RHT_FAIRY_OCARINA] = HintText(CustomMessage("the Fairy Ocarina", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Fairy Ocarina", "Feen-Okarina", "Ocarina des fées")); + + hintTextTable[RHT_OCARINA_OF_TIME] = HintText(CustomMessage("the Ocarina of Time", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Ocarina of Time", "Okarina der Zeit", "Ocarina du Temps")); + + hintTextTable[RHT_BOMB_BAG] = HintText(CustomMessage("the Bomb Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Bomb Bag", "Bombentasche", "Sac de Bombes")); + + hintTextTable[RHT_BIG_BOMB_BAG] = HintText(CustomMessage("the Big Bomb Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Big Bomb Bag", "Große Bombentasche", "Grand Sac de Bombes")); + + hintTextTable[RHT_BIGGEST_BOMB_BAG] = HintText(CustomMessage("the Biggest Bomb Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Biggest Bomb Bag", "Riesen-Bombentasche", "Énorme Sac de Bombes")); + + hintTextTable[RHT_FAIRY_BOW] = HintText(CustomMessage("the Fairy Bow", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Fairy Bow", "Feen-Bogen", "Arc des Fées")); + + hintTextTable[RHT_BIG_QUIVER] = HintText(CustomMessage("a Big Quiver", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Big Quiver", "Großer Köcher", "Grand carquois")); + + hintTextTable[RHT_BIGGEST_QUIVER] = HintText(CustomMessage("the Biggest Quiver", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Biggest Quiver", "Riesenköcher", "Énorme carquois")); + + hintTextTable[RHT_FAIRY_SLINGSHOT] = HintText(CustomMessage("the Fairy Slingshot", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Fairy Slingshot", "Feen-Schleuder", "Lance-Pierre des Fées")); + + hintTextTable[RHT_BIG_BULLET_BAG] = HintText(CustomMessage("a Big Bullet Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Big Deku Seed Bullet Bag", "Große Munitionstasche", "Grand sac de graines mojo")); + + hintTextTable[RHT_BIGGEST_BULLET_BAG] = HintText(CustomMessage("the Biggest Bullet Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Biggest Deku Seed Bullet Bag", "Riesen-Munitionstasche", "Énorme sac de graines mojo")); + + hintTextTable[RHT_GORONS_BRACELET] = HintText(CustomMessage("the Goron's Bracelet", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Goron's Bracelet", "Goronen-Armband", "Bracelet Goron")); + + hintTextTable[RHT_SILVER_GAUNTLETS] = HintText(CustomMessage("the Silver Gauntlets", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Silver Gauntlets", "Krafthandschuhe", "Gantelets d'argent")); + + hintTextTable[RHT_GOLDEN_GAUNTLETS] = HintText(CustomMessage("the Golden Gauntlets", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Golden Gauntlets", "Titanhandschuhe", "Gantelets d'or")); + + hintTextTable[RHT_BRONZE_SCALE] = HintText(CustomMessage("a Bronze Scale", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Bronze Scale", "Bronzene Schuppe", "Écaille de Bronze")); + + hintTextTable[RHT_SILVER_SCALE] = HintText(CustomMessage("a Silver Scale", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Silver Scale", "Silberne Schuppe", "Écaille d'argent")); + + hintTextTable[RHT_GOLDEN_SCALE] = HintText(CustomMessage("a Golden Scale", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Golden Scale", "Goldene Schuppe", "Écaille d'or")); + + hintTextTable[RHT_CHILD_WALLET] = HintText(CustomMessage("a Child's Wallet", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Child Wallet", "Kindergeldbörse", "Petite Bourse")); + + hintTextTable[RHT_ADULT_WALLET] = HintText(CustomMessage("an Adult's Wallet", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Adult Wallet", "Große Geldbörse", "Grande Bourse")); + + hintTextTable[RHT_GIANT_WALLET] = HintText(CustomMessage("a Giant Wallet", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Giant Wallet", "Riesengeldbörse", "Bourse de Géant")); + + hintTextTable[RHT_TYCOON_WALLET] = HintText(CustomMessage("the Tycoon Wallet", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Tycoon Wallet", "Goldene Geldbörse", "Bourse de Magnat")); + + hintTextTable[RHT_DEKU_NUT_BAG] = HintText(CustomMessage("a Deku Nut Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Deku Nut Bag", "Deku-Nuß-Tasche", "Sac de Noix Mojo")); + + hintTextTable[RHT_DEKU_NUT_CAPACITY_30] = HintText(CustomMessage("Deku Nut Capacity (30)", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Deku Nut Capacity (30)", "Deku-Nuß-Kapazität (30)", "Capacité de noix Mojo (30)")); + + hintTextTable[RHT_DEKU_NUT_CAPACITY_40] = HintText(CustomMessage("", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Deku Nut Capacity (40)", "Deku-Nuß-Kapazität (40)", "Capacité de noix Mojo (40)")); + + hintTextTable[RHT_DEKU_STICK_BAG] = HintText(CustomMessage("a Deku Stick Bag", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Deku Stick Bag", "Deku-Stab-Tasche", "Sac de Bâton Mojo")); + + hintTextTable[RHT_DEKU_STICK_CAPACITY_20] = HintText(CustomMessage("", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Deku Stick Capacity (20)", "Deku-Stab-Kapazität (20)", "Capacité de Bâtons Mojo (20)")); + + hintTextTable[RHT_DEKU_STICK_CAPACITY_30] = HintText(CustomMessage("", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Deku Stick Capacity (30)", "Deku-Stab-Kapazität (30)", "Capacité de Bâtons Mojo (30)")); + + hintTextTable[RHT_MAGIC_SINGLE] = HintText(CustomMessage("a Small Magic Meter", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Magic Meter", "Magische Kraft", "Jauge de Magie")); + + hintTextTable[RHT_MAGIC_DOUBLE] = HintText(CustomMessage("a Large Magic Meter", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE), + {}, {}, + CustomMessage("Enhanced Magic Meter", "Verb. Magische Kraft", "Jauge de Magie améliorée")); + + //What is this used for? + //This was meant for the mysterious items mode IIRC, but that stopped applying to hints hintTextTable[RHT_HINT_MYSTERIOUS] = HintText(CustomMessage("something mysterious", /*german*/"etwas Mysteriöses", /*french*/"un sacré mystère")); // /*spanish*/algo misterioso diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.cpp b/soh/soh/Enhancements/randomizer/3drando/hints.cpp index d59331776..ad287e60e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.cpp @@ -27,15 +27,21 @@ HintDistributionSetting::HintDistributionSetting(std::string _name, HintType _ty dungeonLimit = _dungeonLimit; } +// RANDOTODO rearrange once all HintText's have names HintText::HintText(CustomMessage clearText_, std::vector ambiguousText_, - std::vector obscureText_) - : clearText(std::move(clearText_)), ambiguousText(std::move(ambiguousText_)), obscureText(std::move(obscureText_)) { + std::vector obscureText_, CustomMessage name_) + : clearText(std::move(clearText_)), ambiguousText(std::move(ambiguousText_)), obscureText(std::move(obscureText_)), + name(std::move(name_)) { } const CustomMessage& HintText::GetClear() const { return clearText; } +const CustomMessage& HintText::GetName() const { + return name.GetEnglish() == "" ? clearText : name; +} + const CustomMessage& HintText::GetObscure() const { return obscureText.size() > 0 ? RandomElement(obscureText) : clearText; } @@ -456,7 +462,7 @@ static RandomizerCheck CreateRandomHint(std::vector& possibleHi SPDLOG_DEBUG("\n"); SPDLOG_DEBUG("\tItem: "); - SPDLOG_DEBUG(ctx->GetItemLocation(hintedLocation)->GetPlacedItemName().GetEnglish()); + SPDLOG_DEBUG(ctx->GetItemLocation(hintedLocation)->GetPlacedItemName().GetForCurrentLanguage(MF_RAW)); SPDLOG_DEBUG("\n"); placed = CreateHint(hintedLocation, copies, type, distributionName); diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.hpp b/soh/soh/Enhancements/randomizer/3drando/hints.hpp index 365904274..d8ad72d90 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.hpp @@ -34,7 +34,8 @@ class HintText { public: HintText() = default; HintText(CustomMessage clearText_, std::vector ambiguousText_ = {}, - std::vector obscureText_ = {}); + std::vector obscureText_ = {}, CustomMessage name_ = { "" }); + const CustomMessage& GetName() const; const CustomMessage& GetClear() const; const CustomMessage& GetObscure() const; const CustomMessage& GetObscure(size_t selection) const; @@ -48,9 +49,11 @@ class HintText { bool operator!=(const HintText& right) const; private: - CustomMessage clearText; + CustomMessage clearText; // RANDOTODO proper system to define use of articles instead of having the name and name + // with articles repeated std::vector ambiguousText = {}; std::vector obscureText = {}; + CustomMessage name; }; struct StaticHintInfo { diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 3e6588646..99fe23c8f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -59,13 +59,13 @@ const std::array alwaysItems = { RG_PROGRESSIVE_BOMB_BAG, RG_PROGRESSIVE_WALLET, // 2 progressive wallets RG_PROGRESSIVE_WALLET, - RG_PROGRESSIVE_MAGIC_METER, // 2 progressive magic meters - RG_PROGRESSIVE_MAGIC_METER, + RG_PROGRESSIVE_MAGIC, // 2 progressive magic meters + RG_PROGRESSIVE_MAGIC, RG_DOUBLE_DEFENSE, - RG_PROGRESSIVE_STICK_UPGRADE, // 2 stick upgrades - RG_PROGRESSIVE_STICK_UPGRADE, - RG_PROGRESSIVE_NUT_UPGRADE, // 2 nut upgrades - RG_PROGRESSIVE_NUT_UPGRADE, + RG_PROGRESSIVE_STICK_BAG, // 2 stick upgrades + RG_PROGRESSIVE_STICK_BAG, + RG_PROGRESSIVE_NUT_BAG, // 2 nut upgrades + RG_PROGRESSIVE_NUT_BAG, RG_RECOVERY_HEART, // 6 recovery hearts RG_RECOVERY_HEART, RG_RECOVERY_HEART, @@ -80,7 +80,7 @@ const std::array alwaysItems = { RG_ARROWS_10, // 5 RG_ARROWS_10, RG_ARROWS_10, - RG_TREASURE_GAME_HEART, + RG_TCG_PIECE_OF_HEART, }; const std::array easyItems = { RG_BIGGORON_SWORD, @@ -101,9 +101,9 @@ const std::array easyItems = { RG_PROGRESSIVE_STRENGTH, RG_PROGRESSIVE_SCALE, RG_PROGRESSIVE_WALLET, - RG_PROGRESSIVE_MAGIC_METER, - RG_PROGRESSIVE_STICK_UPGRADE, - RG_PROGRESSIVE_NUT_UPGRADE, + RG_PROGRESSIVE_MAGIC, + RG_PROGRESSIVE_STICK_BAG, + RG_PROGRESSIVE_NUT_BAG, RG_PROGRESSIVE_BOW, RG_PROGRESSIVE_SLINGSHOT, RG_PROGRESSIVE_BOMB_BAG, @@ -238,7 +238,7 @@ const std::array GTG_Vanilla = { RG_HUGE_RUPEE, }; const std::array GTG_MQ = { - RG_TREASURE_GAME_GREEN_RUPEE, RG_TREASURE_GAME_GREEN_RUPEE, RG_ARROWS_10, RG_GREEN_RUPEE, RG_PURPLE_RUPEE, + RG_LOSER_GREEN_RUPEE, RG_LOSER_GREEN_RUPEE, RG_ARROWS_10, RG_GREEN_RUPEE, RG_PURPLE_RUPEE, }; const std::array GC_Vanilla = { RG_BLUE_RUPEE, @@ -425,10 +425,10 @@ static void SetScarceItemPool() { ReplaceMaxItem(RG_BOMBCHU_5, 1); ReplaceMaxItem(RG_BOMBCHU_10, 2); ReplaceMaxItem(RG_BOMBCHU_20, 0); - ReplaceMaxItem(RG_PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(RG_PROGRESSIVE_MAGIC, 1); ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); - ReplaceMaxItem(RG_PROGRESSIVE_STICK_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 2 : 1); - ReplaceMaxItem(RG_PROGRESSIVE_NUT_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 2 : 1); + ReplaceMaxItem(RG_PROGRESSIVE_STICK_BAG, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 2 : 1); + ReplaceMaxItem(RG_PROGRESSIVE_NUT_BAG, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 2 : 1); ReplaceMaxItem(RG_PROGRESSIVE_BOW, 2); ReplaceMaxItem(RG_PROGRESSIVE_SLINGSHOT, 2); ReplaceMaxItem(RG_PROGRESSIVE_BOMB_BAG, 2); @@ -442,10 +442,10 @@ static void SetMinimalItemPool() { ReplaceMaxItem(RG_BOMBCHU_10, 0); ReplaceMaxItem(RG_BOMBCHU_20, 0); ReplaceMaxItem(RG_NAYRUS_LOVE, 0); - ReplaceMaxItem(RG_PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(RG_PROGRESSIVE_MAGIC, 1); ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); - ReplaceMaxItem(RG_PROGRESSIVE_STICK_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 1 : 0); - ReplaceMaxItem(RG_PROGRESSIVE_NUT_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 1 : 0); + ReplaceMaxItem(RG_PROGRESSIVE_STICK_BAG, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 1 : 0); + ReplaceMaxItem(RG_PROGRESSIVE_NUT_BAG, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 1 : 0); ReplaceMaxItem(RG_PROGRESSIVE_BOW, 1); ReplaceMaxItem(RG_PROGRESSIVE_SLINGSHOT, 1); ReplaceMaxItem(RG_PROGRESSIVE_BOMB_BAG, 1); @@ -462,29 +462,18 @@ void GenerateItemPool() { // Initialize ice trap models to always major items ctx->possibleIceTrapModels = { - RG_MIRROR_SHIELD, - RG_BOOMERANG, - RG_LENS_OF_TRUTH, - RG_MEGATON_HAMMER, - RG_IRON_BOOTS, - RG_HOVER_BOOTS, - RG_STONE_OF_AGONY, - RG_DINS_FIRE, - RG_FARORES_WIND, - RG_NAYRUS_LOVE, - RG_FIRE_ARROWS, - RG_ICE_ARROWS, - RG_LIGHT_ARROWS, - RG_DOUBLE_DEFENSE, - RG_CLAIM_CHECK, - RG_PROGRESSIVE_HOOKSHOT, - RG_PROGRESSIVE_STRENGTH, - RG_PROGRESSIVE_BOMB_BAG, - RG_PROGRESSIVE_BOW, - RG_PROGRESSIVE_SLINGSHOT, - RG_PROGRESSIVE_WALLET, - RG_PROGRESSIVE_SCALE, - RG_PROGRESSIVE_MAGIC_METER, + RG_MIRROR_SHIELD, RG_BOOMERANG, + RG_LENS_OF_TRUTH, RG_MEGATON_HAMMER, + RG_IRON_BOOTS, RG_HOVER_BOOTS, + RG_STONE_OF_AGONY, RG_DINS_FIRE, + RG_FARORES_WIND, RG_NAYRUS_LOVE, + RG_FIRE_ARROWS, RG_ICE_ARROWS, + RG_LIGHT_ARROWS, RG_DOUBLE_DEFENSE, + RG_CLAIM_CHECK, RG_PROGRESSIVE_HOOKSHOT, + RG_PROGRESSIVE_STRENGTH, RG_PROGRESSIVE_BOMB_BAG, + RG_PROGRESSIVE_BOW, RG_PROGRESSIVE_SLINGSHOT, + RG_PROGRESSIVE_WALLET, RG_PROGRESSIVE_SCALE, + RG_PROGRESSIVE_MAGIC, }; // Check song shuffle and dungeon reward shuffle just for ice traps if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_ANYWHERE)) { @@ -655,10 +644,10 @@ void GenerateItemPool() { if (ctx->GetOption(RSK_INFINITE_UPGRADES).Is(RO_INF_UPGRADES_PROGRESSIVE)) { AddItemToMainPool(RG_PROGRESSIVE_BOMB_BAG); AddItemToMainPool(RG_PROGRESSIVE_BOW); - AddItemToMainPool(RG_PROGRESSIVE_NUT_UPGRADE); + AddItemToMainPool(RG_PROGRESSIVE_NUT_BAG); AddItemToMainPool(RG_PROGRESSIVE_SLINGSHOT); - AddItemToMainPool(RG_PROGRESSIVE_STICK_UPGRADE); - AddItemToMainPool(RG_PROGRESSIVE_MAGIC_METER); + AddItemToMainPool(RG_PROGRESSIVE_STICK_BAG); + AddItemToMainPool(RG_PROGRESSIVE_MAGIC); AddItemToMainPool(RG_PROGRESSIVE_WALLET); } @@ -713,9 +702,9 @@ void GenerateItemPool() { AddItemToMainPool(RG_CLAIM_CHECK); if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS)) { - AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY, 6); // 6 individual keys + AddItemToMainPool(RG_TCG_SMALL_KEY, 6); // 6 individual keys } else if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK)) { - AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY); // 1 key which will behave as a pack of 6 + AddItemToMainPool(RG_TCG_SMALL_KEY); // 1 key which will behave as a pack of 6 } if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) { @@ -785,11 +774,11 @@ void GenerateItemPool() { } if (ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG)) { - AddItemToMainPool(RG_PROGRESSIVE_STICK_UPGRADE); + AddItemToMainPool(RG_PROGRESSIVE_STICK_BAG); } if (ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG)) { - AddItemToMainPool(RG_PROGRESSIVE_NUT_UPGRADE); + AddItemToMainPool(RG_PROGRESSIVE_NUT_BAG); } if (ctx->GetOption(RSK_BOMBCHU_BAG)) { @@ -817,41 +806,41 @@ void GenerateItemPool() { ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_CARPENTER, RG_RECOVERY_HEART, false, true); } else if (ctx->GetOption(RSK_GERUDO_KEYS).IsNot(RO_GERUDO_KEYS_VANILLA)) { if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) { - AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY); + AddItemToMainPool(RG_HIDEOUT_SMALL_KEY); ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_RECOVERY_HEART, false, true); ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_RECOVERY_HEART, false, true); ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_CARPENTER, RG_RECOVERY_HEART, false, true); } else { // Only add key ring if 4 Fortress keys necessary if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS) && ctx->GetOption(RSK_KEYRINGS)) { - AddItemToMainPool(RG_GERUDO_FORTRESS_KEY_RING); + AddItemToMainPool(RG_HIDEOUT_KEY_RING); // Add junk to make up for missing keys for (uint8_t i = 0; i < 3; i++) { AddItemToMainPool(GetJunkItem()); } } else { - AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY, 4); + AddItemToMainPool(RG_HIDEOUT_SMALL_KEY, 4); } } if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS) && ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && ctx->GetOption(RSK_KEYRINGS)) { - AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_KEY_RING); + AddItemToPool(PendingJunkPool, RG_HIDEOUT_KEY_RING); } else { - AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_SMALL_KEY); + AddItemToPool(PendingJunkPool, RG_HIDEOUT_SMALL_KEY); } } } else { if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) { - ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_HIDEOUT_SMALL_KEY, false, true); ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_RECOVERY_HEART, false, true); ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_RECOVERY_HEART, false, true); ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_CARPENTER, RG_RECOVERY_HEART, false, true); } else { - ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_HIDEOUT_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_HIDEOUT_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_HIDEOUT_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_CARPENTER, RG_HIDEOUT_SMALL_KEY, false, true); } } @@ -896,9 +885,9 @@ void GenerateItemPool() { ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) || ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_BOTTOM_OF_THE_WELL_KEY_RING); + AddItemToPool(PendingJunkPool, RG_BOTW_KEY_RING); } else { - AddItemToPool(PendingJunkPool, RG_BOTTOM_OF_THE_WELL_SMALL_KEY); + AddItemToPool(PendingJunkPool, RG_BOTW_SMALL_KEY); } if (ctx->GetDungeon(Rando::FOREST_TEMPLE)->HasKeyRing()) { AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_KEY_RING); @@ -926,9 +915,9 @@ void GenerateItemPool() { AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_SMALL_KEY); } if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_GERUDO_TRAINING_GROUND_KEY_RING); + AddItemToPool(PendingJunkPool, RG_GTG_KEY_RING); } else { - AddItemToPool(PendingJunkPool, RG_GERUDO_TRAINING_GROUND_SMALL_KEY); + AddItemToPool(PendingJunkPool, RG_GTG_SMALL_KEY); } if (ctx->GetDungeon(Rando::GANONS_CASTLE)->HasKeyRing()) { AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_KEY_RING); @@ -959,20 +948,20 @@ void GenerateItemPool() { AddItemToPool(ItemPool, RG_MARKET_BAZAAR_KEY); AddItemToPool(ItemPool, RG_MARKET_POTION_SHOP_KEY); AddItemToPool(ItemPool, RG_MASK_SHOP_KEY); - AddItemToPool(ItemPool, RG_MARKET_SHOOTING_GALLERY_KEY); + AddItemToPool(ItemPool, RG_MARKET_SHOOTING_KEY); AddItemToPool(ItemPool, RG_BOMBCHU_BOWLING_KEY); - AddItemToPool(ItemPool, RG_TREASURE_CHEST_GAME_BUILDING_KEY); + AddItemToPool(ItemPool, RG_TCG_BUILDING_KEY); AddItemToPool(ItemPool, RG_BOMBCHU_SHOP_KEY); AddItemToPool(ItemPool, RG_RICHARDS_HOUSE_KEY); AddItemToPool(ItemPool, RG_ALLEY_HOUSE_KEY); AddItemToPool(ItemPool, RG_KAK_BAZAAR_KEY); AddItemToPool(ItemPool, RG_KAK_POTION_SHOP_KEY); AddItemToPool(ItemPool, RG_BOSS_HOUSE_KEY); - AddItemToPool(ItemPool, RG_GRANNYS_POTION_SHOP_KEY); + AddItemToPool(ItemPool, RG_GRANNYS_SHOP_KEY); AddItemToPool(ItemPool, RG_SKULLTULA_HOUSE_KEY); AddItemToPool(ItemPool, RG_IMPAS_HOUSE_KEY); AddItemToPool(ItemPool, RG_WINDMILL_KEY); - AddItemToPool(ItemPool, RG_KAK_SHOOTING_GALLERY_KEY); + AddItemToPool(ItemPool, RG_KAK_SHOOTING_KEY); AddItemToPool(ItemPool, RG_DAMPES_HUT_KEY); AddItemToPool(ItemPool, RG_TALONS_HOUSE_KEY); AddItemToPool(ItemPool, RG_STABLES_KEY); diff --git a/soh/soh/Enhancements/randomizer/3drando/shops.cpp b/soh/soh/Enhancements/randomizer/3drando/shops.cpp index 441454cd0..015125f61 100644 --- a/soh/soh/Enhancements/randomizer/3drando/shops.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/shops.cpp @@ -543,7 +543,7 @@ void InitTrickNames() { Text{ "Progressive Pearl", "Perle (prog.)", "Perle (prog.)" }, // "Perla progresiva" Text{ "Progressive Scute", "Bulle (prog.)", "Schuppe (prog.)" }, // "Fragmento Zora progresivo" }; - trickNameTable[RG_PROGRESSIVE_NUT_UPGRADE] = { + trickNameTable[RG_PROGRESSIVE_NUT_BAG] = { Text{ "Progressive Nut Pack", "Paquet de noix (prog.)", "Nußrucksack (prog.)" }, // "Mayor capacidad de semillas" Text{ "Progressive Bait Bag", "Sac à Appâts (prog.)", "Futtertasche (prog.)" }, // "Bolsa de cebo progresiva" @@ -553,7 +553,7 @@ void InitTrickNames() { Text{ "Progressive Husk Capacity", "Capacité de noisettes (prog.)", "Schalen-Kapazität (prog.)€" }, // "Mayor capacidad de castañas" }; - trickNameTable[RG_PROGRESSIVE_STICK_UPGRADE] = { + trickNameTable[RG_PROGRESSIVE_STICK_BAG] = { Text{ "Progressive Stick Bag", "Sac de bâtons (prog.)", "Stabbeutel (prog.)" }, // "Mayor capacidad de ramas deku" Text{ "Progressive Stick Pack", "Paquet de bâtons Mojo (prog.)", @@ -572,7 +572,7 @@ void InitTrickNames() { Text{ "Progressive Bombchu Bag", "Sac à Bombchu (prog.)", "Krabbelminenbeutel (prog.)" }, // "Bombachus progresivos" }; - trickNameTable[RG_PROGRESSIVE_MAGIC_METER] = { + trickNameTable[RG_PROGRESSIVE_MAGIC] = { Text{ "Progressive Stamina Meter", "Jauge d'endurance (prog.)", "Ausdauer (prog.)" }, // "Medidor de vigor progresivo" Text{ "Progressive Energy Gauge", "Jauge d'énergie (prog.)", diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index 3c91a1f70..6715f6c29 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -74,18 +74,8 @@ static void WriteLocation(std::string sphere, const RandomizerCheck locationKey, Rando::Location* location = Rando::StaticData::GetLocation(locationKey); Rando::ItemLocation* itemLocation = Rando::Context::GetInstance()->GetItemLocation(locationKey); - switch (gSaveContext.language) { - case LANGUAGE_ENG: - default: - jsonData["playthrough"][sphere][location->GetName()] = itemLocation->GetPlacedItemName().GetEnglish(); - break; - case LANGUAGE_GER: - jsonData["playthrough"][sphere][location->GetName()] = itemLocation->GetPlacedItemName().GetGerman(); - break; - case LANGUAGE_FRA: - jsonData["playthrough"][sphere][location->GetName()] = itemLocation->GetPlacedItemName().GetFrench(); - break; - } + jsonData["playthrough"][sphere][location->GetName()] = + itemLocation->GetPlacedItemName().GetForCurrentLanguage(MF_RAW); } // Writes a shuffled entrance to the specified node @@ -266,71 +256,45 @@ static void WriteAllLocations() { auto ctx = Rando::Context::GetInstance(); for (const RandomizerCheck key : ctx->allLocations) { Rando::ItemLocation* location = ctx->GetItemLocation(key); - std::string placedItemName; - - switch (gSaveContext.language) { - case 0: - default: - placedItemName = location->GetPlacedItemName().GetEnglish(); - break; - case 1: - placedItemName = location->GetPlacedItemName().GetGerman(); - break; - case 2: - placedItemName = location->GetPlacedItemName().GetFrench(); - break; - } + std::string placedItemName = location->GetPlacedItemName().GetForCurrentLanguage(MF_RAW); + std::string locName = Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName(); // If it's a simple item (not an ice trap, doesn't have a price) // just add the name of the item and move on if (!location->HasCustomPrice() && location->GetPlacedRandomizerGet() != RG_ICE_TRAP) { - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] = - placedItemName; + jsonData["locations"][locName] = placedItemName; continue; } // We're dealing with a complex item, build out the json object for it - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["item"] = - placedItemName; + jsonData["locations"][locName]["item"] = placedItemName; if (location->HasCustomPrice()) { - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["price"] = - location->GetPrice(); + jsonData["locations"][locName]["price"] = location->GetPrice(); } if (location->IsAHintAccessible()) { hintedLocations.emplace(Rando::StaticData::GetLocation(key)->GetHintKey(), location); } if (location->GetPlacedRandomizerGet() == RG_ICE_TRAP) { + jsonData["locations"][locName]["model"] = + Rando::StaticData::RetrieveItem(ctx->overrides[location->GetRandomizerCheck()].LooksLike()) + .GetName() + .GetForCurrentLanguage(MF_RAW); switch (gSaveContext.language) { case 0: default: - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] - ["model"] = Rando::StaticData::RetrieveItem( - ctx->overrides[location->GetRandomizerCheck()].LooksLike()) - .GetName() - .GetEnglish(); - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] - ["trickName"] = ctx->overrides[location->GetRandomizerCheck()].GetTrickName().GetEnglish(); + jsonData["locations"][locName]["trickName"] = + ctx->overrides[location->GetRandomizerCheck()].GetTrickName().GetEnglish(); break; case 1: - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] - ["model"] = Rando::StaticData::RetrieveItem( - ctx->overrides[location->GetRandomizerCheck()].LooksLike()) - .GetName() - .GetGerman(); - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] - ["trickName"] = ctx->overrides[location->GetRandomizerCheck()].GetTrickName().GetGerman(); + jsonData["locations"][locName]["trickName"] = + ctx->overrides[location->GetRandomizerCheck()].GetTrickName().GetGerman(); break; case 2: - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] - ["model"] = Rando::StaticData::RetrieveItem( - ctx->overrides[location->GetRandomizerCheck()].LooksLike()) - .GetName() - .GetFrench(); - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] - ["trickName"] = ctx->overrides[location->GetRandomizerCheck()].GetTrickName().GetFrench(); + jsonData["locations"][locName]["trickName"] = + ctx->overrides[location->GetRandomizerCheck()].GetTrickName().GetFrench(); break; } } diff --git a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp index dda37b18a..29b967cc0 100644 --- a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp @@ -70,8 +70,8 @@ void GenerateStartingInventory() { // the option selected. If None is selected, the value will be zero and // zero of the item will be added to the starting inventory. // TODO: Uncomment when these options are implemented. - // AddItemToInventory(RG_PROGRESSIVE_STICK_UPGRADE, StartingStickCapacity.Value()); - // AddItemToInventory(RG_PROGRESSIVE_NUT_UPGRADE, StartingNutCapacity.Value()); + // AddItemToInventory(RG_PROGRESSIVE_STICK_BAG, StartingStickCapacity.Value()); + // AddItemToInventory(RG_PROGRESSIVE_NUT_BAG, StartingNutCapacity.Value()); // AddItemToInventory(RG_PROGRESSIVE_BOMB_BAG, StartingBombBag.Value()); // AddItemToInventory((BombchuBag ? RG_PROGRESSIVE_BOMBCHUS : RG_BOMBCHU_20), StartingBombchus.Value()); // AddItemToInventory(RG_PROGRESSIVE_BOW, StartingBow.Value()); @@ -138,7 +138,7 @@ void GenerateStartingInventory() { // AddItemToInventory(RG_MIRROR_SHIELD, StartingMirrorShield.Value()); // AddItemToInventory(RG_GORON_TUNIC, StartingGoronTunic.Value()); // AddItemToInventory(RG_ZORA_TUNIC, StartingZoraTunic.Value()); - // AddItemToInventory(RG_PROGRESSIVE_MAGIC_METER, StartingMagicMeter.Value()); + // AddItemToInventory(RG_PROGRESSIVE_MAGIC, StartingMagicMeter.Value()); // AddItemToInventory(RG_PROGRESSIVE_STRENGTH, StartingStrength.Value()); // AddItemToInventory(RG_PROGRESSIVE_SCALE, StartingScale.Value()); // AddItemToInventory(RG_PROGRESSIVE_WALLET, StartingWallet.Value()); @@ -161,7 +161,7 @@ void GenerateStartingInventory() { AddItemToInventory(RG_PIECE_OF_HEART, 4); // Plentiful and minimal have less than 4 standard pieces of heart so also replace the winner heart if (ctx->GetOption(RSK_ITEM_POOL).Get() == 0 || ctx->GetOption(RSK_ITEM_POOL).Get() == 3) { - AddItemToInventory(RG_TREASURE_GAME_HEART); + AddItemToInventory(RG_TCG_PIECE_OF_HEART); } AdditionalHeartContainers = 1 - hearts; @@ -177,7 +177,7 @@ void GenerateStartingInventory() { } if (hearts == 17) { - AddItemToInventory(RG_TREASURE_GAME_HEART); + AddItemToInventory(RG_TCG_PIECE_OF_HEART); } } } @@ -189,7 +189,7 @@ bool StartingInventoryHasBottle() { void ApplyStartingInventory() { for (RandomizerGet item : StartingInventory) { - if (item == RG_PIECE_OF_HEART || item == RG_HEART_CONTAINER || item == RG_TREASURE_GAME_HEART) + if (item == RG_PIECE_OF_HEART || item == RG_HEART_CONTAINER || item == RG_TCG_PIECE_OF_HEART) continue; Rando::StaticData::RetrieveItem(item).ApplyEffect(); diff --git a/soh/soh/Enhancements/randomizer/Plandomizer.cpp b/soh/soh/Enhancements/randomizer/Plandomizer.cpp index 4e03e8b8f..ad6e24bd1 100644 --- a/soh/soh/Enhancements/randomizer/Plandomizer.cpp +++ b/soh/soh/Enhancements/randomizer/Plandomizer.cpp @@ -87,172 +87,170 @@ std::vector infiniteItemList = { RG_BOMBS_20, RG_BOMBCHU_5, RG_BOMBCHU_10, RG_BOMBCHU_20, RG_RECOVERY_HEART, RG_ICE_TRAP, RG_SOLD_OUT }; -std::unordered_map itemImageMap = { - { RG_NONE, "ITEM_SOLD_OUT" }, - { RG_KOKIRI_SWORD, "ITEM_SWORD_KOKIRI" }, - { RG_GIANTS_KNIFE, "ITEM_SWORD_KNIFE" }, - { RG_BIGGORON_SWORD, "ITEM_SWORD_BGS" }, - { RG_DEKU_SHIELD, "ITEM_SHIELD_DEKU" }, - { RG_HYLIAN_SHIELD, "ITEM_SHIELD_HYLIAN" }, - { RG_MIRROR_SHIELD, "ITEM_SHIELD_MIRROR" }, - { RG_GORON_TUNIC, "ITEM_TUNIC_GORON" }, - { RG_ZORA_TUNIC, "ITEM_TUNIC_ZORA" }, - { RG_IRON_BOOTS, "ITEM_BOOTS_IRON" }, - { RG_HOVER_BOOTS, "ITEM_BOOTS_HOVER" }, - { RG_BOOMERANG, "ITEM_BOOMERANG" }, - { RG_LENS_OF_TRUTH, "ITEM_LENS" }, - { RG_MEGATON_HAMMER, "ITEM_HAMMER" }, - { RG_STONE_OF_AGONY, "ITEM_STONE_OF_AGONY" }, - { RG_DINS_FIRE, "ITEM_DINS_FIRE" }, - { RG_FARORES_WIND, "ITEM_FARORES_WIND" }, - { RG_NAYRUS_LOVE, "ITEM_NAYRUS_LOVE" }, - { RG_FIRE_ARROWS, "ITEM_ARROW_FIRE" }, - { RG_ICE_ARROWS, "ITEM_ARROW_ICE" }, - { RG_LIGHT_ARROWS, "ITEM_ARROW_LIGHT" }, - { RG_GERUDO_MEMBERSHIP_CARD, "ITEM_GERUDO_CARD" }, - { RG_MAGIC_BEAN, "ITEM_BEAN" }, - { RG_MAGIC_BEAN_PACK, "ITEM_BEAN" }, - { RG_DOUBLE_DEFENSE, "ITEM_HEART_CONTAINER" }, - { RG_WEIRD_EGG, "ITEM_WEIRD_EGG" }, - { RG_ZELDAS_LETTER, "ITEM_LETTER_ZELDA" }, - { RG_POCKET_EGG, "ITEM_POCKET_EGG" }, - { RG_COJIRO, "ITEM_COJIRO" }, - { RG_ODD_MUSHROOM, "ITEM_ODD_MUSHROOM" }, - { RG_ODD_POTION, "ITEM_ODD_POTION" }, - { RG_POACHERS_SAW, "ITEM_SAW" }, - { RG_BROKEN_SWORD, "ITEM_SWORD_BROKEN" }, - { RG_PRESCRIPTION, "ITEM_PRESCRIPTION" }, - { RG_EYEBALL_FROG, "ITEM_FROG" }, - { RG_EYEDROPS, "ITEM_EYEDROPS" }, - { RG_CLAIM_CHECK, "ITEM_CLAIM_CHECK" }, - { RG_GOLD_SKULLTULA_TOKEN, "ITEM_SKULL_TOKEN" }, - { RG_PROGRESSIVE_HOOKSHOT, "ITEM_HOOKSHOT" }, - { RG_PROGRESSIVE_STRENGTH, "ITEM_BRACELET" }, - { RG_PROGRESSIVE_BOMB_BAG, "ITEM_BOMB_BAG_30" }, - { RG_PROGRESSIVE_BOW, "ITEM_QUIVER_30" }, - { RG_PROGRESSIVE_SLINGSHOT, "ITEM_SLINGSHOT" }, - { RG_PROGRESSIVE_WALLET, "ITEM_WALLET_ADULT" }, - { RG_PROGRESSIVE_SCALE, "ITEM_SCALE_SILVER" }, - { RG_PROGRESSIVE_NUT_UPGRADE, "ITEM_NUT" }, - { RG_PROGRESSIVE_STICK_UPGRADE, "ITEM_STICK" }, - { RG_PROGRESSIVE_BOMBCHUS, "ITEM_BOMBCHU" }, - { RG_PROGRESSIVE_MAGIC_METER, "ITEM_MAGIC_SMALL" }, - { RG_MAGIC_SINGLE, "ITEM_MAGIC_SMALL" }, - { RG_MAGIC_DOUBLE, "ITEM_MAGIC_LARGE" }, - { RG_PROGRESSIVE_OCARINA, "ITEM_OCARINA_FAIRY" }, - { RG_PROGRESSIVE_GORONSWORD, "ITEM_SWORD_BGS" }, - { RG_EMPTY_BOTTLE, "ITEM_BOTTLE" }, - { RG_BOTTLE_WITH_MILK, "ITEM_MILK_BOTTLE" }, - { RG_BOTTLE_WITH_RED_POTION, "ITEM_POTION_RED" }, - { RG_BOTTLE_WITH_GREEN_POTION, "ITEM_POTION_GREEN" }, - { RG_BOTTLE_WITH_BLUE_POTION, "ITEM_POTION_BLUE" }, - { RG_BOTTLE_WITH_FAIRY, "ITEM_FAIRY" }, - { RG_BOTTLE_WITH_FISH, "ITEM_FISH" }, - { RG_BOTTLE_WITH_BLUE_FIRE, "ITEM_BLUE_FIRE" }, - { RG_BOTTLE_WITH_BUGS, "ITEM_BUG" }, - { RG_BOTTLE_WITH_POE, "ITEM_POE" }, - { RG_RUTOS_LETTER, "ITEM_LETTER_RUTO" }, - { RG_BOTTLE_WITH_BIG_POE, "ITEM_BIG_POE" }, - { RG_ZELDAS_LULLABY, "ITEM_SONG_LULLABY" }, - { RG_EPONAS_SONG, "ITEM_SONG_EPONA" }, - { RG_SARIAS_SONG, "ITEM_SONG_SARIA" }, - { RG_SUNS_SONG, "ITEM_SONG_SUN" }, - { RG_SONG_OF_TIME, "ITEM_SONG_TIME" }, - { RG_SONG_OF_STORMS, "ITEM_SONG_STORMS" }, - { RG_MINUET_OF_FOREST, "ITEM_SONG_MINUET" }, - { RG_BOLERO_OF_FIRE, "ITEM_SONG_BOLERO" }, - { RG_SERENADE_OF_WATER, "ITEM_SONG_SERENADE" }, - { RG_REQUIEM_OF_SPIRIT, "ITEM_SONG_REQUIEM" }, - { RG_NOCTURNE_OF_SHADOW, "ITEM_SONG_NOCTURNE" }, - { RG_PRELUDE_OF_LIGHT, "ITEM_SONG_PRELUDE" }, - { RG_DEKU_TREE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_DODONGOS_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, - { RG_JABU_JABUS_BELLY_MAP, "ITEM_DUNGEON_MAP" }, - { RG_FOREST_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_FIRE_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_WATER_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_SPIRIT_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_SHADOW_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_BOTTOM_OF_THE_WELL_MAP, "ITEM_DUNGEON_MAP" }, - { RG_ICE_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, - { RG_DEKU_TREE_COMPASS, "ITEM_COMPASS" }, - { RG_DODONGOS_CAVERN_COMPASS, "ITEM_COMPASS" }, - { RG_JABU_JABUS_BELLY_COMPASS, "ITEM_COMPASS" }, - { RG_FOREST_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_FIRE_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_WATER_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_SPIRIT_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_SHADOW_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_BOTTOM_OF_THE_WELL_COMPASS, "ITEM_COMPASS" }, - { RG_ICE_CAVERN_COMPASS, "ITEM_COMPASS" }, - { RG_FOREST_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_FIRE_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_WATER_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_SPIRIT_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_SHADOW_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_GANONS_CASTLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_FOREST_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_FIRE_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_WATER_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_SPIRIT_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_SHADOW_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_BOTTOM_OF_THE_WELL_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_GERUDO_TRAINING_GROUND_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_GERUDO_FORTRESS_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_GANONS_CASTLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_TREASURE_GAME_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_KOKIRI_EMERALD, "ITEM_KOKIRI_EMERALD" }, - { RG_GORON_RUBY, "ITEM_GORON_RUBY" }, - { RG_ZORA_SAPPHIRE, "ITEM_ZORA_SAPPHIRE" }, - { RG_FOREST_MEDALLION, "ITEM_MEDALLION_FOREST" }, - { RG_FIRE_MEDALLION, "ITEM_MEDALLION_FIRE" }, - { RG_WATER_MEDALLION, "ITEM_MEDALLION_WATER" }, - { RG_SPIRIT_MEDALLION, "ITEM_MEDALLION_SPIRIT" }, - { RG_SHADOW_MEDALLION, "ITEM_MEDALLION_SHADOW" }, - { RG_LIGHT_MEDALLION, "ITEM_MEDALLION_LIGHT" }, - { RG_RECOVERY_HEART, "ITEM_HEART_GRAYSCALE" }, - { RG_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_GREG_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_BLUE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_RED_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_PURPLE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_HUGE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_TREASURE_GAME_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_PIECE_OF_HEART, "ITEM_HEART_PIECE" }, - { RG_HEART_CONTAINER, "ITEM_HEART_CONTAINER" }, - { RG_ICE_TRAP, "ITEM_ICE_TRAP" }, - { RG_MILK, "ITEM_MILK_BOTTLE" }, - { RG_BOMBS_5, "ITEM_BOMB" }, - { RG_BOMBS_10, "ITEM_BOMB" }, - { RG_BOMBS_20, "ITEM_BOMB" }, - { RG_BUY_BOMBS_525, "ITEM_BOMB" }, - { RG_BUY_BOMBS_535, "ITEM_BOMB" }, - { RG_BUY_BOMBS_10, "ITEM_BOMB" }, - { RG_BUY_BOMBS_20, "ITEM_BOMB" }, - { RG_BUY_BOMBS_30, "ITEM_BOMB" }, - { RG_DEKU_NUTS_5, "ITEM_NUT" }, - { RG_DEKU_NUTS_10, "ITEM_NUT" }, - { RG_BUY_DEKU_NUTS_5, "ITEM_NUT" }, - { RG_BUY_DEKU_NUTS_10, "ITEM_NUT" }, - { RG_BOMBCHU_5, "ITEM_BOMBCHU" }, - { RG_BOMBCHU_10, "ITEM_BOMBCHU" }, - { RG_BOMBCHU_20, "ITEM_BOMBCHU" }, - { RG_BUY_BOMBCHUS_20, "ITEM_BOMBCHU" }, - { RG_ARROWS_5, "ITEM_ARROWS_SMALL" }, - { RG_BUY_ARROWS_10, "ITEM_ARROWS_SMALL" }, - { RG_ARROWS_10, "ITEM_ARROWS_MEDIUM" }, - { RG_BUY_ARROWS_30, "ITEM_ARROWS_MEDIUM" }, - { RG_ARROWS_30, "ITEM_ARROWS_LARGE" }, - { RG_BUY_ARROWS_50, "ITEM_ARROWS_LARGE" }, - { RG_TREASURE_GAME_HEART, "ITEM_HEART_PIECE" }, - { RG_DEKU_SEEDS_30, "ITEM_SEEDS" }, - { RG_BUY_DEKU_SEEDS_30, "ITEM_SEEDS" }, - { RG_BUY_HEART, "ITEM_HEART_GRAYSCALE" }, - { RG_FISHING_POLE, "ITEM_FISHING_POLE" }, - { RG_SOLD_OUT, "ITEM_SOLD_OUT" }, - { RG_TRIFORCE_PIECE, "TRIFORCE_PIECE" }, - { RG_SKELETON_KEY, "ITEM_KEY_SMALL" } -}; +std::unordered_map itemImageMap = { { RG_NONE, "ITEM_SOLD_OUT" }, + { RG_KOKIRI_SWORD, "ITEM_SWORD_KOKIRI" }, + { RG_GIANTS_KNIFE, "ITEM_SWORD_KNIFE" }, + { RG_BIGGORON_SWORD, "ITEM_SWORD_BGS" }, + { RG_DEKU_SHIELD, "ITEM_SHIELD_DEKU" }, + { RG_HYLIAN_SHIELD, "ITEM_SHIELD_HYLIAN" }, + { RG_MIRROR_SHIELD, "ITEM_SHIELD_MIRROR" }, + { RG_GORON_TUNIC, "ITEM_TUNIC_GORON" }, + { RG_ZORA_TUNIC, "ITEM_TUNIC_ZORA" }, + { RG_IRON_BOOTS, "ITEM_BOOTS_IRON" }, + { RG_HOVER_BOOTS, "ITEM_BOOTS_HOVER" }, + { RG_BOOMERANG, "ITEM_BOOMERANG" }, + { RG_LENS_OF_TRUTH, "ITEM_LENS" }, + { RG_MEGATON_HAMMER, "ITEM_HAMMER" }, + { RG_STONE_OF_AGONY, "ITEM_STONE_OF_AGONY" }, + { RG_DINS_FIRE, "ITEM_DINS_FIRE" }, + { RG_FARORES_WIND, "ITEM_FARORES_WIND" }, + { RG_NAYRUS_LOVE, "ITEM_NAYRUS_LOVE" }, + { RG_FIRE_ARROWS, "ITEM_ARROW_FIRE" }, + { RG_ICE_ARROWS, "ITEM_ARROW_ICE" }, + { RG_LIGHT_ARROWS, "ITEM_ARROW_LIGHT" }, + { RG_GERUDO_MEMBERSHIP_CARD, "ITEM_GERUDO_CARD" }, + { RG_MAGIC_BEAN, "ITEM_BEAN" }, + { RG_MAGIC_BEAN_PACK, "ITEM_BEAN" }, + { RG_DOUBLE_DEFENSE, "ITEM_HEART_CONTAINER" }, + { RG_WEIRD_EGG, "ITEM_WEIRD_EGG" }, + { RG_ZELDAS_LETTER, "ITEM_LETTER_ZELDA" }, + { RG_POCKET_EGG, "ITEM_POCKET_EGG" }, + { RG_COJIRO, "ITEM_COJIRO" }, + { RG_ODD_MUSHROOM, "ITEM_ODD_MUSHROOM" }, + { RG_ODD_POTION, "ITEM_ODD_POTION" }, + { RG_POACHERS_SAW, "ITEM_SAW" }, + { RG_BROKEN_SWORD, "ITEM_SWORD_BROKEN" }, + { RG_PRESCRIPTION, "ITEM_PRESCRIPTION" }, + { RG_EYEBALL_FROG, "ITEM_FROG" }, + { RG_EYEDROPS, "ITEM_EYEDROPS" }, + { RG_CLAIM_CHECK, "ITEM_CLAIM_CHECK" }, + { RG_GOLD_SKULLTULA_TOKEN, "ITEM_SKULL_TOKEN" }, + { RG_PROGRESSIVE_HOOKSHOT, "ITEM_HOOKSHOT" }, + { RG_PROGRESSIVE_STRENGTH, "ITEM_BRACELET" }, + { RG_PROGRESSIVE_BOMB_BAG, "ITEM_BOMB_BAG_30" }, + { RG_PROGRESSIVE_BOW, "ITEM_QUIVER_30" }, + { RG_PROGRESSIVE_SLINGSHOT, "ITEM_SLINGSHOT" }, + { RG_PROGRESSIVE_WALLET, "ITEM_WALLET_ADULT" }, + { RG_PROGRESSIVE_SCALE, "ITEM_SCALE_SILVER" }, + { RG_PROGRESSIVE_NUT_BAG, "ITEM_NUT" }, + { RG_PROGRESSIVE_STICK_BAG, "ITEM_STICK" }, + { RG_PROGRESSIVE_BOMBCHUS, "ITEM_BOMBCHU" }, + { RG_PROGRESSIVE_MAGIC, "ITEM_MAGIC_SMALL" }, + { RG_MAGIC_SINGLE, "ITEM_MAGIC_SMALL" }, + { RG_MAGIC_DOUBLE, "ITEM_MAGIC_LARGE" }, + { RG_PROGRESSIVE_OCARINA, "ITEM_OCARINA_FAIRY" }, + { RG_PROGRESSIVE_GORONSWORD, "ITEM_SWORD_BGS" }, + { RG_EMPTY_BOTTLE, "ITEM_BOTTLE" }, + { RG_BOTTLE_WITH_MILK, "ITEM_MILK_BOTTLE" }, + { RG_BOTTLE_WITH_RED_POTION, "ITEM_POTION_RED" }, + { RG_BOTTLE_WITH_GREEN_POTION, "ITEM_POTION_GREEN" }, + { RG_BOTTLE_WITH_BLUE_POTION, "ITEM_POTION_BLUE" }, + { RG_BOTTLE_WITH_FAIRY, "ITEM_FAIRY" }, + { RG_BOTTLE_WITH_FISH, "ITEM_FISH" }, + { RG_BOTTLE_WITH_BLUE_FIRE, "ITEM_BLUE_FIRE" }, + { RG_BOTTLE_WITH_BUGS, "ITEM_BUG" }, + { RG_BOTTLE_WITH_POE, "ITEM_POE" }, + { RG_RUTOS_LETTER, "ITEM_LETTER_RUTO" }, + { RG_BOTTLE_WITH_BIG_POE, "ITEM_BIG_POE" }, + { RG_ZELDAS_LULLABY, "ITEM_SONG_LULLABY" }, + { RG_EPONAS_SONG, "ITEM_SONG_EPONA" }, + { RG_SARIAS_SONG, "ITEM_SONG_SARIA" }, + { RG_SUNS_SONG, "ITEM_SONG_SUN" }, + { RG_SONG_OF_TIME, "ITEM_SONG_TIME" }, + { RG_SONG_OF_STORMS, "ITEM_SONG_STORMS" }, + { RG_MINUET_OF_FOREST, "ITEM_SONG_MINUET" }, + { RG_BOLERO_OF_FIRE, "ITEM_SONG_BOLERO" }, + { RG_SERENADE_OF_WATER, "ITEM_SONG_SERENADE" }, + { RG_REQUIEM_OF_SPIRIT, "ITEM_SONG_REQUIEM" }, + { RG_NOCTURNE_OF_SHADOW, "ITEM_SONG_NOCTURNE" }, + { RG_PRELUDE_OF_LIGHT, "ITEM_SONG_PRELUDE" }, + { RG_DEKU_TREE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_DODONGOS_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, + { RG_JABU_JABUS_BELLY_MAP, "ITEM_DUNGEON_MAP" }, + { RG_FOREST_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_FIRE_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_WATER_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_SPIRIT_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_SHADOW_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_BOTW_MAP, "ITEM_DUNGEON_MAP" }, + { RG_ICE_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, + { RG_DEKU_TREE_COMPASS, "ITEM_COMPASS" }, + { RG_DODONGOS_CAVERN_COMPASS, "ITEM_COMPASS" }, + { RG_JABU_JABUS_BELLY_COMPASS, "ITEM_COMPASS" }, + { RG_FOREST_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_FIRE_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_WATER_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_SPIRIT_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_SHADOW_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_BOTW_COMPASS, "ITEM_COMPASS" }, + { RG_ICE_CAVERN_COMPASS, "ITEM_COMPASS" }, + { RG_FOREST_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_FIRE_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_WATER_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_SPIRIT_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_SHADOW_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_GANONS_CASTLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_FOREST_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_FIRE_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_WATER_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_SPIRIT_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_SHADOW_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_BOTW_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_GTG_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_HIDEOUT_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_GANONS_CASTLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_TCG_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_KOKIRI_EMERALD, "ITEM_KOKIRI_EMERALD" }, + { RG_GORON_RUBY, "ITEM_GORON_RUBY" }, + { RG_ZORA_SAPPHIRE, "ITEM_ZORA_SAPPHIRE" }, + { RG_FOREST_MEDALLION, "ITEM_MEDALLION_FOREST" }, + { RG_FIRE_MEDALLION, "ITEM_MEDALLION_FIRE" }, + { RG_WATER_MEDALLION, "ITEM_MEDALLION_WATER" }, + { RG_SPIRIT_MEDALLION, "ITEM_MEDALLION_SPIRIT" }, + { RG_SHADOW_MEDALLION, "ITEM_MEDALLION_SHADOW" }, + { RG_LIGHT_MEDALLION, "ITEM_MEDALLION_LIGHT" }, + { RG_RECOVERY_HEART, "ITEM_HEART_GRAYSCALE" }, + { RG_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_GREG_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_BLUE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_RED_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_PURPLE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_HUGE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_LOSER_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_PIECE_OF_HEART, "ITEM_HEART_PIECE" }, + { RG_HEART_CONTAINER, "ITEM_HEART_CONTAINER" }, + { RG_ICE_TRAP, "ITEM_ICE_TRAP" }, + { RG_MILK, "ITEM_MILK_BOTTLE" }, + { RG_BOMBS_5, "ITEM_BOMB" }, + { RG_BOMBS_10, "ITEM_BOMB" }, + { RG_BOMBS_20, "ITEM_BOMB" }, + { RG_BUY_BOMBS_525, "ITEM_BOMB" }, + { RG_BUY_BOMBS_535, "ITEM_BOMB" }, + { RG_BUY_BOMBS_10, "ITEM_BOMB" }, + { RG_BUY_BOMBS_20, "ITEM_BOMB" }, + { RG_BUY_BOMBS_30, "ITEM_BOMB" }, + { RG_DEKU_NUTS_5, "ITEM_NUT" }, + { RG_DEKU_NUTS_10, "ITEM_NUT" }, + { RG_BUY_DEKU_NUTS_5, "ITEM_NUT" }, + { RG_BUY_DEKU_NUTS_10, "ITEM_NUT" }, + { RG_BOMBCHU_5, "ITEM_BOMBCHU" }, + { RG_BOMBCHU_10, "ITEM_BOMBCHU" }, + { RG_BOMBCHU_20, "ITEM_BOMBCHU" }, + { RG_BUY_BOMBCHUS_20, "ITEM_BOMBCHU" }, + { RG_ARROWS_5, "ITEM_ARROWS_SMALL" }, + { RG_BUY_ARROWS_10, "ITEM_ARROWS_SMALL" }, + { RG_ARROWS_10, "ITEM_ARROWS_MEDIUM" }, + { RG_BUY_ARROWS_30, "ITEM_ARROWS_MEDIUM" }, + { RG_ARROWS_30, "ITEM_ARROWS_LARGE" }, + { RG_BUY_ARROWS_50, "ITEM_ARROWS_LARGE" }, + { RG_TCG_PIECE_OF_HEART, "ITEM_HEART_PIECE" }, + { RG_DEKU_SEEDS_30, "ITEM_SEEDS" }, + { RG_BUY_DEKU_SEEDS_30, "ITEM_SEEDS" }, + { RG_BUY_HEART, "ITEM_HEART_GRAYSCALE" }, + { RG_FISHING_POLE, "ITEM_FISHING_POLE" }, + { RG_SOLD_OUT, "ITEM_SOLD_OUT" }, + { RG_TRIFORCE_PIECE, "TRIFORCE_PIECE" }, + { RG_SKELETON_KEY, "ITEM_KEY_SMALL" } }; Rando::Item plandomizerRandoRetrieveItem(RandomizerGet randoGetItem) { auto randoGetItemEntry = Rando::StaticData::RetrieveItem(randoGetItem); @@ -271,7 +269,7 @@ void PlandoPopImageButtonStyle() { ImVec4 plandomizerGetItemColor(Rando::Item randoItem) { itemColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); - if (randoItem.GetItemType() == ITEMTYPE_SMALLKEY || randoItem.GetItemType() == ITEMTYPE_FORTRESS_SMALLKEY || + if (randoItem.GetItemType() == ITEMTYPE_SMALLKEY || randoItem.GetItemType() == ITEMTYPE_HIDEOUT_KEY || randoItem.GetItemType() == ITEMTYPE_BOSSKEY) { if (randoItem.GetRandomizerGet() == RG_FOREST_TEMPLE_SMALL_KEY || randoItem.GetRandomizerGet() == RG_FOREST_TEMPLE_KEY_RING) { @@ -288,14 +286,14 @@ ImVec4 plandomizerGetItemColor(Rando::Item randoItem) { } else if (randoItem.GetRandomizerGet() == RG_SHADOW_TEMPLE_SMALL_KEY || randoItem.GetRandomizerGet() == RG_SHADOW_TEMPLE_KEY_RING) { itemColor = ImVec4(0.49f, 0.06f, 0.69f, 1.0f); - } else if (randoItem.GetRandomizerGet() == RG_BOTTOM_OF_THE_WELL_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_BOTTOM_OF_THE_WELL_KEY_RING) { + } else if (randoItem.GetRandomizerGet() == RG_BOTW_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_BOTW_KEY_RING) { itemColor = ImVec4(0.89f, 0.43f, 1.0f, 1.0f); - } else if (randoItem.GetRandomizerGet() == RG_GERUDO_TRAINING_GROUND_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_GERUDO_TRAINING_GROUND_KEY_RING) { + } else if (randoItem.GetRandomizerGet() == RG_GTG_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_GTG_KEY_RING) { itemColor = ImVec4(1.0f, 1.0f, 0, 1.0f); - } else if (randoItem.GetRandomizerGet() == RG_GERUDO_FORTRESS_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_GERUDO_FORTRESS_KEY_RING) { + } else if (randoItem.GetRandomizerGet() == RG_HIDEOUT_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_HIDEOUT_KEY_RING) { itemColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); } else if (randoItem.GetRandomizerGet() == RG_GANONS_CASTLE_SMALL_KEY || randoItem.GetRandomizerGet() == RG_GANONS_CASTLE_KEY_RING) { @@ -314,7 +312,7 @@ ImVec4 plandomizerGetItemColor(Rando::Item randoItem) { } if (randoItem.GetRandomizerGet() >= RG_GREEN_RUPEE && randoItem.GetRandomizerGet() <= RG_HUGE_RUPEE) { if (randoItem.GetRandomizerGet() == RG_GREG_RUPEE || randoItem.GetRandomizerGet() == RG_GREEN_RUPEE || - randoItem.GetRandomizerGet() == RG_TREASURE_GAME_GREEN_RUPEE) { + randoItem.GetRandomizerGet() == RG_LOSER_GREEN_RUPEE) { itemColor = ImVec4(0.02f, 0.76f, 0.18f, 1.0f); } else if (randoItem.GetRandomizerGet() == RG_BLUE_RUPEE) { itemColor = ImVec4(0.33f, 0.71f, 0.87f, 1.0f); @@ -378,7 +376,7 @@ void PlandomizerItemImageCorrection(Rando::Item randoItem) { itemColor = plandomizerGetItemColor(randoItem); - if (randoItem.GetItemType() == ITEMTYPE_SMALLKEY || randoItem.GetItemType() == ITEMTYPE_FORTRESS_SMALLKEY) { + if (randoItem.GetItemType() == ITEMTYPE_SMALLKEY || randoItem.GetItemType() == ITEMTYPE_HIDEOUT_KEY) { textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("ITEM_KEY_SMALL"); return; } @@ -530,17 +528,21 @@ void PlandomizerSaveSpoilerLog() { for (auto& import : plandoLogData) { if (import.checkRewardItem.GetRandomizerGet() == RG_ICE_TRAP) { - spoilerSave["locations"][import.checkName] = { { "item", import.checkRewardItem.GetName().english }, - { "model", import.iceTrapModel.GetName().english }, - { "trickName", import.iceTrapName.c_str() } }; + spoilerSave["locations"][import.checkName] = { + { "item", import.checkRewardItem.GetName().GetForCurrentLanguage(MF_RAW) }, + { "model", import.iceTrapModel.GetName().GetForCurrentLanguage(MF_RAW) }, + { "trickName", import.iceTrapName.c_str() } + }; if (import.shopPrice > -1) { spoilerSave["locations"][import.checkName]["price"] = import.shopPrice; } } else if (import.shopPrice > -1) { - spoilerSave["locations"][import.checkName] = { { "item", import.checkRewardItem.GetName().english }, - { "price", import.shopPrice } }; + spoilerSave["locations"][import.checkName] = { + { "item", import.checkRewardItem.GetName().GetForCurrentLanguage(MF_RAW) }, + { "price", import.shopPrice } + }; } else { - spoilerSave["locations"][import.checkName] = import.checkRewardItem.GetName().english; + spoilerSave["locations"][import.checkName] = import.checkRewardItem.GetName().GetForCurrentLanguage(MF_RAW); } } @@ -622,8 +624,7 @@ void PlandomizerLoadSpoilerLog(std::string logFile) { checkObject.checkRewardItem = plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value.get()]); checkObject.shopPrice = -1; - if (checkObject.shopPrice == -1 && - checkObject.checkRewardItem.GetName().english.find("Buy") != std::string::npos) { + if (checkObject.shopPrice == -1 && checkObject.checkRewardItem.GetItemType() == ITEMTYPE_SHOP) { checkObject.shopPrice = checkObject.checkRewardItem.GetPrice(); } } @@ -657,14 +658,13 @@ void PlandomizerOverlayText(std::pair drawObject) { ImGui::SetCursorScreenPos(textPos); ImGui::Text("+"); } - if (extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "" && - extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "WINNER" && - extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "LOSER") { + std::string parenthesesNum = extractNumberInParentheses(drawObject.first.GetName().GetEnglish(MF_RAW).c_str()); + if (parenthesesNum != "" && parenthesesNum != "WINNER" && parenthesesNum != "LOSER") { textPos = ImVec2(imageMin.x + 2, imageMin.y + 2); ImGui::SetCursorScreenPos(textPos); std::string overlayText = "+"; - overlayText += extractNumberInParentheses(drawObject.first.GetName().english.c_str()); + overlayText += parenthesesNum; ImGui::Text(overlayText.c_str()); } if (drawObject.first.GetRandomizerGet() >= RG_FOREST_TEMPLE_BOSS_KEY && @@ -704,7 +704,7 @@ void PlandomizerDrawItemPopup(uint32_t index) { ImGui::PushID(item); ImGui::TableNextColumn(); PlandomizerItemImageCorrection(plandomizerRandoRetrieveItem(item)); - auto name = plandomizerRandoRetrieveItem(item).GetName().english; + auto name = plandomizerRandoRetrieveItem(item).GetName().GetForCurrentLanguage(MF_RAW); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); @@ -734,7 +734,7 @@ void PlandomizerDrawItemPopup(uint32_t index) { ImGui::PushID(itemIndex); auto itemToDraw = drawSlots.first; PlandomizerItemImageCorrection(drawSlots.first); - auto name = drawSlots.first.GetName().english; + auto name = drawSlots.first.GetName().GetForCurrentLanguage(MF_RAW); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); @@ -783,7 +783,7 @@ void PlandomizerDrawIceTrapPopUp(uint32_t index) { } ImGui::TableNextColumn(); ImGui::PushID(items.first); - auto name = Rando::StaticData::RetrieveItem(items.first).GetName().english; + auto name = Rando::StaticData::RetrieveItem(items.first).GetName().GetForCurrentLanguage(MF_RAW); PlandomizerItemImageCorrection(Rando::StaticData::RetrieveItem(items.first)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, @@ -810,7 +810,7 @@ void PlandomizerDrawItemSlots(uint32_t index) { ImGui::PushID(index); PlandoPushImageButtonStyle(); PlandomizerItemImageCorrection(plandoLogData[index].checkRewardItem); - auto name = plandoLogData[index].checkRewardItem.GetName().english; + auto name = plandoLogData[index].checkRewardItem.GetName().GetForCurrentLanguage(MF_RAW); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); @@ -853,7 +853,7 @@ void PlandomizerDrawIceTrapSetup(uint32_t index) { ImGui::TableNextColumn(); PlandomizerItemImageCorrection(plandoLogData[index].iceTrapModel); PlandoPushImageButtonStyle(); - auto name = plandoLogData[index].iceTrapModel.GetName().english; + auto name = plandoLogData[index].iceTrapModel.GetName().GetForCurrentLanguage(MF_RAW); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); @@ -1117,7 +1117,7 @@ void PlandomizerDrawLocationsWindow(RandomizerCheckArea rcArea) { ImGui::TableNextColumn(); ImGui::TextWrapped(spoilerData.checkName.c_str()); ImGui::TableNextColumn(); - ImGui::TextWrapped(spoilerData.checkRewardItem.GetName().english.c_str()); + ImGui::TextWrapped(spoilerData.checkRewardItem.GetName().GetForCurrentLanguage(MF_RAW).c_str()); ImGui::TableNextColumn(); PlandomizerDrawItemSlots(index); if (plandoLogData[index].checkRewardItem.GetRandomizerGet() == RG_ICE_TRAP) { diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 53a65df22..b200d7e57 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -64,7 +64,7 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { case ITEM_CATEGORY_MAJOR: Gfx_DrawDListOpa(play, (Gfx*)gLargeMajorCrateDL); break; - case ITEM_CATEGORY_SKULLTULA_TOKEN: + case ITEM_CATEGORY_SKULL_TOKEN: Gfx_DrawDListOpa(play, (Gfx*)gLargeTokenCrateDL); break; case ITEM_CATEGORY_SMALL_KEY: @@ -138,7 +138,7 @@ extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { case ITEM_CATEGORY_MAJOR: Gfx_DrawDListOpa(play, (Gfx*)gSmallMajorCrateDL); break; - case ITEM_CATEGORY_SKULLTULA_TOKEN: + case ITEM_CATEGORY_SKULL_TOKEN: Gfx_DrawDListOpa(play, (Gfx*)gSmallTokenCrateDL); break; case ITEM_CATEGORY_SMALL_KEY: diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp index 27d42a148..786ff4c06 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp @@ -68,7 +68,7 @@ extern "C" void EnKusa_RandomizerDraw(Actor* thisx, PlayState* play) { case ITEM_CATEGORY_SMALL_KEY: DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushSmallKeyDL, (Gfx*)gRandoCuttableGrassSmallKeyDL, play); break; - case ITEM_CATEGORY_SKULLTULA_TOKEN: + case ITEM_CATEGORY_SKULL_TOKEN: DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushTokenDL, (Gfx*)gRandoCuttableGrassTokenDL, play); break; case ITEM_CATEGORY_MAJOR: diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 2ee39006d..11dc5bc0e 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -63,6 +63,7 @@ RandomizerArea Context::GetAreaFromString(std::string str) { void Context::InitStaticData() { StaticData::HintTable_Init(); + StaticData::InitItemTable(); StaticData::trialNameToEnum = StaticData::PopulateTranslationMap(StaticData::trialData); StaticData::hintNameToEnum = StaticData::PopulateTranslationMap(StaticData::hintNames); StaticData::hintTypeNameToEnum = StaticData::PopulateTranslationMap(StaticData::hintTypeNames); @@ -121,7 +122,7 @@ ItemOverride& Context::GetItemOverride(size_t locKey) { void Context::PlaceItemInLocation(const RandomizerCheck locKey, const RandomizerGet item, const bool applyEffectImmediately, const bool setHidden) { const auto loc = GetItemLocation(locKey); - SPDLOG_DEBUG(StaticData::RetrieveItem(item).GetName().GetEnglish() + " placed at " + + SPDLOG_DEBUG(StaticData::RetrieveItem(item).GetName().GetForCurrentLanguage(MF_RAW) + " placed at " + StaticData::GetLocation(locKey)->GetName() + "\n"); if (applyEffectImmediately || mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_GLITCHLESS) || @@ -322,7 +323,7 @@ void Context::CreateItemOverrides() { } SPDLOG_DEBUG(loc->GetName()); SPDLOG_DEBUG(": "); - SPDLOG_DEBUG(itemLoc->GetPlacedItemName().GetEnglish()); + SPDLOG_DEBUG(itemLoc->GetPlacedItemName().GetForCurrentLanguage(MF_RAW)); SPDLOG_DEBUG("\n"); } SPDLOG_DEBUG("Overrides Created: "); diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 1eb88ed73..fca145540 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -170,14 +170,13 @@ Dungeons::Dungeons() { "Shadow Temple", RHT_SHADOW_TEMPLE, RG_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_COMPASS, RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6, RSK_MQ_SHADOW_TEMPLE); dungeonList[BOTTOM_OF_THE_WELL] = - DungeonInfo("Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTTOM_OF_THE_WELL_MAP, - RG_BOTTOM_OF_THE_WELL_COMPASS, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, - RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2, RSK_MQ_BOTTOM_OF_THE_WELL); + DungeonInfo("Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTW_MAP, RG_BOTW_COMPASS, RG_BOTW_SMALL_KEY, + RG_BOTW_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2, RSK_MQ_BOTTOM_OF_THE_WELL); dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0, RSK_MQ_ICE_CAVERN); - dungeonList[GERUDO_TRAINING_GROUND] = DungeonInfo( - "Gerudo Training Ground", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, - RG_GERUDO_TRAINING_GROUND_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3, RSK_MQ_GTG); + dungeonList[GERUDO_TRAINING_GROUND] = + DungeonInfo("Gerudo Training Ground", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE, RG_GTG_SMALL_KEY, + RG_GTG_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3, RSK_MQ_GTG); dungeonList[GANONS_CASTLE] = DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY, RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3, RSK_MQ_GANONS_CASTLE); diff --git a/soh/soh/Enhancements/randomizer/hint.cpp b/soh/soh/Enhancements/randomizer/hint.cpp index 27ca4eb2a..f7663670f 100644 --- a/soh/soh/Enhancements/randomizer/hint.cpp +++ b/soh/soh/Enhancements/randomizer/hint.cpp @@ -266,7 +266,7 @@ const HintText Hint::GetHintText(size_t id) const { if (locations.size() > 0) { return *StaticData::GetLocation(locations[0])->GetHint(); } else { - return CustomMessage("ERROR: ITEM HINT WITH NO LOCATIONS OR HINT KEY"); + return HintText(CustomMessage("ERROR: ITEM HINT WITH NO LOCATIONS OR HINT KEY")); } case HINT_TYPE_ITEM_AREA: if (locations.size() > 0) { @@ -276,10 +276,11 @@ const HintText Hint::GetHintText(size_t id) const { return StaticData::hintTextTable[RHT_CAN_BE_FOUND_AT]; } } else { - return CustomMessage("ERROR: ITEM AREA HINT WITH NO LOCATION"); // RANDOTODO get isDungeon from area? + return HintText( + CustomMessage("ERROR: ITEM AREA HINT WITH NO LOCATION")); // RANDOTODO get isDungeon from area? } default: - return CustomMessage("ERROR: NO HINTKEY PROVIDED AND HINT TYPE HAS NO DEFAULT"); + return HintText(CustomMessage("ERROR: NO HINTKEY PROVIDED AND HINT TYPE HAS NO DEFAULT")); } } @@ -416,15 +417,13 @@ oJson Hint::toJSON() { if (!(StaticData::staticHintInfoMap.contains(ownKey) && StaticData::staticHintInfoMap[ownKey].targetItems.size() > 0)) { if (items.size() == 1) { - log["item"] = StaticData::GetItemTable()[items[0]] - .GetName() - .GetEnglish(); // RANDOTODO change to CustomMessage; + log["item"] = StaticData::GetItemTable()[items[0]].GetName().GetForCurrentLanguage( + MF_RAW); // RANDOTODO change to CustomMessage; } else if (items.size() > 1) { std::vector itemStrings = {}; for (size_t c = 0; c < items.size(); c++) { - itemStrings.push_back(StaticData::GetItemTable()[items[c]] - .GetName() - .GetEnglish()); // RANDOTODO change to CustomMessage + itemStrings.push_back(StaticData::GetItemTable()[items[c]].GetName().GetForCurrentLanguage( + MF_RAW)); // RANDOTODO change to CustomMessage } log["items"] = itemStrings; } diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index d73cebca7..f88431a0b 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -332,7 +332,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() { !(getItemEntry.getItemId >= RG_DEKU_TREE_MAP && getItemEntry.getItemId <= RG_ICE_CAVERN_MAP && getItemEntry.modIndex == MOD_RANDOMIZER) && (getItemEntry.getItemCategory == ITEM_CATEGORY_JUNK || - getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN || + getItemEntry.getItemCategory == ITEM_CATEGORY_SKULL_TOKEN || getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER))))) { Item_DropCollectible(gPlayState, &spawnPos, static_cast(ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000)); } @@ -1029,10 +1029,10 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l }); } else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) { Notification::Emit({ - .message = "You found ", + .message = "You found ", // RANDOTODO change based on language .suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId) .GetName() - .english, + .GetForCurrentLanguage(MF_RAW), }); } diff --git a/soh/soh/Enhancements/randomizer/item.cpp b/soh/soh/Enhancements/randomizer/item.cpp index 71f9fff38..bf67aa1de 100644 --- a/soh/soh/Enhancements/randomizer/item.cpp +++ b/soh/soh/Enhancements/randomizer/item.cpp @@ -12,35 +12,54 @@ namespace Rando { Item::Item() - : randomizerGet(RG_NONE), type(ITEMTYPE_ITEM), getItemId(GI_NONE), advancement(false), hintKey(RHT_NONE), - progressive(false), price(0) { + : randomizerGet(RG_NONE), type(ITEMTYPE_ITEM), getItemId(GI_NONE), advancement(false), hintKey(RHT_NONE), price(0) { } -Item::Item(const RandomizerGet randomizerGet_, Text name_, const ItemType type_, const int16_t getItemId_, - const bool advancement_, LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const uint16_t itemId_, - const uint16_t objectId_, const uint16_t gid_, const uint16_t textId_, const uint16_t field_, - const int16_t chestAnimation_, const GetItemCategory category_, const uint16_t modIndex_, - const bool progressive_, const uint16_t price_) - : randomizerGet(randomizerGet_), name(std::move(name_)), type(type_), getItemId(getItemId_), - advancement(advancement_), logicVal(logicVal_), hintKey(hintKey_), category(category_), progressive(progressive_), +Item::Item(const RandomizerGet randomizerGet_, const ItemType type_, const int16_t getItemId_, LogicVal logicVal_, + const RandomizerHintTextKey hintKey_, const uint16_t itemId_, const uint16_t objectId_, const uint16_t gid_, + const uint16_t textId_, const uint16_t field_, const int16_t chestAnimation_, + const GetItemCategory category_, const uint16_t modIndex_, const uint16_t price_, + const CustomDrawFunc drawfunc_) + : randomizerGet(randomizerGet_), type(type_), getItemId(getItemId_), logicVal(logicVal_), hintKey(hintKey_), + category(category_), + price(price_) { if (modIndex_ == MOD_RANDOMIZER || getItemId > 0x7D) { giEntry = std::make_shared(GetItemEntry{ itemId_, field_, static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, objectId_, modIndex_, TABLE_RANDOMIZER, static_cast(randomizerGet_), gid_, true, ITEM_FROM_NPC, - category_, static_cast(randomizerGet_), MOD_RANDOMIZER, NULL }); + category_, static_cast(randomizerGet_), MOD_RANDOMIZER, drawfunc_ }); } else { giEntry = std::make_shared(GetItemEntry{ itemId_, field_, static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, objectId_, modIndex_, TABLE_VANILLA, getItemId_, gid_, true, ITEM_FROM_NPC, category_, itemId_, modIndex_, - NULL }); + drawfunc_ }); } } -Item::Item(const RandomizerGet randomizerGet_, Text name_, const ItemType type_, const int16_t getItemId_, - const bool advancement_, LogicVal logicVal_, const RandomizerHintTextKey hintKey_, - const GetItemCategory category_, const bool progressive_, const uint16_t price_) - : randomizerGet(randomizerGet_), name(std::move(name_)), type(type_), getItemId(getItemId_), - advancement(advancement_), logicVal(logicVal_), hintKey(hintKey_), category(category_), progressive(progressive_), +Item::Item(const RandomizerGet randomizerGet_, const ItemType type_, const int16_t getItemId_, LogicVal logicVal_, + const RandomizerHintTextKey hintKey_, const uint16_t objectId_, const uint16_t gid_, const uint16_t textId_, + const uint16_t field_, const int16_t chestAnimation_, const GetItemCategory category_, + const uint16_t modIndex_, const uint16_t price_, const CustomDrawFunc drawfunc_) + : randomizerGet(randomizerGet_), type(type_), getItemId(getItemId_), logicVal(logicVal_), hintKey(hintKey_), + category(category_), price(price_) { + if (modIndex_ == MOD_RANDOMIZER || getItemId > 0x7D) { + giEntry = std::make_shared( + GetItemEntry{ static_cast(randomizerGet_), field_, + static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, + objectId_, modIndex_, TABLE_RANDOMIZER, static_cast(randomizerGet_), gid_, true, + ITEM_FROM_NPC, category_, static_cast(randomizerGet_), MOD_RANDOMIZER, drawfunc_ }); + } else { + giEntry = std::make_shared( + GetItemEntry{ static_cast(randomizerGet_), field_, + static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, + objectId_, modIndex_, TABLE_VANILLA, getItemId_, gid_, true, ITEM_FROM_NPC, category_, + static_cast(randomizerGet_), modIndex_, drawfunc_ }); + } +} + +Item::Item(const RandomizerGet randomizerGet_, const ItemType type_, const int16_t getItemId_, LogicVal logicVal_, + const RandomizerHintTextKey hintKey_, const GetItemCategory category_, const uint16_t price_) + : randomizerGet(randomizerGet_), type(type_), getItemId(getItemId_), logicVal(logicVal_), hintKey(hintKey_), price(price_) { } @@ -64,12 +83,12 @@ void Item::UndoEffect() const { logic->SetInLogic(logicVal, false); } -const Text& Item::GetName() const { - return name; +const CustomMessage& Item::GetName() const { + return StaticData::hintTextTable[hintKey].GetName(); } bool Item::IsAdvancement() const { - return advancement; + return logicVal != LOGIC_NONE; } int Item::GetItemID() const { @@ -102,7 +121,7 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio const bool tycoonWallet = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_INCLUDE_TYCOON_WALLET); const u8 infiniteUpgrades = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_INFINITE_UPGRADES); switch (randomizerGet) { - case RG_PROGRESSIVE_STICK_UPGRADE: + case RG_PROGRESSIVE_STICK_BAG: switch (logic->CurrentUpgrade(UPG_STICKS)) { case 0: if (ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG)) { @@ -132,7 +151,7 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio break; } break; - case RG_PROGRESSIVE_NUT_UPGRADE: + case RG_PROGRESSIVE_NUT_BAG: switch (logic->CurrentUpgrade(UPG_NUTS)) { case 0: if (ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG)) { @@ -332,7 +351,7 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio break; } break; - case RG_PROGRESSIVE_MAGIC_METER: + case RG_PROGRESSIVE_MAGIC: switch (logic->GetSaveContext()->magicLevel) { case 0: actual = RG_MAGIC_SINGLE; @@ -379,18 +398,10 @@ void Item::SetPrice(const uint16_t price_) { price = price_; } -void Item::SetAsPlaythrough() { - playthrough = true; -} - void Item::SetCustomDrawFunc(const CustomDrawFunc drawFunc) const { giEntry->drawFunc = drawFunc; } -bool Item::IsPlaythrough() const { - return playthrough; -} - bool Item::IsBottleItem() const { return getItemId == 0x0F || // Empty Bottle getItemId == 0X14 || // Bottle with Milk @@ -419,7 +430,7 @@ bool Item::IsMajorItem() const { } if (randomizerGet == RG_HEART_CONTAINER || randomizerGet == RG_PIECE_OF_HEART || - randomizerGet == RG_TREASURE_GAME_HEART) { + randomizerGet == RG_TCG_PIECE_OF_HEART) { return false; } @@ -428,7 +439,7 @@ bool Item::IsMajorItem() const { return false; } - if (type == ITEMTYPE_FORTRESS_SMALLKEY && ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_VANILLA)) { + if (type == ITEMTYPE_HIDEOUT_KEY && ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_VANILLA)) { return false; } diff --git a/soh/soh/Enhancements/randomizer/item.h b/soh/soh/Enhancements/randomizer/item.h index 13a654d9c..45388c204 100644 --- a/soh/soh/Enhancements/randomizer/item.h +++ b/soh/soh/Enhancements/randomizer/item.h @@ -17,7 +17,7 @@ enum ItemType { ITEMTYPE_BOSSKEY, ITEMTYPE_SMALLKEY, ITEMTYPE_TOKEN, - ITEMTYPE_FORTRESS_SMALLKEY, + ITEMTYPE_HIDEOUT_KEY, ITEMTYPE_EVENT, ITEMTYPE_DROP, ITEMTYPE_REFILL, @@ -30,19 +30,22 @@ namespace Rando { class Item { public: Item(); - Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int16_t getItemId_, bool advancement_, - LogicVal logicVal_, RandomizerHintTextKey hintKey_, uint16_t itemId_, uint16_t objectId_, uint16_t gid_, - uint16_t textId_, uint16_t field_, int16_t chestAnimation_, GetItemCategory category_, uint16_t modIndex_, - bool progressive_ = false, uint16_t price_ = 0); - Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int16_t getItemId_, bool advancement_, - LogicVal logicVal_, RandomizerHintTextKey hintKey_, GetItemCategory category_, bool progressive_ = false, - uint16_t price_ = 0); + Item(RandomizerGet randomizerGet_, ItemType type_, int16_t getItemId_, LogicVal logicVal_, + RandomizerHintTextKey hintKey_, uint16_t itemId_, uint16_t objectId_, uint16_t gid_, uint16_t textId_, + uint16_t field_, int16_t chestAnimation_, GetItemCategory category_, uint16_t modIndex_, uint16_t price_ = 0, + CustomDrawFunc drawfunc_ = NULL); + Item(RandomizerGet randomizerGet_, ItemType type_, int16_t getItemId_, LogicVal logicVal_, + RandomizerHintTextKey hintKey_, uint16_t objectId_, uint16_t gid_, uint16_t textId_, uint16_t field_, + int16_t chestAnimation_, GetItemCategory category_, uint16_t modIndex_, uint16_t price_ = 0, + CustomDrawFunc drawfunc_ = NULL); + Item(RandomizerGet randomizerGet_, ItemType type_, int16_t getItemId_, LogicVal logicVal_, + RandomizerHintTextKey hintKey_, GetItemCategory category_, uint16_t price_ = 0); ~Item(); void ApplyEffect() const; void UndoEffect() const; - const Text& GetName() const; + const CustomMessage& GetName() const; bool IsAdvancement() const; int GetItemID() const; ItemType GetItemType() const; @@ -52,9 +55,7 @@ class Item { std::shared_ptr GetGIEntry() const; GetItemEntry GetGIEntry_Copy() const; void SetPrice(uint16_t price_); - void SetAsPlaythrough(); void SetCustomDrawFunc(CustomDrawFunc) const; - bool IsPlaythrough() const; bool IsBottleItem() const; bool IsMajorItem() const; RandomizerHintTextKey GetHintKey() const; @@ -72,9 +73,7 @@ class Item { LogicVal logicVal; RandomizerHintTextKey hintKey; GetItemCategory category; - bool progressive; uint16_t price; - bool playthrough = false; std::shared_ptr giEntry; }; } // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 7f22fe83f..986c13b3b 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -1,6 +1,5 @@ #include "static_data.h" #include "context.h" -#include "logic.h" #include "z64object.h" #include "soh/Enhancements/custom-message/CustomMessageTypes.h" #include "draw.h" @@ -10,413 +9,346 @@ using namespace Rando; std::array Rando::StaticData::itemTable; std::unordered_map Rando::StaticData::itemNameToEnum; +void Rando::StaticData::AddItem(const RandomizerGet randomizerGet_, const ItemType type_, const int16_t getItemId_, + LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const uint16_t itemId_, + const uint16_t objectId_, const uint16_t gid_, const uint16_t textId_, + const uint16_t field_, const int16_t chestAnimation_, const GetItemCategory category_, + const uint16_t MODIndex_, const uint16_t price_, CustomDrawFunc drawfunc_) { + itemTable[randomizerGet_] = Item(randomizerGet_, type_, getItemId_, logicVal_, hintKey_, itemId_, objectId_, gid_, + textId_, field_, chestAnimation_, category_, MODIndex_, price_, drawfunc_); +} + +void Rando::StaticData::AddItem(const RandomizerGet randomizerGet_, const ItemType type_, const int16_t getItemId_, + LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const uint16_t objectId_, + const uint16_t gid_, const uint16_t textId_, const uint16_t field_, + const int16_t chestAnimation_, const GetItemCategory category_, + const uint16_t MODIndex_, const uint16_t price_, CustomDrawFunc drawfunc_) { + itemTable[randomizerGet_] = Item(randomizerGet_, type_, getItemId_, logicVal_, hintKey_, objectId_, gid_, textId_, + field_, chestAnimation_, category_, MODIndex_, price_, drawfunc_); +} + +void Rando::StaticData::AddItem(const RandomizerGet randomizerGet_, const ItemType type_, const int16_t getItemId_, + const LogicVal logicVal_, const RandomizerHintTextKey hintKey_, + const GetItemCategory category_, const uint16_t price_) { + itemTable[randomizerGet_] = Item(randomizerGet_, type_, getItemId_, logicVal_, hintKey_, category_, price_); +} + void Rando::StaticData::InitItemTable() { - auto logic = Context::GetInstance()->GetLogic(); - // clang-format off - itemTable[RG_NONE] = Item(RG_NONE, Text{ "No Item", "Rien", "Kein Artikel" }, ITEMTYPE_EVENT, GI_RUPEE_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_NONE, 0, 0, 0, 0, 0, ITEM_CATEGORY_JUNK, MOD_NONE); - // Randomizer Get Randomizer Get Name Text Type Get Item ID Adv. Logic Value Hint Text Key Item ID Object ID Draw ID Text ID field Chest Animation Item Category Mod Index - itemTable[RG_KOKIRI_SWORD] = Item(RG_KOKIRI_SWORD, Text{ "Kokiri Sword", "Épée Kokiri", "Kokiri-Schwert" }, ITEMTYPE_EQUIP, GI_SWORD_KOKIRI, true, LOGIC_KOKIRI_SWORD, RHT_KOKIRI_SWORD, ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_MASTER_SWORD] = Item(RG_MASTER_SWORD, Text{ "Master Sword", "Épée de Legende", "Master-Schwert" }, ITEMTYPE_EQUIP, 0xE0, true, LOGIC_MASTER_SWORD, RHT_MASTER_SWORD, ITEM_SWORD_MASTER, OBJECT_TOKI_OBJECTS, GID_SWORD_BGS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_MASTER_SWORD].SetCustomDrawFunc(Randomizer_DrawMasterSword); - itemTable[RG_GIANTS_KNIFE] = Item(RG_GIANTS_KNIFE, Text{ "Giant's Knife", "Lame des Géants", "Langschwert" }, ITEMTYPE_EQUIP, GI_SWORD_KNIFE, true, LOGIC_NONE, RHT_GIANTS_KNIFE, ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BIGGORON_SWORD] = Item(RG_BIGGORON_SWORD, Text{ "Biggoron's Sword", "Épée de Biggoron", "Biggoron-Schwert" }, ITEMTYPE_EQUIP, GI_SWORD_BGS, true, LOGIC_BIGGORON_SWORD, RHT_BIGGORON_SWORD, ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_DEKU_SHIELD] = Item(RG_DEKU_SHIELD, Text{ "Deku Shield", "Bouclier Mojo", "Deku-Schild" }, ITEMTYPE_EQUIP, GI_SHIELD_DEKU, false, LOGIC_DEKU_SHIELD, RHT_DEKU_SHIELD, ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_HYLIAN_SHIELD] = Item(RG_HYLIAN_SHIELD, Text{ "Hylian Shield", "Bouclier Hylien", "Hylia-Schild" }, ITEMTYPE_EQUIP, GI_SHIELD_HYLIAN, false, LOGIC_HYLIAN_SHIELD, RHT_HYLIAN_SHIELD, ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_MIRROR_SHIELD] = Item(RG_MIRROR_SHIELD, Text{ "Mirror Shield", "Bouclier Miroir", "Spiegel-Schild" }, ITEMTYPE_EQUIP, GI_SHIELD_MIRROR, true, LOGIC_MIRROR_SHIELD, RHT_MIRROR_SHIELD, ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x4E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GORON_TUNIC] = Item(RG_GORON_TUNIC, Text{ "Goron Tunic", "Tunique Goron", "Goronen-Rüstung" }, ITEMTYPE_EQUIP, GI_TUNIC_GORON, true, LOGIC_GORON_TUNIC, RHT_GORON_TUNIC, ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_ZORA_TUNIC] = Item(RG_ZORA_TUNIC, Text{ "Zora Tunic", "Tunique Zora", "Zora-Rüstung" }, ITEMTYPE_EQUIP, GI_TUNIC_ZORA, true, LOGIC_ZORA_TUNIC, RHT_ZORA_TUNIC, ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_IRON_BOOTS] = Item(RG_IRON_BOOTS, Text{ "Iron Boots", "Bottes de plomb", "Eisenstiefel" }, ITEMTYPE_EQUIP, GI_BOOTS_IRON, true, LOGIC_IRON_BOOTS, RHT_IRON_BOOTS, ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_HOVER_BOOTS] = Item(RG_HOVER_BOOTS, Text{ "Hover Boots", "Bottes de airs", "Gleitstiefel" }, ITEMTYPE_EQUIP, GI_BOOTS_HOVER, true, LOGIC_HOVER_BOOTS, RHT_HOVER_BOOTS, ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BOOMERANG] = Item(RG_BOOMERANG, Text{ "Boomerang", "Boomerang", "Bumerang" }, ITEMTYPE_ITEM, GI_BOOMERANG, true, LOGIC_BOOMERANG, RHT_BOOMERANG, ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_LENS_OF_TRUTH] = Item(RG_LENS_OF_TRUTH, Text{ "Lens of Truth", "Monocle de Vérité", "Auge der Wahrheit" }, ITEMTYPE_ITEM, GI_LENS, true, LOGIC_LENS_OF_TRUTH, RHT_LENS_OF_TRUTH, ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_MEGATON_HAMMER] = Item(RG_MEGATON_HAMMER, Text{ "Megaton Hammer", "Masse des Titans", "Stahlhammer" }, ITEMTYPE_ITEM, GI_HAMMER, true, LOGIC_HAMMER, RHT_MEGATON_HAMMER, ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_STONE_OF_AGONY] = Item(RG_STONE_OF_AGONY, Text{ "Stone of Agony", "Pierre de Souffrance", "Stein des Wissens" }, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, LOGIC_STONE_OF_AGONY, RHT_STONE_OF_AGONY, ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_DINS_FIRE] = Item(RG_DINS_FIRE, Text{ "Din's Fire", "Feu de Din", "Dins Feuerinferno" }, ITEMTYPE_ITEM, GI_DINS_FIRE, true, LOGIC_DINS_FIRE, RHT_DINS_FIRE, ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_FARORES_WIND] = Item(RG_FARORES_WIND, Text{ "Farore's Wind", "Vent de Farore", "Farores Donnersturm" }, ITEMTYPE_ITEM, GI_FARORES_WIND, true, LOGIC_FARORES_WIND, RHT_FARORES_WIND, ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_NAYRUS_LOVE] = Item(RG_NAYRUS_LOVE, Text{ "Nayru's Love", "Amour de Nayru", "Nayrus Umarmung" }, ITEMTYPE_ITEM, GI_NAYRUS_LOVE, true, LOGIC_NAYRUS_LOVE, RHT_NAYRUS_LOVE, ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_FIRE_ARROWS] = Item(RG_FIRE_ARROWS, Text{ "Fire Arrow", "Flèche de Feu", "Feuer-Pfeile" }, ITEMTYPE_ITEM, GI_ARROW_FIRE, true, LOGIC_FIRE_ARROWS, RHT_FIRE_ARROWS, ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_ICE_ARROWS] = Item(RG_ICE_ARROWS, Text{ "Ice Arrow", "Flèche de Glace", "Eis-Pfeile" }, ITEMTYPE_ITEM, GI_ARROW_ICE, true, LOGIC_ICE_ARROWS, RHT_ICE_ARROWS, ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_LIGHT_ARROWS] = Item(RG_LIGHT_ARROWS, Text{ "Light Arrow", "Flèche de Lumière", "Licht-Pfeile" }, ITEMTYPE_ITEM, GI_ARROW_LIGHT, true, LOGIC_LIGHT_ARROWS, RHT_LIGHT_ARROWS, ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GERUDO_MEMBERSHIP_CARD] = Item(RG_GERUDO_MEMBERSHIP_CARD, Text{ "Gerudo Membership Card", "Carte Gerudo", "Gerudo-Pass" }, ITEMTYPE_ITEM, GI_GERUDO_CARD, true, LOGIC_GERUDO_CARD, RHT_GERUDO_MEMBERSHIP_CARD, ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_MAGIC_BEAN] = Item(RG_MAGIC_BEAN, Text{ "Magic Bean", "Haricots Magiques", "Wundererbse" }, ITEMTYPE_ITEM, GI_BEAN, true, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN, ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_MAGIC_BEAN_PACK] = Item(RG_MAGIC_BEAN_PACK, Text{ "Magic Bean Pack", "Paquet de Haricots Magiques", "Wundererbsen-Packung" }, ITEMTYPE_ITEM, RG_MAGIC_BEAN_PACK, true, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN_PACK, RG_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_DOUBLE_DEFENSE] = Item(RG_DOUBLE_DEFENSE, Text{ "Double Defense", "Double Défence", "Doppelte Verteidigung" }, ITEMTYPE_ITEM, RG_DOUBLE_DEFENSE, true, LOGIC_DOUBLE_DEFENSE, RHT_DOUBLE_DEFENSE, RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_DOUBLE_DEFENSE].SetCustomDrawFunc(Randomizer_DrawDoubleDefense); + AddItem(RG_NONE, ITEMTYPE_EVENT, GI_RUPEE_GREEN, LOGIC_NONE, RHT_NONE, ITEM_NONE, 0, 0, 0, 0, 0, ITEM_CATEGORY_JUNK, MOD_NONE); + // Randomizer Get Type Get Item ID Logic Value Hint Text Key Item ID Object ID Draw ID Text ID field Chest Animation Item Category MOD Index Price CustomDrawFunction + AddItem(RG_KOKIRI_SWORD, ITEMTYPE_EQUIP, GI_SWORD_KOKIRI, LOGIC_KOKIRI_SWORD, RHT_KOKIRI_SWORD, ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_MASTER_SWORD, ITEMTYPE_EQUIP, 0xE0, LOGIC_MASTER_SWORD, RHT_MASTER_SWORD, ITEM_SWORD_MASTER, OBJECT_TOKI_OBJECTS, GID_SWORD_BGS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawMasterSword); + AddItem(RG_GIANTS_KNIFE, ITEMTYPE_EQUIP, GI_SWORD_KNIFE, LOGIC_NONE, RHT_GIANTS_KNIFE, ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BIGGORON_SWORD, ITEMTYPE_EQUIP, GI_SWORD_BGS, LOGIC_BIGGORON_SWORD, RHT_BIGGORON_SWORD, ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_DEKU_SHIELD, ITEMTYPE_EQUIP, GI_SHIELD_DEKU, LOGIC_NONE, RHT_DEKU_SHIELD, ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_HYLIAN_SHIELD, ITEMTYPE_EQUIP, GI_SHIELD_HYLIAN, LOGIC_NONE, RHT_HYLIAN_SHIELD, ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_MIRROR_SHIELD, ITEMTYPE_EQUIP, GI_SHIELD_MIRROR, LOGIC_MIRROR_SHIELD, RHT_MIRROR_SHIELD, ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x4E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_GORON_TUNIC, ITEMTYPE_EQUIP, GI_TUNIC_GORON, LOGIC_GORON_TUNIC, RHT_GORON_TUNIC, ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_ZORA_TUNIC, ITEMTYPE_EQUIP, GI_TUNIC_ZORA, LOGIC_ZORA_TUNIC, RHT_ZORA_TUNIC, ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_IRON_BOOTS, ITEMTYPE_EQUIP, GI_BOOTS_IRON, LOGIC_IRON_BOOTS, RHT_IRON_BOOTS, ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_HOVER_BOOTS, ITEMTYPE_EQUIP, GI_BOOTS_HOVER, LOGIC_HOVER_BOOTS, RHT_HOVER_BOOTS, ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BOOMERANG, ITEMTYPE_ITEM, GI_BOOMERANG, LOGIC_BOOMERANG, RHT_BOOMERANG, ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_LENS_OF_TRUTH, ITEMTYPE_ITEM, GI_LENS, LOGIC_LENS_OF_TRUTH, RHT_LENS_OF_TRUTH, ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_MEGATON_HAMMER, ITEMTYPE_ITEM, GI_HAMMER, LOGIC_HAMMER, RHT_MEGATON_HAMMER, ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_STONE_OF_AGONY, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, LOGIC_STONE_OF_AGONY, RHT_STONE_OF_AGONY, ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_DINS_FIRE, ITEMTYPE_ITEM, GI_DINS_FIRE, LOGIC_DINS_FIRE, RHT_DINS_FIRE, ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_FARORES_WIND, ITEMTYPE_ITEM, GI_FARORES_WIND, LOGIC_FARORES_WIND, RHT_FARORES_WIND, ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_NAYRUS_LOVE, ITEMTYPE_ITEM, GI_NAYRUS_LOVE, LOGIC_NAYRUS_LOVE, RHT_NAYRUS_LOVE, ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_FIRE_ARROWS, ITEMTYPE_ITEM, GI_ARROW_FIRE, LOGIC_FIRE_ARROWS, RHT_FIRE_ARROWS, ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_ICE_ARROWS, ITEMTYPE_ITEM, GI_ARROW_ICE, LOGIC_ICE_ARROWS, RHT_ICE_ARROWS, ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_LIGHT_ARROWS, ITEMTYPE_ITEM, GI_ARROW_LIGHT, LOGIC_LIGHT_ARROWS, RHT_LIGHT_ARROWS, ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_GERUDO_MEMBERSHIP_CARD, ITEMTYPE_ITEM, GI_GERUDO_CARD, LOGIC_GERUDO_CARD, RHT_GERUDO_MEMBERSHIP_CARD, ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_MAGIC_BEAN, ITEMTYPE_ITEM, GI_BEAN, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN, ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_MAGIC_BEAN_PACK, ITEMTYPE_ITEM, RG_MAGIC_BEAN_PACK, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_DOUBLE_DEFENSE, ITEMTYPE_ITEM, RG_DOUBLE_DEFENSE, LOGIC_DOUBLE_DEFENSE, RHT_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawDoubleDefense); // Trade Quest Items - itemTable[RG_WEIRD_EGG] = Item(RG_WEIRD_EGG, Text{ "Weird Egg", "Oeuf Curieux", "Seltsames Ei" }, ITEMTYPE_ITEM, GI_WEIRD_EGG, true, LOGIC_WEIRD_EGG, RHT_WEIRD_EGG, ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_ZELDAS_LETTER] = Item(RG_ZELDAS_LETTER, Text{ "Zelda's Letter", "Lettre de Zelda", "Zeldas Brief" }, ITEMTYPE_ITEM, GI_LETTER_ZELDA, true, LOGIC_ZELDAS_LETTER, RHT_ZELDAS_LETTER, ITEM_LETTER_ZELDA, OBJECT_GI_LETTER, GID_LETTER_ZELDA, 0x69, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_POCKET_EGG] = Item(RG_POCKET_EGG, Text{ "Pocket Egg", "Oeuf de poche", "Ei" }, ITEMTYPE_ITEM, GI_POCKET_EGG, true, LOGIC_POCKET_EGG, RHT_POCKET_EGG, ITEM_POCKET_EGG, OBJECT_GI_EGG, GID_EGG, 0x01, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_COJIRO] = Item(RG_COJIRO, Text{ "Cojiro", "P'tit Poulet", "Henni" }, ITEMTYPE_ITEM, GI_COJIRO, true, LOGIC_COJIRO, RHT_COJIRO, ITEM_COJIRO, OBJECT_GI_NIWATORI, GID_COJIRO, 0x02, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_ODD_MUSHROOM] = Item(RG_ODD_MUSHROOM, Text{ "Odd Mushroom", "Champigon Suspect", "Schimmelpilz" }, ITEMTYPE_ITEM, GI_ODD_MUSHROOM, true, LOGIC_ODD_MUSHROOM, RHT_ODD_MUSHROOM, ITEM_ODD_MUSHROOM, OBJECT_GI_MUSHROOM, GID_ODD_MUSHROOM, 0x03, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_ODD_POTION] = Item(RG_ODD_POTION, Text{ "Odd Potion", "Mixture Suspecte", "Modertrank" }, ITEMTYPE_ITEM, GI_ODD_POTION, true, LOGIC_ODD_POULTICE, RHT_ODD_POTION, ITEM_ODD_POTION, OBJECT_GI_POWDER, GID_ODD_POTION, 0x04, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_POACHERS_SAW] = Item(RG_POACHERS_SAW, Text{ "Poacher's Saw", "Scie du Chasseur", "Säge" }, ITEMTYPE_ITEM, GI_SAW, true, LOGIC_POACHERS_SAW, RHT_POACHERS_SAW, ITEM_SAW, OBJECT_GI_SAW, GID_SAW, 0x05, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BROKEN_SWORD] = Item(RG_BROKEN_SWORD, Text{ "Broken Goron's Sword", "Épée Brisée de Goron", "zerbr. Goronen-Schwert" }, ITEMTYPE_ITEM, GI_SWORD_BROKEN, true, LOGIC_BROKEN_SWORD, RHT_BROKEN_SWORD, ITEM_SWORD_BROKEN, OBJECT_GI_BROKENSWORD, GID_SWORD_BROKEN, 0x08, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_PRESCRIPTION] = Item(RG_PRESCRIPTION, Text{ "Prescription", "Ordonnance", "Rezept" }, ITEMTYPE_ITEM, GI_PRESCRIPTION, true, LOGIC_PRESCRIPTION, RHT_PRESCRIPTION, ITEM_PRESCRIPTION, OBJECT_GI_PRESCRIPTION, GID_PRESCRIPTION, 0x09, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_EYEBALL_FROG] = Item(RG_EYEBALL_FROG, Text{ "Eyeball Frog", "Crapaud-qui-louche", "Glotzfrosch" }, ITEMTYPE_ITEM, GI_FROG, true, LOGIC_EYEBALL_FROG, RHT_EYEBALL_FROG, ITEM_FROG, OBJECT_GI_FROG, GID_FROG, 0x0D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_EYEDROPS] = Item(RG_EYEDROPS, Text{ "World's Finest Eyedrops", "Super Gouttes", "Augentropfen" }, ITEMTYPE_ITEM, GI_EYEDROPS, true, LOGIC_EYEDROPS, RHT_EYEDROPS, ITEM_EYEDROPS, OBJECT_GI_EYE_LOTION, GID_EYEDROPS, 0x0E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_CLAIM_CHECK] = Item(RG_CLAIM_CHECK, Text{ "Claim Check", "Certificat", "Zertifikat" }, ITEMTYPE_ITEM, GI_CLAIM_CHECK, true, LOGIC_CLAIM_CHECK, RHT_CLAIM_CHECK, ITEM_CLAIM_CHECK, OBJECT_GI_TICKETSTONE, GID_CLAIM_CHECK, 0x0A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_WEIRD_EGG, ITEMTYPE_ITEM, GI_WEIRD_EGG, LOGIC_WEIRD_EGG, RHT_WEIRD_EGG, ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_ZELDAS_LETTER, ITEMTYPE_ITEM, GI_LETTER_ZELDA, LOGIC_ZELDAS_LETTER, RHT_ZELDAS_LETTER, ITEM_LETTER_ZELDA, OBJECT_GI_LETTER, GID_LETTER_ZELDA, 0x69, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_POCKET_EGG, ITEMTYPE_ITEM, GI_POCKET_EGG, LOGIC_POCKET_EGG, RHT_POCKET_EGG, ITEM_POCKET_EGG, OBJECT_GI_EGG, GID_EGG, 0x01, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_COJIRO, ITEMTYPE_ITEM, GI_COJIRO, LOGIC_COJIRO, RHT_COJIRO, ITEM_COJIRO, OBJECT_GI_NIWATORI, GID_COJIRO, 0x02, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_ODD_MUSHROOM, ITEMTYPE_ITEM, GI_ODD_MUSHROOM, LOGIC_ODD_MUSHROOM, RHT_ODD_MUSHROOM, ITEM_ODD_MUSHROOM, OBJECT_GI_MUSHROOM, GID_ODD_MUSHROOM, 0x03, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_ODD_POTION, ITEMTYPE_ITEM, GI_ODD_POTION, LOGIC_ODD_POULTICE, RHT_ODD_POTION, ITEM_ODD_POTION, OBJECT_GI_POWDER, GID_ODD_POTION, 0x04, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_POACHERS_SAW, ITEMTYPE_ITEM, GI_SAW, LOGIC_POACHERS_SAW, RHT_POACHERS_SAW, ITEM_SAW, OBJECT_GI_SAW, GID_SAW, 0x05, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BROKEN_SWORD, ITEMTYPE_ITEM, GI_SWORD_BROKEN, LOGIC_BROKEN_SWORD, RHT_BROKEN_SWORD, ITEM_SWORD_BROKEN, OBJECT_GI_BROKENSWORD, GID_SWORD_BROKEN, 0x08, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_PRESCRIPTION, ITEMTYPE_ITEM, GI_PRESCRIPTION, LOGIC_PRESCRIPTION, RHT_PRESCRIPTION, ITEM_PRESCRIPTION, OBJECT_GI_PRESCRIPTION, GID_PRESCRIPTION, 0x09, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_EYEBALL_FROG, ITEMTYPE_ITEM, GI_FROG, LOGIC_EYEBALL_FROG, RHT_EYEBALL_FROG, ITEM_FROG, OBJECT_GI_FROG, GID_FROG, 0x0D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_EYEDROPS, ITEMTYPE_ITEM, GI_EYEDROPS, LOGIC_EYEDROPS, RHT_EYEDROPS, ITEM_EYEDROPS, OBJECT_GI_EYE_LOTION, GID_EYEDROPS, 0x0E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_CLAIM_CHECK, ITEMTYPE_ITEM, GI_CLAIM_CHECK, LOGIC_CLAIM_CHECK, RHT_CLAIM_CHECK, ITEM_CLAIM_CHECK, OBJECT_GI_TICKETSTONE, GID_CLAIM_CHECK, 0x0A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); // Skulltula Token - itemTable[RG_GOLD_SKULLTULA_TOKEN] = Item(RG_GOLD_SKULLTULA_TOKEN, Text{ "Gold Skulltula Token", "Symbole de Skulltula d'Or", "Skulltula-Symbol" }, ITEMTYPE_TOKEN, GI_SKULL_TOKEN, true, LOGIC_GOLD_SKULLTULA_TOKENS, RHT_GOLD_SKULLTULA_TOKEN, ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SKULLTULA_TOKEN, MOD_NONE); + AddItem(RG_GOLD_SKULLTULA_TOKEN, ITEMTYPE_TOKEN, GI_SKULL_TOKEN, LOGIC_GOLD_SKULLTULA_TOKENS, RHT_GOLD_SKULLTULA_TOKEN, ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SKULL_TOKEN, MOD_NONE); // Progressive Items - itemTable[RG_PROGRESSIVE_HOOKSHOT] = Item(RG_PROGRESSIVE_HOOKSHOT, Text{ "Progressive Hookshot", "Grappin (prog.)", "Fanghaken (prog.)" }, ITEMTYPE_ITEM, 0x80, true, LOGIC_PROGRESSIVE_HOOKSHOT, RHT_PROGRESSIVE_HOOKSHOT, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_STRENGTH] = Item(RG_PROGRESSIVE_STRENGTH, Text{ "Strength Upgrade", "Amélioration de Force (prog.)", "Stärke (prog.)" }, ITEMTYPE_ITEM, 0x81, true, LOGIC_PROGRESSIVE_STRENGTH, RHT_PROGRESSIVE_STRENGTH, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_BOMB_BAG] = Item(RG_PROGRESSIVE_BOMB_BAG, Text{ "Progressive Bomb Bag", "Sac de Bombes (prog.)", "Bombentasche (prog.)" }, ITEMTYPE_ITEM, 0x82, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_PROGRESSIVE_BOMB_BAG, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_BOW] = Item(RG_PROGRESSIVE_BOW, Text{ "Progressive Bow", "Arc (prog.)", "Bogen (prog.)" }, ITEMTYPE_ITEM, 0x83, true, LOGIC_PROGRESSIVE_BOW, RHT_PROGRESSIVE_BOW, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_SLINGSHOT] = Item(RG_PROGRESSIVE_SLINGSHOT, Text{ "Progressive Slingshot", "Lance-Pierre (prog.)", "Schleuder (prog.)" }, ITEMTYPE_ITEM, 0x84, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_PROGRESSIVE_SLINGSHOT, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_WALLET] = Item(RG_PROGRESSIVE_WALLET, Text{ "Progressive Wallet", "Bourse (prog.)", "Geldbörse (prog.)" }, ITEMTYPE_ITEM, 0x85, true, LOGIC_PROGRESSIVE_WALLET, RHT_PROGRESSIVE_WALLET, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_SCALE] = Item(RG_PROGRESSIVE_SCALE, Text{ "Progressive Scale", "Écaille (prog.)", "Zora-Schuppe (prog.)" }, ITEMTYPE_ITEM, 0x86, true, LOGIC_PROGRESSIVE_SCALE, RHT_PROGRESSIVE_SCALE, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_NUT_UPGRADE] = Item(RG_PROGRESSIVE_NUT_UPGRADE, Text{ "Progressive Nut Capacity", "Capacité de Noix (prog.)", "Nuß-Kapazität (prog.)" }, ITEMTYPE_ITEM, 0x87, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_PROGRESSIVE_NUT_UPGRADE, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_STICK_UPGRADE] = Item(RG_PROGRESSIVE_STICK_UPGRADE, Text{ "Progressive Stick Capacity", "Capacité de Bâtons (prog.)", "Stab-Kapazität (prog.)" }, ITEMTYPE_ITEM, 0x88, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_PROGRESSIVE_STICK_UPGRADE, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_BOMBCHUS] = Item(RG_PROGRESSIVE_BOMBCHUS, Text{ "Progressive Bombchu", "Missiles (prog.)", "Krabbelminen (prog.)" }, ITEMTYPE_ITEM, 0x89, true, LOGIC_BOMBCHUS, RHT_PROGRESSIVE_BOMBCHUS, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_MAGIC_METER] = Item(RG_PROGRESSIVE_MAGIC_METER, Text{ "Progressive Magic Meter", "Jauge de Magie (prog.)", "Magische Kraft (prog.)" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_PROGRESSIVE_MAGIC_METER, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_OCARINA] = Item(RG_PROGRESSIVE_OCARINA, Text{ "Progressive Ocarina", "Ocarina (prog.)", "Okarina (prog.)" }, ITEMTYPE_ITEM, 0x8B, true, LOGIC_PROGRESSIVE_OCARINA, RHT_PROGRESSIVE_OCARINA, ITEM_CATEGORY_MAJOR, true); - itemTable[RG_PROGRESSIVE_GORONSWORD] = Item(RG_PROGRESSIVE_GORONSWORD, Text{ "Progressive Goron Sword", "Épée Goron (prog.)", "Goronen-Schwert (prog.)" }, ITEMTYPE_ITEM, 0xD4, true, LOGIC_PROGRESSIVE_GIANT_KNIFE, RHT_PROGRESSIVE_GORONSWORD, ITEM_CATEGORY_MAJOR, true); + AddItem(RG_PROGRESSIVE_HOOKSHOT, ITEMTYPE_ITEM, 0x80, LOGIC_PROGRESSIVE_HOOKSHOT, RHT_PROGRESSIVE_HOOKSHOT, ITEM_CATEGORY_MAJOR); // + AddItem(RG_PROGRESSIVE_STRENGTH, ITEMTYPE_ITEM, 0x81, LOGIC_PROGRESSIVE_STRENGTH, RHT_PROGRESSIVE_STRENGTH, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_BOMB_BAG, ITEMTYPE_ITEM, 0x82, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_PROGRESSIVE_BOMB_BAG, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_BOW, ITEMTYPE_ITEM, 0x83, LOGIC_PROGRESSIVE_BOW, RHT_PROGRESSIVE_BOW, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_SLINGSHOT, ITEMTYPE_ITEM, 0x84, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_PROGRESSIVE_SLINGSHOT, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_WALLET, ITEMTYPE_ITEM, 0x85, LOGIC_PROGRESSIVE_WALLET, RHT_PROGRESSIVE_WALLET, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_SCALE, ITEMTYPE_ITEM, 0x86, LOGIC_PROGRESSIVE_SCALE, RHT_PROGRESSIVE_SCALE, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_NUT_BAG, ITEMTYPE_ITEM, 0x87, LOGIC_PROGRESSIVE_NUT_BAG, RHT_PROGRESSIVE_NUT_UPGRADE, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_STICK_BAG, ITEMTYPE_ITEM, 0x88, LOGIC_PROGRESSIVE_STICK_BAG, RHT_PROGRESSIVE_STICK_UPGRADE, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_BOMBCHUS, ITEMTYPE_ITEM, 0x89, LOGIC_BOMBCHUS, RHT_PROGRESSIVE_BOMBCHUS, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_MAGIC, ITEMTYPE_ITEM, 0x8A, LOGIC_PROGRESSIVE_MAGIC, RHT_PROGRESSIVE_MAGIC_METER, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_OCARINA, ITEMTYPE_ITEM, 0x8B, LOGIC_PROGRESSIVE_OCARINA, RHT_PROGRESSIVE_OCARINA, ITEM_CATEGORY_MAJOR); + AddItem(RG_PROGRESSIVE_GORONSWORD, ITEMTYPE_ITEM, 0xD4, LOGIC_PROGRESSIVE_GORONSWORD, RHT_PROGRESSIVE_GORONSWORD, ITEM_CATEGORY_MAJOR); // Bottles - itemTable[RG_EMPTY_BOTTLE] = Item(RG_EMPTY_BOTTLE, Text{ "Empty Bottle", "Bouteille Vide", "Leere Flasche" }, ITEMTYPE_ITEM, GI_BOTTLE, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_MILK, ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x42, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BOTTLE_WITH_MILK] = Item(RG_BOTTLE_WITH_MILK, Text{ "Bottle with Milk", "Bouteille avec du Lait", "Flasche (Milch)" }, ITEMTYPE_ITEM, GI_MILK_BOTTLE, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_MILK, ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BOTTLE_WITH_RED_POTION] = Item(RG_BOTTLE_WITH_RED_POTION, Text{ "Bottle with Red Potion", "Bouteille avec une Potion Rouge", "Flasche (Rotes Elixier)" }, ITEMTYPE_ITEM, 0x8C, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_RED_POTION, RG_BOTTLE_WITH_RED_POTION, OBJECT_GI_LIQUID, GID_POTION_RED, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_GREEN_POTION] = Item(RG_BOTTLE_WITH_GREEN_POTION, Text{ "Bottle with Green Potion", "Bouteille avec une Potion Verte", "Flasche (Grünes Elixier)" }, ITEMTYPE_ITEM, 0x8D, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_GREEN_POTION, RG_BOTTLE_WITH_GREEN_POTION, OBJECT_GI_LIQUID, GID_POTION_GREEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_BLUE_POTION] = Item(RG_BOTTLE_WITH_BLUE_POTION, Text{ "Bottle with Blue Potion", "Bouteille avec une Potion Bleue", "Flasche (Blaues Elixier)" }, ITEMTYPE_ITEM, 0x8E, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_BLUE_POTION, RG_BOTTLE_WITH_BLUE_POTION, OBJECT_GI_LIQUID, GID_POTION_BLUE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_FAIRY] = Item(RG_BOTTLE_WITH_FAIRY, Text{ "Bottle with Fairy", "Bouteille avec une Fée", "Flasche (Fee)" }, ITEMTYPE_ITEM, 0x8F, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_FAIRY, RG_BOTTLE_WITH_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_FISH] = Item(RG_BOTTLE_WITH_FISH, Text{ "Bottle with Fish", "Bouteille avec un Poisson", "Flasche (Fisch)" }, ITEMTYPE_ITEM, 0x90, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_FISH, RG_BOTTLE_WITH_FISH, OBJECT_GI_FISH, GID_FISH, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_BLUE_FIRE] = Item(RG_BOTTLE_WITH_BLUE_FIRE, Text{ "Bottle with Blue Fire", "Bouteille avec une Flamme Bleue", "Flasche (Blaues Feuer)" }, ITEMTYPE_ITEM, 0x91, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_BLUE_FIRE, RG_BOTTLE_WITH_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_BUGS] = Item(RG_BOTTLE_WITH_BUGS, Text{ "Bottle with Bugs", "Bouteille avec des Insectes", "Flasche (Käfer)" }, ITEMTYPE_ITEM, 0x92, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_BUGS, RG_BOTTLE_WITH_BUGS, OBJECT_GI_INSECT, GID_BUG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOTTLE_WITH_POE] = Item(RG_BOTTLE_WITH_POE, Text{ "Bottle with Poe", "Bouteille avec un Esprit", "Flasche (Irrlicht)" }, ITEMTYPE_ITEM, 0x94, true, LOGIC_BOTTLES, RHT_BOTTLE_WITH_POE, RG_BOTTLE_WITH_POE, OBJECT_GI_GHOST, GID_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_RUTOS_LETTER] = Item(RG_RUTOS_LETTER, Text{ "Bottle with Ruto's Letter", "Bouteille avec la Lettre de Ruto", "Flasche (Rutos Brief)" }, ITEMTYPE_ITEM, GI_LETTER_RUTO, true, LOGIC_RUTOS_LETTER, RHT_RUTOS_LETTER, ITEM_LETTER_RUTO, OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO, 0x99, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BOTTLE_WITH_BIG_POE] = Item(RG_BOTTLE_WITH_BIG_POE, Text{ "Bottle with Big Poe", "Bouteille avec une Âme", "Flasche (Nachtschwärmer)" }, ITEMTYPE_ITEM, 0x93, true, LOGIC_BOTTLE_WITH_BIG_POE, RHT_BOTTLE_WITH_BIG_POE, RG_BOTTLE_WITH_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_EMPTY_BOTTLE, ITEMTYPE_ITEM, GI_BOTTLE, LOGIC_BOTTLES, RHT_EMPTY_BOTTLE, ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x42, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BOTTLE_WITH_MILK, ITEMTYPE_ITEM, GI_MILK_BOTTLE, LOGIC_BOTTLES, RHT_BOTTLE_WITH_MILK, ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BOTTLE_WITH_RED_POTION, ITEMTYPE_ITEM, 0x8C, LOGIC_BOTTLES, RHT_BOTTLE_WITH_RED_POTION, OBJECT_GI_LIQUID, GID_POTION_RED, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_GREEN_POTION, ITEMTYPE_ITEM, 0x8D, LOGIC_BOTTLES, RHT_BOTTLE_WITH_GREEN_POTION, OBJECT_GI_LIQUID, GID_POTION_GREEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_BLUE_POTION, ITEMTYPE_ITEM, 0x8E, LOGIC_BOTTLES, RHT_BOTTLE_WITH_BLUE_POTION, OBJECT_GI_LIQUID, GID_POTION_BLUE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_FAIRY, ITEMTYPE_ITEM, 0x8F, LOGIC_BOTTLES, RHT_BOTTLE_WITH_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_FISH, ITEMTYPE_ITEM, 0x90, LOGIC_BOTTLES, RHT_BOTTLE_WITH_FISH, OBJECT_GI_FISH, GID_FISH, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_BLUE_FIRE, ITEMTYPE_ITEM, 0x91, LOGIC_BOTTLES, RHT_BOTTLE_WITH_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_BUGS, ITEMTYPE_ITEM, 0x92, LOGIC_BOTTLES, RHT_BOTTLE_WITH_BUGS, OBJECT_GI_INSECT, GID_BUG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BOTTLE_WITH_POE, ITEMTYPE_ITEM, 0x94, LOGIC_BOTTLES, RHT_BOTTLE_WITH_POE, OBJECT_GI_GHOST, GID_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_RUTOS_LETTER, ITEMTYPE_ITEM, GI_LETTER_RUTO, LOGIC_RUTOS_LETTER, RHT_RUTOS_LETTER, ITEM_LETTER_RUTO, OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO, 0x99, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BOTTLE_WITH_BIG_POE, ITEMTYPE_ITEM, 0x93, LOGIC_BOTTLE_WITH_BIG_POE, RHT_BOTTLE_WITH_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); // Songs - itemTable[RG_ZELDAS_LULLABY] = Item(RG_ZELDAS_LULLABY, Text{ "Zelda's Lullaby", "Berceuse de Zelda", "Zeldas Wiegenlied" }, ITEMTYPE_SONG, 0xC1, true, LOGIC_ZELDAS_LULLABY, RHT_ZELDAS_LULLABY, ITEM_SONG_LULLABY, OBJECT_GI_MELODY, GID_SONG_ZELDA, 0xD4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_EPONAS_SONG] = Item(RG_EPONAS_SONG, Text{ "Epona's Song", "Chant d'Epona", "Eponas Lied" }, ITEMTYPE_SONG, 0xC2, true, LOGIC_EPONAS_SONG, RHT_EPONAS_SONG, ITEM_SONG_EPONA, OBJECT_GI_MELODY, GID_SONG_EPONA, 0xD2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SARIAS_SONG] = Item(RG_SARIAS_SONG, Text{ "Saria's Song", "Chant de Saria", "Salias Lied" }, ITEMTYPE_SONG, 0xC3, true, LOGIC_SARIAS_SONG, RHT_SARIAS_SONG, ITEM_SONG_SARIA, OBJECT_GI_MELODY, GID_SONG_SARIA, 0xD1, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SUNS_SONG] = Item(RG_SUNS_SONG, Text{ "Sun's Song", "Chant du Soleil", "Hymne der Sonne" }, ITEMTYPE_SONG, 0xC4, true, LOGIC_SUNS_SONG, RHT_SUNS_SONG, ITEM_SONG_SUN, OBJECT_GI_MELODY, GID_SONG_SUN, 0xD3, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SONG_OF_TIME] = Item(RG_SONG_OF_TIME, Text{ "Song of Time", "Chant du Temps", "Hymne der Zeit" }, ITEMTYPE_SONG, 0xC5, true, LOGIC_SONG_OF_TIME, RHT_SONG_OF_TIME, ITEM_SONG_TIME, OBJECT_GI_MELODY, GID_SONG_TIME, 0xD5, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SONG_OF_STORMS] = Item(RG_SONG_OF_STORMS, Text{ "Song of Storms", "Chant des Tempêtes", "Hymne des Sturms" }, ITEMTYPE_SONG, 0xC6, true, LOGIC_SONG_OF_STORMS, RHT_SONG_OF_STORMS, ITEM_SONG_STORMS, OBJECT_GI_MELODY, GID_SONG_STORM, 0xD6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_MINUET_OF_FOREST] = Item(RG_MINUET_OF_FOREST, Text{ "Minuet of Forest", "Menuet des Bois", "Menuett des Waldes" }, ITEMTYPE_SONG, 0xBB, true, LOGIC_MINUET_OF_FOREST, RHT_MINUET_OF_FOREST, ITEM_SONG_MINUET, OBJECT_GI_MELODY, GID_SONG_MINUET, 0x73, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BOLERO_OF_FIRE] = Item(RG_BOLERO_OF_FIRE, Text{ "Bolero of Fire", "Boléro du Feu", "Bolero des Feuers" }, ITEMTYPE_SONG, 0xBC, true, LOGIC_BOLERO_OF_FIRE, RHT_BOLERO_OF_FIRE, ITEM_SONG_BOLERO, OBJECT_GI_MELODY, GID_SONG_BOLERO, 0x74, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SERENADE_OF_WATER] = Item(RG_SERENADE_OF_WATER, Text{ "Serenade of Water", "Sérénade de l'Eau", "Serenade des Wassers" }, ITEMTYPE_SONG, 0xBD, true, LOGIC_SERENADE_OF_WATER, RHT_SERENADE_OF_WATER, ITEM_SONG_SERENADE, OBJECT_GI_MELODY, GID_SONG_SERENADE, 0x75, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_NOCTURNE_OF_SHADOW] = Item(RG_NOCTURNE_OF_SHADOW, Text{ "Nocturne of Shadow", "Nocturne de l'Ombre", "Nocturne des Schattens" }, ITEMTYPE_SONG, 0xBF, true, LOGIC_NOCTURNE_OF_SHADOW, RHT_NOCTURNE_OF_SHADOW, ITEM_SONG_NOCTURNE, OBJECT_GI_MELODY, GID_SONG_NOCTURNE, 0x77, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_REQUIEM_OF_SPIRIT] = Item(RG_REQUIEM_OF_SPIRIT, Text{ "Requiem of Spirit", "Requiem des Esprits", "Requiem der Geister" }, ITEMTYPE_SONG, 0xBE, true, LOGIC_REQUIEM_OF_SPIRIT, RHT_REQUIEM_OF_SPIRIT, ITEM_SONG_REQUIEM, OBJECT_GI_MELODY, GID_SONG_REQUIEM, 0x76, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_PRELUDE_OF_LIGHT] = Item(RG_PRELUDE_OF_LIGHT, Text{ "Prelude of Light", "Prélude de la Lumière", "Kantate des Lichts" }, ITEMTYPE_SONG, 0xC0, true, LOGIC_PRELUDE_OF_LIGHT, RHT_PRELUDE_OF_LIGHT, ITEM_SONG_PRELUDE, OBJECT_GI_MELODY, GID_SONG_PRELUDE, 0x78, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - // Maps and Compasses - itemTable[RG_DEKU_TREE_MAP] = Item(RG_DEKU_TREE_MAP, Text{ "Great Deku Tree Map", "Carte de l'Arbre Mojo", "Karte (Deku-Baum)" }, ITEMTYPE_MAP, 0xA5, false, LOGIC_MAP_DEKU_TREE, RHT_DEKU_TREE_MAP, RG_DEKU_TREE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_DEKU_TREE_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_DODONGOS_CAVERN_MAP] = Item(RG_DODONGOS_CAVERN_MAP, Text{ "Dodongo's Cavern Map", "Carte de la Caverne Dodongo", "Karte (Dodongos Höhle)" }, ITEMTYPE_MAP, 0xA6, false, LOGIC_MAP_DODONGOS_CAVERN, RHT_DODONGOS_CAVERN_MAP, RG_DODONGOS_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_DODONGOS_CAVERN_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_JABU_JABUS_BELLY_MAP] = Item(RG_JABU_JABUS_BELLY_MAP, Text{ "Jabu-Jabu's Belly Map", "Carte du Ventre de Jabu-Jabu", "Karte (Jabu-Jabus Bauch)" }, ITEMTYPE_MAP, 0xA7, false, LOGIC_MAP_JABU_JABUS_BELLY, RHT_JABU_JABUS_BELLY_MAP, RG_JABU_JABUS_BELLY_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_JABU_JABUS_BELLY_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_FOREST_TEMPLE_MAP] = Item(RG_FOREST_TEMPLE_MAP, Text{ "Forest Temple Map", "Carte du Temple de la Forêt", "Karte (Waldtempel)" }, ITEMTYPE_MAP, 0xA8, false, LOGIC_MAP_FOREST_TEMPLE, RHT_FOREST_TEMPLE_MAP, RG_FOREST_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_FOREST_TEMPLE_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_FIRE_TEMPLE_MAP] = Item(RG_FIRE_TEMPLE_MAP, Text{ "Fire Temple Map", "Carte due Temple de Feu", "Karte (Feuertempel)" }, ITEMTYPE_MAP, 0xA9, false, LOGIC_MAP_FIRE_TEMPLE, RHT_FIRE_TEMPLE_MAP, RG_FIRE_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_FIRE_TEMPLE_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_WATER_TEMPLE_MAP] = Item(RG_WATER_TEMPLE_MAP, Text{ "Water Temple Map", "Carte du Temple de l'Eau", "Karte (Wassertempel)" }, ITEMTYPE_MAP, 0xAA, false, LOGIC_MAP_WATER_TEMPLE, RHT_WATER_TEMPLE_MAP, RG_WATER_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_WATER_TEMPLE_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_SPIRIT_TEMPLE_MAP] = Item(RG_SPIRIT_TEMPLE_MAP, Text{ "Spirit Temple Map", "Carte due Temple de l'Esprit", "Karte (Geistertempel)" }, ITEMTYPE_MAP, 0xAB, false, LOGIC_MAP_SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_MAP, RG_SPIRIT_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_SPIRIT_TEMPLE_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_SHADOW_TEMPLE_MAP] = Item(RG_SHADOW_TEMPLE_MAP, Text{ "Shadow Temple Map", "Carte du Temple de l'Ombre", "Karte (Schattentempel)" }, ITEMTYPE_MAP, 0xAC, false, LOGIC_MAP_SHADOW_TEMPLE, RHT_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_SHADOW_TEMPLE_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_BOTTOM_OF_THE_WELL_MAP] = Item(RG_BOTTOM_OF_THE_WELL_MAP, Text{ "Bottom of the Well Map", "Carte du Puits", "Karte (Grund des Brunnens)" }, ITEMTYPE_MAP, 0xAD, false, LOGIC_MAP_BOTTOM_OF_THE_WELL, RHT_BOTTOM_OF_THE_WELL_MAP, RG_BOTTOM_OF_THE_WELL_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOTTOM_OF_THE_WELL_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_ICE_CAVERN_MAP] = Item(RG_ICE_CAVERN_MAP, Text{ "Ice Cavern Map", "Carte de la Caverne Polaire", "Karte (Eishöhle)" }, ITEMTYPE_MAP, 0xAE, false, LOGIC_MAP_ICE_CAVERN, RHT_ICE_CAVERN_MAP, RG_ICE_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_ICE_CAVERN_MAP].SetCustomDrawFunc(Randomizer_DrawMap); - itemTable[RG_DEKU_TREE_COMPASS] = Item(RG_DEKU_TREE_COMPASS, Text{ "Great Deku Tree Compass", "Boussole de l'Arbre Mojo", "Kompaß (Deku-Baum)" }, ITEMTYPE_COMPASS, 0x9B, false, LOGIC_COMPASS_DEKU_TREE, RHT_DEKU_TREE_COMPASS, RG_DEKU_TREE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_DEKU_TREE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_DODONGOS_CAVERN_COMPASS] = Item(RG_DODONGOS_CAVERN_COMPASS, Text{ "Dodongo's Cavern Compass", "Boussole de la Caverne Dodongo", "Kompaß (Dodongos Höhle)" }, ITEMTYPE_COMPASS, 0x9C, false, LOGIC_COMPASS_DODONGOS_CAVERN, RHT_DODONGOS_CAVERN_COMPASS, RG_DODONGOS_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_DODONGOS_CAVERN_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_JABU_JABUS_BELLY_COMPASS] = Item(RG_JABU_JABUS_BELLY_COMPASS, Text{ "Jabu-Jabu's Belly Compass", "Boussole du Ventre de Jabu-Jabu", "Kompaß (Jabu-Jabus Bauch)" }, ITEMTYPE_COMPASS, 0x9D, false, LOGIC_COMPASS_JABU_JABUS_BELLY, RHT_JABU_JABUS_BELLY_COMPASS, RG_JABU_JABUS_BELLY_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_JABU_JABUS_BELLY_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_FOREST_TEMPLE_COMPASS] = Item(RG_FOREST_TEMPLE_COMPASS, Text{ "Forest Temple Compass", "Boussole du Temple de la Forêt", "Kompaß (Waldtempel)" }, ITEMTYPE_COMPASS, 0x9E, false, LOGIC_COMPASS_FOREST_TEMPLE, RHT_FOREST_TEMPLE_COMPASS, RG_FOREST_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_FOREST_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_FIRE_TEMPLE_COMPASS] = Item(RG_FIRE_TEMPLE_COMPASS, Text{ "Fire Temple Compass", "Boussole du Temple du Feu", "Kompaß (Feuertempel)" }, ITEMTYPE_COMPASS, 0x9F, false, LOGIC_COMPASS_FIRE_TEMPLE, RHT_FIRE_TEMPLE_COMPASS, RG_FIRE_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_FIRE_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_WATER_TEMPLE_COMPASS] = Item(RG_WATER_TEMPLE_COMPASS, Text{ "Water Temple Compass", "Boussole du Temple de l'Eau", "Kompaß (Wassertempel)" }, ITEMTYPE_COMPASS, 0xA0, false, LOGIC_COMPASS_WATER_TEMPLE, RHT_WATER_TEMPLE_COMPASS, RG_WATER_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_WATER_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_SPIRIT_TEMPLE_COMPASS] = Item(RG_SPIRIT_TEMPLE_COMPASS, Text{ "Spirit Temple Compass", "Boussole due Temple de l'Esprit", "Kompaß (Geistertempel)" }, ITEMTYPE_COMPASS, 0xA1, false, LOGIC_COMPASS_SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_COMPASS, RG_SPIRIT_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_SPIRIT_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_SHADOW_TEMPLE_COMPASS] = Item(RG_SHADOW_TEMPLE_COMPASS, Text{ "Shadow Temple Compass", "Boussole du Temple de l'Ombre", "Kompaß (Schattentempel)" }, ITEMTYPE_COMPASS, 0xA2, false, LOGIC_COMPASS_SHADOW_TEMPLE, RHT_SHADOW_TEMPLE_COMPASS, RG_SHADOW_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_SHADOW_TEMPLE_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_BOTTOM_OF_THE_WELL_COMPASS] = Item(RG_BOTTOM_OF_THE_WELL_COMPASS, Text{ "Bottom of the Well Compass", "Boussole du Puits", "Kompaß (Grund des Brunnens)" }, ITEMTYPE_COMPASS, 0xA3, false, LOGIC_COMPASS_BOTTOM_OF_THE_WELL, RHT_BOTTOM_OF_THE_WELL_COMPASS, RG_BOTTOM_OF_THE_WELL_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOTTOM_OF_THE_WELL_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); - itemTable[RG_ICE_CAVERN_COMPASS] = Item(RG_ICE_CAVERN_COMPASS, Text{ "Ice Cavern Compass", "Boussole de la Caverne Polaire", "Kompaß (Eishöhle)" }, ITEMTYPE_COMPASS, 0xA4, false, LOGIC_COMPASS_ICE_CAVERN, RHT_ICE_CAVERN_COMPASS, RG_ICE_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_ICE_CAVERN_COMPASS].SetCustomDrawFunc(Randomizer_DrawCompass); + AddItem(RG_ZELDAS_LULLABY, ITEMTYPE_SONG, 0xC1, LOGIC_ZELDAS_LULLABY, RHT_ZELDAS_LULLABY, ITEM_SONG_LULLABY, OBJECT_GI_MELODY, GID_SONG_ZELDA, 0xD4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_EPONAS_SONG, ITEMTYPE_SONG, 0xC2, LOGIC_EPONAS_SONG, RHT_EPONAS_SONG, ITEM_SONG_EPONA, OBJECT_GI_MELODY, GID_SONG_EPONA, 0xD2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SARIAS_SONG, ITEMTYPE_SONG, 0xC3, LOGIC_SARIAS_SONG, RHT_SARIAS_SONG, ITEM_SONG_SARIA, OBJECT_GI_MELODY, GID_SONG_SARIA, 0xD1, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SUNS_SONG, ITEMTYPE_SONG, 0xC4, LOGIC_SUNS_SONG, RHT_SUNS_SONG, ITEM_SONG_SUN, OBJECT_GI_MELODY, GID_SONG_SUN, 0xD3, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SONG_OF_TIME, ITEMTYPE_SONG, 0xC5, LOGIC_SONG_OF_TIME, RHT_SONG_OF_TIME, ITEM_SONG_TIME, OBJECT_GI_MELODY, GID_SONG_TIME, 0xD5, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SONG_OF_STORMS, ITEMTYPE_SONG, 0xC6, LOGIC_SONG_OF_STORMS, RHT_SONG_OF_STORMS, ITEM_SONG_STORMS, OBJECT_GI_MELODY, GID_SONG_STORM, 0xD6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_MINUET_OF_FOREST, ITEMTYPE_SONG, 0xBB, LOGIC_MINUET_OF_FOREST, RHT_MINUET_OF_FOREST, ITEM_SONG_MINUET, OBJECT_GI_MELODY, GID_SONG_MINUET, 0x73, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BOLERO_OF_FIRE, ITEMTYPE_SONG, 0xBC, LOGIC_BOLERO_OF_FIRE, RHT_BOLERO_OF_FIRE, ITEM_SONG_BOLERO, OBJECT_GI_MELODY, GID_SONG_BOLERO, 0x74, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SERENADE_OF_WATER, ITEMTYPE_SONG, 0xBD, LOGIC_SERENADE_OF_WATER, RHT_SERENADE_OF_WATER, ITEM_SONG_SERENADE, OBJECT_GI_MELODY, GID_SONG_SERENADE, 0x75, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_NOCTURNE_OF_SHADOW, ITEMTYPE_SONG, 0xBF, LOGIC_NOCTURNE_OF_SHADOW, RHT_NOCTURNE_OF_SHADOW, ITEM_SONG_NOCTURNE, OBJECT_GI_MELODY, GID_SONG_NOCTURNE, 0x77, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_REQUIEM_OF_SPIRIT, ITEMTYPE_SONG, 0xBE, LOGIC_REQUIEM_OF_SPIRIT, RHT_REQUIEM_OF_SPIRIT, ITEM_SONG_REQUIEM, OBJECT_GI_MELODY, GID_SONG_REQUIEM, 0x76, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_PRELUDE_OF_LIGHT, ITEMTYPE_SONG, 0xC0, LOGIC_PRELUDE_OF_LIGHT, RHT_PRELUDE_OF_LIGHT, ITEM_SONG_PRELUDE, OBJECT_GI_MELODY, GID_SONG_PRELUDE, 0x78, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + // Maps + AddItem(RG_DEKU_TREE_MAP, ITEMTYPE_MAP, 0xA5, LOGIC_NONE, RHT_DEKU_TREE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_DODONGOS_CAVERN_MAP, ITEMTYPE_MAP, 0xA6, LOGIC_NONE, RHT_DODONGOS_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_JABU_JABUS_BELLY_MAP, ITEMTYPE_MAP, 0xA7, LOGIC_NONE, RHT_JABU_JABUS_BELLY_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_FOREST_TEMPLE_MAP, ITEMTYPE_MAP, 0xA8, LOGIC_NONE, RHT_FOREST_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_FIRE_TEMPLE_MAP, ITEMTYPE_MAP, 0xA9, LOGIC_NONE, RHT_FIRE_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_WATER_TEMPLE_MAP, ITEMTYPE_MAP, 0xAA, LOGIC_NONE, RHT_WATER_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_SPIRIT_TEMPLE_MAP, ITEMTYPE_MAP, 0xAB, LOGIC_NONE, RHT_SPIRIT_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_SHADOW_TEMPLE_MAP, ITEMTYPE_MAP, 0xAC, LOGIC_NONE, RHT_SHADOW_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_BOTW_MAP, ITEMTYPE_MAP, 0xAD, LOGIC_NONE, RHT_BOTW_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + AddItem(RG_ICE_CAVERN_MAP, ITEMTYPE_MAP, 0xAE, LOGIC_NONE, RHT_ICE_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_ITEM_DUNGEON_MAP, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawMap); + // Compasses + AddItem(RG_DEKU_TREE_COMPASS, ITEMTYPE_COMPASS, 0x9B, LOGIC_NONE, RHT_DEKU_TREE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_DODONGOS_CAVERN_COMPASS, ITEMTYPE_COMPASS, 0x9C, LOGIC_NONE, RHT_DODONGOS_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_JABU_JABUS_BELLY_COMPASS, ITEMTYPE_COMPASS, 0x9D, LOGIC_NONE, RHT_JABU_JABUS_BELLY_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_FOREST_TEMPLE_COMPASS, ITEMTYPE_COMPASS, 0x9E, LOGIC_NONE, RHT_FOREST_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_FIRE_TEMPLE_COMPASS, ITEMTYPE_COMPASS, 0x9F, LOGIC_NONE, RHT_FIRE_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_WATER_TEMPLE_COMPASS, ITEMTYPE_COMPASS, 0xA0, LOGIC_NONE, RHT_WATER_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_SPIRIT_TEMPLE_COMPASS, ITEMTYPE_COMPASS, 0xA1, LOGIC_NONE, RHT_SPIRIT_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_SHADOW_TEMPLE_COMPASS, ITEMTYPE_COMPASS, 0xA2, LOGIC_NONE, RHT_SHADOW_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_BOTW_COMPASS, ITEMTYPE_COMPASS, 0xA3, LOGIC_NONE, RHT_BOTW_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); + AddItem(RG_ICE_CAVERN_COMPASS, ITEMTYPE_COMPASS, 0xA4, LOGIC_NONE, RHT_ICE_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_ITEM_COMPASS, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawCompass); // Boss Keys - itemTable[RG_FOREST_TEMPLE_BOSS_KEY] = Item(RG_FOREST_TEMPLE_BOSS_KEY, Text{ "Forest Temple Boss Key", "Clé d'Or du Temple de la Forêt", "Master-Schlüssel (Waldtempel)" }, ITEMTYPE_BOSSKEY, 0x95, true, LOGIC_BOSS_KEY_FOREST_TEMPLE, RHT_FOREST_TEMPLE_BOSS_KEY, RG_FOREST_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER); - itemTable[RG_FOREST_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey); - itemTable[RG_FIRE_TEMPLE_BOSS_KEY] = Item(RG_FIRE_TEMPLE_BOSS_KEY, Text{ "Fire Temple Boss Key", "Clé d'Or du Temple du Feu", "Master-Schlüssel (Feuertempel)" }, ITEMTYPE_BOSSKEY, 0x96, true, LOGIC_BOSS_KEY_FIRE_TEMPLE, RHT_FIRE_TEMPLE_BOSS_KEY, RG_FIRE_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER); - itemTable[RG_FIRE_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey); - itemTable[RG_WATER_TEMPLE_BOSS_KEY] = Item(RG_WATER_TEMPLE_BOSS_KEY, Text{ "Water Temple Boss Key", "Clé d'Or du Temple de l'Eau", "Master-Schlüssel (Wassertempel)" }, ITEMTYPE_BOSSKEY, 0x97, true, LOGIC_BOSS_KEY_WATER_TEMPLE, RHT_WATER_TEMPLE_BOSS_KEY, RG_WATER_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER); - itemTable[RG_WATER_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey); - itemTable[RG_SPIRIT_TEMPLE_BOSS_KEY] = Item(RG_SPIRIT_TEMPLE_BOSS_KEY, Text{ "Spirit Temple Boss Key", "Clé d'Or du Temple de l'Esprit", "Master-Schlüssel (Geistertempel)" }, ITEMTYPE_BOSSKEY, 0x98, true, LOGIC_BOSS_KEY_SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOSS_KEY, RG_SPIRIT_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER); - itemTable[RG_SPIRIT_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey); - itemTable[RG_SHADOW_TEMPLE_BOSS_KEY] = Item( RG_SHADOW_TEMPLE_BOSS_KEY, Text{ "Shadow Temple Boss Key", "Clé d'Or du Temple de l'Ombre", "Master-Schlüssel (Schattentempel)" }, ITEMTYPE_BOSSKEY, 0x99, true, LOGIC_BOSS_KEY_SHADOW_TEMPLE, RHT_SHADOW_TEMPLE_BOSS_KEY, RG_SHADOW_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER); - itemTable[RG_SHADOW_TEMPLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey); - itemTable[RG_GANONS_CASTLE_BOSS_KEY] = Item(RG_GANONS_CASTLE_BOSS_KEY, Text{ "Ganon's Castle Boss Key", "Clé d'Or du Château de Ganon", "Master-Schlüssel (Ganons Schloß)" }, ITEMTYPE_BOSSKEY, 0x9A, true, LOGIC_BOSS_KEY_GANONS_CASTLE, RHT_GANONS_CASTLE_BOSS_KEY, RG_GANONS_CASTLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY,MOD_RANDOMIZER); - itemTable[RG_GANONS_CASTLE_BOSS_KEY].SetCustomDrawFunc(Randomizer_DrawBossKey); - itemTable[RG_FOREST_TEMPLE_SMALL_KEY] = Item(RG_FOREST_TEMPLE_SMALL_KEY, Text{ "Forest Temple Small Key", "Petite Clé du Temple de la Forêt", "Kleiner Schlüssel (Waldtempel)" }, ITEMTYPE_SMALLKEY, 0xAF, true, LOGIC_FOREST_TEMPLE_KEYS, RHT_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_FOREST_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_FIRE_TEMPLE_SMALL_KEY] = Item(RG_FIRE_TEMPLE_SMALL_KEY, Text{ "Fire Temple Small Key", "Petite Clé du Temple du Feu", "Kleiner Schlüssel (Feuertempel)" }, ITEMTYPE_SMALLKEY, 0xB0, true, LOGIC_FIRE_TEMPLE_KEYS, RHT_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_FIRE_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_WATER_TEMPLE_SMALL_KEY] = Item(RG_WATER_TEMPLE_SMALL_KEY, Text{ "Water Temple Small Key", "Petite Clé du Temple de l'Eau", "Kleiner Schlüssel (Wassertempel)" }, ITEMTYPE_SMALLKEY, 0xB1, true, LOGIC_WATER_TEMPLE_KEYS, RHT_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_WATER_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_SPIRIT_TEMPLE_SMALL_KEY] = Item(RG_SPIRIT_TEMPLE_SMALL_KEY, Text{ "Spirit Temple Small Key", "Petite Clé du Temple de l'Esprit", "Kleiner Schlüssel (Geistertempel)" }, ITEMTYPE_SMALLKEY, 0xB2, true, LOGIC_SPIRIT_TEMPLE_KEYS, RHT_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_SPIRIT_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_SHADOW_TEMPLE_SMALL_KEY] = Item(RG_SHADOW_TEMPLE_SMALL_KEY, Text{ "Shadow Temple Small Key", "Petite Clé du Temple de l'Ombre", "Kleiner Schlüssel (Schattentempel)" }, ITEMTYPE_SMALLKEY, 0xB3, true, LOGIC_SHADOW_TEMPLE_KEYS, RHT_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_SHADOW_TEMPLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_BOTTOM_OF_THE_WELL_SMALL_KEY] = Item(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, Text{ "Bottom of the Well Small Key", "Petite Clé du Puits", "Kleiner Schlüssel (Grund des Brunnens)" }, ITEMTYPE_SMALLKEY, 0xB4, true, LOGIC_BOTTOM_OF_THE_WELL_KEYS, RHT_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_BOTTOM_OF_THE_WELL_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_GERUDO_TRAINING_GROUND_SMALL_KEY] = Item(RG_GERUDO_TRAINING_GROUND_SMALL_KEY, Text{ "Training Ground Small Key", "Petite Clé du Gymnase Gerudo", "Kleiner Schlüssel (Gerudo-Trainingsarena)" }, ITEMTYPE_SMALLKEY, 0xB5, true, LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_SMALL_KEY, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GERUDO_TRAINING_GROUND_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_GERUDO_FORTRESS_SMALL_KEY] = Item(RG_GERUDO_FORTRESS_SMALL_KEY, Text{ "Gerudo Fortress Small Key", "Petite Clé du Repaire des Voleurs", "Kleiner Schlüssel (Diebesversteck)" }, ITEMTYPE_FORTRESS_SMALLKEY, 0xB6, true, LOGIC_GERUDO_FORTRESS_KEYS, RHT_GERUDO_FORTRESS_SMALL_KEY, RG_GERUDO_FORTRESS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GERUDO_FORTRESS_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_GANONS_CASTLE_SMALL_KEY] = Item(RG_GANONS_CASTLE_SMALL_KEY, Text{ "Ganon's Castle Small Key", "Petite Clé du Château de Ganon", "Kleiner Schlüssel (Ganons Schloß)" }, ITEMTYPE_SMALLKEY, 0xB7, true, LOGIC_GANONS_CASTLE_KEYS, RHT_GANONS_CASTLE_SMALL_KEY, RG_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GANONS_CASTLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_TREASURE_GAME_SMALL_KEY] = Item(RG_TREASURE_GAME_SMALL_KEY, Text{ "Chest Game Small Key", "Petite Clé du jeu la Chasse-aux-Trésors", "Kleiner Schlüssel (Truhenlotterie)" }, ITEMTYPE_SMALLKEY, GI_DOOR_KEY, true, LOGIC_TREASURE_GAME_KEYS, RHT_TREASURE_GAME_SMALL_KEY, ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_NONE); - itemTable[RG_TREASURE_GAME_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); - itemTable[RG_GUARD_HOUSE_KEY] = Item(RG_GUARD_HOUSE_KEY, Text{ "Guard House Key", "Clé de la Maison des Gardes", "Schlüssel (Wachhaus)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_GUARD_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_GUARD_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GUARD_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_MARKET_BAZAAR_KEY] = Item(RG_MARKET_BAZAAR_KEY, Text{ "Market Bazaar Key", "Clé du Bazar de la Place du Marché", "Schlüssel (Basar des Marktes)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_MARKET_BAZAAR_KEY, RHT_OVERWORLD_KEY, RG_MARKET_BAZAAR_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_MARKET_BAZAAR_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_MARKET_POTION_SHOP_KEY] = Item(RG_MARKET_POTION_SHOP_KEY, Text{ "Market Potion Shop Key", "Clé du Magasin de Potions de la Place du Marché", "Schlüssel (Magie-Laden des Marktes)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_MARKET_POTION_SHOP_KEY, RHT_OVERWORLD_KEY, RG_MARKET_POTION_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_MARKET_POTION_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_MASK_SHOP_KEY] = Item(RG_MASK_SHOP_KEY, Text{ "Mask Shop Key", "Clé de la Foire aux Masques", "Schlüssel (Maskenladen)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_MASK_SHOP_KEY, RHT_OVERWORLD_KEY, RG_MASK_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_MASK_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_MARKET_SHOOTING_GALLERY_KEY] = Item(RG_MARKET_SHOOTING_GALLERY_KEY, Text{ "Market Shooting Gallery Key", "Clé du Stand de Tir de la Place du Marché", "Schlüssel (Schießbude des Marktes)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_MARKET_SHOOTING_GALLERY_KEY, RHT_OVERWORLD_KEY, RG_MARKET_SHOOTING_GALLERY_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_MARKET_SHOOTING_GALLERY_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_BOMBCHU_BOWLING_KEY] = Item(RG_BOMBCHU_BOWLING_KEY, Text{ "Bombchu Bowling Alley Key", "Clé du Bowling Teigneux", "Schlüssel (Minenbowlingbahn)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_BOMBCHU_BOWLING_KEY, RHT_OVERWORLD_KEY, RG_BOMBCHU_BOWLING_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_BOMBCHU_BOWLING_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_TREASURE_CHEST_GAME_BUILDING_KEY] = Item(RG_TREASURE_CHEST_GAME_BUILDING_KEY, Text{ "Treasure Chest Game Building Key", "Clé de la Chasse au Trésor", "Schlüssel (Haus der Truhenlotterie)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_TREASURE_CHEST_GAME_BUILDING_KEY,RHT_OVERWORLD_KEY, RG_TREASURE_CHEST_GAME_BUILDING_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_TREASURE_CHEST_GAME_BUILDING_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_BOMBCHU_SHOP_KEY] = Item(RG_BOMBCHU_SHOP_KEY, Text{ "Bombchu Shop Key", "Clé du Magasin de Missiles", "Schlüssel (Krabbelminenladen)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_BOMBCHU_SHOP_KEY, RHT_OVERWORLD_KEY, RG_BOMBCHU_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_BOMBCHU_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_RICHARDS_HOUSE_KEY] = Item(RG_RICHARDS_HOUSE_KEY, Text{ "Richard's House Key", "Clé de la Maison de Kiki", "Schlüssel (Richards Haus)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_RICHARDS_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_RICHARDS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_RICHARDS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_ALLEY_HOUSE_KEY] = Item(RG_ALLEY_HOUSE_KEY, Text{ "Alley House Key", "Clé de la Maison de la Ruelle", "Schlüssel (Haus in der Gasse)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_ALLEY_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_ALLEY_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_ALLEY_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_KAK_BAZAAR_KEY] = Item(RG_KAK_BAZAAR_KEY, Text{ "Kakariko Bazaar Key", "Clé du Bazar de Cocorico", "Schlüssel (Basar von Kakariko)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_KAK_BAZAAR_KEY, RHT_OVERWORLD_KEY, RG_KAK_BAZAAR_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_KAK_BAZAAR_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_KAK_POTION_SHOP_KEY] = Item(RG_KAK_POTION_SHOP_KEY, Text{ "Kakariko Potion Shop Key", "Clé du Magasin de Potions de Cocorico", "Schlüssel (Magie-Laden von Kakariko)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_KAK_POTION_SHOP_KEY, RHT_OVERWORLD_KEY, RG_KAK_POTION_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_KAK_POTION_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_BOSS_HOUSE_KEY] = Item(RG_BOSS_HOUSE_KEY, Text{ "Boss's House Key", "Clé de la Maison du Chef des Ouvriers", "Schlüssel (Haus des Chefs)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_BOSS_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_BOSS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_BOSS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_GRANNYS_POTION_SHOP_KEY] = Item(RG_GRANNYS_POTION_SHOP_KEY, Text{ "Granny's Potion Shop Key", "Clé de l'Apothicaire", "Schlüssel (Asas Hexenladen)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_GRANNYS_POTION_SHOP_KEY, RHT_OVERWORLD_KEY, RG_GRANNYS_POTION_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GRANNYS_POTION_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_SKULLTULA_HOUSE_KEY] = Item(RG_SKULLTULA_HOUSE_KEY, Text{ "Skulltula House Key", "Clé de la Maison des Araignées", "Schlüssel (Skulltula-Haus)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_SKULLTULA_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_SKULLTULA_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_SKULLTULA_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_IMPAS_HOUSE_KEY] = Item(RG_IMPAS_HOUSE_KEY, Text{ "Impa's House Key", "Clé de la Maison d'Impa", "Schlüssel (Impas Haus)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_IMPAS_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_IMPAS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_IMPAS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_WINDMILL_KEY] = Item(RG_WINDMILL_KEY, Text{ "Windmill Key", "Clé du Moulin", "Schlüssel (Windmühle)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_WINDMILL_KEY, RHT_OVERWORLD_KEY, RG_WINDMILL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_WINDMILL_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_KAK_SHOOTING_GALLERY_KEY] = Item(RG_KAK_SHOOTING_GALLERY_KEY, Text{ "Kakariko Shooting Gallery Key", "Clé du Stand de Tir de Cocorico", "Schlüssel (Schießbude von Kakariko)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_KAK_SHOOTING_GALLERY_KEY, RHT_OVERWORLD_KEY, RG_KAK_SHOOTING_GALLERY_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_KAK_SHOOTING_GALLERY_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_DAMPES_HUT_KEY] = Item(RG_DAMPES_HUT_KEY, Text{ "Dampe's Hut Key", "Clé de la Cabane d'Igor", "Schlüssel (Hütte des Totengräbers)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_DAMPES_HUT_KEY, RHT_OVERWORLD_KEY, RG_DAMPES_HUT_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_DAMPES_HUT_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_TALONS_HOUSE_KEY] = Item(RG_TALONS_HOUSE_KEY, Text{ "Talon's House Key", "Clé de la Maison de Talon", "Schlüssel (Talons Haus)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_TALONS_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_TALONS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_TALONS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_STABLES_KEY] = Item(RG_STABLES_KEY, Text{ "Stables Key", "Clé des Écuries", "Schlüssel (Ställe)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_STABLES_KEY, RHT_OVERWORLD_KEY, RG_STABLES_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_STABLES_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_BACK_TOWER_KEY] = Item(RG_BACK_TOWER_KEY, Text{ "Back Tower Key", "Clé du Silo", "Schlüssel (Lon Lon-Turm)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_BACK_TOWER_KEY, RHT_OVERWORLD_KEY, RG_BACK_TOWER_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_BACK_TOWER_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_HYLIA_LAB_KEY] = Item(RG_HYLIA_LAB_KEY, Text{ "Hylia Laboratory Key", "Clé du Laboratoire du Lac Hylia", "Schlüssel (Hylia-Labor)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_HYLIA_LAB_KEY, RHT_OVERWORLD_KEY, RG_HYLIA_LAB_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_HYLIA_LAB_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_FISHING_HOLE_KEY] = Item(RG_FISHING_HOLE_KEY, Text{ "Fishing Hole Key", "Clé de l'Étang", "Schlüssel (Fischweiher)" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_FISHING_HOLE_KEY, RHT_OVERWORLD_KEY, RG_FISHING_HOLE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_FISHING_HOLE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); + AddItem(RG_FOREST_TEMPLE_BOSS_KEY, ITEMTYPE_BOSSKEY, 0x95, LOGIC_BOSS_KEY_FOREST_TEMPLE, RHT_FOREST_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawBossKey); + AddItem(RG_FIRE_TEMPLE_BOSS_KEY, ITEMTYPE_BOSSKEY, 0x96, LOGIC_BOSS_KEY_FIRE_TEMPLE, RHT_FIRE_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawBossKey); + AddItem(RG_WATER_TEMPLE_BOSS_KEY, ITEMTYPE_BOSSKEY, 0x97, LOGIC_BOSS_KEY_WATER_TEMPLE, RHT_WATER_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawBossKey); + AddItem(RG_SPIRIT_TEMPLE_BOSS_KEY, ITEMTYPE_BOSSKEY, 0x98, LOGIC_BOSS_KEY_SPIRIT_TEMPLE, RHT_SPIRIT_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawBossKey); + AddItem(RG_SHADOW_TEMPLE_BOSS_KEY, ITEMTYPE_BOSSKEY, 0x99, LOGIC_BOSS_KEY_SHADOW_TEMPLE, RHT_SHADOW_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawBossKey); + AddItem(RG_GANONS_CASTLE_BOSS_KEY, ITEMTYPE_BOSSKEY, 0x9A, LOGIC_BOSS_KEY_GANONS_CASTLE, RHT_GANONS_CASTLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawBossKey); + // Small Keys + AddItem(RG_FOREST_TEMPLE_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xAF, LOGIC_FOREST_TEMPLE_KEYS, RHT_FOREST_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_FIRE_TEMPLE_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB0, LOGIC_FIRE_TEMPLE_KEYS, RHT_FIRE_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_WATER_TEMPLE_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB1, LOGIC_WATER_TEMPLE_KEYS, RHT_WATER_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_SPIRIT_TEMPLE_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB2, LOGIC_SPIRIT_TEMPLE_KEYS, RHT_SPIRIT_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_SHADOW_TEMPLE_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB3, LOGIC_SHADOW_TEMPLE_KEYS, RHT_SHADOW_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_BOTW_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB4, LOGIC_BOTW_KEYS, RHT_BOTW_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_GTG_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB5, LOGIC_GTG_KEYS, RHT_GTG_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_HIDEOUT_SMALL_KEY, ITEMTYPE_HIDEOUT_KEY, 0xB6, LOGIC_HIDEOUT_KEYS, RHT_HIDEOUT_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_GANONS_CASTLE_SMALL_KEY, ITEMTYPE_SMALLKEY, 0xB7, LOGIC_GANONS_CASTLE_KEYS, RHT_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawSmallKey); + AddItem(RG_TCG_SMALL_KEY, ITEMTYPE_SMALLKEY, GI_DOOR_KEY, LOGIC_TCG_KEYS, RHT_TCG_SMALL_KEY, ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_NONE, 0, Randomizer_DrawSmallKey); + // Overworld Keys + AddItem(RG_GUARD_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_GUARD_HOUSE_KEY, RHT_GUARD_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_MARKET_BAZAAR_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_MARKET_BAZAAR_KEY, RHT_MARKET_BAZAAR_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_MARKET_POTION_SHOP_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_MARKET_POTION_SHOP_KEY, RHT_MARKET_POTION_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_MASK_SHOP_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_MASK_SHOP_KEY, RHT_MASK_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_MARKET_SHOOTING_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_MARKET_SHOOTING_KEY, RHT_MARKET_SHOOTING_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_BOMBCHU_BOWLING_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_BOMBCHU_BOWLING_KEY, RHT_BOMBCHU_BOWLING_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_TCG_BUILDING_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_TCG_BUILDING_KEY, RHT_TCG_BUILDING_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_BOMBCHU_SHOP_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_BOMBCHU_SHOP_KEY, RHT_BOMBCHU_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_RICHARDS_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_RICHARDS_HOUSE_KEY, RHT_RICHARDS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_ALLEY_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_ALLEY_HOUSE_KEY, RHT_ALLEY_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_KAK_BAZAAR_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_KAK_BAZAAR_KEY, RHT_KAK_BAZAAR_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_KAK_POTION_SHOP_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_KAK_POTION_SHOP_KEY, RHT_KAK_POTION_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_BOSS_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_BOSS_HOUSE_KEY, RHT_BOSS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_GRANNYS_SHOP_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_GRANNYS_SHOP_KEY, RHT_GRANNYS_SHOP_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_SKULLTULA_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_SKULLTULA_HOUSE_KEY, RHT_SKULLTULA_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_IMPAS_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_IMPAS_HOUSE_KEY, RHT_IMPAS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_WINDMILL_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_WINDMILL_KEY, RHT_WINDMILL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_KAK_SHOOTING_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_KAK_SHOOTING_KEY, RHT_KAK_SHOOTING_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_DAMPES_HUT_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_DAMPES_HUT_KEY, RHT_DAMPES_HUT_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_TALONS_HOUSE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_TALONS_HOUSE_KEY, RHT_TALONS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_STABLES_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_STABLES_KEY, RHT_STABLES_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_BACK_TOWER_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_BACK_TOWER_KEY, RHT_BACK_TOWER_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_HYLIA_LAB_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_HYLIA_LAB_KEY, RHT_HYLIA_LAB_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); + AddItem(RG_FISHING_HOLE_KEY, ITEMTYPE_ITEM, GI_DOOR_KEY, LOGIC_FISHING_HOLE_KEY, RHT_FISHING_HOLE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawOverworldKey); // Key Rings - itemTable[RG_FOREST_TEMPLE_KEY_RING] = Item(RG_FOREST_TEMPLE_KEY_RING, Text{ "Forest Temple Key Ring", "Trousseau du Temple de la Forêt", "Schlüsselbund (Waldtempel)" }, ITEMTYPE_SMALLKEY, 0xD5, true, LOGIC_FOREST_TEMPLE_KEYS, RHT_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_FOREST_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_FIRE_TEMPLE_KEY_RING] = Item(RG_FIRE_TEMPLE_KEY_RING, Text{ "Fire Temple Key Ring", "Trousseau du Temple du Feu", "Schlüsselbund (Feuertempel)" }, ITEMTYPE_SMALLKEY, 0xD6, true, LOGIC_FIRE_TEMPLE_KEYS, RHT_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_FIRE_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_WATER_TEMPLE_KEY_RING] = Item(RG_WATER_TEMPLE_KEY_RING, Text{ "Water Temple Key Ring", "Trousseau du Temple de l'Eau", "Schlüsselbund (Wassertempel)" }, ITEMTYPE_SMALLKEY, 0xD7, true, LOGIC_WATER_TEMPLE_KEYS, RHT_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_WATER_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_SPIRIT_TEMPLE_KEY_RING] = Item(RG_SPIRIT_TEMPLE_KEY_RING, Text{ "Spirit Temple Key Ring", "Trousseau du Temple de l'Esprit", "Schlüsselbund (Geistertempel)" }, ITEMTYPE_SMALLKEY, 0xD8, true, LOGIC_SPIRIT_TEMPLE_KEYS, RHT_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_SPIRIT_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_SHADOW_TEMPLE_KEY_RING] = Item(RG_SHADOW_TEMPLE_KEY_RING, Text{ "Shadow Temple Key Ring", "Trousseau du Temple de l'Ombre", "Schlüsselbund (Schattentempel)" }, ITEMTYPE_SMALLKEY, 0xD9, true, LOGIC_SHADOW_TEMPLE_KEYS, RHT_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_SHADOW_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING] = Item(RG_BOTTOM_OF_THE_WELL_KEY_RING, Text{ "Bottom of the Well Key Ring", "Trousseau du Puits", "Schlüsselbund (Grund des Brunnens)" }, ITEMTYPE_SMALLKEY, 0xDA, true, LOGIC_BOTTOM_OF_THE_WELL_KEYS, RHT_BOTTOM_OF_THE_WELL_KEY_RING, RG_BOTTOM_OF_THE_WELL_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING] = Item(RG_GERUDO_TRAINING_GROUND_KEY_RING, Text{ "Training Ground Key Ring", "Trousseau du Gymnase Gerudo", "Schlüsselbund (Gerudo-Trainingsarena)" }, ITEMTYPE_SMALLKEY, 0xDB, true, LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_KEY_RING, RG_GERUDO_TRAINING_GROUND_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_GERUDO_FORTRESS_KEY_RING] = Item(RG_GERUDO_FORTRESS_KEY_RING, Text{ "Gerudo Fortress Key Ring", "Trousseau du Repaire des Voleurs", "Schlüsselbund (Diebesversteck)" }, ITEMTYPE_FORTRESS_SMALLKEY, 0xDC, true, LOGIC_GERUDO_FORTRESS_KEYS, RHT_GERUDO_FORTRESS_KEY_RING, RG_GERUDO_FORTRESS_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GERUDO_FORTRESS_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_GANONS_CASTLE_KEY_RING] = Item(RG_GANONS_CASTLE_KEY_RING, Text{ "Ganon's Castle Key Ring", "Trousseau du Château de Ganon", "Schlüsselbund (Ganons Schloß)" }, ITEMTYPE_SMALLKEY, 0xDD, true, LOGIC_GANONS_CASTLE_KEYS, RHT_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_GANONS_CASTLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_TREASURE_GAME_KEY_RING] = Item(RG_TREASURE_GAME_KEY_RING, Text{ "Chest Game Key Ring", "Trousseau du jeu la Chasse-aux-Trésors", "Schlüsselbund (Truhenlotterie)" }, ITEMTYPE_SMALLKEY, 0xDE, true, LOGIC_TREASURE_GAME_KEYS, RHT_TREASURE_GAME_KEY_RING, RG_TREASURE_GAME_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); - itemTable[RG_TREASURE_GAME_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); + AddItem(RG_FOREST_TEMPLE_KEY_RING, ITEMTYPE_SMALLKEY, 0xD5, LOGIC_FOREST_TEMPLE_KEYS, RHT_FOREST_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_FIRE_TEMPLE_KEY_RING, ITEMTYPE_SMALLKEY, 0xD6, LOGIC_FIRE_TEMPLE_KEYS, RHT_FIRE_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_WATER_TEMPLE_KEY_RING, ITEMTYPE_SMALLKEY, 0xD7, LOGIC_WATER_TEMPLE_KEYS, RHT_WATER_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_SPIRIT_TEMPLE_KEY_RING, ITEMTYPE_SMALLKEY, 0xD8, LOGIC_SPIRIT_TEMPLE_KEYS, RHT_SPIRIT_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_SHADOW_TEMPLE_KEY_RING, ITEMTYPE_SMALLKEY, 0xD9, LOGIC_SHADOW_TEMPLE_KEYS, RHT_SHADOW_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_BOTW_KEY_RING, ITEMTYPE_SMALLKEY, 0xDA, LOGIC_BOTW_KEYS, RHT_BOTW_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_GTG_KEY_RING, ITEMTYPE_SMALLKEY, 0xDB, LOGIC_GTG_KEYS, RHT_GTG_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_HIDEOUT_KEY_RING, ITEMTYPE_HIDEOUT_KEY, 0xDC, LOGIC_HIDEOUT_KEYS, RHT_HIDEOUT_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_GANONS_CASTLE_KEY_RING, ITEMTYPE_SMALLKEY, 0xDD, LOGIC_GANONS_CASTLE_KEYS, RHT_GANONS_CASTLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); + AddItem(RG_TCG_KEY_RING, ITEMTYPE_SMALLKEY, 0xDE, LOGIC_TCG_KEYS, RHT_TCG_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, 0, Randomizer_DrawKeyRing); // Dungeon Rewards - itemTable[RG_KOKIRI_EMERALD] = Item(RG_KOKIRI_EMERALD, Text{ "Kokiri's Emerald", "Émeraude Kokiri", "Kokiri-Smaragd" }, ITEMTYPE_DUNGEONREWARD, 0xCB, true, LOGIC_KOKIRI_EMERALD, RHT_KOKIRI_EMERALD, ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GORON_RUBY] = Item(RG_GORON_RUBY, Text{ "Goron's Ruby", "Rubis Goron", "Goronen-Rubin" }, ITEMTYPE_DUNGEONREWARD, 0xCC, true, LOGIC_GORON_RUBY, RHT_GORON_RUBY, ITEM_GORON_RUBY, OBJECT_GI_JEWEL, GID_GORON_RUBY, 0x81, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_ZORA_SAPPHIRE] = Item(RG_ZORA_SAPPHIRE, Text{ "Zora's Sapphire", "Saphir Zora", "Zora-Saphir" }, ITEMTYPE_DUNGEONREWARD, 0xCD, true, LOGIC_ZORA_SAPPHIRE, RHT_ZORA_SAPPHIRE, ITEM_ZORA_SAPPHIRE, OBJECT_GI_JEWEL, GID_ZORA_SAPPHIRE, 0x82, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_FOREST_MEDALLION] = Item(RG_FOREST_MEDALLION, Text{ "Forest Medallion", "Médaillon de la Forêt", "Amulett des Waldes" }, ITEMTYPE_DUNGEONREWARD, 0xCE, true, LOGIC_FOREST_MEDALLION, RHT_FOREST_MEDALLION, ITEM_MEDALLION_FOREST, OBJECT_GI_MEDAL, GID_MEDALLION_FOREST, 0x3E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_FIRE_MEDALLION] = Item(RG_FIRE_MEDALLION, Text{ "Fire Medallion", "Médaillon du Feu", "Amulett des Feuers" }, ITEMTYPE_DUNGEONREWARD, 0xCF, true, LOGIC_FIRE_MEDALLION, RHT_FIRE_MEDALLION, ITEM_MEDALLION_FIRE, OBJECT_GI_MEDAL, GID_MEDALLION_FIRE, 0x3C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_WATER_MEDALLION] = Item(RG_WATER_MEDALLION, Text{ "Water Medallion", "Médaillon de l'Eau", "Amulett des Wassers" }, ITEMTYPE_DUNGEONREWARD, 0xD0, true, LOGIC_WATER_MEDALLION, RHT_WATER_MEDALLION, ITEM_MEDALLION_WATER, OBJECT_GI_MEDAL, GID_MEDALLION_WATER, 0x3D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SPIRIT_MEDALLION] = Item(RG_SPIRIT_MEDALLION, Text{ "Spirit Medallion", "Médaillon de l'Esprit", "Amulett der Geister" }, ITEMTYPE_DUNGEONREWARD, 0xD1, true, LOGIC_SPIRIT_MEDALLION, RHT_SPIRIT_MEDALLION, ITEM_MEDALLION_SPIRIT, OBJECT_GI_MEDAL, GID_MEDALLION_SPIRIT, 0x3F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SHADOW_MEDALLION] = Item(RG_SHADOW_MEDALLION, Text{ "Shadow Medallion", "Médaillon de l'Ombre", "Amulett des Schattens" }, ITEMTYPE_DUNGEONREWARD, 0xD2, true, LOGIC_SHADOW_MEDALLION, RHT_SHADOW_MEDALLION, ITEM_MEDALLION_SHADOW, OBJECT_GI_MEDAL, GID_MEDALLION_SHADOW, 0x41, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_LIGHT_MEDALLION] = Item(RG_LIGHT_MEDALLION, Text{ "Light Medallion", "Médaillon de la Lumière", "Amulett des Lichts" }, ITEMTYPE_DUNGEONREWARD, 0xD3, true, LOGIC_LIGHT_MEDALLION, RHT_LIGHT_MEDALLION, ITEM_MEDALLION_LIGHT, OBJECT_GI_MEDAL, GID_MEDALLION_LIGHT, 0x40, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_KOKIRI_EMERALD, ITEMTYPE_DUNGEONREWARD, 0xCB, LOGIC_KOKIRI_EMERALD, RHT_KOKIRI_EMERALD, ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_GORON_RUBY, ITEMTYPE_DUNGEONREWARD, 0xCC, LOGIC_GORON_RUBY, RHT_GORON_RUBY, ITEM_GORON_RUBY, OBJECT_GI_JEWEL, GID_GORON_RUBY, 0x81, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_ZORA_SAPPHIRE, ITEMTYPE_DUNGEONREWARD, 0xCD, LOGIC_ZORA_SAPPHIRE, RHT_ZORA_SAPPHIRE, ITEM_ZORA_SAPPHIRE, OBJECT_GI_JEWEL, GID_ZORA_SAPPHIRE, 0x82, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_FOREST_MEDALLION, ITEMTYPE_DUNGEONREWARD, 0xCE, LOGIC_FOREST_MEDALLION, RHT_FOREST_MEDALLION, ITEM_MEDALLION_FOREST, OBJECT_GI_MEDAL, GID_MEDALLION_FOREST, 0x3E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_FIRE_MEDALLION, ITEMTYPE_DUNGEONREWARD, 0xCF, LOGIC_FIRE_MEDALLION, RHT_FIRE_MEDALLION, ITEM_MEDALLION_FIRE, OBJECT_GI_MEDAL, GID_MEDALLION_FIRE, 0x3C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_WATER_MEDALLION, ITEMTYPE_DUNGEONREWARD, 0xD0, LOGIC_WATER_MEDALLION, RHT_WATER_MEDALLION, ITEM_MEDALLION_WATER, OBJECT_GI_MEDAL, GID_MEDALLION_WATER, 0x3D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SPIRIT_MEDALLION, ITEMTYPE_DUNGEONREWARD, 0xD1, LOGIC_SPIRIT_MEDALLION, RHT_SPIRIT_MEDALLION, ITEM_MEDALLION_SPIRIT, OBJECT_GI_MEDAL, GID_MEDALLION_SPIRIT, 0x3F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SHADOW_MEDALLION, ITEMTYPE_DUNGEONREWARD, 0xD2, LOGIC_SHADOW_MEDALLION, RHT_SHADOW_MEDALLION, ITEM_MEDALLION_SHADOW, OBJECT_GI_MEDAL, GID_MEDALLION_SHADOW, 0x41, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_LIGHT_MEDALLION, ITEMTYPE_DUNGEONREWARD, 0xD3, LOGIC_LIGHT_MEDALLION, RHT_LIGHT_MEDALLION, ITEM_MEDALLION_LIGHT, OBJECT_GI_MEDAL, GID_MEDALLION_LIGHT, 0x40, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); // Generic Items - itemTable[RG_RECOVERY_HEART] = Item(RG_RECOVERY_HEART, Text{ "Recovery Heart", "Coeur de Vie", "Herz" }, ITEMTYPE_ITEM, GI_HEART, false, LOGIC_NONE, RHT_RECOVERY_HEART, ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_GREEN_RUPEE] = Item(RG_GREEN_RUPEE, Text{ "Green Rupee", "Rubis Vert", "Grüner Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN, false, LOGIC_NONE, RHT_GREEN_RUPEE, ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_GREG_RUPEE] = Item(RG_GREG_RUPEE, Text{ "Greg the Green Rupee", "Rubis Greg", "Greg der grüne Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN, true, LOGIC_GREG, RHT_GREG_RUPEE, RG_GREG_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GREEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BLUE_RUPEE] = Item(RG_BLUE_RUPEE, Text{ "Blue Rupee", "Rubis Bleu", "Blauer Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_BLUE, false, LOGIC_NONE, RHT_BLUE_RUPEE, ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_RED_RUPEE] = Item(RG_RED_RUPEE, Text{ "Red Rupee", "Rubis Rouge", "Roter Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_RED, false, LOGIC_NONE, RHT_RED_RUPEE, ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_PURPLE_RUPEE] = Item(RG_PURPLE_RUPEE, Text{ "Purple Rupee", "Rubis Pourpre", "Violetter Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, false, LOGIC_NONE, RHT_PURPLE_RUPEE, ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_HUGE_RUPEE] = Item(RG_HUGE_RUPEE, Text{ "Huge Rupee", "Énorme Rubis", "Goldener Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, false, LOGIC_NONE, RHT_HUGE_RUPEE, ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_PIECE_OF_HEART] = Item(RG_PIECE_OF_HEART, Text{ "Piece of Heart", "Quart de Coeur", "Herzteil" }, ITEMTYPE_ITEM, GI_HEART_PIECE, true, LOGIC_PIECE_OF_HEART, RHT_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{ "Heart Container", "Réceptacle de Coeur", "Herzcontainer" }, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, LOGIC_HEART_CONTAINER, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_ICE_TRAP] = Item(RG_ICE_TRAP, Text{ "Ice Trap", "Piège de Glace", "Eisfalle" }, ITEMTYPE_ITEM, RG_ICE_TRAP, false, LOGIC_NONE, RHT_ICE_TRAP, RG_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_MILK] = Item(RG_MILK, Text{ "Milk", "Lait", "Lon Lon-Milch" }, ITEMTYPE_ITEM, GI_MILK, false, LOGIC_NONE, RHT_NONE, ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_FISH] = Item(RG_FISH, Text{ "Fish", "Poisson", "Fisch" }, ITEMTYPE_ITEM, GI_FISH, false, LOGIC_NONE, RHT_NONE, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_RECOVERY_HEART, ITEMTYPE_ITEM, GI_HEART, LOGIC_NONE, RHT_RECOVERY_HEART, ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_GREEN_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_GREEN, LOGIC_NONE, RHT_GREEN_RUPEE, ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_GREG_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_GREEN, LOGIC_GREG, RHT_GREG_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GREEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_BLUE_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_BLUE, LOGIC_NONE, RHT_BLUE_RUPEE, ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_RED_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_RED, LOGIC_NONE, RHT_RED_RUPEE, ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_PURPLE_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, LOGIC_NONE, RHT_PURPLE_RUPEE, ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_HUGE_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_GOLD, LOGIC_NONE, RHT_HUGE_RUPEE, ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_PIECE_OF_HEART, ITEMTYPE_ITEM, GI_HEART_PIECE, LOGIC_PIECE_OF_HEART, RHT_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_HEART_CONTAINER, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, LOGIC_HEART_CONTAINER, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_ICE_TRAP, ITEMTYPE_ITEM, RG_ICE_TRAP, LOGIC_NONE, RHT_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_MILK, ITEMTYPE_ITEM, GI_MILK, LOGIC_NONE, RHT_MILK, ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_FISH, ITEMTYPE_ITEM, GI_FISH, LOGIC_NONE, RHT_FISH, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); // Refills - itemTable[RG_BOMBS_5] = Item(RG_BOMBS_5, Text{ "Bombs (5)", "Bombes (5)", "Bomben (5)" }, ITEMTYPE_REFILL, GI_BOMBS_5, false, LOGIC_NONE, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BOMBS_10] = Item(RG_BOMBS_10, Text{ "Bombs (10)", "Bombes (10)", "Bomben (10)" }, ITEMTYPE_REFILL, GI_BOMBS_10, false, LOGIC_NONE, RHT_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BOMBS_20] = Item(RG_BOMBS_20, Text{ "Bombs (20)", "Bombes (20)", "Bomben (20)" }, ITEMTYPE_REFILL, GI_BOMBS_20, false, LOGIC_NONE, RHT_BOMBS_20, ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BOMBCHU_5] = Item(RG_BOMBCHU_5, Text{ "Bombchus (5)", "Missiles (5)", "Krabbelminen (5)" }, ITEMTYPE_REFILL, GI_BOMBCHUS_5, true, LOGIC_BOMBCHUS, RHT_BOMBCHUS_5, ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BOMBCHU_10] = Item(RG_BOMBCHU_10, Text{ "Bombchus (10)", "Missiles (10)", "Krabbelminen (10)" }, ITEMTYPE_REFILL, GI_BOMBCHUS_10, true, LOGIC_BOMBCHUS, RHT_BOMBCHUS_10, ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BOMBCHU_20] = Item(RG_BOMBCHU_20, Text{ "Bombchus (20)", "Missiles (20)", "Krabbelminen (20)" }, ITEMTYPE_REFILL, GI_BOMBCHUS_20, true, LOGIC_BOMBCHUS, RHT_BOMBCHUS_20, ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BOMBCHU_20].SetCustomDrawFunc(Randomizer_DrawBombchuBagInLogic); - itemTable[RG_ARROWS_5] = Item(RG_ARROWS_5, Text{ "Arrows (5)", "Flèches (5)", "Pfeile (5)" }, ITEMTYPE_REFILL, GI_ARROWS_SMALL, false, LOGIC_NONE, RHT_ARROWS_5, ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_ARROWS_10] = Item(RG_ARROWS_10, Text{ "Arrows (10)", "Flèches (10)", "Pfeile (10)" }, ITEMTYPE_REFILL, GI_ARROWS_MEDIUM, false, LOGIC_NONE, RHT_ARROWS_10, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_ARROWS_30] = Item(RG_ARROWS_30, Text{ "Arrows (30)", "Flèches (30)", "Pfeile (30)" }, ITEMTYPE_REFILL, GI_ARROWS_LARGE, false, LOGIC_NONE, RHT_ARROWS_30, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_DEKU_NUTS_5] = Item(RG_DEKU_NUTS_5, Text{ "Deku Nuts (5)", "Noix Mojo (5)", "Deku-Nüsse (5)" }, ITEMTYPE_REFILL, GI_NUTS_5, false, LOGIC_NONE, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_DEKU_NUTS_10] = Item(RG_DEKU_NUTS_10, Text{ "Deku Nuts (10)", "Noix Mojo (10)", "Deku-Nüsse (10)" }, ITEMTYPE_REFILL, GI_NUTS_10, false, LOGIC_NONE, RHT_DEKU_NUTS_10, ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_DEKU_SEEDS_30] = Item(RG_DEKU_SEEDS_30, Text{ "Deku Seeds (30)", "Graines Mojo (30)", "Deku-Kerne (30)" }, ITEMTYPE_REFILL, GI_SEEDS_30, false, LOGIC_NONE, RHT_DEKU_SEEDS_30, ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_DEKU_STICK_1] = Item(RG_DEKU_STICK_1, Text{ "Deku Stick (1)", "Bâton Mojo (1)", "Deku-Stab (1)" }, ITEMTYPE_REFILL, GI_STICKS_1, false, LOGIC_NONE, RHT_DEKU_STICK_1, ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_RED_POTION_REFILL] = Item(RG_RED_POTION_REFILL, Text{ "Red Potion Refill", "Recharge de Potion Rouge", "Rotes Elixier" }, ITEMTYPE_REFILL, GI_POTION_RED, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_GREEN_POTION_REFILL] = Item(RG_GREEN_POTION_REFILL, Text{ "Green Potion Refill", "Recharge de Potion Verte", "Grünes Elixier" }, ITEMTYPE_REFILL, GI_POTION_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); - itemTable[RG_BLUE_POTION_REFILL] = Item(RG_BLUE_POTION_REFILL, Text{ "Blue Potion Refill", "Recharge de Potion Bleue", "Blaues Elixier" }, ITEMTYPE_REFILL, GI_POTION_BLUE, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BOMBS_5, ITEMTYPE_REFILL, GI_BOMBS_5, LOGIC_NONE, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BOMBS_10, ITEMTYPE_REFILL, GI_BOMBS_10, LOGIC_NONE, RHT_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BOMBS_20, ITEMTYPE_REFILL, GI_BOMBS_20, LOGIC_NONE, RHT_BOMBS_20, ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BOMBCHU_5, ITEMTYPE_REFILL, GI_BOMBCHUS_5, LOGIC_BOMBCHUS, RHT_BOMBCHUS_5, ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BOMBCHU_10, ITEMTYPE_REFILL, GI_BOMBCHUS_10, LOGIC_BOMBCHUS, RHT_BOMBCHUS_10, ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BOMBCHU_20, ITEMTYPE_REFILL, GI_BOMBCHUS_20, LOGIC_BOMBCHUS, RHT_BOMBCHUS_20, ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 0, Randomizer_DrawBombchuBagInLogic); + AddItem(RG_ARROWS_5, ITEMTYPE_REFILL, GI_ARROWS_SMALL, LOGIC_NONE, RHT_ARROWS_5, ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_ARROWS_10, ITEMTYPE_REFILL, GI_ARROWS_MEDIUM, LOGIC_NONE, RHT_ARROWS_10, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_ARROWS_30, ITEMTYPE_REFILL, GI_ARROWS_LARGE, LOGIC_NONE, RHT_ARROWS_30, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_DEKU_NUTS_5, ITEMTYPE_REFILL, GI_NUTS_5, LOGIC_NONE, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_DEKU_NUTS_10, ITEMTYPE_REFILL, GI_NUTS_10, LOGIC_NONE, RHT_DEKU_NUTS_10, ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_DEKU_SEEDS_30, ITEMTYPE_REFILL, GI_SEEDS_30, LOGIC_NONE, RHT_DEKU_SEEDS_30, ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_DEKU_STICK_1, ITEMTYPE_REFILL, GI_STICKS_1, LOGIC_NONE, RHT_DEKU_STICK_1, ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_RED_POTION_REFILL, ITEMTYPE_REFILL, GI_POTION_RED, LOGIC_NONE, RHT_RED_POTION_REFILL, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_GREEN_POTION_REFILL, ITEMTYPE_REFILL, GI_POTION_GREEN, LOGIC_NONE, RHT_GREEN_POTION_REFILL, ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); + AddItem(RG_BLUE_POTION_REFILL, ITEMTYPE_REFILL, GI_POTION_BLUE, LOGIC_NONE, RHT_BLUE_POTION_REFILL, ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); // Treasure Game - itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzteil (Truhenlotterie)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, LOGIC_PIECE_OF_HEART, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_TREASURE_GAME_GREEN_RUPEE] = Item(RG_TREASURE_GAME_GREEN_RUPEE, Text{ "Green Rupee (LOSER)", "Rubis Vert (Chasse-aux-Trésors)", "Grüner Rubin (Truhenlotterie)" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE, false, LOGIC_NONE, RHT_TREASURE_GAME_GREEN_RUPEE, ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_TCG_PIECE_OF_HEART, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, LOGIC_PIECE_OF_HEART, RHT_TCG_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_LOSER_GREEN_RUPEE, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE, LOGIC_NONE, RHT_LOSER_GREEN_RUPEE, ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE); // Shop - itemTable[RG_BUY_DEKU_NUTS_5] = Item(RG_BUY_DEKU_NUTS_5, Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nüsse kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, LOGIC_BUY_NUTS, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15); - itemTable[RG_BUY_ARROWS_30] = Item(RG_BUY_ARROWS_30, Text{ "Buy Arrows (30)", "Acheter: Flèches (30)", "Pfeile kaufen (30)" }, ITEMTYPE_SHOP, GI_ARROWS_MEDIUM, true, LOGIC_BUY_ARROW, RHT_ARROWS_30, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 60); - itemTable[RG_BUY_ARROWS_50] = Item(RG_BUY_ARROWS_50, Text{ "Buy Arrows (50)", "Acheter: Flèches (50)", "Pfeile kaufen (50)" }, ITEMTYPE_SHOP, GI_ARROWS_LARGE, true, LOGIC_BUY_ARROW, RHT_ARROWS_30, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 90); - itemTable[RG_BUY_BOMBS_525] = Item(RG_BUY_BOMBS_525, Text{ "Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Bomben kaufen (5) [25]" }, ITEMTYPE_SHOP, GI_BOMBS_5, true, LOGIC_BUY_BOMB, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 25); - itemTable[RG_BUY_DEKU_NUTS_10] = Item(RG_BUY_DEKU_NUTS_10, Text{ "Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Deku-Nüsse kaufen (10)" }, ITEMTYPE_SHOP, GI_NUTS_10, true, LOGIC_BUY_NUTS, RHT_DEKU_NUTS_10, ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30); - itemTable[RG_BUY_DEKU_STICK_1] = Item(RG_BUY_DEKU_STICK_1, Text{ "Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Deku-Stab kaufen (1)" }, ITEMTYPE_SHOP, GI_STICKS_1, true, LOGIC_BUY_STICKS, RHT_DEKU_STICK_1, ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 10); - itemTable[RG_BUY_BOMBS_10] = Item(RG_BUY_BOMBS_10, Text{ "Buy Bombs (10)", "Acheter: Bombes (10)", "Bomben kaufen (10)" }, ITEMTYPE_SHOP, GI_BOMBS_10, true, LOGIC_BUY_BOMB, RHT_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50); - itemTable[RG_BUY_FISH] = Item(RG_BUY_FISH, Text{ "Buy Fish", "Acheter: Poisson", "Fisch kaufen" }, ITEMTYPE_SHOP, GI_FISH, true, LOGIC_FISH_ACCESS, RHT_BOTTLE_WITH_FISH, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 200); - itemTable[RG_BUY_RED_POTION_30] = Item(RG_BUY_RED_POTION_30, Text{ "Buy Red Potion [30]", "Acheter: Potion Rouge [30]", "Rotes Elixier kaufen [30]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, LOGIC_NONE, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30); - itemTable[RG_BUY_GREEN_POTION] = Item(RG_BUY_GREEN_POTION, Text{ "Buy Green Potion", "Acheter: Potion Verte", "Grünes Elixier kaufen" }, ITEMTYPE_SHOP, GI_POTION_GREEN, true, LOGIC_BUY_MAGIC_POTION, RHT_BOTTLE_WITH_GREEN_POTION, ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30); - itemTable[RG_BUY_BLUE_POTION] = Item(RG_BUY_BLUE_POTION, Text{ "Buy Blue Potion", "Acheter: Potion Bleue", "Blaues Elixier kaufen" }, ITEMTYPE_SHOP, GI_POTION_BLUE, true, LOGIC_BUY_MAGIC_POTION, RHT_BOTTLE_WITH_BLUE_POTION, ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 100); - itemTable[RG_BUY_HYLIAN_SHIELD] = Item(RG_BUY_HYLIAN_SHIELD, Text{ "Buy Hylian Shield", "Acheter: Bouclier Hylien", "Hylia-Schild kaufen" }, ITEMTYPE_SHOP, GI_SHIELD_HYLIAN, true, LOGIC_HYLIAN_SHIELD, RHT_HYLIAN_SHIELD, ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 80); - itemTable[RG_BUY_DEKU_SHIELD] = Item(RG_BUY_DEKU_SHIELD, Text{ "Buy Deku Shield", "Acheter: Bouclier Mojo", "Deku-Schild kaufen" }, ITEMTYPE_SHOP, GI_SHIELD_DEKU, true, LOGIC_DEKU_SHIELD, RHT_DEKU_SHIELD, ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 40); - itemTable[RG_BUY_GORON_TUNIC] = Item(RG_BUY_GORON_TUNIC, Text{ "Buy Goron Tunic", "Acheter: Tunique Goron", "Goronen-Rüstung kaufen" }, ITEMTYPE_SHOP, GI_TUNIC_GORON, true, LOGIC_GORON_TUNIC, RHT_GORON_TUNIC, ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, false, 200); - itemTable[RG_BUY_ZORA_TUNIC] = Item(RG_BUY_ZORA_TUNIC, Text{ "Buy Zora Tunic", "Acheter: Tunique Zora", "Zora-Rüstung kaufen" }, ITEMTYPE_SHOP, GI_TUNIC_ZORA, true, LOGIC_ZORA_TUNIC, RHT_ZORA_TUNIC, ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, false, 300); - itemTable[RG_BUY_HEART] = Item(RG_BUY_HEART, Text{ "Buy Heart", "Acheter: Coeur de Vie", "Herz kaufen" }, ITEMTYPE_SHOP, GI_HEART, false, LOGIC_NONE, RHT_RECOVERY_HEART, ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 10); - itemTable[RG_BUY_BOMBCHUS_10] = Item(RG_BUY_BOMBCHUS_10, Text{ "Buy Bombchu (10)", "Acheter: Missiles (10)", "Krabbelminen kaufen (10)" }, ITEMTYPE_SHOP, GI_BOMBCHUS_10, true, LOGIC_BUY_BOMBCHUS, RHT_BOMBCHUS_10, ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 99); - itemTable[RG_BUY_BOMBCHUS_20] = Item(RG_BUY_BOMBCHUS_20, Text{ "Buy Bombchu (20)", "Acheter: Missiles (20)", "Krabbelminen kaufen (20)" }, ITEMTYPE_SHOP, GI_BOMBCHUS_20, true, LOGIC_BUY_BOMBCHUS, RHT_BOMBCHUS_20, ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 180); - itemTable[RG_BUY_DEKU_SEEDS_30] = Item(RG_BUY_DEKU_SEEDS_30, Text{ "Buy Deku Seeds (30)", "Acheter: Graines Mojo (30)", "Deku-Kerne kaufen (30)" }, ITEMTYPE_SHOP, GI_SEEDS_30, true, LOGIC_BUY_SEED, RHT_DEKU_SEEDS_30, ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30); - itemTable[RG_SOLD_OUT] = Item(RG_SOLD_OUT, Text{ "Sold Out", "Rupture de stock", "Ausverkauft" }, ITEMTYPE_SHOP, RG_SOLD_OUT, false, LOGIC_NONE, RHT_NONE, ITEM_CATEGORY_JUNK, false, 0); - itemTable[RG_BUY_BLUE_FIRE] = Item(RG_BUY_BLUE_FIRE, Text{ "Buy Blue Fire", "Acheter: Flamme Bleue", "Blaues Feuer kaufen" }, ITEMTYPE_SHOP, GI_BLUE_FIRE, true, LOGIC_BLUE_FIRE_ACCESS, RHT_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 300); - itemTable[RG_BUY_BOTTLE_BUG] = Item(RG_BUY_BOTTLE_BUG, Text{ "Buy Bottle Bug", "Acheter: Insecte en bouteille", "Käfer kaufen" }, ITEMTYPE_SHOP, GI_BUGS, true, LOGIC_BUGS_ACCESS, RHT_BOTTLE_WITH_BUGS, ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x7A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50); - itemTable[RG_BUY_POE] = Item(RG_BUY_POE, Text{ "Buy Poe", "Acheter: Esprit", "Irrlicht kaufen" }, ITEMTYPE_SHOP, RG_BUY_POE, false, LOGIC_NONE, RHT_BOTTLE_WITH_BIG_POE, ITEM_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30); - itemTable[RG_BUY_FAIRYS_SPIRIT] = Item(RG_BUY_FAIRYS_SPIRIT, Text{ "Buy Fairy's Spirit", "Acheter: Esprit de Fée", "Fee kaufen" }, ITEMTYPE_SHOP, GI_FAIRY, true, LOGIC_FAIRY_ACCESS, RHT_BOTTLE_WITH_FAIRY, ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x46, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50); - itemTable[RG_BUY_ARROWS_10] = Item(RG_BUY_ARROWS_10, Text{ "Buy Arrows (10)", "Acheter: Flèches (10)", "Pfeile kaufen (10)" }, ITEMTYPE_SHOP, GI_ARROWS_SMALL, true, LOGIC_BUY_ARROW, RHT_ARROWS_10, ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 20); - itemTable[RG_BUY_BOMBS_20] = Item(RG_BUY_BOMBS_20, Text{ "Buy Bombs (20)", "Acheter: Bombes (20)", "Bomben kaufen (20)" }, ITEMTYPE_SHOP, GI_BOMBS_20, true, LOGIC_BUY_BOMB, RHT_BOMBS_20, ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 80); - itemTable[RG_BUY_BOMBS_30] = Item(RG_BUY_BOMBS_30, Text{ "Buy Bombs (30)", "Acheter: Bombes (30)", "Bomben kaufen (30)" }, ITEMTYPE_SHOP, GI_BOMBS_30, true, LOGIC_BUY_BOMB, RHT_BOMBS_20, ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 120); - itemTable[RG_BUY_BOMBS_535] = Item(RG_BUY_BOMBS_535, Text{ "Buy Bombs (5) [35]", "Acheter: Bombes (5) [35]", "Bomben kaufen (5) [35]" }, ITEMTYPE_SHOP, GI_BOMBS_5, true, LOGIC_BUY_BOMB, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 35); - itemTable[RG_BUY_RED_POTION_40] = Item(RG_BUY_RED_POTION_40, Text{ "Buy Red Potion [40]", "Acheter: Potion Rouge [40]", "Rotes Elixier kaufen [40]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, LOGIC_NONE, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 40); - itemTable[RG_BUY_RED_POTION_50] = Item(RG_BUY_RED_POTION_50, Text{ "Buy Red Potion [50]", "Acheter: Potion Rouge [50]", "Rotes Elixier kaufen [50]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, LOGIC_NONE, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50); + AddItem(RG_BUY_DEKU_NUTS_5, ITEMTYPE_SHOP, GI_NUTS_5_2, LOGIC_BUY_NUTS, RHT_BUY_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 15); + AddItem(RG_BUY_ARROWS_30, ITEMTYPE_SHOP, GI_ARROWS_MEDIUM, LOGIC_BUY_ARROW, RHT_BUY_ARROWS_30, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 60); + AddItem(RG_BUY_ARROWS_50, ITEMTYPE_SHOP, GI_ARROWS_LARGE, LOGIC_BUY_ARROW, RHT_BUY_ARROWS_50, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 90); + AddItem(RG_BUY_BOMBS_525, ITEMTYPE_SHOP, GI_BOMBS_5, LOGIC_BUY_BOMB, RHT_BUY_BOMBS_525, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 25); + AddItem(RG_BUY_DEKU_NUTS_10, ITEMTYPE_SHOP, GI_NUTS_10, LOGIC_BUY_NUTS, RHT_BUY_DEKU_NUTS_10, ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 30); + AddItem(RG_BUY_DEKU_STICK_1, ITEMTYPE_SHOP, GI_STICKS_1, LOGIC_BUY_STICKS, RHT_BUY_DEKU_STICK_1, ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 10); + AddItem(RG_BUY_BOMBS_10, ITEMTYPE_SHOP, GI_BOMBS_10, LOGIC_BUY_BOMB, RHT_BUY_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 50); + AddItem(RG_BUY_FISH, ITEMTYPE_SHOP, GI_FISH, LOGIC_FISH_ACCESS, RHT_BUY_FISH, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 200); + AddItem(RG_BUY_RED_POTION_30, ITEMTYPE_SHOP, GI_POTION_RED, LOGIC_NONE, RHT_BUY_RED_POTION_30, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 30); + AddItem(RG_BUY_GREEN_POTION, ITEMTYPE_SHOP, GI_POTION_GREEN, LOGIC_BUY_MAGIC_POTION, RHT_BUY_GREEN_POTION, ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 30); + AddItem(RG_BUY_BLUE_POTION, ITEMTYPE_SHOP, GI_POTION_BLUE, LOGIC_BUY_MAGIC_POTION, RHT_BUY_BLUE_POTION, ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 100); + AddItem(RG_BUY_HYLIAN_SHIELD, ITEMTYPE_SHOP, GI_SHIELD_HYLIAN, LOGIC_HYLIAN_SHIELD, RHT_BUY_HYLIAN_SHIELD, ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, 80); + AddItem(RG_BUY_DEKU_SHIELD, ITEMTYPE_SHOP, GI_SHIELD_DEKU, LOGIC_DEKU_SHIELD, RHT_BUY_DEKU_SHIELD, ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, 40); + AddItem(RG_BUY_GORON_TUNIC, ITEMTYPE_SHOP, GI_TUNIC_GORON, LOGIC_GORON_TUNIC, RHT_BUY_GORON_TUNIC, ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, 200); + AddItem(RG_BUY_ZORA_TUNIC, ITEMTYPE_SHOP, GI_TUNIC_ZORA, LOGIC_ZORA_TUNIC, RHT_BUY_ZORA_TUNIC, ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, 300); + AddItem(RG_BUY_HEART, ITEMTYPE_SHOP, GI_HEART, LOGIC_NONE, RHT_BUY_HEART, ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 10); + AddItem(RG_BUY_BOMBCHUS_10, ITEMTYPE_SHOP, GI_BOMBCHUS_10, LOGIC_BUY_BOMBCHUS, RHT_BUY_BOMBCHUS_10, ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 99); + AddItem(RG_BUY_BOMBCHUS_20, ITEMTYPE_SHOP, GI_BOMBCHUS_20, LOGIC_BUY_BOMBCHUS, RHT_BUY_BOMBCHUS_20, ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 180); + AddItem(RG_BUY_DEKU_SEEDS_30, ITEMTYPE_SHOP, GI_SEEDS_30, LOGIC_BUY_SEED, RHT_BUY_DEKU_SEEDS_30, ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 30); + AddItem(RG_SOLD_OUT, ITEMTYPE_SHOP, RG_SOLD_OUT, LOGIC_NONE, RHT_SOLD_OUT, ITEM_CATEGORY_JUNK, 0); + AddItem(RG_BUY_BLUE_FIRE, ITEMTYPE_SHOP, GI_BLUE_FIRE, LOGIC_BLUE_FIRE_ACCESS, RHT_BUY_BLUE_FIRE, ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 300); + AddItem(RG_BUY_BOTTLE_BUG, ITEMTYPE_SHOP, GI_BUGS, LOGIC_BUGS_ACCESS, RHT_BUY_BOTTLE_BUG, ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x7A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 50); + AddItem(RG_BUY_POE, ITEMTYPE_SHOP, RG_BUY_POE, LOGIC_NONE, RHT_BUY_POE, ITEM_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 30); + AddItem(RG_BUY_FAIRYS_SPIRIT, ITEMTYPE_SHOP, GI_FAIRY, LOGIC_FAIRY_ACCESS, RHT_BUY_FAIRYS_SPIRIT, ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x46, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 50); + AddItem(RG_BUY_ARROWS_10, ITEMTYPE_SHOP, GI_ARROWS_SMALL, LOGIC_BUY_ARROW, RHT_BUY_ARROWS_10, ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 20); + AddItem(RG_BUY_BOMBS_20, ITEMTYPE_SHOP, GI_BOMBS_20, LOGIC_BUY_BOMB, RHT_BUY_BOMBS_20, ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 80); + AddItem(RG_BUY_BOMBS_30, ITEMTYPE_SHOP, GI_BOMBS_30, LOGIC_BUY_BOMB, RHT_BUY_BOMBS_30, ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 120); + AddItem(RG_BUY_BOMBS_535, ITEMTYPE_SHOP, GI_BOMBS_5, LOGIC_BUY_BOMB, RHT_BUY_BOMBS_535, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, 35); + AddItem(RG_BUY_RED_POTION_40, ITEMTYPE_SHOP, GI_POTION_RED, LOGIC_NONE, RHT_BUY_RED_POTION_40, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 40); + AddItem(RG_BUY_RED_POTION_50, ITEMTYPE_SHOP, GI_POTION_RED, LOGIC_NONE, RHT_BUY_RED_POTION_50, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, 50); // Misc. - itemTable[RG_GOHMA_SOUL] = Item(RG_GOHMA_SOUL, Text{ "Gohma's Soul", "Âme de Gohma", "Gohmas Seele" }, ITEMTYPE_ITEM, 0xE0, true, LOGIC_CAN_SUMMON_GOHMA, RHT_GOHMA_SOUL, RG_GOHMA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_GOHMA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_KING_DODONGO_SOUL] = Item(RG_KING_DODONGO_SOUL, Text{ "King Dodongo's Soul", "Âme du Roi Dodongo", "König Dodongos Seele" }, ITEMTYPE_ITEM, 0xE1, true, LOGIC_CAN_SUMMON_KINGDODONGO, RHT_KING_DODONGO_SOUL, RG_KING_DODONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_KING_DODONGO_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_BARINADE_SOUL] = Item(RG_BARINADE_SOUL, Text{ "Barinade's Soul", "Âme de Barinade", "Barinades Seele" }, ITEMTYPE_ITEM, 0xE2, true, LOGIC_CAN_SUMMON_BARINADE, RHT_BARINADE_SOUL, RG_BARINADE_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BARINADE_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_PHANTOM_GANON_SOUL] = Item(RG_PHANTOM_GANON_SOUL, Text{ "Phantom Ganon's Soul", "Âme de Ganon Spectral", "Phantom-Ganons Seele" }, ITEMTYPE_ITEM, 0xE3, true, LOGIC_CAN_SUMMON_PHANTOMGANON, RHT_PHANTOM_GANON_SOUL, RG_PHANTOM_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_PHANTOM_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_VOLVAGIA_SOUL] = Item(RG_VOLVAGIA_SOUL, Text{ "Volvagia's Soul", "Âme de Volcania", "Volvagias Seele" }, ITEMTYPE_ITEM, 0xE4, true, LOGIC_CAN_SUMMON_VOLVAGIA, RHT_VOLVAGIA_SOUL, RG_VOLVAGIA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_VOLVAGIA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_MORPHA_SOUL] = Item(RG_MORPHA_SOUL, Text{ "Morpha's Soul", "Âme de Morpha", "Morphas Seele" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_MORPHA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_MORPHA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_BONGO_BONGO_SOUL] = Item(RG_BONGO_BONGO_SOUL, Text{ "Bongo Bongo's Soul", "Âme de Bongo Bongo", "Bongo Bongos Seele" }, ITEMTYPE_ITEM, 0xE6, true, LOGIC_CAN_SUMMON_BONGOBONGO, RHT_BONGO_BONGO_SOUL, RG_BONGO_BONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BONGO_BONGO_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_TWINROVA_SOUL] = Item(RG_TWINROVA_SOUL, Text{ "Twinrova's Soul", "Âme du Duo Maléfique", "Twinrovas Seele" }, ITEMTYPE_ITEM, 0xE7, true, LOGIC_CAN_SUMMON_TWINROVA, RHT_TWINROVA_SOUL, RG_TWINROVA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_TWINROVA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_GANON_SOUL] = Item(RG_GANON_SOUL, Text{ "Ganon's Soul", "Âme de Ganon", "Ganons Seele" }, ITEMTYPE_ITEM, 0xE8, true, LOGIC_CAN_SUMMON_GANON, RHT_GANON_SOUL, RG_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_FISHING_POLE] = Item(RG_FISHING_POLE, Text{ "Fishing Pole", "Canne à Pêche", "Angelrute" }, ITEMTYPE_ITEM, RG_FISHING_POLE, true, LOGIC_FISHING_POLE, RHT_FISHING_POLE, RG_FISHING_POLE, OBJECT_GI_FISH, GID_FISHING_POLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_FISHING_POLE].SetCustomDrawFunc(Randomizer_DrawFishingPoleGI); + AddItem(RG_GOHMA_SOUL, ITEMTYPE_ITEM, 0xE0, LOGIC_GOHMA_SOUL, RHT_GOHMA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_KING_DODONGO_SOUL, ITEMTYPE_ITEM, 0xE1, LOGIC_KING_DODONGO_SOUL, RHT_KING_DODONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_BARINADE_SOUL, ITEMTYPE_ITEM, 0xE2, LOGIC_BARINADE_SOUL, RHT_BARINADE_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_PHANTOM_GANON_SOUL, ITEMTYPE_ITEM, 0xE3, LOGIC_PHANTOM_GANON_SOUL, RHT_PHANTOM_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_VOLVAGIA_SOUL, ITEMTYPE_ITEM, 0xE4, LOGIC_VOLVAGIA_SOUL, RHT_VOLVAGIA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_MORPHA_SOUL, ITEMTYPE_ITEM, 0xE5, LOGIC_MORPHA_SOUL, RHT_MORPHA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_BONGO_BONGO_SOUL, ITEMTYPE_ITEM, 0xE6, LOGIC_BONGO_BONGO_SOUL, RHT_BONGO_BONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_TWINROVA_SOUL, ITEMTYPE_ITEM, 0xE7, LOGIC_TWINROVA_SOUL, RHT_TWINROVA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); + AddItem(RG_GANON_SOUL, ITEMTYPE_ITEM, 0xE8, LOGIC_GANON_SOUL, RHT_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBossSoul); - itemTable[RG_OCARINA_A_BUTTON] = Item(RG_OCARINA_A_BUTTON, Text{ "Ocarina A Button", "Touche A de l'Ocarina", "A-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_A_BUTTON, RHT_OCARINA_A_BUTTON, RG_OCARINA_A_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_OCARINA_A_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); - itemTable[RG_OCARINA_C_UP_BUTTON] = Item(RG_OCARINA_C_UP_BUTTON, Text{ "Ocarina C Up Button", "Touche C-Haut de l'Ocarina", "C-Oben-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_UP_BUTTON, RHT_OCARINA_C_UP_BUTTON, RG_OCARINA_C_UP_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_OCARINA_C_UP_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); - itemTable[RG_OCARINA_C_DOWN_BUTTON] = Item(RG_OCARINA_C_DOWN_BUTTON, Text{ "Ocarina C Down Button", "Touche C-Bas de l'Ocarina", "C-Unten-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_DOWN_BUTTON, RHT_OCARINA_C_DOWN_BUTTON, RG_OCARINA_C_DOWN_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_OCARINA_C_DOWN_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); - itemTable[RG_OCARINA_C_LEFT_BUTTON] = Item(RG_OCARINA_C_LEFT_BUTTON, Text{ "Ocarina C Left Button", "Touche C-Gauche de l'Ocarina", "C-Links-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_LEFT_BUTTON, RHT_OCARINA_C_LEFT_BUTTON, RG_OCARINA_C_LEFT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_OCARINA_C_LEFT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); - itemTable[RG_OCARINA_C_RIGHT_BUTTON] = Item(RG_OCARINA_C_RIGHT_BUTTON, Text{ "Ocarina C Right Button", "Touche C-Droit de l'Ocarina", "C-Rechts-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_RIGHT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, RG_OCARINA_C_RIGHT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_OCARINA_C_RIGHT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); + AddItem(RG_FISHING_POLE, ITEMTYPE_ITEM, RG_FISHING_POLE, LOGIC_FISHING_POLE, RHT_FISHING_POLE, OBJECT_GI_FISH, GID_FISHING_POLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawFishingPoleGI); - itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_WALLET, RHT_BRONZE_SCALE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale); + AddItem(RG_OCARINA_A_BUTTON, ITEMTYPE_ITEM, GI_MAP, LOGIC_OCARINA_A_BUTTON, RHT_OCARINA_A_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawOcarinaButton); + AddItem(RG_OCARINA_C_UP_BUTTON, ITEMTYPE_ITEM, GI_MAP, LOGIC_OCARINA_C_UP_BUTTON, RHT_OCARINA_C_UP_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawOcarinaButton); + AddItem(RG_OCARINA_C_DOWN_BUTTON, ITEMTYPE_ITEM, GI_MAP, LOGIC_OCARINA_C_DOWN_BUTTON, RHT_OCARINA_C_DOWN_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawOcarinaButton); + AddItem(RG_OCARINA_C_LEFT_BUTTON, ITEMTYPE_ITEM, GI_MAP, LOGIC_OCARINA_C_LEFT_BUTTON, RHT_OCARINA_C_LEFT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawOcarinaButton); + AddItem(RG_OCARINA_C_RIGHT_BUTTON, ITEMTYPE_ITEM, GI_MAP, LOGIC_OCARINA_C_RIGHT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawOcarinaButton); - itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag); + AddItem(RG_BOMBCHU_BAG, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBombchuBag); - itemTable[RG_QUIVER_INF] = Item(RG_QUIVER_INF, Text{ "Infinite Quiver", "Carquois Infini", "Unendlicher Köcher" }, ITEMTYPE_ITEM, RG_QUIVER_INF, true, LOGIC_PROGRESSIVE_BOW, RHT_QUIVER_INF, RG_QUIVER_INF, OBJECT_GI_ARROWCASE, GID_QUIVER_50, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOMB_BAG_INF] = Item(RG_BOMB_BAG_INF, Text{ "Infinite Bomb Bag", "Sac de Bombes Infini", "Unendliche Bombentasche" }, ITEMTYPE_ITEM, RG_BOMB_BAG_INF, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG_INF, RG_BOMB_BAG_INF, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BULLET_BAG_INF] = Item(RG_BULLET_BAG_INF, Text{ "Infinite Bullet Bag", "Sac de Graines Infinis", "Unendliche Munitionstasche" }, ITEMTYPE_ITEM, RG_BULLET_BAG_INF, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BULLET_BAG_INF, RG_BULLET_BAG_INF, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_STICK_UPGRADE_INF] = Item(RG_STICK_UPGRADE_INF, Text{ "Infinite Stick Capacity", "Bâtons Mojo Infinis", "Unendliche Deku-Stab-Kapazität" }, ITEMTYPE_ITEM, RG_STICK_UPGRADE_INF, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_STICK_UPGRADE_INF, RG_STICK_UPGRADE_INF, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_NUT_UPGRADE_INF] = Item(RG_NUT_UPGRADE_INF, Text{ "Infinite Nut Capacity", "Noix Mojo Infinies", "Unendliche Deku-Nuß-Kapazität" }, ITEMTYPE_ITEM, RG_NUT_UPGRADE_INF, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NUT_UPGRADE_INF, RG_NUT_UPGRADE_INF, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_MAGIC_INF] = Item(RG_MAGIC_INF, Text{ "Infinite Magic Meter", "Magie Infinie", "Unendliche Magische Kraft" }, ITEMTYPE_ITEM, RG_MAGIC_INF, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_INF, RG_MAGIC_INF, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOMBCHU_INF] = Item(RG_BOMBCHU_INF, Text{ "Infinite Bombchus", "Missiles Teigneux Infinis", "Unendliche Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_INF, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_INF, RG_BOMBCHU_INF, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOMBCHU_INF].SetCustomDrawFunc(Randomizer_DrawBombchuBag); - itemTable[RG_WALLET_INF] = Item(RG_WALLET_INF, Text{ "Infinite Wallet", "Bourse Infinie", "Unendliche Geldbörse" }, ITEMTYPE_ITEM, RG_WALLET_INF, true, LOGIC_PROGRESSIVE_WALLET, RHT_WALLET_INF, RG_WALLET_INF, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_QUIVER_INF, ITEMTYPE_ITEM, RG_QUIVER_INF, LOGIC_PROGRESSIVE_BOW, RHT_QUIVER_INF, OBJECT_GI_ARROWCASE, GID_QUIVER_50, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_BOMB_BAG_INF, ITEMTYPE_ITEM, RG_BOMB_BAG_INF, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG_INF, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_BULLET_BAG_INF, ITEMTYPE_ITEM, RG_BULLET_BAG_INF, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BULLET_BAG_INF, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_STICK_UPGRADE_INF, ITEMTYPE_ITEM, RG_STICK_UPGRADE_INF, LOGIC_PROGRESSIVE_STICK_BAG, RHT_STICK_UPGRADE_INF, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_NUT_UPGRADE_INF, ITEMTYPE_ITEM, RG_NUT_UPGRADE_INF, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NUT_UPGRADE_INF, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_MAGIC_INF, ITEMTYPE_ITEM, RG_MAGIC_INF, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_INF, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_BOMBCHU_INF, ITEMTYPE_ITEM, RG_BOMBCHU_INF, LOGIC_BOMBCHUS, RHT_BOMBCHU_INF, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, 0, Randomizer_DrawBombchuBag); + AddItem(RG_WALLET_INF, ITEMTYPE_ITEM, RG_WALLET_INF, LOGIC_PROGRESSIVE_WALLET, RHT_WALLET_INF, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_SKELETON_KEY] = Item(RG_SKELETON_KEY, Text{ "Skeleton Key", "Clé Squelette", "Skelettschlüssel" }, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, LOGIC_SKELETON_KEY, RHT_SKELETON_KEY, RG_SKELETON_KEY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_SKELETON_KEY].SetCustomDrawFunc(Randomizer_DrawSkeletonKey); - - itemTable[RG_DEKU_STICK_BAG] = Item(RG_DEKU_STICK_BAG, Text{ "Deku Stick Bag", "Sac de Bâton Mojo", "Deku-Stab-Tasche" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_NONE, RG_DEKU_STICK_BAG, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - - itemTable[RG_DEKU_NUT_BAG] = Item(RG_DEKU_NUT_BAG, Text{ "Deku Nut Bag", "Sac de Noix Mojo", "Deku-Nuß-Tasche" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NONE, RG_DEKU_NUT_BAG, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - - itemTable[RG_TRIFORCE] = Item(RG_TRIFORCE, Text{ "Triforce", "Triforce", "Triforce" }, ITEMTYPE_EVENT, RG_TRIFORCE, false, LOGIC_NONE, RHT_NONE, ITEM_CATEGORY_MAJOR); - itemTable[RG_HINT] = Item(RG_HINT, Text{ "Hint", "Indice", "Hinweis" }, ITEMTYPE_EVENT, RG_HINT, false, LOGIC_NONE, RHT_NONE, ITEM_CATEGORY_LESSER); + AddItem(RG_SKELETON_KEY, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, LOGIC_SKELETON_KEY, RHT_SKELETON_KEY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawSkeletonKey); + + AddItem(RG_TRIFORCE, ITEMTYPE_EVENT, RG_TRIFORCE, LOGIC_NONE, RHT_TRIFORCE, ITEM_CATEGORY_MAJOR); + AddItem(RG_HINT, ITEMTYPE_EVENT, RG_HINT, LOGIC_NONE, RHT_HINT, ITEM_CATEGORY_LESSER); // Individual stages of progressive items (only here for GetItemEntry purposes, not for use in seed gen) - itemTable[RG_HOOKSHOT] = Item(RG_HOOKSHOT, Text{ "Hookshot", "Grappin", "Fanghaken" }, ITEMTYPE_ITEM, GI_HOOKSHOT, true, LOGIC_PROGRESSIVE_HOOKSHOT, RHT_HOOKSHOT, ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_LONGSHOT] = Item(RG_LONGSHOT, Text{ "Longshot", "Super-Grappin", "Enterhaken" }, ITEMTYPE_ITEM, GI_LONGSHOT, true, LOGIC_PROGRESSIVE_HOOKSHOT, RHT_LONGSHOT, ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_FAIRY_OCARINA] = Item(RG_FAIRY_OCARINA, Text{ "Fairy Ocarina", "Ocarina des fées", "Feen-Okarina" }, ITEMTYPE_ITEM, GI_OCARINA_FAIRY, true, LOGIC_PROGRESSIVE_OCARINA, RHT_FAIRY_OCARINA, ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x4A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_OCARINA_OF_TIME] = Item(RG_OCARINA_OF_TIME, Text{ "Ocarina of Time", "Ocarina du Temps", "Okarina der Zeit" }, ITEMTYPE_ITEM, GI_OCARINA_OOT, true, LOGIC_PROGRESSIVE_OCARINA, RHT_OCARINA_OF_TIME, ITEM_OCARINA_TIME, OBJECT_GI_OCARINA, GID_OCARINA_TIME, 0x3A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BOMB_BAG] = Item(RG_BOMB_BAG, Text{ "Bomb Bag", "Sac de Bombes", "Bombentasche" }, ITEMTYPE_ITEM, GI_BOMB_BAG_20, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG, ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x58, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BIG_BOMB_BAG] = Item(RG_BIG_BOMB_BAG, Text{ "Big Bomb Bag", "Grand Sac de Bombes", "Große Bombentasche" }, ITEMTYPE_ITEM, GI_BOMB_BAG_30, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BIG_BOMB_BAG, ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x59, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_BIGGEST_BOMB_BAG] = Item(RG_BIGGEST_BOMB_BAG, Text{ "Biggest Bomb Bag", "Énorme Sac de Bombes", "Riesen-Bombentasche" }, ITEMTYPE_ITEM, GI_BOMB_BAG_40, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BIGGEST_BOMB_BAG, ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x5A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_FAIRY_BOW] = Item(RG_FAIRY_BOW, Text{ "Fairy Bow", "Arc des Fées", "Feen-Bogen" }, ITEMTYPE_ITEM, GI_BOW, true, LOGIC_PROGRESSIVE_BOW, RHT_FAIRY_BOW, ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x31, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BIG_QUIVER] = Item(RG_BIG_QUIVER, Text{ "Big Quiver", "Grand carquois", "Großer Köcher" }, ITEMTYPE_ITEM, GI_QUIVER_40, true, LOGIC_PROGRESSIVE_BOW, RHT_BIG_QUIVER, ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x56, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_BIGGEST_QUIVER] = Item(RG_BIGGEST_QUIVER, Text{ "Biggest Quiver", "Énorme carquois", "Riesenköcher" }, ITEMTYPE_ITEM, GI_QUIVER_50, true, LOGIC_PROGRESSIVE_BOW, RHT_BIGGEST_QUIVER, ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x57, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_FAIRY_SLINGSHOT] = Item(RG_FAIRY_SLINGSHOT, Text{ "Fairy Slingshot", "Lance-Pierre des Fées", "Feen-Schleuder" }, ITEMTYPE_ITEM, GI_SLINGSHOT, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_FAIRY_SLINGSHOT, ITEM_SLINGSHOT, OBJECT_GI_PACHINKO, GID_SLINGSHOT, 0x30, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_BIG_BULLET_BAG] = Item(RG_BIG_BULLET_BAG, Text{ "Big Deku Seed Bullet Bag", "Grand sac de graines mojo", "Große Munitionstasche" }, ITEMTYPE_ITEM, GI_BULLET_BAG_40, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BIG_BULLET_BAG, ITEM_BULLET_BAG_40, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_BIGGEST_BULLET_BAG] = Item(RG_BIGGEST_BULLET_BAG, Text{ "Biggest Deku Seed Bullet Bag", "Énorme sac de graines mojo", "Riesen-Munitionstasche" }, ITEMTYPE_ITEM, GI_BULLET_BAG_50, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BIGGEST_BULLET_BAG, ITEM_BULLET_BAG_50, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_GORONS_BRACELET] = Item(RG_GORONS_BRACELET, Text{ "Goron's Bracelet", "Bracelet Goron", "Goronen-Armband" }, ITEMTYPE_ITEM, GI_BRACELET, true, LOGIC_PROGRESSIVE_STRENGTH, RHT_GORONS_BRACELET, ITEM_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, 0x79, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SILVER_GAUNTLETS] = Item(RG_SILVER_GAUNTLETS, Text{ "Silver Gauntlets", "Gantelets d'argent", "Krafthandschuhe" }, ITEMTYPE_ITEM, GI_GAUNTLETS_SILVER, true, LOGIC_PROGRESSIVE_STRENGTH, RHT_SILVER_GAUNTLETS, ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GOLDEN_GAUNTLETS] = Item(RG_GOLDEN_GAUNTLETS, Text{ "Golden Gauntlets", "Gantelets d'or", "Titanhandschuhe" }, ITEMTYPE_ITEM, GI_GAUNTLETS_GOLD, true, LOGIC_PROGRESSIVE_STRENGTH, RHT_GOLDEN_GAUNTLETS, ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_SILVER_SCALE] = Item(RG_SILVER_SCALE, Text{ "Silver Scale", "Écaille d'argent", "Silberne Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_SCALE, RHT_SILVER_SCALE, ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GOLDEN_SCALE] = Item(RG_GOLDEN_SCALE, Text{ "Golden Scale", "Écaille d'or", "Goldene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_GOLDEN, true, LOGIC_PROGRESSIVE_SCALE, RHT_GOLDEN_SCALE, ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_ADULT_WALLET] = Item(RG_ADULT_WALLET, Text{ "Adult Wallet", "Grande Bourse", "Große Geldbörse" }, ITEMTYPE_ITEM, GI_WALLET_ADULT, true, LOGIC_PROGRESSIVE_WALLET, RHT_ADULT_WALLET, ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GIANT_WALLET] = Item(RG_GIANT_WALLET, Text{ "Giant Wallet", "Bourse de Géant", "Riesengeldbörse" }, ITEMTYPE_ITEM, GI_WALLET_GIANT, true, LOGIC_PROGRESSIVE_WALLET, RHT_GIANT_WALLET, ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_TYCOON_WALLET] = Item(RG_TYCOON_WALLET, Text{ "Tycoon Wallet", "Bourse de Magnat", "Goldene Geldbörse" }, ITEMTYPE_ITEM, RG_TYCOON_WALLET, true, LOGIC_PROGRESSIVE_WALLET, RHT_TYCOON_WALLET, RG_TYCOON_WALLET, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_CHILD_WALLET] = Item(RG_CHILD_WALLET, Text{ "Child Wallet", "Petite Bourse", "Kindergeldbörse" }, ITEMTYPE_ITEM, RG_CHILD_WALLET, true, LOGIC_PROGRESSIVE_WALLET, RHT_CHILD_WALLET, RG_CHILD_WALLET, OBJECT_GI_PURSE, GID_WALLET_ADULT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_DEKU_NUT_CAPACITY_30] = Item(RG_DEKU_NUT_CAPACITY_30, Text{ "Deku Nut Capacity (30)", "Capacité de noix Mojo (30)", "Deku-Nuß-Kapazität (30)" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_CAPACITY_30, ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_DEKU_NUT_CAPACITY_40] = Item(RG_DEKU_NUT_CAPACITY_40, Text{ "Deku Nut Capacity (40)", "Capacité de noix Mojo (40)", "Deku-Nuß-Kapazität (40)" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_40, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_CAPACITY_40, ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_DEKU_STICK_CAPACITY_20] = Item(RG_DEKU_STICK_CAPACITY_20, Text{ "Deku Stick Capacity (20)", "Capacité de Bâtons Mojo (20)", "Deku-Stab-Kapazität (20)" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_20, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_CAPACITY_20, ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_DEKU_STICK_CAPACITY_30] = Item(RG_DEKU_STICK_CAPACITY_30, Text{ "Deku Stick Capacity (30)", "Capacité de Bâtons Mojo (30)", "Deku-Stab-Kapazität (30)" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_CAPACITY_30, ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_MAGIC_SINGLE] = Item(RG_MAGIC_SINGLE, Text{ "Magic Meter", "Jauge de Magie", "Magische Kraft" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_SINGLE, RG_MAGIC_SINGLE, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_MAGIC_DOUBLE] = Item(RG_MAGIC_DOUBLE, Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verb. Magische Kraft" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Triforce Piece", "Triforce Piece", "Triforce-Splitter" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_HOOKSHOT, ITEMTYPE_ITEM, GI_HOOKSHOT, LOGIC_PROGRESSIVE_HOOKSHOT, RHT_HOOKSHOT, ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_LONGSHOT, ITEMTYPE_ITEM, GI_LONGSHOT, LOGIC_PROGRESSIVE_HOOKSHOT, RHT_LONGSHOT, ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_FAIRY_OCARINA, ITEMTYPE_ITEM, GI_OCARINA_FAIRY, LOGIC_PROGRESSIVE_OCARINA, RHT_FAIRY_OCARINA, ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x4A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_OCARINA_OF_TIME, ITEMTYPE_ITEM, GI_OCARINA_OOT, LOGIC_PROGRESSIVE_OCARINA, RHT_OCARINA_OF_TIME, ITEM_OCARINA_TIME, OBJECT_GI_OCARINA, GID_OCARINA_TIME, 0x3A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BOMB_BAG, ITEMTYPE_ITEM, GI_BOMB_BAG_20, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG, ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x58, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BIG_BOMB_BAG, ITEMTYPE_ITEM, GI_BOMB_BAG_30, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BIG_BOMB_BAG, ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x59, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_BIGGEST_BOMB_BAG, ITEMTYPE_ITEM, GI_BOMB_BAG_40, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BIGGEST_BOMB_BAG, ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x5A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_FAIRY_BOW, ITEMTYPE_ITEM, GI_BOW, LOGIC_PROGRESSIVE_BOW, RHT_FAIRY_BOW, ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x31, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BIG_QUIVER, ITEMTYPE_ITEM, GI_QUIVER_40, LOGIC_PROGRESSIVE_BOW, RHT_BIG_QUIVER, ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x56, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_BIGGEST_QUIVER, ITEMTYPE_ITEM, GI_QUIVER_50, LOGIC_PROGRESSIVE_BOW, RHT_BIGGEST_QUIVER, ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x57, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_FAIRY_SLINGSHOT, ITEMTYPE_ITEM, GI_SLINGSHOT, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_FAIRY_SLINGSHOT, ITEM_SLINGSHOT, OBJECT_GI_PACHINKO, GID_SLINGSHOT, 0x30, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BIG_BULLET_BAG, ITEMTYPE_ITEM, GI_BULLET_BAG_40, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BIG_BULLET_BAG, ITEM_BULLET_BAG_40, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_BIGGEST_BULLET_BAG, ITEMTYPE_ITEM, GI_BULLET_BAG_50, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BIGGEST_BULLET_BAG, ITEM_BULLET_BAG_50, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_GORONS_BRACELET, ITEMTYPE_ITEM, GI_BRACELET, LOGIC_PROGRESSIVE_STRENGTH, RHT_GORONS_BRACELET, ITEM_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, 0x79, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_SILVER_GAUNTLETS, ITEMTYPE_ITEM, GI_GAUNTLETS_SILVER, LOGIC_PROGRESSIVE_STRENGTH, RHT_SILVER_GAUNTLETS, ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_GOLDEN_GAUNTLETS, ITEMTYPE_ITEM, GI_GAUNTLETS_GOLD, LOGIC_PROGRESSIVE_STRENGTH, RHT_GOLDEN_GAUNTLETS, ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_BRONZE_SCALE, ITEMTYPE_ITEM, GI_SCALE_SILVER, LOGIC_PROGRESSIVE_SCALE, RHT_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, 0, Randomizer_DrawBronzeScale); + AddItem(RG_SILVER_SCALE, ITEMTYPE_ITEM, GI_SCALE_SILVER, LOGIC_PROGRESSIVE_SCALE, RHT_SILVER_SCALE, ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_GOLDEN_SCALE, ITEMTYPE_ITEM, GI_SCALE_GOLDEN, LOGIC_PROGRESSIVE_SCALE, RHT_GOLDEN_SCALE, ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_CHILD_WALLET, ITEMTYPE_ITEM, RG_CHILD_WALLET, LOGIC_PROGRESSIVE_WALLET, RHT_CHILD_WALLET, OBJECT_GI_PURSE, GID_WALLET_ADULT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_ADULT_WALLET, ITEMTYPE_ITEM, GI_WALLET_ADULT, LOGIC_PROGRESSIVE_WALLET, RHT_ADULT_WALLET, ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_GIANT_WALLET, ITEMTYPE_ITEM, GI_WALLET_GIANT, LOGIC_PROGRESSIVE_WALLET, RHT_GIANT_WALLET, ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + AddItem(RG_TYCOON_WALLET, ITEMTYPE_ITEM, RG_TYCOON_WALLET, LOGIC_PROGRESSIVE_WALLET, RHT_TYCOON_WALLET, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_DEKU_NUT_BAG, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_BAG, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_DEKU_NUT_CAPACITY_30, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_CAPACITY_30, ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_DEKU_NUT_CAPACITY_40, ITEMTYPE_ITEM, GI_NUT_UPGRADE_40, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_CAPACITY_40, ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_DEKU_STICK_BAG, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_BAG, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_DEKU_STICK_CAPACITY_20, ITEMTYPE_ITEM, GI_STICK_UPGRADE_20, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_CAPACITY_20, ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_DEKU_STICK_CAPACITY_30, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_CAPACITY_30, ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); + AddItem(RG_MAGIC_SINGLE, ITEMTYPE_ITEM, 0x8A, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_SINGLE, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + AddItem(RG_MAGIC_DOUBLE, ITEMTYPE_ITEM, 0x8A, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + AddItem(RG_TRIFORCE_PIECE, ITEMTYPE_ITEM, 0xDF, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); // clang-format on // Init itemNameToEnum for (auto& item : itemTable) { - // Easiest way to filter out all the empty values from the array, since we still technically want the 0/RG_NONE - // entry - if (item.GetName().english.empty()) { - continue; + std::vector strings = item.GetName().GetAllMessages(MF_RAW); + for (std::string string : strings) { + if (itemNameToEnum.contains(string) && string != "") { + if (itemNameToEnum[string] != item.GetRandomizerGet()) { + SPDLOG_DEBUG("\tREPEATED STRING WITH " + string + "\n\n"); + } + } else { + itemNameToEnum[string] = item.GetRandomizerGet(); + } } - itemNameToEnum[item.GetName().english] = item.GetRandomizerGet(); - itemNameToEnum[item.GetName().french] = item.GetRandomizerGet(); - itemNameToEnum[item.GetName().german] = item.GetRandomizerGet(); } } diff --git a/soh/soh/Enhancements/randomizer/item_location.cpp b/soh/soh/Enhancements/randomizer/item_location.cpp index f7587ec5e..d2f39ef42 100644 --- a/soh/soh/Enhancements/randomizer/item_location.cpp +++ b/soh/soh/Enhancements/randomizer/item_location.cpp @@ -32,7 +32,7 @@ RandomizerGet& ItemLocation::RefPlacedItem() { return placedItem; } -const Text& ItemLocation::GetPlacedItemName() const { +const CustomMessage& ItemLocation::GetPlacedItemName() const { return StaticData::RetrieveItem(placedItem).GetName(); } diff --git a/soh/soh/Enhancements/randomizer/item_location.h b/soh/soh/Enhancements/randomizer/item_location.h index a04f5c2cf..3725c614e 100644 --- a/soh/soh/Enhancements/randomizer/item_location.h +++ b/soh/soh/Enhancements/randomizer/item_location.h @@ -15,7 +15,7 @@ class ItemLocation { void AddToPool(); void RemoveFromPool(); const Item& GetPlacedItem() const; - const Text& GetPlacedItemName() const; + const CustomMessage& GetPlacedItemName() const; RandomizerGet GetPlacedRandomizerGet() const; void SetPlacedItem(RandomizerGet item); RandomizerGet& RefPlacedItem(); diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index 92bc9aa37..84a384267 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -67,7 +67,7 @@ void RegionTable_Init_Kakariko() { Entrance(RR_KAK_IMPAS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY);}), Entrance(RR_KAK_WINDMILL, []{return logic->CanOpenOverworldDoor(RG_WINDMILL_KEY);}), Entrance(RR_KAK_BAZAAR, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_BAZAAR_KEY);}), - Entrance(RR_KAK_SHOOTING_GALLERY, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY);}), + Entrance(RR_KAK_SHOOTING_GALLERY, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_KEY);}), Entrance(RR_KAK_WELL, []{return logic->IsAdult || logic->DrainWell || logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE) && logic->IsChild && logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash());}), Entrance(RR_KAK_POTION_SHOP_FRONT, []{return (logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}), Entrance(RR_KAK_REDEAD_GROTTO, []{return logic->CanOpenBombGrotto();}), @@ -124,7 +124,7 @@ void RegionTable_Init_Kakariko() { //Exits Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), Entrance(RR_KAK_OPEN_GROTTO, []{return true;}), - Entrance(RR_KAK_ODD_POTION_BUILDING, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY);}), + Entrance(RR_KAK_ODD_POTION_BUILDING, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_SHOP_KEY);}), Entrance(RR_KAK_POTION_SHOP_BACK, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}), }); diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index 4f62d437f..870e9c797 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -34,9 +34,9 @@ void RegionTable_Init_Market() { Entrance(RR_CASTLE_GROUNDS, []{return true;}), Entrance(RR_MARKET_BAZAAR, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_BAZAAR_KEY);}), Entrance(RR_MARKET_MASK_SHOP, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MASK_SHOP_KEY);}), - Entrance(RR_MARKET_SHOOTING_GALLERY, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY);}), + Entrance(RR_MARKET_SHOOTING_GALLERY, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_KEY);}), Entrance(RR_MARKET_BOMBCHU_BOWLING, []{return logic->IsChild && logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY);}), - Entrance(RR_MARKET_TREASURE_CHEST_GAME, []{return logic->IsChild && logic->AtNight && logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY);}), + Entrance(RR_MARKET_TREASURE_CHEST_GAME, []{return logic->IsChild && logic->AtNight && logic->CanOpenOverworldDoor(RG_TCG_BUILDING_KEY);}), Entrance(RR_MARKET_POTION_SHOP, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_POTION_SHOP_KEY);}), Entrance(RR_MARKET_BACK_ALLEY, []{return logic->IsChild;}), }); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 2fea752cc..d6aca293e 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -134,11 +134,11 @@ void Rando::StaticData::InitLocationTable() { locationTable[RC_LW_TARGET_IN_WOODS] = Location::Base(RC_LW_TARGET_IN_WOODS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, "Target in Woods", RHT_LW_TARGET_IN_WOODS, RG_PROGRESSIVE_SLINGSHOT, SpoilerCollectionCheck::ItemGetInf(29), true); locationTable[RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x00, "Deku Scrub Near Deku Theater Right", RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, RG_BUY_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT), false, 20); locationTable[RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x01, "Deku Scrub Near Deku Theater Left", RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RG_BUY_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT), false, 15); - locationTable[RC_LW_DEKU_SCRUB_NEAR_BRIDGE] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RCQUEST_BOTH, RCTYPE_SCRUB, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x09, "Deku Scrub Near Bridge", RHT_LW_DEKU_SCRUB_NEAR_BRIDGE, RG_PROGRESSIVE_STICK_UPGRADE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE), true, 40); + locationTable[RC_LW_DEKU_SCRUB_NEAR_BRIDGE] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RCQUEST_BOTH, RCTYPE_SCRUB, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x09, "Deku Scrub Near Bridge", RHT_LW_DEKU_SCRUB_NEAR_BRIDGE, RG_PROGRESSIVE_STICK_BAG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE), true, 40); locationTable[RC_LW_DEKU_SCRUB_GROTTO_REAR] = Location::Base(RC_LW_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xF5), "Deku Scrub Grotto Rear", RHT_LW_DEKU_SCRUB_GROTTO_REAR, RG_BUY_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR), false, 40); - locationTable[RC_LW_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_LW_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x0A, 0xF5), "Deku Scrub Grotto Front", RHT_LW_DEKU_SCRUB_GROTTO_FRONT, RG_PROGRESSIVE_NUT_UPGRADE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT), false, 40); - locationTable[RC_DEKU_THEATER_SKULL_MASK] = Location::Base(RC_DEKU_THEATER_SKULL_MASK, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_GROTTOS, 0x00, "Deku Theater Skull Mask", RHT_DEKU_THEATER_SKULL_MASK, RG_PROGRESSIVE_STICK_UPGRADE, SpoilerCollectionCheck::ItemGetInf(ITEMGETINF_OBTAINED_STICK_UPGRADE_FROM_STAGE), true); - locationTable[RC_DEKU_THEATER_MASK_OF_TRUTH] = Location::Base(RC_DEKU_THEATER_MASK_OF_TRUTH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_GROTTOS, 0x00, "Deku Theater Mask of Truth", RHT_DEKU_THEATER_MASK_OF_TRUTH, RG_PROGRESSIVE_NUT_UPGRADE, SpoilerCollectionCheck::ItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE), true); + locationTable[RC_LW_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_LW_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x0A, 0xF5), "Deku Scrub Grotto Front", RHT_LW_DEKU_SCRUB_GROTTO_FRONT, RG_PROGRESSIVE_NUT_BAG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT), false, 40); + locationTable[RC_DEKU_THEATER_SKULL_MASK] = Location::Base(RC_DEKU_THEATER_SKULL_MASK, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_GROTTOS, 0x00, "Deku Theater Skull Mask", RHT_DEKU_THEATER_SKULL_MASK, RG_PROGRESSIVE_STICK_BAG, SpoilerCollectionCheck::ItemGetInf(ITEMGETINF_OBTAINED_STICK_UPGRADE_FROM_STAGE), true); + locationTable[RC_DEKU_THEATER_MASK_OF_TRUTH] = Location::Base(RC_DEKU_THEATER_MASK_OF_TRUTH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_GROTTOS, 0x00, "Deku Theater Mask of Truth", RHT_DEKU_THEATER_MASK_OF_TRUTH, RG_PROGRESSIVE_NUT_BAG, SpoilerCollectionCheck::ItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE), true); // Sacred Forest Meadow locationTable[RC_SFM_WOLFOS_GROTTO_CHEST] = Location::Chest(RC_SFM_WOLFOS_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_SACRED_FOREST_MEADOW, ACTOR_EN_BOX, SCENE_GROTTOS, 31409, 0x11, "Wolfos Grotto Chest", RHT_SFM_WOLFOS_GROTTO_CHEST, RG_PURPLE_RUPEE); locationTable[RC_SFM_DEKU_SCRUB_GROTTO_REAR] = Location::Base(RC_SFM_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_SACRED_FOREST_MEADOW, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x07, 0xEE), "Deku Scrub Grotto Rear", RHT_SFM_DEKU_SCRUB_GROTTO_REAR, RG_BUY_RED_POTION_40, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR), false, 40); @@ -171,14 +171,14 @@ void Rando::StaticData::InitLocationTable() { locationTable[RC_GV_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_GV_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GERUDO_VALLEY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x08, 0xF0), "Deku Scrub Grotto Front", RHT_GV_DEKU_SCRUB_GROTTO_FRONT, RG_BUY_GREEN_POTION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT), false, 40); // Gerudo Fortress locationTable[RC_GF_CHEST] = Location::Chest(RC_GF_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDOS_FORTRESS, 1984, 0x00, "Chest", RHT_GF_CHEST, RG_PIECE_OF_HEART, true); - locationTable[RC_GF_HBA_1000_POINTS] = Location::Base(RC_GF_HBA_1000_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "HBA 1000 Points", RHT_GF_HBA_1000_POINTS, RG_PIECE_OF_HEART, SpoilerCollectionCheck::InfTable(INFTABLE_190), true); - locationTable[RC_GF_HBA_1500_POINTS] = Location::Base(RC_GF_HBA_1500_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "HBA 1500 Points", RHT_GF_HBA_1500_POINTS, RG_PROGRESSIVE_BOW, SpoilerCollectionCheck::ItemGetInf(15), true); + locationTable[RC_GF_HBA_1000_POINTS] = Location::Base(RC_GF_HBA_1000_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "HBA 1000 Points", RHT_GF_HBA_1000_POINTS, RG_PIECE_OF_HEART, SpoilerCollectionCheck::InfTable(INFTABLE_190), true); + locationTable[RC_GF_HBA_1500_POINTS] = Location::Base(RC_GF_HBA_1500_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "HBA 1500 Points", RHT_GF_HBA_1500_POINTS, RG_PROGRESSIVE_BOW, SpoilerCollectionCheck::ItemGetInf(15), true); // Thieves Hideout - locationTable[RC_TH_FREED_CARPENTERS] = Location::Base(RC_TH_FREED_CARPENTERS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, "Freed All Carpenters", RHT_TH_FREED_CARPENTERS, RG_GERUDO_MEMBERSHIP_CARD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS), true); - locationTable[RC_TH_1_TORCH_CARPENTER] = Location::Collectable(RC_TH_1_TORCH_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "1 Torch Carpenter", RHT_TH_1_TORCH_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); - locationTable[RC_TH_DEAD_END_CARPENTER] = Location::Collectable(RC_TH_DEAD_END_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "Dead End Carpenter", RHT_TH_DEAD_END_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); - locationTable[RC_TH_DOUBLE_CELL_CARPENTER] = Location::Collectable(RC_TH_DOUBLE_CELL_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "Double Cell Carpenter", RHT_TH_DOUBLE_CELL_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); - locationTable[RC_TH_STEEP_SLOPE_CARPENTER] = Location::Collectable(RC_TH_STEEP_SLOPE_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3857, 0x0F, "Steep Slope Carpenter", RHT_TH_STEEP_SLOPE_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); + locationTable[RC_TH_FREED_CARPENTERS] = Location::Base(RC_TH_FREED_CARPENTERS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, "Freed All Carpenters", RHT_TH_FREED_CARPENTERS, RG_GERUDO_MEMBERSHIP_CARD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS), true); + locationTable[RC_TH_1_TORCH_CARPENTER] = Location::Collectable(RC_TH_1_TORCH_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "1 Torch Carpenter", RHT_TH_1_TORCH_CARPENTER, RG_HIDEOUT_SMALL_KEY, true); + locationTable[RC_TH_DEAD_END_CARPENTER] = Location::Collectable(RC_TH_DEAD_END_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "Dead End Carpenter", RHT_TH_DEAD_END_CARPENTER, RG_HIDEOUT_SMALL_KEY, true); + locationTable[RC_TH_DOUBLE_CELL_CARPENTER] = Location::Collectable(RC_TH_DOUBLE_CELL_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "Double Cell Carpenter", RHT_TH_DOUBLE_CELL_CARPENTER, RG_HIDEOUT_SMALL_KEY, true); + locationTable[RC_TH_STEEP_SLOPE_CARPENTER] = Location::Collectable(RC_TH_STEEP_SLOPE_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3857, 0x0F, "Steep Slope Carpenter", RHT_TH_STEEP_SLOPE_CARPENTER, RG_HIDEOUT_SMALL_KEY, true); // Haunted Wasteland locationTable[RC_WASTELAND_CHEST] = Location::Chest(RC_WASTELAND_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_WASTELAND, ACTOR_EN_BOX, SCENE_HAUNTED_WASTELAND, -30048, 0x00, "Chest", RHT_WASTELAND_CHEST, RG_PURPLE_RUPEE); locationTable[RC_WASTELAND_BOMBCHU_SALESMAN] = Location::Base(RC_WASTELAND_BOMBCHU_SALESMAN, RCQUEST_BOTH, RCTYPE_MERCHANT, RCAREA_WASTELAND, ACTOR_ID_MAX, SCENE_HAUNTED_WASTELAND, 0x00, "Carpet Salesman", RHT_WASTELAND_BOMBCHU_SALESMAN, RG_BUY_BOMBCHUS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN), false, 200); @@ -187,7 +187,7 @@ void Rando::StaticData::InitLocationTable() { locationTable[RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR] = Location::Base(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DESERT_COLOSSUS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x07, 0xFD), "Deku Scrub Grotto Rear", RHT_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RG_BUY_RED_POTION_40, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR), false, 40); locationTable[RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DESERT_COLOSSUS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x08, 0xFD), "Deku Scrub Grotto Front", RHT_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RG_BUY_GREEN_POTION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT), false, 40); // Market - locationTable[RC_MARKET_TREASURE_CHEST_GAME_REWARD] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Treasure Chest Game Reward", RHT_MARKET_TREASURE_CHEST_GAME_REWARD, RG_TREASURE_GAME_HEART, SpoilerCollectionCheck::ItemGetInf(27), true); + locationTable[RC_MARKET_TREASURE_CHEST_GAME_REWARD] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Treasure Chest Game Reward", RHT_MARKET_TREASURE_CHEST_GAME_REWARD, RG_TCG_PIECE_OF_HEART, SpoilerCollectionCheck::ItemGetInf(27), true); locationTable[RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE] = Location::Base(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_BOMBCHU_BOWLING_ALLEY, 0x00, "Bombchu Bowling First Prize", RHT_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, RG_PROGRESSIVE_BOMB_BAG, SpoilerCollectionCheck::ItemGetInf(17), true); locationTable[RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE] = Location::Base(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_BOMBCHU_BOWLING_ALLEY, 0x00, "Bombchu Bowling Second Prize", RHT_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, RG_PIECE_OF_HEART, SpoilerCollectionCheck::ItemGetInf(18), true); locationTable[RC_MARKET_LOST_DOG] = Location::Base(RC_MARKET_LOST_DOG, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_DOG_LADY_HOUSE, 0x00, "Lost Dog", RHT_MARKET_LOST_DOG, RG_PIECE_OF_HEART, SpoilerCollectionCheck::InfTable(INFTABLE_191), true); @@ -198,11 +198,11 @@ void Rando::StaticData::InitLocationTable() { locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_3] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Third Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_3, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_3)); locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fourth Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_4, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_4)); locationTable[RC_MARKET_TREASURE_CHEST_GAME_ITEM_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fifth Room Item", RHT_MARKET_TREASURE_CHEST_GAME_ITEM_5, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_5)); - locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_1] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game First Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_1, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1)); - locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_2] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Second Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_2, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2)); - locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_3] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Third Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_3, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3)); - locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fourth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_4, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4)); - locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fifth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_5, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5)); + locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_1] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game First Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_1, RG_TCG_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1)); + locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_2] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Second Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_2, RG_TCG_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2)); + locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_3] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Third Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_3, RG_TCG_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3)); + locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fourth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_4, RG_TCG_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4)); + locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fifth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_5, RG_TCG_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5)); // Hyrule Castle locationTable[RC_HC_MALON_EGG] = Location::Base(RC_HC_MALON_EGG, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_HYRULE_CASTLE, 0x00, "Malon Egg", RHT_HC_MALON_EGG, RG_WEIRD_EGG, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_POCKET_EGG), true); locationTable[RC_HC_ZELDAS_LETTER] = Location::Base(RC_HC_ZELDAS_LETTER, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_CASTLE_COURTYARD_ZELDA, 0x00, "Zeldas Letter", RHT_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER), true); @@ -508,26 +508,26 @@ void Rando::StaticData::InitLocationTable() { locationTable[RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, 1553, 0x06, "MQ Freestanding Key", RHT_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, RG_SHADOW_TEMPLE_SMALL_KEY, true); // Bottom of the Well Vanilla - locationTable[RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 22600, 0x08, "Front Left Fake Wall Chest", RHT_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, true); + locationTable[RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 22600, 0x08, "Front Left Fake Wall Chest", RHT_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, RG_BOTW_SMALL_KEY, true); locationTable[RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 20578, 0x02, "Front Center Bombable Chest", RHT_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, RG_BOMBCHU_10); - locationTable[RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 22597, 0x05, "Right Bottom Fake Wall Chest", RHT_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, true); - locationTable[RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST, RCQUEST_VANILLA, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 2049, 0x01, "Compass Chest", RHT_BOTTOM_OF_THE_WELL_COMPASS_CHEST, RG_BOTTOM_OF_THE_WELL_COMPASS, true); + locationTable[RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 22597, 0x05, "Right Bottom Fake Wall Chest", RHT_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, RG_BOTW_SMALL_KEY, true); + locationTable[RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST, RCQUEST_VANILLA, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 2049, 0x01, "Compass Chest", RHT_BOTTOM_OF_THE_WELL_COMPASS_CHEST, RG_BOTW_COMPASS, true); locationTable[RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 20558, 0x0E, "Center Skulltula Chest", RHT_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, RG_DEKU_NUTS_5); locationTable[RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 23684, 0x04, "Back Left Bombable Chest", RHT_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, RG_DEKU_NUTS_10); locationTable[RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, RCQUEST_VANILLA, RCTYPE_BOSS_HEART_OR_OTHER_REWARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 4419, 0x03, "Lens of Truth Chest", RHT_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, RG_LENS_OF_TRUTH, true); locationTable[RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 27348, 0x14, "Invisible Chest", RHT_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, RG_HUGE_RUPEE); locationTable[RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 23760, 0x10, "Underwater Front Chest", RHT_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, RG_BOMBS_10); locationTable[RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 22793, 0x09, "Underwater Left Chest", RHT_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, RG_RECOVERY_HEART); - locationTable[RC_BOTTOM_OF_THE_WELL_MAP_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 2087, 0x07, "Map Chest", RHT_BOTTOM_OF_THE_WELL_MAP_CHEST, RG_BOTTOM_OF_THE_WELL_MAP, true); + locationTable[RC_BOTTOM_OF_THE_WELL_MAP_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 2087, 0x07, "Map Chest", RHT_BOTTOM_OF_THE_WELL_MAP_CHEST, RG_BOTW_MAP, true); locationTable[RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 21802, 0x0A, "Fire Keese Chest", RHT_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, RG_DEKU_SHIELD); locationTable[RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 21836, 0x0C, "Like Like Chest", RHT_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, RG_HYLIAN_SHIELD); - locationTable[RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 273, 0x01, "Freestanding Key", RHT_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, true); + locationTable[RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 273, 0x01, "Freestanding Key", RHT_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, RG_BOTW_SMALL_KEY, true); // Bottom of the Well Master Quest - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, RCQUEST_MQ, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 2083, 0x03, "MQ Map Chest", RHT_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, RG_BOTTOM_OF_THE_WELL_MAP, true); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, RCQUEST_MQ, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 2083, 0x03, "MQ Map Chest", RHT_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, RG_BOTW_MAP, true); locationTable[RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, RCQUEST_MQ, RCTYPE_BOSS_HEART_OR_OTHER_REWARD, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, -20159, 0x01, "MQ Lens of Truth Chest", RHT_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, RG_LENS_OF_TRUTH, true); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, RCQUEST_MQ, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 6146, 0x02, "MQ Compass Chest", RHT_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, RG_BOTTOM_OF_THE_WELL_COMPASS, true); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 529, 0x02, "MQ Dead Hand Freestanding Key", RHT_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, true); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 273, 0x01, "MQ East Inner Room Freestanding Key", RHT_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, RG_BOTTOM_OF_THE_WELL_SMALL_KEY, true); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST] = Location::Chest(RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, RCQUEST_MQ, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_BOTTOM_OF_THE_WELL, 6146, 0x02, "MQ Compass Chest", RHT_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, RG_BOTW_COMPASS, true); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 529, 0x02, "MQ Dead Hand Freestanding Key", RHT_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, RG_BOTW_SMALL_KEY, true); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, 273, 0x01, "MQ East Inner Room Freestanding Key", RHT_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, RG_BOTW_SMALL_KEY, true); // Ice Cavern Vanilla locationTable[RC_ICE_CAVERN_MAP_CHEST] = Location::Chest(RC_ICE_CAVERN_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_ICE_CAVERN, 2080, 0x00, "Map Chest", RHT_ICE_CAVERN_MAP_CHEST, RG_ICE_CAVERN_MAP, true); @@ -543,43 +543,43 @@ void Rando::StaticData::InitLocationTable() { // Gerudo Training Ground Vanilla locationTable[RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30573, 0x13, "Lobby Left Chest", RHT_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, RG_BLUE_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30393, 0x07, "Lobby Right Chest", RHT_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, RG_ARROWS_10); - locationTable[RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30656, 0x00, "Stalfos Chest", RHT_GERUDO_TRAINING_GROUND_STALFOS_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); - locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30655, 0x01, "Beamos Chest", RHT_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); - locationTable[RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22603, 0x0B, "Hidden Ceiling Chest", RHT_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30656, 0x00, "Stalfos Chest", RHT_GERUDO_TRAINING_GROUND_STALFOS_CHEST, RG_GTG_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30655, 0x01, "Beamos Chest", RHT_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, RG_GTG_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22603, 0x0B, "Hidden Ceiling Chest", RHT_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, RG_GTG_SMALL_KEY, true); locationTable[RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 23206, 0x06, "Maze Path First Chest", RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, RG_PURPLE_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22986, 0x0A, "Maze Path Second Chest", RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST, RG_RED_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22889, 0x09, "Maze Path Third Chest", RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST, RG_ARROWS_30); locationTable[RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, RCQUEST_VANILLA, RCTYPE_BOSS_HEART_OR_OTHER_REWARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 2860, 0x0C, "Maze Path Final Chest", RHT_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, RG_ICE_ARROWS, true); locationTable[RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 23877, 0x05, "Maze Right Central Chest", RHT_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, RG_BOMBCHU_5); locationTable[RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22888, 0x08, "Maze Right Side Chest", RHT_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, RG_ARROWS_30); - locationTable[RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30643, 0x0D, "Underwater Silver Rupee Chest", RHT_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30643, 0x0D, "Underwater Silver Rupee Chest", RHT_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, RG_GTG_SMALL_KEY, true); locationTable[RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 31058, 0x12, "Hammer Room Clear Chest", RHT_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, RG_ARROWS_10); - locationTable[RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22608, 0x10, "Hammer Room Switch Chest", RHT_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); - locationTable[RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30653, 0x03, "Eye Statue Chest", RHT_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); - locationTable[RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22596, 0x04, "Near Scarecrow Chest", RHT_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22608, 0x10, "Hammer Room Switch Chest", RHT_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, RG_GTG_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30653, 0x03, "Eye Statue Chest", RHT_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, RG_GTG_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22596, 0x04, "Near Scarecrow Chest", RHT_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, RG_GTG_SMALL_KEY, true); locationTable[RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 31089, 0x11, "Before Heavy Block Chest", RHT_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, RG_ARROWS_30); locationTable[RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 31439, 0x0F, "Heavy Block First Chest", RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, RG_HUGE_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 30862, 0x0E, "Heavy Block Second Chest", RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, RG_BLUE_RUPEE); - locationTable[RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 26708, 0x14, "Heavy Block Third Chest", RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 26708, 0x14, "Heavy Block Third Chest", RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, RG_GTG_SMALL_KEY, true); locationTable[RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 24450, 0x02, "Heavy Block Fourth Chest", RHT_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, RG_ICE_TRAP); - locationTable[RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, 273, 0x01, "Freestanding Key", RHT_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, RCQUEST_VANILLA, RCTYPE_SMALL_KEY, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, 273, 0x01, "Freestanding Key", RHT_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, RG_GTG_SMALL_KEY, true); // Gerudo Training Ground Master Quest locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 23879, 0x07, "MQ Lobby Right Chest", RHT_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, RG_BOMBCHU_5); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22867, 0x13, "MQ Lobby Left Chest", RHT_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, RG_ARROWS_10); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30304, 0x00, "MQ First Iron Knuckle Chest", RHT_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, RG_BLUE_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 31057, 0x11, "MQ Before Heavy Block Chest", RHT_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, RG_ARROWS_10); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -32669, 0x03, "MQ Eye Statue Chest", RHT_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, RG_BOMBCHU_10); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30642, 0x0E, "MQ Flame Circle Chest", RHT_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30642, 0x0E, "MQ Flame Circle Chest", RHT_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, RG_GTG_SMALL_KEY, true); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 31058, 0x12, "MQ Second Iron Knuckle Chest", RHT_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, RG_ARROWS_10); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30655, 0x01, "MQ Dinolfos Chest", RHT_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, RG_GERUDO_TRAINING_GROUND_SMALL_KEY, true); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30655, 0x01, "MQ Dinolfos Chest", RHT_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, RG_GTG_SMALL_KEY, true); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, RCQUEST_MQ, RCTYPE_BOSS_HEART_OR_OTHER_REWARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -17628, 0x04, "MQ Ice Arrows Chest", RHT_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, RG_ICE_ARROWS, true); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22661, 0x05, "MQ Maze Right Central Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, RG_BLUE_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22918, 0x06, "MQ Maze Path First Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST, RG_GREEN_RUPEE); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 24136, 0x08, "MQ Maze Right Side Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, RG_TREASURE_GAME_GREEN_RUPEE); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 24137, 0x09, "MQ Maze Path Third Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, RG_TREASURE_GAME_GREEN_RUPEE); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 24136, 0x08, "MQ Maze Right Side Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, RG_LOSER_GREEN_RUPEE); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 24137, 0x09, "MQ Maze Path Third Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, RG_LOSER_GREEN_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 22986, 0x0A, "MQ Maze Path Second Chest", RHT_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST, RG_RED_RUPEE); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 23211, 0x0B, "MQ Hidden Ceiling Chest", RHT_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, RG_PURPLE_RUPEE); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30643, 0x0D, "MQ Underwater Silver Rupee Chest", RHT_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, RG_TREASURE_GAME_GREEN_RUPEE, true); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, RCQUEST_MQ, RCTYPE_SMALL_KEY, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, -30643, 0x0D, "MQ Underwater Silver Rupee Chest", RHT_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, RG_LOSER_GREEN_RUPEE, true); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST] = Location::Chest(RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_TRAINING_GROUND, 31394, 0x02, "MQ Heavy Block Chest", RHT_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, RG_PURPLE_RUPEE); // Ganon's Castle Shared @@ -824,8 +824,8 @@ void Rando::StaticData::InitLocationTable() { locationTable[RC_ZF_GREAT_FAIRY_REWARD] = Location::Base(RC_ZF_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_ZORAS_FOUNTAIN, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 1, "Great Fairy Reward", RHT_ZF_GREAT_FAIRY_REWARD, RG_FARORES_WIND, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_GREAT_FAIRY_REWARD), true); locationTable[RC_HC_GREAT_FAIRY_REWARD] = Location::Base(RC_HC_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 2, "Great Fairy Reward", RHT_HC_GREAT_FAIRY_REWARD, RG_DINS_FIRE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_GREAT_FAIRY_REWARD), true); locationTable[RC_COLOSSUS_GREAT_FAIRY_REWARD] = Location::Base(RC_COLOSSUS_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DESERT_COLOSSUS, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 3, "Great Fairy Reward", RHT_COLOSSUS_GREAT_FAIRY_REWARD, RG_NAYRUS_LOVE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD), true); - locationTable[RC_DMT_GREAT_FAIRY_REWARD] = Location::Base(RC_DMT_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 1, "Great Fairy Reward", RHT_DMT_GREAT_FAIRY_REWARD, RG_PROGRESSIVE_MAGIC_METER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_GREAT_FAIRY_REWARD), true); - locationTable[RC_DMC_GREAT_FAIRY_REWARD] = Location::Base(RC_DMC_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 2, "Great Fairy Reward", RHT_DMC_GREAT_FAIRY_REWARD, RG_PROGRESSIVE_MAGIC_METER, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GREAT_FAIRY_REWARD), true); + locationTable[RC_DMT_GREAT_FAIRY_REWARD] = Location::Base(RC_DMT_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 1, "Great Fairy Reward", RHT_DMT_GREAT_FAIRY_REWARD, RG_PROGRESSIVE_MAGIC, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_GREAT_FAIRY_REWARD), true); + locationTable[RC_DMC_GREAT_FAIRY_REWARD] = Location::Base(RC_DMC_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 2, "Great Fairy Reward", RHT_DMC_GREAT_FAIRY_REWARD, RG_PROGRESSIVE_MAGIC, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GREAT_FAIRY_REWARD), true); locationTable[RC_OGC_GREAT_FAIRY_REWARD] = Location::Base(RC_OGC_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 3, "OGC Great Fairy Reward", "OGC Great Fairy Reward", RHT_OGC_GREAT_FAIRY_REWARD, RG_DOUBLE_DEFENSE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_GREAT_FAIRY_REWARD), true); /*------------------------------- diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index eea79e92d..2ef356f02 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -43,7 +43,7 @@ bool Logic::HasItem(RandomizerGet itemName) { return CheckInventory(ITEM_HOOKSHOT, false); case RG_LONGSHOT: return CheckInventory(ITEM_LONGSHOT, true); - case RG_PROGRESSIVE_STICK_UPGRADE: + case RG_PROGRESSIVE_STICK_BAG: case RG_STICKS: return CurrentUpgrade(UPG_STICKS); case RG_FIRE_ARROWS: @@ -62,7 +62,7 @@ bool Logic::HasItem(RandomizerGet itemName) { return CheckInventory(ITEM_SLINGSHOT, true); case RG_BOOMERANG: return CheckInventory(ITEM_BOOMERANG, true); - case RG_PROGRESSIVE_NUT_UPGRADE: + case RG_PROGRESSIVE_NUT_BAG: case RG_NUTS: return CurrentUpgrade(UPG_NUTS); // RANDOTODO handle cases where the scarecrow is persistent between age better when OI is added @@ -149,20 +149,20 @@ bool Logic::HasItem(RandomizerGet itemName) { case RG_MARKET_BAZAAR_KEY: case RG_MARKET_POTION_SHOP_KEY: case RG_MASK_SHOP_KEY: - case RG_MARKET_SHOOTING_GALLERY_KEY: + case RG_MARKET_SHOOTING_KEY: case RG_BOMBCHU_BOWLING_KEY: - case RG_TREASURE_CHEST_GAME_BUILDING_KEY: + case RG_TCG_BUILDING_KEY: case RG_BOMBCHU_SHOP_KEY: case RG_RICHARDS_HOUSE_KEY: case RG_ALLEY_HOUSE_KEY: case RG_KAK_BAZAAR_KEY: case RG_KAK_POTION_SHOP_KEY: case RG_BOSS_HOUSE_KEY: - case RG_GRANNYS_POTION_SHOP_KEY: + case RG_GRANNYS_SHOP_KEY: case RG_SKULLTULA_HOUSE_KEY: case RG_IMPAS_HOUSE_KEY: case RG_WINDMILL_KEY: - case RG_KAK_SHOOTING_GALLERY_KEY: + case RG_KAK_SHOOTING_KEY: case RG_DAMPES_HUT_KEY: case RG_TALONS_HOUSE_KEY: case RG_STABLES_KEY: @@ -190,7 +190,7 @@ bool Logic::HasItem(RandomizerGet itemName) { case RG_WATER_TEMPLE_MAP: case RG_SPIRIT_TEMPLE_MAP: case RG_SHADOW_TEMPLE_MAP: - case RG_BOTTOM_OF_THE_WELL_MAP: + case RG_BOTW_MAP: case RG_ICE_CAVERN_MAP: return CheckDungeonItem(DUNGEON_MAP, RandoGetToDungeonScene.at(itemName)); // Compasses @@ -202,7 +202,7 @@ bool Logic::HasItem(RandomizerGet itemName) { case RG_WATER_TEMPLE_COMPASS: case RG_SPIRIT_TEMPLE_COMPASS: case RG_SHADOW_TEMPLE_COMPASS: - case RG_BOTTOM_OF_THE_WELL_COMPASS: + case RG_BOTW_COMPASS: case RG_ICE_CAVERN_COMPASS: return CheckDungeonItem(DUNGEON_COMPASS, RandoGetToDungeonScene.at(itemName)); // Wallets @@ -1477,20 +1477,20 @@ std::map Logic::RandoGetToRandInf = { { RG_MARKET_BAZAAR_KEY, RAND_INF_MARKET_BAZAAR_KEY_OBTAINED }, { RG_MARKET_POTION_SHOP_KEY, RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED }, { RG_MASK_SHOP_KEY, RAND_INF_MASK_SHOP_KEY_OBTAINED }, - { RG_MARKET_SHOOTING_GALLERY_KEY, RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED }, + { RG_MARKET_SHOOTING_KEY, RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED }, { RG_BOMBCHU_BOWLING_KEY, RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED }, - { RG_TREASURE_CHEST_GAME_BUILDING_KEY, RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED }, + { RG_TCG_BUILDING_KEY, RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED }, { RG_BOMBCHU_SHOP_KEY, RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED }, { RG_RICHARDS_HOUSE_KEY, RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED }, { RG_ALLEY_HOUSE_KEY, RAND_INF_ALLEY_HOUSE_KEY_OBTAINED }, { RG_KAK_BAZAAR_KEY, RAND_INF_KAK_BAZAAR_KEY_OBTAINED }, { RG_KAK_POTION_SHOP_KEY, RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED }, { RG_BOSS_HOUSE_KEY, RAND_INF_BOSS_HOUSE_KEY_OBTAINED }, - { RG_GRANNYS_POTION_SHOP_KEY, RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED }, + { RG_GRANNYS_SHOP_KEY, RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED }, { RG_SKULLTULA_HOUSE_KEY, RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED }, { RG_IMPAS_HOUSE_KEY, RAND_INF_IMPAS_HOUSE_KEY_OBTAINED }, { RG_WINDMILL_KEY, RAND_INF_WINDMILL_KEY_OBTAINED }, - { RG_KAK_SHOOTING_GALLERY_KEY, RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED }, + { RG_KAK_SHOOTING_KEY, RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED }, { RG_DAMPES_HUT_KEY, RAND_INF_DAMPES_HUT_KEY_OBTAINED }, { RG_TALONS_HOUSE_KEY, RAND_INF_TALONS_HOUSE_KEY_OBTAINED }, { RG_STABLES_KEY, RAND_INF_STABLES_KEY_OBTAINED }, @@ -1505,18 +1505,18 @@ std::map Logic::RandoGetToDungeonScene = { { RG_WATER_TEMPLE_SMALL_KEY, SCENE_WATER_TEMPLE }, { RG_SPIRIT_TEMPLE_SMALL_KEY, SCENE_SPIRIT_TEMPLE }, { RG_SHADOW_TEMPLE_SMALL_KEY, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_SMALL_KEY, SCENE_BOTTOM_OF_THE_WELL }, - { RG_GERUDO_TRAINING_GROUND_SMALL_KEY, SCENE_GERUDO_TRAINING_GROUND }, - { RG_GERUDO_FORTRESS_SMALL_KEY, SCENE_THIEVES_HIDEOUT }, + { RG_BOTW_SMALL_KEY, SCENE_BOTTOM_OF_THE_WELL }, + { RG_GTG_SMALL_KEY, SCENE_GERUDO_TRAINING_GROUND }, + { RG_HIDEOUT_SMALL_KEY, SCENE_THIEVES_HIDEOUT }, { RG_GANONS_CASTLE_SMALL_KEY, SCENE_INSIDE_GANONS_CASTLE }, { RG_FOREST_TEMPLE_KEY_RING, SCENE_FOREST_TEMPLE }, { RG_FIRE_TEMPLE_KEY_RING, SCENE_FIRE_TEMPLE }, { RG_WATER_TEMPLE_KEY_RING, SCENE_WATER_TEMPLE }, { RG_SPIRIT_TEMPLE_KEY_RING, SCENE_SPIRIT_TEMPLE }, { RG_SHADOW_TEMPLE_KEY_RING, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_KEY_RING, SCENE_BOTTOM_OF_THE_WELL }, - { RG_GERUDO_TRAINING_GROUND_KEY_RING, SCENE_GERUDO_TRAINING_GROUND }, - { RG_GERUDO_FORTRESS_KEY_RING, SCENE_THIEVES_HIDEOUT }, + { RG_BOTW_KEY_RING, SCENE_BOTTOM_OF_THE_WELL }, + { RG_GTG_KEY_RING, SCENE_GERUDO_TRAINING_GROUND }, + { RG_HIDEOUT_KEY_RING, SCENE_THIEVES_HIDEOUT }, { RG_GANONS_CASTLE_KEY_RING, SCENE_INSIDE_GANONS_CASTLE }, { RG_FOREST_TEMPLE_BOSS_KEY, SCENE_FOREST_TEMPLE }, { RG_FIRE_TEMPLE_BOSS_KEY, SCENE_FIRE_TEMPLE }, @@ -1532,7 +1532,7 @@ std::map Logic::RandoGetToDungeonScene = { { RG_WATER_TEMPLE_MAP, SCENE_WATER_TEMPLE }, { RG_SPIRIT_TEMPLE_MAP, SCENE_SPIRIT_TEMPLE }, { RG_SHADOW_TEMPLE_MAP, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_MAP, SCENE_BOTTOM_OF_THE_WELL }, + { RG_BOTW_MAP, SCENE_BOTTOM_OF_THE_WELL }, { RG_ICE_CAVERN_MAP, SCENE_ICE_CAVERN }, { RG_DEKU_TREE_COMPASS, SCENE_DEKU_TREE }, { RG_DODONGOS_CAVERN_COMPASS, SCENE_DODONGOS_CAVERN }, @@ -1542,9 +1542,9 @@ std::map Logic::RandoGetToDungeonScene = { { RG_WATER_TEMPLE_COMPASS, SCENE_WATER_TEMPLE }, { RG_SPIRIT_TEMPLE_COMPASS, SCENE_SPIRIT_TEMPLE }, { RG_SHADOW_TEMPLE_COMPASS, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_COMPASS, SCENE_BOTTOM_OF_THE_WELL }, + { RG_BOTW_COMPASS, SCENE_BOTTOM_OF_THE_WELL }, { RG_ICE_CAVERN_COMPASS, SCENE_ICE_CAVERN }, - { RG_TREASURE_GAME_SMALL_KEY, SCENE_TREASURE_BOX_SHOP } + { RG_TCG_SMALL_KEY, SCENE_TREASURE_BOX_SHOP } }; std::map Logic::RandoGetToQuestItem = { @@ -1712,7 +1712,7 @@ void Logic::ApplyItemEffect(Item& item, bool state) { SetUpgrade(UPG_SCALE, newLevel); } } break; - case RG_PROGRESSIVE_NUT_UPGRADE: { + case RG_PROGRESSIVE_NUT_BAG: { auto realGI = item.GetGIEntry(); if (realGI->itemId == RG_NUT_UPGRADE_INF && realGI->modIndex == MOD_RANDOMIZER) { SetRandoInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE, true); @@ -1725,7 +1725,7 @@ void Logic::ApplyItemEffect(Item& item, bool state) { } SetUpgrade(UPG_NUTS, newLevel); } break; - case RG_PROGRESSIVE_STICK_UPGRADE: { + case RG_PROGRESSIVE_STICK_BAG: { auto realGI = item.GetGIEntry(); if (realGI->itemId == RG_STICK_UPGRADE_INF && realGI->modIndex == MOD_RANDOMIZER) { SetRandoInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE, true); @@ -1746,7 +1746,7 @@ void Logic::ApplyItemEffect(Item& item, bool state) { } SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); } break; - case RG_PROGRESSIVE_MAGIC_METER: { + case RG_PROGRESSIVE_MAGIC: { auto realGI = item.GetGIEntry(); if (realGI->itemId == RG_MAGIC_INF && realGI->modIndex == MOD_RANDOMIZER) { SetRandoInf(RAND_INF_HAS_INFINITE_MAGIC_METER, true); @@ -1842,20 +1842,20 @@ void Logic::ApplyItemEffect(Item& item, bool state) { case RG_MARKET_BAZAAR_KEY: case RG_MARKET_POTION_SHOP_KEY: case RG_MASK_SHOP_KEY: - case RG_MARKET_SHOOTING_GALLERY_KEY: + case RG_MARKET_SHOOTING_KEY: case RG_BOMBCHU_BOWLING_KEY: - case RG_TREASURE_CHEST_GAME_BUILDING_KEY: + case RG_TCG_BUILDING_KEY: case RG_BOMBCHU_SHOP_KEY: case RG_RICHARDS_HOUSE_KEY: case RG_ALLEY_HOUSE_KEY: case RG_KAK_BAZAAR_KEY: case RG_KAK_POTION_SHOP_KEY: case RG_BOSS_HOUSE_KEY: - case RG_GRANNYS_POTION_SHOP_KEY: + case RG_GRANNYS_SHOP_KEY: case RG_SKULLTULA_HOUSE_KEY: case RG_IMPAS_HOUSE_KEY: case RG_WINDMILL_KEY: - case RG_KAK_SHOOTING_GALLERY_KEY: + case RG_KAK_SHOOTING_KEY: case RG_DAMPES_HUT_KEY: case RG_TALONS_HOUSE_KEY: case RG_STABLES_KEY: @@ -1907,7 +1907,7 @@ void Logic::ApplyItemEffect(Item& item, bool state) { case ITEMTYPE_BOSSKEY: SetDungeonItem(DUNGEON_KEY_BOSS, RandoGetToDungeonScene.find(item.GetRandomizerGet())->second, state); break; - case ITEMTYPE_FORTRESS_SMALLKEY: + case ITEMTYPE_HIDEOUT_KEY: case ITEMTYPE_SMALLKEY: { auto randoGet = item.GetRandomizerGet(); auto keyring = randoGet >= RG_FOREST_TEMPLE_KEY_RING && randoGet <= RG_GANONS_CASTLE_KEY_RING; diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 2a2acd5c7..ae30defca 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -822,7 +822,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return !CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_HOVER) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; // Inventory Items - case RG_PROGRESSIVE_STICK_UPGRADE: + case RG_PROGRESSIVE_STICK_BAG: return infiniteUpgrades != RO_INF_UPGRADES_OFF ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) @@ -833,7 +833,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG).Get() ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; - case RG_PROGRESSIVE_NUT_UPGRADE: + case RG_PROGRESSIVE_NUT_BAG: return infiniteUpgrades != RO_INF_UPGRADES_OFF ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) @@ -992,7 +992,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return CUR_UPG_VALUE(UPG_WALLET) < numWallets ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_PROGRESSIVE_SCALE: return CUR_UPG_VALUE(UPG_SCALE) < 2 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_PROGRESSIVE_MAGIC_METER: + case RG_PROGRESSIVE_MAGIC: case RG_MAGIC_SINGLE: case RG_MAGIC_DOUBLE: return infiniteUpgrades != RO_INF_UPGRADES_OFF @@ -1045,7 +1045,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return !CHECK_DUNGEON_ITEM(DUNGEON_MAP, SCENE_SPIRIT_TEMPLE) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_SHADOW_TEMPLE_MAP: return !CHECK_DUNGEON_ITEM(DUNGEON_MAP, SCENE_SHADOW_TEMPLE) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_BOTTOM_OF_THE_WELL_MAP: + case RG_BOTW_MAP: return !CHECK_DUNGEON_ITEM(DUNGEON_MAP, SCENE_BOTTOM_OF_THE_WELL) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_ICE_CAVERN_MAP: return !CHECK_DUNGEON_ITEM(DUNGEON_MAP, SCENE_ICE_CAVERN) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; @@ -1065,7 +1065,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_SPIRIT_TEMPLE) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_SHADOW_TEMPLE_COMPASS: return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_SHADOW_TEMPLE) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_BOTTOM_OF_THE_WELL_COMPASS: + case RG_BOTW_COMPASS: return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_BOTTOM_OF_THE_WELL) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_ICE_CAVERN_COMPASS: @@ -1102,16 +1102,16 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] < SHADOW_TEMPLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_BOTTOM_OF_THE_WELL_SMALL_KEY: + case RG_BOTW_SMALL_KEY: return gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] < BOTTOM_OF_THE_WELL_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_GERUDO_TRAINING_GROUND_SMALL_KEY: + case RG_GTG_SMALL_KEY: return gSaveContext.inventory.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] < GERUDO_TRAINING_GROUND_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_GERUDO_FORTRESS_SMALL_KEY: + case RG_HIDEOUT_SMALL_KEY: return gSaveContext.inventory.dungeonKeys[SCENE_THIEVES_HIDEOUT] < GERUDO_FORTRESS_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; @@ -1119,7 +1119,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] < GANONS_CASTLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; - case RG_TREASURE_GAME_SMALL_KEY: + case RG_TCG_SMALL_KEY: return gSaveContext.inventory.dungeonKeys[SCENE_TREASURE_BOX_SHOP] < TREASURE_GAME_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; @@ -1166,8 +1166,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_PIECE_OF_HEART: case RG_HEART_CONTAINER: case RG_ICE_TRAP: - case RG_TREASURE_GAME_HEART: - case RG_TREASURE_GAME_GREEN_RUPEE: + case RG_TCG_PIECE_OF_HEART: + case RG_LOSER_GREEN_RUPEE: case RG_BUY_HEART: case RG_TRIFORCE_PIECE: default: @@ -4593,7 +4593,7 @@ CustomMessage Randomizer::GetMerchantMessage(RandomizerCheck rc, TextIDs textId, shopItemName = CustomMessage(ctx->overrides[rc].GetTrickName()); } else { auto shopItem = Rando::StaticData::RetrieveItem(shopItemGet); - shopItemName = { shopItem.GetName() }; + shopItemName = shopItem.GetName(); } if (freeTextId != TEXT_NONE && shopItemPrice == 0) { @@ -4638,7 +4638,7 @@ CustomMessage Randomizer::GetMapGetItemMessageWithHint(GetItemEntry itemEntry) { case RG_SHADOW_TEMPLE_MAP: sceneNum = SCENE_SHADOW_TEMPLE; break; - case RG_BOTTOM_OF_THE_WELL_MAP: + case RG_BOTW_MAP: sceneNum = SCENE_BOTTOM_OF_THE_WELL; break; case RG_ICE_CAVERN_MAP: @@ -5436,7 +5436,7 @@ void Randomizer::CreateCustomMessages() { "vielleicht&dafür...", "Vous obtenez une %rBouteille avec&un Esprit%w! Ça intéresserait&peut-être le vendeur d'Âme "), - GIMESSAGE(RG_GERUDO_FORTRESS_SMALL_KEY, ITEM_KEY_SMALL, "You found a %yThieves Hideout &%wSmall Key!", + GIMESSAGE(RG_HIDEOUT_SMALL_KEY, ITEM_KEY_SMALL, "You found a %yThieves Hideout &%wSmall Key!", "Du erhältst einen %rkleinen&Schlüssel%w des %yDiebesverstecks%w!", "Vous obtenez une %rPetite Clé %w&du %yRepaire des Voleurs%w!"), GIMESSAGE(RG_FOREST_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %gForest Temple &%wSmall Key!", @@ -5454,11 +5454,10 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_SHADOW_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %pShadow Temple &%wSmall Key!", "Du erhältst einen %rkleinen&Schlüssel%w des %pSchattentempels%w!", "Vous obtenez une %rPetite Clé %w&du %pTemple de l'Ombre%w!"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, ITEM_KEY_SMALL, "You found a %pBottom of the &Well %wSmall Key!", + GIMESSAGE(RG_BOTW_SMALL_KEY, ITEM_KEY_SMALL, "You found a %pBottom of the &Well %wSmall Key!", "Du erhältst einen %rkleinen&Schlüssel%w vom %pGrund des Brunnens%w!", "Vous obtenez une %rPetite Clé %w&du %pPuits%w!"), - GIMESSAGE(RG_GERUDO_TRAINING_GROUND_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %yGerudo Training &Ground %wSmall Key!", + GIMESSAGE(RG_GTG_SMALL_KEY, ITEM_KEY_SMALL, "You found a %yGerudo Training &Ground %wSmall Key!", "Du erhältst einen %rkleinen&Schlüssel%w der %yGerudo-Trainingsarena%w!", "Vous obtenez une %rPetite Clé %w&du %yGymnase Gerudo%w!"), GIMESSAGE(RG_GANONS_CASTLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %rGanon's Castle &%wSmall Key!", @@ -5476,15 +5475,13 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_MASK_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to the&%gMask Shop%w!", "Du erhältst den %rSchlüssel%w&zum %gMaskenhändler%w!", "Vous obtenez la %rClé %wde la&%gFoire aux Masques%w!"), - GIMESSAGE(RG_MARKET_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gMarket Shooting Gallery%w!", + GIMESSAGE(RG_MARKET_SHOOTING_KEY, ITEM_KEY_SMALL, "You found the key to the&%gMarket Shooting Gallery%w!", "Du erhältst den %rSchlüssel%w&zur %gSchießbude des Marktes%w!", "Vous obtenez la %rClé %wdu %gStand de&Tir de la Place du Marché%w!"), GIMESSAGE(RG_BOMBCHU_BOWLING_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBombchu Bowling Alley%w!", "Du erhältst den %rSchlüssel%w&zur %gMinenbowlingbahn%w!", "Vous obtenez la %rClé %wdu %gBowling&Teigneux%w!"), - GIMESSAGE(RG_TREASURE_CHEST_GAME_BUILDING_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gTreasure Chest Game Building%w!", + GIMESSAGE(RG_TCG_BUILDING_KEY, ITEM_KEY_SMALL, "You found the key to the&%gTreasure Chest Game Building%w!", "Du erhältst den %rSchlüssel%w&zum %gHaus der Truhenlotterie%w!", "Vous obtenez la %rClé %wdu %gJeu de la&Chasse au Trésor%w!"), GIMESSAGE(RG_BOMBCHU_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBombchu Shop%w!", @@ -5505,7 +5502,7 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_BOSS_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBoss's House%w!", "Du erhältst den %rSchlüssel%w&zum %gHaus des Chefs%w!", "Vous obtenez la %rClé %wde la %gMaison&du Chef des Ouvriers%w!"), - GIMESSAGE(RG_GRANNYS_POTION_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to&%gGranny's Potion Shop%w!", + GIMESSAGE(RG_GRANNYS_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to&%gGranny's Potion Shop%w!", "Du erhältst den %rSchlüssel%w&zu %gAsas Hexenladen%w!", "Vous obtenez la %rClé %wde&l'%gApothicaire%w!"), GIMESSAGE(RG_SKULLTULA_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gSkulltula House%w!", @@ -5516,8 +5513,7 @@ void Randomizer::CreateCustomMessages() { "Vous obtenez la %rClé %wde la %gMaison&d'Impa%w!"), GIMESSAGE(RG_WINDMILL_KEY, ITEM_KEY_SMALL, "You found the key to the&%gWindmill%w!", "Du erhältst den %rSchlüssel%w&zur %gWindmühle%w!", "Vous obtenez la %rClé %w du %gMoulin%w!"), - GIMESSAGE(RG_KAK_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gKakariko Shooting Gallery%w!", + GIMESSAGE(RG_KAK_SHOOTING_KEY, ITEM_KEY_SMALL, "You found the key to the&%gKakariko Shooting Gallery%w!", "Du erhältst den %rSchlüssel%w&zur %gSchießbude von Kakariko%w!", "Vous obtenez la %rClé %w du %gStand de&Tir de Cocorico%w!"), GIMESSAGE(RG_DAMPES_HUT_KEY, ITEM_KEY_SMALL, "You found the key to&%gDampe's Hut%w!", @@ -5536,7 +5532,7 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_FISHING_HOLE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gPond%w!", "Du erhältst den %rSchlüssel%w&zum %gFischweiher%w!", "Vous obtenez la %rClé %wde l'%gÉtang%w!"), - GIMESSAGE(RG_GERUDO_FORTRESS_KEY_RING, ITEM_KEY_SMALL, "You found a %yThieves Hideout&%wKeyring!", + GIMESSAGE(RG_HIDEOUT_KEY_RING, ITEM_KEY_SMALL, "You found a %yThieves Hideout&%wKeyring!", "Du erhältst das %rSchlüsselbund%w&des %yDiebesverstecks%w!", "Vous obtenez le trousseau de&clés du %yRepaire des Voleurs%w!"), GIMESSAGE(RG_FOREST_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %gForest Temple&%wKeyring!", @@ -5554,16 +5550,16 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_SHADOW_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %pShadow Temple&%wKeyring!", "Du erhältst das %rSchlüsselbund%w&des %pSchattentempels%w!", "Vous obtenez le trousseau de&clés du %pTemple de l'Ombre%w!"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_KEY_RING, ITEM_KEY_SMALL, "You found a %pBottom of the&Well %wKeyring!", + GIMESSAGE(RG_BOTW_KEY_RING, ITEM_KEY_SMALL, "You found a %pBottom of the&Well %wKeyring!", "Du erhältst das %rSchlüsselbund%w&vom %pGrund des Brunnens%w!", "Vous obtenez le trousseau de&clés du %pPuits%w!"), - GIMESSAGE(RG_GERUDO_TRAINING_GROUND_KEY_RING, ITEM_KEY_SMALL, "You found a %yGerudo Training&Ground %wKeyring!", + GIMESSAGE(RG_GTG_KEY_RING, ITEM_KEY_SMALL, "You found a %yGerudo Training&Ground %wKeyring!", "Du erhältst das %rSchlüsselbund%w&der %yGerudo-Trainingsarena%w!", "Vous obtenez le trousseau de&clés du %yGymnase Gerudo%w!"), GIMESSAGE(RG_GANONS_CASTLE_KEY_RING, ITEM_KEY_SMALL, "You found a %rGanon's Castle&%wKeyring!", "Du erhältst das %rSchlüsselbund%w&von %rGanons Schloß%w!", "Vous obtenez le trousseau de&clés du %rChâteau de Ganon%w!"), - GIMESSAGE(RG_TREASURE_GAME_KEY_RING, ITEM_KEY_SMALL, "You found a %rTreasure Chest Game&%wKeyring!", + GIMESSAGE(RG_TCG_KEY_RING, ITEM_KEY_SMALL, "You found a %rTreasure Chest Game&%wKeyring!", "Du erhältst das %rSchlüsselbund%w&der %rTruhenlotterie&%w!", "Vous obtenez le trousseau de&clés du %rJeu de la Chasse au Trésor%w!"), @@ -5610,7 +5606,7 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_SHADOW_TEMPLE_MAP, ITEM_DUNGEON_MAP, "You found the %pShadow Temple&%wMap![[typeHint]]", "Du erhältst die %rLabyrinth-&Karte%w des %pSchattentempels%w![[typeHint]]", "Vous obtenez la %rCarte %wdu&%pTemple de l'Ombre%w![[typeHint]]"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_MAP, ITEM_DUNGEON_MAP, "You found the %pBottom of the&Well %wMap![[typeHint]]", + GIMESSAGE(RG_BOTW_MAP, ITEM_DUNGEON_MAP, "You found the %pBottom of the&Well %wMap![[typeHint]]", "Du erhältst die %rLabyrinth-&Karte%w vom %pGrund des Brunnens%w![[typeHint]]", "Vous obtenez la %rCarte %wdu&%pPuits%w![[typeHint]]"), GIMESSAGE(RG_ICE_CAVERN_MAP, ITEM_DUNGEON_MAP, "You found the %cIce Cavern&%wMap![[typeHint]]", @@ -5641,7 +5637,7 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_SHADOW_TEMPLE_COMPASS, ITEM_COMPASS, "You found the %pShadow Temple&%wCompass!", "Du erhältst den %rKompaß%w des&%pSchattentempels%w!", "Vous obtenez la %rBoussole %wdu&%pTemple de l'Ombre%w!"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_COMPASS, ITEM_COMPASS, "You found the %pBottom of the&Well %wCompass!", + GIMESSAGE(RG_BOTW_COMPASS, ITEM_COMPASS, "You found the %pBottom of the&Well %wCompass!", "Du erhältst den %rKompaß%w vom&%pGrund des Brunnens%w!", "Vous obtenez la %rBoussole %wdu&%pPuits%w!"), GIMESSAGE(RG_ICE_CAVERN_COMPASS, ITEM_COMPASS, "You found the %cIce Cavern&%wCompass!", @@ -5974,10 +5970,10 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { mapIndex = SCENE_SHADOW_TEMPLE; numOfKeysOnKeyring = SHADOW_TEMPLE_SMALL_KEY_MAX; break; - case RG_BOTTOM_OF_THE_WELL_MAP: - case RG_BOTTOM_OF_THE_WELL_COMPASS: - case RG_BOTTOM_OF_THE_WELL_SMALL_KEY: - case RG_BOTTOM_OF_THE_WELL_KEY_RING: + case RG_BOTW_MAP: + case RG_BOTW_COMPASS: + case RG_BOTW_SMALL_KEY: + case RG_BOTW_KEY_RING: mapIndex = SCENE_BOTTOM_OF_THE_WELL; numOfKeysOnKeyring = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX; break; @@ -5988,13 +5984,13 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { case RG_GANONS_CASTLE_BOSS_KEY: mapIndex = SCENE_GANONS_TOWER; break; - case RG_GERUDO_TRAINING_GROUND_SMALL_KEY: - case RG_GERUDO_TRAINING_GROUND_KEY_RING: + case RG_GTG_SMALL_KEY: + case RG_GTG_KEY_RING: mapIndex = SCENE_GERUDO_TRAINING_GROUND; numOfKeysOnKeyring = GERUDO_TRAINING_GROUND_SMALL_KEY_MAX; break; - case RG_GERUDO_FORTRESS_SMALL_KEY: - case RG_GERUDO_FORTRESS_KEY_RING: + case RG_HIDEOUT_SMALL_KEY: + case RG_HIDEOUT_KEY_RING: mapIndex = SCENE_THIEVES_HIDEOUT; numOfKeysOnKeyring = GERUDO_FORTRESS_SMALL_KEY_MAX; break; diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 15a2fbd37..f990e721d 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -94,7 +94,7 @@ typedef enum { LOGIC_BOMBCHUS, LOGIC_PROGRESSIVE_MAGIC, LOGIC_PROGRESSIVE_OCARINA, - LOGIC_PROGRESSIVE_GIANT_KNIFE, + LOGIC_PROGRESSIVE_GORONSWORD, LOGIC_BOTTLES, LOGIC_RUTOS_LETTER, LOGIC_BOTTLE_WITH_BIG_POE, @@ -110,26 +110,6 @@ typedef enum { LOGIC_NOCTURNE_OF_SHADOW, LOGIC_REQUIEM_OF_SPIRIT, LOGIC_PRELUDE_OF_LIGHT, - LOGIC_MAP_DEKU_TREE, - LOGIC_MAP_DODONGOS_CAVERN, - LOGIC_MAP_JABU_JABUS_BELLY, - LOGIC_MAP_FOREST_TEMPLE, - LOGIC_MAP_FIRE_TEMPLE, - LOGIC_MAP_WATER_TEMPLE, - LOGIC_MAP_SPIRIT_TEMPLE, - LOGIC_MAP_SHADOW_TEMPLE, - LOGIC_MAP_BOTTOM_OF_THE_WELL, - LOGIC_MAP_ICE_CAVERN, - LOGIC_COMPASS_DEKU_TREE, - LOGIC_COMPASS_DODONGOS_CAVERN, - LOGIC_COMPASS_JABU_JABUS_BELLY, - LOGIC_COMPASS_FOREST_TEMPLE, - LOGIC_COMPASS_FIRE_TEMPLE, - LOGIC_COMPASS_WATER_TEMPLE, - LOGIC_COMPASS_SPIRIT_TEMPLE, - LOGIC_COMPASS_SHADOW_TEMPLE, - LOGIC_COMPASS_BOTTOM_OF_THE_WELL, - LOGIC_COMPASS_ICE_CAVERN, LOGIC_BOSS_KEY_FOREST_TEMPLE, LOGIC_BOSS_KEY_FIRE_TEMPLE, LOGIC_BOSS_KEY_WATER_TEMPLE, @@ -141,30 +121,30 @@ typedef enum { LOGIC_WATER_TEMPLE_KEYS, LOGIC_SPIRIT_TEMPLE_KEYS, LOGIC_SHADOW_TEMPLE_KEYS, - LOGIC_BOTTOM_OF_THE_WELL_KEYS, - LOGIC_GERUDO_TRAINING_GROUND_KEYS, - LOGIC_GERUDO_FORTRESS_KEYS, + LOGIC_BOTW_KEYS, + LOGIC_GTG_KEYS, + LOGIC_HIDEOUT_KEYS, LOGIC_GANONS_CASTLE_KEYS, - LOGIC_TREASURE_GAME_KEYS, + LOGIC_TCG_KEYS, LOGIC_SKELETON_KEY, LOGIC_GUARD_HOUSE_KEY, LOGIC_MARKET_BAZAAR_KEY, LOGIC_MARKET_POTION_SHOP_KEY, LOGIC_MASK_SHOP_KEY, - LOGIC_MARKET_SHOOTING_GALLERY_KEY, + LOGIC_MARKET_SHOOTING_KEY, LOGIC_BOMBCHU_BOWLING_KEY, - LOGIC_TREASURE_CHEST_GAME_BUILDING_KEY, + LOGIC_TCG_BUILDING_KEY, LOGIC_BOMBCHU_SHOP_KEY, LOGIC_RICHARDS_HOUSE_KEY, LOGIC_ALLEY_HOUSE_KEY, LOGIC_KAK_BAZAAR_KEY, LOGIC_KAK_POTION_SHOP_KEY, LOGIC_BOSS_HOUSE_KEY, - LOGIC_GRANNYS_POTION_SHOP_KEY, + LOGIC_GRANNYS_SHOP_KEY, LOGIC_SKULLTULA_HOUSE_KEY, LOGIC_IMPAS_HOUSE_KEY, LOGIC_WINDMILL_KEY, - LOGIC_KAK_SHOOTING_GALLERY_KEY, + LOGIC_KAK_SHOOTING_KEY, LOGIC_DAMPES_HUT_KEY, LOGIC_TALONS_HOUSE_KEY, LOGIC_STABLES_KEY, @@ -194,15 +174,15 @@ typedef enum { LOGIC_BLUE_FIRE_ACCESS, LOGIC_BUGS_ACCESS, LOGIC_FAIRY_ACCESS, - LOGIC_CAN_SUMMON_GOHMA, - LOGIC_CAN_SUMMON_KINGDODONGO, - LOGIC_CAN_SUMMON_BARINADE, - LOGIC_CAN_SUMMON_PHANTOMGANON, - LOGIC_CAN_SUMMON_VOLVAGIA, - LOGIC_CAN_SUMMON_MORPHA, - LOGIC_CAN_SUMMON_BONGOBONGO, - LOGIC_CAN_SUMMON_TWINROVA, - LOGIC_CAN_SUMMON_GANON, + LOGIC_GOHMA_SOUL, + LOGIC_KING_DODONGO_SOUL, + LOGIC_BARINADE_SOUL, + LOGIC_PHANTOM_GANON_SOUL, + LOGIC_VOLVAGIA_SOUL, + LOGIC_MORPHA_SOUL, + LOGIC_BONGO_BONGO_SOUL, + LOGIC_TWINROVA_SOUL, + LOGIC_GANON_SOUL, LOGIC_FISHING_POLE, LOGIC_OCARINA_A_BUTTON, LOGIC_OCARINA_C_UP_BUTTON, @@ -3838,10 +3818,10 @@ typedef enum { RG_PROGRESSIVE_SLINGSHOT, RG_PROGRESSIVE_WALLET, RG_PROGRESSIVE_SCALE, - RG_PROGRESSIVE_NUT_UPGRADE, - RG_PROGRESSIVE_STICK_UPGRADE, + RG_PROGRESSIVE_NUT_BAG, + RG_PROGRESSIVE_STICK_BAG, RG_PROGRESSIVE_BOMBCHUS, - RG_PROGRESSIVE_MAGIC_METER, + RG_PROGRESSIVE_MAGIC, RG_MAGIC_SINGLE, // Added for refactor of GetItemEntries RG_MAGIC_DOUBLE, // Added for refactor of GetItemEntries RG_PROGRESSIVE_OCARINA, @@ -3878,7 +3858,7 @@ typedef enum { RG_WATER_TEMPLE_MAP, RG_SPIRIT_TEMPLE_MAP, RG_SHADOW_TEMPLE_MAP, - RG_BOTTOM_OF_THE_WELL_MAP, + RG_BOTW_MAP, RG_ICE_CAVERN_MAP, RG_DEKU_TREE_COMPASS, RG_DODONGOS_CAVERN_COMPASS, @@ -3888,7 +3868,7 @@ typedef enum { RG_WATER_TEMPLE_COMPASS, RG_SPIRIT_TEMPLE_COMPASS, RG_SHADOW_TEMPLE_COMPASS, - RG_BOTTOM_OF_THE_WELL_COMPASS, + RG_BOTW_COMPASS, RG_ICE_CAVERN_COMPASS, RG_FOREST_TEMPLE_BOSS_KEY, RG_FIRE_TEMPLE_BOSS_KEY, @@ -3901,21 +3881,21 @@ typedef enum { RG_WATER_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_SMALL_KEY, - RG_BOTTOM_OF_THE_WELL_SMALL_KEY, - RG_GERUDO_TRAINING_GROUND_SMALL_KEY, - RG_GERUDO_FORTRESS_SMALL_KEY, + RG_BOTW_SMALL_KEY, + RG_GTG_SMALL_KEY, + RG_HIDEOUT_SMALL_KEY, RG_GANONS_CASTLE_SMALL_KEY, - RG_TREASURE_GAME_SMALL_KEY, + RG_TCG_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_KEY_RING, RG_WATER_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_KEY_RING, - RG_BOTTOM_OF_THE_WELL_KEY_RING, - RG_GERUDO_TRAINING_GROUND_KEY_RING, - RG_GERUDO_FORTRESS_KEY_RING, + RG_BOTW_KEY_RING, + RG_GTG_KEY_RING, + RG_HIDEOUT_KEY_RING, RG_GANONS_CASTLE_KEY_RING, - RG_TREASURE_GAME_KEY_RING, + RG_TCG_KEY_RING, RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE, @@ -3953,8 +3933,8 @@ typedef enum { RG_RED_POTION_REFILL, RG_GREEN_POTION_REFILL, RG_BLUE_POTION_REFILL, - RG_TREASURE_GAME_HEART, - RG_TREASURE_GAME_GREEN_RUPEE, + RG_TCG_PIECE_OF_HEART, + RG_LOSER_GREEN_RUPEE, RG_BUY_DEKU_NUTS_5, RG_BUY_ARROWS_30, RG_BUY_ARROWS_50, @@ -4049,20 +4029,20 @@ typedef enum { RG_MARKET_BAZAAR_KEY, RG_MARKET_POTION_SHOP_KEY, RG_MASK_SHOP_KEY, - RG_MARKET_SHOOTING_GALLERY_KEY, + RG_MARKET_SHOOTING_KEY, RG_BOMBCHU_BOWLING_KEY, - RG_TREASURE_CHEST_GAME_BUILDING_KEY, + RG_TCG_BUILDING_KEY, RG_BOMBCHU_SHOP_KEY, RG_RICHARDS_HOUSE_KEY, RG_ALLEY_HOUSE_KEY, RG_KAK_BAZAAR_KEY, RG_KAK_POTION_SHOP_KEY, RG_BOSS_HOUSE_KEY, - RG_GRANNYS_POTION_SHOP_KEY, + RG_GRANNYS_SHOP_KEY, RG_SKULLTULA_HOUSE_KEY, RG_IMPAS_HOUSE_KEY, RG_WINDMILL_KEY, - RG_KAK_SHOOTING_GALLERY_KEY, + RG_KAK_SHOOTING_KEY, RG_DAMPES_HUT_KEY, RG_TALONS_HOUSE_KEY, RG_STABLES_KEY, @@ -5046,7 +5026,7 @@ typedef enum { RHT_WATER_TEMPLE_MAP, RHT_SPIRIT_TEMPLE_MAP, RHT_SHADOW_TEMPLE_MAP, - RHT_BOTTOM_OF_THE_WELL_MAP, + RHT_BOTW_MAP, RHT_ICE_CAVERN_MAP, RHT_DEKU_TREE_COMPASS, RHT_DODONGOS_CAVERN_COMPASS, @@ -5056,7 +5036,7 @@ typedef enum { RHT_WATER_TEMPLE_COMPASS, RHT_SPIRIT_TEMPLE_COMPASS, RHT_SHADOW_TEMPLE_COMPASS, - RHT_BOTTOM_OF_THE_WELL_COMPASS, + RHT_BOTW_COMPASS, RHT_ICE_CAVERN_COMPASS, RHT_FOREST_TEMPLE_BOSS_KEY, RHT_FIRE_TEMPLE_BOSS_KEY, @@ -5069,21 +5049,21 @@ typedef enum { RHT_WATER_TEMPLE_SMALL_KEY, RHT_SPIRIT_TEMPLE_SMALL_KEY, RHT_SHADOW_TEMPLE_SMALL_KEY, - RHT_BOTTOM_OF_THE_WELL_SMALL_KEY, - RHT_GERUDO_TRAINING_GROUND_SMALL_KEY, - RHT_GERUDO_FORTRESS_SMALL_KEY, + RHT_BOTW_SMALL_KEY, + RHT_GTG_SMALL_KEY, + RHT_HIDEOUT_SMALL_KEY, RHT_GANONS_CASTLE_SMALL_KEY, - RHT_TREASURE_GAME_SMALL_KEY, + RHT_TCG_SMALL_KEY, RHT_FOREST_TEMPLE_KEY_RING, RHT_FIRE_TEMPLE_KEY_RING, RHT_WATER_TEMPLE_KEY_RING, RHT_SPIRIT_TEMPLE_KEY_RING, RHT_SHADOW_TEMPLE_KEY_RING, - RHT_BOTTOM_OF_THE_WELL_KEY_RING, - RHT_GERUDO_TRAINING_GROUND_KEY_RING, - RHT_GERUDO_FORTRESS_KEY_RING, + RHT_BOTW_KEY_RING, + RHT_GTG_KEY_RING, + RHT_HIDEOUT_KEY_RING, RHT_GANONS_CASTLE_KEY_RING, - RHT_TREASURE_GAME_KEY_RING, + RHT_TCG_KEY_RING, RHT_KOKIRI_EMERALD, RHT_GORON_RUBY, RHT_ZORA_SAPPHIRE, @@ -5104,6 +5084,7 @@ typedef enum { RHT_HEART_CONTAINER, RHT_ICE_TRAP, RHT_MILK, + RHT_FISH, RHT_BOMBS_5, RHT_BOMBS_10, RHT_BOMBS_20, @@ -5120,8 +5101,8 @@ typedef enum { RHT_RED_POTION_REFILL, RHT_GREEN_POTION_REFILL, RHT_BLUE_POTION_REFILL, - RHT_TREASURE_GAME_HEART, - RHT_TREASURE_GAME_GREEN_RUPEE, + RHT_TCG_PIECE_OF_HEART, + RHT_LOSER_GREEN_RUPEE, RHT_BUY_DEKU_NUTS_5, RHT_BUY_ARROWS_30, RHT_BUY_ARROWS_50, @@ -5152,7 +5133,6 @@ typedef enum { RHT_BUY_BOMBS_535, RHT_BUY_RED_POTION_40, RHT_BUY_RED_POTION_50, - RHT_TRIFORCE, RHT_BOMBCHU_BAG, RHT_QUIVER_INF, RHT_BOMB_BAG_INF, @@ -5162,9 +5142,8 @@ typedef enum { RHT_MAGIC_INF, RHT_BOMBCHU_INF, RHT_WALLET_INF, + RHT_TRIFORCE, RHT_HINT, - RHT_TYCOON_WALLET, - RHT_CHILD_WALLET, RHT_HOOKSHOT, RHT_LONGSHOT, RHT_FAIRY_OCARINA, @@ -5181,12 +5160,17 @@ typedef enum { RHT_GORONS_BRACELET, RHT_SILVER_GAUNTLETS, RHT_GOLDEN_GAUNTLETS, + RHT_BRONZE_SCALE, RHT_SILVER_SCALE, RHT_GOLDEN_SCALE, + RHT_CHILD_WALLET, RHT_ADULT_WALLET, RHT_GIANT_WALLET, + RHT_TYCOON_WALLET, + RHT_DEKU_NUT_BAG, RHT_DEKU_NUT_CAPACITY_30, RHT_DEKU_NUT_CAPACITY_40, + RHT_DEKU_STICK_BAG, RHT_DEKU_STICK_CAPACITY_20, RHT_DEKU_STICK_CAPACITY_30, RHT_TRIFORCE_PIECE, @@ -5204,11 +5188,33 @@ typedef enum { RHT_OCARINA_C_DOWN_BUTTON, RHT_OCARINA_C_LEFT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, - RHT_BRONZE_SCALE, RHT_FISHING_POLE, RHT_SKELETON_KEY, RHT_EPONA, - RHT_OVERWORLD_KEY, + RHT_GUARD_HOUSE_KEY, + RHT_MARKET_BAZAAR_KEY, + RHT_MARKET_POTION_SHOP_KEY, + RHT_MASK_SHOP_KEY, + RHT_MARKET_SHOOTING_KEY, + RHT_BOMBCHU_BOWLING_KEY, + RHT_TCG_BUILDING_KEY, + RHT_BOMBCHU_SHOP_KEY, + RHT_RICHARDS_HOUSE_KEY, + RHT_ALLEY_HOUSE_KEY, + RHT_KAK_BAZAAR_KEY, + RHT_KAK_POTION_SHOP_KEY, + RHT_BOSS_HOUSE_KEY, + RHT_GRANNYS_SHOP_KEY, + RHT_SKULLTULA_HOUSE_KEY, + RHT_IMPAS_HOUSE_KEY, + RHT_WINDMILL_KEY, + RHT_KAK_SHOOTING_KEY, + RHT_DAMPES_HUT_KEY, + RHT_TALONS_HOUSE_KEY, + RHT_STABLES_KEY, + RHT_BACK_TOWER_KEY, + RHT_HYLIA_LAB_KEY, + RHT_FISHING_HOLE_KEY, RHT_HINT_MYSTERIOUS, RHT_MYSTERIOUS_ITEM, RHT_MYSTERIOUS_ITEM_CAPITAL, diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index d6334b6a0..6a6ceb5bc 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -328,7 +328,7 @@ std::map MapRGtoRandomizerCheckArea = { { RG_WATER_TEMPLE_MAP, RCAREA_WATER_TEMPLE }, { RG_SPIRIT_TEMPLE_MAP, RCAREA_SPIRIT_TEMPLE }, { RG_SHADOW_TEMPLE_MAP, RCAREA_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_MAP, RCAREA_BOTTOM_OF_THE_WELL }, + { RG_BOTW_MAP, RCAREA_BOTTOM_OF_THE_WELL }, { RG_ICE_CAVERN_MAP, RCAREA_ICE_CAVERN } }; @@ -1253,14 +1253,14 @@ bool ShouldShowCheck(RandomizerCheck check) { if (itemLoc->HasObtained() || itemLoc->GetCheckStatus() == RCSHOW_SCUMMED || (!mystery && (itemLoc->GetCheckStatus() == RCSHOW_IDENTIFIED || itemLoc->GetCheckStatus() == RCSHOW_SEEN) && itemLoc->GetPlacedRandomizerGet() != RG_ICE_TRAP)) { - search += " " + itemLoc->GetPlacedItemName().GetForLanguage(gSaveContext.language); + search += " " + itemLoc->GetPlacedItemName().GetForCurrentLanguage(MF_RAW); } else if (itemLoc->GetCheckStatus() == RCSHOW_IDENTIFIED && !mystery) { search += OTRGlobals::Instance->gRandoContext->overrides[check].GetTrickName().GetForLanguage(gSaveContext.language); } else if (itemLoc->GetCheckStatus() == RCSHOW_SEEN && !mystery) { search += Rando::StaticData::RetrieveItem(OTRGlobals::Instance->gRandoContext->overrides[check].LooksLike()) .GetName() - .GetForLanguage(gSaveContext.language); + .GetForCurrentLanguage(MF_RAW); } return (IsVisibleInCheckTracker(check) && (checkSearch.Filters.Size == 0 || checkSearch.PassFilter(search.c_str()))); @@ -1856,15 +1856,12 @@ void DrawLocation(RandomizerCheck rc) { case RCSHOW_COLLECTED: case RCSHOW_SCUMMED: if (IS_RANDO) { - txt = itemLoc->GetPlacedItem().GetName().GetForLanguage(gSaveContext.language); + txt = itemLoc->GetPlacedItem().GetName().GetForCurrentLanguage(MF_RAW); } else { if (IsHeartPiece((GetItemID)Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetItemID())) { - if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER || - gSaveContext.language == LANGUAGE_JPN) { - txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().english; - } else if (gSaveContext.language == LANGUAGE_FRA) { - txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().french; - } + txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()) + .GetName() + .GetForCurrentLanguage(MF_RAW); } } break; @@ -1879,10 +1876,10 @@ void DrawLocation(RandomizerCheck rc) { txt = Rando::StaticData::RetrieveItem( OTRGlobals::Instance->gRandoContext->overrides[rc].LooksLike()) .GetName() - .GetForLanguage(gSaveContext.language); + .GetForCurrentLanguage(MF_RAW); } } else if (!mystery) { - txt = itemLoc->GetPlacedItem().GetName().GetForLanguage(gSaveContext.language); + txt = itemLoc->GetPlacedItem().GetName().GetForCurrentLanguage(MF_RAW); } if (IsVisibleInCheckTracker(rc) && status == RCSHOW_IDENTIFIED && !mystery) { auto price = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->GetPrice(); @@ -1892,12 +1889,9 @@ void DrawLocation(RandomizerCheck rc) { } } else { if (IsHeartPiece((GetItemID)Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetItemID())) { - if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER || - gSaveContext.language == LANGUAGE_JPN) { - txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().english; - } else if (gSaveContext.language == LANGUAGE_FRA) { - txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().french; - } + txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()) + .GetName() + .GetForCurrentLanguage(MF_RAW); } } break; diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index fcace1017..e7fe4f747 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -137,20 +137,20 @@ std::vector overworldKeyItems = { ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_BAZAAR_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_POTION_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_MASK_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_SHOOTING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_BOMBCHU_BOWLING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_TREASURE_CHEST_GAME_BUILDING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_TCG_BUILDING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_BOMBCHU_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_RICHARDS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_ALLEY_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_BAZAAR_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_POTION_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_BOSS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GRANNYS_POTION_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GRANNYS_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SKULLTULA_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_IMPAS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_WINDMILL_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_SHOOTING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_DAMPES_HUT_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_TALONS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_STABLES_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), @@ -234,30 +234,14 @@ std::map itemTrackerOcarinaButtonShortNames = { }; std::map itemTrackerOverworldKeyShortNames = { - { RG_GUARD_HOUSE_KEY, "GUARD" }, - { RG_MARKET_BAZAAR_KEY, "MKBAZ" }, - { RG_MARKET_POTION_SHOP_KEY, "MKPOT" }, - { RG_MASK_SHOP_KEY, "MASK" }, - { RG_MARKET_SHOOTING_GALLERY_KEY, "MKSHO" }, - { RG_BOMBCHU_BOWLING_KEY, "BOWL" }, - { RG_TREASURE_CHEST_GAME_BUILDING_KEY, "TREASU" }, - { RG_BOMBCHU_SHOP_KEY, "CHUSHO" }, - { RG_RICHARDS_HOUSE_KEY, "RICH" }, - { RG_ALLEY_HOUSE_KEY, "ALLEY" }, - { RG_KAK_BAZAAR_KEY, "KAKBAZ" }, - { RG_KAK_POTION_SHOP_KEY, "KAKPO" }, - { RG_BOSS_HOUSE_KEY, "BOSS" }, - { RG_GRANNYS_POTION_SHOP_KEY, "GRANNY" }, - { RG_SKULLTULA_HOUSE_KEY, "SKULL" }, - { RG_IMPAS_HOUSE_KEY, "IMPAS" }, - { RG_WINDMILL_KEY, "WIND" }, - { RG_KAK_SHOOTING_GALLERY_KEY, "KAKSHO" }, - { RG_DAMPES_HUT_KEY, "DAMPES" }, - { RG_TALONS_HOUSE_KEY, "TALONS" }, - { RG_STABLES_KEY, "STABLE" }, - { RG_BACK_TOWER_KEY, "TOWER" }, - { RG_HYLIA_LAB_KEY, "LAB" }, - { RG_FISHING_HOLE_KEY, "FISH" }, + { RG_GUARD_HOUSE_KEY, "GUARD" }, { RG_MARKET_BAZAAR_KEY, "MKBAZ" }, { RG_MARKET_POTION_SHOP_KEY, "MKPOT" }, + { RG_MASK_SHOP_KEY, "MASK" }, { RG_MARKET_SHOOTING_KEY, "MKSHO" }, { RG_BOMBCHU_BOWLING_KEY, "BOWL" }, + { RG_TCG_BUILDING_KEY, "TREASU" }, { RG_BOMBCHU_SHOP_KEY, "CHUSHO" }, { RG_RICHARDS_HOUSE_KEY, "RICH" }, + { RG_ALLEY_HOUSE_KEY, "ALLEY" }, { RG_KAK_BAZAAR_KEY, "KAKBAZ" }, { RG_KAK_POTION_SHOP_KEY, "KAKPO" }, + { RG_BOSS_HOUSE_KEY, "BOSS" }, { RG_GRANNYS_SHOP_KEY, "GRANNY" }, { RG_SKULLTULA_HOUSE_KEY, "SKULL" }, + { RG_IMPAS_HOUSE_KEY, "IMPAS" }, { RG_WINDMILL_KEY, "WIND" }, { RG_KAK_SHOOTING_KEY, "KAKSHO" }, + { RG_DAMPES_HUT_KEY, "DAMPES" }, { RG_TALONS_HOUSE_KEY, "TALONS" }, { RG_STABLES_KEY, "STABLE" }, + { RG_BACK_TOWER_KEY, "TOWER" }, { RG_HYLIA_LAB_KEY, "LAB" }, { RG_FISHING_HOLE_KEY, "FISH" }, }; std::vector dungeonItems = {}; @@ -716,7 +700,7 @@ void DrawItem(ItemTrackerItem item) { bool hasItem = actualItemId != ITEM_NONE; std::string itemName = ""; - // Hack fix as RG_MARKET_SHOOTING_GALLERY_KEY is RandomizerGet #255 which collides + // Hack fix as RG_MARKET_SHOOTING_KEY is RandomizerGet #255 which collides // with ITEM_NONE (ItemId #255) due to the lack of a modid to separate them if (item.name != "ITEM_KEY_SMALL" && item.id == ITEM_NONE) { return; @@ -863,7 +847,7 @@ void DrawItem(ItemTrackerItem item) { hasItem = Flags_GetRandomizerInf(RAND_INF_MASK_SHOP_KEY_OBTAINED); itemName = "Mask Shop Key"; break; - case RG_MARKET_SHOOTING_GALLERY_KEY: + case RG_MARKET_SHOOTING_KEY: actualItemId = item.id; hasItem = Flags_GetRandomizerInf(RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED); itemName = "Market Shooting Gallery Key"; @@ -873,7 +857,7 @@ void DrawItem(ItemTrackerItem item) { hasItem = Flags_GetRandomizerInf(RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED); itemName = "Bombchu Bowling Key"; break; - case RG_TREASURE_CHEST_GAME_BUILDING_KEY: + case RG_TCG_BUILDING_KEY: actualItemId = item.id; hasItem = Flags_GetRandomizerInf(RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED); itemName = "Treasure Chest Game Building Key"; @@ -908,7 +892,7 @@ void DrawItem(ItemTrackerItem item) { hasItem = Flags_GetRandomizerInf(RAND_INF_BOSS_HOUSE_KEY_OBTAINED); itemName = "Boss House Key"; break; - case RG_GRANNYS_POTION_SHOP_KEY: + case RG_GRANNYS_SHOP_KEY: actualItemId = item.id; hasItem = Flags_GetRandomizerInf(RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED); itemName = "Granny's Potion Shop Key"; @@ -928,7 +912,7 @@ void DrawItem(ItemTrackerItem item) { hasItem = Flags_GetRandomizerInf(RAND_INF_WINDMILL_KEY_OBTAINED); itemName = "Windmill Key"; break; - case RG_KAK_SHOOTING_GALLERY_KEY: + case RG_KAK_SHOOTING_KEY: actualItemId = item.id; hasItem = Flags_GetRandomizerInf(RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED); itemName = "Kak Shooting Gallery Key"; diff --git a/soh/soh/Enhancements/randomizer/static_data.cpp b/soh/soh/Enhancements/randomizer/static_data.cpp index 448b33819..77ba2dd3a 100644 --- a/soh/soh/Enhancements/randomizer/static_data.cpp +++ b/soh/soh/Enhancements/randomizer/static_data.cpp @@ -193,7 +193,7 @@ std::unordered_map StaticData::staticHintInfoMap {RH_SHEIK_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SHEIK_HINT_LA_ONLY}, RSK_SHEIK_LA_HINT, true, {}, {RG_LIGHT_ARROWS}, {RC_SHEIK_HINT_GC, RC_SHEIK_HINT_MQ_GC}, true)}, {RH_DAMPES_DIARY, StaticHintInfo(HINT_TYPE_AREA, {RHT_DAMPE_DIARY}, RSK_DAMPES_DIARY_HINT, true, {}, {RG_PROGRESSIVE_HOOKSHOT}, {RC_DAMPE_HINT})}, {RH_GREG_RUPEE, StaticHintInfo(HINT_TYPE_AREA, {RHT_GREG_HINT}, RSK_GREG_HINT, true, {}, {RG_GREG_RUPEE}, {RC_GREG_HINT})}, - {RH_SARIA_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SARIA_TALK_HINT, RHT_SARIA_SONG_HINT}, RSK_SARIA_HINT, true, {}, {RG_PROGRESSIVE_MAGIC_METER}, {RC_SARIA_SONG_HINT, RC_SONG_FROM_SARIA}, true)}, + {RH_SARIA_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SARIA_TALK_HINT, RHT_SARIA_SONG_HINT}, RSK_SARIA_HINT, true, {}, {RG_PROGRESSIVE_MAGIC}, {RC_SARIA_SONG_HINT, RC_SONG_FROM_SARIA}, true)}, {RH_LOACH_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_LOACH_HINT}, RSK_LOACH_HINT, true, {RC_LH_HYRULE_LOACH})}, {RH_FISHING_POLE, StaticHintInfo(HINT_TYPE_AREA, {RHT_FISHING_POLE_HINT}, RSK_FISHING_POLE_HINT, true, {}, {RG_FISHING_POLE}, {RC_FISHING_POLE_HINT}, true)}, {RH_HBA_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_HBA_HINT_SIGN, RHT_HBA_HINT_NOT_ON_HORSE, RHT_HBA_HINT_INITIAL, RHT_HBA_HINT_HAVE_1000}, RSK_HBA_HINT, true, {RC_GF_HBA_1000_POINTS, RC_GF_HBA_1500_POINTS})}, @@ -221,7 +221,7 @@ StaticData::PopulateTranslationMap(std::unordered_map i std::vector strings = message.GetAllMessages(); for (std::string string : strings) { if (output.contains(string)) { - if (output[string] != key) { + if (output[string] != key && string != "") { // RANDOTODO should this cause an error of some kind? SPDLOG_DEBUG("\tREPEATED STRING IN " + message.GetEnglish(MF_CLEAN) + "\n\n"); } @@ -240,8 +240,7 @@ StaticData::PopulateTranslationMap(std::unordered_map strings = hintTextTable[text].GetClear().GetAllMessages(); for (std::string string : strings) { if (output.contains(string)) { - if (output[string] != key) { - // RANDOTODO should this cause an error of some kind? + if (output[string] != key && string != "") { SPDLOG_DEBUG("\tREPEATED STRING WITH " + string + "\n\n"); } } else { diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 7bdec17c1..394fd140c 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -22,6 +22,16 @@ class StaticData { public: static void InitItemTable(); + static void AddItem(RandomizerGet randomizerGet_, ItemType type_, int16_t getItemId_, LogicVal logicVal_, + RandomizerHintTextKey hintKey_, uint16_t itemId_, uint16_t objectId_, uint16_t gid_, + uint16_t textId_, uint16_t field_, int16_t chestAnimation_, GetItemCategory category_, + uint16_t modIndex_, uint16_t price_ = 0, CustomDrawFunc drawfunc_ = NULL); + static void AddItem(RandomizerGet randomizerGet_, ItemType type_, int16_t getItemId_, LogicVal logicVal_, + RandomizerHintTextKey hintKey_, uint16_t objectId_, uint16_t gid_, uint16_t textId_, + uint16_t field_, int16_t chestAnimation_, GetItemCategory category_, uint16_t modIndex_, + uint16_t price_ = 0, CustomDrawFunc drawfunc_ = NULL); + static void AddItem(RandomizerGet randomizerGet_, ItemType type_, int16_t getItemId_, LogicVal logicVal_, + RandomizerHintTextKey hintKey_, GetItemCategory category_, uint16_t price_ = 0); static void HintTable_Init(); static void HintTable_Init_Item(); static void HintTable_Init_Exclude_Overworld(); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index bc9b3106e..700d45b1f 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -431,8 +431,6 @@ void OTRGlobals::Initialize() { gRandoContext->InitStaticData(); gRandoContext = Rando::Context::CreateInstance(); Rando::Settings::GetInstance()->AssignContext(gRandoContext); - Rando::StaticData::InitItemTable(); // RANDOTODO make this not rely on context's logic so it can be initialised in - // InitStaticData Rando::Settings::GetInstance()->CreateOptions(); gRandomizer = std::make_shared(); @@ -733,7 +731,7 @@ extern "C" void VanillaItemTable_Init() { GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ARROW_FIRE), GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ARROW_ICE), GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ARROW_LIGHT), - GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SKULLTULA_TOKEN, MOD_NONE, GI_SKULL_TOKEN), + GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SKULL_TOKEN, MOD_NONE, GI_SKULL_TOKEN), GET_ITEM(ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_DINS_FIRE), GET_ITEM(ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_FARORES_WIND), GET_ITEM(ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_NAYRUS_LOVE), @@ -2285,7 +2283,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { } } } else if (textId == TEXT_ITEM_KEY_SMALL) { - if (player->getItemEntry.getItemId == RG_GERUDO_FORTRESS_SMALL_KEY) { + if (player->getItemEntry.getItemId == RG_HIDEOUT_SMALL_KEY) { if (Randomizer_GetSettingValue(RSK_GERUDO_KEYS) != RO_GERUDO_KEYS_VANILLA) { messageEntry = Randomizer_GetCustomGetItemMessage(player); } diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 4b830f846..c0d7d159f 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -337,8 +337,8 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f std::vector items = hint->GetHintedItems(); SaveManager::Instance->SaveArray("items", items.size(), [&](size_t i) { - SaveManager::Instance->SaveData("", - Rando::StaticData::GetItemTable()[items[i]].GetName().GetEnglish()); + SaveManager::Instance->SaveData( + "", Rando::StaticData::GetItemTable()[items[i]].GetName().GetEnglish(MF_RAW)); }); std::vector itemNamesChosen = hint->GetItemNamesChosen(); diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c index 9a3a8fb77..2d34eed59 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -611,7 +611,7 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { switch (getItemCategory) { case ITEM_CATEGORY_JUNK: case ITEM_CATEGORY_SMALL_KEY: - case ITEM_CATEGORY_SKULLTULA_TOKEN: + case ITEM_CATEGORY_SKULL_TOKEN: Actor_SetScale(&this->dyna.actor, 0.005f); Actor_SetFocus(&this->dyna.actor, 20.0f); break; @@ -643,7 +643,7 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { this->boxBodyDL = gGoldTreasureChestChestFrontDL; this->boxLidDL = gGoldTreasureChestChestSideAndLidDL; break; - case ITEM_CATEGORY_SKULLTULA_TOKEN: + case ITEM_CATEGORY_SKULL_TOKEN: this->boxBodyDL = gSkullTreasureChestChestFrontDL; this->boxLidDL = gSkullTreasureChestChestSideAndLidDL; break;