Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
adt.h
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#ifndef ADT_H
7
#define ADT_H
8
9
#include "
loadlib.h
"
10
11
#define TILESIZE (533.33333f)
12
#define CHUNKSIZE ((TILESIZE) / 16.0f)
13
#define UNITSIZE (CHUNKSIZE / 8.0f)
14
15
enum
LiquidType
16
{
17
LIQUID_TYPE_WATER
= 0,
18
LIQUID_TYPE_OCEAN
= 1,
19
LIQUID_TYPE_MAGMA
= 2,
20
LIQUID_TYPE_SLIME
= 3
21
};
22
23
//**************************************************************************************
24
// ADT file class
25
//**************************************************************************************
26
#define ADT_CELLS_PER_GRID 16
27
#define ADT_CELL_SIZE 8
28
#define ADT_GRID_SIZE (ADT_CELLS_PER_GRID*ADT_CELL_SIZE)
29
30
#pragma pack(push, 1)
31
32
//
33
// Adt file height map chunk
34
//
35
class
adt_MCVT
36
{
37
union
{
38
uint32
fcc
;
39
char
fcc_txt
[4];
40
};
41
uint32
size
;
42
public
:
43
float
height_map
[(
ADT_CELL_SIZE
+1)*(
ADT_CELL_SIZE
+1)+
ADT_CELL_SIZE
*
ADT_CELL_SIZE
];
44
};
45
46
//
47
// Adt file liquid map chunk (old)
48
//
49
class
adt_MCLQ
50
{
51
union
{
52
uint32
fcc
;
53
char
fcc_txt
[4];
54
};
55
uint32
size
;
56
public
:
57
float
height1
;
58
float
height2
;
59
struct
liquid_data
{
60
uint32
light
;
61
float
height
;
62
}
liquid
[
ADT_CELL_SIZE
+1][
ADT_CELL_SIZE
+1];
63
64
// 1<<0 - ochen
65
// 1<<1 - lava/slime
66
// 1<<2 - water
67
// 1<<6 - all water
68
// 1<<7 - dark water
69
// == 0x0F - not show liquid
70
uint8
flags
[
ADT_CELL_SIZE
][
ADT_CELL_SIZE
];
71
uint8
data
[84];
72
};
73
74
//
75
// Adt file cell chunk
76
//
77
class
adt_MCNK
78
{
79
union
{
80
uint32
fcc
;
81
char
fcc_txt
[4];
82
};
83
uint32
size
;
84
public
:
85
uint32
flags
;
86
uint32
ix
;
87
uint32
iy
;
88
uint32
nLayers
;
89
uint32
nDoodadRefs
;
90
union
91
{
92
struct
93
{
94
uint32
offsMCVT
;
// height map
95
uint32
offsMCNR
;
// Normal vectors for each vertex
96
}
offsets
;
97
uint64
HighResHoles
;
// TODO: maybe use this?
98
}
union_5_3_0
;
99
uint32
offsMCLY
;
// Texture layer definitions
100
uint32
offsMCRF
;
// A list of indices into the parent file's MDDF chunk
101
uint32
offsMCAL
;
// Alpha maps for additional texture layers
102
uint32
sizeMCAL
;
103
uint32
offsMCSH
;
// Shadow map for static shadows on the terrain
104
uint32
sizeMCSH
;
105
uint32
areaid
;
106
uint32
nMapObjRefs
;
107
uint32
holes
;
108
uint16
s
[2];
109
uint32
data1
;
110
uint32
data2
;
111
uint32
data3
;
112
uint32
predTex
;
113
uint32
nEffectDoodad
;
114
uint32
offsMCSE
;
115
uint32
nSndEmitters
;
116
uint32
offsMCLQ
;
// Liqid level (old)
117
uint32
sizeMCLQ
;
//
118
float
zpos
;
119
float
xpos
;
120
float
ypos
;
121
uint32
offsMCCV
;
// offsColorValues in WotLK
122
uint32
props
;
123
uint32
effectId
;
124
};
125
126
#define ADT_LIQUID_HEADER_FULL_LIGHT 0x01
127
#define ADT_LIQUID_HEADER_NO_HIGHT 0x02
128
129
struct
adt_liquid_header
{
130
uint16
liquidType
;
// Index from LiquidType.dbc
131
uint16
formatFlags
;
132
float
heightLevel1
;
133
float
heightLevel2
;
134
uint8
xOffset
;
135
uint8
yOffset
;
136
uint8
width
;
137
uint8
height
;
138
uint32
offsData2a
;
139
uint32
offsData2b
;
140
};
141
142
//
143
// Adt file liquid data chunk (new)
144
//
145
class
adt_MH2O
146
{
147
public
:
148
union
{
149
uint32
fcc
;
150
char
fcc_txt
[4];
151
};
152
uint32
size
;
153
154
struct
adt_LIQUID
{
155
uint32
offsData1
;
156
uint32
used
;
157
uint32
offsData2
;
158
}
liquid
[
ADT_CELLS_PER_GRID
][
ADT_CELLS_PER_GRID
];
159
160
adt_liquid_header
*
getLiquidData
(
int
x,
int
y)
161
{
162
if
(
liquid
[x][y].used &&
liquid
[x][y].offsData1)
163
return
(
adt_liquid_header
*)((
uint8
*)
this
+ 8 +
liquid
[x][y].offsData1);
164
return
0;
165
}
166
167
float
*
getLiquidHeightMap
(
adt_liquid_header
*h)
168
{
169
if
(h->
formatFlags
&
ADT_LIQUID_HEADER_NO_HIGHT
)
170
return
0;
171
if
(h->
offsData2b
)
172
return
(
float
*)((
uint8
*)
this
+ 8 + h->
offsData2b
);
173
return
0;
174
}
175
176
uint8
*
getLiquidLightMap
(
adt_liquid_header
*h)
177
{
178
if
(h->
formatFlags
&
ADT_LIQUID_HEADER_FULL_LIGHT
)
179
return
0;
180
if
(h->
offsData2b
)
181
{
182
if
(h->
formatFlags
&
ADT_LIQUID_HEADER_NO_HIGHT
)
183
return
(
uint8
*)((
uint8
*)
this
+ 8 + h->
offsData2b
);
184
return
(
uint8
*)((
uint8
*)
this
+ 8 + h->
offsData2b
+ (h->
width
+1)*(h->
height
+1)*4);
185
}
186
return
0;
187
}
188
189
uint32
*
getLiquidFullLightMap
(
adt_liquid_header
*h)
190
{
191
if
(!(h->
formatFlags
&
ADT_LIQUID_HEADER_FULL_LIGHT
))
192
return
0;
193
if
(h->
offsData2b
)
194
{
195
if
(h->
formatFlags
&
ADT_LIQUID_HEADER_NO_HIGHT
)
196
return
(
uint32
*)((
uint8
*)
this
+ 8 + h->
offsData2b
);
197
return
(
uint32
*)((
uint8
*)
this
+ 8 + h->
offsData2b
+ (h->
width
+1)*(h->
height
+1)*4);
198
}
199
return
0;
200
}
201
202
uint64
getLiquidShowMap
(
adt_liquid_header
*h)
203
{
204
if
(h->
offsData2a
)
205
return
*((
uint64
*)((
uint8
*)
this
+ 8 + h->
offsData2a
));
206
else
207
return
0xFFFFFFFFFFFFFFFFuLL;
208
}
209
};
210
211
#pragma pack(pop)
212
213
#endif
uint8
std::uint8_t uint8
Definition
Define.h:79
uint32
std::uint32_t uint32
Definition
Define.h:77
uint64
std::uint64_t uint64
Definition
Define.h:76
uint16
std::uint16_t uint16
Definition
Define.h:78
ADT_LIQUID_HEADER_FULL_LIGHT
#define ADT_LIQUID_HEADER_FULL_LIGHT
Definition
adt.h:126
ADT_LIQUID_HEADER_NO_HIGHT
#define ADT_LIQUID_HEADER_NO_HIGHT
Definition
adt.h:127
ADT_CELL_SIZE
#define ADT_CELL_SIZE
Definition
adt.h:27
LiquidType
LiquidType
Definition
adt.h:16
LIQUID_TYPE_WATER
@ LIQUID_TYPE_WATER
Definition
adt.h:17
LIQUID_TYPE_SLIME
@ LIQUID_TYPE_SLIME
Definition
adt.h:20
LIQUID_TYPE_MAGMA
@ LIQUID_TYPE_MAGMA
Definition
adt.h:19
LIQUID_TYPE_OCEAN
@ LIQUID_TYPE_OCEAN
Definition
adt.h:18
ADT_CELLS_PER_GRID
#define ADT_CELLS_PER_GRID
Definition
adt.h:26
adt_MCLQ
Definition
adt.h:50
adt_MCLQ::size
uint32 size
Definition
adt.h:55
adt_MCLQ::height1
float height1
Definition
adt.h:57
adt_MCLQ::fcc_txt
char fcc_txt[4]
Definition
adt.h:53
adt_MCLQ::data
uint8 data[84]
Definition
adt.h:71
adt_MCLQ::fcc
uint32 fcc
Definition
adt.h:52
adt_MCLQ::height2
float height2
Definition
adt.h:58
adt_MCLQ::liquid
struct adt_MCLQ::liquid_data liquid[ADT_CELL_SIZE+1][ADT_CELL_SIZE+1]
adt_MCLQ::flags
uint8 flags[ADT_CELL_SIZE][ADT_CELL_SIZE]
Definition
adt.h:70
adt_MCNK
Definition
adt.h:78
adt_MCNK::nEffectDoodad
uint32 nEffectDoodad
Definition
adt.h:113
adt_MCNK::offsMCRF
uint32 offsMCRF
Definition
adt.h:100
adt_MCNK::offsMCAL
uint32 offsMCAL
Definition
adt.h:101
adt_MCNK::sizeMCLQ
uint32 sizeMCLQ
Definition
adt.h:117
adt_MCNK::offsMCLY
uint32 offsMCLY
Definition
adt.h:99
adt_MCNK::offsMCSE
uint32 offsMCSE
Definition
adt.h:114
adt_MCNK::HighResHoles
uint64 HighResHoles
Definition
adt.h:97
adt_MCNK::nSndEmitters
uint32 nSndEmitters
Definition
adt.h:115
adt_MCNK::union_5_3_0
union adt_MCNK::@365053364162235155223362363250025005154125047120 union_5_3_0
adt_MCNK::zpos
float zpos
Definition
adt.h:118
adt_MCNK::data2
uint32 data2
Definition
adt.h:110
adt_MCNK::holes
uint32 holes
Definition
adt.h:107
adt_MCNK::ix
uint32 ix
Definition
adt.h:86
adt_MCNK::xpos
float xpos
Definition
adt.h:119
adt_MCNK::props
uint32 props
Definition
adt.h:122
adt_MCNK::sizeMCSH
uint32 sizeMCSH
Definition
adt.h:104
adt_MCNK::size
uint32 size
Definition
adt.h:83
adt_MCNK::offsMCNR
uint32 offsMCNR
Definition
adt.h:95
adt_MCNK::fcc_txt
char fcc_txt[4]
Definition
adt.h:81
adt_MCNK::offsets
struct adt_MCNK::@365053364162235155223362363250025005154125047120::@231155030214270125170040150100311170176170073216 offsets
adt_MCNK::data1
uint32 data1
Definition
adt.h:109
adt_MCNK::fcc
uint32 fcc
Definition
adt.h:80
adt_MCNK::predTex
uint32 predTex
Definition
adt.h:112
adt_MCNK::effectId
uint32 effectId
Definition
adt.h:123
adt_MCNK::offsMCVT
uint32 offsMCVT
Definition
adt.h:94
adt_MCNK::data3
uint32 data3
Definition
adt.h:111
adt_MCNK::nLayers
uint32 nLayers
Definition
adt.h:88
adt_MCNK::iy
uint32 iy
Definition
adt.h:87
adt_MCNK::sizeMCAL
uint32 sizeMCAL
Definition
adt.h:102
adt_MCNK::s
uint16 s[2]
Definition
adt.h:108
adt_MCNK::nMapObjRefs
uint32 nMapObjRefs
Definition
adt.h:106
adt_MCNK::flags
uint32 flags
Definition
adt.h:85
adt_MCNK::nDoodadRefs
uint32 nDoodadRefs
Definition
adt.h:89
adt_MCNK::offsMCSH
uint32 offsMCSH
Definition
adt.h:103
adt_MCNK::areaid
uint32 areaid
Definition
adt.h:105
adt_MCNK::offsMCLQ
uint32 offsMCLQ
Definition
adt.h:116
adt_MCNK::offsMCCV
uint32 offsMCCV
Definition
adt.h:121
adt_MCNK::ypos
float ypos
Definition
adt.h:120
adt_MCVT
Definition
adt.h:36
adt_MCVT::height_map
float height_map[(ADT_CELL_SIZE+1) *(ADT_CELL_SIZE+1)+ADT_CELL_SIZE *ADT_CELL_SIZE]
Definition
adt.h:43
adt_MCVT::fcc
uint32 fcc
Definition
adt.h:38
adt_MCVT::fcc_txt
char fcc_txt[4]
Definition
adt.h:39
adt_MCVT::size
uint32 size
Definition
adt.h:41
adt_MH2O
Definition
adt.h:146
adt_MH2O::getLiquidShowMap
uint64 getLiquidShowMap(adt_liquid_header *h)
Definition
adt.h:202
adt_MH2O::size
uint32 size
Definition
adt.h:152
adt_MH2O::getLiquidData
adt_liquid_header * getLiquidData(int x, int y)
Definition
adt.h:160
adt_MH2O::getLiquidFullLightMap
uint32 * getLiquidFullLightMap(adt_liquid_header *h)
Definition
adt.h:189
adt_MH2O::fcc_txt
char fcc_txt[4]
Definition
adt.h:150
adt_MH2O::fcc
uint32 fcc
Definition
adt.h:149
adt_MH2O::getLiquidLightMap
uint8 * getLiquidLightMap(adt_liquid_header *h)
Definition
adt.h:176
adt_MH2O::liquid
struct adt_MH2O::adt_LIQUID liquid[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]
adt_MH2O::getLiquidHeightMap
float * getLiquidHeightMap(adt_liquid_header *h)
Definition
adt.h:167
loadlib.h
adt_MCLQ::liquid_data
Definition
adt.h:59
adt_MCLQ::liquid_data::light
uint32 light
Definition
adt.h:60
adt_MCLQ::liquid_data::height
float height
Definition
adt.h:61
adt_MH2O::adt_LIQUID
Definition
adt.h:154
adt_MH2O::adt_LIQUID::offsData1
uint32 offsData1
Definition
adt.h:155
adt_MH2O::adt_LIQUID::used
uint32 used
Definition
adt.h:156
adt_MH2O::adt_LIQUID::offsData2
uint32 offsData2
Definition
adt.h:157
adt_liquid_header
Definition
adt.h:129
adt_liquid_header::liquidType
uint16 liquidType
Definition
adt.h:130
adt_liquid_header::heightLevel2
float heightLevel2
Definition
adt.h:133
adt_liquid_header::formatFlags
uint16 formatFlags
Definition
adt.h:131
adt_liquid_header::width
uint8 width
Definition
adt.h:136
adt_liquid_header::offsData2a
uint32 offsData2a
Definition
adt.h:138
adt_liquid_header::heightLevel1
float heightLevel1
Definition
adt.h:132
adt_liquid_header::xOffset
uint8 xOffset
Definition
adt.h:134
adt_liquid_header::yOffset
uint8 yOffset
Definition
adt.h:135
adt_liquid_header::offsData2b
uint32 offsData2b
Definition
adt.h:139
adt_liquid_header::height
uint8 height
Definition
adt.h:137
src
tools
map_extractor
adt.h
Generated on
for Project SkyFire Core by
1.17.0