diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Collision/VMapDefinitions.h | 4 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 2 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 26 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.h | 20 |
4 files changed, 35 insertions, 17 deletions
diff --git a/src/common/Collision/VMapDefinitions.h b/src/common/Collision/VMapDefinitions.h index eea344c97c5..d5beac48a3c 100644 --- a/src/common/Collision/VMapDefinitions.h +++ b/src/common/Collision/VMapDefinitions.h @@ -25,8 +25,8 @@ namespace VMAP { - const char VMAP_MAGIC[] = "VMAP_4.2"; - const char RAW_VMAP_MAGIC[] = "VMAP042"; // used in extracted vmap files with raw data + const char VMAP_MAGIC[] = "VMAP_4.3"; + const char RAW_VMAP_MAGIC[] = "VMAP043"; // 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 5bfe9714cec..a93e0f88308 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -68,7 +68,7 @@ bool preciseVectorData = false; //static const char * szWorkDirMaps = ".\\Maps"; const char* szWorkDirWmo = "./Buildings"; -const char* szRawVMAPMagic = "VMAP042"; +const char* szRawVMAPMagic = "VMAP043"; // Local testing functions diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index b1b1df2983b..a46e786bef5 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -348,9 +348,13 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE *output, WMORoot *rootWMO, bool precise for (int i=0; i<nTriangles; ++i) { // Skip no collision triangles - if (MOPY[2*i]&WMO_MATERIAL_NO_COLLISION || - !(MOPY[2*i]&(WMO_MATERIAL_HINT|WMO_MATERIAL_COLLIDE_HIT)) ) + bool isRenderFace = (MOPY[2 * i] & WMO_MATERIAL_RENDER) && !(MOPY[2 * i] & WMO_MATERIAL_DETAIL); + bool isDetail = (MOPY[2 * i] & WMO_MATERIAL_DETAIL) != 0; + bool isCollision = (MOPY[2 * i] & WMO_MATERIAL_COLLISION) != 0; + + if (!isRenderFace && !isDetail && !isCollision) continue; + // Use this triangle for (int j=0; j<3; ++j) { @@ -482,7 +486,7 @@ WMOGroup::~WMOGroup() } WMOInstance::WMOInstance(MPQFile& f, char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile) - : currx(0), curry(0), wmo(NULL), doodadset(0), pos(), indx(0), id(0), d2(0), d3(0) + : currx(0), curry(0), wmo(NULL), doodadset(0), pos(), indx(0), id(0) { float ff[3]; f.read(&id, 4); @@ -491,15 +495,25 @@ WMOInstance::WMOInstance(MPQFile& f, char const* WmoInstName, uint32 mapID, uint f.read(ff,12); rot = Vec3D(ff[0],ff[1],ff[2]); f.read(ff,12); - pos2 = Vec3D(ff[0],ff[1],ff[2]); + pos2 = Vec3D(ff[0],ff[1],ff[2]); // bounding box corners f.read(ff,12); - pos3 = Vec3D(ff[0],ff[1],ff[2]); - f.read(&d2,4); + pos3 = Vec3D(ff[0],ff[1],ff[2]); // bounding box corners + + uint16 fflags; + f.read(&fflags, 2); + + uint16 doodadSet; + f.read(&doodadSet, 2); uint16 trash,adtId; f.read(&adtId,2); f.read(&trash,2); + // destructible wmo, do not dump. we can handle the vmap for these + // in dynamic tree (gameobject vmaps) + if ((fflags & 0x01) != 0) + return; + //-----------add_in _dir_file---------------- char tempname[512]; diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index 4b06c775d56..813ff50d756 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -27,13 +27,17 @@ #include "loadlib/loadlib.h" // MOPY flags -#define WMO_MATERIAL_NOCAMCOLLIDE 0x01 -#define WMO_MATERIAL_DETAIL 0x02 -#define WMO_MATERIAL_NO_COLLISION 0x04 -#define WMO_MATERIAL_HINT 0x08 -#define WMO_MATERIAL_RENDER 0x10 -#define WMO_MATERIAL_COLLIDE_HIT 0x20 -#define WMO_MATERIAL_WALL_SURFACE 0x40 +enum MopyFlags +{ + WMO_MATERIAL_UNK01 = 0x01, + WMO_MATERIAL_NOCAMCOLLIDE = 0x02, + WMO_MATERIAL_DETAIL = 0x04, + WMO_MATERIAL_COLLISION = 0x08, + WMO_MATERIAL_HINT = 0x10, + WMO_MATERIAL_RENDER = 0x20, + WMO_MATERIAL_WALL_SURFACE = 0x40, // Guessed + WMO_MATERIAL_COLLIDE_HIT = 0x80 +}; class WMOInstance; class WMOManager; @@ -128,7 +132,7 @@ public: int doodadset; Vec3D pos; Vec3D pos2, pos3, rot; - uint32 indx, id, d2, d3; + uint32 indx, id; WMOInstance(MPQFile&f , char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile); |