summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2006-12-29 09:10:44 +0000
committerrubidium <rubidium@openttd.org>2006-12-29 09:10:44 +0000
commit50d681c1e9c87b4b1c7addbbfc1d11226eb51f26 (patch)
tree905d42765705ac20ac00b2134ee9290fb427f3a8
parenta367897eb870b85b968bee63e95637975080418d (diff)
downloadopenttd-50d681c1e9c87b4b1c7addbbfc1d11226eb51f26.tar.xz
(svn r7607) -Codechange: remove direct map accesses for snow/desert on tunnels and bridges.
-rw-r--r--bridge_map.h13
-rw-r--r--tunnel_map.h12
-rw-r--r--tunnelbridge_cmd.c21
3 files changed, 40 insertions, 6 deletions
diff --git a/bridge_map.h b/bridge_map.h
index 34da494bf..1cda0da9d 100644
--- a/bridge_map.h
+++ b/bridge_map.h
@@ -81,6 +81,19 @@ static inline TransportType GetBridgeTransportType(TileIndex t)
}
+static inline bool HasBridgeSnowOrDesert(TileIndex t)
+{
+ assert(IsBridgeTile(t));
+ return HASBIT(_m[t].m4, 7);
+}
+
+
+static inline void SetBridgeSnowOrDesert(TileIndex t, bool snow_or_desert)
+{
+ assert(IsBridgeTile(t));
+ SB(_m[t].m4, 7, 1, snow_or_desert);
+}
+
/**
* Finds the end of a bridge in the specified direction starting at a middle tile
*/
diff --git a/tunnel_map.h b/tunnel_map.h
index 9ad54d07e..c9a3a36a3 100644
--- a/tunnel_map.h
+++ b/tunnel_map.h
@@ -35,6 +35,18 @@ static inline TransportType GetTunnelTransportType(TileIndex t)
return (TransportType)GB(_m[t].m5, 2, 2);
}
+static inline bool HasTunnelSnowOrDesert(TileIndex t)
+{
+ assert(IsTunnelTile(t));
+ return HASBIT(_m[t].m4, 7);
+}
+
+static inline void SetTunnelSnowOrDesert(TileIndex t, bool snow_or_desert)
+{
+ assert(IsTunnelTile(t));
+ SB(_m[t].m4, 7, 1, snow_or_desert);
+}
+
TileIndex GetOtherTunnelEnd(TileIndex);
bool IsTunnelInWay(TileIndex, uint z);
diff --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c
index a3c2ba478..7e38814c4 100644
--- a/tunnelbridge_cmd.c
+++ b/tunnelbridge_cmd.c
@@ -798,7 +798,6 @@ uint GetBridgeFoundation(Slope tileh, Axis axis)
static void DrawTile_TunnelBridge(TileInfo *ti)
{
uint32 image;
- bool ice = _m[ti->tile].m4 & 0x80;
if (IsTunnel(ti->tile)) {
if (GetTunnelTransportType(ti->tile) == TRANSPORT_RAIL) {
@@ -807,7 +806,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
image = SPR_TUNNEL_ENTRY_REAR_ROAD;
}
- if (ice) image += 32;
+ if (HasTunnelSnowOrDesert(ti->tile)) image += 32;
image += GetTunnelDirection(ti->tile) * 2;
DrawGroundSprite(image);
@@ -817,6 +816,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
DrawBridgeMiddle(ti);
} else if (IsBridge(ti->tile)) { // XXX is this necessary?
int base_offset;
+ bool ice = HasBridgeSnowOrDesert(ti->tile);
if (GetBridgeTransportType(ti->tile) == TRANSPORT_RAIL) {
base_offset = GetRailTypeInfo(GetRailType(ti->tile))->bridge_offset;
@@ -1109,17 +1109,26 @@ static void AnimateTile_TunnelBridge(TileIndex tile)
static void TileLoop_TunnelBridge(TileIndex tile)
{
+ bool snow_or_desert = IsTunnelTile(tile) ? HasTunnelSnowOrDesert(tile) : HasBridgeSnowOrDesert(tile);
switch (_opt.landscape) {
case LT_HILLY:
- if (HASBIT(_m[tile].m4, 7) != (GetTileZ(tile) > _opt.snow_line)) {
- TOGGLEBIT(_m[tile].m4, 7);
+ if (snow_or_desert != (GetTileZ(tile) > _opt.snow_line)) {
+ if (IsTunnelTile(tile)) {
+ SetTunnelSnowOrDesert(tile, !snow_or_desert);
+ } else {
+ SetBridgeSnowOrDesert(tile, !snow_or_desert);
+ }
MarkTileDirtyByTile(tile);
}
break;
case LT_DESERT:
- if (GetTropicZone(tile) == TROPICZONE_DESERT && !(_m[tile].m4 & 0x80)) {
- _m[tile].m4 |= 0x80;
+ if (GetTropicZone(tile) == TROPICZONE_DESERT && !snow_or_desert) {
+ if (IsTunnelTile(tile)) {
+ SetTunnelSnowOrDesert(tile, true);
+ } else {
+ SetBridgeSnowOrDesert(tile, true);
+ }
MarkTileDirtyByTile(tile);
}
break;