12 #include "../stdafx.h" 13 #include "../map_func.h" 14 #include "../core/bitmath_func.hpp" 20 #include "../safeguards.h" 22 static uint32 _map_dim_x;
23 static uint32 _map_dim_y;
31 static void Save_MAPS()
38 static void Load_MAPS()
44 static void Check_MAPS()
51 static const uint MAP_SL_BUF_SIZE = 4096;
53 static void Load_MAPT()
55 std::array<byte, MAP_SL_BUF_SIZE> buf;
59 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
60 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].type = buf[j];
64 static void Save_MAPT()
66 std::array<byte, MAP_SL_BUF_SIZE> buf;
71 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].type;
72 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
76 static void Load_MAPH()
78 std::array<byte, MAP_SL_BUF_SIZE> buf;
82 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
83 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].height = buf[j];
87 static void Save_MAPH()
89 std::array<byte, MAP_SL_BUF_SIZE> buf;
94 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].height;
95 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
99 static void Load_MAP1()
101 std::array<byte, MAP_SL_BUF_SIZE> buf;
105 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
106 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].m1 = buf[j];
110 static void Save_MAP1()
112 std::array<byte, MAP_SL_BUF_SIZE> buf;
117 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].m1;
118 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
122 static void Load_MAP2()
124 std::array<uint16, MAP_SL_BUF_SIZE> buf;
128 SlArray(buf.data(), MAP_SL_BUF_SIZE,
132 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].m2 = buf[j];
136 static void Save_MAP2()
138 std::array<uint16, MAP_SL_BUF_SIZE> buf;
143 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].m2;
144 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT16);
148 static void Load_MAP3()
150 std::array<byte, MAP_SL_BUF_SIZE> buf;
154 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
155 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].m3 = buf[j];
159 static void Save_MAP3()
161 std::array<byte, MAP_SL_BUF_SIZE> buf;
166 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].m3;
167 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
171 static void Load_MAP4()
173 std::array<byte, MAP_SL_BUF_SIZE> buf;
177 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
178 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].m4 = buf[j];
182 static void Save_MAP4()
184 std::array<byte, MAP_SL_BUF_SIZE> buf;
189 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].m4;
190 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
194 static void Load_MAP5()
196 std::array<byte, MAP_SL_BUF_SIZE> buf;
200 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
201 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_m[i++].m5 = buf[j];
205 static void Save_MAP5()
207 std::array<byte, MAP_SL_BUF_SIZE> buf;
212 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_m[i++].m5;
213 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
217 static void Load_MAP6()
219 std::array<byte, MAP_SL_BUF_SIZE> buf;
225 SlArray(buf.data(), 1024, SLE_UINT8);
226 for (uint j = 0; j != 1024; j++) {
227 _me[i++].
m6 =
GB(buf[j], 0, 2);
228 _me[i++].
m6 =
GB(buf[j], 2, 2);
229 _me[i++].
m6 =
GB(buf[j], 4, 2);
230 _me[i++].
m6 =
GB(buf[j], 6, 2);
235 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
236 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_me[i++].m6 = buf[j];
241 static void Save_MAP6()
243 std::array<byte, MAP_SL_BUF_SIZE> buf;
248 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_me[i++].m6;
249 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
253 static void Load_MAP7()
255 std::array<byte, MAP_SL_BUF_SIZE> buf;
259 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
260 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_me[i++].m7 = buf[j];
264 static void Save_MAP7()
266 std::array<byte, MAP_SL_BUF_SIZE> buf;
271 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_me[i++].m7;
272 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
276 static void Load_MAP8()
278 std::array<uint16, MAP_SL_BUF_SIZE> buf;
282 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT16);
283 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++)
_me[i++].m8 = buf[j];
287 static void Save_MAP8()
289 std::array<uint16, MAP_SL_BUF_SIZE> buf;
294 for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) buf[j] =
_me[i++].m8;
295 SlArray(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT16);
301 {
'MAPS', Save_MAPS, Load_MAPS,
nullptr, Check_MAPS, CH_RIFF },
302 {
'MAPT', Save_MAPT, Load_MAPT,
nullptr,
nullptr, CH_RIFF },
303 {
'MAPH', Save_MAPH, Load_MAPH,
nullptr,
nullptr, CH_RIFF },
304 {
'MAPO', Save_MAP1, Load_MAP1,
nullptr,
nullptr, CH_RIFF },
305 {
'MAP2', Save_MAP2, Load_MAP2,
nullptr,
nullptr, CH_RIFF },
306 {
'M3LO', Save_MAP3, Load_MAP3,
nullptr,
nullptr, CH_RIFF },
307 {
'M3HI', Save_MAP4, Load_MAP4,
nullptr,
nullptr, CH_RIFF },
308 {
'MAP5', Save_MAP5, Load_MAP5,
nullptr,
nullptr, CH_RIFF },
309 {
'MAPE', Save_MAP6, Load_MAP6,
nullptr,
nullptr, CH_RIFF },
310 {
'MAP7', Save_MAP7, Load_MAP7,
nullptr,
nullptr, CH_RIFF },
311 {
'MAP8', Save_MAP8, Load_MAP8,
nullptr,
nullptr, CH_RIFF |
CH_LAST },
static uint MapSizeX()
Get the size of the map along the X.
static uint MapSizeY()
Get the size of the map along the Y.
static bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor=0)
Checks whether the savegame is below major.
#define SLEG_END()
End marker of global variables save or load.
Tile * _m
Tiles of the map.
void AllocateMap(uint size_x, uint size_y)
(Re)allocates a map with the given dimension
void SlArray(void *array, size_t length, VarType conv)
Save/Load an array.
LoadCheckData _load_check_data
Data loaded from save during SL_LOAD_CHECK.
Functions/types related to saving and loading games.
Highest possible saveload version.
5.0 1429 5.1 1440 5.2 1525 0.3.6
TileExtended * _me
Extended Tiles of the map.
Handlers and description of chunk.
#define SLEG_CONDVAR(variable, type, from, to)
Storage of a global variable in some savegame versions.
static uint MapSize()
Get the size of the map.
uint32 TileIndex
The index/ID of a Tile.
static uint GB(const T x, const uint8 s, const uint8 n)
Fetch n bits from x, started at bit s.
void SlGlobList(const SaveLoadGlobVarList *sldg)
Save or Load (a list of) global variables.
void SlSetLength(size_t length)
Sets the length of either a RIFF object or the number of items in an array.
Last chunk in this array.