diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-03-23 16:28:11 +0100 |
|---|---|---|
| committer | funjoker <funjoker109@gmail.com> | 2024-03-28 20:22:03 +0100 |
| commit | 47e27f647147e0bcafc0c992cae699455ab0f10a (patch) | |
| tree | db393c3e23cf7e7dd276ca3356da8f0bc0d0d72d /src | |
| parent | 581c3e330eb558eb5b78e9efbfea7b5295b25ebd (diff) | |
Tools/vmap_extractor: Support new 9.2 wmo group splits (child groups should inherit their parent wmo group id)
(cherry picked from commit 8d45d1dd4824fb001b46aeb8ed79bc20b86f2265)
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 12 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 5 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/wmo.h | 5 |
3 files changed, 20 insertions, 2 deletions
diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 1f9945029d9..3aa0bcd8132 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -226,20 +226,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) diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 4301e758cb5..d883ab3597e 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -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) diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index 4e149c02422..4215b228b4e 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -141,6 +141,9 @@ public: uint16 nBatchA; uint16 nBatchB; uint32 nBatchC, fogIdx, groupLiquid, groupWMOID; + uint32 mogpFlags2; + int16 parentOrFirstChildSplitGroupIndex; + int16 nextSplitChildGroupIndex; int moba_size; int LiquEx_size; @@ -151,6 +154,8 @@ public: std::vector<uint16> DoodadReferences; WMOGroup(std::string const& filename); + WMOGroup(WMOGroup&&) = default; + WMOGroup& operator=(WMOGroup&&) = default; ~WMOGroup(); bool open(WMORoot* rootWMO); |
