Natural gene / phase 1
EDNRB (frame overo)
Frame overo, and the model’s first genuine lethal. Bold
jagged-edged white on the flanks that never crosses the topline — and, when two
carriers meet, an all-white foal that in life does not survive its first days. This is
what used to be horsegenetics.frame, renamed to its locus alongside
KIT, MITF
and PAX3.
Crossing two of them
Its gene carrot
Frame overos are commonly blue-eyed, and a lethal white foal always is — it has no pigment anywhere at all. Both claim through the shared eye-colour channel.
One or two blue eyes. A depigmenting claim frequently fails to reach the whole of both irises: 62% of blue-eyed horses get two whole blue eyes, 22% get exactly one (complete heterochromia, the other eye keeping whatever colour the horse's pigment genes gave it), and 16% get a wedge in one or both. It is one roll off this locus's own stored values, inherited with the allele copy — see the spread.
- Gene key
- horsegenetics.ednrb
- Priority
- 74
- Alleles
- O N
- Combinations
- 3, all of which occur, landing on 3 outcomes
- Outcomes
- wild,
frame-overo,lethal-white(masks) - Default allele
- N
- Wild frequency
O1 in 55 per allele — but no founder isO/O- Founder draws
- 1 × nextFloat()
- Deterministic
frame-overono;lethal-whiteyes- Epi draws
- nextLong() seed, nextFloat() body cover, nextFloat() face width
The combination table
| Combination | Outcome | Look |
|---|---|---|
N/N | wild type | nothing |
O/N | frame-overo | big, sharp-edged splotches of white across the middle of the side — barrel, flank, shoulder, lower neck — never crossing the back and rarely reaching the belly, so colour is left framing them above and below. Broad white face, dark legs but for the odd coronet, and the two sides need not match. Anything from cryptic to textbook. |
O/O | lethal-white (masks) | an all-white foal with pink skin |
Some carriers are marked so little you would never guess — which is exactly why frame is tested for and not eyeballed, and why a nearly all-white horse may carry no frame at all while a minimally marked one does.
Two kinds of lethal, and the model keeps them apart
KIT’s nonviable W
homozygotes and EDNRB’s O/O are not the same
statement, and collapsing them would lose the more important one:
W5/W5 and friends | O/O | |
|---|---|---|
| What happens | presumed embryonic lethal — never a foal | born, all white, dies within a day or two without the gut’s nerve supply |
canOccur | false | true |
| Catalogue entry | none | yes — it has a look, and a player will see it |
| In the founder table | no | no — a founder is an adult horse |
| How you get one | you don’t | two carriers, one time in four |
Hiding O/O would hide the single most important fact about breeding frame
horses. So it occurs, it has its own outcome, and it is painted.
The mod has no health system, so an O/O foal is born all-white and
then simply lives. That is a deliberate first slice — the coat is honest, the
consequence waits for the health work (roadmap
§6.4). It is why the outcome is named lethal-white rather than
something softer: the name is a standing note that half of it is missing.
How frame overo paints
The first rebuild fixed the reference height and still drew a horse dipped in white to a frayed waterline — belly-deep or deeper, with the coloured coat reduced to scraps. Three independent mistakes made it, and each was individually plausible:
- The threshold was never calibrated against the field it
thresholded.
PatchNoise.fieldaverages three octaves, so it concentrates near0.5and rarely leaves[0.25, 0.70]. Cutting it at1 - coverover a range that ran up to0.86and down to0.24put most rolls outside the field's spread entirely: a frame horse came out blank or flooded, with nothing in between. - The band was open downward. A floor below the underline and no penalty above it is a bottom-anchored gate — every texel from the belly up was equally eligible, so the flood pooled at the bottom and frayed along its top edge. That is the dipped horse, and no amount of retuning the noise would have fixed it, because the band and not the noise was drawing the shape.
- The jag ran finer than one texel. A barrel texel is half a
model unit; the jag's frequency was
3.4per unit, a period of a third of a texel. It was not an edge treatment at all but per-pixel white noise, and it is what dissolved the colour into scraps.
The first two were one knob wearing two hats, which is why neither could be set correctly. They are separated now: a quantile threshold decides how much white there is and the band decides where it pools.
Frame is identified by the distribution and outline of its white, not
by any single marking, so the painter is a list of those properties rather than one
shape function. Each row below is a claim the reference makes about real frame horses
and the thing in EdnrbGene.paintFrame that answers it.
| The pattern | How it is drawn |
|---|---|
| Big splotches in the middle of the side, with coloured coat left above and below them. That framing is the pattern and the name. | The band is a soft centre, not a floor: the bar rises quadratically with distance from a per-horse BAND_CENTER, by EDGE_BIAS at the band edge. So the strongest peaks of the field push a patch down over the belly or up toward the hip while everything else stays gathered around the middle of the barrel. BAND_UP is smaller than BAND_DOWN — frame white reaches the belly far more readily than it climbs. |
| A dark back. Viewed from the side the white does not cross the dorsal midline. | TOPLINE_CAP, a fraction of the barrel's own height, is a hard exclusion and not a ramp. It is the definition of the pattern rather than a tuning choice, so it is enforced and not merely discouraged; the withers, spine and croup are dark at every seed. |
| The patches are wider than they are tall, but they are patches — not a stripe running the length of the horse. | PATCHES_ALONG and PATCHES_TALL, counts of patch periods across the barrel's own bounding box rather than absolute model units — so a foal is marked at the same relative scale as the adult it grows into. Sampled five times longer than tall, which is what the previous version did, the field produced horizontal streaks: the anisotropy was doing the vertical band's job, and doing it by smearing every patch into a waterline. |
| Lower and middle neck white; the upper crest dark. Sometimes the neck white joins the face to the body. | The neck gets a band of its own, measured against the neck's height. It has to: the neck stands above the barrel, so against the barrel's ceiling it was entirely out of range and a frame horse had a completely dark neck. |
| Dark legs. A frame horse commonly has four dark legs; a coronet band or a white hoof can occur, but tall stockings are not frame alone. | The legs are excluded from the body pass outright. paintCoronets then gives each leg a CORONET_CHANCE of a band no taller than CORONET_MAX of the leg, with a wobbled edge — CoatRegions.whitenLowerLeg would have drawn a perfect ring, and nothing else on a frame horse has a clean margin. |
| Irregular, sharp-edged patches — jagged, angular, zig-zagged, not the smooth rounded fields of tobiano. | A hard threshold (so the edge is crisp, never feathered) wobbled by JAG at JAG_PERIODS across the barrel — a wobble about five texels wide, sized to displace an edge by two or three texels rather than to overwhelm the patch field it is meant to be perturbing. |
| Asymmetry. One side can carry a bold hip patch while the other is largely dark. | A per-horse SIDE_LEAN added to the threshold across the width. The field is sampled in 3D so it was already mildly asymmetric; this is what makes a horse genuinely whiter on one side. |
| A bold face — bald face, apron face, broad blaze — even when the body spotting is modest. | The shared face-marking vocabulary at a strength rolled between FACE_MIN and FACE_MIN + FACE_RANGE, near the top of the ramp, and rolled independently of the body cover — face-body contrast is part of the phenotype. |
| Cryptic expression. A carrier may show little more than facial white and a blue eye, which is why the locus is DNA-tested and not eyeballed. | The cover roll reaches nearly to zero, skewed toward the bold end by COVER_GAMMA so the near-invisible horses are a clear minority and the rest look like the pattern. The blue eye is claimed by the allele, not by the coverage, so a cryptic frame still has one. |
The threshold is a quantile, not a constant
paintFrame runs two passes. The first scores every
texel frame is allowed to mark; the second whitens the top cover
fraction of them. Scoring twice costs two noise evaluations per texel and buys the
one thing a single pass cannot: a threshold that is a quantile of
this horse's own field rather than a constant hoped to sit somewhere inside
it. cover then means what its name says at every value, instead of
saturating to blank or flooded at both ends of its range.
It also separates two things that used to be one knob. cover decides
how much white there is; the band, EDGE_BIAS and
SIDE_LEAN decide where it pools — and because a
bias that only re-ranks texels cannot change how many of them clear a quantile, the
two can now be tuned without fighting each other.
Measured against the topline, not the horse
WhitePattern.toplineHeight is the top of the barrel, and it is the
reference every vertical constant in every white locus is expressed against. On it
0.05 is the coronet, 0.10 the fetlock, 0.26 the
knee and hock, 0.52 the underline and 1.0 the spine —
so a number in the source says something anatomical rather than something about a
bounding box. It was made public for this gene, which was the last one still measuring
against the whole-horse AABB; the splash and sabino painters were moved off it a
session earlier for exactly the same reason, and it was a real defect there too.
lethal-white is a different painter: both pigments to zero everywhere,
and it masks, so it takes exactly one catalogue entry however much else the
horse carries. O/O is 100% white by construction; a single copy runs from
almost nothing to a bit over a quarter of the barrel and neck, which sounds low for a bold paint
horse and is not — four dark legs, a dark back, a dark mane and a dark tail are
most of a horse's surface, and leaving them coloured is the pattern.
The measurements above are pinned in WhitePatternGenesTest, which asserts
that the spine is white-free at every seed, that the legs and crest stay dark, that the
middle of the side is decisively whiter than both the belly below it and the barrel
above it (frameWhiteIsFramedAboveAndBelow — the test that was
missing, and whose absence is why a dipped horse could ship), that the patches are
measurably wider than they are tall, and that the range reaches both cryptic and
textbook. The two claims are deliberately separate: a horse dipped to a waterline is
also elongated, so it passes the anisotropy test and fails the framing one. None of it
has been looked at in game — To be verified.
The death — built 2026-09-04
This page used to say that O/O rendered correctly and then
survived, because there was no health system. There is one now. An
O/O foal is born — it gets a name, a record
and a place in the family tree — the breeder gets a chat line naming
overo lethal white syndrome, and the foal dies over about four seconds to a
horsegenetics:genetic_defect damage source.
That is the whole difference between this gene and MET,
and the model keeps the two apart deliberately. An O/O foal is born, so
it canOccur, it is counted, and it gets a catalogue entry. A
met/met embryo never implants, so it does not occur at all and the
pairing simply produces no foal.
A single frame copy costs the horse nothing — it is a white pattern and a completely healthy animal, which is exactly what makes the locus dangerous to breed blind. Full machinery, including why the damage out-paces gated healing, on the horse’s body.
Why frame has a locus to itself
Because it does — EDNRB is nothing to do with KIT or
the splash genes. And that is not a filing detail: a locus of its own is precisely why
frame composes freely with everything else. A horse really can be frame
and tobiano and splash, and the loudest overos in life are exactly
those stacks.
common/genetics/genes/EdnrbGene.java