Natural gene / X-linked
Brindle (MBTPS2)
Irregular white streaks, soft-edged and broken, running down from the
topline and not matching from one side of the horse to the other. It
is the mod's only sex-linked gene, and that is the point of it: a
stallion has one X, so he carries one copy and can never be a carrier,
while a mare needs two. The trait runs visibly down one side of a pedigree in a way no
autosomal gene can.
What it does
What to look for: soft, broken white streaks running down from the back, and not matching on the two sides of the horse. That mismatch is the giveaway — no other pattern here does it.
It is inherited differently from everything else. It rides on the X chromosome, so a stallion has only one copy: he either shows it or does not, and can never carry it hidden. A mare needs two copies to show it and can carry one silently. In practice that means it appears far more often in colts, and a mare can pass it to sons who show it when she does not.
Crossing two of them
Its gene carrot
- Gene key
- horsegenetics.brindle
- Priority
- 36 (natural band, with the dilutions)
- Inheritance
- X-linked
- Alleles
- Brn n Y (reserved)
- Combinations
- 6, of which 5 can occur (
Y/Ycannot — every horse has an X) — 3 outcomes - Outcomes
- wild,
brindle-carrier(a wild type),brindle - Default allele
- n
- Wild frequency
- 2% per
X— so 2% of wild stallions and 0.04% of wild mares - Founder draws
- 1 × nextFloat() (from a sex-aware table)
- Coat effect
- white streaks over barrel, quarters, neck and upper legs — non-deterministic
- Field
- coat.pattern.BlaschkoStripes
- Epigenetic draws
- 1 long + 3 nextFloat
- Notation
- a stallion's single copy displays as
X-Brn
The inheritance is unit-tested to textbook ratios and the sample bakes
(:common:bakeCoatSamples, the brindle_* images) read as
brindle in an orthographic unwrap — asymmetric, broken, white. What has not
been seen is a brindle horse in the world, at any distance. Checklist on
To be verified.
The combination table
| Combination | Who | Outcome | Effect |
|---|---|---|---|
n/n | mare | wild | Nothing |
Brn/n | mare | brindle-carrier | Nothing shows — but half her sons are brindle |
Brn/Brn | mare | brindle | The stripes |
n/Y | stallion | wild | Nothing |
Brn/Y | stallion | brindle | The stripes — one copy is all he has |
Y/Y | — | Cannot occur. Every horse takes an X from its dam. | |
The crosses — this is the whole appeal
A stallion gives his X to every daughter and his Y to every
son. So brindle does something no other gene in the mod does: it skips the
male line entirely for one generation and comes back through the mares.
| Pairing | Colts | Fillies |
|---|---|---|
| brindle stallion × plain mare | 0% brindle | 0% brindle, 100% carriers |
| plain stallion × carrier mare | 50% brindle | 0% brindle, 50% carriers |
| plain stallion × brindle mare | 100% brindle | 0% brindle, 100% carriers |
| brindle stallion × carrier mare | 50% brindle | 50% brindle, 50% carriers |
Read down that table and the breeding project writes itself: a brindle
mare is the prize, she needs a brindle sire and a dam
carrying it, and once you have her every son she throws is brindle for ever after.
Measured over 4,000 foals per pairing in BrindleGeneTest.
In the wild: fifty stallions to one mare
A stallion needs one copy and a mare needs two, so at an allele frequency of
p the rates are p and p² — a factor
of 1/p apart. At 2% that is 2% of stallions against 0.04% of
mares, measured at 40:1 over 200,000 founder draws. A player will meet
several brindle stallions before they ever meet a brindle mare, and will notice the
asymmetry a long time before they know the reason for it.
How a hemizygous horse is stored
A genotype is one AllelePair per gene — two slots, always —
and sex linkage does not change that. A stallion's second slot holds a
reserved Y allele meaning "this locus is not on the Y".
That is what keeps the change small: Genotype is untouched, the epigenome
stays aligned slot-for-slot (the reserved slot simply carries epigenetics nothing
reads), the code string keeps its shape, and parsing needs no special case because
Y is a declared allele of the gene like any other.
The reserved allele is declared last, which is load-bearing rather
than tidy: AllelePair canonicalises on declaration order, so declaring it
last is what puts a stallion's real allele in the first slot. Registration refuses a
sex-linked gene that gets this wrong, because the failure otherwise is not an
exception — it is a gene that quietly misbehaves for exactly one sex.
On screen a hemizygous copy is written with an X- prefix
(X-Brn) rather than beside its own placeholder, which would read as a
homozygote of something. The prefix is unambiguous on sight because - is
the gene separator in a code string and can never appear inside an allele
token. The code string itself is unaffected: the token stays Brn.
What it paints
White streaks. Not a dilution of the horse's own colour and not
stripes of a second one — a brindle streak goes to white hair and stops there,
so the pattern reads the same on a black, a bay, a palomino or a grey. It goes through
PigmentField.whiten, the shared move every white marking in the mod uses,
which is what keeps a streak through a black horse on the gradient's neutral column:
it fades through greys rather than walking sideways into the browns, which is what
scaling the two pigments together would do.
That also keeps brindle inside phase 1's restrict-only contract with room to spare.
White is what is left when all the pigment is taken away, which is the one
thing phase 1 is always allowed to do — where a
darker stripe would have to be countershading, the way
dun's d1 does it.
Why it does not share the zebra field
Brindle and zebra look superficially alike — “stripes on a horse”
— and for one build they shared BodyStripes. That is what made both
of them wrong. They are not the same picture and they do not come from the same place.
Zebra (ZebraStripes) | Brindle (BlaschkoStripes) | |
|---|---|---|
| cause | a patterning system laid over a body map | X-inactivation mosaicism — which cell clone won, where |
| edges | crisp | soft, wavy, tapered |
| symmetry | roughly matched side to side | none — a streak on the right need not exist on the left |
| continuity | a band runs the whole way | broken: streaks fork, fade out and reappear |
| width | fairly even along a band | varies within one streak — narrow at the back, broad on the barrel |
| shape | vertical, arcing over the hip | a lazy S down the side |
| legs | rings all the way round | a few crosswise strokes, upper leg only |
| head | striped, dark muzzle | nothing |
The asymmetry is the gene, not a garnish
A plain stripe field phases on |z|, so whatever it draws on the right it
draws on the left. A brindle mare is a functional mosaic: early in
development each patch of her skin randomly silenced one of her two X
chromosomes (lyonisation), and as those clones expanded over the foetus they wrote the
pattern. The two sides of her were coloured in by different draws. That is the whole
reason the pattern exists, and a field that cannot express it is drawing something
else.
So each band is rolled twice — once for the horse's right, once for its left — and the texel reads whichever side it is on, blended over two body units either side of the spine so the two meet without a cut down the topline. Two copies of the same allele, two independent answers.
Blaschko lines, and the shape they make
BR1's streaks broadly follow Blaschko lines — the developmental paths skin-cell clones trace as they proliferate and migrate. They are not a fixed tiger-stripe layout: they flow in different directions on different body regions. The useful mental sketch is
a V at the topline → long descending S-like streaks on the barrel → shorter vertical streaks on neck, shoulder and hip → irregular transverse strokes on the upper limbs.
| Region | What BR1 looks like there | What the field draws |
|---|---|---|
| Back / topline | The visual source of most of the pattern; on the dorsal midline the arrangement tends toward V-shaped or chevron-like, with streaks descending from there onto each side. | A slant on |z| — the same chevron that stops a constant-X face rendering as one flat band. |
| Barrel / flank | The clearest area. Mostly vertical to slightly diagonal, descending toward the belly; on the barrel they curve, taper, split or merge rather than staying parallel. | A phase in X plus a sway that pushes the middle of a streak forward and lets both ends trail — the S — plus a noise warp. |
| Belly / underline | Fades or becomes fragmentary; streaks terminate, soften or taper before reaching the lowest belly. They never make neat horizontal belly bands. | Coverage faded out below the bottom third of the barrel box. |
| Neck | A common and often highly visible location — a mane-to-shoulder waterfall of streaks running lengthwise from the crest toward the throat, uneven in width, with blurred jagged borders. | The same field at 0.90 strength, without the sway: the neck is too short for an S to be anything but a wobble. |
| Upper legs | Where the limbs are involved it is the upper leg, and the pattern wraps more horizontally than the body's — irregular partial bands, broken rings, short transverse streaks. | A phase in y instead of x, windowed to the forearm and gaskin at 0.75 strength. |
| Head, mane, tail | The head is not a defining location and can be nearly unaffected; a normal mane and tail do not rule BR1 out. | Nothing at all — which also keeps the pattern off the head, where the rest-pose projection is only approximate. |
The knobs, and the one that bites
| Knob | Range | What it does |
|---|---|---|
nextLong() | — | The warp, break and per-band field's seed |
| spacing | 2.0–3.2 body units | Seven to eleven streaks along the 22-unit barrel, before the break field and the per-side roll take some away |
| duty | 0.16–0.30 | Mean fraction of each period that is streak, before the per-band width hash varies it — much thinner than the gaps |
| warp | 0.4–0.95 body units | How far the noise bends a streak off its plane |
Duty ran 0.30–0.46 with a soft edge 0.22 of a period wide on top, which put about as much white on the horse as coat — and a horse whose light and dark bands are the same width reads as a zebra with the edges rubbed out, whatever the field underneath it is doing. The break field was gentle for the same reason: a threshold of 0.32 sampled over a long stretch of body removes one end of a streak rather than punching a series of gaps in it.
Both came down together in the same pass — duty and the edge that scales with it, then the break threshold up and its feature size down, so a streak now arrives as four or five short dashes rather than one long bar. The pattern only reads as brindle when the coat is plainly the ground and the streaks are marks made on it.
The warp has to stay well under half the spacing. Brindle is a smeared pattern and the temptation is to warp it hard, but once the warp exceeds the gap between two streaks they bend into each other and the whole thing stops being stripes. The first build ran a warp of 1.6–3.0 against a spacing of 1.5–2.8 and baked out as convincing wood grain.
A fourth number is a constant rather than a knob: the coverage is gained above 1 before it is whitened. A brindle streak is white, so the core of one has to reach white — and the raw coverage rarely does, because the field multiplies the soft edge profile by a per-side presence roll and a break field. Saturating takes the core all the way while leaving both the edge and the streaks the rolls have genuinely damped, soft. Without it every streak came out a tan smear, which is to say a diluted stripe, which is the thing this deliberately is not.
Stored values, on the expressing copy: seed for the
streak field, then spacing, duty and warp
— read by name, so the gene can be re-tuned without repainting every horse
that carries it.
The biology, and what is deliberately left out
BR1 is an intronic splice-site change in MBTPS2
(originally reported as c.1437+4T>C), inherited X-linked
semidominant. MBTPS2 is a skin and hair gene, so real BR1 is
best understood as a hair-texture trait that is sometimes accompanied by
lighter or darker pigmentation — stripe hairs are reported as less straight and
more unruly than the surrounding coat, and in some horses the texture difference is
more obvious than any colour shift. Expression also changes with the season: a winter
coat can look diffuse or moth-eaten rather than sharply striped.
None of that is modelled, and the reasons are the same reason: the mod has one channel, and it is colour. There is no hair-direction or hair-quality attribute for a texture difference to live in, no seasons, and no ageing. So the gene draws the pigment half of the trait at its most legible — white — and the texture half is a line in this paragraph.
Two further real-world details are deliberately absent:
- The homozygous mare and the hemizygous stallion are supposed to lack the
stripes. In the original pedigree,
XBR1Ymales andXBR1XBR1mares showed sparse mane and tail and not the classic striped coat — because the classic pattern needs a mixture of normal-X-active and BR1-X-active clones, and neither of those genotypes has one. The mod inverts this: those are exactly the combinations that show. It is a deliberate trade — the real rule makes the visible phenotype an exclusively heterozygous-mare affair, which is a locus with no breeding target and nothing for a stallion to carry visibly. What is kept is the part that makes the pedigree interesting: one copy for a stallion, two for a mare, and a pattern that skips the male line. - Chimerism. Many brindled-looking horses are not BR1 at all: two genetically distinct cell populations, often from fused early embryos, whose boundaries read as streaks. It can affect either sex and is not predictably heritable — which is precisely why it is not here. There would be nothing to breed.
The scaffolding it proves
Brindle is the first user of Inheritance, and everything it needed is
general:
Gene.inheritance()—AUTOSOMAL(the default),X_LINKEDorY_LINKED.Genotype.breedWithroutes the sire's copy by the foal's own sex instead of drawing it. Sex is priority 1, so it is always already decided by the time any other gene is reached. The second coin is still flipped and thrown away — two booleans per gene is an invariant a lot of things lean on, and a locus that quietly consumed one would make the random stream depend on a foal's sex.Gene.sexConsistentdrops combinations no horse of either sex could carry, so the catalogue does not enumerate them and the random splice cannot roll them.Gene.realAlleles— two for a diploid horse, one for a hemizygous one — is what a sex-linked gene'sexpressionOfcounts. "Every real copy isBrn" covers "recessive in mares" and "always shows in stallions" in one sentence with no special case.- A sex-aware founder table. A stallion's is written out rather than derived from Hardy-Weinberg, because Hardy-Weinberg is a statement about diploid loci and this one is not.
Y-linked is built but has no gene. The mirror case works — a
mare's pair is two reserved X placeholders, a stallion's is a placeholder
plus his one real allele — and is waiting for a gene that wants it.
Not modelled
Sexual dimorphism in the coat is a different thing entirely and is unbuilt: the sex locus paints nothing and deliberately never will, so a stallion's crest would be a separate gene reading this one. Also not planned at all: imprinting, crossing over, linkage.
Mosaicism is a special case and needs saying carefully. There is no
general mosaicism in the model — a genotype is one pair per gene and every texel
reads the same one. What this gene has is the look of a mosaic, painted:
BlaschkoStripes rolls each band independently per side, which produces the
asymmetry X-inactivation produces without any of the machinery. It is a drawing of the
phenomenon and not an implementation of it, and nothing else in the mod can reach it.