MCPcopy Create free account
hub / github.com/AbyssEngine/AbyssEngineOld / DT1

Method DT1

src/Abyss/DataTypes/DT1.cpp:15–185  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13namespace Abyss::DataTypes {
14
15DT1::DT1(const std::string_view path, const Palette &palette) {
16 if (const auto lastSeparator = std::max(path.find_last_of('/'), path.find_last_of('\\')); lastSeparator != std::string_view::npos) {
17 name = std::string(path.substr(lastSeparator + 1));
18 } else {
19 name = std::string(path);
20 }
21
22 auto file = AbyssEngine::getInstance().loadFile(path);
23 Streams::StreamReader sr(file);
24
25 int versionMajor = sr.readUInt32();
26 int versionMinor = sr.readUInt32();
27 if (versionMajor != 7 || versionMinor != 6) {
28 throw std::runtime_error("DT1 version not supported");
29 }
30
31 sr.skip(260);
32 uint32_t numberOfTiles = sr.readUInt32();
33 uint32_t pointerToTileHeaders = sr.readUInt32();
34 sr.seek(pointerToTileHeaders);
35
36 std::vector<DT1TileHeader> tileHeaders(numberOfTiles);
37
38 for (auto &tileHeader : tileHeaders) {
39 tileHeader.direction = sr.readUInt32();
40 tileHeader.roofHeight = sr.readUInt16();
41 tileHeader.soundIndex = sr.readUInt8();
42 tileHeader.animated = sr.readUInt8();
43 tileHeader.height = sr.readInt32();
44 tileHeader.width = sr.readInt32();
45 sr.skip(4);
46 tileHeader.orientation = static_cast<TileType>(sr.readUInt32());
47 tileHeader.mainIndex = sr.readUInt32();
48 tileHeader.subIndex = sr.readUInt32();
49 tileHeader.rarityOrFrameIndex = sr.readUInt32();
50 sr.skip(4);
51 for (DT1SubtileFlag &flag : tileHeader.subtileFlags) {
52 flag = static_cast<DT1SubtileFlag>(sr.readByte());
53 }
54 sr.skip(7);
55 tileHeader.blockHeaderPointer = sr.readUInt32();
56 tileHeader.blockDataLength = sr.readUInt32();
57 tileHeader.numberOfBlocks = sr.readUInt32();
58 sr.skip(12);
59 }
60
61 for (auto &tileHeader : tileHeaders) {
62 auto &currentTile = tiles.emplace_back();
63 currentTile.header = tileHeader;
64
65 std::vector<DT1BlockHeader> blockHeaders(tileHeader.numberOfBlocks);
66 sr.seek(tileHeader.blockHeaderPointer);
67 for (auto &blockHeader : blockHeaders) {
68 blockHeader.posX = sr.readInt16();
69 blockHeader.posY = sr.readInt16();
70 sr.skip(2);
71 blockHeader.gridX = sr.readUInt8();
72 blockHeader.gridY = sr.readUInt8();

Callers

nothing calls this directly

Calls 15

readUInt32Method · 0.80
skipMethod · 0.80
seekMethod · 0.80
readUInt16Method · 0.80
readUInt8Method · 0.80
readInt32Method · 0.80
readByteMethod · 0.80
readInt16Method · 0.80
getRendererMethod · 0.80
readBytesMethod · 0.80
getEntryMethod · 0.80
getBlueMethod · 0.80

Tested by

no test coverage detected