Skip to content

Commit

Permalink
Tools/vmap_extractor: Support new 9.2 wmo group splits (child groups …
Browse files Browse the repository at this point in the history
…should inherit their parent wmo group id)
  • Loading branch information
Shauren committed Mar 23, 2024
1 parent 70290f3 commit 8d45d1d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
12 changes: 11 additions & 1 deletion src/tools/vmap4_extractor/vmapexport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,20 +227,30 @@ bool ExtractSingleWmo(std::string& fname)
int Wmo_nVertices = 0;
uint32 groupCount = 0;
//printf("root has %d groups\n", froot->nGroups);
std::vector<WMOGroup> groups;
groups.reserve(froot.groupFileDataIDs.size());
for (std::size_t i = 0; i < froot.groupFileDataIDs.size(); ++i)
{
std::string s = Trinity::StringFormat("FILE{:08X}.xxx", froot.groupFileDataIDs[i]);
WMOGroup fgroup(s);
WMOGroup& fgroup = groups.emplace_back(s);
if (!fgroup.open(&froot))
{
printf("Could not open all Group file for: %s\n", plain_name);
file_ok = false;
break;
}
}

for (WMOGroup& fgroup : groups)
{
if (fgroup.ShouldSkip(&froot))
continue;

if (fgroup.mogpFlags2 & 0x80
&& fgroup.parentOrFirstChildSplitGroupIndex >= 0
&& fgroup.parentOrFirstChildSplitGroupIndex < groups.size())
fgroup.groupWMOID = groups[fgroup.parentOrFirstChildSplitGroupIndex].groupWMOID;

Wmo_nVertices += fgroup.ConvertToVMAPGroupWmo(output, preciseVectorData);
++groupCount;
for (uint16 groupReference : fgroup.DoodadReferences)
Expand Down
5 changes: 4 additions & 1 deletion src/tools/vmap4_extractor/wmo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,10 @@ bool WMOGroup::open(WMORoot* rootWMO)
f.read(&nBatchC, 4);
f.read(&fogIdx, 4);
f.read(&groupLiquid, 4);
f.read(&groupWMOID,4);
f.read(&groupWMOID, 4);
f.read(&mogpFlags2, 4);
f.read(&parentOrFirstChildSplitGroupIndex, 2);
f.read(&nextSplitChildGroupIndex, 2);

// according to WoW.Dev Wiki:
if (rootWMO->flags & 4)
Expand Down
5 changes: 5 additions & 0 deletions src/tools/vmap4_extractor/wmo.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ class WMOGroup
uint16 nBatchA;
uint16 nBatchB;
uint32 nBatchC, fogIdx, groupLiquid, groupWMOID;
uint32 mogpFlags2;
int16 parentOrFirstChildSplitGroupIndex;
int16 nextSplitChildGroupIndex;

int moba_size;
int LiquEx_size;
Expand All @@ -151,6 +154,8 @@ class WMOGroup
std::vector<uint16> DoodadReferences;

WMOGroup(std::string const& filename);
WMOGroup(WMOGroup&&) = default;
WMOGroup& operator=(WMOGroup&&) = default;
~WMOGroup();

bool open(WMORoot* rootWMO);
Expand Down

0 comments on commit 8d45d1d

Please sign in to comment.