diff --git a/docs/landscape.html b/docs/landscape.html
index 54508e1897..f9856b1de1 100644
--- a/docs/landscape.html
+++ b/docs/landscape.html
@@ -1032,7 +1032,7 @@
-
m6 bits 5..3: the station type (rail, airport, truck, bus, oilrig, dock, buoy, waypoint)
+ m6 bits 6..3: the station type (rail, airport, truck, bus, oilrig, dock, buoy, waypoint)
m6 bit 2: pbs reservation state for railway stations/waypoints
m7 bits 4..0: owner of road (road stops)
diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html
index 9429a621fa..e7aae85d5f 100644
--- a/docs/landscape_grid.html
+++ b/docs/landscape_grid.html
@@ -192,7 +192,7 @@ the array so you can quickly see what is used and what is not.
XXXX OOOO |
XXXX XXXX |
XXXX XXXX |
- OOXXX XOO |
+ OPXXX XOO |
XXXX XXXX |
OOOO OOOO OOXX XXXX |
@@ -205,7 +205,7 @@ the array so you can quickly see what is used and what is not.
XXXX OOPP |
OOXX XXXX |
OOOO OXXX |
- OOXX XOOO |
+ OPXXX OOO |
OOOX XXXX |
OPPP XXXX XXOO OOOO |
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index b59b95c416..db1761db1b 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -1050,6 +1050,15 @@ bool AfterLoadGame()
}
}
+ if (SlXvIsFeatureMissing(XSLFI_MORE_STATION_TYPES)) {
+ /* Expansion of station type field in m6 */
+ for (TileIndex t = 0; t < MapSize(); t++) {
+ if (IsTileType(t, MP_STATION)) {
+ ClrBit(_me[t].m6, 6);
+ }
+ }
+ }
+
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_STATION: {
diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp
index 0e55855f88..33b1e1bce4 100644
--- a/src/saveload/extended_ver_sl.cpp
+++ b/src/saveload/extended_ver_sl.cpp
@@ -166,6 +166,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_ST_INDUSTRY_CARGO_MODE, XSCF_IGNORABLE_UNKNOWN, 1, 1, "st_industry_cargo_mode", nullptr, nullptr, nullptr },
{ XSLFI_TL_SPEED_LIMIT, XSCF_IGNORABLE_UNKNOWN, 1, 1, "tl_speed_limit", nullptr, nullptr, nullptr },
{ XSLFI_WAYPOINT_FLAGS, XSCF_NULL, 1, 1, "waypoint_flags", nullptr, nullptr, nullptr },
+ { XSLFI_MORE_STATION_TYPES, XSCF_NULL, 1, 1, "more_station_types", nullptr, nullptr, nullptr },
{ XSLFI_SCRIPT_INT64, XSCF_NULL, 1, 1, "script_int64", nullptr, nullptr, nullptr },
{ XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker
};
diff --git a/src/saveload/extended_ver_sl.h b/src/saveload/extended_ver_sl.h
index 9366be442d..ad0cfe05cf 100644
--- a/src/saveload/extended_ver_sl.h
+++ b/src/saveload/extended_ver_sl.h
@@ -120,6 +120,7 @@ enum SlXvFeatureIndex {
XSLFI_ST_INDUSTRY_CARGO_MODE, ///< Station industry cargo mode setting
XSLFI_TL_SPEED_LIMIT, ///< Through load maximum speed setting
XSLFI_WAYPOINT_FLAGS, ///< Waypoint flags
+ XSLFI_MORE_STATION_TYPES, ///< More station types (field widening)
XSLFI_SCRIPT_INT64, ///< See: SLV_SCRIPT_INT64
diff --git a/src/station_map.h b/src/station_map.h
index 5f9ab36ffe..e53db5fd5d 100644
--- a/src/station_map.h
+++ b/src/station_map.h
@@ -44,7 +44,7 @@ static const int GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET = 4; ///< The offset for the
static inline StationType GetStationType(TileIndex t)
{
assert_tile(IsTileType(t, MP_STATION), t);
- return (StationType)GB(_me[t].m6, 3, 3);
+ return (StationType)GB(_me[t].m6, 3, 4);
}
/**
@@ -563,7 +563,7 @@ static inline void MakeStation(TileIndex t, Owner o, StationID sid, StationType
_m[t].m4 = 0;
_m[t].m5 = section;
SB(_me[t].m6, 2, 1, 0);
- SB(_me[t].m6, 3, 3, st);
+ SB(_me[t].m6, 3, 4, st);
_me[t].m7 = 0;
_me[t].m8 = 0;
}