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 5af52770dd3..bd2b1cd70e0 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.4"; - const char RAW_VMAP_MAGIC[] = "VMAP044"; // used in extracted vmap files with raw data + const char VMAP_MAGIC[] = "VMAP_4.5"; + const char RAW_VMAP_MAGIC[] = "VMAP045"; // 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 1f791ccf7bb..c493072dffb 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -109,7 +109,7 @@ struct MapLoadInfo //static const char * szWorkDirMaps = ".\\Maps"; const char* szWorkDirWmo = "./Buildings"; -const char* szRawVMAPMagic = "VMAP044"; +const char* szRawVMAPMagic = "VMAP045"; #define CASC_LOCALES_COUNT 17 char const* CascLocaleNames[CASC_LOCALES_COUNT] = diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 03e32658337..a5a57c8c736 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -377,9 +377,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) { @@ -511,7 +515,7 @@ WMOGroup::~WMOGroup() } WMOInstance::WMOInstance(CASCFile& 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); @@ -520,15 +524,25 @@ WMOInstance::WMOInstance(CASCFile& f, char const* WmoInstName, uint32 mapID, uin 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 adb84e022c5..11aee5f5e17 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -28,13 +28,17 @@ #include "cascfile.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; @@ -132,7 +136,7 @@ public: int doodadset; Vec3D pos; Vec3D pos2, pos3, rot; - uint32 indx, id, d2, d3; + uint32 indx, id; WMOInstance(CASCFile&f , char const* WmoInstName, uint32 mapID, uint32 tileX, uint32 tileY, FILE* pDirfile); }; |