equal
deleted
inserted
replaced
128 return true; |
128 return true; |
129 } |
129 } |
130 } |
130 } |
131 |
131 |
132 |
132 |
133 static const byte _valid_tileh_slopes[4][15] = { |
133 static const byte _valid_tileh_slopes[][15] = { |
134 |
134 |
135 // set of normal ones |
135 // set of normal ones |
136 { |
136 { |
137 TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT, |
137 TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT, |
138 TRACK_BIT_RIGHT, |
138 TRACK_BIT_RIGHT, |
195 |
195 |
196 TRACK_BIT_Y|TRACK_BIT_RIGHT|TRACK_BIT_UPPER, |
196 TRACK_BIT_Y|TRACK_BIT_RIGHT|TRACK_BIT_UPPER, |
197 TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT, |
197 TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT, |
198 TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT, |
198 TRACK_BIT_X|TRACK_BIT_Y|TRACK_BIT_UPPER|TRACK_BIT_LOWER|TRACK_BIT_LEFT|TRACK_BIT_RIGHT, |
199 }, |
199 }, |
200 |
|
201 // valid railway crossings on slopes |
|
202 { |
|
203 1, 0, 0, // 0, 1, 2 |
|
204 0, 0, 1, // 3, 4, 5 |
|
205 0, 1, 0, // 6, 7, 8 |
|
206 0, 1, 1, // 9, 10, 11 |
|
207 0, 1, 1, // 12, 13, 14 |
|
208 } |
|
209 }; |
200 }; |
210 |
201 |
211 uint GetRailFoundation(uint tileh, uint bits) |
202 uint GetRailFoundation(uint tileh, uint bits) |
212 { |
203 { |
213 int i; |
204 int i; |
344 _m[tile].m5 = m5 | trackbit; |
335 _m[tile].m5 = m5 | trackbit; |
345 } |
336 } |
346 break; |
337 break; |
347 |
338 |
348 case MP_STREET: |
339 case MP_STREET: |
349 if (!_valid_tileh_slopes[3][tileh]) // prevent certain slopes |
340 #define M(x) (1 << (x)) |
|
341 /* Level crossings may only be built on these slopes */ |
|
342 if (!HASBIT(M(14) | M(13) | M(11) | M(10) | M(7) | M(5) | M(0), tileh)) { |
350 return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
343 return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
|
344 } |
|
345 #undef M |
|
346 |
351 if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
347 if (!EnsureNoVehicle(tile)) return CMD_ERROR; |
352 |
348 |
353 if (GetRoadType(tile) == ROAD_NORMAL && ( |
349 if (GetRoadType(tile) == ROAD_NORMAL && ( |
354 (track == TRACK_X && m5 == ROAD_Y) || |
350 (track == TRACK_X && m5 == ROAD_Y) || |
355 (track == TRACK_Y && m5 == ROAD_X) // correct direction? |
351 (track == TRACK_Y && m5 == ROAD_X) // correct direction? |