From afd516efb1d0d12281813d81d84fc6a7cdb001f4 Mon Sep 17 00:00:00 2001 From: pizza1398 <259104093+pizza1398@users.noreply.github.com> Date: Fri, 31 Jul 2026 22:29:58 +0200 Subject: [PATCH 1/2] Message Fixes - Only write one variant of first remains hint - Revert Woodfall Map message's color values --- source/custom_messages.cpp | 2 +- source/hints.cpp | 45 +++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index 55e2c78..f5f76a9 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -254,7 +254,7 @@ void CreateBaselineCustomMessages() { // Woodfall CreateMessageFromTextObject(0x6137, 0x003E, 0x3FFFFFFF, 0xFF0000, GITextIntroMap + GITextDungeonWoodfall, - {QM_GREEN, QM_WHITE}, {}, {}, 0x0, false, false); + {QM_GREEN, QM_GREEN}, {}, {}, 0x0, false, false); // Snowhead CreateMessageFromTextObject(0x6138, 0x003E, 0x3FFFFFFF, 0xFF0000, diff --git a/source/hints.cpp b/source/hints.cpp index 8d8234e..5ce586e 100644 --- a/source/hints.cpp +++ b/source/hints.cpp @@ -745,6 +745,11 @@ static Text BuildDoorText(const ItemKey itemKey) { } void CreateClockTowerDoorHints() { + // Determine which hint to display first + u16 clockDoorFirstHint = 0x8002; + if (StartingOcarina.Value() == 0) clockDoorFirstHint = 0x8000; + else if (ShuffleSongOfTime) clockDoorFirstHint = 0x8001; + // Create hint text Text ocarinaHint = Text{ /*NaEnglish*/"Hey, didn't you have some sort of #musical instrument#?&If I know the Skull Kid, I bet he hid it at ", @@ -762,6 +767,18 @@ void CreateClockTowerDoorHints() { /*EuFrench */"Comment as-tu pu oublier la #Chanson du Temps#?&On devra l'apprendre dans ", /*EuSpanish*/"¿Cómo pudiste olvidar la #Song of Time#?&Vamos a necesitar aprenderla en " }+BuildDoorText(SONG_OF_TIME); + Text remainsPreHint = Text{ + /*English*/"Also, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!", + /*French */"D'ailleurs, ce #concours de masques# me rappelle que j'ai entendu des rumeurs dans le coin sur des #masques très uniques#.", + /*Spanish?*/"Also, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!" + }; + if (clockDoorFirstHint == 0x8002) { + remainsPreHint = Text{ + /*English*/"Hey, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!", + /*French */"Dis, ce #concours de masques# me rappelle que j'ai entendu des rumeurs dans le coin sur des #masques très uniques#.", + /*Spanish?*/"Hey, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!" + }; + } Text odolwaHint = Text{ /*English*/"There's one with a #crown# and #jewellery# said to be found at ", /*French */"Y'en a un avec une #couronne# et des #bijoux# situé vers ", @@ -846,11 +863,6 @@ void CreateClockTowerDoorHints() { break; } - // Determine which hint to display first - u16 clockDoorFirstHint = 0x8003; - if (StartingOcarina.Value() == 0) clockDoorFirstHint = 0x8000; - else if (ShuffleSongOfTime) clockDoorFirstHint = 0x8001; - CustomMessages::CreateMessage(0x0630, clockDoorFirstHint, 0x3FFFFFFF, 0x0FF0211, {"Rooftop access strictly prohibited!&(Enforceable until #midnight# on the&#eve# of the carnival.)^" "#Notice of carnival activities:#&Musical Performance Contest&Unique Mask Contest&#Prizes available!#", @@ -870,23 +882,12 @@ void CreateClockTowerDoorHints() { {QM_RED, QM_RED, QM_RED, QM_MAGENTA}, {}, {}, 0x0, false, false); CustomMessages::CreateMessageFromTextObject(0x8000, ShuffleSongOfTime ? 0x8001 : 0x8002, 0x3FFFFFFF, 0x1000000, ocarinaHint, {QM_BLUE, QM_RED}, {}, {}, 0x083E, false, false); CustomMessages::CreateMessageFromTextObject(0x8001, 0x8002, 0x3FFFFFFF, 0x1000000, songTimeHint, {QM_BLUE, QM_RED}, {}, {}, (clockDoorFirstHint == 0x8001) ? 0x083E : 0x0, false, false); - CustomMessages::CreateMessage(0x8002, 0x8004, 0x3FFFFFFF, 0x1FF0000, - {"Also, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!", - // French - "D'ailleurs, ce #concours de masques# me rappelle que j'ai entendu des rumeurs dans le coin sur des #masques très uniques#.", - }, - {QM_RED, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessage(0x8003, 0x8004, 0x3FFFFFFF, 0x1FF0000, - {"Hey, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!", - // French - "Dis, ce #concours de masques# me rappelle que j'ai entendu des rumeurs dans le coin sur des #masques très uniques#.", - }, - {QM_RED, QM_RED}, {}, {}, 0x083E, false, false); - CustomMessages::CreateMessageFromTextObject(0x8004, 0x8005, 0x3FFFFFFF, 0x15D0000, odolwaHint, {QM_GREEN, QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8005, 0x8006, 0x3FFFFFFF, 0x15E0000, gohtHint, {QM_MAGENTA, QM_MAGENTA, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8006, 0x8007, 0x3FFFFFFF, 0x15F0000, gyorgHint, {QM_CYAN, QM_CYAN, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8007, 0x8008, 0x3FFFFFFF, 0x1600000, twinmoldHint, {QM_YELLOW, QM_YELLOW, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8008, 0xFFFF, 0x3FFFFFFF, 0x0FF0000, remainsNeededHint, {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8002, 0x8003, 0x3FFFFFFF, 0x1FF0000, remainsPreHint, {QM_RED, QM_RED}, {}, {}, (clockDoorFirstHint == 0x8002) ? 0x083E : 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8003, 0x8004, 0x3FFFFFFF, 0x15D0000, odolwaHint, {QM_GREEN, QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8004, 0x8005, 0x3FFFFFFF, 0x15E0000, gohtHint, {QM_MAGENTA, QM_MAGENTA, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8005, 0x8006, 0x3FFFFFFF, 0x15F0000, gyorgHint, {QM_CYAN, QM_CYAN, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8006, 0x8007, 0x3FFFFFFF, 0x1600000, twinmoldHint, {QM_YELLOW, QM_YELLOW, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8007, 0xFFFF, 0x3FFFFFFF, 0x0FF0000, remainsNeededHint, {QM_RED}, {}, {}, 0x0, false, false); } void CreateMoonChildHint() { From 0ab5a28796b8aed6ac1fee09b7b2c32aba0a12e4 Mon Sep 17 00:00:00 2001 From: pizza1398 <259104093+pizza1398@users.noreply.github.com> Date: Sat, 1 Aug 2026 11:58:39 +0200 Subject: [PATCH 2/2] Revise new hints - Favor GetHint over GetName in dialogue - Reword messages for grammar/brevity/consistency (+ added ones) - Add second prize mention before second set of beaver races - Bring some messages closer to vanilla (all languages) - Revise French - Add/draft more languages to some hints - Add "?" on hint languages that (may) need native speaker check - Draft keyring get messages --- source/custom_messages.cpp | 55 ++++-- source/hints.cpp | 379 ++++++++++++++----------------------- 2 files changed, 187 insertions(+), 247 deletions(-) diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index f5f76a9..0f37d2f 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -206,10 +206,12 @@ void CreateBaselineCustomMessages() { delayData.push_back(0xFC); colParity = iconParity = delayParity = 1; - Text GITextIntroSKey = {"You got a #small key# ", "Vous obtenez une #petite clé# ", "¡Has obtenido una #llave pequeña# "}; - Text GITextIntroMap = {"You found the #dungeon map# ", "Vous obtenez la #carte du donjon# ", "¡Has encontrado el #mapa de la mazmorra# "}; - Text GITextIntroCompass = {"You got the #compass# ", "Vous obtenez la #boussole# ", "¡Has encontrado la #brújula# "}; - Text GITextIntroBKey = {"You got the #boss key# ", "Vous obtenez la #grande clé# ", "¡Has obtenido la #gran llave# "}; + Text GITextIntroSKey = {"You got a #Small Key# ", "Vous obtenez une #petite clé# ", "¡Has obtenido una #llave pequeña# "}; + Text GITextIntroMap = {"You found the #Dungeon Map# ", "Vous obtenez la #carte du donjon# ", "¡Has encontrado el #mapa de la mazmorra# "}; + Text GITextIntroCompass = {"You got the #Compass# ", "Vous obtenez la #boussole# ", "¡Has encontrado la #brújula# "}; + Text GITextIntroBKey = {"You got the #Boss Key# ", "Vous obtenez la #grande clé# ", "¡Has obtenido la #gran llave# "}; + // Text GITextIntroOneKey = {"You got the #Small Key# ", "Vous obtenez la #petite clé# ", "¡Has obtenido la #llave pequeña# "}; + // Text GITextIntroKeyring = {"You got the #Key Ring# ", "Vous obtenez le #trousseau# ", "¡Has encontrado el #llavero# "}; Text GITextDungeonWoodfall = {"for #Woodfall Temple#!", "du #temple de Boisé-les-Cascades#!", "del templo del Bosque Catarata!", "", "du #temple de Bois-Cascade# !", ""}; @@ -231,6 +233,9 @@ void CreateBaselineCustomMessages() { " Now you can enter the chamber where the boss lurks!", " Vous pouvez maintenant pénétrer dans l'antre du boss!", "", "", " Vous pouvez maintenant pénétrer dans l'antre du boss !", "" }; + // Text GITextOutroKeyRing = { + // " Use it to open the locked doors in that temple.", " Utilisez-le pour ouvrir certaines portes de ce donjon.", "" + // }; // Small Keys // Woodfall @@ -347,16 +352,40 @@ void CreateBaselineCustomMessages() { //Bank Rewards CreateMessage(0x045c, 0xFFFF, 0x3FFFFFFF, 0xFF0000, - {"What's this? You've already saved up #500 Rupees#!?! Well, little guy, here's your special gift. Take it!", + {"What's this? You've already&saved up #500 Rupees#!?!^Well, little guy, here's your&special gift. Take it!", // French - "Vous avez déjà économisé #500 Rubis#?! Bon, petit, voici votre cadeau spécial. Prenez-le!", + "Oh? Tu as déjà déposéǴ rubis#?!^Je crois que je vais te donner ça&pour ta fidélité!", + // Spanish + "¿Qué ven mis ojos?&¿¡Ya has ahorrado #500 rupias#!?^Bien, jovencito. Aquí está tu regalo&especial. ¡Tómalo!", + // German + "Oh! Du hast bereits #500 Rubine&#gespart!?!^Nun denn, kleiner Mann, hier hast&du die versprochene Prämie!", + // Italian + "Ma guarda! Hai già depositatoǴ rupie#!^Ottimo, piccoletto. Toh, ecco&un regalo speciale per te!", + // EU English + "What's this? You've already&saved up #500 Rupees#!?!^Well, little guy, here's your&special gift. Take it!", + // EU French + "Oh ? Tu as déjà déposéǴ rubis# ?!^Je crois que je vais te donner ça&pour ta fidélité !", + // EU Spanish + "¿Qué es esto? ¡¿Ya has ahorradoǴ rupias#?!^Bien, jovencito. Aquí está tu regalo&especial. ¡Tómalo!", }, {QM_RED}, {}, {}, 0x0, false, false); CreateMessage(0x045d, 0xFFFF, 0x3FFFFFFF, 0xFF0000, - {"What's this? You've already saved up #1,000 Rupees#?! Well, little guy, I can't take any more deposits. Sorry, but this is all I can give you.", + {"What's this? You've already&saved up #1,000 Rupees#?!^Well, little guy, I can't take any more deposits. Sorry, but this is all I can give you.", // French - "Vous avez déjà économisé #1000 Rubis#?! Bon, petit, je ne peux plus accepter de dépôts. Désolé, mais c'est tout ce que je peux vous donner.", + "Mais... que...? Tu as économiséϨ rubis#!^Je suis désolé, jeune homme, mais&je ne peux plus prendre d'argent. &Mais, comme tu es un de mes plus &gros clients, voici un super cadeau!", + // Spanish + "¿Qué ven mis ojos?&¿¡Ya has ahorrado #1000 rupias#!?^Bien, jovencito. No puedo aceptar&más depósitos. Lo siento, pero&esto es todo lo que puedo darte.", + // German + "Oh! Du hast bereits #1000 Rubine&#gespart!?!^Nun denn, kleiner Mann, mehr kann&ich nicht aufbewahren, so leid es mir&tut.", + // Italian + "Ma guarda! Hai già raggiuntoϨ rupie#!^Ottimo, piccoletto. Ma non puoi&depositare più di così. Spero&di farmi perdonare con questo.", + // EU English + "What's this? You've already&saved up #1,000 Rupees#?!^Well, little guy, I can't take any more&deposits. Sorry, but this is all I can&give you.", + // EU French + "Mais... que... ? Tu as économisé 000 rubis# ?!^Je suis désolé, jeune homme, mais&je ne peux plus prendre d'argent. &Mais comme tu es un de mes plus &gros clients, voici un super cadeau !", + // EU Spanish + "¿Qué es esto? ¡¿Ya has ahorradoϨ rupias#?!^Bien, jovencito. No puedo aceptar&más depósitos. Lo siento, pero&esto es todo lo que puedo darte.", }, {QM_RED}, {}, {}, 0x0, false, false); @@ -364,35 +393,35 @@ void CreateBaselineCustomMessages() { CreateMessage(0x06144, 0xFFFF, 0x3FFFFFFF, 0xFF0000, {"You got the #Clock Town Stray Fairy#! Bring it to the Fairy Fountain in North Clock Town!", // French - "Vous obtenez une #Fée Perdue de Clock Town#! Apporte-le à la Fontaine des Fées, dans le Quartier Nord de Bourg-Clocher!", + "Vous obtenez une #fée égarée de la ville#! Apportez-la à la fontaine des fées au nord de la ville!", }, {QM_RED}, {}, {}, 0x0, false, false); CreateMessage(0x06145, 0xFFFF, 0x3FFFFFFF, 0xFF0000, {"You got a #Woodfall Stray Fairy#! &You have collected #=WFF#.", // French - "Vous obtenez une #Fée Perdue de la forêt#!&Vous en avez désormais #=WFF#.", + "Vous obtenez une #fée égarée des marais#!&Vous en avez désormais #=WFF#.", }, {QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); CreateMessage(0x06146, 0xFFFF, 0x3FFFFFFF, 0xFF0000, {"You got a #Snowhead Stray Fairy#! &You have collected #=SHF#.", // French - "Vous obtenez une #Fée Perdue des neiges#!&Vous en avez désormais #=SHF#.", + "Vous obtenez une #fée égarée des neiges#!&Vous en avez désormais #=SHF#.", }, {QM_MAGENTA, QM_RED}, {}, {}, 0x0, false, false); CreateMessage(0x06147, 0xFFFF, 0x3FFFFFFF, 0xFF0000, {"You got a #Great Bay Stray Fairy#! &You have collected #=GBF#.", // French - "Vous obtenez une #Fée Perdue de la baie#!&Vous en avez désormais #=GBF#.", + "Vous obtenez une #fée égarée de la baie#!&Vous en avez désormais #=GBF#.", }, {QM_BLUE, QM_RED}, {}, {}, 0x0, false, false); CreateMessage(0x06148, 0xFFFF, 0x3FFFFFFF, 0xFF0000, {"You got a #Stone Tower Stray Fairy#! &You have collected #=STF#.", // French - "Vous obtenez une #Fée Perdue d'Ikana#!&Vous en avez désormais #=STF#.", + "Vous obtenez une #fée égarée d'Ikana#!&Vous en avez désormais #=STF#.", }, {QM_YELLOW, QM_RED}, {}, {}, 0x0, false, false); diff --git a/source/hints.cpp b/source/hints.cpp index 5ce586e..253652f 100644 --- a/source/hints.cpp +++ b/source/hints.cpp @@ -490,239 +490,150 @@ void CreateOtherHints() { // Create other hints for various texts //Bank Reward 1 hint (Vanilla Wallet) - Text bankReward1Hint = Text{ - Text{ - /*NaEnglish*/"For example, if you deposit 200 Rupees, you'll get #", - /*NaFrench*/"Par exemple, si vous déposez 200 Rupees, vous obtiendrez #", - /*NaSpanish*/"Por ejemplo, si depositas 200 Rupees, obtendrás #", - /*EuEnglish*/"", - /*EuFrench*/"", - /*EuSpanish*/"", - } - +ItemTable(Location(S_CLOCK_TOWN_BANK_REWARD_1)->GetPlacedItemKey()).GetHint().GetText() - +Text{"#."} - }; - CustomMessages::CreateMessageFromTextObject(0x44d, 0xFFFF, 0x3FF0A014, 0xFF1001, - bankReward1Hint, {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x044D, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"For example, if you deposit #200 Rupees#, you'll get #", + /*French*/"Par exemple, si tu déposes #200 rubis#, je te donnerai #", + /*Spanish*/"Por ejemplo, si depositas #200 rupias#, te entregaré #", + // /*German ?*/"Wenn du zum Beispiel #200 Rubine# sparst, gebe ich dir #", + // /*Italian?*/"Per esempio, se depositi #200 rupie#, otterrai #", + }+ItemTable(Location(S_CLOCK_TOWN_BANK_REWARD_1)->GetPlacedItemKey()).GetHint().GetText() + +"#.", {QM_RED, QM_RED}, {}, {}, 0x0, false, false); //Termina Field Deku Salesman Heart Piece - Text dekuSalesmanHint = Text{ - Text{ - /*NaEnglish*/" Please! I'll sell you a #", - /*NaFrench*/" S'il te plaît, je te vendrai un #", - /*NaSpanish*/" Por favor, te venderé un #", - /*EuEnglish*/" Please! I'll sell you a #", - /*EuFrench*/" S'il te plaît, je te vendrai un #", - /*EuSpanish*/" Por favor, te venderé un #", - } - +ItemTable(Location(TERMINA_FIELD_BUSINESS_SCRUB)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"# if you just keep this place a secret...", - /*NaFrench*/"# si tu gardes ce lieu secret...", - /*NaSpanish*/"# si guardas este lugar en secreto...", - /*EuEnglish*/"# if you just keep this place a secret...", - /*EuFrench*/"# si tu gardes ce lieu secret...", - /*EuSpanish*/"# si guardas este lugar en secreto...", - } - }; - CustomMessages::CreateMessageFromTextObject(0x1631, 0xFFFF, 0x3FF0A014, 0xFF1001, - dekuSalesmanHint,{QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x1631, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"Please! I'll sell you #", + /*French*/"OK, je te vends #", + /*Spanish?*/"¡Por favor! Le venderé #", + // /*German ?*/"Oh, bitte! Ich verkaufe dir #", + // /*Italian?*/"Ti prego! Ti vendo #", + }+ItemTable(Location(TERMINA_FIELD_BUSINESS_SCRUB)->GetPlacedItemKey()).GetHint().GetText()+Text{ + /*English*/"# if you just keep this place a secret...", + /*French*/"# si tu gardes le secret de cet endroit.", + /*Spanish*/"# si mantiene este lugar en secreto...", + // /*German ?*/"#, aber bitte behalte dieses Geheimnis für dich!", + // /*Italian?*/"# se mantieni il segreto su questo posto...", + }, {QM_RED}, {}, {}, 0x0, false, false); //Beaver Hints - Text EmptyBottleHint = ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName(); - Text beaverHint1 = Text{ - Text{ - /*NaEnglish*/"You want a #", - /*NaFrench*/"Tu veux une #", - /*NaSpanish*/"¿Quieres una #", - /*EuEnglish*/"You want an #", - /*EuFrench*/"Tu veux une #", - /*EuSpanish*/"¿Quieres una #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#, don't you? You never learn your lesson!", - /*NaFrench*/"#, n'est-ce pas? Tu n'apprends jamais ta leçon!", - /*NaSpanish*/"#, ¿verdad? No aprendes tu lección...", - /*EuEnglish*/"#, don't you? You never learn your lesson!", - /*EuFrench*/"#, n'est-ce pas? Tu n'apprends jamais ta leçon!", - /*EuSpanish*/"#, ¿verdad? No aprendes tu lección...", - } - }; - CustomMessages::CreateMessageFromTextObject(0x10cf, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint1, {QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint2 = Text{ - Text{ - /*NaEnglish*/"Koo, koo, koo. If you want an #", - /*NaFrench*/"Koo, koo, koo. Si tu veux une #", - /*NaSpanish*/"Koo, koo, koo. Si quieres una #", - /*EuEnglish*/"Koo, koo, koo. If you want an #", - /*EuFrench*/"Koo, koo, koo. Si tu veux une #", - /*EuSpanish*/"Koo, koo, koo. Si quieres una #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#, I can give you one... But only if you can swim through all the rings in the river in under two minutes.", - /*NaFrench*/"#, je peux te donner une... Mais seulement si tu peux nager à travers tous les anneaux de la rivière en moins de deux minutes.", - /*NaSpanish*/"#, puedo darte una... Pero solo si puedes nadar a través de todos los anillos del río en menos de dos minutos.", - /*EuEnglish*/"#, I can give you one... But only if you can swim through all the rings in the river in under two minutes.", - /*EuFrench*/"#, je peux te donner une... Mais seulement si tu peux nager à travers tous les anneaux de la rivière en moins de deux minutes.", - /*EuSpanish*/"#, puedo darte una... Pero solo si puedes nadar a través de todos los anillos del río en menos de dos minutos.", - } - }; - CustomMessages::CreateMessageFromTextObject(0x10d4, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint2, {QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint3 = Text{ - Text{ - /*NaEnglish*/"What? A #", - /*NaFrench*/"Quoi? Une #", - /*NaSpanish*/"¿Qué? Una #", - /*EuEnglish*/"What? A #", - /*EuFrench*/"Quoi? Une #", - /*EuSpanish*/"¿Qué? Una #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#?", - /*NaFrench*/"#?", - /*NaSpanish*/"#?", - /*EuEnglish*/"#?", - /*EuFrench*/"#?", - /*EuSpanish*/"#?", - } - }; - CustomMessages::CreateMessageFromTextObject(0x10e0, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint3, {QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint4 = Text{ - Text{ - /*NaEnglish*/"Yeah... A #", - /*NaFrench*/"Oui... Une #", - /*NaSpanish*/"Sí... Una #", - /*EuEnglish*/"Yeah... A #", - /*EuFrench*/"Oui... Une #", - /*EuSpanish*/"Sí... Una #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#.", - /*NaFrench*/"#.", - /*NaSpanish*/"#.", - /*EuEnglish*/"#.", - /*EuFrench*/"#.", - /*EuSpanish*/"#.", - } - }; - CustomMessages::CreateMessageFromTextObject(0x10e1, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint4, {QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint5 = Text{ - Text{ - /*NaEnglish*/"To you, it's just an #", - /*NaFrench*/"Pour toi, c'est juste une #", - /*NaSpanish*/"Para ti, es solo una #", - /*EuEnglish*/"To you, it's just an #", - /*EuFrench*/"Pour toi, c'est juste une #", - /*EuSpanish*/"Para ti, es solo una #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"# but to us it's a precious treasure. I can't give you one just because you beat my little brother.", - /*NaFrench*/"# mais pour nous c'est un trésor précieux. Je ne peux pas te donner une seule parce que tu as battu mon petit frère.", - /*NaSpanish*/"# pero para nosotros es un tesoro precioso. No puedo darte una solo porque venciste a mi hermano menor.", - /*EuEnglish*/"# but to us it's a precious treasure. I can't give you one just because you beat my little brother.", - /*EuFrench*/"# mais pour nous c'est un trésor précieux. Je ne peux pas te donner une seule parce que tu as battu mon petit frère.", - /*EuSpanish*/"# pero para nosotros es un tesoro precioso. No puedo darte una solo porque venciste a mi hermano menor.", - } - }; - CustomMessages::CreateMessageFromTextObject(0x10e2, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint5, {QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint6 = Text{ - Text{ - /*NaEnglish*/"But we don't have any more #", - /*NaFrench*/"Mais nous n'avons plus aucune #", - /*NaSpanish*/"Pero no tenemos más #", - /*EuEnglish*/"But we don't have any more #", - /*EuFrench*/"Mais nous n'avons plus aucune #", - /*EuSpanish*/"Pero no tenemos más #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#s...do we, Little Brother?", - /*NaFrench*/"#s...n'est-ce pas, petit frère?", - /*NaSpanish*/"#s...¿verdad, hermano menor?", - /*EuEnglish*/"#s...do we, Little Brother?", - /*EuFrench*/"#s...n'est-ce pas, petit frère?", - /*EuSpanish*/"#s...¿verdad, hermano menor?", - } - }; - CustomMessages::CreateMessageFromTextObject(0x10f5, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint6, {QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint7 = Text{ - Text{ - /*NaEnglish*/"I told you that the beavers above the waterfall on the Zora Hall coast have #", - /*NaFrench*/"Je t'ai dit que les castors au-dessus de la cascade sur la côte du Château des Zora ont #", - /*NaSpanish*/"Te dije que los zorros encima de la cascada en la orilla del Palacio de los Zora tienen #", - /*EuEnglish*/"I told you that the beavers above the waterfall on the Zora Hall coast have #", - /*EuFrench*/"Je t'ai dit que les castors au-dessus de la cascade sur la côte du Château des Zora ont #", - /*EuSpanish*/"Te dije que los zorros encima de la cascada en la orilla del Palacio de los Zora tienen #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#s, right? If you could nab a #", - /*NaFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", - /*NaSpanish*/"#s, ¿verdad? Si pudieras pillar un #", - /*EuEnglish*/"#s, right? If you could nab a #", - /*EuFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", - /*EuSpanish*/"#s, ¿verdad? Si pudieras pillar un #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"# from them...Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall.", - /*NaFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade.", - /*NaSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada.", - /*EuEnglish*/"# from them...Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall.", - /*EuFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade.", - /*EuSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada.", - } - }; - CustomMessages::CreateMessageFromTextObject(0x1240, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint7, {QM_RED, QM_RED}, {}, {}, 0x0, false, false); - - Text beaverHint8 = Text{ - Text{ - /*NaEnglish*/"I already told you the beavers above the waterfall have #", - /*NaFrench*/"Je t'ai déjà dit que les castors au-dessus de la cascade ont #", - /*NaSpanish*/"Te dije ya que los zorros encima de la cascada tienen #", - /*EuEnglish*/"I already told you the beavers above the waterfall have #", - /*EuFrench*/"Je t'ai déjà dit que les castors au-dessus de la cascade ont #", - /*EuSpanish*/"Te dije ya que los zorros encima de la cascada tienen #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"#s, didn't I? If you could nab a #", - /*NaFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", - /*NaSpanish*/"#s, ¿verdad? Si pudieras pillar un #", - /*EuEnglish*/"#s, didn't I? If you could nab a #", - /*EuFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", - /*EuSpanish*/"#s, ¿verdad? Si pudieras pillar un #", - } - +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() - +Text{ - /*NaEnglish*/"# from them... Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall. The fisherman had an item that could latch on to trees and pull him toward them...but the pirates stole it. Isn't there anything you can do?", - /*NaFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade. Le pêcheur avait un objet qui pouvait s'agripper aux arbres et l'entraîner vers eux... mais les pirates l'ont volé. N'y a-t-il rien que tu puisses faire?", - /*NaSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada. El pescador tenía un objeto que podía aferrarse a los árboles y jalarlo hacia ellos... pero los piratas lo robaron. ¿No hay nada que puedas hacer?", - /*EuEnglish*/"# from them... Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall. The fisherman had an item that could latch on to trees and pull him toward them...but the pirates stole it. Isn't there anything you can do?", - /*EuFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade. Le pêcheur avait un objet qui pouvait s'agripper aux arbres et l'entraîner vers eux... mais les pirates l'ont volé. N'y a-t-il rien que tu puisses faire?", - /*EuSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada. El pescador tenía un objeto que podía aferrarse a los árboles y jalarlo hacia ellos... pero los piratas lo robaron. ¿No hay nada que puedas hacer?", - } - }; - CustomMessages::CreateMessageFromTextObject(0x1242, 0xFFFF, 0x3fffffff, 0xFF0000, - beaverHint8, {QM_RED, QM_RED}, {}, {}, 0x0, false, false); + Text beaverBottleHint = ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetHint().GetText(); + + CustomMessages::CreateMessageFromTextObject(0x10CF, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"You want #", + /*French */"Tu veux #", + /*Spanish?*/"Quieres #", + // /*German ?*/"Du willst doch #", + // /*Italian?*/"Vuoi #", + }+beaverBottleHint+Text{ + /*NaEnglish*/"#, don't you? You never learn your lesson!", + /*NaFrench */"#, c'est ça? Tu n'apprends jamais ta leçon!", + /*NaSpanish?*/"#, ¿verdad? ¡Nunca aprenderás la lección!", + // /*EuGerman ?*/"#, nicht wahr? Hast du deine Lektion noch immer nicht gelernt?", + // /*EuItalian?*/"#, eh? Non impari mai!", + /*EuEnglish*/"", + /*EuFrench */"#, c'est ça ?&Tu ne retiens jamais la leçon !", + /*EuSpanish*/"", + }, {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x10D0, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"Koo, koo, koo...&OK. But...", + /*French */"Kii, kii, kii.&OK. Mais...", + /*Spanish?*/"Cu, cu, cu.&Muy bien. Pero...", + // /*German ?*/"Quiek, quiek, quiek!&Okay. Aber...", + // /*Italian?*/"Uh uh uh.&Va bene. Ma...", + }, {}, {}, {}, 0x0, false, false); + + CustomMessages::CreateMessageFromTextObject(0x10D4, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"Koo, koo, koo.&I can give you #", + /*French */"Kii, kii, kii.&Je peux te donner #", + /*Spanish?*/"Cu, cu, cu.&Puedo darte #", + // /*German ?*/"Quiek, quiek, quiek. Kann ich dir eine geben #", + // /*Italian?*/"Uh uh uh...&Posso dartela io #", + }+beaverBottleHint+Text{ + /*English*/"#...^But only if you can swim through #all# the #rings# in the river in under #two minutes#.", + /*French */"#...^Seulement si tu peux passer à&travers #tous# les #anneaux# sous la&rivière en moins de #deux minutes#.", + /*Spanish?*/"#...^Pero solo si puedes nadar a&través de todos los #anillos# del río&en menos de #dos minutos#.", + // /*German ?*/"#...^Aber nur, wenn du es schaffst, in&weniger als #zwei Minuten# durch&alle #Ringe# im Fluss zu schwimmen.**", + // /*Italian?*/"#...^Ma solo se riesci a nuotare&attraverso tutti gli #anelli&#nel fiume #entro 2 minuti#.", + }, {QM_RED, QM_RED, QM_RED, QM_RED}, {}, {}, 0x0, false, false); + + CustomMessages::CreateMessageFromTextObject(0x10E0, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*NaEnglish*/"What?&He wants #", + /*NaFrench */"Quoi?&Il veut #", + /*NaSpanish?*/"¿Qué?&¿#", + // /*EuGerman ?*/"Was?&#", + // /*EuItalian?*/"Cosa?&#", + /*EuEnglish*/"", + /*EuFrench */"Quoi ?&Il veut#", + /*EuSpanish*/"", + }+beaverBottleHint+Text{ + /*NaEnglish*/"#?", + /*NaFrench */"#?", + /*NaSpanish*/"#?", + // /*EuGerman */"#?", + // /*EuItalian*/"#?", + /*EuEnglish*/"", + /*EuFrench */"# ?", + /*EuSpanish*/"", + }, {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x10E1, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"Yeah...&He Wants #", + /*French */"Ouaip...&Il veut #", + /*Spanish?*/"Sí...&#", + // /*German */"Ja...&#", + // /*Italian*/"Sì...&#", + }+beaverBottleHint+"#.", {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessage(0x10E3, 0xFFFF, 0x3FFFFFFF, 0xFF0000, { + /*English*/"Look. That's really precious to us, so just beating my little brother isn't enough.", + /*French */"Écoute. On tient beaucoup à ça, alors une simple victoire ne suffira pas.", + // /*Spanish*/"**SPANISH**", + // /*German */"**GERMAN**", + // /*Italian*/"**ITALIAN**", + }, {}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessage(0x10E4, 0xFFFF, 0x3FFFFFFF, 0xFF0000, { + /*English*/"It's not enough.", + /*French */"Ça suffit pas.", + // /*Spanish*/"**SPANISH**", + // /*German */"**GERMAN**", + // /*Italian*/"**ITALIAN**", + }, {}, {}, {}, 0x0, false, false); + + CustomMessages::CreateMessageFromTextObject(0x10F5, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"This time, we only have #", + /*French */"Cette fois, on n'a plus que #", + /*Spanish?*/"This time, we only have #", + // /*German */"**GERMAN**#", + // /*Italian*/"**ITALIAN**#", + }+ItemTable(Location(ZORA_CAPE_BEAVER_RACE_2)->GetPlacedItemKey()).GetHint().GetText()+Text{ + /*English*/"#... Right, Little Brother?", + /*French */"#... Pas vrai, p'tit frère?", + /*Spanish?*/"#... Right, Little Brother?", + // /*German */"#**GERMAN**", + // /*Italian*/"#**ITALIAN**", + }, {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessage(0x10F6, 0xFFFF, 0x3FFFFFFF, 0xFF0000, { + /*English*/"That's right, Big Brother...", + /*French */"Ouaip, grand frère...", + // /*Spanish*/"**SPANISH**", + // /*German */"**GERMAN**", + // /*Italian*/"**ITALIAN**", + }, {}, {}, {}, 0x0, false, false); + + CustomMessages::CreateMessageFromTextObject(0x1240, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"You know the #beavers# above the #waterfall# are the type to have #empty bottles#, right?^Lately, they've been braggin about #", + /*French */"Je t'ai parlé des #castors# qui vivent en haut de la #cascade#, non? Ils adorent les #flacons vides#.^Mais ces temps-ci, leur truc c'est #", + /*Spanish?*/"You know the #beavers# above the #waterfall# are the type to have #empty bottles#, right?^Lately, they've been braggin about #", + // /*German ?*/"You know the #beavers# above the #waterfall# are the type to have #empty bottles#, right?^Lately, they've been braggin about #", + // /*Italian?*/"You know the #beavers# above the #waterfall# are the type to have #empty bottles#, right?^Lately, they've been braggin about #", + }+beaverBottleHint + +"#.", {QM_RED, QM_RED, QM_RED, QM_RED}, {}, {}, 0x0, false, false); + + CustomMessages::CreateMessageFromTextObject(0x1242, 0xFFFF, 0x3FFFFFFF, 0xFF0000, Text{ + /*English*/"And remember what I told you about the #beavers# above the #waterfall#.^It seems like they have #", + /*French */"Et rappelle toi ce que j'ai dit sur les #castors# qui vivent en haut de la #cascade#.^Il paraît qu'ils ont #", + /*Spanish?*/"And remember what I told you about the #beavers# above the #waterfall#.^It seems like they have #", + // /*German */"**GERMAN**#", + // /*Italian*/"**ITALIAN**#", + }+beaverBottleHint + +"#.", {QM_RED, QM_RED, QM_RED}, {}, {}, 0x0, false, false); @@ -761,11 +672,11 @@ void CreateClockTowerDoorHints() { }+BuildDoorText(OCARINA_OF_TIME); Text songTimeHint = Text{ /*NaEnglish*/"How could you forget the #Song of Time#?&We'll need to relearn it in ", - /*NaFrench */"Comment as-tu pu oublier la #Chanson du Temps#?&On devra l'apprendre dans ", - /*NaSpanish*/"¿Cómo pudiste olvidar la #Song of Time#?&Vamos a necesitar aprenderla en ", - /*EuEnglish*/"How could you forget the #Song of Time#?&We'll need to relearn it in ", - /*EuFrench */"Comment as-tu pu oublier la #Chanson du Temps#?&On devra l'apprendre dans ", - /*EuSpanish*/"¿Cómo pudiste olvidar la #Song of Time#?&Vamos a necesitar aprenderla en " + /*NaFrench */"T'as sérieusement oublié le #Chant du temps#?&Va falloir le réapprendre dans ", + /*NaSpanish?*/"¿Cómo pudiste olvidar la #canción del tiempo#?&Vamos a necesitar aprenderla en ", + /*EuEnglish*/"", + /*EuFrench */"T'as sérieusement oublié le #Chant du temps# ?&Va falloir le réapprendre dans ", + /*EuSpanish*/"" }+BuildDoorText(SONG_OF_TIME); Text remainsPreHint = Text{ /*English*/"Also, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!",