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

Blue eyes

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
O 1 in 55 per allele — but no founder is O/O
Founder draws
1 × nextFloat()
Deterministic
frame-overo no; lethal-white yes
Epi draws
nextLong() seed, nextFloat() body cover, nextFloat() face width

The combination table

CombinationOutcomeLook
N/Nwild typenothing
O/Nframe-overobig, 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/Olethal-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 friendsO/O
What happenspresumed embryonic lethal — never a foalborn, all white, dies within a day or two without the gut’s nerve supply
canOccurfalsetrue
Catalogue entrynoneyes — it has a look, and a player will see it
In the founder tablenono — a founder is an adult horse
How you get oneyou don’ttwo 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.

Built: the coat. Not built: the death.

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

Rebuilt again 2026-09-06, NOT yet looked at

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.field averages three octaves, so it concentrates near 0.5 and rarely leaves [0.25, 0.70]. Cutting it at 1 - cover over a range that ran up to 0.86 and down to 0.24 put 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.4 per 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 patternHow 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

The foal no longer lives

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.

Source: common/genetics/genes/EdnrbGene.java