|
@@ -251,13 +251,13 @@ static uint32 CheckRoadSlope(Slope tileh
|
|
|
if (tileh != SLOPE_FLAT) *pieces |= _valid_tileh_slopes_road[0][tileh];
|
|
|
return 0; // no extra cost
|
|
|
}
|
|
|
|
|
|
// foundation is used. Whole tile is leveled up
|
|
|
if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) {
|
|
|
return existing ? 0 : _price.terraform;
|
|
|
return existing != 0 ? 0 : _price.terraform;
|
|
|
}
|
|
|
|
|
|
// partly leveled up tile, only if there's no road on that tile
|
|
|
if (existing == 0 && (tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)) {
|
|
|
// force full pieces.
|
|
|
*pieces |= (*pieces & 0xC) >> 2;
|
|
@@ -799,13 +799,14 @@ static void DrawTile_Road(TileInfo *ti)
|
|
|
for (; drss->image != 0; drss++) {
|
|
|
uint32 image = drss->image;
|
|
|
|
|
|
if (image & PALETTE_MODIFIER_COLOR) image |= ormod;
|
|
|
if (_display_opt & DO_TRANS_BUILDINGS) MAKE_TRANSPARENT(image);
|
|
|
|
|
|
AddSortableSpriteToDraw(image, ti->x | drss->subcoord_x,
|
|
|
AddSortableSpriteToDraw(
|
|
|
image, ti->x | drss->subcoord_x,
|
|
|
ti->y | drss->subcoord_y, drss->width, drss->height, 0x14, ti->z
|
|
|
);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -891,15 +892,12 @@ static const Roadside _town_road_types_2
|
|
|
{ ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED }
|
|
|
};
|
|
|
|
|
|
|
|
|
static void TileLoop_Road(TileIndex tile)
|
|
|
{
|
|
|
Town *t;
|
|
|
int grp;
|
|
|
|
|
|
switch (_opt.landscape) {
|
|
|
case LT_HILLY:
|
|
|
if (IsOnSnow(tile) != (GetTileZ(tile) > _opt.snow_line)) {
|
|
|
ToggleSnow(tile);
|
|
|
MarkTileDirtyByTile(tile);
|
|
|
}
|
|
@@ -913,21 +911,21 @@ static void TileLoop_Road(TileIndex tile
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (GetRoadTileType(tile) == ROAD_TILE_DEPOT) return;
|
|
|
|
|
|
if (!HasRoadWorks(tile)) {
|
|
|
t = ClosestTownFromTile(tile, (uint)-1);
|
|
|
const Town* t = ClosestTownFromTile(tile, (uint)-1);
|
|
|
int grp = 0;
|
|
|
|
|
|
grp = 0;
|
|
|
if (t != NULL) {
|
|
|
grp = GetTownRadiusGroup(t, tile);
|
|
|
|
|
|
// Show an animation to indicate road work
|
|
|
if (t->road_build_months != 0 &&
|
|
|
!(DistanceManhattan(t->xy, tile) >= 8 && grp == 0) &&
|
|
|
(DistanceManhattan(t->xy, tile) < 8 || grp != 0) &&
|
|
|
GetRoadTileType(tile) == ROAD_TILE_NORMAL && (GetRoadBits(tile) == ROAD_X || GetRoadBits(tile) == ROAD_Y)) {
|
|
|
if (GetTileSlope(tile, NULL) == SLOPE_FLAT && EnsureNoVehicle(tile) && CHANCE16(1, 20)) {
|
|
|
StartRoadWorks(tile);
|
|
|
|
|
|
SndPlayTileFx(SND_21_JACKHAMMER, tile);
|
|
|
CreateEffectVehicleAbove(
|
|
@@ -986,25 +984,24 @@ static uint32 GetTileTrackStatus_Road(Ti
|
|
|
if (!IsLevelCrossing(tile)) return 0;
|
|
|
return GetCrossingRailBits(tile) * 0x101;
|
|
|
|
|
|
case TRANSPORT_ROAD:
|
|
|
switch (GetRoadTileType(tile)) {
|
|
|
case ROAD_TILE_NORMAL:
|
|
|
return HasRoadWorks(tile) ? 0 : _road_trackbits[GetRoadBits(tile)] * 0x101;
|
|
|
return HasRoadWorks(tile) ? 0 : _road_trackbits[GetRoadBits(tile)] * 0x101;
|
|
|
|
|
|
case ROAD_TILE_CROSSING: {
|
|
|
uint32 r = (GetCrossingRoadAxis(tile) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y) * 0x101;
|
|
|
|
|
|
if (IsCrossingBarred(tile)) r *= 0x10001;
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
case ROAD_TILE_DEPOT:
|
|
|
return (DiagDirToAxis(GetRoadDepotDirection(tile)) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y) * 0x101;
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
default: break;
|
|
|
}
|
|
|
return 0;
|
|
@@ -1045,17 +1042,17 @@ static uint32 VehicleEnter_Road(Vehicle
|
|
|
BarCrossing(tile);
|
|
|
MarkTileDirtyByTile(tile);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ROAD_TILE_DEPOT:
|
|
|
if (v->type == VEH_Road && v->u.road.frame == 11) {
|
|
|
if (_roadveh_enter_depot_unk0[GetRoadDepotDirection(tile)] == v->u.road.state) {
|
|
|
RoadVehEnterDepot(v);
|
|
|
return 4;
|
|
|
}
|
|
|
if (v->type == VEH_Road &&
|
|
|
v->u.road.frame == 11 &&
|
|
|
_roadveh_enter_depot_unk0[GetRoadDepotDirection(tile)] == v->u.road.state) {
|
|
|
RoadVehEnterDepot(v);
|
|
|
return 4;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
default: break;
|
|
|
}
|
|
|
return 0;
|