mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-07-11 06:44:04 +01:00
(svn r12098) -Fix: make snow appear on rail tiles dependant on track height, not on height of the lowest part of the tile
This commit is contained in:
parent
efe831934a
commit
9deab65bae
@ -1698,7 +1698,8 @@ static void DrawTrackBits(TileInfo* ti, TrackBits track)
|
|||||||
pal = PAL_NONE;
|
pal = PAL_NONE;
|
||||||
switch (rgt) {
|
switch (rgt) {
|
||||||
case RAIL_GROUND_BARREN: pal = PALETTE_TO_BARE_LAND; break;
|
case RAIL_GROUND_BARREN: pal = PALETTE_TO_BARE_LAND; break;
|
||||||
case RAIL_GROUND_ICE_DESERT: image += rti->snow_offset; break;
|
case RAIL_GROUND_ICE_DESERT:
|
||||||
|
case RAIL_GROUND_HALF_SNOW: image += rti->snow_offset; break; // higher part has snow in this case too
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
DrawGroundSprite(image, pal, &(_halftile_sub_sprite[halftile_corner]));
|
DrawGroundSprite(image, pal, &(_halftile_sub_sprite[halftile_corner]));
|
||||||
@ -1934,12 +1935,62 @@ static void TileLoop_Track(TileIndex tile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (_opt.landscape) {
|
switch (_opt.landscape) {
|
||||||
case LT_ARCTIC:
|
case LT_ARCTIC: {
|
||||||
if (GetTileZ(tile) > GetSnowLine()) {
|
uint z;
|
||||||
new_ground = RAIL_GROUND_ICE_DESERT;
|
Slope slope = GetTileSlope(tile, &z);
|
||||||
|
bool half = false;
|
||||||
|
|
||||||
|
/* for non-flat track, use lower part of track
|
||||||
|
* in other cases, use the highest part with track */
|
||||||
|
if (IsPlainRailTile(tile)) {
|
||||||
|
TrackBits track = GetTrackBits(tile);
|
||||||
|
Foundation f = GetRailFoundation(slope, track);
|
||||||
|
|
||||||
|
switch (f) {
|
||||||
|
case FOUNDATION_NONE:
|
||||||
|
/* no foundation - is the track on the upper side of three corners raised tile? */
|
||||||
|
if (IsSlopeWithThreeCornersRaised(slope)) z += TILE_HEIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FOUNDATION_INCLINED_X:
|
||||||
|
case FOUNDATION_INCLINED_Y:
|
||||||
|
/* sloped track - is it on a steep slope? */
|
||||||
|
if (IsSteepSlope(slope)) z += TILE_HEIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FOUNDATION_STEEP_LOWER:
|
||||||
|
/* only lower part of steep slope */
|
||||||
|
z += TILE_HEIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* if it is a steep slope, then there is a track on higher part */
|
||||||
|
if (IsSteepSlope(slope)) z += TILE_HEIGHT;
|
||||||
|
z += TILE_HEIGHT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
half = IsInsideMM(f, FOUNDATION_STEEP_BOTH, FOUNDATION_HALFTILE_N + 1);
|
||||||
|
} else {
|
||||||
|
/* is the depot on a non-flat tile? */
|
||||||
|
if (slope != SLOPE_FLAT) z += TILE_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 'z' is now the lowest part of the highest track bit -
|
||||||
|
* for sloped track, it is 'z' of lower part
|
||||||
|
* for two track bits, it is 'z' of higher track bit
|
||||||
|
* For non-continuous foundations (and STEEP_BOTH), 'half' is set */
|
||||||
|
if (z > GetSnowLine()) {
|
||||||
|
if (half && z - GetSnowLine() == TILE_HEIGHT) {
|
||||||
|
/* track on non-continuous foundation, lower part is not under snow */
|
||||||
|
new_ground = RAIL_GROUND_HALF_SNOW;
|
||||||
|
} else {
|
||||||
|
new_ground = RAIL_GROUND_ICE_DESERT;
|
||||||
|
}
|
||||||
goto set_ground;
|
goto set_ground;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case LT_TROPIC:
|
case LT_TROPIC:
|
||||||
if (GetTropicZone(tile) == TROPICZONE_DESERT) {
|
if (GetTropicZone(tile) == TROPICZONE_DESERT) {
|
||||||
|
@ -409,6 +409,7 @@ enum RailGroundType {
|
|||||||
RAIL_GROUND_FENCE_HORIZ2 = 11, ///< Grass with a fence at the northern side
|
RAIL_GROUND_FENCE_HORIZ2 = 11, ///< Grass with a fence at the northern side
|
||||||
RAIL_GROUND_ICE_DESERT = 12, ///< Icy or sandy
|
RAIL_GROUND_ICE_DESERT = 12, ///< Icy or sandy
|
||||||
RAIL_GROUND_WATER = 13, ///< Grass with a fence and shore or water on the free halftile
|
RAIL_GROUND_WATER = 13, ///< Grass with a fence and shore or water on the free halftile
|
||||||
|
RAIL_GROUND_HALF_SNOW = 14, ///< Snow only on higher part of slope (steep or one corner raised)
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void SetRailGroundType(TileIndex t, RailGroundType rgt)
|
static inline void SetRailGroundType(TileIndex t, RailGroundType rgt)
|
||||||
|
Loading…
Reference in New Issue
Block a user