blob: 9f3d1746e1feb8930546b5099eeec527eba16483 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#include "2s2h/resource/importer/TextMMFactory.h"
#include "2s2h/resource/type/TextMM.h"
#include <tinyxml2.h>
namespace SOH {
std::shared_ptr<Ship::IResource>
ResourceFactoryBinaryTextMMV0::ReadResource(std::shared_ptr<Ship::File> file,
std::shared_ptr<Ship::ResourceInitData> initData) {
if (!FileHasValidFormatAndReader(file, initData)) {
return nullptr;
}
auto text = std::make_shared<TextMM>(initData);
auto reader = std::get<std::shared_ptr<Ship::BinaryReader>>(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<Ship::IResource>
ResourceFactoryXMLTextMMV0::ReadResource(std::shared_ptr<Ship::File> file,
std::shared_ptr<Ship::ResourceInitData> initData) {
if (!FileHasValidFormatAndReader(file, initData)) {
return nullptr;
}
auto text = std::make_shared<TextMM>(initData);
auto reader = std::get<std::shared_ptr<tinyxml2::XMLDocument>>(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
|