Start here

Breeds

A breed is a constrained slice of the gene pool plus the metadata the spawn and breeding systems need. Wild herds are rolled from a breed so that a paddock of horses reads as a population rather than 47 unrelated animals; a lone wild horse, a /summon or a spawn-egg horse is the Feral Mixed breed and rolls every gene unconstrained — the pre-breeds behaviour. This page is the readable version of the breed files; the numbers in them are a first pass.

A breed is a JSON file. Every breed here lives in common/src/main/resources/horsegenetics/breeds/, one file each, and a breed you write yourself goes in .minecraft/phc/breeds/ and needs nothing but the jar - the folder is made on first launch, and the Breeds tab of the H menu opens it. The breed designer writes them and the breed file format documents them. Java breeds are still possible for one that needs behaviour rather than numbers, and Feral Mixed is the only one shipping that way.

Herd or loner

BreedSpawnHandler (a one-line FinalizeSpawnEvent hook) does nothing but tag a NATURAL / CHUNK_GENERATION / SPAWNER horse with a wild_spawn NBT flag. It does not touch the pack SpawnGroupData: Horse.finalizeSpawn replaces any custom pack data with its own Horse.HorseGroupData between every pack member, so that route can carry nothing (the earlier BandData attempt silently made every horse its own herd of one — "herds are all mixed breeds", "groups of four solo Feral Mixed").

HerdManager.assignFounder forms the herd by proximity, one tick later (deferred from onHorseJoin's server.execute, so nothing heavy runs inside the chunk system). A freshly-spawned wild horse looks at the untamed wild horses within HERD_RADIUS (32) blocks:

So every clump of wild horses is one herd of one breed, and only a solitary horse is Feral Mixed — and because a lone horse near an existing herd joins it, you never see a knot of unrelated solo horses. A spawn-egg horse (record pre-set) or a /summon has no flag and stays Feral Mixed; breeding overrides that with the parents’ cross.

Which biomes spawn horses at all is data/horsegenetics/neoforge/biome_modifier/add_horse_herds.json, a horsegenetics:breed_herds modifier (BreedHerdsBiomeModifier): herd-sized (weight 10, 3–6) horse spawns in the biomes it lists and in every biome any wild breed names - once each, never twice. The second half is what makes a drop-in breed spawn: a breed living in a dark forest or a modded biome gets herds there on the next start, with nothing edited but its own file. add_horse_loners.json adds a thin weight-1 1–1 trickle to every overworld surface biome (a strong bias to packs). So horses appear in taiga, jungle, badlands, swamp, the snowy biomes and mushroom fields, none of which spawn them in vanilla. A horse still needs grass and light to spawn, so a breed that names a desert or the Nether will rarely or never be seen wild.

Day and night. A breed's spawn_time (any, day or night) is checked when a herd is founded: outside its hours the breed is not a candidate, and the biome's other breeds share the draw (HerdManager.pickHerdBreed). Vanilla will not spawn an animal in the dark on a chunk near a player, so a night breed's herds mostly come from chunks generated after dark.

Traditional bands and bachelor bands

A wild pack is one of two shapes (BandType), chosen ~70/30 by the first member spawned:

Every member of the herd shares the lead's breed and band. WildHerdGoal (a follow goal on every untamed horse) keeps non-leads within a few blocks of the lead, re-pathing every ~15 ticks, so a spawned pack stays clumped and wanders together. If the lead dies or unloads for 10 s, the first member to notice promotes itself. HorseCareHandler's together-timer herd formation now skips any horse already in one of these natural herds.

Wild horses aggro like wolves

HorseAggroHandler. Hitting an untamed horse turns it and every herd-mate within 24 blocks on the attacker — a horse will path to and kick anything it is angry at, for 4 damage (vanilla horses have no ATTACK_DAMAGE; this handler adds it via EntityAttributeModificationEvent). Break line of sight for 3 seconds and the horse clears its target and goes back to neutral (WildHorseForgetTargetGoal). Tamed horses are never affected, and debug-dimension horses take no damage so they never aggro.

What a breed pins

CategoryBehaviour when the breed doesn’t name it
Coat genes (extension, agouti, the dilutions, every white-pattern locus) Forced to wild type. A breed is visually unified — a Friesian is jet black because nothing switches a pattern or dilution on. A breed that should have a pattern lists it with a rate.
Disorder genes (ACAN, PLOD1, MET…) Forced clear. A breed carries exactly the disorders its sheet lists — the Quarter Horse names HYPP, PSSM1 and HERDA at their carrier rates, the Arabian SCID, CA and LFS — and nothing else ever turns up on a founder. There is no background rate. A foal can still inherit one from a parent of another line.
The four magical body-stat genes (size, speed, health, jump) Driven by the breed’s stat bands: an axis with a band makes every founder carry that gene’s pushing allele and writes the target onto its copies - two copies for speed, health and jump; for size one copy between 0.7x and 1.3x and two outside it; an axis with no band is left wild. Founders only.
Other magical genes (mane/tail colour, healer, zebra, milk, light, particle, verdant…) Forced wild. A breed has the magic it names and no other — see where magic comes from.
Any gene’s epigenetic numbers (how far a splash covers, how wide a dorsal stripe is) Rolled from the value’s own design range. A breed that names a band for one gets every founder written inside it instead. Founders only.

Epigenetic bands: “deeply black”, not merely “black”

A pool says which allele; a band says how much. Each gene declares named numbers on every allele copy, and a breed may pin any of them to a closed range — the general form of what the stat bands already did for the four body axes. Each founder gets a point inside the band on both copies, drawn separately so its two gametes are not interchangeable.

Three things a band will not do, each warned about at load rather than silently ignored: it cannot touch the four body-stat genes (those belong to the breed’s stat scores), it cannot band a seed or a category (neither has a “slightly more”), and a value the gene does not declare is dropped the way an unknown gene is. See the format page.

Stats: the score → multiplier curve

The sheet scores speed, jump and heartiness 1–10. Score 5 is the value the vanilla-calibrated baseline already produces — multiplier ×1.0. Score 10 is the sheet’s stated ceiling, and the curve is linear to it:

Axis5/1010/10× at 10× at 1
Speed9.71 m/s19.6 m/s×2.02×0.20
Health22.5 hp (11¼ hearts)50.5 hp×2.24×0.20
Jump2.5 m8.57 m×3.43×0.20

Size is not scored; a breed writes it as a multiple of an ordinary horse, "size": [lo, hi], and the range is the band. A Quarter Horse runs about ×0.92–1.05, a Percheron ×0.98–1.38 (taller than the player at the top end), a Shire or Clydesdale ×1.14–1.43, a Falabella ×0.38–0.51. The files were written in hands until 2026-09-10 and were converted through the old curve - hands over 15.75, with the part above 1.0 tripled (BreedStatCurve.sizeForHands) - so no breed changed size. Hands are still how a horse's size reads: the info screen and the Breeds tab turn a scale back into them (handsFor).

Size decides the genes, founder by founder. A founder's size is drawn inside the range first. Between 0.7x and 1.3x it carries one copy of the size allele and the wild type, with the whole distance on that copy; outside it, two, sharing it. So a miniature or a draught horse breeds true for size, and a breed of ordinary-sized horses throws some variety among its foals - which is how most size variation is carried. A range across 1.3 (a Clydesdale's) produces both.

Each axis becomes a target band (BreedStatCurve). Every founder of the breed is given the pushing allele (both copies, bar the size rule above), and BreedFounder then picks a point inside the band and writes it onto that founder’s two allele copies as ordinary epigenetic numbers. So a Thoroughbred reliably resolves near ×2 speed even though two Swift copies on the ordinary Gaussian would only reach ×1.2. A band that would straddle 1.0 (a near-baseline breed) is dropped and the locus is left wild, so the horse sits exactly on the baseline.

The two copies split the target unevenly, on purpose. Two identical copies would make a founder’s gametes interchangeable, and half the interest in breeding from a good stallion is that his foals differ depending on which copy they drew.

A breed shapes its founders and then lets go

The band is consulted once, ever

BreedFounder is the only place a breed influences a number. Once a horse exists it is whatever it inherited: nothing re-imposes the standard, and a cross is never normalised. A Percheron bred to a Falabella produces a foal carrying one enormous copy and one tiny one — whichever copies it actually drew — and its siblings differ from it accordingly.

This used to be false, and it was the main reason for the epigenetics rewrite. The band was applied every time a horse’s body was resolved, and BreedLineage.statTargets() handed a cross the per-axis average of its two parents’ bands. So that Percheron × Falabella foal had its size recomputed into a mid-size band on every lookup, regardless of its alleles, with no way for a breeder to select out of it. BreedStatTargets.average and the resolve-time path are both gone.

A breed label is therefore cosmetic. It decides what a wild horse of that breed is born as and what a herd spawns, and after that it is lineage bookkeeping for the family tree and the naming. A “Percheron” bred tiny for fifty generations is tiny, and still labelled Percheron. Keeping a line to a standard is the player’s job, not the game’s.

Where magic comes from

A breed's founders carry exactly the magic the breed names. A zombie breed is a set of genes that make it look rotted, a temper and a slow speed score, and every founder is that; it never throws a galaxy coat or a healer because a dice roll said so. Magic in a breed is a design decision, made in the breed designer or the file.

Random magic still exists, in one place: Feral Mixed, the unbred population a vanilla horse spawn and a breedless custom egg belong to. It rolls every gene from that gene's own founder table, magical ones included, so a feral horse is where a stray magical trait turns up — and breeding it into a line is how a player gets magic a breed was not designed with. (Generated stables still add their own extra magic on top of the breeds they place — see stables.)

Where a breed may come from

A breed names any subset of four sources, and naming none means all four. They are a checklist rather than a mode because they are genuinely independent — “a breed the cowboy has heard of but that no longer runs wild” is a real thing to want to say, and so is “a collector’s breed that only exists as an egg”.

SourceWhat switching it on means
wildMay head a wild herd, in one of its biomes. This is what Breeds.forBiome filters on.
cowboyThe cowboy may breed and sell one, as a signed transfer paper priced from the breed’s range.
spawn_eggA breed spawn egg exists for it, and can turn up in dungeon loot or the horseman’s stock. Clearing this is the “opt out of having an egg” switch.
stableMay be pre-placed in a generated stable. A stable definition naming a breed that has switched this off skips it.

Feral Mixed names no source at all, which is the honest answer: it is the absence of a breed, so it never spawns as itself and never has an egg.

A world's own ecology: breed-spawning.toml

A player's breeds are their own files; the breeds the mod ships are inside the jar. .minecraft/phc/breed-spawning.toml is how a world changes the shipped ones without unpacking it — and how it switches them off entirely, so that the only horses in it are the ones its owner designed. It is written on first launch, generated from the registry: one section per shipped breed, each defaulting to what that breed’s own file says, so what you edit is a number you can see.

SettingWhat it does
general.shipped_breeds_enabledfalse switches every shipped breed off at once — no herds, cowboy stock, stables or eggs — whatever their sections say.
breeds.<id>.enabledfalse: the breed loses every source. It keeps its entry — horses already carrying the label still have a breed, and the breed book still explains it (“Not found anywhere in this world”).
breeds.<id>.spawn_weightIts pull against the other breeds of the same biome when a herd is founded, on the commonness scale (moderate is 6). 0 takes it out of the wild only; the cowboy, stables and eggs keep it.
breeds.<id>.biomesWhere its wild herds live. Any biome id, modded included.
breeds.<id>.spawn_timeany, day or night.
feral_mixed.enabledWhether a wild horse may be Feral Mixed at all.
feral_mixed.biomesWhere it may be. Empty is everywhere.
feral_mixed.herd_weightIts weight against a biome's breeds when a herd is founded. 0 (the default) keeps it to where no breed may spawn, which is what it always was.

A wild horse with nothing to be does not spawn. A natural spawn, chunk-generation spawn or spawner spawn is refused outright (BreedSpawnHandler, Breeds.anythingMaySpawn) when no breed of its biome may head a herd at that hour and Feral Mixed is not allowed there. What gets past that — a horse that turns out to be alone where Feral Mixed is off — is discarded by HerdManager a second later, before any record or coat is made for it. /summon and a vanilla spawn egg are a player asking for a horse, and always make a Feral Mixed.

Everything that spawns a horse asks the same registry, so nothing else knows the file exists: Breeds.applySpawnSettings keeps each breed as its file says and publishes a copy with the world's settings applied. Edits are re-read while the game runs and reach herds, the cowboy, stables and eggs at once; which biomes get extra herd spawns is decided by the biome modifier at world start, so moving a breed to a new biome wants a restart.

Per install, not per world

Despite the name of this section, the file belongs to the install (or the dedicated server), and every world opened on it shares it. It is a COMMON config because the herd biome modifier needs it before any world exists. A per-world copy is recorded as gap 190.

Breeding: crosses and mixes

A foal’s breed label (BreedLineage.combine, applied in HorseBreedingHandler.applyBredFoal):

Dam × SireFoal
Friesian × FriesianFriesian
Friesian × ArabianArabian × Friesian cross (components sorted, so order never matters)
(Arabian × Friesian cross) × (Friesian × Arabian cross)Arabian × Friesian cross
(Arabian × Friesian cross) × ArabianArabian × Friesian cross
(Arabian × Friesian cross) × Quarter HorseMixed
(Arabian × Friesian cross) × (Friesian × Quarter Horse cross)Mixed
Mixed × anythingMixed
anything × Feral MixedMixed (Feral Mixed is absorbing — see below)
Feral Mixed × Feral MixedMixed (no back door to a “pure feral” line)

Spliced lines

A gene splice carrot whose allele actually reaches the foal marks it Spliced (its breed), and the mark never washes out. It is not a new rule: splice is a reserved lineage component, so a spliced Friesian is the pair {friesian, splice} and every row of the table above applies to it unchanged.

Dam × SireFoal
Spliced (Friesian) × FriesianSpliced (Friesian)
Spliced (Friesian) × Spliced (Friesian)Spliced (Friesian)
Spliced (Friesian) × ArabianMixed
Spliced (Friesian) × Spliced (Arabian)Mixed
a cross, splicedMixed (three lines, which has always been Mixed)
Mixed or Feral Mixed, splicedunchanged (neither names an ancestry to qualify)

“Actually reaches the foal” is decided by SpliceOutcome.spliceReached, and it asks a question about the foal rather than about the carrot: at a locus a carrot substituted, does the foal carry an allele neither parent had? A mare fed a splice for a gene the stallion already carries has added nothing, and correctly does not mark the foal. Feeding a splice is a gamble and the carrot is spent either way.

This is what makes an ordinary purebred worth more than a spectacular spliced one. Anybody can splice a Friesian into something remarkable; only a breeder can get there without, and the label is the difference.

The label is stored on the HorseRecord (breed, an optional string token) and surfaced in three places: the mounted-horse info panel (under the sex / generation line), the right-click-with-paper dump (breed: line), and the dev-build [coat] chat line (a [Breed Name] tag). The stallion seed jar carries the donor’s breed token in its StoredGenome so a seed-jar foal crosses correctly.

The custom spawn egg “Breed:” preset

CustomHorseSpawnScreen has a Breed: cycle button. Landing on a real breed calls BreedFounder.roll and loads a fresh wild individual of it — genotype, epigenome and sex — straight into the editor; you can then hand-edit any locus. The selected breed token rides along in SpawnCustomHorsePayload and is stamped on the spawned horse (record.withBreed) — but the label alone changes no number, so a horse whose genome you then hand-edited is whatever you edited it into. The first entry, Feral Mixed, is no preset: it leaves the current genome alone and spawns an unbred horse. Drop-in breeds from .minecraft/phc/breeds/ are in the list with the rest.

Not modelled (yet)

The sheet asks for genes and features this mod does not have. None were built in this pass; each is recorded in the breed’s notes() and collected in the roadmap:

The 49 breeds

Every one of them also has an entry in the breed book — what the breed is, what it was made for, and how it came to be running loose here. This table is the machinery; that page is the reason the machinery has these particular numbers in it.

Height is the stable-notation range from the sheet (baseline 15.75 hh = ×1.0 scale). S / J / H are the 1–10 speed / jump / heartiness scores. Rarity sets the herd-roll weight (Extremely common 48 → Very rare 0.75, doubling per step).

BreedBiomesHeightSJHRarityColour genes & notes
Akhal-Tekedesert, savanna, badlands, savanna plateau14.2–16.0958Uncommonany base; light cream; occasional grey; often nd1. Metallic sheen not modelled.
American Cream Draftplains, sunflower plains, meadow15.0–16.0325Rarefixed e/e + fixed Cr/Cr → cremello, amber eyes, pink skin.
American Miniatureplains, sunflower plains, meadow7.0–8.2214Very commonevery dilution + tobiano + sabino + roan + SW1 splash. Size band sits near the minimum scale.
American Paintplains, savanna, windswept savanna14.2–16.0756Very commontobiano + sabino + three KIT boosters (W20, W35, W32, W34) + frame overo + splash at both loci (SW1 and SW2). O/O lethal white is the breeding hazard, and HYPP is the other one.
Andalusianplains, forest, sunflower plains, meadow15.0–16.2685Moderateblack-biased; often grey. Baroque mane not modelled.
Appaloosataiga, forest, windswept hills14.2–16.0677Moderatethe defining leopard-complex breed — ~75% carry LP, PATN1-dominant, so most of a herd shows leopard / fewspot / blanket. Light roan too, and the only breed carrying SW4 — the splash allele described in one Appaloosa family.
Arabiandesert, savanna, badlands, savanna plateau14.2–15.3769Commonbay-biased; grey common; light sabino. Dished face not modelled. Carries SCID, CA and LFS at carrier rates.
Banker Horsebeach, stony shore, river13.2–14.2649Rareferal Spanish stock; primitive marks, sabino, occasional cream.
Belgian Draftplains, forest, meadow16.0–17.0326Commonchestnut; roan common; occasional cream/pearl. Flaxen not built.
Camargueswamp, mangrove swamp, river, beach13.2–14.2549Uncommonfixed grey — born dark, whitens with age (age not modelled, so effectively always grey).
Canadian Horsesnowy taiga, grove, snowy plains14.0–16.0659Rareblack-biased; some grey / roan.
Caspian Ponydesert, badlands, savanna9.0–11.2547Rarebay-biased; minimal white. Fragile bones → low heartiness, not a lethal gene.
Cleveland Bayplains, forest, meadow16.0–16.2668Rarefixed A_ + E-heavy extension → always bay with black points, minimal white.
Clydesdaletaiga, snowy taiga, grove, river16.2–18.0335Uncommonblack-biased; tobiano; heavy sabino + splash → big white legs / face. Feathering not built.
Connemara Ponywindswept hills / gravelly hills / forest, stony shore13.0–14.2588Moderateoften grey; occasional cream / dun.
Dales Ponywindswept hills / gravelly hills, taiga13.2–14.2569Rareblack-biased; some grey / roan; occasional dun. Feathering not built.
Dartmoor Ponywindswept hills, meadow, forest11.2–12.2458Rareany base; some grey / roan; occasional cream.
Exmoor Ponywindswept hills, taiga, snowy slopes11.2–12.34410Rarelandrace; bay-biased; nd1 primitive marks, no white/dilution. Pangare not built.
Falabellaplains, sunflower plains, meadow6.0–8.0213Uncommonevery dilution + tobiano + sabino + splash. Smallest breed — size band at the minimum scale.
Norwegian Fjordsnowy taiga, frozen river, snowy slopes, grove13.2–14.2439UncommonE_ + a/a + near-fixed dun → brown dun with primitive stripes and the two-tone midtstol mane. Near-fixed pangare too.
Friesianplains, forest, meadow, river15.0–17.0544Moderatefixed E/E a/a, no white or dilution — always jet black. Feathering / wavy mane not built.
Gypsy Vannerplains, river, swamp, meadow14.0–15.2437Commonusually tobiano pinto + sabino + splash. Feathering / abundant mane not built.
Hackneyplains, sunflower plains, meadow14.2–16.0634Uncommonbay-biased; occasional roan; light splash. High knee action = gait, not built.
Haflingercherry grove, meadow, windswept hills, grove13.2–15.0558Commonfixed e/e → chestnut; occasional roan. Flaxen mane not built.
Hanoverianplains, forest, meadow, sunflower plains15.3–17.1795Very commonbay-biased; some grey / roan; light splash. The jumping warmblood.
Icelandic Horsesnowy plains, ice spikes, frozen / jagged peaks, snowy slopes13.0–14.05410Moderateevery colour — grey, roan, dun, tobiano, splash. Tölt = gait, not built.
Irish Draughtwindswept hills / gravelly hills, taiga, forest15.2–17.0578Uncommonany base; grey / roan; occasional cream / dun. The sport-horse foundation.
Karabakhdesert, savanna, badlands14.0–15.0758Rarebay-biased; grey; occasional cream. Golden sheen not modelled.
Kiger Mustangbadlands, eroded / wooded badlands, savanna13.0–14.27510Rarestrongly dun (dorsal + leg bars); occasional cream. Some carry the leopard complex; GBED and HERDA at carrier rates.
Knabstrupperplains, birch forest, forest, meadow14.2–15.2676Uncommonbred hard for bold leopard — ~82% carry LP, PATN1-heavy, so leopard and fewspot dominate. Occasional cream; SW1 splash.
Lipizzanplains, windswept hills, meadow, sunflower plains14.2–16.1577Uncommonheavy grey — born dark, whitens. One of the three breeds carrying SW2. Roman nose not modelled.
Lusitanosavanna, plains, savanna plateau15.0–16.0686Moderateblack-biased; often grey. Convex profile not modelled.
Marwarijungle, sparse / bamboo jungle, savanna14.2–15.2759Rareany base; tobiano; grey; occasional cream / dun. Lyre-shaped ears NOT modelled.
Morganplains, forest, taiga, meadow14.1–15.2668Very commonany base; roan; sabino; SW1 splash; occasional cream / dun. Versatile American foundation breed.
Mustangbadlands, eroded / wooded badlands, savanna, windswept savanna13.2–15.27510Moderatewild-type diversity — every colour, dun, roan, tobiano, sabino, champagne. Some carry the leopard complex.
New Forest Ponyforest, birch / old-growth birch, flower forest12.0–14.2568Commonany base; some grey / roan; occasional dun.
Paso Finosavanna, jungle, sparse / bamboo jungle13.0–15.2546Moderateany base; roan; can carry dominant white / W20 / W35. Smooth lateral gait not built.
Percheronplains, snowy plains, meadow, sunflower plains15.2–17.3436Commonblack-biased; heavy grey. Straight-profile draft.
Przewalski’s Horsedesert, badlands, savanna12.0–14.06310Rarenear-fixed E_ A_ + fixed dun → stocky bay dun; no spotting. The true wild horse. Upright mane not built.
Puerto Rican Paso Finojungle, savanna, beach, mangrove swamp13.0–15.0546Rareany base; occasional cream / dun. Tiger eye — 26% carry a copy, 4% show the amber iris. The breed's signature, and essentially the only place to find the gene.
Quarter Horseplains, savanna, sunflower plains, meadow14.2–16.0857Extremely commonany base + cream + nd1/nd2 + roan + sabino, and splash at both loci — SW2 was described here. The sprinter, and the breed HYPP is named for.
Shetland Ponymushroom fields, snowy plains, taiga, grove8.0–10.2339Very commonany base; tobiano; sabino; SW1 splash; occasional dun / cream. Some carry the leopard complex.
Shireplains, river, meadow, swamp16.2–17.3+324Uncommonblack-biased; heavy sabino + splash. Tallest breed — scale band at the draught ceiling. Feathering not built.
Standardbredplains, sunflower plains, meadow14.2–16.2956Very commonany base; roan; light sabino; occasional cream / dun. Harness racer — pace/trot gait not built.
Suffolk Punchplains, forest, meadow, sunflower plains16.0–17.2325Rarefixed e/e, no white or dilution — always “Suffolk sorrel” chestnut.
Tennessee Walking Horseplains, forest, swamp, meadow14.3–17.0547Very commonany base; cream / champagne; roan; sabino; some grey; splash. Running walk = gait, not built.
Thoroughbredplains, savanna, sunflower plains, meadow15.2–17.01084Very commonbay-biased; occasional grey / roan; SW1 splash. The highest W20 rate of any breed, plus a trace of W5 and W22 — most of the rare W series was first described here. Fastest and among the most fragile.
Trakehnertaiga, forest, old-growth pine taiga, grove15.2–17.0785Commonbay-biased; some grey / roan; light splash. The lightest warmblood.
Welsh Ponywindswept hills, taiga, plains, meadow11.0–14.24–658Very commonany base; grey common; roan; sabino; SW1 splash; occasional cream / dun.

Feral Mixed is absorbing

A horse with no herd identity — a lone wild spawn, a /summon, a spawn-egg horse — is Feral Mixed, and every cross involving one produces a plain Mixed foal. Feral × Feral included, so there is no back door to a “pure feral” line.

It used to be called Unknown and combined like an ordinary distinct breed, so a Friesian bred to a wild loner produced a “Friesian × Unknown cross”. That forced the model to answer a question it has no good answer to: is Unknown a breed? Does it have a stat band, a gene pool, a purity? Can a line be bred back to pure Unknown? Making it absorbing deletes the question instead of answering it, and says the true thing — a horse of unrecorded ancestry contributes unrecorded ancestry, and what comes out is a horse of mixed breeding.

The serialised token is feral_mixed. Like every other format change in this mod there is no back-compatibility: a horse saved as unknown reads as Feral Mixed anyway, since an unrecognised token has always fallen through to it.

Code map