src/rail_cmd.cpp
changeset 6661 1716fce5ad29
parent 6591 514c1a22e10e
child 6683 b88ae30866ce
equal deleted inserted replaced
6660:b892af29d891 6661:1716fce5ad29
   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: {