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; }