Real horse coat genetics in Minecraft Bedrock: how LLS Equestrian breeds colour

Eight real colour genes, 18 base coats and hidden carriers. How a foal's coat is worked out from its parents in LLS Equestrian, and why a black horse can throw a chestnut foal.

· 6 min read

A bay horse and a black horse from LLS Equestrian standing in a paddock

Vanilla Minecraft horses come in seven colours and five white markings, and a foal picks its colour from one parent or the other, with a small chance of something random. It works, but nothing is ever carried. Two black horses can only ever give you black or a coin-flip surprise.

For LLS Equestrian I wanted breeding to work the way it does on a real stud farm: a horse’s coat comes from genes, every horse carries two copies of each gene, and the colour you see is only half the story. This is how that’s built.

The eight genes

These are the real equine colour genes, with the same names and the same dominance a horse geneticist would use. Each horse carries a pair at every one.

GeneCopies that matterWhat it does
Extension (E / e)eeTwo e and the horse can’t make black pigment: chestnut.
Agouti (A / a)A_On a horse that can make black, pushes the black out to the mane, tail and legs: bay. aa leaves it all over: black.
Cream (Cr / n)one or twoOne copy dilutes red (palomino, buckskin); two dilute almost to white (cremello, perlino, smoky cream).
Dun (D / nd)oneLightens the body, keeps the legs dark, adds a dorsal stripe: red dun, bay dun, grulla.
Grey (G / g)oneBorn coloured, greys out. The game names it “grey (born bay)”.
Roan (Rn / rn)oneWhite hairs mixed through the body: red roan, bay roan, blue roan.
Tobiano (TO / to)onePinto patches.
Leopard complex (Lp / lp)oneAppaloosa spotting.

Face white (none, star, blaze) and leg white (none, hind socks, four socks) are two more loci that simply add up: each copy of a white allele adds a step.

How the code decides a colour

The whole thing is one small file with no Minecraft code in it at all, so the exact same logic runs in the game and in my tests on the PC. Working out a coat is a few lines:

  1. Base colour. No E at all → chestnut. Otherwise, any A → bay, none → black.
  2. Dilution. Count the cream copies (0, 1 or 2) and check for dun. That picks one of 18 coats from a 3 × 2 × 3 table: three bases, dun or not, and zero, one or two cream.
  3. Patterns on top. Roan, tobiano, leopard and grey are added to the name and to the look.

That table is where the 18 coats come from:

no creamone creamtwo cream
chestnutchestnutpalominocremello
baybaybuckskinperlino
blackblacksmoky blacksmoky cream
chestnut + dunred dundunalinocremello dun
bay + dunbay dundunskinperlino dun
black + dungrullasmoky grullasmoky cream dun
All 18 base horse coats in LLS Equestrian, from bay, chestnut and black through the cream and dun dilutions
The 18 base coats, rendered straight from the shipped textures. Top row: bay, chestnut, black, palomino, buckskin, smoky black.

A foal’s coat: one copy from each parent

When a mare foals, the script walks through every gene and takes one of the mother’s two copies and one of the father’s two, each a 50/50 pick. That’s Mendel, and it’s enough to produce every surprise real breeders get:

  • Two bays can have a chestnut foal. If both carry one hidden e (Ee), a quarter of their foals get ee and come out chestnut.
  • A black horse can carry chestnut. Black only needs one E. Breed an Ee aa black to a chestnut and about half the foals are chestnut.
  • Palomino × palomino gives roughly a quarter chestnut, half palomino and a quarter cremello, because each parent passes on either its cream copy or its plain one.
  • No colour ever goes extinct. A gene that’s hidden for three generations is still there, waiting for two carriers to meet.

That last point is the reason for doing it this way at all. In vanilla, a colour you didn’t keep is gone. Here it’s in the herd somewhere.

Breeds set the odds, not the rules

Each of the 11 breeds has its own frequency for every gene: the chance that a copy drawn for a horse sold as that breed is the active one. That’s what makes a Friesian look like a Friesian without a special rule for it:

  • Friesian: Extension at 0.93 and Agouti at 0. Every Friesian is black, but about one in fourteen copies of Extension is still the hidden chestnut e. Real Friesian breeders test for that same red gene, because two black carriers can still produce a chestnut foal.
  • Paint Horse: tobiano at 0.6, so nearly every one is a pinto.
  • Appaloosa: leopard complex at 0.72, nearly always spotted.
  • Belgian Draft: mostly chestnut, with roan common, so a blue roan turns up now and then.
  • Quarter Horse: cream at 0.07, so a double-cream Quarter Horse (a cremello or perlino) is roughly 1 in 200.

Every horse the dealer sells is drawn fresh from those numbers, so no two are quite the same, and each can be carrying something its coat doesn’t show.

Ancestry, and what a cross is called

Alongside the colour genes, every horse carries its ancestry as a fraction per breed. A foal’s is the average of its parents’: a Thoroughbred × Arabian foal is 50/50. Breed it back to a Thoroughbred and it’s 75/25, then 87.5/12.5.

At 7/8 of one breed it counts as that breed. That’s “grading up”, the way real registries let a cross earn its way back in. Crosses in between get names of their own:

  • Appendix Quarter Horse (Quarter Horse × Thoroughbred)
  • Anglo-Arab (Arabian × Thoroughbred)
  • Half-Arabian, Friesian Cross, Appaloosa Cross
  • Pony Cross and Draft Cross once a quarter of it is pony or draft
  • Grade Horse for anything else

A foal wears the body of whichever breed it’s at least half of. Its coat still follows the genes, so a Friesian cross can come out bay.

Performance is inherited too

The same file carries four performance potentials, each between 0 and 1: stamina, health, gallop speed and jump. Each breed has a baseline (the Arabian’s stamina is the highest, the Warmblood’s jump, the Thoroughbred’s speed), and a foal gets the average of its parents’ values, plus or minus a little.

Breed your best to your best and the herd improves over generations, the way real breeding works. The genes set the ceiling; care and training decide how much of it a horse reaches. A Clydesdale will never be a racehorse, however much you gallop it.

What I deliberately left out

Real colour genetics has some genes that are lethal in pairs, and real breeding has inbreeding problems. Neither is in the game. A foal that dies at birth because of two hidden genes is accurate, but it isn’t fun, and nobody needs to keep a stud book to play.

Seeing a horse’s genes in game

Look at a horse and run:

/scriptevent llseq:genes

You get its breed, coat name, sex, age, ancestry and the full genotype, every gene pair written out (E/e A/a Cr/n ...). That’s how you check whether your black stallion is hiding chestnut before you plan a foal.

Want to try it? LLS Equestrian is a free download for Bedrock on Windows, Android and iOS. If you’ve never installed an add-on before, the install guide walks through it.

The mod

More from the devlog

← All devlog