293 if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
293 if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
294 |
294 |
295 if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) { |
295 if (GetRoadTileType(tile) == ROAD_TILE_NORMAL) { |
296 if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS); |
296 if (HasRoadWorks(tile)) return_cmd_error(STR_ROAD_WORKS_IN_PROGRESS); |
297 |
297 |
298 if ((track == TRACK_X && GetRoadBits(tile) == ROAD_Y) || |
298 RoadTypes roadtypes = GetRoadTypes(tile); |
299 (track == TRACK_Y && GetRoadBits(tile) == ROAD_X)) { |
299 RoadBits road = GetRoadBits(tile, ROADTYPE_ROAD); |
|
300 RoadBits tram = GetRoadBits(tile, ROADTYPE_TRAM); |
|
301 switch (roadtypes) { |
|
302 default: break; |
|
303 case ROADTYPES_ROADTRAM: if (road == tram) break; |
|
304 /* FALL THROUGH */ |
|
305 case ROADTYPES_ROADHWAY: // Road and highway are incompatible in this case |
|
306 case ROADTYPES_TRAMHWAY: // Tram and highway are incompatible in this case |
|
307 case ROADTYPES_ALL: // Also incompatible |
|
308 return CMD_ERROR; |
|
309 } |
|
310 |
|
311 road |= tram | GetRoadBits(tile, ROADTYPE_HWAY); |
|
312 |
|
313 if ((track == TRACK_X && road == ROAD_Y) || |
|
314 (track == TRACK_Y && road == ROAD_X)) { |
300 if (flags & DC_EXEC) { |
315 if (flags & DC_EXEC) { |
301 MakeRoadCrossing(tile, GetTileOwner(tile), _current_player, (track == TRACK_X ? AXIS_Y : AXIS_X), railtype, GetTownIndex(tile)); |
316 MakeRoadCrossing(tile, GetRoadOwner(tile, ROADTYPE_ROAD), GetRoadOwner(tile, ROADTYPE_TRAM), GetRoadOwner(tile, ROADTYPE_HWAY), _current_player, (track == TRACK_X ? AXIS_Y : AXIS_X), railtype, roadtypes, GetTownIndex(tile)); |
302 } |
317 } |
303 break; |
318 break; |
304 } |
319 } |
305 } |
320 } |
306 |
321 |
357 !EnsureNoVehicleOnGround(tile)) { |
372 !EnsureNoVehicleOnGround(tile)) { |
358 return CMD_ERROR; |
373 return CMD_ERROR; |
359 } |
374 } |
360 |
375 |
361 if (flags & DC_EXEC) { |
376 if (flags & DC_EXEC) { |
362 MakeRoadNormal(tile, GetCrossingRoadOwner(tile), GetCrossingRoadBits(tile), GetTownIndex(tile)); |
377 MakeRoadNormal(tile, GetCrossingRoadBits(tile), GetRoadTypes(tile), GetTownIndex(tile), GetRoadOwner(tile, ROADTYPE_ROAD), GetRoadOwner(tile, ROADTYPE_TRAM), GetRoadOwner(tile, ROADTYPE_HWAY)); |
363 } |
378 } |
364 break; |
379 break; |
365 } |
380 } |
366 |
381 |
367 case MP_RAILWAY: { |
382 case MP_RAILWAY: { |