From 9c11718341982b19691d3deb57a154fdabe13574 Mon Sep 17 00:00:00 2001 From: Pepe20129 <72659707+Pepe20129@users.noreply.github.com> Date: Tue, 17 Sep 2024 19:43:06 +0200 Subject: [PATCH] Add 146 ice trap messages (#4281) * Add ice trap message suggestions * Split messages by language * Re-run build * Apply Pepper0ni's patch with fixes --- .../Enhancements/randomizer/randomizer.cpp | 320 +++++++++++++----- soh/soh/Enhancements/randomizer/randomizer.h | 2 +- soh/soh/OTRGlobals.cpp | 6 +- 3 files changed, 244 insertions(+), 84 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index cc572629f..4983647e9 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2826,86 +2826,251 @@ void CreateNaviRandoMessages() { } } -void CreateIceTrapRandoMessages() { - CustomMessage IceTrapMessages[NUM_ICE_TRAP_MESSAGES] = { - { "You are a %bFOOL%w!", "Du bist ein %bDUMMKOPF%w!", "%bPauvre fou%w..." }, - - { "You are a %bFOWL%w!", "Du bist eine %bFrostbeule%w!", "Tu es un %bglaçon%w, Harry!" }, - - { "%bFOOL%w!", "%bDUMMKOPF%w!", "%bSot%w que tu es." }, - - { "You just got %bPUNKED%w!", "Du wurdest %beiskalt%w erwischt!", "Ça me %bglace%w le sang!" }, - - { "Stay %bfrosty%w, @.", "Es läuft Dir %beiskalt%w den Rücken&hinunter, @.", "%bReste au frais%w, @." }, - - { "Take a %bchill pill%w, @.", "Bleib %bcool%w, @.", "Et c'est la douche %bfroide%w!" }, - - { "%bWinter%w is coming.", "Der %bWinter%w naht.", "L'%bhiver%w vient." }, - - { "%bICE%w to see you, @.", "Alles %bcool%w im Pool?", "%bGlacier%w!" }, - - { "Feeling a little %rhot%w under the collar?&%bLet's fix that%w.", "%bAbkühlung gefällig%w?", - "%Ça en jette un %bfroid%w." }, - - { "It's a %bcold day%w in the Evil Realm.", "Es ist ein %kalter%w Tag im Herzen&von Hyrule.", - "Est-ce que tu as déjà eu des sueurs&%bfroides%w?" }, - - { "Getting %bcold feet%w?", "Bekommst Du etwa %bkalte%w Füße?", - "La vengeance est un plat qui se mange&%bfroid%w!" }, - - { "Say hello to the %bZoras%w for me!", "Sag den %bZoras%w viele Grüße von mir!", - "Dit bonjour aux %bZoras%w pour moi!" }, - - { "Can you keep a %bcool head%w?", "Bewahre einen %bkühlen%w! Kopf.", - "Il faut parfois savoir garder la tête&%bfroide%w!" }, - - { "Ganondorf used %bIce Trap%w!&It's super effective!", - "Ganondorf setzt %bEisstrahl%w ein.&Das ist sehr effektiv!", - "Ganondorf utilise %bPiège de Glace%w!&C'est super efficace!" }, - - { "Allow me to break the %bice%w!", "Ein Lächeln ist der beste Weg,&um das %bEis%w zu brechen!", - "Laisse moi briser la %bglace%w!" }, - - { "%bCold pun%w.", "%bEiskalt%w lässt du meine Seele&erfrier'n.", - "Balance man...,&Cadence man...,&Trace la %bglace%w...,&c'est le Cooooolllll Rasta!" }, - - { "The %bTitanic%w would be scared of you,&@.", "Die %bTitanic%w hätte Angst vor Dir,&@.", - "Le %bTitanic%w aurait peur de toi,&@." }, - - { "Oh no!", "Oh nein!", "Oh non!" }, - - { "What killed the dinosaurs?&The %bICE%w age!", "Was die Dinosaurier getötet hat?&Die %bEiszeit%w!", - "Qu'est-ce qui a tué les dinosaures?&L'ère %bglacière%w!" }, - - { "Knock knock. Who's there? Ice. Ice&who? Ice see that you're a %bFOOL%w.", - "Nachts ist es %bkälter%w als draußen.", - "L'imbécile réfléchit uniquement quand il&s'observe dans la %bglace%w." }, - - { "Never gonna %bgive you up%w. Never&gonna %blet you down%w. Never gonna&run around and %bdesert you%w.", - "Never gonna %bgive you up%w. Never&gonna %blet you down%w. Never gonna&run around and %bdesert you%w.", - "Never gonna %bgive you up%w. Never&gonna %blet you down%w. Never gonna&run around and %bdesert you%w." }, - - { "Thank you %b@%w!&But your item is in another castle!", - "Danke %b@%w!&Aber der Gegenstand ist in&einem anderem Schloß!", - "Merci %b@%w!&Mais ton objet est dans un autre&château!" }, - - { "%bFREEZE%w! Don't move!", " Kalt. Kalt. Kälter. %bEISKALT%w!", - "J'espère que ça ne te fait ni chaud, ni&%bfroid%w." }, - +CustomMessage Randomizer::GetIceTrapMessage() { + static const char* const englishIceTrapMessages[169] = { + "You are a #FOOL#!", + "You are a #FOWL#!", + "#FOOL#!", + "You just got #PUNKED#!", + "Stay #frosty#, @.", + "Take a #chill pill#, @.", + "#Winter# is coming.", + "#ICE# to see you, @.", + "Feeling a little %rhot%w under the collar? #Let's fix that#.", + "It's a #cold day# in the Evil Realm.", + "Getting #cold feet#?", + "Say hello to the #Zoras# for me!", + "Can you keep a #cool head#?", + "Ganondorf used #Ice Trap#!&It's super effective!", + "Allow me to break the #ice#!", + "#Cold pun#.", + "The #Titanic# would be scared of you, @.", + "Oh no!", + "Uh oh!", + "What killed the dinosaurs?&The #ICE# age!", + "Knock knock. Who's there? Ice. Ice who? Ice see that you're a #FOOL#.", + "Never gonna #give you up#. Never gonna #let you down#. Never gonna run around and #desert you#.", + "Thank you #@#! But your item is in another castle!", + "#FREEZE#! Don't move!", + "Wouldn't it be #ice# if we were colder?", + "Greetings from #Snowhead#! Wish you were here", + "Too #cool# for you?", + "#Ice#, #ice#, baby...", + "Time to break the #ice#.", + "We wish that you would read this... We wish that you would read this... But we set our bar low.", + "#Freeze# and put your hands in the air!", + "#Ice# to meet you!", + "Do you want to #freeze# a snowman?", + "Isn't there a #mansion# around here?", + "Now you know how #King Zora# feels", + "May the #Frost# be with you.", + "Carpe diem. #Freeze# the day.", + "There #snow# place like home.", + "That'll do, #ice#. That'll do.", + "All that is #cold# does not glitter, Not all those who wander are #frost#.", + "I Used To Be An Adventurer Like You. Then I Took An #Icetrap# To The Knee.", + "Would you like #ice# with that?", + "You have obtained the #Ice# Medallion!", + "Quick, do a #Zora# impression!", + "One item #on the rocks#!",//would be better if it could display the name of the item + "How much does a polar bear weigh?&Enough to break the #ice#.", + "You got Din's #Ice#!", + "You got Nayru's #Cold#!", + "You got Farore's #Freeze#!", + "KEKW", + "You just got #ICE TRAPPED#! Tag your friends to totally #ICE TRAP# them!", + "Are you okay, @? You're being #cold# today.", + "In a moment, your game might experience some #freezing#.", + "Breeze? Trees? Squeeze? No, it's a #freeze#!", + "After collecting this item, @ was assaulted in #cold# blood.", + "Only #chill# vibes around here!", + "Here's a #cool# gift for you!", + "Aha! You THOUGHT.", + "Stay hydrated and brush your teeth!", + "Isn't it too hot here? Let's turn the #AC# on.", + "One serving of #cold# @, coming right up!", + "Is it #cold# in here is that just me?", + "Yahaha! You found me!", + "You'd made a great #ice#-tronaut!", + "That's just the tip of the #iceberg#!", + "It's the triforce!&No, just kidding, it's an #ice trap#.", + "WINNER!", + "LOSER!", + "Greetings from #Cold Miser#!", + "Pardon me while I turn up the #AC#.", + "If you can't stand the #cold#, get out of the #freezer#.", + "Oh, goodie! #Frozen @# for the main course!", + "You have #freeze# power!", + "You obtained the #Ice Beam#! No wait, wrong game.", + "Here's to another lousy millenium!", + "You've activated my #trap card#!", + "I love #refrigerators#!", + "You expected an item,&BUT IT WAS I, AN #ICE TRAP#!", + "It's dangerous to go alone! Take #this#!", + "soh.exe has #stopped responding#.", + "Enough! My #Ice Trap# thaws in the morning!", + "Nobody expects the span-#ice# inquisition!", + "This is one #cool# item!", + "Say hello to my #little friend#!", + "We made you an offer you #can't refuse#.", + "Hyrule? More like #Hycool#!", + "Ice puns are #snow# problem!", + "This #ice# is #snow# joke!", + "There's no business like #snow# business!", + "no, dude", + "N#ice# trap ya got here!", + "Quick do your best impression of #Zoras Domain#!", + "Ganon used #ice beam#, it's super effective!", + "I was #frozen# today.", + "You're not in a #hurry#, right?", + "It's a #trap#!", + "At least it's not a VC crash and only Link is #frozen#!", + "Oh no! #BRAIN FREEZE#!", + "Looks like your game #froze#! Nope just you!", + "PK #FREEZE#!", + "May I interest you in some #iced# Tea?", + "Time for some Netflix and #chill#.", + "I know, I know... #FREEZE#!", + "#Ice# of you to drop by!", + "STOP!&You violated the #Thaw#!", + "I wanted to give you a treasure, but it looks like you got #cold feet#", + "You told me you wanted to deliver #just ice# to Ganondorf!", + "You got the triforce!&This ancient artifact of divine power can grant any- wait, no, sorry, it's just an ice trap. My bad", + "Time to #cool off#!", + "The #Ice Cavern# sends its regards.", + "Loading item, please #wait#...", + "Mash A+B to not #die#.", + "Sorry, your item is in another location.", //would be better if it could have the name of the item + "You only wish this was %gGreg%w.", + "Do you want to drink a hot chocolate?", + "The #cold# never bothered me anyway", + "Hope you're too school for #cool#!", + "Be thankful this isn't #absolute zero#.", + "Did you know the F in ZFG stands for #Freeze#?", + "You got #Ice Age (2002)#!", + "Now you can cast a #spell# you don't know", + "How's about a hero #on the rocks#?", + "Ain't no tunic for #this#!", + "I knew you were #part metroid#!", + "That's just the #icing on the cake#!", + "You're so #cool#, @!", + "You found #disappointment#!", + "You got #FOOLED#!", + "Start Mashing.", + "This item will #self-destruct# in 5 seconds...", + "Remember, there may be some momentary #discomfort#.", + "In a perfect world #ice traps# like me would not exist, but this is not a perfect world.", + "Gee, it sure is #cold# around here.", + "You tested the item with your #ice detector#, it beeped.", //would be better if it could have the name of the item + "You have found the way of the zero. The #sub-zero#.", + "Mweep... mweep... mweep...", + "Scum, #freezebag#! I mean #freeze#, scumbag!", + "Is it #chilly# in here or is it just #you#?", + "#Proceed#", + "WHAT'S SHE GONNA DO, MAKE ME AN #[Ice Cream]#!?", + "You've met with a #terrible fate#, haven't you?", + "So I heard you like the Shining, here's how it #ends#.", + "Minor routing mistake. #I win#.", + "Hold this #L#, @.", + "#SKILL ISSUE#", + "All you heat are belong to us", + "Wait a second, don't you already have #this item#?", + "#Freeze#! We have you surrounded!", + "Error 404 - Item not #found#.", + "Hydration break! Hey, who #froze# my water?", + "Oops, wrong #item model#.", + "Whoops! You have to put the item #in your inventory#.", + "You dropped the item, shattering it into #shards of ice#!", //would be better if it could have the name of the item + "Is this... golden age Simpsons?&BECAUSE I'M ABOUT TO #CHOKE A CHILD#.", + "You are the weakest @, #goodbye#!", + "Ugh... Why did we even randomize #this item#?", + "The #Frost Moon# is rising...", + "According to all known laws of physics and biology, there is no way that @ should be able to survive #getting fully encased in ice#. The cells in @'s body would all die by the time they #unthaw#. Of course, this is a video game, so @ survives anyway... #Probably#.", + "Okay, so stop me if you've heard this one - a gamer and a bottle of #liquid nitrogen# walk into a milk bar...", + "Lástima, es una #trampa de hielo#...&&Nobody expects the Spanish #ice trap#!", + "Gee, it sure is #BURR#ing around here.", + "Navi? Oh! I thought she was called #Névé#!", + "It's fine, @ knew this was a #trap#, they're just using it to take damage intentionally to manipulate RNG.", + "Unfortunately, the item has #stopped#.", //would be better if it could have the name of the item + "This item is #not available# in your country.", //would be better if it could have the name of the item + "#Ice# try. #;)#", + "D'oh, I #missed#!", + "Where is my #super suit#?", + "#Titanic's revenge#.", }; - CustomMessageManager* customMessageManager = CustomMessageManager::Instance; - customMessageManager->AddCustomMessageTable(Randomizer::IceTrapRandoMessageTableID); - for (u8 i = 0; i <= (NUM_ICE_TRAP_MESSAGES - 1); i++) { - customMessageManager->CreateMessage(Randomizer::IceTrapRandoMessageTableID, i, - IceTrapMessages[i]); + + static const char* const germanIceTrapMessages[23] = { + "Du bist ein #DUMMKOPF#!", + "Du bist eine #Frostbeule#!", + "#DUMMKOPF#!", + "Du wurdest #eiskalt# erwischt!", + "Es läuft Dir #eiskalt# den Rücken hinunter, @.", + "Bleib #cool#, @.", + "Der #Winter# naht.", + "Alles #cool# im Pool?", + "#Abkühlung gefällig#?", + "Es ist ein %kalter%w Tag im Herzen von Hyrule.", + "Bekommst Du etwa #kalte# Füße?", + "Sag den #Zoras# viele Grüße von mir!", + "Bewahre einen #kühlen#! Kopf.", + "Ganondorf setzt #Eisstrahl# ein. Das ist sehr effektiv!", + "Ein Lächeln ist der beste Weg, um das #Eis# zu brechen!", + "#Eiskalt# lässt du meine Seele erfrier'n.", + "Die #Titanic# hätte Angst vor Dir, @.", + "Oh nein!", + "Was die Dinosaurier getötet hat?&Die #Eiszeit#!", + "Nachts ist es #kälter# als draußen.", + "Never gonna #give you up#. Never gonna #let you down#. Never gonna run around and #desert you#.", + "Danke #@#! Aber der Gegenstand ist in einem anderem Schloß!", + "Kalt. Kalt. Kälter. #EISKALT#!", + }; + + static const char* const frenchIceTrapMessages[23] = { + "#Pauvre fou#...", + "Tu es un #glaçon#, Harry!", + "#Sot# que tu es.", + "Ça me #glace# le sang!", + "#Reste au frais#, @.", + "Et c'est la douche #froide#!", + "L'#hiver# vient.", + "#Glacier#!", + "Ça en jette un #froid#.", + "Est-ce que tu as déjà eu des sueurs #froides#?", + "La vengeance est un plat qui se mange #froid#!", + "Dit bonjour aux #Zoras# pour moi!", + "Il faut parfois savoir garder la tête #froide#!", + "Ganondorf utilise #Piège de Glace#! C'est super efficace!", + "Laisse moi briser la #glace#!", + "Balance man..., Cadence man..., Trace la #glace#..., c'est le Cooooolllll Rasta!", + "Le #Titanic# aurait peur de toi, @.", + "Oh non!", + "Qu'est-ce qui a tué les dinosaures?&L'ère #glacière#!", + "L'imbécile réfléchit uniquement quand il s'observe dans la #glace#.", + "Never gonna #give you up#. Never gonna #let you down#. Never gonna run around and #desert you#.", + "Merci #@#! Mais ton objet est dans un autre château!", + "J'espère que ça ne te fait ni chaud, ni #froid#.", + }; + + CustomMessage msg; + + if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) { + msg = CustomMessage( + /*english*/ "This year for Christmas, all you get is #COAL#!", + /*german*/ "This year for Christmas, all you get is #COAL#!", + /*french*/ "Pour Noël, cette année, tu n'auras que du #CHARBON#! %rJoyeux Noël%w!", + { QM_BLUE } + ); + } else { + msg = CustomMessage( + RandomElement(englishIceTrapMessages), + RandomElement(germanIceTrapMessages), + RandomElement(frenchIceTrapMessages), + { QM_BLUE, QM_BLUE, QM_BLUE } + ); } - // We only use this ice trap message for christmas, so we don't want it in the normal ice trap messages rotation - customMessageManager->CreateMessage( - Randomizer::IceTrapRandoMessageTableID, NUM_ICE_TRAP_MESSAGES + 1, - CustomMessage("This year for Christmas, all&you get is %BCOAL%w!", - "This year for Christmas, all&you get is %BCOAL%w!", - "Pour Noël, cette année, tu&n'auras que du %BCHARBON!&%rJoyeux Noël%w!")); + msg.AutoFormat(); + return msg; } static int goronIDs[9] = { 0x3052, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070 }; @@ -3290,7 +3455,6 @@ void Randomizer::CreateCustomMessages() { CreateRupeeMessages(); CreateTriforcePieceMessages(); CreateNaviRandoMessages(); - CreateIceTrapRandoMessages(); CreateFireTempleGoronMessages(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index 3e6df6213..9942fa564 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -20,7 +20,6 @@ #define MAX_SEED_STRING_SIZE 1024 #define NUM_TRIFORCE_PIECE_MESSAGES 6 #define NUM_NAVI_MESSAGES 19 -#define NUM_ICE_TRAP_MESSAGES 23 #define NUM_GORON_MESSAGES 9 class Randomizer { @@ -68,6 +67,7 @@ class Randomizer { CustomMessage GetMapGetItemMessageWithHint(GetItemEntry itemEntry); static void CreateCustomMessages(); static CustomMessage GetRupeeMessage(u16 rupeeTextId); + static CustomMessage GetIceTrapMessage(); static CustomMessage GetTriforcePieceMessage(); bool CheckContainsVanillaItem(RandomizerCheck randoCheck); }; diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 7f15210b8..fee872f93 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2519,11 +2519,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { Player* player = GET_PLAYER(play); if (textId == TEXT_RANDOMIZER_CUSTOM_ITEM) { if (player->getItemEntry.getItemId == RG_ICE_TRAP) { - u16 iceTrapTextId = Random(0, NUM_ICE_TRAP_MESSAGES); - messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::IceTrapRandoMessageTableID, iceTrapTextId); - if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) { - messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::IceTrapRandoMessageTableID, NUM_ICE_TRAP_MESSAGES + 1); - } + messageEntry = Randomizer::GetIceTrapMessage(); } else if (player->getItemEntry.getItemId == RG_TRIFORCE_PIECE) { messageEntry = Randomizer::GetTriforcePieceMessage(); } else {