Malta in Minecraft

← Blog ·

Malta's rock layers: from a giant dirt band to the geology map

How I gave every cliff in Malta in Minecraft the islands' real rock layers: a 120-block dirt band, a desert that wasn't Malta, a 14-layer geology map, and a cliff that changed every build.

In short: Malta's cliffs and hills are a stack of five rock layers, and I wanted every cliff in the world to show them. Getting there took a 120-block band of "dirt", a version that looked like a desert, a geology map with fourteen sub-layers, and one cliff that came out different every time I built it.

Wavy rock layers in the cliffs north of Dwejra, Gozo, in Malta in Minecraft
Wavy rock layers in the cliffs north of Dwejra, Gozo, in Malta in Minecraft

Who cares about rocks?

Me, I guess. You can read Malta's landscape from its rocks. The islands are five layers stacked like a cake. Hard Upper Coralline limestone caps the flat-topped hills. Under it, soft Blue Clay makes the smooth slopes. Then comes the golden Globigerina limestone that Malta's buildings are made of, and at the bottom the hard grey Lower Coralline of the big sea cliffs. A thin band of Greensand sits between the cap and the clay.

Vanilla Minecraft fills the ground with plain stone and random blobs of granite and diorite. If the cliffs looked like that, nothing else would look like Malta, however exact the shapes were.

The survey gives me the shape of every cliff, but not what it's made of. For that there's the official geological map. But a map is flat: it shows which rock is at the surface, and says nothing about what's underneath, or where one layer stops and the next begins inside a hill. Turning that flat map into solid 3-D rock was the whole challenge.

A slice through the Dingli plateau after the fix: grey Upper Coralline on top, a thin Greensand line, blue-grey Blue Clay, yellow Globigerina, grey Lower Coralline, then deepslate. Black dots are coal.
A slice through the Dingli plateau after the fix: grey Upper Coralline on top, a thin Greensand line, blue-grey Blue Clay, yellow Globigerina, grey Lower Coralline, then deepslate. Black dots are coal.

The 120-block "dirt" band

The first version looked fine from a distance. Then, flying over a test area, I looked at a cut through the ground at its edge, under the Dingli plateau, and right through the middle of it ran a brown band about 120 blocks thick. It was the Greensand, a layer that is really only a few metres thick, and the Blue Clay had been squeezed to nothing.

The edge of an early test world at the Dingli plateau: a brown band of Greensand about 120 blocks thick, with only a thin grey layer above and below it
The edge of an early test world at the Dingli plateau: a brown band of Greensand about 120 blocks thick, with only a thin grey layer above and below it

The cause: I had taken the height where each layer meets the ground on the map and spread that height under everything around it. The Greensand only reaches the surface low down in the north-west, at about 60 m, so that low boundary was carried under the whole 250 m plateau, and the gap was filled with Greensand.

The fix was to think in thicknesses. Now each layer is a thickness below the one above, measured where the map shows two layers meeting and kept within the real ranges for the islands:

Layer Thickness in the world
Greensand 1–12 m
Blue Clay 10–70 m
Globigerina Limestone 25–200 m

The same cut showed a second problem: ores only appeared in the bottom layer. Minecraft only lets ores grow in stone-like blocks, and clay and packed mud aren't on that list. Now they are, so every layer has ores.

Grey cliffs, then a desert

With the layers in the right place, the cliffs still looked wrong. My first rock was grey with vertical yellow stripes. Two bugs caused it: the colour was picked per column of blocks, so stepped cliff faces became stripes, and below the top few blocks the rock fell back to vanilla stone, so the lower half of every cliff was plain grey.

So I stopped guessing and measured real photos: coastal cliffs from Dingli, Ta' Ċenċ, Sanap, Xwejni, Dwejra and Wied il-Mielaħ, with the sky, sea and plants masked out. Sunlit Maltese rock comes out warm buff-grey to cream, and never neutral grey.

Wied il-Mielaħ gorge: the real place, then five stages in the game. Real photo: JosephAmodio, CC BY-SA 4.0, Wikimedia Commons
Wied il-Mielaħ gorge: the real place, then five stages in the game. Real photo: JosephAmodio, CC BY-SA 4.0, Wikimedia Commons

My next try used sandstone for everything. On paper the colour was right. In the game it turned Gozo into a desert: a very convincing desert, which is the worst kind. Stone with sandstone beds through it worked better. A couple of other things looked artificial too: calcite, which I've removed from every rock face, and one bright sandstone stripe that ran the same colour for hundreds of blocks. Now a bed's colour drifts slowly along the cliff.

Going at it from the wrong angle

All of this was still guesswork about colours. Then I realised I was going at it from the wrong angle. Maltese rock is defined by clear layers, so the layers themselves should decide what each block is.

The geological map, which I'd had open the whole time, turned out to be far more detailed than I'd been using. I had been reading a fourteen-chapter book by its five chapter titles. It splits the five layers into fourteen members (sub-layers), each with an official description of its colour, how thick its beds are, and how thick it gets. So now:

  • Every member gets its own two blocks, picked from its description (white algal limestone, pale grey marl, yellow sandstone…).
  • Each member is cut into beds of uneven thickness, like real rock, and the lines between them wobble slightly, like real bedding.
  • The thin layers geologists use as landmarks are there too, such as the pebble beds in the Globigerina, which show as dark lines.
  • Where the map shows two members touching directly, the one that would sit between them is left out, as in the real rock.

To try all this, I needed a faster way to test. A round of changes used to take about 30 minutes to build and photograph, so I made a test mode that builds only what the cameras can see. A round now takes about 3½ minutes, so I could try many rounds in one evening.

Fungus Rock had the wrong rock on top

Fungus Rock: the real rock, then five stages in the game. Real photo: G.Mannaerts, CC BY-SA 4.0, Wikimedia Commons
Fungus Rock: the real rock, then five stages in the game. Real photo: G.Mannaerts, CC BY-SA 4.0, Wikimedia Commons

The new layers created their own mistake. The boundaries between layers are smooth surfaces, and in places they disagreed with the map itself. Fungus Rock is Lower Coralline from the sea to its top on the map, but its upper half came out as Globigerina, a bright yellow band across the middle. Now the boundaries have to agree with whatever rock the map shows at the surface, and Fungus Rock is Coralline all the way up.

Then I tuned a few places to match photos, because measured against real pictures some were clearly off. Wied il-Mielaħ has iron-stained, orange-brown walls, and mine came out grey. The cliffs round the Inland Sea are golden-brown. The platform round the Azure Window is whitish. Each of these places now has its own colours, and I set myself a rule: a place only gets its own colours with a reason and at least two photos showing it. Even then, real photos have deeper sun and shade than Minecraft's flat lighting can give.

The cliff that changed every time

The strangest bug was a cliff north of Dwejra. In the full Gozo world, the line between the grey Coralline and the pale Globigerina sat at y 94. In a small test of the same spot it was at y 73. Same cliff, same data, different rock.

Each build was working out the layer boundaries only from the map lines inside its own area, so a bigger or smaller area gave a different answer. The real cliff is sheer, so the map can't show the boundary on its face. Following the map's lines along the coast puts it about 45–52 m above the sea. Two builds, two answers, both wrong. Consistent, in a way.

The cliff north of Dwejra: layers guessed per build area, computed once for all three islands, and today with shaders
The cliff north of Dwejra: layers guessed per build area, computed once for all three islands, and today with shaders

Now the layers are worked out once for all three islands, which takes about ten minutes, and every build reads that same result. Each boundary is also pulled towards the map's own lines nearby. Across the islands, the base of the Globigerina used to sit on average 28 m below where the map draws it. Now it's about 1 m off. The cliffs north of Dwejra are grey banded Coralline for their lower two-thirds, with pale Globigerina on top, and the bands bend a little where the map's lines do.

Real and in-game

Ta' Ċenċ cliffs, real and in the game. Real photo: Kritzolina, CC BY-SA 4.0, Wikimedia Commons
Ta' Ċenċ cliffs, real and in the game. Real photo: Kritzolina, CC BY-SA 4.0, Wikimedia Commons

What this taught me

  • A map is flat, but the world isn't (shocking). Most of the work was turning a picture of the surface into solid rock that makes sense in a cut.
  • Measure, don't eyeball. Every colour that looked "about right" by eye was wrong once I measured it against photos.
  • One answer everywhere. If the same cliff can come out two ways, players will find both. Computing everything once fixed a whole class of bugs.

Are you a geologist who spots something wrong, or do you have good photos of a cliff? Get in touch.

Technical details
  • Source: the bedrock geology map of the Maltese islands (MSDI / BGS, 2022), at member level: LCm, LCa, LCx, LCim (Lower Coralline), LGL, MGL, UGL (Globigerina), BC, GS, UCm, UCtp, UCtm, UCgi (Upper Coralline).
  • Contacts: surfaces between members, solved once for Malta, Gozo and Comino from where the boundaries meet the 1 m ground model (a 1 m pass in 4,096-block chunks, then a global solve), then fitted to the map's boundary lines within about 250 m. Stored on a 16-block grid and read with bilinear interpolation, so the result is the same in every build area.
  • Thickness: Lower Coralline stacks down from its top. Globigerina and Upper Coralline stack up from their bases. Globigerina members are scaled to fit under the Blue Clay. Members the map shows missing get zero thickness.
  • Surface rule: a contact lies above the ground wherever the map shows a lower unit at the surface, and at or below it wherever it shows that unit or a higher one.
  • Blocks: two per member, beds 0.5–1.5 × the member's typical thickness (1–3.5 blocks), ±0.7-block wobble. Blue Clay in 2-block bands of clay and cyan, light grey and light blue terracotta. Ores allowed in clay, packed mud and sandstone. Granite and diorite touching water near the seabed become stone.
  • Place colours: within a radius, blended bed by bed at the edge. Each needs a reason and two or more photos.
  • Pictures: early stages without shaders. Today's shots with Complementary Unbound and Faithful 64x. Real photos from Wikimedia Commons: the Wied il-Mielaħ Window by JosephAmodio (CC BY-SA 4.0), Fungus Rock by G.Mannaerts (CC BY-SA 4.0) and the Ta' Ċenċ cliffs by Kritzolina (CC BY-SA 4.0).