aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/Collision/VMapDefinitions.h4
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp2
-rw-r--r--src/tools/vmap4_extractor/wmo.cpp26
-rw-r--r--src/tools/vmap4_extractor/wmo.h20
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);