diff --git a/docs/landscape.html b/docs/landscape.html
index c48aedcebc..231bfe6bec 100644
--- a/docs/landscape.html
+++ b/docs/landscape.html
@@ -1047,55 +1047,55 @@
- 10..1B |
+ 40..4B |
canal locks
- 10 |
+ 40 |
middle part, (SW-NE direction) |
- 11 |
+ 41 |
middle part, (NW-SE direction) |
- 12 |
+ 42 |
middle part, (NE-SW direction) |
- 13 |
+ 43 |
middle part, (SE-NW direction) |
- 14 |
+ 44 |
lower part, (SW-NE direction) |
- 15 |
+ 45 |
lower part, (NW-SE direction) |
- 16 |
+ 46 |
lower part, (NE-SW direction) |
- 17 |
+ 47 |
lower part, (SE-NW direction) |
- 18 |
+ 48 |
upper part, (SW-NE direction) |
- 19 |
+ 49 |
upper part, (NW-SE direction) |
- 1A |
+ 4A |
upper part, (NE-SW direction) |
- 1B |
+ 4B |
upper part, (SE-NW direction) |
diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html
index 603d78025b..5121d5224f 100644
--- a/docs/landscape_grid.html
+++ b/docs/landscape_grid.html
@@ -246,7 +246,7 @@ the array so you can quickly see what is used and what is not.
| OOOO OOOO OOOO OOOO |
OOOO OOOO |
OOOO OOOO |
- OOOO OOOX |
+ OOOO OOOX |
OOOO OOOO |
OOOO OOOO |
OOOO OOOO OOOO OOOO |
@@ -254,18 +254,18 @@ the array so you can quickly see what is used and what is not.
canal, river |
XXXX XXXX |
- OOOO OOOO |
+ OOOO OOOO |
lock |
OOOO OOOO |
- OOO1 XX XX |
+ O1OOXX XX |
shipdepot |
XXXX XXXX XXXX XXXX |
OOOO OOOO |
- 1OOO OOX X |
+ 1OOOOOX X |
8 |
diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp
index 3ce23a42b2..8d13947bc0 100644
--- a/src/saveload/map_sl.cpp
+++ b/src/saveload/map_sl.cpp
@@ -15,6 +15,7 @@
#include "../map_func.h"
#include "../core/bitmath_func.hpp"
#include "../fios.h"
+#include "../tile_map.h"
#include "../safeguards.h"
@@ -243,6 +244,16 @@ struct MAP5ChunkHandler : ChunkHandler {
SlCopy(buf.data(), MAP_SL_BUF_SIZE, SLE_UINT8);
for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) Tile(i++).m5() = buf[j];
}
+
+ if (IsSavegameVersionBefore(SLV_ALIGN_WATER_BITS)) {
+ /* Move some bits for alignment purposes. */
+ for (TileIndex i = 0; i != size; i++) {
+ if (IsTileType(i, MP_WATER)) {
+ SB(Tile(i).m5(), 6, 1, GB(Tile(i).m5(), 4, 1));
+ SB(Tile(i).m5(), 4, 1, 0);
+ }
+ }
+ }
}
void Save() const override
diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h
index 3ef079489a..1c73661357 100644
--- a/src/saveload/saveload.h
+++ b/src/saveload/saveload.h
@@ -389,6 +389,8 @@ enum SaveLoadVersion : uint16_t {
SLV_DEPOTID_BACKUP_ORDERS, ///< 314 PR#XXXXX Backup orders are indexed through DepotIDs.
+ SLV_ALIGN_WATER_BITS, ///< 315 PR#XXXXX Align some water bits in the map array.
+
SL_MAX_VERSION, ///< Highest possible saveload version
};
diff --git a/src/water_map.h b/src/water_map.h
index 116a37f228..36ac873e63 100644
--- a/src/water_map.h
+++ b/src/water_map.h
@@ -17,12 +17,12 @@
* Bit field layout of m5 for water tiles.
*/
enum WaterTileTypeBitLayout {
- WBL_TYPE_BEGIN = 4, ///< Start of the 'type' bitfield.
- WBL_TYPE_COUNT = 4, ///< Length of the 'type' bitfield.
+ WBL_TYPE_BEGIN = 6, ///< Start of the 'type' bitfield.
+ WBL_TYPE_COUNT = 2, ///< Length of the 'type' bitfield.
WBL_TYPE_NORMAL = 0x0, ///< Clear water or coast ('type' bitfield).
WBL_TYPE_LOCK = 0x1, ///< Lock ('type' bitfield).
- WBL_TYPE_DEPOT = 0x8, ///< Depot ('type' bitfield).
+ WBL_TYPE_DEPOT = 0x2, ///< Depot ('type' bitfield).
WBL_COAST_FLAG = 0, ///< Flag for coast.