25 void RoadVehEnterDepot(Vehicle *v); |
25 void RoadVehEnterDepot(Vehicle *v); |
26 |
26 |
27 |
27 |
28 static bool HasTileRoadAt(TileIndex tile, int i) |
28 static bool HasTileRoadAt(TileIndex tile, int i) |
29 { |
29 { |
30 int mask; |
|
31 byte b; |
30 byte b; |
32 |
31 |
33 switch (GetTileType(tile)) { |
32 switch (GetTileType(tile)) { |
34 case MP_STREET: |
33 case MP_STREET: |
35 b = _m[tile].m5; |
34 b = _m[tile].m5; |
36 |
35 |
37 switch (GB(b, 4, 4)) { |
36 switch (GB(b, 4, 4)) { |
38 case 0: break; // normal road |
37 case 0: break; // normal road |
39 case 1: b = (b & 8 ? 5 : 10); break; // level crossing |
38 case 1: b = (b & 8 ? 5 : 10); break; // level crossing |
40 case 2: return (~b & 3) == i; // depot |
39 case 2: return (~b & 3) == i; // depot |
41 default: return false; |
40 default: return false; |
42 } |
41 } |
43 break; |
42 break; |
44 |
43 |
45 case MP_STATION: |
44 case MP_STATION: |
46 return |
45 return |
47 IS_BYTE_INSIDE(_m[tile].m5, 0x43, 0x43 + 8) && |
46 IS_BYTE_INSIDE(_m[tile].m5, 0x43, 0x43 + 8) && |
48 (~(_m[tile].m5 - 0x43) & 3) == i; |
47 (~(_m[tile].m5 - 0x43) & 3) == i; |
49 |
48 |
50 case MP_TUNNELBRIDGE: |
49 case MP_TUNNELBRIDGE: |
51 // bail out, if not a bridge middle part with road underneath |
50 // bail out, if not a bridge middle part with road underneath |
52 if ((_m[tile].m5 & 0xF8) != 0xE8) return false; |
51 if ((_m[tile].m5 & 0xF8) != 0xE8) return false; |
53 // road direction perpendicular to bridge |
52 // road direction perpendicular to bridge |
54 b = (_m[tile].m5 & 0x01) ? 10 : 5; |
53 b = (_m[tile].m5 & 0x01) ? 10 : 5; |
55 |
54 |
56 default: |
55 default: |
57 return false; |
56 return false; |
58 } |
57 } |
59 |
58 |
60 return HASBIT(b, i); |
59 return HASBIT(b, i); |
61 } |
60 } |
62 |
61 |