diff options
author | killerwife <killerwife@gmail.com> | 2021-04-24 14:58:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-24 14:58:16 +0200 |
commit | d5f1fefe7f6772b11e9fbb052bfd36be9bda98e2 (patch) | |
tree | 18922f180e9d5fbee0e5a498a43ee3daadb41304 /src | |
parent | 8db2ef9cdd415ed0d4897ec4d664ddba358cbaa1 (diff) |
Vmap: Introduce skipping of antiportals and unreachable mogp (#26331)
* Vmap: Introduce skipping of antiportals and unreachable mogp
* Reduce differences with master branch
* Update VMAP and MMAP versions
* Update MMAPs version
Co-authored-by: jackpoz <giacomopoz@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Collision/Maps/MapDefines.h | 2 | ||||
-rw-r--r-- | src/common/Collision/VMapDefinitions.h | 4 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 7 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 24 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.h | 2 |
5 files changed, 33 insertions, 6 deletions
diff --git a/src/common/Collision/Maps/MapDefines.h b/src/common/Collision/Maps/MapDefines.h index bf35595af1d..6e7aa4410e5 100644 --- a/src/common/Collision/Maps/MapDefines.h +++ b/src/common/Collision/Maps/MapDefines.h @@ -22,7 +22,7 @@ #include "DetourNavMesh.h" const uint32 MMAP_MAGIC = 0x4d4d4150; // 'MMAP' -#define MMAP_VERSION 14 +#define MMAP_VERSION 15 struct MmapTileHeader { diff --git a/src/common/Collision/VMapDefinitions.h b/src/common/Collision/VMapDefinitions.h index 35215128a9d..a2702b32609 100644 --- a/src/common/Collision/VMapDefinitions.h +++ b/src/common/Collision/VMapDefinitions.h @@ -24,8 +24,8 @@ namespace VMAP { - const char VMAP_MAGIC[] = "VMAP_4.7"; - const char RAW_VMAP_MAGIC[] = "VMAP047"; // used in extracted vmap files with raw data + const char VMAP_MAGIC[] = "VMAP_4.8"; + const char RAW_VMAP_MAGIC[] = "VMAP048"; // used in extracted vmap files with raw data const char GAMEOBJECT_MODELS[] = "GameObjectModels.dtree"; // defined in TileAssembler.cpp currently... diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 8c0e59e8f9d..23223a9a212 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -144,6 +144,7 @@ bool ExtractSingleWmo(std::string& fname) WMODoodadData& doodads = WmoDoodads[plain_name]; std::swap(doodads, froot.DoodadData); int Wmo_nVertices = 0; + uint32 groupCount = 0; //printf("root has %d groups\n", froot->nGroups); if (froot.nGroups !=0) { @@ -161,7 +162,11 @@ bool ExtractSingleWmo(std::string& fname) break; } + if (fgroup.ShouldSkip(&froot)) + continue; + Wmo_nVertices += fgroup.ConvertToVMAPGroupWmo(output, preciseVectorData); + ++groupCount; for (uint16 groupReference : fgroup.DoodadReferences) { if (groupReference >= doodads.Spawns.size()) @@ -178,6 +183,8 @@ bool ExtractSingleWmo(std::string& fname) fseek(output, 8, SEEK_SET); // store the correct no of vertices fwrite(&Wmo_nVertices,sizeof(int),1,output); + // store the correct no of groups + fwrite(&groupCount, sizeof(uint32), 1, output); fclose(output); // Delete the extracted file in the case of an error diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 13900f9b80d..beb48e231a6 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -106,6 +106,11 @@ bool WMORoot::open() DoodadData.Spawns.resize(size / sizeof(WMO::MODD)); f.read(DoodadData.Spawns.data(), size); } + else if (!strcmp(fourcc, "MOGN")) + { + GroupNames.resize(size); + f.read(GroupNames.data(), size); + } /* else if (!strcmp(fourcc,"MOTX")) { @@ -113,9 +118,6 @@ bool WMORoot::open() else if (!strcmp(fourcc,"MOMT")) { } - else if (!strcmp(fourcc,"MOGN")) - { - } else if (!strcmp(fourcc,"MOGI")) { } @@ -498,6 +500,22 @@ uint32 WMOGroup::GetLiquidTypeId(uint32 liquidTypeId) return liquidTypeId; } +bool WMOGroup::ShouldSkip(WMORoot const* root) const +{ + // skip unreachable + if (mogpFlags & 0x80) + return true; + + // skip antiportals + if (mogpFlags & 0x4000000) + return true; + + if (groupName < int32(root->GroupNames.size()) && !strcmp(&root->GroupNames[groupName], "antiportal")) + return true; + + return false; +} + WMOGroup::~WMOGroup() { delete [] MOPY; diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index a00e26b91a1..f4d98cfebf6 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -84,6 +84,7 @@ public: float bbcorn1[3]; float bbcorn2[3]; + std::vector<char> GroupNames; WMODoodadData DoodadData; std::unordered_set<uint32> ValidDoodadNames; @@ -153,6 +154,7 @@ public: bool open(WMORoot* rootWMO); int ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData); uint32 GetLiquidTypeId(uint32 liquidTypeId); + bool ShouldSkip(WMORoot const* root) const; }; namespace MapObject |