Skip to content

Commit 844c0d4

Browse files
committed
GMSTool:
* Entity name recognition implemented. Minor format fixes.
1 parent d1fc993 commit 844c0d4

File tree

4 files changed

+108
-66
lines changed

4 files changed

+108
-66
lines changed

Diff for: Tools/GMSInfo/include/GMS/ADL/GMSADL.h

+49-40
Original file line numberDiff line numberDiff line change
@@ -17,40 +17,40 @@ namespace ReGlacier
1717
binaryWalker.RequireSpace(sizeof(SGMSUncompressedHeader));
1818

1919
value.TotalEntitiesCountPos = binaryWalker.Read<uint32_t>();
20-
value.Unknown1 = binaryWalker.Read<uint32_t>();
21-
value.Unknown2 = binaryWalker.Read<uint32_t>();
22-
value.Unknown3 = binaryWalker.Read<uint32_t>();
23-
value.DataPos = binaryWalker.Read<uint32_t>();
24-
value.Unknown5 = binaryWalker.Read<uint32_t>();
25-
value.Unknown6 = binaryWalker.Read<uint32_t>();
26-
value.Unknown7 = binaryWalker.Read<uint32_t>();
20+
value.Unknown4 = binaryWalker.Read<uint32_t>();
2721
value.Unknown8 = binaryWalker.Read<uint32_t>();
28-
value.Unknown9 = binaryWalker.Read<uint32_t>();
29-
value.Unknown10 = binaryWalker.Read<uint32_t>();
30-
value.Unknown11 = binaryWalker.Read<uint32_t>();
31-
value.Unknown12 = binaryWalker.Read<uint32_t>();
32-
value.Unknown13 = binaryWalker.Read<uint32_t>();
33-
value.Unknown14 = binaryWalker.Read<uint32_t>();
22+
value.UnknownC = binaryWalker.Read<uint32_t>();
23+
value.DataPos = binaryWalker.Read<uint32_t>();
24+
value.Unknown14 = binaryWalker.Read<uint32_t>();
25+
value.Unknown18 = binaryWalker.Read<uint32_t>();
26+
value.Unknown1C = binaryWalker.Read<uint32_t>();
27+
value.Unknown20 = binaryWalker.Read<uint32_t>();
28+
value.Unknown24 = binaryWalker.Read<uint32_t>();
29+
value.Unknown28 = binaryWalker.Read<uint32_t>();
30+
value.Unknown2C = binaryWalker.Read<uint32_t>();
31+
value.Unknown30 = binaryWalker.Read<uint32_t>();
32+
value.Unknown34 = binaryWalker.Read<uint32_t>();
33+
value.Unknown38 = binaryWalker.Read<uint32_t>();
3434
value.BaseGeomsCount = binaryWalker.Read<uint32_t>();
3535
}
3636

3737
static void Write(BinaryWalker& binaryWalker, const SGMSUncompressedHeader& value)
3838
{
3939
binaryWalker.Write<uint32_t>(value.TotalEntitiesCountPos);
40-
binaryWalker.Write<uint32_t>(value.Unknown1);
41-
binaryWalker.Write<uint32_t>(value.Unknown2);
42-
binaryWalker.Write<uint32_t>(value.Unknown3);
43-
binaryWalker.Write<uint32_t>(value.DataPos);
44-
binaryWalker.Write<uint32_t>(value.Unknown5);
45-
binaryWalker.Write<uint32_t>(value.Unknown6);
46-
binaryWalker.Write<uint32_t>(value.Unknown7);
40+
binaryWalker.Write<uint32_t>(value.Unknown4);
4741
binaryWalker.Write<uint32_t>(value.Unknown8);
48-
binaryWalker.Write<uint32_t>(value.Unknown9);
49-
binaryWalker.Write<uint32_t>(value.Unknown10);
50-
binaryWalker.Write<uint32_t>(value.Unknown11);
51-
binaryWalker.Write<uint32_t>(value.Unknown12);
52-
binaryWalker.Write<uint32_t>(value.Unknown13);
42+
binaryWalker.Write<uint32_t>(value.UnknownC);
43+
binaryWalker.Write<uint32_t>(value.DataPos);
5344
binaryWalker.Write<uint32_t>(value.Unknown14);
45+
binaryWalker.Write<uint32_t>(value.Unknown18);
46+
binaryWalker.Write<uint32_t>(value.Unknown1C);
47+
binaryWalker.Write<uint32_t>(value.Unknown20);
48+
binaryWalker.Write<uint32_t>(value.Unknown24);
49+
binaryWalker.Write<uint32_t>(value.Unknown28);
50+
binaryWalker.Write<uint32_t>(value.Unknown2C);
51+
binaryWalker.Write<uint32_t>(value.Unknown30);
52+
binaryWalker.Write<uint32_t>(value.Unknown34);
53+
binaryWalker.Write<uint32_t>(value.Unknown38);
5454
binaryWalker.Write<uint32_t>(value.BaseGeomsCount);
5555
}
5656
};
@@ -80,26 +80,35 @@ namespace ReGlacier
8080
{
8181
binaryWalker.RequireSpace(sizeof(SGMSBaseGeom));
8282

83-
value.PrimitiveId = binaryWalker.Read<uint32_t>();
84-
value.Unknown2 = binaryWalker.Read<uint32_t>();
85-
value.Unknown3 = binaryWalker.Read<uint32_t>();
86-
value.PrimitiveOffset = binaryWalker.Read<uint32_t>();
87-
value.Unknown5 = binaryWalker.Read<uint32_t>();
88-
value.TypeId = static_cast<Glacier::TypeId>(binaryWalker.Read<uint32_t>());
89-
value.Unknown7 = binaryWalker.Read<uint32_t>();
83+
value.PrimitiveBufGroupNameOffset = binaryWalker.Read<uint32_t>();
84+
value.Unknown4 = binaryWalker.Read<uint32_t>();
9085
value.Unknown8 = binaryWalker.Read<uint32_t>();
86+
value.UnknownC = binaryWalker.Read<uint32_t>();
87+
value.Unknown10 = binaryWalker.Read<uint32_t>();
88+
value.TypeId = static_cast<Glacier::TypeId>(binaryWalker.Read<uint32_t>());
89+
value.Unknown18 = binaryWalker.Read<uint32_t>();
90+
value.Unknown1C = binaryWalker.Read<uint32_t>();
91+
value.PRMOffset = binaryWalker.Read<uint32_t>();
92+
value.Unknown24 = binaryWalker.Read<uint32_t>();
93+
value.Unknown28 = binaryWalker.Read<uint32_t>();
94+
value.Unknown2C = binaryWalker.Read<uint32_t>();
95+
value.Unknown30 = binaryWalker.Read<uint32_t>();
96+
value.Unknown34 = binaryWalker.Read<uint32_t>();
97+
value.Unknown38 = binaryWalker.Read<uint32_t>();
98+
value.Unknown3C = binaryWalker.Read<uint32_t>();
9199
}
92100

93101
static void Write(BinaryWalker& binaryWalker, const SGMSBaseGeom& value)
94102
{
95-
binaryWalker.Write<uint32_t>(value.PrimitiveId);
96-
binaryWalker.Write<uint32_t>(value.Unknown2);
97-
binaryWalker.Write<uint32_t>(value.Unknown3);
98-
binaryWalker.Write<uint32_t>(value.PrimitiveOffset);
99-
binaryWalker.Write<uint32_t>(value.Unknown5);
100-
binaryWalker.Write<uint32_t>(static_cast<uint32_t>(value.TypeId));
101-
binaryWalker.Write<uint32_t>(value.Unknown7);
102-
binaryWalker.Write<uint32_t>(value.Unknown8);
103+
throw std::exception { "NOT IMPLEMENTED" };
104+
// binaryWalker.Write<uint32_t>(value.PrimitiveId);
105+
// binaryWalker.Write<uint32_t>(value.Unknown2);
106+
// binaryWalker.Write<uint32_t>(value.Unknown3);
107+
// binaryWalker.Write<uint32_t>(value.PrimitiveOffset);
108+
// binaryWalker.Write<uint32_t>(value.Unknown5);
109+
// binaryWalker.Write<uint32_t>(static_cast<uint32_t>(value.TypeId));
110+
// binaryWalker.Write<uint32_t>(value.Unknown7);
111+
// binaryWalker.Write<uint32_t>(value.Unknown8);
103112
}
104113
};
105114
}

Diff for: Tools/GMSInfo/include/GMS/GMS.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ namespace ReGlacier
4545
private:
4646
int32_t m_totalEntities;
4747

48-
std::vector<SGMSBaseGeom> m_geoms;
48+
std::vector<GMSComposedInfoHolder> m_geoms;
4949
};
5050
}

Diff for: Tools/GMSInfo/include/GMS/GMSTypes.h

+35-20
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,20 @@ namespace ReGlacier
4949
struct SGMSUncompressedHeader
5050
{
5151
uint32_t TotalEntitiesCountPos; //0x0
52-
uint32_t Unknown1; //0x4
53-
uint32_t Unknown2; //0x8
54-
uint32_t Unknown3; //0xC
52+
uint32_t Unknown4; //0x4
53+
uint32_t Unknown8; //0x8
54+
uint32_t UnknownC; //0xC
5555
uint32_t DataPos; //0x10
56-
uint32_t Unknown5; //0x14
57-
uint32_t Unknown6; //0x18
58-
uint32_t Unknown7; //0x1C
59-
uint32_t Unknown8; //0x20
60-
uint32_t Unknown9; //0x24
61-
uint32_t Unknown10; //0x28
62-
uint32_t Unknown11; //0x2C
63-
uint32_t Unknown12; //0x30
64-
uint32_t Unknown13; //0x34
65-
uint32_t Unknown14; //0x38
56+
uint32_t Unknown14; //0x14
57+
uint32_t Unknown18; //0x18
58+
uint32_t Unknown1C; //0x1C
59+
uint32_t Unknown20; //0x20
60+
uint32_t Unknown24; //0x24
61+
uint32_t Unknown28; //0x28
62+
uint32_t Unknown2C; //0x2C
63+
uint32_t Unknown30; //0x30
64+
uint32_t Unknown34; //0x34
65+
uint32_t Unknown38; //0x38
6666
uint32_t BaseGeomsCount; //0x3C
6767
};
6868

@@ -74,13 +74,28 @@ namespace ReGlacier
7474

7575
struct SGMSBaseGeom
7676
{
77-
uint32_t PrimitiveId; //+0x0
78-
uint32_t Unknown2; //+0x4
79-
uint32_t Unknown3; //+0x8
80-
uint32_t PrimitiveOffset; //+0xC
81-
uint32_t Unknown5; //+0x10
77+
uint32_t PrimitiveBufGroupNameOffset; //+0x0
78+
uint32_t Unknown4; //+0x4
79+
uint32_t Unknown8; //+0x8
80+
uint32_t UnknownC; //+0xC
81+
uint32_t Unknown10; //+0x10
8282
Glacier::TypeId TypeId; //+0x14
83-
uint32_t Unknown7; //+0x16
84-
uint32_t Unknown8; //+0x18
83+
uint32_t Unknown18; //+0x18
84+
uint32_t Unknown1C; //+0x1C
85+
uint32_t PRMOffset; //+0x20
86+
uint32_t Unknown24; //+0x24
87+
uint32_t Unknown28; //+0x28;
88+
uint32_t Unknown2C; //+0x2C
89+
uint32_t Unknown30; //+0x30
90+
uint32_t Unknown34; //+0x34
91+
uint32_t Unknown38; //+0x38
92+
uint32_t Unknown3C; //+0x3C
93+
};
94+
95+
struct GMSComposedInfoHolder
96+
{
97+
int id;
98+
SGMSBaseGeom baseGeom;
99+
std::string groupName;
85100
};
86101
}

Diff for: Tools/GMSInfo/source/GMS/GMS.cpp

+23-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <utility>
1616
#include <fstream>
1717
#include <numeric>
18+
#include <set>
1819

1920
extern "C" {
2021
#include <zlib.h>
@@ -104,15 +105,27 @@ namespace ReGlacier
104105
return false;
105106
}
106107

108+
size_t bufBufferSize = 0;
109+
auto bufBuffer = m_container->Read(m_assets->BUF, bufBufferSize);
110+
if (!bufBuffer)
111+
{
112+
spdlog::error("GMS::Load| Failed to load BUF {}", m_assets->BUF);
113+
return false;
114+
}
115+
107116
BinaryWalker gmsBinaryWalker(gmsBuffer.get(), gmsBufferSize);
108117
BinaryWalker prmBinaryWalker(prmBuffer.get(), prmBufferSize);
118+
BinaryWalker bufBinaryWalker(bufBuffer.get(), bufBufferSize);
109119

110120
SGMSUncompressedHeader header {};
111121
BinaryWalkerADL<SGMSUncompressedHeader>::Read(gmsBinaryWalker, header);
112122

123+
spdlog::info("TotalEntitiesCountPos: {:X}", header.TotalEntitiesCountPos);
124+
113125
gmsBinaryWalker.Seek(header.TotalEntitiesCountPos, BinaryWalker::SeekType::FROM_BEGIN);
114126
m_totalEntities = gmsBinaryWalker.Read<int32_t>();
115-
spdlog::info("GMS total entities: {}", m_totalEntities);
127+
128+
spdlog::info("At TECP: +{:X}", gmsBinaryWalker.GetPosition());
116129

117130
m_geoms.reserve(m_totalEntities);
118131

@@ -124,8 +137,13 @@ namespace ReGlacier
124137

125138
gmsBinaryWalker.Seek(4 * (entry.TypeInfoPos & 0xFFFFFF), BinaryWalker::SeekType::FROM_BEGIN); //& 0xFFFFFF IT'S VERY IMPORTANT!!!
126139

127-
auto& baseGeom = m_geoms.emplace_back();
128-
BinaryWalkerADL<SGMSBaseGeom>::Read(gmsBinaryWalker, baseGeom);
140+
auto& info = m_geoms.emplace_back();
141+
info.id = entryId;
142+
143+
BinaryWalkerADL<SGMSBaseGeom>::Read(gmsBinaryWalker, info.baseGeom);
144+
145+
bufBinaryWalker.Seek(info.baseGeom.PrimitiveBufGroupNameOffset, BinaryWalker::BEGIN);
146+
BinaryWalkerADL<std::string>::Read(bufBinaryWalker, info.groupName);
129147
}
130148

131149
m_isLoaded = true;
@@ -194,10 +212,10 @@ namespace ReGlacier
194212

195213
{
196214
spdlog::info("GMS Geoms: ");
197-
spdlog::info(" ID | Type Name | Type ID ");
215+
spdlog::info(" ID | Entity Name | Type Name | Type ID ");
198216
for (const auto& geom : m_geoms)
199217
{
200-
spdlog::info("{:08X} {} {:X}", geom.PrimitiveId, Glacier::GetTypeIdAsString(geom.TypeId), geom.TypeId);
218+
spdlog::info("{:08X} {:33} {:23} {:8X}", geom.id, geom.groupName, Glacier::GetTypeIdAsString(geom.baseGeom.TypeId), geom.baseGeom.TypeId);
201219
}
202220
}
203221
}

0 commit comments

Comments
 (0)