Changeset - r26928:71ffe0efcb63
[Not reviewed]
master
0 2 0
Rubidium - 20 months ago 2023-01-21 16:07:06
rubidium@openttd.org
Codechange: introduce iterator to iterate over the Tiles of a Map

Note: this version is using TileIndex, but that changes later
2 files changed with 81 insertions and 49 deletions:
0 comments (0 inline, 0 general)
src/map_func.h
Show inline comments
 
@@ -36,6 +36,34 @@ extern TileExtended *_me;
 
 */
 
struct Map {
 
private:
 
	/**
 
	 * Iterator to iterate all Tiles
 
	 */
 
	struct Iterator {
 
		typedef TileIndex value_type;
 
		typedef TileIndex *pointer;
 
		typedef TileIndex &reference;
 
		typedef size_t difference_type;
 
		typedef std::forward_iterator_tag iterator_category;
 

	
 
		explicit Iterator(TileIndex index) : index(index) {}
 
		bool operator==(const Iterator &other) const { return this->index == other.index; }
 
		bool operator!=(const Iterator &other) const { return !(*this == other); }
 
		TileIndex operator*() const { return this->index; }
 
		Iterator & operator++() { this->index++; return *this; }
 
	private:
 
		TileIndex index;
 
	};
 

	
 
	/*
 
	 * Iterable ensemble of all Tiles
 
	 */
 
	struct IterateWrapper {
 
		Iterator begin() { return Iterator(0); }
 
		Iterator end() { return Iterator(Map::Size()); }
 
		bool empty() { return false; }
 
	};
 

	
 
	static uint log_x;     ///< 2^_map_log_x == _map_size_x
 
	static uint log_y;     ///< 2^_map_log_y == _map_size_y
 
	static uint size_x;    ///< Size of the map along the X
 
@@ -158,6 +186,12 @@ public:
 
	{
 
		return _m != nullptr;
 
	}
 

	
 
	/**
 
	 * Returns an iterable ensemble of all Tiles
 
	 * @return an iterable ensemble of all Tiles
 
	 */
 
	static IterateWrapper Iterate() { return IterateWrapper(); }
 
};
 

	
 
/**
src/saveload/afterload.cpp
Show inline comments
 
@@ -150,7 +150,7 @@ void SetWaterClassDependingOnSurrounding
 

	
 
static void ConvertTownOwner()
 
{
 
	for (TileIndex tile = 0; tile != Map::Size(); tile++) {
 
	for (auto tile : Map::Iterate()) {
 
		switch (GetTileType(tile)) {
 
			case MP_ROAD:
 
				if (GB(_m[tile].m5, 4, 2) == ROAD_TILE_CROSSING && HasBit(_m[tile].m3, 7)) {
 
@@ -566,8 +566,6 @@ bool AfterLoadGame()
 
{
 
	SetSignalHandlers();
 

	
 
	TileIndex map_size = Map::Size();
 

	
 
	extern TileIndex _cur_tileloop_tile; // From landscape.cpp.
 
	/* The LFSR used in RunTileLoop iteration cannot have a zeroed state, make it non-zeroed. */
 
	if (_cur_tileloop_tile == 0) _cur_tileloop_tile = 1;
 
@@ -614,7 +612,7 @@ bool AfterLoadGame()
 
		for (Station *st : Station::Iterate()) {
 
			st->train_station.w = st->train_station.h = 0;
 
		}
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsTileType(t, MP_STATION)) continue;
 
			if (_m[t].m5 > 7) continue; // is it a rail station tile?
 
			Station *st = Station::Get(_m[t].m2);
 
@@ -631,7 +629,7 @@ bool AfterLoadGame()
 
		_settings_game.construction.map_height_limit = 15;
 

	
 
		/* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			_m[t].height = GB(_m[t].type, 0, 4);
 
			SB(_m[t].type, 0, 2, GB(_me[t].m6, 0, 2));
 
			SB(_me[t].m6, 0, 2, 0);
 
@@ -658,7 +656,7 @@ bool AfterLoadGame()
 
	 * (4.3) version, so I just check when versions are older, and then
 
	 * walk through the whole map.. */
 
	if (IsSavegameVersionBefore(SLV_4, 3)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_WATER) && GetTileOwner(t) >= MAX_COMPANIES) {
 
				SetTileOwner(t, OWNER_WATER);
 
			}
 
@@ -840,7 +838,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_72)) {
 
		/* Locks in very old savegames had OWNER_WATER as owner */
 
		for (TileIndex t = 0; t < Map::Size(); t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				default: break;
 

	
 
@@ -894,7 +892,7 @@ bool AfterLoadGame()
 
		}
 
	}
 

	
 
	for (TileIndex t = 0; t < map_size; t++) {
 
	for (auto t : Map::Iterate()) {
 
		switch (GetTileType(t)) {
 
			case MP_STATION: {
 
				BaseStation *bst = BaseStation::GetByTile(t);
 
@@ -964,7 +962,7 @@ bool AfterLoadGame()
 
	 *  to use m2 (16bit big), so we need to clean m2, and that is where this is
 
	 *  all about ;) */
 
	if (IsSavegameVersionBefore(SLV_6, 1)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_HOUSE:
 
					_m[t].m4 = _m[t].m2;
 
@@ -1019,7 +1017,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_48)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_RAILWAY:
 
					if (IsPlainRail(t)) {
 
@@ -1049,7 +1047,7 @@ bool AfterLoadGame()
 
	if (IsSavegameVersionBefore(SLV_61)) {
 
		/* Added the RoadType */
 
		bool old_bridge = IsSavegameVersionBefore(SLV_42);
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_ROAD:
 
					SB(_m[t].m5, 6, 2, GB(_m[t].m5, 4, 2));
 
@@ -1089,7 +1087,7 @@ bool AfterLoadGame()
 
		bool fix_roadtypes = !IsSavegameVersionBefore(SLV_61);
 
		bool old_bridge = IsSavegameVersionBefore(SLV_42);
 

	
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_ROAD:
 
					if (fix_roadtypes) SB(_me[t].m7, 6, 2, (RoadTypes)GB(_me[t].m7, 5, 3));
 
@@ -1154,7 +1152,7 @@ bool AfterLoadGame()
 

	
 
	/* Railtype moved from m3 to m8 in version SLV_EXTEND_RAILTYPES. */
 
	if (IsSavegameVersionBefore(SLV_EXTEND_RAILTYPES)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_RAILWAY:
 
					SetRailType(t, (RailType)GB(_m[t].m3, 0, 4));
 
@@ -1185,7 +1183,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_42)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (MayHaveBridgeAbove(t)) ClearBridgeMiddle(t);
 
			if (IsBridgeTile(t)) {
 
				if (HasBit(_m[t].m5, 6)) { // middle part
 
@@ -1267,7 +1265,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_ROAD_TYPES)) {
 
		/* Add road subtypes */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			bool has_road = false;
 
			switch (GetTileType(t)) {
 
				case MP_ROAD:
 
@@ -1306,7 +1304,7 @@ bool AfterLoadGame()
 
		}
 

	
 
		/* .. so we convert the entire map from normal to elrail (so maintain "fairness") */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_RAILWAY:
 
					SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
 
@@ -1358,7 +1356,7 @@ bool AfterLoadGame()
 
	/* From version 15, we moved a semaphore bit from bit 2 to bit 3 in m4, making
 
	 *  room for PBS. Now in version 21 move it back :P. */
 
	if (IsSavegameVersionBefore(SLV_21) && !IsSavegameVersionBefore(SLV_15)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_RAILWAY:
 
					if (HasSignals(t)) {
 
@@ -1438,7 +1436,7 @@ bool AfterLoadGame()
 
	 *  To give this prettiness to old savegames, we remove all farmfields and
 
	 *  plant new ones. */
 
	if (IsSavegameVersionBefore(SLV_32)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) {
 
				/* remove fields */
 
				MakeClear(t, CLEAR_GRASS, 3);
 
@@ -1475,7 +1473,7 @@ bool AfterLoadGame()
 
	/* From version 53, the map array was changed for house tiles to allow
 
	 * space for newhouses grf features. A new byte, m7, was also added. */
 
	if (IsSavegameVersionBefore(SLV_53)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_HOUSE)) {
 
				if (GB(_m[t].m3, 6, 2) != TOWN_HOUSE_COMPLETED) {
 
					/* Move the construction stage from m3[7..6] to m5[5..4].
 
@@ -1512,7 +1510,7 @@ bool AfterLoadGame()
 
	UpdateHousesAndTowns();
 

	
 
	if (IsSavegameVersionBefore(SLV_43)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_INDUSTRY)) {
 
				switch (GetIndustryGfx(t)) {
 
					case GFX_POWERPLANT_SPARKS:
 
@@ -1572,7 +1570,7 @@ bool AfterLoadGame()
 
	if (IsSavegameVersionBefore(SLV_49)) for (Company *c : Company::Iterate()) c->face = ConvertFromOldCompanyManagerFace(c->face);
 

	
 
	if (IsSavegameVersionBefore(SLV_52)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_OBJECT) && _m[t].m5 == OBJECT_STATUE) {
 
				_m[t].m2 = CalcClosestTownFromTile(t)->index;
 
			}
 
@@ -1630,7 +1628,7 @@ bool AfterLoadGame()
 
	if (IsSavegameVersionBefore(SLV_64)) {
 
		/* Since now we allow different signal types and variants on a single tile.
 
		 * Move signal states to m4 to make room and clone the signal type/variant. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_RAILWAY) && HasSignals(t)) {
 
				/* move signal states */
 
				SetSignalStates(t, GB(_m[t].m2, 4, 4));
 
@@ -1658,7 +1656,7 @@ bool AfterLoadGame()
 
	/* From version 82, old style canals (above sealevel (0), WATER owner) are no longer supported.
 
	    Replace the owner for those by OWNER_NONE. */
 
	if (IsSavegameVersionBefore(SLV_82)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_WATER) &&
 
					GetWaterTileType(t) == WATER_TILE_CLEAR &&
 
					GetTileOwner(t) == OWNER_WATER &&
 
@@ -1675,7 +1673,7 @@ bool AfterLoadGame()
 
	 * making floods using the removal of ship depots.
 
	 */
 
	if (IsSavegameVersionBefore(SLV_83)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsShipDepotTile(t)) {
 
				_m[t].m4 = (TileHeight(t) == 0) ? OWNER_WATER : OWNER_NONE;
 
			}
 
@@ -1709,7 +1707,7 @@ bool AfterLoadGame()
 
	 * land used to have zero density, now they have full density. Therefore,
 
	 * make all grassy/rough land trees have a density of 3. */
 
	if (IsSavegameVersionBefore(SLV_81)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (GetTileType(t) == MP_TREES) {
 
				TreeGround groundType = (TreeGround)GB(_m[t].m2, 4, 2);
 
				if (groundType != TREE_GROUND_SNOW_DESERT) SB(_m[t].m2, 6, 2, 3);
 
@@ -1767,7 +1765,7 @@ bool AfterLoadGame()
 

	
 
	/* The water class was moved/unified. */
 
	if (IsSavegameVersionBefore(SLV_146)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_STATION:
 
					switch (GetStationType(t)) {
 
@@ -1801,7 +1799,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_86)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			/* Move river flag and update canals to use water class */
 
			if (IsTileType(t, MP_WATER)) {
 
				if (GetWaterClass(t) != WATER_CLASS_RIVER) {
 
@@ -1823,7 +1821,7 @@ bool AfterLoadGame()
 
		/* Update locks, depots, docks and buoys to have a water class based
 
		 * on its neighbouring tiles. Done after river and canal updates to
 
		 * ensure neighbours are correct. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsTileFlat(t)) continue;
 

	
 
			if (IsTileType(t, MP_WATER) && IsLock(t)) SetWaterClassDependingOnSurroundings(t, false);
 
@@ -1832,7 +1830,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_87)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			/* skip oil rigs at borders! */
 
			if ((IsTileType(t, MP_WATER) || IsBuoyTile(t)) &&
 
					(TileX(t) == 0 || TileY(t) == 0 || TileX(t) == Map::MaxX() - 1 || TileY(t) == Map::MaxY() - 1)) {
 
@@ -1899,7 +1897,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_91)) {
 
		/* Increase HouseAnimationFrame from 5 to 7 bits */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_HOUSE) && GetHouseType(t) >= NEW_HOUSE_OFFSET) {
 
				SB(_me[t].m6, 2, 6, GB(_me[t].m6, 3, 5));
 
				SB(_m[t].m3, 5, 1, 0);
 
@@ -1920,7 +1918,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_99)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			/* Set newly introduced WaterClass of industry tiles */
 
			if (IsTileType(t, MP_STATION) && IsOilRig(t)) {
 
				SetWaterClassDependingOnSurroundings(t, true);
 
@@ -1944,7 +1942,7 @@ bool AfterLoadGame()
 
	 * format here, as an old layout wouldn't work properly anyway. To be safe, we
 
	 * clear any possible PBS reservations as well. */
 
	if (IsSavegameVersionBefore(SLV_100)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_RAILWAY:
 
					if (HasSignals(t)) {
 
@@ -2027,7 +2025,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_112)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			/* Check for HQ bit being set, instead of using map accessor,
 
			 * since we've already changed it code-wise */
 
			if (IsTileType(t, MP_OBJECT) && HasBit(_m[t].m5, 7)) {
 
@@ -2039,7 +2037,7 @@ bool AfterLoadGame()
 
		}
 
	}
 
	if (IsSavegameVersionBefore(SLV_144)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsTileType(t, MP_OBJECT)) continue;
 

	
 
			/* Reordering/generalisation of the object bits. */
 
@@ -2055,7 +2053,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_147) && Object::GetNumItems() == 0) {
 
		/* Make real objects for object tiles. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsTileType(t, MP_OBJECT)) continue;
 

	
 
			if (Town::GetNumItems() == 0) {
 
@@ -2322,7 +2320,7 @@ bool AfterLoadGame()
 
	/* The bits for the tree ground and tree density have
 
	 * been swapped (m2 bits 7..6 and 5..4. */
 
	if (IsSavegameVersionBefore(SLV_135)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_CLEAR)) {
 
				if (GetRawClearGround(t) == CLEAR_SNOW) {
 
					SetClearGroundDensity(t, CLEAR_GRASS, GetClearDensity(t));
 
@@ -2367,7 +2365,7 @@ bool AfterLoadGame()
 
			{119, 15}, // 14 unused tiles (radar)
 
			{140,  4}, // APT_GRASS_FENCE_NE_FLAG_2
 
		};
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsAirportTile(t)) {
 
				StationGfx old_gfx = GetStationGfx(t);
 
				byte offset = 0;
 
@@ -2397,7 +2395,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_141)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			/* Reset tropic zone for VOID tiles, they shall not have any. */
 
			if (IsTileType(t, MP_VOID)) SetTropicZone(t, TROPICZONE_NORMAL);
 
		}
 
@@ -2438,7 +2436,7 @@ bool AfterLoadGame()
 

	
 
	/* Move the animation frame to the same location (m7) for all objects. */
 
	if (IsSavegameVersionBefore(SLV_147)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			switch (GetTileType(t)) {
 
				case MP_HOUSE:
 
					if (GetHouseType(t) >= NEW_HOUSE_OFFSET) {
 
@@ -2477,7 +2475,7 @@ bool AfterLoadGame()
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_149)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsTileType(t, MP_STATION)) continue;
 
			if (!IsBuoy(t) && !IsOilRig(t) && !(IsDock(t) && IsTileFlat(t))) {
 
				SetWaterClass(t, WATER_CLASS_INVALID);
 
@@ -2770,7 +2768,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_164) && !IsSavegameVersionBefore(SLV_32)) {
 
		/* We store 4 fences in the field tiles instead of only SE and SW. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsTileType(t, MP_CLEAR) && !IsTileType(t, MP_TREES)) continue;
 
			if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) continue;
 
			uint fence = GB(_m[t].m4, 5, 3);
 
@@ -2819,7 +2817,7 @@ bool AfterLoadGame()
 

	
 
	/* The road owner of standard road stops was not properly accounted for. */
 
	if (IsSavegameVersionBefore(SLV_172)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (!IsStandardRoadStopTile(t)) continue;
 
			Owner o = GetTileOwner(t);
 
			SetRoadOwner(t, RTT_ROAD, o);
 
@@ -2860,7 +2858,7 @@ bool AfterLoadGame()
 

	
 
		/* Blocked tiles could be reserved due to a bug, which causes
 
		 * other places to assert upon e.g. station reconstruction. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (HasStationTileRail(t) && IsStationTileBlocked(t)) {
 
				SetRailStationReservation(t, false);
 
			}
 
@@ -2880,7 +2878,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_186)) {
 
		/* Move ObjectType from map to pool */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_OBJECT)) {
 
				Object *o = Object::Get(_m[t].m2);
 
				o->type = _m[t].m5;
 
@@ -3079,14 +3077,14 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBefore(SLV_TREES_WATER_CLASS)) {
 
		/* Update water class for trees. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_TREES)) SetWaterClass(t, GetTreeGround(t) == TREE_GROUND_SHORE ? WATER_CLASS_SEA : WATER_CLASS_INVALID);
 
		}
 
	}
 

	
 
	/* Update structures for multitile docks */
 
	if (IsSavegameVersionBefore(SLV_MULTITILE_DOCKS)) {
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			/* Clear docking tile flag from relevant tiles as it
 
			 * was not previously cleared. */
 
			if (IsTileType(t, MP_WATER) || IsTileType(t, MP_RAILWAY) || IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)) {
 
@@ -3108,7 +3106,7 @@ bool AfterLoadGame()
 

	
 
	if (IsSavegameVersionBeforeOrAt(SLV_ENDING_YEAR)) {
 
		/* Reset roadtype/streetcartype info for non-road bridges. */
 
		for (TileIndex t = 0; t < map_size; t++) {
 
		for (auto t : Map::Iterate()) {
 
			if (IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) != TRANSPORT_ROAD) {
 
				SetRoadTypes(t, INVALID_ROADTYPE, INVALID_ROADTYPE);
 
			}
 
@@ -3191,7 +3189,7 @@ bool AfterLoadGame()
 

	
 
		if (IsSavegameVersionBeforeOrAt(SLV_MULTITRACK_LEVEL_CROSSINGS)) {
 
			/* Reset unused tree counters to reduce the savegame size. */
 
			for (TileIndex t = 0; t < map_size; t++) {
 
			for (auto t : Map::Iterate()) {
 
				if (IsTileType(t, MP_TREES)) {
 
					SB(_m[t].m2, 0, 4, 0);
 
				}
 
@@ -3199,7 +3197,7 @@ bool AfterLoadGame()
 
		}
 

	
 
		/* Refresh all level crossings to bar adjacent crossing tiles, if needed. */
 
		for (TileIndex tile = 0; tile < Map::Size(); tile++) {
 
		for (auto tile : Map::Iterate()) {
 
			if (IsLevelCrossingTile(tile)) UpdateLevelCrossing(tile, false);
 
		}
 
	}
0 comments (0 inline, 0 general)