src/openttd.cpp
changeset 8521 8580cfbf1786
parent 8513 3d3f8ed01a37
child 8525 2670d1ad818c
--- a/src/openttd.cpp	Sat Feb 09 17:30:13 2008 +0000
+++ b/src/openttd.cpp	Sat Feb 09 17:36:21 2008 +0000
@@ -2362,6 +2362,38 @@
 		}
 	}
 
+	if (CheckSavegameVersion(87)) {
+		for (TileIndex t = 0; t < map_size; t++) {
+			if (IsBuoyTile(t) || IsDriveThroughStopTile(t) || IsTileType(t, MP_WATER)) {
+				Owner o = GetTileOwner(t);
+				if (IsValidPlayer(o) && !GetPlayer(o)->is_active) {
+					_current_player = o;
+					ChangeTileOwner(t, o, PLAYER_SPECTATOR);
+				}
+				if (IsBuoyTile(t)) {
+					/* reset buoy owner to OWNER_NONE in the station struct
+					 * (even if it is owned by active player) */
+					GetStationByTile(t)->owner = OWNER_NONE;
+				}
+			} else if (IsTileType(t, MP_ROAD)) {
+				/* works for all RoadTileType */
+				for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
+					/* update even non-existing road types to update tile owner too */
+					Owner o = GetRoadOwner(t, rt);
+					if (IsValidPlayer(o) && !GetPlayer(o)->is_active) SetRoadOwner(t, rt, OWNER_NONE);
+				}
+				if (GetRoadTileType(t) == ROAD_TILE_CROSSING) {
+					Owner o = GetTileOwner(t);
+					if (!GetPlayer(o)->is_active) {
+						/* remove leftover rail piece from crossing (from very old savegames) */
+						_current_player = o;
+						DoCommand(t, 0, AxisToTrack(OtherAxis(GetCrossingRoadAxis(t))), DC_EXEC | DC_BANKRUPT, CMD_REMOVE_SINGLE_RAIL);
+					}
+				}
+			}
+		}
+	}
+
 	return InitializeWindowsAndCaches();
 }