#include "2s2h/resource/importer/TextMMFactory.h" #include "2s2h/resource/type/TextMM.h" #include namespace SOH { std::shared_ptr ResourceFactoryBinaryTextMMV0::ReadResource(std::shared_ptr file, std::shared_ptr initData) { if (!FileHasValidFormatAndReader(file, initData)) { return nullptr; } auto text = std::make_shared(initData); auto reader = std::get>(file->Reader); const uint32_t msgCount = reader->ReadUInt32(); text->messages.reserve(msgCount); for (uint32_t i = 0; i < msgCount; i++) { MessageEntryMM entry; entry.id = reader->ReadUInt16(); entry.textboxType = reader->ReadUByte(); entry.textboxYPos = reader->ReadUByte(); // BENTODO: the new ZAPD reads and exports this as an int16 for JP but nothing currently uses that and the game // expects an int8. Use this for now. entry.icon = (int8_t)reader->ReadUInt16(); entry.nextMessageID = reader->ReadUInt16(); entry.firstItemCost = reader->ReadUInt16(); entry.secondItemCost = reader->ReadUInt16(); entry.msg = reader->ReadString(); text->messages.push_back(entry); } return text; } std::shared_ptr ResourceFactoryXMLTextMMV0::ReadResource(std::shared_ptr file, std::shared_ptr initData) { if (!FileHasValidFormatAndReader(file, initData)) { return nullptr; } auto text = std::make_shared(initData); auto reader = std::get>(file->Reader)->FirstChildElement(); auto child = reader->FirstChildElement(); while (child != nullptr) { std::string childName = child->Name(); if (childName == "TextEntry") { MessageEntryMM entry; entry.id = child->IntAttribute("ID"); entry.textboxType = child->IntAttribute("TextboxType"); entry.textboxYPos = child->IntAttribute("TextboxYPos"); // BENTODO: MM Unique Fields entry.msg = child->Attribute("Message"); entry.msg += "\x2"; text->messages.push_back(entry); int bp = 0; } child = child->NextSiblingElement(); } return text; } } // namespace SOH