diff options
author | tron <tron@openttd.org> | 2006-03-11 17:06:16 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2006-03-11 17:06:16 +0000 |
commit | e63e3bb84c0a74eab9d56489d826102f2beb668e (patch) | |
tree | 2a7233a5c11752c627c41179a3f110f51af0970f | |
parent | 929fae7b685a21e2337736084e42731f84cf8cba (diff) | |
download | openttd-e63e3bb84c0a74eab9d56489d826102f2beb668e.tar.xz |
(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
-rw-r--r-- | smallmap_gui.c | 18 | ||||
-rw-r--r-- | tunnelbridge_cmd.c | 20 |
2 files changed, 23 insertions, 15 deletions
diff --git a/smallmap_gui.c b/smallmap_gui.c index 1820845ca..cfd3cf737 100644 --- a/smallmap_gui.c +++ b/smallmap_gui.c @@ -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 @@ static inline TileType GetEffectiveTileType(TileIndex tile) 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 --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c index b7c837e67..37576556b 100644 --- a/tunnelbridge_cmd.c +++ b/tunnelbridge_cmd.c @@ -195,7 +195,9 @@ bool CheckBridge_Stuff(byte bridge_type, uint bridge_len) 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 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2) /* 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 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2) 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 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2) 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 @@ not_valid_below:; /* 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) |