Files

68 lines
2.9 KiB
C++
Raw Permalink Normal View History

2024-01-05 10:15:41 -06:00
#include "BenPort.h"
#include <libultraship/libultraship.h>
#include "2s2h/resource/type/Scene.h"
#include <utils/StringHelper.h>
2024-01-05 10:15:41 -06:00
#include "global.h"
#include "2s2h/resource/type/TextMM.h"
#include <message_data_static.h>
2024-05-24 12:34:35 -05:00
extern "C" MessageTableEntry* sMessageTableNES;
extern "C" MessageTableEntry* sMessageTableCredits;
2024-01-05 10:15:41 -06:00
MessageTableEntry* OTRMessage_LoadTable(const char* filePath, bool isNES) {
2024-05-22 09:52:56 -04:00
auto file = std::static_pointer_cast<SOH::TextMM>(
Ship::Context::GetInstance()->GetResourceManager()->LoadResource(filePath));
2024-01-05 10:15:41 -06:00
if (file == nullptr)
return nullptr;
2024-05-22 09:52:56 -04:00
2024-01-05 10:15:41 -06:00
// Allocate room for an additional message
// OTRTODO: Should not be malloc'ing here. It's fine for now since we check elsewhere that the message table is
// already null.
MessageTableEntry* table = (MessageTableEntry*)malloc(sizeof(MessageTableEntry) * (file->messages.size() + 1));
for (size_t i = 0; i < file->messages.size(); i++) {
table[i].textId = file->messages[i].id;
table[i].typePos = (file->messages[i].textboxType << 4) | file->messages[i].textboxYPos;
table[i].segment = (const char*)malloc(file->messages[i].msg.size() + 11);
auto segment = (char*)table[i].segment;
segment[0] = file->messages[i].textboxType;
segment[1] = file->messages[i].textboxYPos;
segment[2] = file->messages[i].icon;
segment[3] = (file->messages[i].nextMessageID & 0xFF00) >> 8;
segment[4] = (file->messages[i].nextMessageID & 0x00FF);
segment[5] = (file->messages[i].firstItemCost & 0xFF00) >> 8;
segment[6] = (file->messages[i].firstItemCost & 0x00FF);
segment[7] = (file->messages[i].secondItemCost & 0xFF00) >> 8;
segment[8] = (file->messages[i].secondItemCost & 0x00FF);
segment[9] = 0xFF;
segment[10] = 0xFF;
2024-01-05 10:15:41 -06:00
memcpy((void*)(&table[i].segment[11]), file->messages[i].msg.c_str(), file->messages[i].msg.size());
table[i].msgSize = file->messages[i].msg.size() + 11;
2024-05-22 09:52:56 -04:00
// if (isNES && file->messages[i].id == 0xFFFC)
//_message_0xFFFC_nes = (char*)file->messages[i].msg.c_str();
2024-01-05 10:15:41 -06:00
}
return table;
}
2024-05-24 12:34:35 -05:00
extern "C" void OTRMessage_Init() {
sMessageTableNES = OTRMessage_LoadTable("text/message_data_static/message_data_static", true);
2024-01-05 10:15:41 -06:00
2024-05-22 09:52:56 -04:00
auto file2 = std::static_pointer_cast<SOH::TextMM>(Ship::Context::GetInstance()->GetResourceManager()->LoadResource(
"text/staff_message_data_static/staff_message_data_static"));
2024-05-24 12:34:35 -05:00
sMessageTableCredits = (MessageTableEntry*)malloc(sizeof(MessageTableEntry) * file2->messages.size());
2024-01-05 10:15:41 -06:00
2024-05-22 09:52:56 -04:00
for (size_t i = 0; i < file2->messages.size(); i++) {
2024-05-24 12:34:35 -05:00
sMessageTableCredits[i].textId = file2->messages[i].id;
sMessageTableCredits[i].typePos = (file2->messages[i].textboxType << 4) | file2->messages[i].textboxYPos;
sMessageTableCredits[i].segment = file2->messages[i].msg.c_str();
sMessageTableCredits[i].msgSize = file2->messages[i].msg.size();
2024-05-22 09:52:56 -04:00
}
2024-01-05 10:15:41 -06:00
}