aboutsummaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorXanadu <none@none>2010-07-20 02:49:28 +0200
committerXanadu <none@none>2010-07-20 02:49:28 +0200
commit79622802f397258ee0f34327ba3ae6977ca3e7ff (patch)
tree1868946c234ab9ee256a6b7766a15713eae94235 /src/tools
parent7dd2dc91816ab8b3bc3b99a1b1c99c7ea314d5a8 (diff)
parentf906976837502fa5aa81b982b901d1509f5aa0c4 (diff)
Merge. Revision history for source files should be all back now.
--HG-- branch : trunk rename : sql/CMakeLists.txt => sql/tools/CMakeLists.txt rename : src/server/game/Pools/PoolHandler.cpp => src/server/game/Pools/PoolMgr.cpp rename : src/server/game/Pools/PoolHandler.h => src/server/game/Pools/PoolMgr.h rename : src/server/game/PrecompiledHeaders/NixCorePCH.cpp => src/server/game/PrecompiledHeaders/gamePCH.cpp rename : src/server/game/PrecompiledHeaders/NixCorePCH.h => src/server/game/PrecompiledHeaders/gamePCH.h
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/CMakeLists.txt10
-rw-r--r--src/tools/ExtractorToolsVC90.sln80
-rw-r--r--src/tools/map_extractor/CMakeLists.txt36
-rw-r--r--src/tools/map_extractor/README.linux7
-rw-r--r--src/tools/map_extractor/System.cpp127
-rw-r--r--src/tools/map_extractor/VC90/VC90_mapextractor.vcproj (renamed from src/tools/map_extractor/VC90_ad.vcproj)157
-rw-r--r--src/tools/map_extractor/VC90_AD.sln19
-rw-r--r--src/tools/map_extractor/adt.cpp420
-rw-r--r--src/tools/map_extractor/adt.h333
-rw-r--r--src/tools/map_extractor/dbcfile.cpp2
-rw-r--r--src/tools/map_extractor/loadlib.cpp (renamed from src/tools/map_extractor/loadlib/loadlib.cpp)5
-rw-r--r--src/tools/map_extractor/loadlib/CMakeLists.txt13
-rw-r--r--src/tools/map_extractor/loadlib/adt.cpp131
-rw-r--r--src/tools/map_extractor/loadlib/adt.h289
-rw-r--r--src/tools/map_extractor/loadlib/loadlib.h28
-rw-r--r--src/tools/map_extractor/mpq_libmpq.cpp61
-rw-r--r--src/tools/map_extractor/mpq_libmpq04.h (renamed from src/tools/map_extractor/mpq_libmpq.h)47
-rw-r--r--src/tools/map_extractor/wdt.cpp (renamed from src/tools/map_extractor/loadlib/wdt.cpp)0
-rw-r--r--src/tools/map_extractor/wdt.h (renamed from src/tools/map_extractor/loadlib/wdt.h)0
-rw-r--r--src/tools/vmap3_assembler/CMakeLists.txt107
-rw-r--r--src/tools/vmap3_assembler/VC90/VC90_vmap3assembler.vcproj (renamed from src/tools/vmap3_assembler/VC90/vmap_assembler.vcproj)128
-rw-r--r--src/tools/vmap3_assembler/VMapAssembler.cpp4
-rw-r--r--src/tools/vmap3_assembler/splitConfig.txt21
-rw-r--r--src/tools/vmap3_assembler/vmap_assemblerVC90.sln42
-rw-r--r--src/tools/vmap3_extractor/CMakeLists.txt35
-rw-r--r--src/tools/vmap3_extractor/VC90/VC90_vmap3extractor.vcproj276
-rw-r--r--src/tools/vmap3_extractor/adtfile.cpp11
-rw-r--r--src/tools/vmap3_extractor/dbcfile.h22
-rw-r--r--src/tools/vmap3_extractor/loadlib/loadlib.h2
-rw-r--r--src/tools/vmap3_extractor/model.cpp2
-rw-r--r--src/tools/vmap3_extractor/mpq_libmpq.cpp2
-rw-r--r--src/tools/vmap3_extractor/mpq_libmpq04.h3
-rw-r--r--src/tools/vmap3_extractor/vmapexport.cpp55
-rw-r--r--src/tools/vmap3_extractor/vmapexport.h2
-rw-r--r--src/tools/vmap3_extractor/wdtfile.cpp9
-rw-r--r--src/tools/vmap3_extractor/win/vmapExtractor3_VC90.sln19
-rw-r--r--src/tools/vmap3_extractor/wmo.cpp5
37 files changed, 1106 insertions, 1404 deletions
diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt
index 1d891d39182..4121a9579ec 100644
--- a/src/tools/CMakeLists.txt
+++ b/src/tools/CMakeLists.txt
@@ -1,3 +1,13 @@
+# Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
add_subdirectory(map_extractor)
add_subdirectory(vmap3_assembler)
add_subdirectory(vmap3_extractor)
diff --git a/src/tools/ExtractorToolsVC90.sln b/src/tools/ExtractorToolsVC90.sln
new file mode 100644
index 00000000000..7881797979a
--- /dev/null
+++ b/src/tools/ExtractorToolsVC90.sln
@@ -0,0 +1,80 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmpq", "..\..\externals\libmpq\win\VC90\libmpq.vcproj", "{03AB0F44-628E-4855-99A0-C98A1EB52C50}"
+ ProjectSection(ProjectDependencies) = postProject
+ {CE773400-763E-4B71-B5E2-C9B60A752EB1} = {CE773400-763E-4B71-B5E2-C9B60A752EB1}
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2} = {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzip2", "..\..\externals\bzip2\win\VC90\bzip2.vcproj", "{CE773400-763E-4B71-B5E2-C9B60A752EB1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\externals\zlib\win\VC90\zlib.vcproj", "{8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "g3dlite", "..\..\externals\g3dlite\win\VC90\g3dlite.vcproj", "{8072769E-CF10-48BF-B9E1-12752A5DAC6E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2} = {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{69F789A6-BD04-454A-AC8E-A57AAE7FCF77}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapextractor", "map_extractor\VC90\VC90_mapextractor.vcproj", "{D7552D4F-408F-4F8E-859B-366659150CF4}"
+ ProjectSection(ProjectDependencies) = postProject
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50} = {03AB0F44-628E-4855-99A0-C98A1EB52C50}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmap3assembler", "vmap3_assembler\VC90\VC90_vmap3assembler.vcproj", "{572FFF74-480C-4472-8ABF-81733BB4049D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {8072769E-CF10-48BF-B9E1-12752A5DAC6E} = {8072769E-CF10-48BF-B9E1-12752A5DAC6E}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmap3extractor", "vmap3_extractor\VC90\VC90_vmap3extractor.vcproj", "{502602CC-98EA-4335-B922-C5C1DBF37604}"
+ ProjectSection(ProjectDependencies) = postProject
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50} = {03AB0F44-628E-4855-99A0-C98A1EB52C50}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50}.Debug|Win32.Build.0 = Debug|Win32
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50}.Release|Win32.ActiveCfg = Release|Win32
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50}.Release|Win32.Build.0 = Release|Win32
+ {CE773400-763E-4B71-B5E2-C9B60A752EB1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CE773400-763E-4B71-B5E2-C9B60A752EB1}.Debug|Win32.Build.0 = Debug|Win32
+ {CE773400-763E-4B71-B5E2-C9B60A752EB1}.Release|Win32.ActiveCfg = Release|Win32
+ {CE773400-763E-4B71-B5E2-C9B60A752EB1}.Release|Win32.Build.0 = Release|Win32
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Debug|Win32.Build.0 = Debug|Win32
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Release|Win32.ActiveCfg = Release|Win32
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Release|Win32.Build.0 = Release|Win32
+ {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Debug|Win32.Build.0 = Debug|Win32
+ {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Release|Win32.ActiveCfg = Release|Win32
+ {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Release|Win32.Build.0 = Release|Win32
+ {D7552D4F-408F-4F8E-859B-366659150CF4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D7552D4F-408F-4F8E-859B-366659150CF4}.Debug|Win32.Build.0 = Debug|Win32
+ {D7552D4F-408F-4F8E-859B-366659150CF4}.Release|Win32.ActiveCfg = Release|Win32
+ {D7552D4F-408F-4F8E-859B-366659150CF4}.Release|Win32.Build.0 = Release|Win32
+ {572FFF74-480C-4472-8ABF-81733BB4049D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {572FFF74-480C-4472-8ABF-81733BB4049D}.Debug|Win32.Build.0 = Debug|Win32
+ {572FFF74-480C-4472-8ABF-81733BB4049D}.Release|Win32.ActiveCfg = Release|Win32
+ {572FFF74-480C-4472-8ABF-81733BB4049D}.Release|Win32.Build.0 = Release|Win32
+ {502602CC-98EA-4335-B922-C5C1DBF37604}.Debug|Win32.ActiveCfg = Debug|Win32
+ {502602CC-98EA-4335-B922-C5C1DBF37604}.Debug|Win32.Build.0 = Debug|Win32
+ {502602CC-98EA-4335-B922-C5C1DBF37604}.Release|Win32.ActiveCfg = Release|Win32
+ {502602CC-98EA-4335-B922-C5C1DBF37604}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {CE773400-763E-4B71-B5E2-C9B60A752EB1} = {69F789A6-BD04-454A-AC8E-A57AAE7FCF77}
+ {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2} = {69F789A6-BD04-454A-AC8E-A57AAE7FCF77}
+ {8072769E-CF10-48BF-B9E1-12752A5DAC6E} = {69F789A6-BD04-454A-AC8E-A57AAE7FCF77}
+ {03AB0F44-628E-4855-99A0-C98A1EB52C50} = {69F789A6-BD04-454A-AC8E-A57AAE7FCF77}
+ EndGlobalSection
+EndGlobal
diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt
index 9052903b1ed..cb3778c7c6a 100644
--- a/src/tools/map_extractor/CMakeLists.txt
+++ b/src/tools/map_extractor/CMakeLists.txt
@@ -1,4 +1,5 @@
# Copyright (C) 2005-2009 MaNGOS project <http://getmangos.com/>
+# Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
@@ -8,19 +9,30 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-cmake_minimum_required (VERSION 2.6)
-project (MANGOS_MAP_EXTRACTOR)
+file(GLOB sources *.cpp)
-add_subdirectory (libmpq)
-add_subdirectory (loadlib)
+include_directories (
+ ${CMAKE_SOURCE_DIR}/src/server/shared
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/loadlib
+)
-include_directories (${MANGOS_MAP_EXTRACTOR_SOURCE_DIR}/libmpq)
-include_directories (${MANGOS_MAP_EXTRACTOR_SOURCE_DIR}/loadlib)
+add_executable(mapextractor
+ ${sources}
+)
-link_directories (${MANGOS_MAP_EXTRACTOR_SOURCE_DIR}/libmpq)
-link_directories (${MANGOS_MAP_EXTRACTOR_SOURCE_DIR}/loadlib)
+if(WIN32)
+ target_link_libraries(mapextractor
+ mpq
+ bzip2
+ )
+else()
+ target_link_libraries(mapextractor
+ mpq
+ ${BZIP2_LIBRARIES}
+ )
+endif()
-add_executable (ad dbcfile.cpp mpq_libmpq.cpp System.cpp)
-
-target_link_libraries (ad libmpq)
-target_link_libraries (ad loadlib)
+if( UNIX )
+ install(TARGETS mapextractor DESTINATION bin)
+endif()
diff --git a/src/tools/map_extractor/README.linux b/src/tools/map_extractor/README.linux
deleted file mode 100644
index 1986831e751..00000000000
--- a/src/tools/map_extractor/README.linux
+++ /dev/null
@@ -1,7 +0,0 @@
-Linux instructions
-------------------
-
-1. install cmake
-2. cmake -i
-3. make
-4. ./ad
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp
index 683f89ac11e..2640b65d8b1 100644
--- a/src/tools/map_extractor/System.cpp
+++ b/src/tools/map_extractor/System.cpp
@@ -5,17 +5,17 @@
#include <set>
#include <cstdlib>
-#ifdef WIN32
+#ifdef _WIN32
#include "direct.h"
#else
#include <sys/stat.h>
#endif
#include "dbcfile.h"
-#include "mpq_libmpq.h"
+#include "mpq_libmpq04.h"
-#include "loadlib/adt.h"
-#include "loadlib/wdt.h"
+#include "adt.h"
+#include "wdt.h"
#include <fcntl.h>
#if defined( __GNUC__ )
@@ -88,7 +88,7 @@ static char* const langs[] = {"enGB", "enUS", "deDE", "esES", "frFR", "koKR", "z
void CreateDir( const std::string& Path )
{
- #ifdef WIN32
+ #ifdef _WIN32
_mkdir( Path.c_str());
#else
mkdir( Path.c_str(), 0777 );
@@ -166,6 +166,43 @@ void HandleArgs(int argc, char * arg[])
}
}
+uint32 ReadBuild(int locale)
+{
+ // include build info file also
+ std::string filename = std::string("component.wow-")+langs[locale]+".txt";
+ //printf("Read %s file... ", filename.c_str());
+
+ MPQFile m(filename.c_str());
+ if(m.isEof())
+ {
+ printf("Fatal error: Not found %s file!\n", filename.c_str());
+ exit(1);
+ }
+
+ std::string text = m.getPointer();
+ m.close();
+
+ size_t pos = text.find("version=\"");
+ size_t pos1 = pos + strlen("version=\"");
+ size_t pos2 = text.find("\"",pos1);
+ if (pos == text.npos || pos2 == text.npos || pos1 >= pos2)
+ {
+ printf("Fatal error: Invalid %s file format!\n", filename.c_str());
+ exit(1);
+ }
+
+ std::string build_str = text.substr(pos1,pos2-pos1);
+
+ int build = atoi(build_str.c_str());
+ if (build <= 0)
+ {
+ printf("Fatal error: Invalid %s file format!\n", filename.c_str());
+ exit(1);
+ }
+
+ return build;
+}
+
uint32 ReadMapDBC()
{
printf("Read Map.dbc file... ");
@@ -238,16 +275,17 @@ void ReadLiquidTypeTableDBC()
//
// Map file format data
-#define MAP_MAGIC 'SPAM'
-#define MAP_VERSION_MAGIC '0.1w'
-#define MAP_AREA_MAGIC 'AERA'
-#define MAP_HEIGHT_MAGIC 'TGHM'
-#define MAP_LIQUID_MAGIC 'QILM'
+static char const* MAP_MAGIC = "MAPS";
+static char const* MAP_VERSION_MAGIC = "v1.1";
+static char const* MAP_AREA_MAGIC = "AREA";
+static char const* MAP_HEIGHT_MAGIC = "MHGT";
+static char const* MAP_LIQUID_MAGIC = "MLIQ";
struct map_fileheader
{
uint32 mapMagic;
uint32 versionMagic;
+ uint32 buildMagic;
uint32 areaMapOffset;
uint32 areaMapSize;
uint32 heightMapOffset;
@@ -325,7 +363,7 @@ uint8 liquid_type[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID];
bool liquid_show[ADT_GRID_SIZE][ADT_GRID_SIZE];
float liquid_height[ADT_GRID_SIZE+1][ADT_GRID_SIZE+1];
-bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x)
+bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x, uint32 build)
{
ADT_file adt;
@@ -344,8 +382,9 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x)
// Prepare map header
map_fileheader map;
- map.mapMagic = MAP_MAGIC;
- map.versionMagic = MAP_VERSION_MAGIC;
+ map.mapMagic = *(uint32 const*)MAP_MAGIC;
+ map.versionMagic = *(uint32 const*)MAP_VERSION_MAGIC;
+ map.buildMagic = build;
// Get area flags data
for (int i=0;i<ADT_CELLS_PER_GRID;i++)
@@ -387,7 +426,7 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x)
map.areaMapSize = sizeof(map_areaHeader);
map_areaHeader areaHeader;
- areaHeader.fourcc = MAP_AREA_MAGIC;
+ areaHeader.fourcc = *(uint32 const*)MAP_AREA_MAGIC;
areaHeader.flags = 0;
if (fullAreaData)
{
@@ -516,7 +555,7 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x)
map.heightMapSize = sizeof(map_heightHeader);
map_heightHeader heightHeader;
- heightHeader.fourcc = MAP_HEIGHT_MAGIC;
+ heightHeader.fourcc = *(uint32 const*)MAP_HEIGHT_MAGIC;
heightHeader.flags = 0;
heightHeader.gridHeight = minHeight;
heightHeader.gridMaxHeight = maxHeight;
@@ -751,7 +790,7 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x)
}
map.liquidMapOffset = map.heightMapOffset + map.heightMapSize;
map.liquidMapSize = sizeof(map_liquidHeader);
- liquidHeader.fourcc = MAP_LIQUID_MAGIC;
+ liquidHeader.fourcc = *(uint32 const*)MAP_LIQUID_MAGIC;
liquidHeader.flags = 0;
liquidHeader.liquidType = 0;
liquidHeader.offsetX = minX;
@@ -830,7 +869,7 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x)
return true;
}
-void ExtractMapsFromMpq()
+void ExtractMapsFromMpq(uint32 build)
{
char mpq_filename[1024];
char output_filename[1024];
@@ -868,7 +907,7 @@ void ExtractMapsFromMpq()
continue;
sprintf(mpq_filename, "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);
- ConvertADT(mpq_filename, output_filename, y, x);
+ ConvertADT(mpq_filename, output_filename, y, x, build);
}
// draw progress bar
printf("Processing........................%d%%\r", (100 * (y+1)) / WDT_MAP_SIZE);
@@ -878,11 +917,27 @@ void ExtractMapsFromMpq()
delete [] map_ids;
}
+bool ExtractFile( char const* mpq_name, std::string const& filename )
+{
+ FILE *output = fopen(filename.c_str(), "wb");
+ if(!output)
+ {
+ printf("Can't create the output file '%s'\n", filename.c_str());
+ return false;
+ }
+ MPQFile m(mpq_name);
+ if(!m.isEof())
+ fwrite(m.getPointer(), 1, m.getSize(), output);
+
+ fclose(output);
+ return true;
+}
+
void ExtractDBCFiles(int locale, bool basicLocale)
{
printf("Extracting dbc files...\n");
- set<string> dbcfiles;
+ std::set<std::string> dbcfiles;
// get DBC file list
for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i)
@@ -894,7 +949,7 @@ void ExtractDBCFiles(int locale, bool basicLocale)
dbcfiles.insert(*iter);
}
- string path = output_path;
+ std::string path = output_path;
path += "/dbc/";
CreateDir(path);
if(!basicLocale)
@@ -904,6 +959,14 @@ void ExtractDBCFiles(int locale, bool basicLocale)
CreateDir(path);
}
+ // extract Build info file
+ {
+ string mpq_name = std::string("component.wow-") + langs[locale] + ".txt";
+ string filename = path + mpq_name;
+
+ ExtractFile(mpq_name.c_str(), filename);
+ }
+
// extract DBCs
int count = 0;
for (set<string>::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter)
@@ -911,18 +974,8 @@ void ExtractDBCFiles(int locale, bool basicLocale)
string filename = path;
filename += (iter->c_str() + strlen("DBFilesClient\\"));
- FILE *output = fopen(filename.c_str(), "wb");
- if(!output)
- {
- printf("Can't create the output file '%s'\n", filename.c_str());
- continue;
- }
- MPQFile m(iter->c_str());
- if(!m.isEof())
- fwrite(m.getPointer(), 1, m.getSize(), output);
-
- fclose(output);
- ++count;
+ if(ExtractFile(iter->c_str(), filename))
+ ++count;
}
printf("Extracted %u DBC files\n\n", count);
}
@@ -972,6 +1025,7 @@ int main(int argc, char * arg[])
HandleArgs(argc, arg);
int FirstLocale = -1;
+ uint32 build = 0;
for (int i = 0; i < LANG_COUNT; i++)
{
@@ -987,14 +1041,18 @@ int main(int argc, char * arg[])
if((CONF_extract & EXTRACT_DBC) == 0)
{
FirstLocale = i;
+ build = ReadBuild(FirstLocale);
+ printf("Detected client build: %u\n", build);
break;
}
//Extract DBC files
if(FirstLocale < 0)
{
- ExtractDBCFiles(i, true);
FirstLocale = i;
+ build = ReadBuild(FirstLocale);
+ printf("Detected client build: %u\n", build);
+ ExtractDBCFiles(i, true);
}
else
ExtractDBCFiles(i, false);
@@ -1019,7 +1077,7 @@ int main(int argc, char * arg[])
LoadCommonMPQFiles();
// Extract maps
- ExtractMapsFromMpq();
+ ExtractMapsFromMpq(build);
// Close MPQs
CloseMPQFiles();
@@ -1027,4 +1085,3 @@ int main(int argc, char * arg[])
return 0;
}
-
diff --git a/src/tools/map_extractor/VC90_ad.vcproj b/src/tools/map_extractor/VC90/VC90_mapextractor.vcproj
index 9a039a0fbb0..3cc367f0fc8 100644
--- a/src/tools/map_extractor/VC90_ad.vcproj
+++ b/src/tools/map_extractor/VC90/VC90_mapextractor.vcproj
@@ -2,7 +2,7 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
- Name="ad"
+ Name="mapextractor"
ProjectGUID="{D7552D4F-408F-4F8E-859B-366659150CF4}"
RootNamespace="ad"
TargetFrameworkVersion="131072"
@@ -17,10 +17,9 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="."
- IntermediateDirectory=".\debug\"
+ OutputDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
@@ -49,21 +48,22 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="libmpq"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ AdditionalIncludeDirectories="..\loadlib;..\..\..\..\externals;..\..\..\..\externals\libmpq;..\..\..\..\externals\libmpq\win;..\server\shared"
+ MinimalRebuild="false"
BasicRuntimeChecks="3"
- RuntimeLibrary="1"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
- PrecompiledHeaderFile="$(IntDir)ad.pch"
- AssemblerListingLocation="$(IntDir)\"
- ObjectFile="$(IntDir)\"
- ProgramDataBaseFileName="$(IntDir)\"
+ PrecompiledHeaderFile="$(IntDir)\ad.pch"
+ AssemblerListingLocation=""
+ ObjectFile=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ ProgramDataBaseFileName=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
XMLDocumentationFileName="$(IntDir)\"
- BrowseInformation="1"
- BrowseInformationFile="$(IntDir)"
+ BrowseInformation="0"
+ BrowseInformationFile=""
WarningLevel="3"
SuppressStartupBanner="true"
- DebugInformationFormat="4"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -78,14 +78,13 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib"
- OutputFile="ad debug.exe"
- LinkIncremental="0"
+ OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName)_d.exe"
+ LinkIncremental="2"
SuppressStartupBanner="true"
- AdditionalLibraryDirectories="./debug/"
- IgnoreDefaultLibraryNames="LIBCD.lib"
+ AdditionalLibraryDirectories=""
+ IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
- ProgramDatabaseFile="./ad debug.pdb"
+ ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
@@ -102,6 +101,7 @@
/>
<Tool
Name="VCBscMakeTool"
+ OutputFile="$(OutDir)\$(ProjectName).bsc"
/>
<Tool
Name="VCFxCopTool"
@@ -115,10 +115,9 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="."
- IntermediateDirectory=".\release"
+ OutputDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
@@ -146,19 +145,23 @@
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="3"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="libmpq"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- RuntimeLibrary="0"
+ Optimization="2"
+ InlineFunctionExpansion="0"
+ AdditionalIncludeDirectories="..\loadlib;..\..\..\..\externals;..\..\..\..\externals\libmpq;..\..\..\..\externals\libmpq\win;..\server\shared"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="1"
UsePrecompiledHeader="0"
- PrecompiledHeaderFile="$(IntDir)ad.pch"
- AssemblerListingLocation="$(IntDir)\"
- ObjectFile="$(IntDir)\"
- ProgramDataBaseFileName="$(IntDir)\"
+ PrecompiledHeaderFile=""
+ AssemblerListingLocation=""
+ ObjectFile=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ ProgramDataBaseFileName=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
XMLDocumentationFileName="$(IntDir)\"
+ BrowseInformation="0"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -173,14 +176,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib"
- OutputFile="./ad.exe"
- LinkIncremental="0"
+ OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName).exe"
+ LinkIncremental="1"
SuppressStartupBanner="true"
- AdditionalLibraryDirectories="./release/"
- IgnoreDefaultLibraryNames="LIBC.lib"
- ProgramDatabaseFile="./ad.pdb"
+ AdditionalLibraryDirectories=""
+ IgnoreDefaultLibraryNames=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
@@ -216,75 +221,27 @@
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
- RelativePath=".\loadlib\loadlib.cpp"
- >
- </File>
- <File
- RelativePath=".\loadlib\adt.cpp"
- >
- </File>
- <File
- RelativePath=".\loadlib\wdt.cpp"
- >
- </File>
- <File
- RelativePath=".\libmpq\common.cpp"
- >
- </File>
- <File
- RelativePath=".\dbcfile.cpp"
- >
- </File>
- <File
- RelativePath=".\libmpq\explode.cpp"
+ RelativePath="..\adt.cpp"
>
</File>
<File
- RelativePath=".\libmpq\extract.cpp"
+ RelativePath="..\dbcfile.cpp"
>
</File>
<File
- RelativePath=".\libmpq\huffman.cpp"
+ RelativePath="..\loadlib.cpp"
>
</File>
<File
- RelativePath=".\libmpq\mpq.cpp"
+ RelativePath="..\mpq_libmpq.cpp"
>
</File>
<File
- RelativePath=".\mpq_libmpq.cpp"
+ RelativePath="..\System.cpp"
>
</File>
<File
- RelativePath=".\libmpq\parser.cpp"
- >
- </File>
- <File
- RelativePath="system.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- BrowseInformation="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="3"
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\libmpq\wave.cpp"
+ RelativePath="..\wdt.cpp"
>
</File>
</Filter>
@@ -293,7 +250,7 @@
Filter="h;hpp;hxx;hm;inl"
>
<File
- RelativePath=".\libmpq\common.h"
+ RelativePath="..\adt.h"
>
</File>
<File
@@ -301,23 +258,11 @@
>
</File>
<File
- RelativePath=".\libmpq\explode.h"
- >
- </File>
- <File
- RelativePath=".\libmpq\huffman.h"
- >
- </File>
- <File
- RelativePath=".\libmpq\mpq.h"
- >
- </File>
- <File
RelativePath=".\mpq_libmpq.h"
>
</File>
<File
- RelativePath=".\libmpq\wave.h"
+ RelativePath="..\wdt.h"
>
</File>
</Filter>
diff --git a/src/tools/map_extractor/VC90_AD.sln b/src/tools/map_extractor/VC90_AD.sln
deleted file mode 100644
index 68dd66e1f7f..00000000000
--- a/src/tools/map_extractor/VC90_AD.sln
+++ /dev/null
@@ -1,19 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ad", "VC90_ad.vcproj", "{D7552D4F-408F-4F8E-859B-366659150CF4}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D7552D4F-408F-4F8E-859B-366659150CF4}.Debug|Win32.ActiveCfg = Debug|Win32
- {D7552D4F-408F-4F8E-859B-366659150CF4}.Debug|Win32.Build.0 = Debug|Win32
- {D7552D4F-408F-4F8E-859B-366659150CF4}.Release|Win32.ActiveCfg = Release|Win32
- {D7552D4F-408F-4F8E-859B-366659150CF4}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp
index fcbfc95a072..fde70681113 100644
--- a/src/tools/map_extractor/adt.cpp
+++ b/src/tools/map_extractor/adt.cpp
@@ -1,176 +1,11 @@
#define _CRT_SECURE_NO_DEPRECATE
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <string>
-#include <map>
-#include <vector>
-#include <set>
-
#include "adt.h"
-#include "mpq_libmpq.h"
-
-extern uint16 *areas;
-extern uint16 *LiqType;
-extern uint32 maxAreaId;
-
-vec wmoc;
-Cell *cell;
-mcell *mcells;
+// Helper
int holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888};
int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000};
-bool LoadADT(char* filename)
-{
- size_t size;
- MPQFile mf(filename);
-
- if(mf.isEof())
- {
- //printf("No such file %s\n", filename);
- return false;
- }
-
- MapLiqFlag = new uint8[256];
- for(uint32 j = 0; j < 256; ++j)
- MapLiqFlag[j] = 0; // no water
-
- MapLiqHeight = new float[16384];
- for(uint32 j = 0; j < 16384; ++j)
- MapLiqHeight[j] = -999999; // no water
-
- mcells = new mcell;
-
- wmoc.x = 65 * TILESIZE;
- wmoc.z = 65 * TILESIZE;
-
- size_t mcnk_offsets[256], mcnk_sizes[256];
-
- chunk_num = 0;
- k = 0;
- m = 0;
- while (!mf.isEof())
- {
- uint32 fourcc;
- mf.read(&fourcc, 4);
- mf.read(&size, 4);
-
- size_t nextpos = mf.getPos() + size;
-
- //if(fourcc==0x4d484452) // MHDR header
- //if(fourcc==0x4d564552) // MVER
- if(fourcc == 0x4d43494e) // MCIN
- {
- for (uint32 i = 0; i < 256; ++i)
- {
- mf.read(&mcnk_offsets[i], 4);
- mf.read(&mcnk_sizes[i], 4);
- mf.seekRelative(8);
- }
- }
- //if(fourcc == 0x4d544558) // MTEX textures (strings)
- //if(fourcc == 0x4d4d4458) // MMDX m2 models (strings)
- //if(fourcc == 0x4d4d4944) // MMID offsets for strings in MMDX
- //if(fourcc == 0x4d574d4f) // MWMO
- //if(fourcc == 0x4d574944) // MWID offsets for strings in MWMO
- //if(fourcc == 0x4d444446) // MDDF
- //if(fourcc == 0x4d4f4446) // MODF
- if(fourcc == 0x4d48324f) // MH2O new in WotLK
- {
- // çäåñ?íàäî çàïîìíèò?áàçîâó?ïîçèöè??ôàéë?òê âñ?ñìåùåí? áóäó?îò íåãî
- uint32 base_pos = mf.getPos();
- uint32 header_pos = 0;
- MH2O_offsData *LiqOffsData = new MH2O_offsData;
- MH2O_Data1 *LiqChunkData1 = new MH2O_Data1;
- float *ChunkLiqHeight = new float[81];
- for(chunk_num = 0; chunk_num < 256; ++chunk_num)
- {
- mf.read(LiqOffsData, 0x0C);
- header_pos = mf.getPos();
- if(LiqOffsData->offsData1 != 0) // åñëè äàííûå ?Data1 ?âîäå åñòü, òî èõ íàäî êîíâåðòèðîâàòü
- {
- // ïåðåõî?ïî ñìåùåíèþ èç offsData1 ÎÒ ×À?êóñê?
- mf.seek(base_pos + LiqOffsData->offsData1);
- mf.read(LiqChunkData1, 0x18); // ñ÷èòûâàå?ñàìè äàííûå ?ñòðóêòóð?òèïà MH2O_Data1
- // çàíîñè?äàííûå ôëàã?äëÿ êóñê?
- if(LiqType[LiqChunkData1->LiquidTypeId] == 0xffff)
- printf("\nCan't find Liquid type for map %s\nchunk %d\n", filename, chunk_num);
- else if(LiqType[LiqChunkData1->LiquidTypeId] == LIQUID_TYPE_WATER || LiqType[LiqChunkData1->LiquidTypeId] == LIQUID_TYPE_OCEAN)
- MapLiqFlag[chunk_num] |= 1; // water/ocean
- else if(LiqType[LiqChunkData1->LiquidTypeId] == LIQUID_TYPE_MAGMA || LiqType[LiqChunkData1->LiquidTypeId] == LIQUID_TYPE_SLIME)
- MapLiqFlag[chunk_num] |= 2; // magma/slime
- // ïðåäâàðèòåëüíî çàïîëíÿåì âåñü êóñî?äàííûì?- íå?âîäû
- for(int j = 0; j < 81; ++j)
- {
- ChunkLiqHeight[j] = -999999; // no liquid/water
- }
- // òåïåðü âû÷èñëÿåì òå ÷ò??âîäî??ïåðåçàïèñûâàåì èõ ?êóñê?
- for(int b = 0; b <= LiqChunkData1->height; ++b)
- {
- for(int c = LiqChunkData1->xOffset; c <= (LiqChunkData1->xOffset + LiqChunkData1->width); ++c)
- {
- int n = (9 * (LiqChunkData1->yOffset + b)) + c;
- ChunkLiqHeight[n] = LiqChunkData1->heightLevel1;
- }
- }
- mf.seek(header_pos); // ?íå çàáûòü âåðíóòüñÿ íà èñõîäíóþ ïîçèöè?èìåííî ?ÕÈÄÅÐÅ
- }
- else // åñëè äàííûõ ?Data1 íå? òî íàäî çàïîëíèò?âåñü êóñî? íî äàííûì?- íå?âîäû
- {
- for(int j = 0; j < 81; ++j)
- ChunkLiqHeight[j] = -999999; // no liquid/water
- }
-
- if(!(chunk_num % 16))
- m = 1024 * (chunk_num / 16); // ñìåùåíèå ïî ?äà?êóñêîâ ?ïåðåêðûòèå?= 1024
- k = m + (chunk_num % 16) * 8; // óñòàíàâëèâàåìñÿ íà íà÷àëüíû?èíäåêñ äëÿ çàïîëíåí? ?äà
- // çàíîñè?äàííûå êóñê??ìàññèâ äëÿ êàðò? ?ïåðåêðûòèå??îáðåçàíèåì êóñêîâ òê äàííûõ 81
- // ýò?àíàëîã ñòàðîã?îáðåçàíèÿ ãðàíè÷íû?ïðàâûõ-áîêîâû??íèæíèõ äàííûõ
- for(int p = 0; p < 72; p += 9) // íèæíèå 8 íå çàíîñè?òê îí?äóáëèðóåòñÿ ñëåä êóñêîì
- {
- for(int s = 0; s < 8; ++s) // 9 çíà÷åíèå ?ñòðîêå íå çàíîñè?òê îí?äóáëèðóåòñÿ ñëåä êóñêîì, ??ïðâû?áîêîâû?îáðåçàåò? äëÿ 128?28
- {
- MapLiqHeight[k] = ChunkLiqHeight[p + s];
- ++k;
- }
- k = k + 120;
- }
- }
- delete LiqOffsData;
- delete LiqChunkData1;
- delete []ChunkLiqHeight;
-
- }
- //case 0x4d434e4b: // MCNK
- //case 0x4d46424f: // MFBO new in BC
- //case 0x4d545846: // MTXF new in WotLK
- mf.seek(nextpos);
- }
-
- //printf("Loading chunks info\n");
- // read individual map chunks
- chunk_num = 0;
- k = 0;
- m = 0;
- for (int j = 0; j < 16; ++j)
- {
- for (int i = 0; i < 16; ++i)
- {
- mf.seek((int)mcnk_offsets[j * 16 + i]);
- LoadMapChunk(mf, &(mcells->ch[i][j]));
- ++chunk_num;
- }
- }
- mf.close();
- return true;
-}
-
bool isHole(int holes, int i, int j)
{
int testi = i / 2;
@@ -180,202 +15,117 @@ bool isHole(int holes, int i, int j)
return (holes & holetab_h[testi] & holetab_v[testj]) != 0;
}
-inline void LoadMapChunk(MPQFile &mf, chunk *_chunk)
+//
+// Adt file loader class
+//
+ADT_file::ADT_file()
{
- float h;
- uint32 fourcc;
- uint32 size;
- MapChunkHeader header;
-
- mf.seekRelative(4);
- mf.read(&size, 4);
-
- size_t lastpos = mf.getPos() + size;
- mf.read(&header, 0x80); // what if header size got changed?
- _chunk->area_id = header.areaid;
+ a_grid = 0;
+}
- float xbase = header.xpos;
- float ybase = header.ypos;
- float zbase = header.zpos;
- zbase = TILESIZE * 32 - zbase;
- xbase = TILESIZE * 32 - xbase;
- if(wmoc.x > xbase) wmoc.x = xbase;
- if(wmoc.z > zbase) wmoc.z = zbase;
- int chunkflags = header.flags;
- //printf("LMC: flags %X\n", chunkflags);
- float zmin = 999999999.0f;
- float zmax = -999999999.0f;
- // must be there, bl!zz uses some crazy format
- while (mf.getPos() < lastpos)
- {
- mf.read(&fourcc, 4);
- mf.read(&size, 4);
- size_t nextpos = mf.getPos() + size;
- if(fourcc == 0x4d435654) // MCVT
- {
- for (int j = 0; j < 17; ++j)
- {
- for (int i = 0; i < ((j % 2) ? 8 : 9); ++i)
- {
- mf.read(&h, 4);
- float z = h + ybase;
- if (j % 2)
- {
- if(isHole(header.holes, i, j))
- _chunk->v8[i][j / 2] = -1000;
- else
- _chunk->v8[i][j / 2] = z;
- }
- else
- {
- if(isHole(header.holes, i, j))
- _chunk->v9[i][j / 2] = -1000;
- else
- _chunk->v9[i][j / 2] = z;
- }
+ADT_file::~ADT_file()
+{
+ free();
+}
- if(z > zmax) zmax = z;
- //if(z < zmin) zmin = z;
- }
- }
- }
- else if(fourcc == 0x4d434e52) // MCNR
- {
- nextpos = mf.getPos() + 0x1C0; // size fix
- }
- else if(fourcc == 0x4d434c51) // íå áóäå?ó÷èòûâàò?åñëè óæ?áûëè äàííûå ?MH2O, ïåðåñòðàõîâê?:) // MCLQ
- {
- // liquid / water level
- char fcc1[5];
- mf.read(fcc1, 4);
- flipcc(fcc1);
- fcc1[4] = 0;
- float *ChunkLiqHeight = new float[81];
+void ADT_file::free()
+{
+ a_grid = 0;
+ FileLoader::free();
+}
- if (!strcmp(fcc1, "MCSE"))
- {
- for(int j = 0; j < 81; ++j)
- {
- ChunkLiqHeight[j] = -999999; // no liquid/water
- }
- }
- else
- {
- float maxheight;
- mf.read(&maxheight, 4);
- for(int j = 0; j < 81; ++j)
- {
- LiqData liq;
- mf.read(&liq, 8);
+//
+// Adt file check function
+//
+bool ADT_file::prepareLoadedData()
+{
+ // Check parent
+ if (!FileLoader::prepareLoadedData())
+ return false;
- if(liq.height > maxheight)
- ChunkLiqHeight[j] = -999999;
- else
- ChunkLiqHeight[j] = h;
- }
+ // Check and prepare MHDR
+ a_grid = (adt_MHDR *)(GetData()+8+version->size);
+ if (!a_grid->prepareLoadedData())
+ return false;
- if(chunkflags & 4 || chunkflags & 8)
- MapLiqFlag[chunk_num] |= 1; // water
- if(chunkflags & 16)
- MapLiqFlag[chunk_num] |= 2; // magma/slime
- }
- // àïîëíå?òà?æå êà??MH2O
- if(!(chunk_num % 16))
- m = 1024 * (chunk_num / 16);
- k = m + (chunk_num % 16) * 8;
-
- for(int p = 0; p < 72; p += 9)
- {
- for(int s = 0; s < 8; ++s)
- {
- MapLiqHeight[k] = ChunkLiqHeight[p + s];
- ++k;
- }
- k = k + 120;
- }
- delete []ChunkLiqHeight;
- break;
- }
- mf.seek(nextpos);
- }
+ return true;
}
-inline void TransformData()
+bool adt_MHDR::prepareLoadedData()
{
- cell = new Cell;
+ if (fcc != 'MHDR')
+ return false;
- for(uint32 x = 0; x < 128; ++x)
- {
- for(uint32 y = 0; y < 128; ++y)
- {
- cell->v8[y][x] = (float)mcells->ch[x / 8][y / 8].v8[x % 8][y % 8];
- cell->v9[y][x] = (float)mcells->ch[x / 8][y / 8].v9[x % 8][y % 8];
- }
+ if (size!=sizeof(adt_MHDR)-8)
+ return false;
- // extra 1 point on bounds
- cell->v9[128][x] = (float)mcells->ch[x / 8][15].v9[x % 8][8];
- // x == y
- cell->v9[x][128] = (float)mcells->ch[15][x / 8].v9[8][x % 8];
- }
+ // Check and prepare MCIN
+ if (offsMCIN && !getMCIN()->prepareLoadedData())
+ return false;
- // and the last 1
- cell->v9[128][128] = (float)mcells->ch[15][15].v9[8][8];
+ // Check and prepare MH2O
+ if (offsMH2O && !getMH2O()->prepareLoadedData())
+ return false;
- delete mcells;
+ return true;
}
-const char MAP_MAGIC[] = "MAP_3.00";
-
-bool ConvertADT(char *filename, char *filename2)
+bool adt_MCIN::prepareLoadedData()
{
- if(!LoadADT(filename))
+ if (fcc != 'MCIN')
return false;
- FILE *output=fopen(filename2, "wb");
- if(!output)
- {
- printf("Can't create the output file '%s'\n", filename2);
- delete [] MapLiqHeight;
- delete [] MapLiqFlag;
+ // Check cells data
+ for (int i=0; i<ADT_CELLS_PER_GRID;i++)
+ for (int j=0; j<ADT_CELLS_PER_GRID;j++)
+ if (cells[i][j].offsMCNK && !getMCNK(i,j)->prepareLoadedData())
+ return false;
+
+ return true;
+}
+
+bool adt_MH2O::prepareLoadedData()
+{
+ if (fcc != 'MH2O')
return false;
- }
- // write magic header
- fwrite(MAP_MAGIC, 1, 8, output);
+ // Check liquid data
+// for (int i=0; i<ADT_CELLS_PER_GRID;i++)
+// for (int j=0; j<ADT_CELLS_PER_GRID;j++)
- for(uint32 x = 0; x < 16; ++x)
- {
- for(uint32 y = 0; y < 16; ++y)
- {
- if(mcells->ch[y][x].area_id && mcells->ch[y][x].area_id <= maxAreaId)
- {
- if(areas[mcells->ch[y][x].area_id] == 0xffff)
- printf("\nCan't find area flag for areaid %u.\n", mcells->ch[y][x].area_id);
+ return true;
+}
- fwrite(&areas[mcells->ch[y][x].area_id], 1, 2, output);
- }
- else
- {
- uint16 flag = 0xffff;
- fwrite(&flag, 1, 2, output);
- }
- }
- }
+bool adt_MCNK::prepareLoadedData()
+{
+ if (fcc != 'MCNK')
+ return false;
- fwrite(MapLiqFlag, 1, 256, output);
- delete [] MapLiqFlag;
+ // Check height map
+ if (offsMCVT && !getMCVT()->prepareLoadedData())
+ return false;
+ // Check liquid data
+ if (offsMCLQ && !getMCLQ()->prepareLoadedData())
+ return false;
- fwrite(MapLiqHeight, sizeof(float), 16384, output);
- delete [] MapLiqHeight;
+ return true;
+}
- TransformData();
+bool adt_MCVT::prepareLoadedData()
+{
+ if (fcc != 'MCVT')
+ return false;
+ if (size != sizeof(adt_MCVT)-8)
+ return false;
- fwrite(&cell->v9, 1, sizeof(cell->v9), output);
- fwrite(&cell->v8, 1, sizeof(cell->v8), output);
- fclose(output);
- delete cell;
-
return true;
}
+bool adt_MCLQ::prepareLoadedData()
+{
+ if (fcc != 'MCLQ')
+ return false;
+
+ return true;
+} \ No newline at end of file
diff --git a/src/tools/map_extractor/adt.h b/src/tools/map_extractor/adt.h
index 516ed88a86e..725c5b994ee 100644
--- a/src/tools/map_extractor/adt.h
+++ b/src/tools/map_extractor/adt.h
@@ -1,130 +1,289 @@
#ifndef ADT_H
#define ADT_H
+#include "loadlib.h"
+
#define TILESIZE (533.33333f)
#define CHUNKSIZE ((TILESIZE) / 16.0f)
#define UNITSIZE (CHUNKSIZE / 8.0f)
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-typedef unsigned int uint32;
-class Liquid;
-typedef struct
-{
- float x;
- float y;
- float z;
-} svec;
-
-typedef struct
+enum LiquidType
{
- double x;
- double y;
- double z;
-} vec;
+ LIQUID_TYPE_WATER = 0,
+ LIQUID_TYPE_OCEAN = 1,
+ LIQUID_TYPE_MAGMA = 2,
+ LIQUID_TYPE_SLIME = 3
+};
-typedef struct
-{
- vec v[3];
-} triangle;
+//**************************************************************************************
+// ADT file class
+//**************************************************************************************
+#define ADT_CELLS_PER_GRID 16
+#define ADT_CELL_SIZE 8
+#define ADT_GRID_SIZE (ADT_CELLS_PER_GRID*ADT_CELL_SIZE)
-typedef struct
+//
+// Adt file height map chunk
+//
+class adt_MCVT
{
- float v9[16 * 8 + 1][16 * 8 + 1];
- float v8[16 * 8][16 * 8];
-} Cell;
+ union{
+ uint32 fcc;
+ char fcc_txt[4];
+ };
+ uint32 size;
+public:
+ float height_map[(ADT_CELL_SIZE+1)*(ADT_CELL_SIZE+1)+ADT_CELL_SIZE*ADT_CELL_SIZE];
-typedef struct
-{
- double v9[9][9];
- double v8[8][8];
- uint16 area_id;
-} chunk;
+ bool prepareLoadedData();
+};
-typedef struct
+//
+// Adt file liquid map chunk (old)
+//
+class adt_MCLQ
{
- chunk ch[16][16];
-} mcell;
+ union{
+ uint32 fcc;
+ char fcc_txt[4];
+ };
+ uint32 size;
+public:
+ float height1;
+ float height2;
+ struct liquid_data{
+ uint32 light;
+ float height;
+ } liquid[ADT_CELL_SIZE+1][ADT_CELL_SIZE+1];
+
+ // 1<<0 - ochen
+ // 1<<1 - lava/slime
+ // 1<<2 - water
+ // 1<<6 - all water
+ // 1<<7 - dark water
+ // == 0x0F - not show liquid
+ uint8 flags[ADT_CELL_SIZE][ADT_CELL_SIZE];
+ uint8 data[84];
+ bool prepareLoadedData();
+};
-struct MapChunkHeader
+//
+// Adt file cell chunk
+//
+class adt_MCNK
{
+ union{
+ uint32 fcc;
+ char fcc_txt[4];
+ };
+ uint32 size;
+public:
uint32 flags;
uint32 ix;
uint32 iy;
uint32 nLayers;
uint32 nDoodadRefs;
- uint32 ofsHeight;
- uint32 ofsNormal;
- uint32 ofsLayer;
- uint32 ofsRefs;
- uint32 ofsAlpha;
- uint32 sizeAlpha;
- uint32 ofsShadow;
- uint32 sizeShadow;
+ uint32 offsMCVT; // height map
+ uint32 offsMCNR; // Normal vectors for each vertex
+ uint32 offsMCLY; // Texture layer definitions
+ uint32 offsMCRF; // A list of indices into the parent file's MDDF chunk
+ uint32 offsMCAL; // Alpha maps for additional texture layers
+ uint32 sizeMCAL;
+ uint32 offsMCSH; // Shadow map for static shadows on the terrain
+ uint32 sizeMCSH;
uint32 areaid;
uint32 nMapObjRefs;
uint32 holes;
- uint16 s1;
- uint16 s2;
- uint32 d1;
- uint32 d2;
- uint32 d3;
+ uint16 s[2];
+ uint32 data1;
+ uint32 data2;
+ uint32 data3;
uint32 predTex;
uint32 nEffectDoodad;
- uint32 ofsSndEmitters;
+ uint32 offsMCSE;
uint32 nSndEmitters;
- uint32 ofsLiquid; // not use in WotLK
- uint32 sizeLiquid; // not use in WotLK
+ uint32 offsMCLQ; // Liqid level (old)
+ uint32 sizeMCLQ; //
float zpos;
float xpos;
float ypos;
- uint32 textureId; // new offsColorValues in WotLK
+ uint32 offsMCCV; // offsColorValues in WotLK
uint32 props;
uint32 effectId;
+
+ bool prepareLoadedData();
+ adt_MCVT *getMCVT()
+ {
+ if (offsMCVT)
+ return (adt_MCVT *)((uint8 *)this + offsMCVT);
+ return 0;
+ }
+ adt_MCLQ *getMCLQ()
+ {
+ if (offsMCLQ)
+ return (adt_MCLQ *)((uint8 *)this + offsMCLQ);
+ return 0;
+ }
};
-typedef struct
+//
+// Adt file grid chunk
+//
+class adt_MCIN
{
- uint32 offsData1;
- uint32 used;
- uint32 offsData2;
-} MH2O_offsData;
+ union{
+ uint32 fcc;
+ char fcc_txt[4];
+ };
+ uint32 size;
+public:
+ struct adt_CELLS{
+ uint32 offsMCNK;
+ uint32 size;
+ uint32 flags;
+ uint32 asyncId;
+ } cells[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID];
-typedef struct
-{
- uint16 LiquidTypeId;
- uint16 type;
- float heightLevel1;
- float heightLevel2;
- uint8 xOffset;
- uint8 yOffset;
- uint8 width;
- uint8 height;
- uint32 ofsData2a;
- uint32 ofsData2b;
-} MH2O_Data1;
-
-typedef struct
-{
- uint16 unk1;
- uint16 unk2;
- float height;
-} LiqData;
+ bool prepareLoadedData();
+ // offset from begin file (used this-84)
+ adt_MCNK *getMCNK(int x, int y)
+ {
+ if (cells[x][y].offsMCNK)
+ return (adt_MCNK *)((uint8 *)this + cells[x][y].offsMCNK - 84);
+ return 0;
+ }
+};
-enum LiquidType
+#define ADT_LIQUID_HEADER_FULL_LIGHT 0x01
+#define ADT_LIQUID_HEADER_NO_HIGHT 0x02
+
+struct adt_liquid_header{
+ uint16 liquidType; // Index from LiquidType.dbc
+ uint16 formatFlags;
+ float heightLevel1;
+ float heightLevel2;
+ uint8 xOffset;
+ uint8 yOffset;
+ uint8 width;
+ uint8 height;
+ uint32 offsData2a;
+ uint32 offsData2b;
+};
+
+//
+// Adt file liquid data chunk (new)
+//
+class adt_MH2O
{
- LIQUID_TYPE_WATER = 0,
- LIQUID_TYPE_OCEAN = 1,
- LIQUID_TYPE_MAGMA = 2,
- LIQUID_TYPE_SLIME = 3
+public:
+ union{
+ uint32 fcc;
+ char fcc_txt[4];
+ };
+ uint32 size;
+
+ struct adt_LIQUID{
+ uint32 offsData1;
+ uint32 used;
+ uint32 offsData2;
+ } liquid[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID];
+
+ bool prepareLoadedData();
+
+ adt_liquid_header *getLiquidData(int x, int y)
+ {
+ if (liquid[x][y].used && liquid[x][y].offsData1)
+ return (adt_liquid_header *)((uint8*)this + 8 + liquid[x][y].offsData1);
+ return 0;
+ }
+
+ float *getLiquidHeightMap(adt_liquid_header *h)
+ {
+ if (h->formatFlags & ADT_LIQUID_HEADER_NO_HIGHT)
+ return 0;
+ if (h->offsData2b)
+ return (float *)((uint8*)this + 8 + h->offsData2b);
+ return 0;
+ }
+
+ uint8 *getLiquidLightMap(adt_liquid_header *h)
+ {
+ if (h->formatFlags&ADT_LIQUID_HEADER_FULL_LIGHT)
+ return 0;
+ if (h->offsData2b)
+ {
+ if (h->formatFlags & ADT_LIQUID_HEADER_NO_HIGHT)
+ return (uint8 *)((uint8*)this + 8 + h->offsData2b);
+ return (uint8 *)((uint8*)this + 8 + h->offsData2b + (h->width+1)*(h->height+1)*4);
+ }
+ return 0;
+ }
+
+ uint32 *getLiquidFullLightMap(adt_liquid_header *h)
+ {
+ if (!(h->formatFlags&ADT_LIQUID_HEADER_FULL_LIGHT))
+ return 0;
+ if (h->offsData2b)
+ {
+ if (h->formatFlags & ADT_LIQUID_HEADER_NO_HIGHT)
+ return (uint32 *)((uint8*)this + 8 + h->offsData2b);
+ return (uint32 *)((uint8*)this + 8 + h->offsData2b + (h->width+1)*(h->height+1)*4);
+ }
+ return 0;
+ }
+
+ uint64 getLiquidShowMap(adt_liquid_header *h)
+ {
+ if (h->offsData2a)
+ return *((uint64 *)((uint8*)this + 8 + h->offsData2a));
+ else
+ return 0xFFFFFFFFFFFFFFFFLL;
+ }
+
};
-class MPQFile;
+//
+// Adt file header chunk
+//
+class adt_MHDR
+{
+ union{
+ uint32 fcc;
+ char fcc_txt[4];
+ };
+ uint32 size;
-float *MapLiqHeight;
-uint8 *MapLiqFlag;
-uint32 k, m, chunk_num;
-void LoadMapChunk(MPQFile &, chunk*);
-#endif
+ uint32 pad;
+ uint32 offsMCIN; // MCIN
+ uint32 offsTex; // MTEX
+ uint32 offsModels; // MMDX
+ uint32 offsModelsIds; // MMID
+ uint32 offsMapObejcts; // MWMO
+ uint32 offsMapObejctsIds; // MWID
+ uint32 offsDoodsDef; // MDDF
+ uint32 offsObjectsDef; // MODF
+ uint32 offsMFBO; // MFBO
+ uint32 offsMH2O; // MH2O
+ uint32 data1;
+ uint32 data2;
+ uint32 data3;
+ uint32 data4;
+ uint32 data5;
+public:
+ bool prepareLoadedData();
+ adt_MCIN *getMCIN(){ return (adt_MCIN *)((uint8 *)&pad+offsMCIN);}
+ adt_MH2O *getMH2O(){ return offsMH2O ? (adt_MH2O *)((uint8 *)&pad+offsMH2O) : 0;}
+};
+
+class ADT_file : public FileLoader{
+public:
+ bool prepareLoadedData();
+ ADT_file();
+ ~ADT_file();
+ void free();
+ adt_MHDR *a_grid;
+};
+
+#endif
diff --git a/src/tools/map_extractor/dbcfile.cpp b/src/tools/map_extractor/dbcfile.cpp
index dd58ac1b4a6..927d3d62b7f 100644
--- a/src/tools/map_extractor/dbcfile.cpp
+++ b/src/tools/map_extractor/dbcfile.cpp
@@ -1,7 +1,7 @@
#define _CRT_SECURE_NO_DEPRECATE
#include "dbcfile.h"
-#include "mpq_libmpq.h"
+#include "mpq_libmpq04.h"
DBCFile::DBCFile(const std::string &filename):
filename(filename),
diff --git a/src/tools/map_extractor/loadlib/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp
index ed5bd9acb71..465eb04083f 100644
--- a/src/tools/map_extractor/loadlib/loadlib.cpp
+++ b/src/tools/map_extractor/loadlib.cpp
@@ -1,7 +1,8 @@
#define _CRT_SECURE_NO_DEPRECATE
#include "loadlib.h"
-#include "../mpq_libmpq.h"
+#include "mpq_libmpq04.h"
+#include <cstdio>
class MPQFile;
@@ -61,4 +62,4 @@ void FileLoader::free()
data = 0;
data_size = 0;
version = 0;
-} \ No newline at end of file
+}
diff --git a/src/tools/map_extractor/loadlib/CMakeLists.txt b/src/tools/map_extractor/loadlib/CMakeLists.txt
deleted file mode 100644
index 5680c61d424..00000000000
--- a/src/tools/map_extractor/loadlib/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (C) 2005-2009 MaNGOS project <http://getmangos.com/>
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-add_library (loadlib loadlib.cpp adt.cpp wdt.cpp)
-# link loadlib with zlib
-target_link_libraries (loadlib z)
diff --git a/src/tools/map_extractor/loadlib/adt.cpp b/src/tools/map_extractor/loadlib/adt.cpp
deleted file mode 100644
index fde70681113..00000000000
--- a/src/tools/map_extractor/loadlib/adt.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#define _CRT_SECURE_NO_DEPRECATE
-
-#include "adt.h"
-
-// Helper
-int holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888};
-int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000};
-
-bool isHole(int holes, int i, int j)
-{
- int testi = i / 2;
- int testj = j / 4;
- if(testi > 3) testi = 3;
- if(testj > 3) testj = 3;
- return (holes & holetab_h[testi] & holetab_v[testj]) != 0;
-}
-
-//
-// Adt file loader class
-//
-ADT_file::ADT_file()
-{
- a_grid = 0;
-}
-
-ADT_file::~ADT_file()
-{
- free();
-}
-
-void ADT_file::free()
-{
- a_grid = 0;
- FileLoader::free();
-}
-
-//
-// Adt file check function
-//
-bool ADT_file::prepareLoadedData()
-{
- // Check parent
- if (!FileLoader::prepareLoadedData())
- return false;
-
- // Check and prepare MHDR
- a_grid = (adt_MHDR *)(GetData()+8+version->size);
- if (!a_grid->prepareLoadedData())
- return false;
-
- return true;
-}
-
-bool adt_MHDR::prepareLoadedData()
-{
- if (fcc != 'MHDR')
- return false;
-
- if (size!=sizeof(adt_MHDR)-8)
- return false;
-
- // Check and prepare MCIN
- if (offsMCIN && !getMCIN()->prepareLoadedData())
- return false;
-
- // Check and prepare MH2O
- if (offsMH2O && !getMH2O()->prepareLoadedData())
- return false;
-
- return true;
-}
-
-bool adt_MCIN::prepareLoadedData()
-{
- if (fcc != 'MCIN')
- return false;
-
- // Check cells data
- for (int i=0; i<ADT_CELLS_PER_GRID;i++)
- for (int j=0; j<ADT_CELLS_PER_GRID;j++)
- if (cells[i][j].offsMCNK && !getMCNK(i,j)->prepareLoadedData())
- return false;
-
- return true;
-}
-
-bool adt_MH2O::prepareLoadedData()
-{
- if (fcc != 'MH2O')
- return false;
-
- // Check liquid data
-// for (int i=0; i<ADT_CELLS_PER_GRID;i++)
-// for (int j=0; j<ADT_CELLS_PER_GRID;j++)
-
- return true;
-}
-
-bool adt_MCNK::prepareLoadedData()
-{
- if (fcc != 'MCNK')
- return false;
-
- // Check height map
- if (offsMCVT && !getMCVT()->prepareLoadedData())
- return false;
- // Check liquid data
- if (offsMCLQ && !getMCLQ()->prepareLoadedData())
- return false;
-
- return true;
-}
-
-bool adt_MCVT::prepareLoadedData()
-{
- if (fcc != 'MCVT')
- return false;
-
- if (size != sizeof(adt_MCVT)-8)
- return false;
-
- return true;
-}
-
-bool adt_MCLQ::prepareLoadedData()
-{
- if (fcc != 'MCLQ')
- return false;
-
- return true;
-} \ No newline at end of file
diff --git a/src/tools/map_extractor/loadlib/adt.h b/src/tools/map_extractor/loadlib/adt.h
deleted file mode 100644
index 725c5b994ee..00000000000
--- a/src/tools/map_extractor/loadlib/adt.h
+++ /dev/null
@@ -1,289 +0,0 @@
-#ifndef ADT_H
-#define ADT_H
-
-#include "loadlib.h"
-
-#define TILESIZE (533.33333f)
-#define CHUNKSIZE ((TILESIZE) / 16.0f)
-#define UNITSIZE (CHUNKSIZE / 8.0f)
-
-enum LiquidType
-{
- LIQUID_TYPE_WATER = 0,
- LIQUID_TYPE_OCEAN = 1,
- LIQUID_TYPE_MAGMA = 2,
- LIQUID_TYPE_SLIME = 3
-};
-
-//**************************************************************************************
-// ADT file class
-//**************************************************************************************
-#define ADT_CELLS_PER_GRID 16
-#define ADT_CELL_SIZE 8
-#define ADT_GRID_SIZE (ADT_CELLS_PER_GRID*ADT_CELL_SIZE)
-
-//
-// Adt file height map chunk
-//
-class adt_MCVT
-{
- union{
- uint32 fcc;
- char fcc_txt[4];
- };
- uint32 size;
-public:
- float height_map[(ADT_CELL_SIZE+1)*(ADT_CELL_SIZE+1)+ADT_CELL_SIZE*ADT_CELL_SIZE];
-
- bool prepareLoadedData();
-};
-
-//
-// Adt file liquid map chunk (old)
-//
-class adt_MCLQ
-{
- union{
- uint32 fcc;
- char fcc_txt[4];
- };
- uint32 size;
-public:
- float height1;
- float height2;
- struct liquid_data{
- uint32 light;
- float height;
- } liquid[ADT_CELL_SIZE+1][ADT_CELL_SIZE+1];
-
- // 1<<0 - ochen
- // 1<<1 - lava/slime
- // 1<<2 - water
- // 1<<6 - all water
- // 1<<7 - dark water
- // == 0x0F - not show liquid
- uint8 flags[ADT_CELL_SIZE][ADT_CELL_SIZE];
- uint8 data[84];
- bool prepareLoadedData();
-};
-
-//
-// Adt file cell chunk
-//
-class adt_MCNK
-{
- union{
- uint32 fcc;
- char fcc_txt[4];
- };
- uint32 size;
-public:
- uint32 flags;
- uint32 ix;
- uint32 iy;
- uint32 nLayers;
- uint32 nDoodadRefs;
- uint32 offsMCVT; // height map
- uint32 offsMCNR; // Normal vectors for each vertex
- uint32 offsMCLY; // Texture layer definitions
- uint32 offsMCRF; // A list of indices into the parent file's MDDF chunk
- uint32 offsMCAL; // Alpha maps for additional texture layers
- uint32 sizeMCAL;
- uint32 offsMCSH; // Shadow map for static shadows on the terrain
- uint32 sizeMCSH;
- uint32 areaid;
- uint32 nMapObjRefs;
- uint32 holes;
- uint16 s[2];
- uint32 data1;
- uint32 data2;
- uint32 data3;
- uint32 predTex;
- uint32 nEffectDoodad;
- uint32 offsMCSE;
- uint32 nSndEmitters;
- uint32 offsMCLQ; // Liqid level (old)
- uint32 sizeMCLQ; //
- float zpos;
- float xpos;
- float ypos;
- uint32 offsMCCV; // offsColorValues in WotLK
- uint32 props;
- uint32 effectId;
-
- bool prepareLoadedData();
- adt_MCVT *getMCVT()
- {
- if (offsMCVT)
- return (adt_MCVT *)((uint8 *)this + offsMCVT);
- return 0;
- }
- adt_MCLQ *getMCLQ()
- {
- if (offsMCLQ)
- return (adt_MCLQ *)((uint8 *)this + offsMCLQ);
- return 0;
- }
-};
-
-//
-// Adt file grid chunk
-//
-class adt_MCIN
-{
- union{
- uint32 fcc;
- char fcc_txt[4];
- };
- uint32 size;
-public:
- struct adt_CELLS{
- uint32 offsMCNK;
- uint32 size;
- uint32 flags;
- uint32 asyncId;
- } cells[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID];
-
- bool prepareLoadedData();
- // offset from begin file (used this-84)
- adt_MCNK *getMCNK(int x, int y)
- {
- if (cells[x][y].offsMCNK)
- return (adt_MCNK *)((uint8 *)this + cells[x][y].offsMCNK - 84);
- return 0;
- }
-};
-
-#define ADT_LIQUID_HEADER_FULL_LIGHT 0x01
-#define ADT_LIQUID_HEADER_NO_HIGHT 0x02
-
-struct adt_liquid_header{
- uint16 liquidType; // Index from LiquidType.dbc
- uint16 formatFlags;
- float heightLevel1;
- float heightLevel2;
- uint8 xOffset;
- uint8 yOffset;
- uint8 width;
- uint8 height;
- uint32 offsData2a;
- uint32 offsData2b;
-};
-
-//
-// Adt file liquid data chunk (new)
-//
-class adt_MH2O
-{
-public:
- union{
- uint32 fcc;
- char fcc_txt[4];
- };
- uint32 size;
-
- struct adt_LIQUID{
- uint32 offsData1;
- uint32 used;
- uint32 offsData2;
- } liquid[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID];
-
- bool prepareLoadedData();
-
- adt_liquid_header *getLiquidData(int x, int y)
- {
- if (liquid[x][y].used && liquid[x][y].offsData1)
- return (adt_liquid_header *)((uint8*)this + 8 + liquid[x][y].offsData1);
- return 0;
- }
-
- float *getLiquidHeightMap(adt_liquid_header *h)
- {
- if (h->formatFlags & ADT_LIQUID_HEADER_NO_HIGHT)
- return 0;
- if (h->offsData2b)
- return (float *)((uint8*)this + 8 + h->offsData2b);
- return 0;
- }
-
- uint8 *getLiquidLightMap(adt_liquid_header *h)
- {
- if (h->formatFlags&ADT_LIQUID_HEADER_FULL_LIGHT)
- return 0;
- if (h->offsData2b)
- {
- if (h->formatFlags & ADT_LIQUID_HEADER_NO_HIGHT)
- return (uint8 *)((uint8*)this + 8 + h->offsData2b);
- return (uint8 *)((uint8*)this + 8 + h->offsData2b + (h->width+1)*(h->height+1)*4);
- }
- return 0;
- }
-
- uint32 *getLiquidFullLightMap(adt_liquid_header *h)
- {
- if (!(h->formatFlags&ADT_LIQUID_HEADER_FULL_LIGHT))
- return 0;
- if (h->offsData2b)
- {
- if (h->formatFlags & ADT_LIQUID_HEADER_NO_HIGHT)
- return (uint32 *)((uint8*)this + 8 + h->offsData2b);
- return (uint32 *)((uint8*)this + 8 + h->offsData2b + (h->width+1)*(h->height+1)*4);
- }
- return 0;
- }
-
- uint64 getLiquidShowMap(adt_liquid_header *h)
- {
- if (h->offsData2a)
- return *((uint64 *)((uint8*)this + 8 + h->offsData2a));
- else
- return 0xFFFFFFFFFFFFFFFFLL;
- }
-
-};
-
-//
-// Adt file header chunk
-//
-class adt_MHDR
-{
- union{
- uint32 fcc;
- char fcc_txt[4];
- };
- uint32 size;
-
- uint32 pad;
- uint32 offsMCIN; // MCIN
- uint32 offsTex; // MTEX
- uint32 offsModels; // MMDX
- uint32 offsModelsIds; // MMID
- uint32 offsMapObejcts; // MWMO
- uint32 offsMapObejctsIds; // MWID
- uint32 offsDoodsDef; // MDDF
- uint32 offsObjectsDef; // MODF
- uint32 offsMFBO; // MFBO
- uint32 offsMH2O; // MH2O
- uint32 data1;
- uint32 data2;
- uint32 data3;
- uint32 data4;
- uint32 data5;
-public:
- bool prepareLoadedData();
- adt_MCIN *getMCIN(){ return (adt_MCIN *)((uint8 *)&pad+offsMCIN);}
- adt_MH2O *getMH2O(){ return offsMH2O ? (adt_MH2O *)((uint8 *)&pad+offsMH2O) : 0;}
-
-};
-
-class ADT_file : public FileLoader{
-public:
- bool prepareLoadedData();
- ADT_file();
- ~ADT_file();
- void free();
-
- adt_MHDR *a_grid;
-};
-
-#endif
diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h
index 6acfd107ec7..49d5f590744 100644
--- a/src/tools/map_extractor/loadlib/loadlib.h
+++ b/src/tools/map_extractor/loadlib/loadlib.h
@@ -1,28 +1,30 @@
#ifndef LOAD_LIB_H
#define LOAD_LIB_H
-#ifdef WIN32
+#ifdef _WIN32
typedef __int64 int64;
-typedef long int32;
-typedef short int16;
-typedef char int8;
+typedef __int32 int32;
+typedef __int16 int16;
+typedef __int8 int8;
typedef unsigned __int64 uint64;
-typedef unsigned long uint32;
-typedef unsigned short uint16;
-typedef unsigned char uint8;
+typedef unsigned __int32 uint32;
+typedef unsigned __int16 uint16;
+typedef unsigned __int8 uint8;
#else
#include <stdint.h>
#ifndef uint64_t
+#ifdef __linux__
#include <linux/types.h>
#endif
+#endif
typedef int64_t int64;
-typedef long int32;
-typedef short int16;
-typedef char int8;
+typedef int32_t int32;
+typedef int16_t int16;
+typedef int8_t int8;
typedef uint64_t uint64;
-typedef unsigned long uint32;
-typedef unsigned short uint16;
-typedef unsigned char uint8;
+typedef uint32_t uint32;
+typedef uint16_t uint16;
+typedef uint8_t uint8;
#endif
#define FILE_FORMAT_VERSION 18
diff --git a/src/tools/map_extractor/mpq_libmpq.cpp b/src/tools/map_extractor/mpq_libmpq.cpp
index 2a066a83b34..81aa8cc2894 100644
--- a/src/tools/map_extractor/mpq_libmpq.cpp
+++ b/src/tools/map_extractor/mpq_libmpq.cpp
@@ -1,44 +1,30 @@
-#include "mpq_libmpq.h"
+#include "mpq_libmpq04.h"
#include <deque>
+#include <cstdio>
ArchiveSet gOpenArchives;
MPQArchive::MPQArchive(const char* filename)
{
- int result = libmpq_archive_open(&mpq_a, (unsigned char*)filename);
+ int result = libmpq__archive_open(&mpq_a, filename, -1);
printf("Opening %s\n", filename);
if(result) {
switch(result) {
- case LIBMPQ_EFILE : /* error on file operation */
- printf("Error opening archive '%s': File operation Error\n", filename);
+ case LIBMPQ_ERROR_OPEN :
+ printf("Error opening archive '%s': Does file really exist?\n", filename);
break;
- case LIBMPQ_EFILE_FORMAT : /* bad file format */
+ case LIBMPQ_ERROR_FORMAT : /* bad file format */
printf("Error opening archive '%s': Bad file format\n", filename);
break;
- case LIBMPQ_EFILE_CORRUPT : /* file corrupt */
- printf("Error opening archive '%s': File corrupt\n", filename);
+ case LIBMPQ_ERROR_SEEK : /* seeking in file failed */
+ printf("Error opening archive '%s': Seeking in file failed\n", filename);
break;
- case LIBMPQ_EFILE_NOT_FOUND : /* file in archive not found */
- printf("Error opening archive '%s': File in archive not found\n", filename);
- break;
- case LIBMPQ_EFILE_READ : /* Read error in archive */
+ case LIBMPQ_ERROR_READ : /* Read error in archive */
printf("Error opening archive '%s': Read error in archive\n", filename);
break;
- case LIBMPQ_EALLOCMEM : /* maybe not enough memory? :) */
+ case LIBMPQ_ERROR_MALLOC : /* maybe not enough memory? :) */
printf("Error opening archive '%s': Maybe not enough memory\n", filename);
break;
- case LIBMPQ_EFREEMEM : /* can not free memory */
- printf("Error opening archive '%s': Cannot free memory\n", filename);
- break;
- case LIBMPQ_EINV_RANGE : /* Given filenumber is out of range */
- printf("Error opening archive '%s': Given filenumber is out of range\n", filename);
- break;
- case LIBMPQ_EHASHTABLE : /* error in reading hashtable */
- printf("Error opening archive '%s': Error in reading hashtable\n", filename);
- break;
- case LIBMPQ_EBLOCKTABLE : /* error in reading blocktable */
- printf("Error opening archive '%s': Error in reading blocktable\n", filename);
- break;
default:
printf("Error opening archive '%s': Unknown error\n", filename);
break;
@@ -51,7 +37,7 @@ MPQArchive::MPQArchive(const char* filename)
void MPQArchive::close()
{
//gOpenArchives.erase(erase(&mpq_a);
- libmpq_archive_close(&mpq_a);
+ libmpq__archive_close(mpq_a);
}
MPQFile::MPQFile(const char* filename):
@@ -62,25 +48,16 @@ MPQFile::MPQFile(const char* filename):
{
for(ArchiveSet::iterator i=gOpenArchives.begin(); i!=gOpenArchives.end();++i)
{
- mpq_archive &mpq_a = (*i)->mpq_a;
+ mpq_archive *mpq_a = (*i)->mpq_a;
- mpq_hash hash = (*i)->GetHashEntry(filename);
- uint32 blockindex = hash.blockindex;
+ uint32_t filenum;
+ if(libmpq__file_number(mpq_a, filename, &filenum)) continue;
+ libmpq__off_t transferred;
+ libmpq__file_unpacked_size(mpq_a, filenum, &size);
- if ((blockindex == 0xFFFFFFFF) || (blockindex == 0)) {
- continue; //file not found
- }
-
- uint32 fileno = blockindex;
-
- //int fileno = libmpq_file_number(&mpq_a, filename);
- //if(fileno == LIBMPQ_EFILE_NOT_FOUND)
- // continue;
-
- // Found!
- size = libmpq_file_info(&mpq_a, LIBMPQ_FILE_UNCOMPRESSED_SIZE, fileno);
// HACK: in patch.mpq some files don't want to open and give 1 for filesize
if (size<=1) {
+// printf("warning: file %s has size %d; cannot read.\n", filename, size);
eof = true;
buffer = 0;
return;
@@ -88,7 +65,8 @@ MPQFile::MPQFile(const char* filename):
buffer = new char[size];
//libmpq_file_getdata
- libmpq_file_getdata(&mpq_a, hash, fileno, (unsigned char*)buffer);
+ libmpq__file_read(mpq_a, filenum, (unsigned char*)buffer, size, &transferred);
+ /*libmpq_file_getdata(&mpq_a, hash, fileno, (unsigned char*)buffer);*/
return;
}
@@ -131,4 +109,3 @@ void MPQFile::close()
buffer = 0;
eof = true;
}
-
diff --git a/src/tools/map_extractor/mpq_libmpq.h b/src/tools/map_extractor/mpq_libmpq04.h
index d61cda7f919..26008f5fba1 100644
--- a/src/tools/map_extractor/mpq_libmpq.h
+++ b/src/tools/map_extractor/mpq_libmpq04.h
@@ -18,50 +18,20 @@ class MPQArchive
{
public:
- mpq_archive mpq_a;
+ mpq_archive_s *mpq_a;
MPQArchive(const char* filename);
void close();
- uint32 HashString(const char* Input, uint32 Offset) {
- uint32 seed1 = 0x7fed7fed;
- uint32 seed2 = 0xeeeeeeee;
-
- for (uint32 i = 0; i < strlen(Input); i++) {
- uint32 val = toupper(Input[i]);
- seed1 = mpq_a.buf[Offset + val] ^ (seed1 + seed2);
- seed2 = val + seed1 + seed2 + (seed2 << 5) + 3;
- }
-
- return seed1;
- }
- mpq_hash GetHashEntry(const char* Filename) {
- uint32 index = HashString(Filename, 0);
- index &= mpq_a.header->hashtablesize - 1;
- uint32 name1 = HashString(Filename, 0x100);
- uint32 name2 = HashString(Filename, 0x200);
-
- for(uint32 i = index; i < mpq_a.header->hashtablesize; ++i) {
- mpq_hash hash = mpq_a.hashtable[i];
- if (hash.name1 == name1 && hash.name2 == name2) return hash;
- }
-
- mpq_hash nullhash;
- nullhash.blockindex = 0xFFFFFFFF;
- return nullhash;
- }
-
void GetFileListTo(vector<string>& filelist) {
- mpq_hash hash = GetHashEntry("(listfile)");
- uint32 blockindex = hash.blockindex;
-
- if ((blockindex == 0xFFFFFFFF) || (blockindex == 0))
- return;
+ uint32_t filenum;
+ if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return;
+ libmpq__off_t size, transferred;
+ libmpq__file_unpacked_size(mpq_a, filenum, &size);
- uint32 size = libmpq_file_info(&mpq_a, LIBMPQ_FILE_UNCOMPRESSED_SIZE, blockindex);
char *buffer = new char[size];
-
- libmpq_file_getdata(&mpq_a, hash, blockindex, (unsigned char*)buffer);
+
+ libmpq__file_read(mpq_a, filenum, (unsigned char*)buffer, size, &transferred);
char seps[] = "\n";
char *token;
@@ -87,7 +57,7 @@ class MPQFile
//MPQHANDLE handle;
bool eof;
char *buffer;
- size_t pointer,size;
+ libmpq__off_t pointer,size;
// disable copying
MPQFile(const MPQFile &f) {}
@@ -119,4 +89,3 @@ inline void flipcc(char *fcc)
}
#endif
-
diff --git a/src/tools/map_extractor/loadlib/wdt.cpp b/src/tools/map_extractor/wdt.cpp
index dedefbb64e5..dedefbb64e5 100644
--- a/src/tools/map_extractor/loadlib/wdt.cpp
+++ b/src/tools/map_extractor/wdt.cpp
diff --git a/src/tools/map_extractor/loadlib/wdt.h b/src/tools/map_extractor/wdt.h
index fcee8ac64f2..fcee8ac64f2 100644
--- a/src/tools/map_extractor/loadlib/wdt.h
+++ b/src/tools/map_extractor/wdt.h
diff --git a/src/tools/vmap3_assembler/CMakeLists.txt b/src/tools/vmap3_assembler/CMakeLists.txt
index fd4994b67ed..c920571c439 100644
--- a/src/tools/vmap3_assembler/CMakeLists.txt
+++ b/src/tools/vmap3_assembler/CMakeLists.txt
@@ -1,4 +1,5 @@
# Copyright (C) 2005-2009 MaNGOS project <http://getmangos.com/>
+# Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
@@ -8,78 +9,34 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-cmake_minimum_required (VERSION 2.6)
-project (MANGOS_VMAP_ASSEMB_IO)
-
-set(CMAKE_VERBOSE_MAKEFILE true)
-
-# uncomment next line to disable debug mode
-ADD_DEFINITIONS("-DIOMAP_DEBUG")
-
-ADD_DEFINITIONS("-Wall")
-ADD_DEFINITIONS("-ggdb")
-ADD_DEFINITIONS("-O3")
-
-include_directories(../../src/server/shared/vmap/)
-include_directories(../../dep/include/g3dlite/)
-include_directories(../../dep/ACE_wrappers/)
-include_directories(../../objdir/dep/ACE_wrappers)
-include_directories(../../src/server/framework/)
-
-add_library(g3dlite ../../dep/src/g3dlite/AABox.cpp
- ../../dep/src/g3dlite/Box.cpp
- ../../dep/src/g3dlite/Crypto.cpp
- ../../dep/src/g3dlite/format.cpp
- ../../dep/src/g3dlite/Matrix3.cpp
- ../../dep/src/g3dlite/Plane.cpp
- ../../dep/src/g3dlite/System.cpp
- ../../dep/src/g3dlite/Triangle.cpp
- ../../dep/src/g3dlite/Vector3.cpp
- ../../dep/src/g3dlite/Vector4.cpp
- ../../dep/src/g3dlite/debugAssert.cpp
- ../../dep/src/g3dlite/fileutils.cpp
- ../../dep/src/g3dlite/g3dmath.cpp
- ../../dep/src/g3dlite/g3dfnmatch.cpp
- ../../dep/src/g3dlite/prompt.cpp
- ../../dep/src/g3dlite/stringutils.cpp
- ../../dep/src/g3dlite/Any.cpp
- ../../dep/src/g3dlite/BinaryFormat.cpp
- ../../dep/src/g3dlite/BinaryInput.cpp
- ../../dep/src/g3dlite/BinaryOutput.cpp
- ../../dep/src/g3dlite/Capsule.cpp
- ../../dep/src/g3dlite/CollisionDetection.cpp
- ../../dep/src/g3dlite/CoordinateFrame.cpp
- ../../dep/src/g3dlite/Cylinder.cpp
- ../../dep/src/g3dlite/Line.cpp
- ../../dep/src/g3dlite/LineSegment.cpp
- ../../dep/src/g3dlite/Log.cpp
- ../../dep/src/g3dlite/Matrix4.cpp
- ../../dep/src/g3dlite/MemoryManager.cpp
- ../../dep/src/g3dlite/Quat.cpp
- ../../dep/src/g3dlite/Random.cpp
- ../../dep/src/g3dlite/Ray.cpp
- ../../dep/src/g3dlite/ReferenceCount.cpp
- ../../dep/src/g3dlite/Sphere.cpp
- ../../dep/src/g3dlite/TextInput.cpp
- ../../dep/src/g3dlite/TextOutput.cpp
- ../../dep/src/g3dlite/UprightFrame.cpp
- ../../dep/src/g3dlite/Vector2.cpp
- )
-
-add_library(vmap
- ../../src/shared/vmap/BIH.cpp
- ../../src/shared/vmap/VMapManager2.cpp
- ../../src/shared/vmap/MapTree.cpp
- ../../src/shared/vmap/TileAssembler.cpp
- ../../src/shared/vmap/WorldModel.cpp
- ../../src/shared/vmap/ModelInstance.cpp
- )
-
-target_link_libraries(vmap g3dlite z)
-
-add_executable(vmap_assembler vmap_assembler.cpp)
-target_link_libraries(vmap_assembler vmap)
-
-# add_executable(vmap_test coordinate_test.cpp)
-# target_link_libraries(vmap_test vmap)
-
+include_directories(
+ ${ACE_INCLUDE_DIR}
+ ${ZLIB_INCLUDE_DIR}
+ ${CMAKE_SOURCE_DIR}/externals/g3dlite
+ ${CMAKE_SOURCE_DIR}/src/server/shared
+ ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging
+ ${CMAKE_SOURCE_DIR}/src/server/collision/Maps
+ ${CMAKE_SOURCE_DIR}/src/server/collision/Models
+)
+
+add_definitions(-DNO_CORE_FUNCS)
+
+add_executable(vmap3assembler VMapAssembler.cpp)
+
+if(WIN32)
+ target_link_libraries(vmap3assembler
+ collision
+ g3dlib
+ zlib
+ )
+else()
+ target_link_libraries(vmap3assembler
+ collision
+ g3dlib
+ ${ZLIB_LIBRARIES}
+ )
+endif()
+
+if( UNIX )
+ install(TARGETS vmap3assembler DESTINATION bin)
+endif()
diff --git a/src/tools/vmap3_assembler/VC90/vmap_assembler.vcproj b/src/tools/vmap3_assembler/VC90/VC90_vmap3assembler.vcproj
index aff990d01cc..1f3376e71b7 100644
--- a/src/tools/vmap3_assembler/VC90/vmap_assembler.vcproj
+++ b/src/tools/vmap3_assembler/VC90/VC90_vmap3assembler.vcproj
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9.00"
- Name="vmap_assembler"
+ Version="9,00"
+ Name="vmap3assembler"
ProjectGUID="{572FFF74-480C-4472-8ABF-81733BB4049D}"
RootNamespace="vmap_assembler"
Keyword="Win32Proj"
@@ -18,8 +18,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="..\bin\$(PlatformName)_$(ConfigurationName)\"
- IntermediateDirectory="bin\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ OutputDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -42,16 +42,18 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\dep\include\g3dlite;..\..\..\src\shared\vmap;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
+ AdditionalIncludeDirectories="..\..\..\..\externals;..\..\..\..\externals\g3dlite;..\..\..\server\collision;..\..\..\server\collision\Management;..\..\..\server\collision\Maps;..\..\..\server\collision\Models;..\..\..\server\shared;..\..\..\server\shared\Debugging"
+ MinimalRebuild="false"
BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableEnhancedInstructionSet="1"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="0"
UsePrecompiledHeader="0"
+ ObjectFile=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ ProgramDataBaseFileName=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -64,11 +66,13 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="$(OutDir)/vmap_assembler.exe"
- LinkIncremental="1"
+ OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName)_d.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/vmap_assembler.pdb"
+ ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
SubSystem="1"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
@@ -98,8 +102,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="..\bin\$(PlatformName)_$(ConfigurationName)\"
- IntermediateDirectory="bin\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ OutputDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
@@ -121,13 +125,16 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\dep\include\g3dlite;..\..\..\src\shared\vmap;..\..\..\src\framework;..\..\..\dep\ACE_wrappers"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ AdditionalIncludeDirectories="..\..\..\..\externals;..\..\..\..\externals\g3dlite;..\..\..\server\collision;..\..\..\server\collision\Maps;..\..\..\server\collision\Models;..\..\..\server\shared;..\..\..\server\shared\Debugging"
+ StringPooling="true"
RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
EnableEnhancedInstructionSet="1"
UsePrecompiledHeader="0"
+ ObjectFile=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ ProgramDataBaseFileName=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
WarningLevel="3"
- Detect64BitPortabilityProblems="true"
+ Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
/>
<Tool
@@ -141,9 +148,12 @@
/>
<Tool
Name="VCLinkerTool"
- OutputFile="$(OutDir)/vmap_assembler.exe"
+ OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName).exe"
LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
@@ -183,7 +193,7 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath=".\..\vmap_assembler.cpp"
+ RelativePath="..\VMapAssembler.cpp"
>
</File>
</Filter>
@@ -191,57 +201,45 @@
Name="vmaplib"
>
<File
- RelativePath="..\..\..\src\shared\vmap\BIH.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\BIH.h"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\MapTree.cpp"
+ RelativePath="..\..\..\server\collision\BoundingIntervalHierarchy.cpp"
>
</File>
<File
- RelativePath="..\..\..\src\shared\vmap\MapTree.h"
+ RelativePath="..\..\..\server\collision\BoundingIntervalHierarchy.h"
>
</File>
- <File
- RelativePath="..\..\..\src\shared\vmap\ModelInstance.cpp"
+ <Filter
+ Name="Maps"
>
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\ModelInstance.h"
+ <File
+ RelativePath="..\..\..\server\collision\Maps\TileAssembler.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\server\collision\Maps\TileAssembler.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Models"
>
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\TileAssembler.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\TileAssembler.h"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\VMapManager2.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\VMapManager2.h"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\VMapTools.h"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\WorldModel.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\shared\vmap\WorldModel.h"
- >
- </File>
+ <File
+ RelativePath="..\..\..\server\collision\Models\ModelInstance.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\server\collision\Models\ModelInstance.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\server\collision\Models\WorldModel.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\server\collision\Models\WorldModel.h"
+ >
+ </File>
+ </Filter>
</Filter>
</Files>
<Globals>
diff --git a/src/tools/vmap3_assembler/VMapAssembler.cpp b/src/tools/vmap3_assembler/VMapAssembler.cpp
index 6666b54356c..d714db5ae45 100644
--- a/src/tools/vmap3_assembler/VMapAssembler.cpp
+++ b/src/tools/vmap3_assembler/VMapAssembler.cpp
@@ -76,11 +76,13 @@ A '#' at the beginning of a line defines a comment
return(result);
} */
//=======================================================
+
int main(int argc, char* argv[])
{
if(argc != 3 && argc != 4)
{
- printf("\nusage: %s <raw data dir> <vmap dest dir> [config file name]\n", argv[0]);
+ //printf("\nusage: %s <raw data dir> <vmap dest dir> [config file name]\n", argv[0]);
+ printf("\nusage: %s <raw data dir> <vmap dest dir>\n", argv[0]);
return 1;
}
diff --git a/src/tools/vmap3_assembler/splitConfig.txt b/src/tools/vmap3_assembler/splitConfig.txt
deleted file mode 100644
index 8d217b8e967..00000000000
--- a/src/tools/vmap3_assembler/splitConfig.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# list of map names
-
-509 #AhnQiraj
-469 #BlackwingLair
-189 #MonasteryInstances
-030 #PVPZone01
-037 #PVPZone02
-033 #Shadowfang
-533 #Stratholme Raid
-209 #TanarisInstance
-309 #Zul'gurub
-560 #HillsbradPast
-534 #HyjalPast
-532 #Karazahn
-543 #HellfireRampart
-568 #ZulAman
-564 #BlackTemple
-574 #UtgardeKeep
-575 #UtgardePinnacle
-609 #EbonHold
-628 #IsleOfConquest \ No newline at end of file
diff --git a/src/tools/vmap3_assembler/vmap_assemblerVC90.sln b/src/tools/vmap3_assembler/vmap_assemblerVC90.sln
deleted file mode 100644
index 9e94e750661..00000000000
--- a/src/tools/vmap3_assembler/vmap_assemblerVC90.sln
+++ /dev/null
@@ -1,42 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmap_assembler", "VC90\vmap_assembler.vcproj", "{572FFF74-480C-4472-8ABF-81733BB4049D}"
- ProjectSection(ProjectDependencies) = postProject
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2} = {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E} = {8072769E-CF10-48BF-B9E1-12752A5DAC6E}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\win\VC90\zlib.vcproj", "{8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "g3dlite", "..\..\win\VC90\g3dlite.vcproj", "{8072769E-CF10-48BF-B9E1-12752A5DAC6E}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug_NoPCH|Win32 = Debug_NoPCH|Win32
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {572FFF74-480C-4472-8ABF-81733BB4049D}.Debug_NoPCH|Win32.ActiveCfg = Debug|Win32
- {572FFF74-480C-4472-8ABF-81733BB4049D}.Debug_NoPCH|Win32.Build.0 = Debug|Win32
- {572FFF74-480C-4472-8ABF-81733BB4049D}.Debug|Win32.ActiveCfg = Debug|Win32
- {572FFF74-480C-4472-8ABF-81733BB4049D}.Debug|Win32.Build.0 = Debug|Win32
- {572FFF74-480C-4472-8ABF-81733BB4049D}.Release|Win32.ActiveCfg = Release|Win32
- {572FFF74-480C-4472-8ABF-81733BB4049D}.Release|Win32.Build.0 = Release|Win32
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Debug_NoPCH|Win32.ActiveCfg = Debug_NoPCH|Win32
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Debug_NoPCH|Win32.Build.0 = Debug_NoPCH|Win32
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Debug|Win32.ActiveCfg = Debug|Win32
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Debug|Win32.Build.0 = Debug|Win32
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Release|Win32.ActiveCfg = Release|Win32
- {8F1DEA42-6A5B-4B62-839D-C141A7BFACF2}.Release|Win32.Build.0 = Release|Win32
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Debug_NoPCH|Win32.ActiveCfg = Debug_NoPCH|Win32
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Debug_NoPCH|Win32.Build.0 = Debug_NoPCH|Win32
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Debug|Win32.ActiveCfg = Debug|Win32
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Debug|Win32.Build.0 = Debug|Win32
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Release|Win32.ActiveCfg = Release|Win32
- {8072769E-CF10-48BF-B9E1-12752A5DAC6E}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/src/tools/vmap3_extractor/CMakeLists.txt b/src/tools/vmap3_extractor/CMakeLists.txt
index 51e867ec07e..62604f7ad3d 100644
--- a/src/tools/vmap3_extractor/CMakeLists.txt
+++ b/src/tools/vmap3_extractor/CMakeLists.txt
@@ -1,4 +1,5 @@
# Copyright (C) 2005-2009 MaNGOS project <http://getmangos.com/>
+# Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
@@ -8,9 +9,33 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-cmake_minimum_required (VERSION 2.6)
-project (MANGOS_IOMAP_EXTRACTOR)
+file(GLOB sources *.cpp)
-LINK_DIRECTORIES( ${LINK_DIRECTORIES} ../../libmpq/libmpq/.libs/ )
-add_executable(vmapextractor adtfile.cpp dbcfile.cpp model.cpp mpq_libmpq.cpp vmapexport.cpp wdtfile.cpp wmo.cpp)
-target_link_libraries(vmapextractor mpq)
+# uncomment next line to disable debug mode
+add_definitions("-DIOMAP_DEBUG")
+
+# build setup currently only supports libmpq 0.4.x
+add_definitions("-DUSE_LIBMPQ04")
+add_definitions("-Wall")
+add_definitions("-ggdb")
+add_definitions("-O3")
+
+add_executable(vmap3extractor ${sources})
+
+if(WIN32)
+ target_link_libraries(vmap3extractor
+ mpq
+ bzip2
+ zlib
+ )
+else()
+ target_link_libraries(vmap3extractor
+ mpq
+ ${BZIP2_LIBRARIES}
+ ${ZLIB_LIBRARIES}
+ )
+endif()
+
+if( UNIX )
+ install(TARGETS vmap3extractor DESTINATION bin)
+endif()
diff --git a/src/tools/vmap3_extractor/VC90/VC90_vmap3extractor.vcproj b/src/tools/vmap3_extractor/VC90/VC90_vmap3extractor.vcproj
new file mode 100644
index 00000000000..3dd343f3845
--- /dev/null
+++ b/src/tools/vmap3_extractor/VC90/VC90_vmap3extractor.vcproj
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="vmap3extractor"
+ ProjectGUID="{502602CC-98EA-4335-B922-C5C1DBF37604}"
+ RootNamespace="vmap3_extractor"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\;..\..\..\..\externals\libmpq;..\..\..\..\externals\libmpq\win"
+ PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+ MinimalRebuild="false"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ ObjectFile=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ ProgramDataBaseFileName=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName)_d.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)__$(PlatformName)_$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="0"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="false"
+ WholeProgramOptimization="false"
+ AdditionalIncludeDirectories="..\;..\..\..\..\externals\libmpq;..\..\..\..\externals\libmpq\win"
+ PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="1"
+ UsePrecompiledHeader="0"
+ ObjectFile=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ ProgramDataBaseFileName=".\$(ProjectName)__$(PlatformName)_$(ConfigurationName)\"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin\$(PlatformName)_$(ConfigurationName)\$(ProjectName).exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="0"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\adtfile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\dbcfile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\model.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\mpq_libmpq.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\vmapexport.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\wdtfile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\wmo.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\adtfile.h"
+ >
+ </File>
+ <File
+ RelativePath="..\dbcfile.h"
+ >
+ </File>
+ <File
+ RelativePath="..\model.h"
+ >
+ </File>
+ <File
+ RelativePath="..\modelheaders.h"
+ >
+ </File>
+ <File
+ RelativePath="..\mpq_libmpq04.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vec3d.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vmapexport.h"
+ >
+ </File>
+ <File
+ RelativePath="..\wdtfile.h"
+ >
+ </File>
+ <File
+ RelativePath="..\wmo.h"
+ >
+ </File>
+ <Filter
+ Name="loadlib"
+ >
+ <File
+ RelativePath="..\loadlib\loadlib.h"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/tools/vmap3_extractor/adtfile.cpp b/src/tools/vmap3_extractor/adtfile.cpp
index 055408edca6..58c1bb94b1c 100644
--- a/src/tools/vmap3_extractor/adtfile.cpp
+++ b/src/tools/vmap3_extractor/adtfile.cpp
@@ -1,9 +1,10 @@
+#include "vmapexport.h"
#include "adtfile.h"
#include <algorithm>
#include <cstdio>
-#ifdef WIN32
+#ifdef _WIN32
#define snprintf _snprintf
#endif
@@ -69,12 +70,12 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
//printf("xMap = %s\n", xMap.c_str());
//printf("yMap = %s\n", yMap.c_str());
- const char dirname[] = "Buildings/dir_bin";
+ std::string dirname = std::string(szWorkDirWmo) + "/dir_bin";
FILE *dirfile;
- dirfile = fopen(dirname, "ab");
+ dirfile = fopen(dirname.c_str(), "ab");
if(!dirfile)
{
- printf("Can't open dirfile!'%s'\n", dirname);
+ printf("Can't open dirfile!'%s'\n", dirname.c_str());
return false;
}
@@ -125,7 +126,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY)
// nothing do
char szLocalFile[1024];
- snprintf(szLocalFile, 1024, "./Buildings/%s", s);
+ snprintf(szLocalFile, 1024, "%s/%s", szWorkDirWmo, s);
FILE * output = fopen(szLocalFile,"rb");
if(!output)
{
diff --git a/src/tools/vmap3_extractor/dbcfile.h b/src/tools/vmap3_extractor/dbcfile.h
index 7381ab9f668..d405d6ffd60 100644
--- a/src/tools/vmap3_extractor/dbcfile.h
+++ b/src/tools/vmap3_extractor/dbcfile.h
@@ -1,13 +1,27 @@
+/*
+ * Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2005-2010 MaNGOS <http://getmangos.com/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifndef DBCFILE_H
#define DBCFILE_H
-#define __STORMLIB_SELF__
#include <cassert>
#include <string>
-//#include "StormLib.h"
-#undef min
-#undef max
class DBCFile
{
public:
diff --git a/src/tools/vmap3_extractor/loadlib/loadlib.h b/src/tools/vmap3_extractor/loadlib/loadlib.h
index 53731753425..49d5f590744 100644
--- a/src/tools/vmap3_extractor/loadlib/loadlib.h
+++ b/src/tools/vmap3_extractor/loadlib/loadlib.h
@@ -1,7 +1,7 @@
#ifndef LOAD_LIB_H
#define LOAD_LIB_H
-#ifdef WIN32
+#ifdef _WIN32
typedef __int64 int64;
typedef __int32 int32;
typedef __int16 int16;
diff --git a/src/tools/vmap3_extractor/model.cpp b/src/tools/vmap3_extractor/model.cpp
index b914ed96406..a2493f7e571 100644
--- a/src/tools/vmap3_extractor/model.cpp
+++ b/src/tools/vmap3_extractor/model.cpp
@@ -134,7 +134,7 @@ ModelInstance::ModelInstance(MPQFile &f,const char* ModelInstName, uint32 mapID,
sc = scale / 1024.0f;
char tempname[512];
- sprintf(tempname, "./Buildings/%s", ModelInstName);
+ sprintf(tempname, "%s/%s", szWorkDirWmo, ModelInstName);
FILE *input;
input = fopen(tempname, "r+b");
diff --git a/src/tools/vmap3_extractor/mpq_libmpq.cpp b/src/tools/vmap3_extractor/mpq_libmpq.cpp
index 4aa59417f81..528b9679a58 100644
--- a/src/tools/vmap3_extractor/mpq_libmpq.cpp
+++ b/src/tools/vmap3_extractor/mpq_libmpq.cpp
@@ -57,7 +57,7 @@ MPQFile::MPQFile(const char* filename):
// HACK: in patch.mpq some files don't want to open and give 1 for filesize
if (size<=1) {
- printf("warning: file %s has size %d; cannot read.\n", filename, size);
+ // printf("info: file %s has size %d; considered dummy file.\n", filename, size);
eof = true;
buffer = 0;
return;
diff --git a/src/tools/vmap3_extractor/mpq_libmpq04.h b/src/tools/vmap3_extractor/mpq_libmpq04.h
index ccbfe37cba7..4fe80f2759c 100644
--- a/src/tools/vmap3_extractor/mpq_libmpq04.h
+++ b/src/tools/vmap3_extractor/mpq_libmpq04.h
@@ -1,6 +1,3 @@
-#define _CRT_SECURE_NO_DEPRECATE
-#define _CRT_SECURE_NO_WARNINGS
-
#ifndef MPQ_H
#define MPQ_H
diff --git a/src/tools/vmap3_extractor/vmapexport.cpp b/src/tools/vmap3_extractor/vmapexport.cpp
index 07d5d31d418..2be03d85d97 100644
--- a/src/tools/vmap3_extractor/vmapexport.cpp
+++ b/src/tools/vmap3_extractor/vmapexport.cpp
@@ -1,16 +1,3 @@
-/*****************************************************************************/
-/* StormLibTest.cpp Copyright (c) Ladislav Zezula 2003 */
-/*---------------------------------------------------------------------------*/
-/* This module uses very brutal test methods for StormLib. It extracts all */
-/* files from the archive with Storm.dll and with stormlib and compares them,*/
-/* then tries to build a copy of the entire archive, then removes a few files*/
-/* from the archive and adds them back, then compares the two archives, ... */
-/*---------------------------------------------------------------------------*/
-/* Date Ver Who Comment */
-/* -------- ---- --- ------- */
-/* 25.03.03 1.00 Lad The first version of StormLibTest.cpp */
-/*****************************************************************************/
-
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <iostream>
@@ -18,7 +5,7 @@
#include <list>
#include <errno.h>
-#ifdef WIN32
+#ifdef _WIN32
#include <Windows.h>
#include <sys/stat.h>
#include <direct.h>
@@ -68,7 +55,7 @@ bool preciseVectorData = false;
// Constants
//static const char * szWorkDirMaps = ".\\Maps";
-static const char * szWorkDirWmo = "./Buildings";
+const char * szWorkDirWmo = "./Buildings";
// Local testing functions
@@ -114,7 +101,7 @@ void ReadLiquidTypeTableDBC()
for(uint32 x = 0; x < LiqType_count; ++x)
LiqType[dbc.getRecord(x).getUInt(0)] = dbc.getRecord(x).getUInt(3);
- printf("Done! (%u LiqTypes loaded)\n", LiqType_count);
+ printf("Done! (%u LiqTypes loaded)\n", (unsigned int)LiqType_count);
}
int ExtractWmo()
@@ -236,18 +223,22 @@ void ParsMapFiles()
WDTFile WDT(fn,map_ids[i].name);
if(WDT.init(id, map_ids[i].id))
{
+ printf("Processing Map %u\n[", map_ids[i].id);
for (int x=0; x<64; ++x)
{
for (int y=0; y<64; ++y)
{
- if (ADTFile*ADT = WDT.GetMap(x,y))
+ if (ADTFile *ADT = WDT.GetMap(x,y))
{
//sprintf(id_filename,"%02u %02u %03u",x,y,map_ids[i].id);//!!!!!!!!!
ADT->init(map_ids[i].id, x, y);
delete ADT;
}
}
+ printf("#");
+ fflush(stdout);
}
+ printf("]\n");
}
}
}
@@ -260,9 +251,8 @@ void getGamePath()
LONG l;
s = sizeof(input_path);
memset(input_path,0,s);
- l = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Blizzard Entertainment\\World of Warcraft",0,KEY_QUERY_VALUE,&key);
- //l = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Blizzard Entertainment\\Burning Crusade Closed Beta",0,KEY_QUERY_VALUE,&key);
- l = RegQueryValueEx(key,"InstallPath",0,&t,(LPBYTE)input_path,&s);
+ l = RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SOFTWARE\\Blizzard Entertainment\\World of Warcraft",0,KEY_QUERY_VALUE,&key);
+ l = RegQueryValueExA(key,"InstallPath",0,&t,(LPBYTE)input_path,&s);
RegCloseKey(key);
if (strlen(input_path) > 0)
{
@@ -321,6 +311,11 @@ bool fillArchiveNameVector(std::vector<std::string>& pArchiveNames)
searchLocales.push_back("esES");
searchLocales.push_back("frFR");
searchLocales.push_back("koKR");
+ searchLocales.push_back("zhCN");
+ searchLocales.push_back("zhTW");
+ searchLocales.push_back("enCN");
+ searchLocales.push_back("enTW");
+ searchLocales.push_back("esMX");
searchLocales.push_back("ruRU");
for (std::vector<std::string>::iterator i = searchLocales.begin(); i != searchLocales.end(); ++i)
@@ -445,17 +440,33 @@ bool processArgv(int argc, char ** argv, const char *versionString)
int main(int argc, char ** argv)
{
bool success=true;
- const char *versionString = "V2.90 2010_05";
+ const char *versionString = "V3.00 2010_07";
// Use command line arguments, when some
if(!processArgv(argc, argv, versionString))
return 1;
+ // some simple check if working dir is dirty
+ else
+ {
+ std::string sdir = std::string(szWorkDirWmo) + "/dir";
+ std::string sdir_bin = std::string(szWorkDirWmo) + "/dir_bin";
+ struct stat status;
+ if (!stat(sdir.c_str(), &status) || !stat(sdir_bin.c_str(), &status))
+ {
+ printf("Your output directory seems to be polluted, please use an empty directory!\n");
+ printf("<press return to exit>");
+ char garbage[2];
+ scanf("%c", garbage);
+ return 1;
+ }
+ }
+
printf("Extract %s. Beginning work ....\n",versionString);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Create the working directory
if(mkdir(szWorkDirWmo
-#ifdef __linux__
+#ifdef _XOPEN_UNIX
, 0711
#endif
))
diff --git a/src/tools/vmap3_extractor/vmapexport.h b/src/tools/vmap3_extractor/vmapexport.h
index 625bc930882..fa9a609abf5 100644
--- a/src/tools/vmap3_extractor/vmapexport.h
+++ b/src/tools/vmap3_extractor/vmapexport.h
@@ -8,4 +8,6 @@ enum ModelFlags
MOD_HAS_BOUND = 1<<2
};
+extern const char * szWorkDirWmo;
+
#endif
diff --git a/src/tools/vmap3_extractor/wdtfile.cpp b/src/tools/vmap3_extractor/wdtfile.cpp
index 7f81af72931..cd24ef0346c 100644
--- a/src/tools/vmap3_extractor/wdtfile.cpp
+++ b/src/tools/vmap3_extractor/wdtfile.cpp
@@ -1,5 +1,4 @@
-#define __STORMLIB_SELF__
-
+#include "vmapexport.h"
#include "wdtfile.h"
#include "adtfile.h"
#include <cstdio>
@@ -29,12 +28,12 @@ bool WDTFile::init(char *map_id, unsigned int mapID)
char fourcc[5];
uint32 size;
- const char dirname[] = "Buildings/dir_bin";
+ std::string dirname = std::string(szWorkDirWmo) + "/dir_bin";
FILE *dirfile;
- dirfile = fopen(dirname, "ab");
+ dirfile = fopen(dirname.c_str(), "ab");
if(!dirfile)
{
- printf("Can't open dirfile!'%s'\n", dirname);
+ printf("Can't open dirfile!'%s'\n", dirname.c_str());
return false;
}
diff --git a/src/tools/vmap3_extractor/win/vmapExtractor3_VC90.sln b/src/tools/vmap3_extractor/win/vmapExtractor3_VC90.sln
deleted file mode 100644
index 0c42d1e90f0..00000000000
--- a/src/tools/vmap3_extractor/win/vmapExtractor3_VC90.sln
+++ /dev/null
@@ -1,19 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vmapExtractor3", "VC90\vmapExtractor3.vcproj", "{D4624B20-AC1E-4EE9-8C9C-0FB65EEE3393}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D4624B20-AC1E-4EE9-8C9C-0FB65EEE3393}.Debug|Win32.ActiveCfg = Debug|Win32
- {D4624B20-AC1E-4EE9-8C9C-0FB65EEE3393}.Debug|Win32.Build.0 = Debug|Win32
- {D4624B20-AC1E-4EE9-8C9C-0FB65EEE3393}.Release|Win32.ActiveCfg = Release|Win32
- {D4624B20-AC1E-4EE9-8C9C-0FB65EEE3393}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/src/tools/vmap3_extractor/wmo.cpp b/src/tools/vmap3_extractor/wmo.cpp
index 508391be675..216a2248953 100644
--- a/src/tools/vmap3_extractor/wmo.cpp
+++ b/src/tools/vmap3_extractor/wmo.cpp
@@ -1,4 +1,3 @@
-
#include "vmapexport.h"
#include "wmo.h"
#include "vec3d.h"
@@ -387,7 +386,7 @@ int WMOGroup::ConvertToVMAPGroupWmo(FILE *output, WMORoot *rootWMO, bool pPrecis
if (rootWMO->liquidType & 4)
liquidEntry = liquidType;
else if (liquidType == 15)
- liquidEntry = 0;
+ liquidEntry = 1; // first entry, generic "Water"
else
liquidEntry = liquidType + 1;
// overwrite material type in header...
@@ -443,7 +442,7 @@ WMOInstance::WMOInstance(MPQFile &f,const char* WmoInstName, uint32 mapID, uint3
//-----------add_in _dir_file----------------
char tempname[512];
- sprintf(tempname, "Buildings/%s", WmoInstName);
+ sprintf(tempname, "%s/%s", szWorkDirWmo, WmoInstName);
FILE *input;
input = fopen(tempname, "r+b");