src/station_cmd.cpp
changeset 7187 f7dc3204d457
parent 7179 3e123c2b7c93
child 7199 11f9a87e9ac5
equal deleted inserted replaced
7186:fe5c15ed69fd 7187:f7dc3204d457
  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);