diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bridge_map.h | 15 | ||||
-rw-r--r-- | src/clear_map.h | 6 | ||||
-rw-r--r-- | src/map_type.h | 4 | ||||
-rw-r--r-- | src/saveload/afterload.cpp | 6 |
4 files changed, 13 insertions, 18 deletions
diff --git a/src/bridge_map.h b/src/bridge_map.h index 8ee658ce7..6ff78a7ec 100644 --- a/src/bridge_map.h +++ b/src/bridge_map.h @@ -52,13 +52,11 @@ static inline bool MayHaveBridgeAbove(TileIndex t) /** * checks if a bridge is set above the ground of this tile * @param t The tile to analyze - * @pre MayHaveBridgeAbove(t) * @return true if a bridge is detected above */ static inline bool IsBridgeAbove(TileIndex t) { - assert(MayHaveBridgeAbove(t)); - return GB(_m[t].m6, 6, 2) != 0; + return GB(_m[t].type, 2, 2) != 0; } /** @@ -82,7 +80,7 @@ static inline BridgeType GetBridgeType(TileIndex t) static inline Axis GetBridgeAxis(TileIndex t) { assert(IsBridgeAbove(t)); - return (Axis)(GB(_m[t].m6, 6, 2) - 1); + return (Axis)(GB(_m[t].type, 2, 2) - 1); } TileIndex GetNorthernBridgeEnd(TileIndex t); @@ -104,18 +102,15 @@ static inline int GetBridgePixelHeight(TileIndex tile) * Remove the bridge over the given axis. * @param t the tile to remove the bridge from * @param a the axis of the bridge to remove - * @pre MayHaveBridgeAbove(t) */ static inline void ClearSingleBridgeMiddle(TileIndex t, Axis a) { - assert(MayHaveBridgeAbove(t)); - ClrBit(_m[t].m6, 6 + a); + ClrBit(_m[t].type, 2 + a); } /** * Removes bridges from the given, that is bridges along the X and Y axis. * @param t the tile to remove the bridge from - * @pre MayHaveBridgeAbove(t) */ static inline void ClearBridgeMiddle(TileIndex t) { @@ -127,12 +122,10 @@ static inline void ClearBridgeMiddle(TileIndex t) * Set that there is a bridge over the given axis. * @param t the tile to add the bridge to * @param a the axis of the bridge to add - * @pre MayHaveBridgeAbove(t) */ static inline void SetBridgeMiddle(TileIndex t, Axis a) { - assert(MayHaveBridgeAbove(t)); - SetBit(_m[t].m6, 6 + a); + SetBit(_m[t].type, 2 + a); } /** diff --git a/src/clear_map.h b/src/clear_map.h index ca1d1043e..db638ca6c 100644 --- a/src/clear_map.h +++ b/src/clear_map.h @@ -260,10 +260,6 @@ static inline void SetFence(TileIndex t, DiagDirection side, uint h) */ static inline void MakeClear(TileIndex t, ClearGround g, uint density) { - /* If this is a non-bridgeable tile, clear the bridge bits while the rest - * of the tile information is still here. */ - if (!MayHaveBridgeAbove(t)) SB(_m[t].m6, 6, 2, 0); - SetTileType(t, MP_CLEAR); _m[t].m1 = 0; SetTileOwner(t, OWNER_NONE); @@ -271,7 +267,7 @@ static inline void MakeClear(TileIndex t, ClearGround g, uint density) _m[t].m3 = 0; _m[t].m4 = 0 << 5 | 0 << 2; SetClearGroundDensity(t, g, density); // Sets m5 - SB(_m[t].m6, 2, 4, 0); // Other bits are "tropic zone" and "bridge above" + _m[t].m6 = 0; _me[t].m7 = 0; } diff --git a/src/map_type.h b/src/map_type.h index fbfc88308..9e0dec5aa 100644 --- a/src/map_type.h +++ b/src/map_type.h @@ -17,14 +17,14 @@ * Look at docs/landscape.html for the exact meaning of the members. */ struct Tile { - byte type; ///< The type (bits 4..7) + byte type; ///< The type (bits 4..7), bridges (2..3), rainforest/desert (0..1) byte height; ///< The height of the northern corner. byte m1; ///< Primarily used for ownership information uint16 m2; ///< Primarily used for indices to towns, industries and stations byte m3; ///< General purpose byte m4; ///< General purpose byte m5; ///< General purpose - byte m6; ///< Primarily used for bridges and rainforest/desert + byte m6; ///< General purpose }; /** diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 386d15cfe..d2b8b6d5d 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -576,6 +576,12 @@ bool AfterLoadGame() _m[t].height = GB(_m[t].type, 0, 4); SB(_m[t].type, 0, 2, GB(_m[t].m6, 0, 2)); SB(_m[t].m6, 0, 2, 0); + if (MayHaveBridgeAbove(t)) { + SB(_m[t].type, 2, 2, GB(_m[t].m6, 6, 2)); + SB(_m[t].m6, 6, 2, 0); + } else { + SB(_m[t].type, 2, 2, 0); + } } } |