mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-07 02:40:30 -05:00
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:
parent
8888fb2ec1
commit
fba4839705
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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 &&
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user