1264 if (build_over_road && (GetAllRoadBits(tile) & ((Axis)p1 == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return_cmd_error(STR_DRIVE_THROUGH_ERROR_DIRECTION); |
1264 if (build_over_road && (GetAllRoadBits(tile) & ((Axis)p1 == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return_cmd_error(STR_DRIVE_THROUGH_ERROR_DIRECTION); |
1265 /* Not allowed to build over this road */ |
1265 /* Not allowed to build over this road */ |
1266 if (build_over_road) { |
1266 if (build_over_road) { |
1267 if (IsTileOwner(tile, OWNER_TOWN) && !_patches.road_stop_on_town_road) return_cmd_error(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD); |
1267 if (IsTileOwner(tile, OWNER_TOWN) && !_patches.road_stop_on_town_road) return_cmd_error(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD); |
1268 if (GetRoadTileType(tile) != ROAD_TILE_NORMAL) return CMD_ERROR; |
1268 if (GetRoadTileType(tile) != ROAD_TILE_NORMAL) return CMD_ERROR; |
1269 if (!IsTileOwner(tile, OWNER_TOWN) && !CheckOwnership(GetRoadOwner(tile, ROADTYPE_ROAD)) && !CheckOwnership(GetRoadOwner(tile, ROADTYPE_TRAM))) return CMD_ERROR; |
1269 |
|
1270 RoadTypes cur_rts = GetRoadTypes(tile); |
|
1271 if (!IsTileOwner(tile, OWNER_TOWN) && ( |
|
1272 ((HASBIT(cur_rts, ROADTYPE_ROAD) && !CheckOwnership(GetRoadOwner(tile, ROADTYPE_ROAD)))) || |
|
1273 ((HASBIT(cur_rts, ROADTYPE_TRAM) && !CheckOwnership(GetRoadOwner(tile, ROADTYPE_TRAM)))))) return CMD_ERROR; |
1270 /* Do not remove roadtypes! */ |
1274 /* Do not remove roadtypes! */ |
1271 if (rts != GetRoadTypes(tile) && rts != ROADTYPES_ROADTRAM) return CMD_ERROR; |
1275 rts |= GetRoadTypes(tile); |
1272 } |
1276 } |
1273 |
1277 |
1274 SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
1278 SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); |
1275 |
1279 |
1276 if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) |
1280 if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) |
1984 extern void DrawCanalWater(TileIndex tile); |
1988 extern void DrawCanalWater(TileIndex tile); |
1985 |
1989 |
1986 static void DrawTile_Station(TileInfo *ti) |
1990 static void DrawTile_Station(TileInfo *ti) |
1987 { |
1991 { |
1988 const DrawTileSprites *t = NULL; |
1992 const DrawTileSprites *t = NULL; |
1989 RailType railtype = GetRailType(ti->tile); |
1993 RailType railtype; |
|
1994 RoadTypes roadtypes; |
|
1995 if (IsRailwayStation(ti->tile)) { |
|
1996 railtype = GetRailType(ti->tile); |
|
1997 roadtypes = ROADTYPES_NONE; |
|
1998 } else { |
|
1999 roadtypes = GetRoadTypes(ti->tile); |
|
2000 railtype = RAILTYPE_BEGIN; |
|
2001 } |
1990 const RailtypeInfo *rti = GetRailTypeInfo(railtype); |
2002 const RailtypeInfo *rti = GetRailTypeInfo(railtype); |
1991 uint32 relocation = 0; |
2003 uint32 relocation = 0; |
1992 const Station *st = NULL; |
2004 const Station *st = NULL; |
1993 const StationSpec *statspec = NULL; |
2005 const StationSpec *statspec = NULL; |
1994 PlayerID owner = GetTileOwner(ti->tile); |
2006 PlayerID owner = GetTileOwner(ti->tile); |
2042 // station_land array has been increased from 82 elements to 114 |
2054 // station_land array has been increased from 82 elements to 114 |
2043 // but this is something else. If AI builds station with 114 it looks all weird |
2055 // but this is something else. If AI builds station with 114 it looks all weird |
2044 DrawGroundSprite(image, HASBIT(image, PALETTE_MODIFIER_COLOR) ? palette : PAL_NONE); |
2056 DrawGroundSprite(image, HASBIT(image, PALETTE_MODIFIER_COLOR) ? palette : PAL_NONE); |
2045 |
2057 |
2046 if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC && IsStationTileElectrifiable(ti->tile)) DrawCatenary(ti); |
2058 if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC && IsStationTileElectrifiable(ti->tile)) DrawCatenary(ti); |
|
2059 |
|
2060 if (HASBIT(roadtypes, ROADTYPE_TRAM)) { |
|
2061 Axis axis = GetRoadStopDir(ti->tile) == DIAGDIR_NE ? AXIS_X : AXIS_Y; |
|
2062 DrawGroundSprite((HASBIT(roadtypes, ROADTYPE_ROAD) ? SPR_TRAMWAY_OVERLAY : SPR_TRAMWAY_TRAM) + (axis ^ 1), PAL_NONE); |
|
2063 DrawTramCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y); |
|
2064 } |
2047 |
2065 |
2048 if (IsBuoyTile(ti->tile) && (ti->z != 0 || !IsTileOwner(ti->tile, OWNER_WATER))) DrawCanalWater(ti->tile); |
2066 if (IsBuoyTile(ti->tile) && (ti->z != 0 || !IsTileOwner(ti->tile, OWNER_WATER))) DrawCanalWater(ti->tile); |
2049 |
2067 |
2050 const DrawTileSeqStruct *dtss; |
2068 const DrawTileSeqStruct *dtss; |
2051 foreach_draw_tile_seq(dtss, t->seq) { |
2069 foreach_draw_tile_seq(dtss, t->seq) { |
2085 SpriteID pal = PLAYER_SPRITE_COLOR(_local_player); |
2103 SpriteID pal = PLAYER_SPRITE_COLOR(_local_player); |
2086 const DrawTileSprites *t = &_station_display_datas[image]; |
2104 const DrawTileSprites *t = &_station_display_datas[image]; |
2087 |
2105 |
2088 SpriteID img = t->ground_sprite; |
2106 SpriteID img = t->ground_sprite; |
2089 DrawSprite(img + rti->total_offset, HASBIT(img, PALETTE_MODIFIER_COLOR) ? pal : PAL_NONE, x, y); |
2107 DrawSprite(img + rti->total_offset, HASBIT(img, PALETTE_MODIFIER_COLOR) ? pal : PAL_NONE, x, y); |
|
2108 |
|
2109 if (roadtype == ROADTYPE_TRAM) { |
|
2110 DrawSprite(SPR_TRAMWAY_TRAM + (t->ground_sprite == SPR_ROAD_PAVED_STRAIGHT_X ? 1 : 0), PAL_NONE, x, y); |
|
2111 } |
2090 |
2112 |
2091 const DrawTileSeqStruct *dtss; |
2113 const DrawTileSeqStruct *dtss; |
2092 foreach_draw_tile_seq(dtss, t->seq) { |
2114 foreach_draw_tile_seq(dtss, t->seq) { |
2093 Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z); |
2115 Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z); |
2094 DrawSprite(dtss->image + rti->total_offset, pal, x + pt.x, y + pt.y); |
2116 DrawSprite(dtss->image + rti->total_offset, pal, x + pt.x, y + pt.y); |
2740 { |
2762 { |
2741 if (flags & DC_AUTO) { |
2763 if (flags & DC_AUTO) { |
2742 switch (GetStationType(tile)) { |
2764 switch (GetStationType(tile)) { |
2743 case STATION_RAIL: return_cmd_error(STR_300B_MUST_DEMOLISH_RAILROAD); |
2765 case STATION_RAIL: return_cmd_error(STR_300B_MUST_DEMOLISH_RAILROAD); |
2744 case STATION_AIRPORT: return_cmd_error(STR_300E_MUST_DEMOLISH_AIRPORT_FIRST); |
2766 case STATION_AIRPORT: return_cmd_error(STR_300E_MUST_DEMOLISH_AIRPORT_FIRST); |
2745 case STATION_TRUCK: return_cmd_error(STR_3047_MUST_DEMOLISH_TRUCK_STATION); |
2767 case STATION_TRUCK: return_cmd_error(HASBIT(GetRoadTypes(tile), ROADTYPE_TRAM) ? STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION : STR_3047_MUST_DEMOLISH_TRUCK_STATION); |
2746 case STATION_BUS: return_cmd_error(STR_3046_MUST_DEMOLISH_BUS_STATION); |
2768 case STATION_BUS: return_cmd_error(HASBIT(GetRoadTypes(tile), ROADTYPE_TRAM) ? STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION : STR_3046_MUST_DEMOLISH_BUS_STATION); |
2747 case STATION_BUOY: return_cmd_error(STR_306A_BUOY_IN_THE_WAY); |
2769 case STATION_BUOY: return_cmd_error(STR_306A_BUOY_IN_THE_WAY); |
2748 case STATION_DOCK: return_cmd_error(STR_304D_MUST_DEMOLISH_DOCK_FIRST); |
2770 case STATION_DOCK: return_cmd_error(STR_304D_MUST_DEMOLISH_DOCK_FIRST); |
2749 case STATION_OILRIG: |
2771 case STATION_OILRIG: |
2750 SetDParam(0, STR_4807_OIL_RIG); |
2772 SetDParam(0, STR_4807_OIL_RIG); |
2751 return_cmd_error(STR_4800_IN_THE_WAY); |
2773 return_cmd_error(STR_4800_IN_THE_WAY); |