aboutsummaryrefslogtreecommitdiff
path: root/src/common/Collision/Maps/MapDefines.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/Collision/Maps/MapDefines.h')
-rw-r--r--src/common/Collision/Maps/MapDefines.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/common/Collision/Maps/MapDefines.h b/src/common/Collision/Maps/MapDefines.h
new file mode 100644
index 00000000000..304a1da8985
--- /dev/null
+++ b/src/common/Collision/Maps/MapDefines.h
@@ -0,0 +1,123 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * 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 MapDefines_h__
+#define MapDefines_h__
+
+#include "Define.h"
+#include "EnumFlag.h"
+#include <array>
+
+/// Represents a map magic value of 4 bytes (used in versions)
+using u_map_magic = std::array<char, 4>;
+
+TC_COMMON_API extern u_map_magic const MapMagic;
+TC_COMMON_API extern u_map_magic const MapVersionMagic;
+TC_COMMON_API extern u_map_magic const MapAreaMagic;
+TC_COMMON_API extern u_map_magic const MapHeightMagic;
+TC_COMMON_API extern u_map_magic const MapLiquidMagic;
+
+// ******************************************
+// Map file format defines
+// ******************************************
+struct map_fileheader
+{
+ u_map_magic mapMagic;
+ u_map_magic versionMagic;
+ uint32 buildMagic;
+ uint32 areaMapOffset;
+ uint32 areaMapSize;
+ uint32 heightMapOffset;
+ uint32 heightMapSize;
+ uint32 liquidMapOffset;
+ uint32 liquidMapSize;
+ uint32 holesOffset;
+ uint32 holesSize;
+};
+
+enum class map_areaHeaderFlags : uint16
+{
+ None = 0x0000,
+ NoArea = 0x0001
+};
+
+DEFINE_ENUM_FLAG(map_areaHeaderFlags);
+
+struct map_areaHeader
+{
+ u_map_magic areaMagic;
+ EnumFlag<map_areaHeaderFlags> flags = map_areaHeaderFlags::None;
+ uint16 gridArea;
+};
+
+enum class map_heightHeaderFlags : uint32
+{
+ None = 0x0000,
+ NoHeight = 0x0001,
+ HeightAsInt16 = 0x0002,
+ HeightAsInt8 = 0x0004,
+ HasFlightBounds = 0x0008
+};
+
+DEFINE_ENUM_FLAG(map_heightHeaderFlags);
+
+struct map_heightHeader
+{
+ u_map_magic heightMagic;
+ EnumFlag<map_heightHeaderFlags> flags = map_heightHeaderFlags::None;
+ float gridHeight;
+ float gridMaxHeight;
+};
+
+enum class map_liquidHeaderFlags : uint8
+{
+ None = 0x0000,
+ NoType = 0x0001,
+ NoHeight = 0x0002
+};
+
+DEFINE_ENUM_FLAG(map_liquidHeaderFlags);
+
+enum class map_liquidHeaderTypeFlags : uint8
+{
+ NoWater = 0x00,
+ Water = 0x01,
+ Ocean = 0x02,
+ Magma = 0x04,
+ Slime = 0x08,
+
+ DarkWater = 0x10,
+
+ AllLiquids = Water | Ocean | Magma | Slime
+};
+
+DEFINE_ENUM_FLAG(map_liquidHeaderTypeFlags);
+
+struct map_liquidHeader
+{
+ u_map_magic liquidMagic;
+ EnumFlag<map_liquidHeaderFlags> flags = map_liquidHeaderFlags::None;
+ EnumFlag<map_liquidHeaderTypeFlags> liquidFlags = map_liquidHeaderTypeFlags::NoWater;
+ uint16 liquidType;
+ uint8 offsetX;
+ uint8 offsetY;
+ uint8 width;
+ uint8 height;
+ float liquidLevel;
+};
+
+#endif // MapDefines_h__