Rando: Add randomized ice trap messages (#1559)

* Add: Randomized Ice Trap Messages

* Add text to freestanding items, other tweaks/fixes

* More messages

* ADD: French Translation + 1 Extra

* %w is not %UwU%

* TWEAK: One msall breakline

* Add German & small text tweak

* Minor code optimization

* Updated French

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
This commit is contained in:
aMannus 2022-10-01 15:56:25 +02:00 committed by GitHub
parent 8888fb2ec1
commit fba4839705
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 125 additions and 14 deletions

View File

@ -40,6 +40,7 @@ const std::string Randomizer::hintMessageTableID = "RandomizerHints";
const std::string Randomizer::merchantMessageTableID = "RandomizerMerchants";
const std::string Randomizer::rupeeMessageTableID = "RandomizerRupees";
const std::string Randomizer::NaviRandoMessageTableID = "RandomizerNavi";
const std::string Randomizer::IceTrapRandoMessageTableID = "RandomizerIceTrap";
static const char* englishRupeeNames[80] = {
"Rupees", "Bitcoin", "Bananas", "Cornflakes", "Gummybears", "Floopies", "Dollars",
@ -4824,16 +4825,9 @@ void CreateGetItemMessages(std::vector<GetItemMessage> messageEntries) {
CustomMessageManager* customMessageManager = CustomMessageManager::Instance;
customMessageManager->AddCustomMessageTable(Randomizer::getItemMessageTableID);
for (GetItemMessage messageEntry : messageEntries) {
if (messageEntry.giid == RG_ICE_TRAP) {
customMessageManager->CreateMessage(Randomizer::getItemMessageTableID, messageEntry.giid,
{ TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM, messageEntry.english,
messageEntry.german, messageEntry.french });
} else {
customMessageManager->CreateGetItemMessage(Randomizer::getItemMessageTableID, messageEntry.giid,
messageEntry.iid,
{ TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM, messageEntry.english,
messageEntry.german, messageEntry.french });
}
customMessageManager->CreateGetItemMessage(Randomizer::getItemMessageTableID, messageEntry.giid, messageEntry.iid,
{ TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM, messageEntry.english,
messageEntry.german, messageEntry.french });
}
}
@ -4989,12 +4983,115 @@ void CreateNaviRandoMessages() {
}
}
CustomMessageMinimal 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 %bhurt you%w.",
"Never gonna %bgive you up%w. Never&gonna %blet you down%w. Never gonna&run around and %bhurt you%w.",
"Never gonna %bgive you up%w. Never&gonna %blet you down%w. Never gonna&run around and %bhurt you%w." },
{ "Thank you %b@%w!&But your item is in another castle!",
"Danke %b@%w!&Aber der Gegenstand ist in&einem anderem Schloss!",
"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." },
};
void CreateIceTrapRandoMessages() {
CustomMessageManager* customMessageManager = CustomMessageManager::Instance;
customMessageManager->AddCustomMessageTable(Randomizer::IceTrapRandoMessageTableID);
for (u8 i = 0; i <= (NUM_ICE_TRAP_MESSAGES - 1); i++) {
customMessageManager->CreateMessage(Randomizer::IceTrapRandoMessageTableID, i,
{ TEXTBOX_TYPE_BLACK, TEXTBOX_POS_BOTTOM, IceTrapMessages[i].english,
IceTrapMessages[i].german, IceTrapMessages[i].french });
}
}
void Randomizer::CreateCustomMessages() {
// RANDTODO: Translate into french and german and replace GIMESSAGE_UNTRANSLATED
// with GIMESSAGE(getItemID, itemID, english, german, french).
const std::vector<GetItemMessage> getItemMessages = {
GIMESSAGE(RG_ICE_TRAP, ITEM_NONE, "\x08\x06\x30You are a %bFOWL%w!",
"\x08\x06\x15 Du bist ein %bDUMMKOPF%w!", "\x08\x06\x50%bIDIOT%w"),
GIMESSAGE_NO_GERMAN(
RG_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE, "You got a %rBottle with Blue &Fire%w! Use it to melt Red Ice!",
"Vous obtenez une %rBouteille avec&une Flamme Bleue%w! Utilisez-la&pour faire fondre la %rGlace&Rouge%w!"),
@ -5115,6 +5212,7 @@ void Randomizer::CreateCustomMessages() {
CreateGetItemMessages(getItemMessages);
CreateRupeeMessages();
CreateNaviRandoMessages();
CreateIceTrapRandoMessages();
}
class ExtendedVanillaTableInvalidItemIdException: public std::exception {

View File

@ -9,6 +9,7 @@
#include <soh/Enhancements/custom-message/CustomMessageManager.h>
#define NUM_NAVI_MESSAGES 19
#define NUM_ICE_TRAP_MESSAGES 23
class Randomizer {
private:
@ -35,6 +36,7 @@ class Randomizer {
static const std::string merchantMessageTableID;
static const std::string rupeeMessageTableID;
static const std::string NaviRandoMessageTableID;
static const std::string IceTrapRandoMessageTableID;
// Public for now to be accessed by SaveManager, will be made private again soon :tm:
std::unordered_map<RandomizerInf, bool> trialsRequired;

View File

@ -1660,6 +1660,11 @@ extern "C" CustomMessageEntry Randomizer_GetNaviMessage() {
return CustomMessageManager::Instance->RetrieveMessage(Randomizer::NaviRandoMessageTableID, naviTextId);
}
extern "C" CustomMessageEntry Randomizer_GetIceTrapMessage() {
u16 iceTrapTextId = rand() % NUM_ICE_TRAP_MESSAGES;
return CustomMessageManager::Instance->RetrieveMessage(Randomizer::IceTrapRandoMessageTableID, iceTrapTextId);
}
extern "C" CustomMessageEntry Randomizer_GetAltarMessage() {
return (LINK_IS_ADULT)
? CustomMessageManager::Instance->RetrieveMessage(Randomizer::hintMessageTableID, TEXT_ALTAR_ADULT)
@ -1768,8 +1773,12 @@ extern "C" int CustomMessage_RetrieveIfExists(GlobalContext* globalCtx) {
CustomMessageEntry messageEntry;
if (gSaveContext.n64ddFlag) {
if (textId == TEXT_RANDOMIZER_CUSTOM_ITEM) {
messageEntry =
Randomizer_GetCustomGetItemMessage(GET_PLAYER(globalCtx));
Player* player = GET_PLAYER(globalCtx);
if (player->getItemEntry.getItemId == RG_ICE_TRAP) {
messageEntry = Randomizer_GetIceTrapMessage();
} else {
messageEntry = Randomizer_GetCustomGetItemMessage(player);
}
} else if (textId == TEXT_RANDOMIZER_GOSSIP_STONE_HINTS && Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) != 0 &&
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == 1 ||
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == 2 &&

View File

@ -6240,6 +6240,8 @@ s32 func_8083E5A8(Player* this, GlobalContext* globalCtx) {
this->actor.colChkInfo.damage = 0;
func_80837C0C(globalCtx, this, 3, 0.0f, 0.0f, 0, 20);
Player_SetPendingFlag(this, globalCtx);
Message_StartTextbox(globalCtx, 0xF8, NULL);
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
this->getItemId = GI_NONE;
this->getItemEntry = (GetItemEntry) GET_ITEM_NONE;
return 1;