# HG changeset patch # User tron # Date 1142096776 0 # Node ID 2123f8062a2d11102c531a0e2d192fb3a37c7581 # Parent 774b1e6553a70fd7f206df504b22ce151f3a0f5c (svn r3820) Be a bit more strict with types: use special types instead of generic byte and don't fill arbitrary data into inappropriate types diff -r 774b1e6553a7 -r 2123f8062a2d smallmap_gui.c --- a/smallmap_gui.c Sat Mar 11 09:10:46 2006 +0000 +++ b/smallmap_gui.c Sat Mar 11 17:06:16 2006 +0000 @@ -11,6 +11,7 @@ #include "tile.h" #include "gui.h" #include "tree_map.h" +#include "tunnel_map.h" #include "window.h" #include "gfx.h" #include "viewport.h" @@ -345,12 +346,17 @@ TileType t = GetTileType(tile); if (t == MP_TUNNELBRIDGE) { - t = _m[tile].m5; - if ((t & 0x80) == 0) t >>= 1; - switch (t & 0x06) { - case 0x00: t = MP_RAILWAY; break; - case 0x02: t = MP_STREET; break; - default: t = MP_WATER; break; + TransportType tt; + + if (_m[tile].m5 & 0x80) { + tt = GB(_m[tile].m5, 1, 2); + } else { + tt = GetTunnelTransportType(tile); + } + switch (tt) { + case TRANSPORT_RAIL: t = MP_RAILWAY; break; + case TRANSPORT_ROAD: t = MP_STREET; break; + default: t = MP_WATER; break; } } return t; diff -r 774b1e6553a7 -r 2123f8062a2d tunnelbridge_cmd.c --- a/tunnelbridge_cmd.c Sat Mar 11 09:10:46 2006 +0000 +++ b/tunnelbridge_cmd.c Sat Mar 11 17:06:16 2006 +0000 @@ -195,7 +195,9 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2) { int bridge_type; - byte rail_or_road, railtype, m5; + byte m5; + TransportType transport; + RailType railtype; int sx,sy; TileInfo ti_start, ti_end; TileIndex tile; @@ -211,17 +213,17 @@ /* unpack parameters */ bridge_type = GB(p2, 0, 8); - railtype = GB(p2, 8, 8); if (p1 >= MapSize()) return CMD_ERROR; // type of bridge - if (HASBIT(railtype, 7)) { // bit 15 of original p2 param + if (HASBIT(p2, 15)) { railtype = 0; - rail_or_road = 2; + transport = TRANSPORT_ROAD; } else { - if (!ValParamRailtype(railtype)) return CMD_ERROR; - rail_or_road = 0; + if (!ValParamRailtype(GB(p2, 8, 8))) return CMD_ERROR; + railtype = GB(p2, 8, 8); + transport = TRANSPORT_RAIL; } sx = TileX(p1) * 16; @@ -311,7 +313,7 @@ MP_MAP2 | MP_MAP3LO | MP_MAPOWNER_CURRENT | MP_MAP5, (bridge_type << 4), /* map2 */ railtype, /* map3_lo */ - 0x80 | direction | rail_or_road /* map5 */ + 0x80 | direction | transport << 1 /* map5 */ ); /* build the end tile */ @@ -320,7 +322,7 @@ MP_MAP2 | MP_MAP3LO | MP_MAPOWNER_CURRENT | MP_MAP5, (bridge_type << 4), /* map2 */ railtype, /* map3_lo */ - 0x80 | 0x20 | direction | rail_or_road /* map5 */ + 0x80 | 0x20 | direction | transport << 1 /* map5 */ ); } @@ -374,7 +376,7 @@ /* do middle part of bridge */ if (flags & DC_EXEC) { - _m[tile].m5 = (byte)(m5 | direction | rail_or_road); + _m[tile].m5 = (byte)(m5 | direction | transport << 1); SetTileType(tile, MP_TUNNELBRIDGE); //bridges pieces sequence (middle parts)