From cf2a12dfc43c79008922490c9ec8df99c2f4c517 Mon Sep 17 00:00:00 2001 From: J0anJosep Date: Wed, 10 May 2023 19:47:55 +0200 Subject: [PATCH] Change: Move some bits in water tiles for alignment purposes. --- docs/landscape.html | 26 +++++++++++++------------- docs/landscape_grid.html | 8 ++++---- src/saveload/map_sl.cpp | 11 +++++++++++ src/saveload/saveload.h | 2 ++ src/water_map.h | 6 +++--- 5 files changed, 33 insertions(+), 20 deletions(-) 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.