summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bridge_map.h15
-rw-r--r--src/clear_map.h6
-rw-r--r--src/map_type.h4
-rw-r--r--src/saveload/afterload.cpp6
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);
+ }
}
}