diff --git a/docs/landscape.html b/docs/landscape.html
index f60e859fc3..55f560254b 100644
--- a/docs/landscape.html
+++ b/docs/landscape.html
@@ -226,7 +226,7 @@
m1 bits 4..0: owner of the tile
m2: see signals
m3 bits 7..4: see signals
- m3 bits 3..0 = track type:
+ m8 bits 3..0 = track type:
0 |
@@ -626,7 +626,8 @@
m5 bit 6 set: level crossing
- m1 bits 4..0: owner of the railway track
- - m3 bits 3..0: railway track type
+ - m5 bit 5: set if crossing lights are on
+ - m5 bit 4: pbs reservation state
- m5 bit 0: direction
- - m5 bit 5: set if crossing lights are on
- m7 bits 4..0: owner of the road type 0 (normal road)
- - m5 bit 4: pbs reservation state
+ - m8 bits 3..0: railway track type
@@ -860,7 +860,6 @@
m2: index into the array of stations
m3 bits 7..4: persistent random data for railway stations/waypoints and airports)
m3 bits 7..4: owner of tram tracks (road stop)
- m3 bits 3..0: track type for railway stations/waypoints
m4: custom station id; 0 means standard graphics
m5: graphics index (range from 0..255 for each station type):
@@ -979,6 +978,7 @@
m7 bits 4..0: owner of road (road stops)
m7 bits 7..6: present road types (road stops)
m7: animation frame (railway stations/waypoints, airports)
+ m8 bits 3..0: track type for railway stations/waypoints
@@ -1444,7 +1444,6 @@
- m1 bits 4..0: owner
- m3 bits 7..4: owner of tram
- - m3 bits 3..0: track type for railway
- m5 bit 4: pbs reservation state for railway
- m5 bits 7 clear: tunnel entrance/exit
- m5 bit 7 set: bridge ramp
@@ -1582,6 +1581,7 @@
- m7 bits 4..0: owner of road
- m7 bit 5 set = on snow or desert
- m7 bits 7..6: present road types for road
+ - m8 bits 3..0: track type for railway
diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html
index f5404a5777..757a574176 100644
--- a/docs/landscape_grid.html
+++ b/docs/landscape_grid.html
@@ -102,12 +102,12 @@ the array so you can quickly see what is used and what is not.
XXXX XXXX |
OOOX XXXX |
OOOO XXXX OOOO OOOO |
- OOOO XXXX |
+ OOOO OOOO |
OOOO XXXX |
XXXX XXXX |
OOOO OOOO |
OOOO OOOO |
- OOOO OOOO OOOO OOOO |
+ OOOO OOOO OOOO XXXX |
rail with signals |
@@ -115,7 +115,7 @@ the array so you can quickly see what is used and what is not.
-inherit- |
-inherit- |
OOOO XXXX XXXX XXXX |
- XXXX XXXX |
+ XXXX OOOO |
XXXX XXXX |
-inherit- |
OOOO OOOO |
@@ -128,7 +128,7 @@ the array so you can quickly see what is used and what is not.
-inherit- |
-inherit- |
XXXX XXXX XXXX XXXX |
- OOOO XXXX |
+ -inherit- |
OOOO XXXX |
XXOX OOXX |
OOOO OOOO |
@@ -155,12 +155,12 @@ the array so you can quickly see what is used and what is not.
-inherit- |
-inherit- |
-inherit- |
- XXXX XXXX |
+ XXXX OOOO |
-inherit- |
- XXXX OOOX |
+ XXXX OOOX |
OOXX XOOO |
XXXX XXXX |
- -inherit- |
+ OOOO OOOO OOOO XXXX |
road depot |
@@ -210,12 +210,12 @@ the array so you can quickly see what is used and what is not.
XXXX XXXX |
OXXX XXXX |
XXXX XXXX XXXX XXXX |
- XXXX XXXX |
+ XXXX OOOO |
XXXX XXXX |
XXXX XXXX |
OOXX XXOO |
XXXX XXXX |
- OOOO OOOO OOOO OOOO |
+ OOOO OOOO OOOO XXXX |
rail waypoint |
@@ -356,12 +356,12 @@ the array so you can quickly see what is used and what is not.
XXXX XXXX |
OOOX XXXX |
OOOO OOOO OOOO OOOO |
- XXXX XXXX |
+ XXXX OOOO |
OOOO OOOO |
XOOX XXXX |
OOOO OOOO |
XXXX XXXX |
- OOOO OOOO OOOO OOOO |
+ OOOO OOOO OOOO XXXX |
bridge ramp |
diff --git a/src/bridge_map.h b/src/bridge_map.h
index 74c6974db2..75b20498d1 100644
--- a/src/bridge_map.h
+++ b/src/bridge_map.h
@@ -131,11 +131,12 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D
SetTileType(t, MP_TUNNELBRIDGE);
SetTileOwner(t, o);
_m[t].m2 = 0;
- _m[t].m3 = rt;
+ _m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m5 = 1 << 7 | tt << 2 | d;
SB(_me[t].m6, 2, 4, bridgetype);
_me[t].m7 = 0;
+ _me[t].m8 = rt;
}
/**
diff --git a/src/rail_map.h b/src/rail_map.h
index 2431a79202..bd580d32a6 100644
--- a/src/rail_map.h
+++ b/src/rail_map.h
@@ -115,7 +115,7 @@ static inline bool IsRailDepotTile(TileIndex t)
*/
static inline RailType GetRailType(TileIndex t)
{
- return (RailType)GB(_m[t].m3, 0, 4);
+ return (RailType)GB(_me[t].m8, 0, 4);
}
/**
@@ -125,7 +125,7 @@ static inline RailType GetRailType(TileIndex t)
*/
static inline void SetRailType(TileIndex t, RailType r)
{
- SB(_m[t].m3, 0, 4, r);
+ SB(_me[t].m8, 0, 4, r);
}
@@ -522,11 +522,12 @@ static inline void MakeRailNormal(TileIndex t, Owner o, TrackBits b, RailType r)
SetTileType(t, MP_RAILWAY);
SetTileOwner(t, o);
_m[t].m2 = 0;
- _m[t].m3 = r;
+ _m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m5 = RAIL_TILE_NORMAL << 6 | b;
SB(_me[t].m6, 2, 4, 0);
_me[t].m7 = 0;
+ _me[t].m8 = r;
}
@@ -535,11 +536,12 @@ static inline void MakeRailDepot(TileIndex t, Owner o, DepotID did, DiagDirectio
SetTileType(t, MP_RAILWAY);
SetTileOwner(t, o);
_m[t].m2 = did;
- _m[t].m3 = r;
+ _m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m5 = RAIL_TILE_DEPOT << 6 | d;
SB(_me[t].m6, 2, 4, 0);
_me[t].m7 = 0;
+ _me[t].m8 = r;
}
#endif /* RAIL_MAP_H */
diff --git a/src/road_map.h b/src/road_map.h
index 693730294e..5b3e6b0900 100644
--- a/src/road_map.h
+++ b/src/road_map.h
@@ -579,11 +579,12 @@ static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner tram, Owner r
SetTileType(t, MP_ROAD);
SetTileOwner(t, rail);
_m[t].m2 = town;
- _m[t].m3 = rat;
+ _m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m5 = ROAD_TILE_CROSSING << 6 | roaddir;
SB(_me[t].m6, 2, 4, 0);
_me[t].m7 = rot << 6 | road;
+ _me[t].m8 = rat;
SetRoadOwner(t, ROADTYPE_TRAM, tram);
}
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 33c49fb61e..cca9ad328a 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -1214,6 +1214,38 @@ bool AfterLoadGame()
}
}
+ /* Railtype moved from m3 to m8 in version 200. */
+ if (IsSavegameVersionBefore(200)) {
+ for (TileIndex t = 0; t < map_size; t++) {
+ switch (GetTileType(t)) {
+ case MP_RAILWAY:
+ SetRailType(t, (RailType)GB(_m[t].m3, 0, 4));
+ break;
+
+ case MP_ROAD:
+ if (IsLevelCrossing(t)) {
+ SetRailType(t, (RailType)GB(_m[t].m3, 0, 4));
+ }
+ break;
+
+ case MP_STATION:
+ if (HasStationRail(t)) {
+ SetRailType(t, (RailType)GB(_m[t].m3, 0, 4));
+ }
+ break;
+
+ case MP_TUNNELBRIDGE:
+ if (GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL) {
+ SetRailType(t, (RailType)GB(_m[t].m3, 0, 4));
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
/* Elrails got added in rev 24 */
if (IsSavegameVersionBefore(24)) {
RailType min_rail = RAILTYPE_ELECTRIC;
diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp
index 692f73cf2d..d02dfcbc6e 100644
--- a/src/saveload/saveload.cpp
+++ b/src/saveload/saveload.cpp
@@ -267,8 +267,9 @@
* 197 27978 1.8.x
* 198
* 199
+ * 200
*/
-extern const uint16 SAVEGAME_VERSION = 199; ///< Current savegame version of OpenTTD.
+extern const uint16 SAVEGAME_VERSION = 200; ///< Current savegame version of OpenTTD.
SavegameType _savegame_type; ///< type of savegame we are loading
FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop.
diff --git a/src/tunnel_map.h b/src/tunnel_map.h
index e200a1275e..d6f475d05c 100644
--- a/src/tunnel_map.h
+++ b/src/tunnel_map.h
@@ -58,6 +58,7 @@ static inline void MakeRoadTunnel(TileIndex t, Owner o, DiagDirection d, RoadTyp
_m[t].m5 = TRANSPORT_ROAD << 2 | d;
SB(_me[t].m6, 2, 4, 0);
_me[t].m7 = 0;
+ _me[t].m8 = 0;
SetRoadOwner(t, ROADTYPE_ROAD, o);
if (o != OWNER_TOWN) SetRoadOwner(t, ROADTYPE_TRAM, o);
SetRoadTypes(t, r);
@@ -75,11 +76,12 @@ static inline void MakeRailTunnel(TileIndex t, Owner o, DiagDirection d, RailTyp
SetTileType(t, MP_TUNNELBRIDGE);
SetTileOwner(t, o);
_m[t].m2 = 0;
- _m[t].m3 = r;
+ _m[t].m3 = 0;
_m[t].m4 = 0;
_m[t].m5 = TRANSPORT_RAIL << 2 | d;
SB(_me[t].m6, 2, 4, 0);
_me[t].m7 = 0;
+ _me[t].m8 = r;
}
#endif /* TUNNEL_MAP_H */