diff --git a/media/baseset/openttd.grf b/media/baseset/openttd.grf
index 6cee79959e..540ddf3fe9 100644
Binary files a/media/baseset/openttd.grf and b/media/baseset/openttd.grf differ
diff --git a/media/baseset/openttd.grf.hash b/media/baseset/openttd.grf.hash
index f3b216de53..b0a772e8d0 100644
--- a/media/baseset/openttd.grf.hash
+++ b/media/baseset/openttd.grf.hash
@@ -1 +1 @@
-8bc3926cb50e19747de498357417d973
+019dba4830a64ee4345d3d647633e1da
diff --git a/media/baseset/openttd/CMakeLists.txt b/media/baseset/openttd/CMakeLists.txt
index ee93ba80b1..f2df774d1b 100644
--- a/media/baseset/openttd/CMakeLists.txt
+++ b/media/baseset/openttd/CMakeLists.txt
@@ -18,6 +18,7 @@ if(GRFCODEC_FOUND)
${CMAKE_CURRENT_SOURCE_DIR}/oneway.nfo
${CMAKE_CURRENT_SOURCE_DIR}/openttd.nfo
${CMAKE_CURRENT_SOURCE_DIR}/openttdgui.nfo
+ ${CMAKE_CURRENT_SOURCE_DIR}/overlay_rocks.nfo
${CMAKE_CURRENT_SOURCE_DIR}/palette.nfo
${CMAKE_CURRENT_SOURCE_DIR}/roadstops.nfo
${CMAKE_CURRENT_SOURCE_DIR}/road_waypoints.nfo
@@ -42,6 +43,11 @@ if(GRFCODEC_FOUND)
${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_convert_road.png
${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_convert_tram.png
${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_group_livery.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/overlay_rocks.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/overlay_snowy_rocks_1.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/overlay_snowy_rocks_2.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/overlay_snowy_rocks_3.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/overlay_snowy_rocks_4.png
${CMAKE_CURRENT_SOURCE_DIR}/roadstops.png
${CMAKE_CURRENT_SOURCE_DIR}/road_waypoints.png
${CMAKE_CURRENT_SOURCE_DIR}/signals.png
diff --git a/media/baseset/openttd/openttd.nfo b/media/baseset/openttd/openttd.nfo
index 3d59f08543..9cfce9ffdd 100644
--- a/media/baseset/openttd/openttd.nfo
+++ b/media/baseset/openttd/openttd.nfo
@@ -99,3 +99,4 @@
#include "tunnel_portals.nfo"
#include "palette.nfo"
#include "road_waypoints.nfo"
+#include "overlay_rocks.nfo"
diff --git a/media/baseset/openttd/overlay_rocks.nfo b/media/baseset/openttd/overlay_rocks.nfo
new file mode 100644
index 0000000000..b5256b2bfe
--- /dev/null
+++ b/media/baseset/openttd/overlay_rocks.nfo
@@ -0,0 +1,112 @@
+// This file is part of OpenTTD.
+// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+//
+ -1 * 0 0C "Overlay rocks"
+ -1 * 3 05 1A 5F
+
+// Plain overlay rocks (unused...)
+ -1 sprites/overlay_rocks.png 8bpp 1 1 64 31 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 81 1 64 31 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 161 1 64 23 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 241 1 64 23 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 321 1 64 31 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 401 1 64 31 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 481 1 64 23 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 561 1 64 23 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 641 1 64 39 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 721 1 64 39 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 801 1 64 31 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 881 1 64 31 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 961 1 64 39 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 1041 1 64 39 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 1121 1 64 31 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 1201 1 64 47 -31 -16 normal
+ -1 sprites/overlay_rocks.png 8bpp 1281 1 64 15 -31 0 normal
+ -1 sprites/overlay_rocks.png 8bpp 1361 1 64 31 -31 -8 normal
+ -1 sprites/overlay_rocks.png 8bpp 1441 1 64 31 -31 -8 normal
+
+// Snowy rocks level 0
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 81 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 161 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 241 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 321 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 401 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 481 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 561 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 641 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 721 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 801 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 881 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 961 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1041 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1121 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1201 1 64 47 -31 -16 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1281 1 64 15 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1361 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_1.png 8bpp 1441 1 64 31 -31 -8 normal
+
+// Snowy rocks level 1
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 81 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 161 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 241 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 321 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 401 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 481 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 561 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 641 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 721 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 801 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 881 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 961 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1041 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1121 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1201 1 64 47 -31 -16 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1281 1 64 15 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1361 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_2.png 8bpp 1441 1 64 31 -31 -8 normal
+
+// Snowy rocks level 2
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 81 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 161 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 241 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 321 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 401 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 481 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 561 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 641 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 721 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 801 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 881 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 961 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1041 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1121 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1201 1 64 47 -31 -16 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1281 1 64 15 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1361 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_3.png 8bpp 1441 1 64 31 -31 -8 normal
+
+// Snowy rocks level 4
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 81 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 161 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 241 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 321 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 401 1 64 31 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 481 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 561 1 64 23 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 641 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 721 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 801 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 881 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 961 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1041 1 64 39 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1121 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1201 1 64 47 -31 -16 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1281 1 64 15 -31 0 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1361 1 64 31 -31 -8 normal
+ -1 sprites/overlay_snowy_rocks_4.png 8bpp 1441 1 64 31 -31 -8 normal
diff --git a/media/baseset/openttd/overlay_rocks.png b/media/baseset/openttd/overlay_rocks.png
new file mode 100644
index 0000000000..2f34e61394
Binary files /dev/null and b/media/baseset/openttd/overlay_rocks.png differ
diff --git a/media/baseset/openttd/overlay_snowy_rocks_1.png b/media/baseset/openttd/overlay_snowy_rocks_1.png
new file mode 100644
index 0000000000..fab20aede3
Binary files /dev/null and b/media/baseset/openttd/overlay_snowy_rocks_1.png differ
diff --git a/media/baseset/openttd/overlay_snowy_rocks_2.png b/media/baseset/openttd/overlay_snowy_rocks_2.png
new file mode 100644
index 0000000000..5cee3d85d6
Binary files /dev/null and b/media/baseset/openttd/overlay_snowy_rocks_2.png differ
diff --git a/media/baseset/openttd/overlay_snowy_rocks_3.png b/media/baseset/openttd/overlay_snowy_rocks_3.png
new file mode 100644
index 0000000000..51e6f988d3
Binary files /dev/null and b/media/baseset/openttd/overlay_snowy_rocks_3.png differ
diff --git a/media/baseset/openttd/overlay_snowy_rocks_4.png b/media/baseset/openttd/overlay_snowy_rocks_4.png
new file mode 100644
index 0000000000..5ccc1bfdf4
Binary files /dev/null and b/media/baseset/openttd/overlay_snowy_rocks_4.png differ
diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp
index 95bd0fc218..f0d6b27021 100644
--- a/src/clear_cmd.cpp
+++ b/src/clear_cmd.cpp
@@ -106,7 +106,8 @@ static void DrawClearLandFence(const TileInfo *ti)
static void DrawTile_Clear(TileInfo *ti)
{
- ClearGround ground = IsSnowTile(ti->tile) ? CLEAR_SNOW : GetClearGround(ti->tile);
+ ClearGround real_ground = GetClearGround(ti->tile);
+ ClearGround ground = IsSnowTile(ti->tile) ? CLEAR_SNOW : real_ground;
switch (ground) {
case CLEAR_GRASS:
@@ -126,7 +127,17 @@ static void DrawTile_Clear(TileInfo *ti)
DrawClearLandFence(ti);
break;
- case CLEAR_SNOW:
+ case CLEAR_SNOW: {
+ uint8_t density = GetClearDensity(ti->tile);
+ DrawGroundSprite(_clear_land_sprites_snow_desert[density] + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
+ if (real_ground == CLEAR_ROCKS) {
+ /* There 4 levels of snowy overlay rocks, each with 19 sprites. */
+ ++density;
+ DrawGroundSprite(SPR_OVERLAY_ROCKS_BASE + (density * 19) + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
+ }
+ break;
+ }
+
case CLEAR_DESERT:
DrawGroundSprite(_clear_land_sprites_snow_desert[GetClearDensity(ti->tile)] + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
break;
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index f8b34753d3..43e2e663fd 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -6742,6 +6742,7 @@ static constexpr auto _action5_types = std::to_array({
/* 0x17 */ { A5BLOCK_ALLOW_OFFSET, SPR_RAILTYPE_TUNNEL_BASE, 1, RAILTYPE_TUNNEL_BASE_COUNT, "Railtype tunnel base" },
/* 0x18 */ { A5BLOCK_ALLOW_OFFSET, SPR_PALETTE_BASE, 1, PALETTE_SPRITE_COUNT, "Palette" },
/* 0x19 */ { A5BLOCK_ALLOW_OFFSET, SPR_ROAD_WAYPOINTS_BASE, 1, ROAD_WAYPOINTS_SPRITE_COUNT, "Road waypoints" },
+ /* 0x1A */ { A5BLOCK_ALLOW_OFFSET, SPR_OVERLAY_ROCKS_BASE, 1, OVERLAY_ROCKS_SPRITE_COUNT, "Overlay rocks" },
});
/**
diff --git a/src/table/sprites.h b/src/table/sprites.h
index c3d40ad8c2..e0003fa61b 100644
--- a/src/table/sprites.h
+++ b/src/table/sprites.h
@@ -315,8 +315,12 @@ static const SpriteID SPR_ROAD_WAYPOINT_X_W = SPR_ROAD_WAYPOINTS_BASE + 2;
static const SpriteID SPR_ROAD_WAYPOINT_X_E = SPR_ROAD_WAYPOINTS_BASE + 3;
static const uint16_t ROAD_WAYPOINTS_SPRITE_COUNT = 4;
+/** Overlay rocks sprites. */
+static constexpr SpriteID SPR_OVERLAY_ROCKS_BASE = SPR_ROAD_WAYPOINTS_BASE + ROAD_WAYPOINTS_SPRITE_COUNT;
+static constexpr uint16_t OVERLAY_ROCKS_SPRITE_COUNT = 19 * 5; /* Rock overlays: plain, snow 1, snow 2, snow 3 and full snow. */
+
/* From where can we start putting NewGRFs? */
-static const SpriteID SPR_NEWGRFS_BASE = SPR_ROAD_WAYPOINTS_BASE + ROAD_WAYPOINTS_SPRITE_COUNT;
+static const SpriteID SPR_NEWGRFS_BASE = SPR_OVERLAY_ROCKS_BASE + OVERLAY_ROCKS_SPRITE_COUNT;
/* Manager face sprites */
static const SpriteID SPR_GRADIENT = 874; // background gradient behind manager face