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.
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.
| Gene | Copies that matter | What it does |
|---|---|---|
| Extension (E / e) | ee | Two 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 two | One copy dilutes red (palomino, buckskin); two dilute almost to white (cremello, perlino, smoky cream). |
| Dun (D / nd) | one | Lightens the body, keeps the legs dark, adds a dorsal stripe: red dun, bay dun, grulla. |
| Grey (G / g) | one | Born coloured, greys out. The game names it “grey (born bay)”. |
| Roan (Rn / rn) | one | White hairs mixed through the body: red roan, bay roan, blue roan. |
| Tobiano (TO / to) | one | Pinto patches. |
| Leopard complex (Lp / lp) | one | Appaloosa 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:
- Base colour. No
Eat all → chestnut. Otherwise, anyA→ bay, none → black. - 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.
- 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 cream | one cream | two cream | |
|---|---|---|---|
| chestnut | chestnut | palomino | cremello |
| bay | bay | buckskin | perlino |
| black | black | smoky black | smoky cream |
| chestnut + dun | red dun | dunalino | cremello dun |
| bay + dun | bay dun | dunskin | perlino dun |
| black + dun | grulla | smoky grulla | smoky cream dun |
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 geteeand come out chestnut. - A black horse can carry chestnut. Black only needs one
E. Breed anEe aablack 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
- Five Bedrock add-on bugs that fail without an error An invisible horse, legs running four times too fast, a mob that forgot how to jump, and a magic pack that broke without being touched. Five Minecraft Bedrock add-on bugs I hit building LLS Equestrian and the Magic Pack, and how to catch them.
- Making it snow on a plains farm: faking winter weather in Minecraft Bedrock Bedrock has no snow weather and decides rain-or-snow from the biome. How LLS Seasons builds a snowy day from fog, a particle and a snow carpet of its own, and the summer freeze a snow sweep caused.
- Making a gate swing in Minecraft Bedrock, when blocks can't animate Bedrock blocks can't move, and a custom block's collision has to fit inside one block. How the double-wide gates in LLS Missing Blocks fake both, and the collision tricks that keep a cow in and let a horse through.