diff options
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/map_extractor/System.cpp | 4 | ||||
-rw-r--r-- | src/tools/mmaps_generator/CMakeLists.txt | 10 | ||||
-rw-r--r-- | src/tools/mmaps_generator/MapBuilder.cpp | 141 | ||||
-rw-r--r-- | src/tools/mmaps_generator/TerrainBuilder.cpp | 4 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 6 |
5 files changed, 98 insertions, 67 deletions
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index ab9774a3038..9059867dce4 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -402,7 +402,7 @@ void ReadLiquidTypeTableDBC() // Map file format data static char const* MAP_MAGIC = "MAPS"; -static char const* MAP_VERSION_MAGIC = "v1.4"; +static char const* MAP_VERSION_MAGIC = "v1.5"; static char const* MAP_AREA_MAGIC = "AREA"; static char const* MAP_HEIGHT_MAGIC = "MHGT"; static char const* MAP_LIQUID_MAGIC = "MLIQ"; @@ -1091,7 +1091,7 @@ void ExtractMaps(uint32 build) continue; sprintf(storagePath, "World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y); - sprintf(output_filename, "%s/maps/%03u%02u%02u.map", output_path, map_ids[z].id, y, x); + sprintf(output_filename, "%s/maps/%04u_%02u_%02u.map", output_path, map_ids[z].id, y, x); ConvertADT(storagePath, output_filename, y, x, build); sprintf(storagePath, "World\\Maps\\%s\\%s_%u_%u_obj0.adt", map_ids[z].name, map_ids[z].name, x, y); diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 48e30b1c3cf..4dfe106bd3e 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -12,7 +12,7 @@ file(GLOB_RECURSE mmap_gen_sources *.cpp *.h) set(mmap_gen_Includes ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/dep/zlib ${CMAKE_SOURCE_DIR}/dep/bzip2 ${CMAKE_SOURCE_DIR}/dep/g3dlite/include @@ -30,13 +30,6 @@ set(mmap_gen_Includes ${CMAKE_SOURCE_DIR}/src/server/collision/Models ) -if( WIN32 ) - set(mmap_gen_Includes - ${mmap_gen_Includes} - ${CMAKE_SOURCE_DIR}/dep/libmpq/win - ) -endif() - include_directories(${mmap_gen_Includes}) add_executable(mmaps_generator ${mmap_gen_sources}) @@ -46,6 +39,7 @@ target_link_libraries(mmaps_generator g3dlib Recast Detour + format ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 412ba7a0055..b3d495f8a7e 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -19,6 +19,7 @@ #include "PathCommon.h" #include "MapBuilder.h" +#include "StringFormat.h" #include "MapTree.h" #include "ModelInstance.h" @@ -28,7 +29,7 @@ #include "DetourCommon.h" #define MMAP_MAGIC 0x4d4d4150 // 'MMAP' -#define MMAP_VERSION 6 +#define MMAP_VERSION 7 struct MmapTileHeader { @@ -83,13 +84,12 @@ namespace MMAP { std::vector<std::string> files; uint32 mapID, tileX, tileY, tileID, count = 0; - char filter[12]; printf("Discovering maps... "); getDirContents(files, "maps"); for (uint32 i = 0; i < files.size(); ++i) { - mapID = uint32(atoi(files[i].substr(0,3).c_str())); + mapID = uint32(atoi(files[i].substr(0, 4).c_str())); if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end()) { m_tiles.emplace_back(MapTiles(mapID, new std::set<uint32>)); @@ -101,7 +101,7 @@ namespace MMAP getDirContents(files, "vmaps", "*.vmtree"); for (uint32 i = 0; i < files.size(); ++i) { - mapID = uint32(atoi(files[i].substr(0,3).c_str())); + mapID = uint32(atoi(files[i].substr(0, 4).c_str())); if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end()) { m_tiles.emplace_back(MapTiles(mapID, new std::set<uint32>)); @@ -117,26 +117,24 @@ namespace MMAP std::set<uint32>* tiles = (*itr).m_tiles; mapID = (*itr).m_mapId; - sprintf(filter, "%03u*.vmtile", mapID); files.clear(); - getDirContents(files, "vmaps", filter); + getDirContents(files, "vmaps", Trinity::StringFormat("%04u*.vmtile", mapID)); for (uint32 i = 0; i < files.size(); ++i) { - tileX = uint32(atoi(files[i].substr(7,2).c_str())); - tileY = uint32(atoi(files[i].substr(4,2).c_str())); + tileX = uint32(atoi(files[i].substr(8, 2).c_str())); + tileY = uint32(atoi(files[i].substr(5, 2).c_str())); tileID = StaticMapTree::packTileID(tileY, tileX); tiles->insert(tileID); count++; } - sprintf(filter, "%03u*", mapID); files.clear(); - getDirContents(files, "maps", filter); + getDirContents(files, "maps", Trinity::StringFormat("%04u*", mapID)); for (uint32 i = 0; i < files.size(); ++i) { - tileY = uint32(atoi(files[i].substr(3,2).c_str())); - tileX = uint32(atoi(files[i].substr(5,2).c_str())); + tileY = uint32(atoi(files[i].substr(5, 2).c_str())); + tileX = uint32(atoi(files[i].substr(8, 2).c_str())); tileID = StaticMapTree::packTileID(tileX, tileY); if (tiles->insert(tileID).second) @@ -386,12 +384,12 @@ namespace MMAP buildNavMesh(mapID, navMesh); if (!navMesh) { - printf("[Map %03i] Failed creating navmesh!\n", mapID); + printf("[Map %04i] Failed creating navmesh!\n", mapID); return; } // now start building mmtiles for each tile - printf("[Map %03i] We have %u tiles. \n", mapID, (unsigned int)tiles->size()); + printf("[Map %04i] We have %u tiles. \n", mapID, (unsigned int)tiles->size()); for (std::set<uint32>::iterator it = tiles->begin(); it != tiles->end(); ++it) { uint32 tileX, tileY; @@ -408,13 +406,13 @@ namespace MMAP dtFreeNavMesh(navMesh); } - printf("[Map %03i] Complete!\n", mapID); + printf("[Map %04u] Complete!\n", mapID); } /**************************************************************************/ void MapBuilder::buildTile(uint32 mapID, uint32 tileX, uint32 tileY, dtNavMesh* navMesh) { - printf("[Map %03i] Building tile [%02u,%02u]\n", mapID, tileX, tileY); + printf("[Map %04i] Building tile [%02u,%02u]\n", mapID, tileX, tileY); MeshData meshData; @@ -500,22 +498,22 @@ namespace MMAP navMeshParams.maxPolys = maxPolysPerTile; navMesh = dtAllocNavMesh(); - printf("[Map %03i] Creating navMesh...\n", mapID); + printf("[Map %04u] Creating navMesh...\n", mapID); if (!navMesh->init(&navMeshParams)) { - printf("[Map %03i] Failed creating navmesh! \n", mapID); + printf("[Map %04u] Failed creating navmesh! \n", mapID); return; } char fileName[25]; - sprintf(fileName, "mmaps/%03u.mmap", mapID); + sprintf(fileName, "mmaps/%04u.mmap", mapID); FILE* file = fopen(fileName, "wb"); if (!file) { dtFreeNavMesh(navMesh); char message[1024]; - sprintf(message, "[Map %03i] Failed to open %s for writing!\n", mapID, fileName); + sprintf(message, "[Map %04u] Failed to open %s for writing!\n", mapID, fileName); perror(message); return; } @@ -531,9 +529,8 @@ namespace MMAP dtNavMesh* navMesh) { // console output - char tileString[20]; - sprintf(tileString, "[Map %03i] [%02i,%02i]: ", mapID, tileX, tileY); - printf("%s Building movemap tiles...\n", tileString); + std::string tileString = Trinity::StringFormat("[Map %04u] [%02i,%02i]: ", mapID, tileX, tileY); + printf("%s Building movemap tiles...\n", tileString.c_str()); IntermediateValues iv; @@ -614,7 +611,7 @@ namespace MMAP tile.solid = rcAllocHeightfield(); if (!tile.solid || !rcCreateHeightfield(m_rcContext, *tile.solid, tileCfg.width, tileCfg.height, tileCfg.bmin, tileCfg.bmax, tileCfg.cs, tileCfg.ch)) { - printf("%s Failed building heightfield! \n", tileString); + printf("%s Failed building heightfield! \n", tileString.c_str()); continue; } @@ -635,33 +632,33 @@ namespace MMAP tile.chf = rcAllocCompactHeightfield(); if (!tile.chf || !rcBuildCompactHeightfield(m_rcContext, tileCfg.walkableHeight, tileCfg.walkableClimb, *tile.solid, *tile.chf)) { - printf("%s Failed compacting heightfield! \n", tileString); + printf("%s Failed compacting heightfield! \n", tileString.c_str()); continue; } // build polymesh intermediates if (!rcErodeWalkableArea(m_rcContext, config.walkableRadius, *tile.chf)) { - printf("%s Failed eroding area! \n", tileString); + printf("%s Failed eroding area! \n", tileString.c_str()); continue; } if (!rcBuildDistanceField(m_rcContext, *tile.chf)) { - printf("%s Failed building distance field! \n", tileString); + printf("%s Failed building distance field! \n", tileString.c_str()); continue; } if (!rcBuildRegions(m_rcContext, *tile.chf, tileCfg.borderSize, tileCfg.minRegionArea, tileCfg.mergeRegionArea)) { - printf("%s Failed building regions! \n", tileString); + printf("%s Failed building regions! \n", tileString.c_str()); continue; } tile.cset = rcAllocContourSet(); if (!tile.cset || !rcBuildContours(m_rcContext, *tile.chf, tileCfg.maxSimplificationError, tileCfg.maxEdgeLen, *tile.cset)) { - printf("%s Failed building contours! \n", tileString); + printf("%s Failed building contours! \n", tileString.c_str()); continue; } @@ -669,14 +666,14 @@ namespace MMAP tile.pmesh = rcAllocPolyMesh(); if (!tile.pmesh || !rcBuildPolyMesh(m_rcContext, *tile.cset, tileCfg.maxVertsPerPoly, *tile.pmesh)) { - printf("%s Failed building polymesh! \n", tileString); + printf("%s Failed building polymesh! \n", tileString.c_str()); continue; } tile.dmesh = rcAllocPolyMeshDetail(); if (!tile.dmesh || !rcBuildPolyMeshDetail(m_rcContext, *tile.pmesh, *tile.chf, tileCfg.detailSampleDist, tileCfg.detailSampleMaxError, *tile.dmesh)) { - printf("%s Failed building polymesh detail! \n", tileString); + printf("%s Failed building polymesh detail! \n", tileString.c_str()); continue; } @@ -699,7 +696,7 @@ namespace MMAP iv.polyMesh = rcAllocPolyMesh(); if (!iv.polyMesh) { - printf("%s alloc iv.polyMesh FIALED!\n", tileString); + printf("%s alloc iv.polyMesh FAILED!\n", tileString.c_str()); delete[] pmmerge; delete[] dmmerge; delete[] tiles; @@ -710,7 +707,7 @@ namespace MMAP iv.polyMeshDetail = rcAllocPolyMeshDetail(); if (!iv.polyMeshDetail) { - printf("%s alloc m_dmesh FIALED!\n", tileString); + printf("%s alloc m_dmesh FAILED!\n", tileString.c_str()); delete[] pmmerge; delete[] dmmerge; delete[] tiles; @@ -774,12 +771,12 @@ namespace MMAP // so we have a clear error message if (params.nvp > DT_VERTS_PER_POLYGON) { - printf("%s Invalid verts-per-polygon value! \n", tileString); + printf("%s Invalid verts-per-polygon value! \n", tileString.c_str()); break; } if (params.vertCount >= 0xffff) { - printf("%s Too many vertices! \n", tileString); + printf("%s Too many vertices! \n", tileString.c_str()); break; } if (!params.vertCount || !params.verts) @@ -788,7 +785,7 @@ namespace MMAP // loaded but those models don't span into this tile // message is an annoyance - //printf("%sNo vertices to build tile! \n", tileString); + //printf("%sNo vertices to build tile! \n", tileString.c_str()); break; } if (!params.polyCount || !params.polys || @@ -797,47 +794,47 @@ namespace MMAP // we have flat tiles with no actual geometry - don't build those, its useless // keep in mind that we do output those into debug info // drop tiles with only exact count - some tiles may have geometry while having less tiles - printf("%s No polygons to build on tile! \n", tileString); + printf("%s No polygons to build on tile! \n", tileString.c_str()); break; } if (!params.detailMeshes || !params.detailVerts || !params.detailTris) { - printf("%s No detail mesh to build tile! \n", tileString); + printf("%s No detail mesh to build tile! \n", tileString.c_str()); break; } - printf("%s Building navmesh tile...\n", tileString); + printf("%s Building navmesh tile...\n", tileString.c_str()); if (!dtCreateNavMeshData(¶ms, &navData, &navDataSize)) { - printf("%s Failed building navmesh tile! \n", tileString); + printf("%s Failed building navmesh tile! \n", tileString.c_str()); break; } dtTileRef tileRef = 0; - printf("%s Adding tile to navmesh...\n", tileString); + printf("%s Adding tile to navmesh...\n", tileString.c_str()); // DT_TILE_FREE_DATA tells detour to unallocate memory when the tile // is removed via removeTile() dtStatus dtResult = navMesh->addTile(navData, navDataSize, DT_TILE_FREE_DATA, 0, &tileRef); if (!tileRef || dtResult != DT_SUCCESS) { - printf("%s Failed adding tile to navmesh! \n", tileString); + printf("%s Failed adding tile to navmesh! \n", tileString.c_str()); break; } // file output char fileName[255]; - sprintf(fileName, "mmaps/%03u%02i%02i.mmtile", mapID, tileY, tileX); + sprintf(fileName, "mmaps/%04u%02i%02i.mmtile", mapID, tileY, tileX); FILE* file = fopen(fileName, "wb"); if (!file) { char message[1024]; - sprintf(message, "[Map %03i] Failed to open %s for writing!\n", mapID, fileName); + sprintf(message, "[Map %04u] Failed to open %s for writing!\n", mapID, fileName); perror(message); navMesh->removeTile(tileRef, NULL, NULL); break; } - printf("%s Writing to file...\n", tileString); + printf("%s Writing to file...\n", tileString.c_str()); // write header MmapTileHeader header; @@ -898,6 +895,8 @@ namespace MMAP case 1: case 530: case 571: + case 870: + case 1116: return true; default: break; @@ -916,6 +915,12 @@ namespace MMAP case 597: // CraigTest.wdt case 605: // development_nonweighted.wdt case 606: // QA_DVD.wdt + case 651: // ElevatorSpawnTest.wdt + case 1060: // LevelDesignLand-DevOnly.wdt + case 1181: // PattyMackTestGarrisonBldgMap.wdt + case 1264: // Propland-DevOnly.wdt + case 1270: // devland3.wdt + case 1427: // PattyMackTestGarrisonBldgMap2.wdt return true; default: if (isTransportMap(mapID)) @@ -926,13 +931,21 @@ namespace MMAP if (m_skipBattlegrounds) switch (mapID) { - case 30: // AV + case 30: // Alterac Valley case 37: // ? - case 489: // WSG - case 529: // AB - case 566: // EotS - case 607: // SotA - case 628: // IoC + case 489: // Warsong Gulch + case 529: // Arathi Basin + case 566: // Eye of the Storm + case 607: // Strand of the Ancients + case 628: // Isle of Conquest + case 726: // Twin Peaks + case 727: // Silvershard Mines + case 761: // The Battle for Gilneas + case 968: // Rated Eye of the Storm + case 998: // Temple of Kotmogu + case 1010: // CTF3 + case 1105: // Deepwind Gorge + case 1280: // Southshore vs. Tarren Mill return true; default: break; @@ -970,11 +983,35 @@ namespace MMAP case 641: case 642: case 647: + case 662: case 672: case 673: + case 674: case 712: case 713: case 718: + case 738: + case 739: + case 740: + case 741: + case 742: + case 743: + case 747: + case 748: + case 749: + case 750: + case 762: + case 763: + case 765: + case 766: + case 767: + case 1113: + case 1132: + case 1133: + case 1172: + case 1173: + case 1192: + case 1231: return true; default: return false; @@ -985,7 +1022,7 @@ namespace MMAP bool MapBuilder::shouldSkipTile(uint32 mapID, uint32 tileX, uint32 tileY) { char fileName[255]; - sprintf(fileName, "mmaps/%03u%02i%02i.mmtile", mapID, tileY, tileX); + sprintf(fileName, "mmaps/%04u%02i%02i.mmtile", mapID, tileY, tileX); FILE* file = fopen(fileName, "rb"); if (!file) return false; diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 8f85cfdbe83..125f630bb13 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -80,7 +80,7 @@ struct map_liquidHeader namespace MMAP { - char const* MAP_VERSION_MAGIC = "v1.4"; + char const* MAP_VERSION_MAGIC = "v1.5"; TerrainBuilder::TerrainBuilder(bool skipLiquid) : m_skipLiquid (skipLiquid){ } TerrainBuilder::~TerrainBuilder() { } @@ -134,7 +134,7 @@ namespace MMAP bool TerrainBuilder::loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, Spot portion) { char mapFileName[255]; - sprintf(mapFileName, "maps/%03u%02u%02u.map", mapID, tileY, tileX); + sprintf(mapFileName, "maps/%04u_%02u_%02u.map", mapID, tileY, tileX); FILE* mapFile = fopen(mapFileName, "rb"); if (!mapFile) diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index fb2cc0a20d0..9b01ecfb1df 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -72,7 +72,7 @@ bool preciseVectorData = false; //static const char * szWorkDirMaps = ".\\Maps"; const char* szWorkDirWmo = "./Buildings"; -const char* szRawVMAPMagic = "VMAP042"; +const char* szRawVMAPMagic = "VMAP043"; bool OpenCascStorage() { @@ -249,7 +249,7 @@ void ParsMapFiles() char id[10]; for (unsigned int i=0; i<map_count; ++i) { - sprintf(id,"%03u",map_ids[i].id); + sprintf(id, "%04u", map_ids[i].id); sprintf(fn,"World\\Maps\\%s\\%s.wdt", map_ids[i].name, map_ids[i].name); WDTFile WDT(fn,map_ids[i].name); if(WDT.init(id, map_ids[i].id)) @@ -355,7 +355,7 @@ bool processArgv(int argc, char ** argv, const char *versionString) int main(int argc, char ** argv) { bool success = true; - const char *versionString = "V4.00 2012_02"; + const char *versionString = "V4.03 2015_05"; // Use command line arguments, when some if (!processArgv(argc, argv, versionString)) |