diff options
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/vmap4_assembler/TileAssembler.cpp | 4 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/model.cpp | 10 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/model.h | 2 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.cpp | 39 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/wmo.h | 3 |
5 files changed, 31 insertions, 27 deletions
diff --git a/src/tools/vmap4_assembler/TileAssembler.cpp b/src/tools/vmap4_assembler/TileAssembler.cpp index ed9406eca96..0fadabd6f54 100644 --- a/src/tools/vmap4_assembler/TileAssembler.cpp +++ b/src/tools/vmap4_assembler/TileAssembler.cpp @@ -427,8 +427,8 @@ namespace VMAP READ_OR_RETURN(&nindexes, sizeof(uint32)); if (nindexes >0) { - uint16 *indexarray = new uint16[nindexes]; - READ_OR_RETURN_WITH_DELETE(indexarray, nindexes*sizeof(uint16)); + uint32 *indexarray = new uint32[nindexes]; + READ_OR_RETURN_WITH_DELETE(indexarray, nindexes*sizeof(uint32)); triangles.reserve(nindexes / 3); for (uint32 i=0; i<nindexes; i+=3) triangles.push_back(MeshTriangle(indexarray[i], indexarray[i+1], indexarray[i+2])); diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index 0ab2a8ad4b3..887e4425cf9 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -69,8 +69,10 @@ bool Model::open() vertices[i] = fixCoordSystem(vertices[i]); f.seek(m2start); f.seekRelative(header.ofsBoundingTriangles); - indices = new uint16[header.nBoundingTriangles]; - f.read(indices,header.nBoundingTriangles*2); + indices = new uint32[header.nBoundingTriangles]; + std::unique_ptr<uint16[]> tempindices = std::make_unique<uint16[]>(header.nBoundingTriangles); + f.read(tempindices.get(), header.nBoundingTriangles * 2); + std::copy_n(tempindices.get(), header.nBoundingTriangles, indices); f.close(); } else @@ -117,12 +119,12 @@ bool Model::ConvertToVMAPModel(const char * outfilename) { if ((i % 3) - 1 == 0 && i + 1 < nIndexes) { - uint16 tmp = indices[i]; + uint32 tmp = indices[i]; indices[i] = indices[i + 1]; indices[i + 1] = tmp; } } - fwrite(indices, sizeof(unsigned short), nIndexes, output); + fwrite(indices, sizeof(uint32), nIndexes, output); } fwrite("VERT", 4, 1, output); diff --git a/src/tools/vmap4_extractor/model.h b/src/tools/vmap4_extractor/model.h index 5dc3b95ae69..8a494229919 100644 --- a/src/tools/vmap4_extractor/model.h +++ b/src/tools/vmap4_extractor/model.h @@ -43,7 +43,7 @@ private: public: ModelHeader header; Vec3D* vertices; - uint16* indices; + uint32* indices; AaBox3D bounds; bool open(); diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 9da996bc923..af5355b6db6 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -203,7 +203,7 @@ bool WMORoot::ConvertToVMAPRootWmo(FILE* pOutfile) } WMOGroup::WMOGroup(const std::string &filename) : - filename(filename), MOPY(nullptr), MOVI(nullptr), MoviEx(nullptr), MOVT(nullptr), MOBA(nullptr), MobaEx(nullptr), + filename(filename), MOPY(nullptr), MOVX(nullptr), MOVT(nullptr), MOBA(nullptr), MobaEx(nullptr), hlq(nullptr), LiquEx(nullptr), LiquBytes(nullptr), groupName(0), descGroupName(0), mogpFlags(0), moprIdx(0), moprNItems(0), nBatchA(0), nBatchB(0), nBatchC(0), fogIdx(0), groupLiquid(0), groupWMOID(0), mopy_size(0), moba_size(0), LiquEx_size(0), @@ -268,8 +268,15 @@ bool WMOGroup::open(WMORoot* rootWMO) } else if (!strcmp(fourcc,"MOVI")) { - MOVI = new uint16[size/2]; - f.read(MOVI, size); + MOVX = std::make_unique<uint32[]>(size / 2); + std::unique_ptr<uint16[]> MOVI = std::make_unique<uint16[]>(size / 2); + f.read(MOVI.get(), size); + std::copy_n(MOVI.get(), size / 2, MOVX.get()); + } + else if (!strcmp(fourcc,"MOVX")) + { + MOVX = std::make_unique<uint32[]>(size / 2); + f.read(MOVX.get(), size); } else if (!strcmp(fourcc,"MOVT")) { @@ -379,7 +386,7 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData) } if(nIdexes >0) { - if(fwrite(MOVI, sizeof(unsigned short), nIdexes, output) != nIdexes) + if (fwrite(MOVX.get(), sizeof(uint32), nIdexes, output) != nIdexes) { printf("Error while writing file indexarray"); exit(0); @@ -433,9 +440,9 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData) //-------INDX------------------------------------ //-------MOPY-------- - MoviEx = new uint16[nTriangles*3]; // "worst case" size... - int *IndexRenum = new int[nVertices]; - memset(IndexRenum, 0xFF, nVertices*sizeof(int)); + std::unique_ptr<uint32[]> MovxEx = std::make_unique<uint32[]>(nTriangles*3); // "worst case" size... + std::unique_ptr<uint32[]> IndexRenum = std::make_unique<uint32[]>(nVertices); + std::fill_n(IndexRenum.get(), nVertices, 0xFFFFFFFF); for (int i=0; i<nTriangles; ++i) { // Skip no collision triangles @@ -448,14 +455,14 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData) // Use this triangle for (int j=0; j<3; ++j) { - IndexRenum[MOVI[3*i + j]] = 1; - MoviEx[3*nColTriangles + j] = MOVI[3*i + j]; + IndexRenum[MOVX[3*i + j]] = 1; + MovxEx[3*nColTriangles + j] = MOVX[3*i + j]; } ++nColTriangles; } // assign new vertex index numbers - int nColVertices = 0; + uint32 nColVertices = 0; for (uint32 i=0; i<nVertices; ++i) { if (IndexRenum[i] == 1) @@ -468,17 +475,17 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData) // translate triangle indices to new numbers for (int i=0; i<3*nColTriangles; ++i) { - ASSERT(MoviEx[i] < nVertices); - MoviEx[i] = IndexRenum[MoviEx[i]]; + ASSERT(MovxEx[i] < nVertices); + MovxEx[i] = IndexRenum[MovxEx[i]]; } // write triangle indices int INDX[] = {0x58444E49, nColTriangles*6+4, nColTriangles*3}; fwrite(INDX,4,3,output); - fwrite(MoviEx,2,nColTriangles*3,output); + fwrite(MovxEx.get(),4,nColTriangles*3,output); // write vertices - int VERT[] = {0x54524556, nColVertices*3*static_cast<int>(sizeof(float))+4, nColVertices};// "VERT" + uint32 VERT[] = {0x54524556u, nColVertices*3*static_cast<uint32>(sizeof(float))+4, nColVertices};// "VERT" int check = 3*nColVertices; fwrite(VERT,4,3,output); for (uint32 i=0; i<nVertices; ++i) @@ -486,9 +493,6 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData) check -= fwrite(MOVT+3*i, sizeof(float), 3, output); ASSERT(check==0); - - delete [] MoviEx; - delete [] IndexRenum; } //------LIQU------------------------ @@ -555,7 +559,6 @@ bool WMOGroup::ShouldSkip(WMORoot const* root) const WMOGroup::~WMOGroup() { delete [] MOPY; - delete [] MOVI; delete [] MOVT; delete [] MOBA; delete hlq; diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index a2dc39a2e81..f5f364d2302 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -125,8 +125,7 @@ public: // MOGP char* MOPY; - uint16* MOVI; - uint16* MoviEx; + std::unique_ptr<uint32[]> MOVX; float* MOVT; uint16* MOBA; int* MobaEx; |