From 0fca1019a24357c7ebf7dd68940d629d963732f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Amaro=20Mart=C3=ADnez?= Date: Tue, 22 Nov 2022 14:23:48 -0500 Subject: [PATCH] Do not use Yes/No hardcoded options for Better Owl (#2002) --- soh/soh/z_message_OTR.cpp | 48 +++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/soh/soh/z_message_OTR.cpp b/soh/soh/z_message_OTR.cpp index 5d5c4b43e..7bb65efdc 100644 --- a/soh/soh/z_message_OTR.cpp +++ b/soh/soh/z_message_OTR.cpp @@ -28,41 +28,35 @@ MessageTableEntry* OTRMessage_LoadTable(const char* filePath, bool isNES) { // Look for Owl Text if (file->messages[i].id == 0x2066) { // Create a new message based on the Owl Text - char* kaeporaPatch = (char*)malloc(sizeof(char) * file->messages[i].msg.size()); - file->messages[i].msg.copy(kaeporaPatch, file->messages[i].msg.size(), 0); + uint32_t kaeporaMsgSize = file->messages[i].msg.size(); + char* kaeporaOg = (char*)malloc(sizeof(char) * kaeporaMsgSize); + char* kaeporaPatch = (char*)malloc(sizeof(char) * kaeporaMsgSize); + file->messages[i].msg.copy(kaeporaOg, kaeporaMsgSize, 0); + file->messages[i].msg.copy(kaeporaPatch, kaeporaMsgSize, 0); + size_t colorPos = file->messages[i].msg.find(QM_GREEN); + size_t newLinePos = colorPos + file->messages[i].msg.substr(colorPos + 1).find(CTRL_NEWLINE) + 1; + size_t endColorPos = newLinePos + file->messages[i].msg.substr(newLinePos).find(CTRL_COLOR); + size_t NoLength = newLinePos - (colorPos + 1); + size_t YesLength = endColorPos - (newLinePos + 1); // Swap the order of yes and no in this new message - if (filePath == "text/nes_message_data_static/nes_message_data_static") { - kaeporaPatch[26] = 'Y'; - kaeporaPatch[27] = 'e'; - kaeporaPatch[28] = 's'; - kaeporaPatch[29] = 1; - kaeporaPatch[30] = 'N'; - kaeporaPatch[31] = 'o'; - } else if (filePath == "text/ger_message_data_static/ger_message_data_static") { - kaeporaPatch[30] = 'J'; - kaeporaPatch[31] = 'a'; - kaeporaPatch[32] = '!'; - kaeporaPatch[33] = 1; - kaeporaPatch[34] = 'N'; - kaeporaPatch[35] = 'e'; - kaeporaPatch[36] = 'i'; - kaeporaPatch[37] = 'n'; - } else { - kaeporaPatch[26] = 'O'; - kaeporaPatch[27] = 'u'; - kaeporaPatch[28] = 'i'; - kaeporaPatch[29] = 1; - kaeporaPatch[30] = 'N'; - kaeporaPatch[31] = 'o'; - kaeporaPatch[32] = 'n'; + size_t yes = 0; + while (yes < YesLength) { + kaeporaPatch[colorPos + yes + 1] = kaeporaOg[newLinePos + yes + 1]; + yes++; + } + kaeporaPatch[colorPos + yes + 1] = CTRL_NEWLINE; + size_t no = 0; + while (no < NoLength) { + kaeporaPatch[colorPos + yes + 2 + no] = kaeporaOg[colorPos + 1 + no]; + no++; } // load data into message table[file->messages.size()].textId = 0x71B3; table[file->messages.size()].typePos = (file->messages[i].textboxType << 4) | file->messages[i].textboxYPos; table[file->messages.size()].segment = kaeporaPatch; - table[file->messages.size()].msgSize = file->messages[i].msg.size(); + table[file->messages.size()].msgSize = kaeporaMsgSize; } table[i].textId = file->messages[i].id;