diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 8df83359f..3e6a3e7b8 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -1026,17 +1026,55 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } if (item00->itemEntry.modIndex == MOD_NONE) { + std::string message; + + switch (gSaveContext.language) { + case LANGUAGE_FRA: + message = "Vous obtenez: "; + break; + case LANGUAGE_GER: + message = "Du hast: "; + break; + case LANGUAGE_ENG: + default: + message = "You found "; + break; + } + Notification::Emit({ .itemIcon = GetTextureForItemId(item00->itemEntry.itemId), - .message = "You found ", + .message = message, .suffix = SohUtils::GetItemName(item00->itemEntry.itemId), }); } else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) { + std::string message; + std::string itemName; + + switch (gSaveContext.language) { + case LANGUAGE_FRA: + message = "Vous obtenez: "; + itemName = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId) + .GetName() + .french; + break; + case LANGUAGE_GER: + message = "Du hast: "; + itemName = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId) + .GetName() + .german; + break; + case LANGUAGE_ENG: + default: + message = "You found "; + itemName = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId) + .GetName() + .english; + break; + } + Notification::Emit({ - .message = "You found ", - .suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId) - .GetName() - .english, + .message = message, + .suffix = itemName, }); } diff --git a/soh/soh/util.cpp b/soh/soh/util.cpp index a991c35ca..0c0a8661d 100644 --- a/soh/soh/util.cpp +++ b/soh/soh/util.cpp @@ -7,6 +7,7 @@ #include #include #include "Enhancements/randomizer/randomizerTypes.h" +#include std::vector sceneNames = { "Inside the Deku Tree", @@ -121,7 +122,7 @@ std::vector sceneNames = { "Treasure Chest Room", }; -std::vector itemNames = { +std::vector itemNamesEng = { "Deku Stick", "Deku Nut", "Bomb", @@ -280,7 +281,327 @@ std::vector itemNames = { "Deku Nut Upgrade (40)", }; -std::vector questItemNames = { +std::vector itemNamesFra = { + "Bâton Mojo", + "Noix Mojo", + "Bombe", + "Arc des Fées", + "Flèche de Feu", + "Feu de Din", + "Lance-Pierre des Fées", + "Ocarina des Fées", + "Ocarina du Temps", + "Missile Teigneux", + "Grappin", + "Super Grappin", + "Flèche de Glace", + "Vent de Farore", + "Boomerang", + "Loupe de Vérité", + "Haricot Magique", + "Marteau des Titans", + "Flèche de Lumière", + "Amour de Nayru", + "Bouteille Vide", + "Potion Rouge", + "Potion Verte", + "Potion Bleue", + "Fée en Bouteille", + "Poisson", + "Lait Lon Lon et Bouteille", + "Lettre de Ruto", + "Flamme Bleue", + "Insectes", + "Grand Spectre", + "Lait Lon Lon (Demi)", + "Spectre", + "Oeuf Suspect", + "Poule", + "Lettre de Zelda", + "Masque Pikachu", + "Masque de Mort", + "Masque du Fantôme", + "Capuche de Lapin", + "Masque Goron", + "Masque Zora", + "Masque Gerudo", + "Masque de Vérité", + "ÉPUISÉ", + "Oeuf de Poche", + "Cocotte de Poche", + "Cocorico Bleu", + "Champignon Suspect", + "Potion Suspecte", + "Scie de Charpentier", + "Épée Goron (Cassée)", + "Ordonnance", + "Grenouille Oeil", + "Gouttes pour les Yeux", + "Certificat", + "Arc des Fées & Flèche de Feu", + "Arc des Fées & Flèche de Glace", + "Arc des Fées & Flèche de Lumière", + "Épée Kokiri", + "Épée de Légende", + "Lame des Géants & Épée Biggoron", + "Bouclier Mojo", + "Bouclier Hylien", + "Bouclier Miroir", + "Tunique Kokiri", + "Tunique Goron", + "Tunique Zora", + "Bottes Kokiri", + "Bottes de Plomb", + "Bottes des Airs", + "Sac de Graines (30)", + "Sac de Graines (40)", + "Sac de Graines (50)", + "Carquois (30)", + "Grand Carquois (40)", + "Très Grand Carquois (50)", + "Sac de Bombes (20)", + "Grand Sac de Bombes (30)", + "Très Grand Sac de Bombes (40)", + "Bracelet Goron", + "Gantelets d'Argent", + "Gantelets d'Or", + "Écaille d'Argent", + "Écaille d'Or", + "Lame des Géants (Cassée)", + "Bourse d'Adulte", + "Bourse de Géant", + "Graines Mojo (5)", + "Canne à Pêche", + "Menuet des Bois", + "Boléro du Feu", + "Sérénade de l'Eau", + "Requiem de l'Esprit", + "Nocturne de l'Ombre", + "Prélude de la Lumière", + "Berceuse de Zelda", + "Chanson d'Epona", + "Chanson de Saria", + "Chant du Soleil", + "Chant du Temps", + "Chant des Tempêtes", + "Médaillon de la Forêt", + "Médaillon du Feu", + "Médaillon de l'Eau", + "Médaillon de l'Esprit", + "Médaillon de l'Ombre", + "Médaillon de la Lumière", + "Émeraude Kokiri", + "Rubis Goron", + "Saphir Zora", + "Pierre de Souffrance", + "Carte Gerudo", + "Symbole de Skulltula d'Or", + "Réceptacle de Coeur", + "Quart de Coeur", + "Clé du Boss", + "Boussole", + "Carte du Donjon", + "Petite Clé", + "Petite Magie", + "Grande Magie", + "Quart de Coeur", + "[Retiré]", + "[Retiré]", + "[Retiré]", + "[Retiré]", + "[Retiré]", + "[Retiré]", + "[Retiré]", + "Lait Lon Lon", + "Coeur", + "Rubis Vert", + "Rubis Bleu", + "Rubis Rouge", + "Rubis Pourpre", + "Rubis Argenté", + "[Retiré]", + "Bâtons Mojo (5)", + "Bâtons Mojo (10)", + "Noix Mojo (5)", + "Noix Mojo (10)", + "Bombes (5)", + "Bombes (10)", + "Bombes (20)", + "Bombes (30)", + "Flèches (Petites)", + "Flèches (Moyennes)", + "Flèches (Grandes)", + "Graines Mojo (30)", + "Missile Teigneux (5)", + "Missile Teigneux (20)", + "Amélioration Bâtons Mojo (20)", + "Amélioration Bâtons Mojo (30)", + "Amélioration Noix Mojo (30)", + "Amélioration Noix Mojo (40)", +}; + +std::vector itemNamesGer = { + "Deku-Stab", + "Deku-Nuss", + "Bombe", + "Feenbogen", + "Feuerpfeil", + "Dins Feuerinferno", + "Feen-Schleuder", + "Feen-Okarina", + "Okarina der Zeit", + "Krabbelmine", + "Enterhaken", + "Enterhaken (Lang)", + "Eispfeil", + "Farores Donnersturm", + "Bumerang", + "Auge der Wahrheit", + "Zauberbohne", + "Megatonhammer", + "Lichtpfeil", + "Nayrus Umarmung", + "Leere Flasche", + "Roter Trank", + "Grüner Trank", + "Blauer Trank", + "Fee in Flasche", + "Fisch", + "Lon Lon Milch & Flasche", + "Brief von Ruto", + "Blaue Flamme", + "Insekten", + "Großer Irrgeist", + "Lon Lon Milch (Halb)", + "Irrgeist", + "Seltsames Ei", + "Huhn", + "Brief von Zelda", + "Fuchsmaske", + "Totenkopfmaske", + "Schädelmaske", + "Hasenohren", + "Goron-Maske", + "Zora-Maske", + "Gerudo-Maske", + "Maske der Wahrheit", + "AUSVERKAUFT", + "Taschenei", + "Taschenhuhn", + "Cojiro", + "Seltsamer Pilz", + "Seltsamer Trank", + "Säge des Schmugglers", + "Goronen-Schwert (Kaputt)", + "Rezept", + "Augenfrosch", + "Augentropfen", + "Abholschein", + "Feenbogen & Feuerpfeil", + "Feenbogen & Eispfeil", + "Feenbogen & Lichtpfeil", + "Kokiri-Schwert", + "Master-Schwert", + "Riesenmesser & Biggorons Schwert", + "Deku-Schild", + "Hylia-Schild", + "Spiegelschild", + "Kokiri-Gewand", + "Goronen-Gewand", + "Zora-Gewand", + "Kokiri-Stiefel", + "Eisenstiefel", + "Schwebestiefel", + "Kugelbeutel (30)", + "Kugelbeutel (40)", + "Kugelbeutel (50)", + "Köcher (30)", + "Großer Köcher (40)", + "Riesenköcher (50)", + "Bombentasche (20)", + "Große Bombentasche (30)", + "Riesen-Bombentasche (40)", + "Goronen-Armband", + "Silberhandschuhe", + "Goldhandschuhe", + "Silberschuppe", + "Goldschuppe", + "Riesenmesser (Kaputt)", + "Erwachsenenbörse", + "Riesenbörse", + "Deku-Samen (5)", + "Angel", + "Menuett des Waldes", + "Bolero des Feuers", + "Serenade des Wassers", + "Requiem der Geister", + "Nocturne der Schatten", + "Präludium des Lichts", + "Zeldas Wiegenlied", + "Eponas Lied", + "Sarias Lied", + "Sonnenlied", + "Hymne der Zeit", + "Sturm-Lied", + "Amulett des Waldes", + "Amulett des Feuers", + "Amulett des Wassers", + "Amulett der Geister", + "Amulett der Schatten", + "Amulett des Lichts", + "Kokiri-Smaragd", + "Goronen-Rubin", + "Zora-Saphir", + "Stein des Wissens", + "Gerudo-Pass", + "Goldene Skulltula-Marke", + "Herzcontainer", + "Herzteil", + "Boss-Schlüssel", + "Kompass", + "Dungeon-Karte", + "Kleiner Schlüssel", + "Kleine Magie", + "Große Magie", + "Herzteil", + "[Entfernt]", + "[Entfernt]", + "[Entfernt]", + "[Entfernt]", + "[Entfernt]", + "[Entfernt]", + "[Entfernt]", + "Lon Lon Milch", + "Herz", + "Grüner Rubin", + "Blauer Rubin", + "Roter Rubin", + "Violetter Rubin", + "Silberner Rubin", + "[Entfernt]", + "Deku-Stäbe (5)", + "Deku-Stäbe (10)", + "Deku-Nüsse (5)", + "Deku-Nüsse (10)", + "Bomben (5)", + "Bomben (10)", + "Bomben (20)", + "Bomben (30)", + "Pfeile (Klein)", + "Pfeile (Mittel)", + "Pfeile (Groß)", + "Deku-Samen (30)", + "Krabbelmine (5)", + "Krabbelmine (20)", + "Deku-Stab-Erweiterung (20)", + "Deku-Stab-Erweiterung (30)", + "Deku-Nuss-Erweiterung (30)", + "Deku-Nuss-Erweiterung (40)", +}; + + + +std::vector questItemNamesEng = { "Forest Medallion", "Fire Medallion", "Water Medallion", "Spirit Medallion", "Shadow Medallion", "Light Medallion", "Minuet of Forest", "Bolero of Fire", "Serenade of Water", "Requiem of Spirit", "Nocturne of Shadow", "Prelude of Light", "Zelda's Lullaby", "Epona's Song", "Saria's Song", @@ -288,6 +609,16 @@ std::vector questItemNames = { "Zora's Sapphire", "Stone of Agony", "Gerudo's Card", "Gold Skulltula Token", }; +std::vector questItemNamesFra = { + "Médaillon de la Forêt", "Médaillon du Feu", "Médaillon de l'Eau", "Médaillon de l'Esprit", + "Médaillon de l'Ombre", "Médaillon de la Lumière", "Menuet des Bois", "Boléro du Feu", + "Sérénade de l'Eau", "Requiem de l'Esprit", "Nocturne de l'Ombre", "Prélude de la Lumière", + "Berceuse de Zelda", "Chanson d'Epona", "Chanson de Saria", "Chant du Soleil", + "Chant du Temps", "Chant des Tempêtes", "Émeraude Kokiri", "Rubis Goron", + "Saphir Zora", "Pierre de Souffrance", "Carte Gerudo", "Symbole de Skulltula d'Or", +}; + + std::array rcareaPrefixes = { "KF", "LW", @@ -334,23 +665,37 @@ const std::string& SohUtils::GetSceneName(int32_t scene) { } const std::string& SohUtils::GetItemName(int32_t item) { - if (item > itemNames.size()) { + const std::vector* currentItemNames = nullptr; + + switch (gSaveContext.language) { + case LANGUAGE_FRA: + currentItemNames = &itemNamesFra; + break; + case LANGUAGE_GER: + currentItemNames = &itemNamesGer; + break; + case LANGUAGE_ENG: + default: + currentItemNames = &itemNamesEng; + break; + } + + if (item >= currentItemNames->size()) { SPDLOG_WARN("Passed invalid item id to SohUtils::GetItemName: ({})", item); assert(false); return ""; } - - return itemNames[item]; + return (*currentItemNames)[item]; } const std::string& SohUtils::GetQuestItemName(int32_t item) { - if (item > questItemNames.size()) { + if (item > questItemNamesEng.size()) { SPDLOG_WARN("Passed invalid quest item id to SohUtils::GetQuestItemName: ({})", item); assert(false); return ""; } - return questItemNames[item]; + return questItemNamesEng[item]; } const std::string& SohUtils::GetRandomizerCheckAreaPrefix(int32_t rcarea) {