Magical gene / lines and strokes
Ribbon Drip
A field of black poured over the topline, its lower edge sagging into even lobes and rimmed with four ribbons - pale on one form, the whole spectrum on the other.
What it can come out as
| Outcome | Carrying |
|---|---|
| Ribbon drip, pale | Rdw/Rdw · Rdw/Rdc · Rdw/n |
| Ribbon drip, rainbow | Rdc/Rdc |
| Wild type | Rdc/n · n/n |
How each one is actually drawn - region by region, and the layers it is built from - is on the coding tab.
Crossing two of them
Finding one
About 1 in 1,786 wild horses is born showing this. That is the whole of the supply: catch one, or make one with the carrot below. Breeds set their own pools and a breed built around this gene will carry it far more often than the wild population does.
| Wild pair | Shows as | How often |
|---|---|---|
Rdw/Rdw | Ribbon drip, pale | 0.002% — 1 in 50,000 |
Rdw/Rdc | Ribbon drip, pale | 0.008% — 1 in 12,500 |
Rdw/n | Ribbon drip, pale | 0.038% — 1 in 2,632 |
Rdc/Rdc | Ribbon drip, rainbow | 0.008% — 1 in 12,500 |
n/n | Wild type | 99.944% |
Its gene carrot
The file
common/src/main/resources/horsegenetics/genes/rainbow_drip.json — a
data-driven gene, not a Java class. It is listed in the
index.json beside it and registered by Genes' class
initialiser at startup.
| Key | horsegenetics.rainbow_drip |
|---|---|
| Phase | magical — it adds signed colour in phase 3, after the pigment has resolved |
| Priority | 387 — where it sits in the one (priority, key) paint order |
| Alleles | Rdw · Rdc · n |
| Varies per horse | 2 values drawn once off the expressing allele copy, so a foal that inherits the copy inherits the look |
| Built from | GOO, RAMP, TOWARD |
Why it is built this way
The reference arrived as a traced SVG (372 gradient-filled paths), half of which are the transparency checkerboard behind the artwork rather than the artwork. It is not pasted in as an SVG mask: the marking is a periodic lobed boundary, which is a kind of shape and not a particular one, so it is WAVES - the only mask in the vocabulary that repeats evenly on purpose.
All five layers carry the SAME WAVES seed, wavelength, amplitude and phase and differ only in from/to. That is what makes the four ribbons sit parallel to the black edge and to each other all the way along the lobe. Change the wavelength on one and the marking comes apart; change it on all five together and the lobes get longer or shorter, which is the knob worth turning.
Each ribbon is 0.07 of the barrel's Y span, which is 0.7 body units, or 1.4 texels. That is deliberately just clear of the half-unit floor - do not narrow them to fit a fifth ribbon in, because at 0.05 they average away and the gene draws a black field with no rim at all.
The four ribbons could not be four fixed hues a constant apart, because a knob cannot be offset by a constant. Instead every ribbon layer runs the SAME RAMP across the WHOLE rainbow zone (0.42 to 0.70) and its mask decides which quarter of that sweep it lands on. One knob, four discrete ribbons, and the spectrum stays in order whatever $hue is set to.
The black field is a fixed colour in both forms. It is the ground the rim reads against, so the white form is a pale-rimmed black drip rather than a white one.
founders below is a placeholder that satisfies the loader. Run intake/tools/founders.py to derive the real table from the rarity tier.
Arrived at priority 260. Moved to 387: lines and strokes - runs down from the topline, and paired with ooze drip. The arriving number was taken, or sat in a band whose family does not describe this marking - priority is both the paint order and the family the sidebar files a gene under.
WAVES axis and across arrived the wrong way round, and every drip ran sideways - lobes pointing at the tail from a band across the front of the barrel. On WAVES, 'axis' is the direction the wave TRAVELS and 'across' is the axis the band sits on, which is the opposite of what 'axis' means on an AXIS mask, and the file was written the natural way. A band along the topline with lobes hanging down is across Y, axis X. The numbers did not change: from and to were always heights, and the wavelength was always a spacing along the horse.
THE BLACK FIELD'S 'to' IS 1.45, NOT 1.05 (2026-09-11). WAVES displaces the WHOLE band, not just the edge you are shaping: at a trough the far edge came down to 0.85 of the barrel and left a bare brown stripe along the top of the back, once per wavelength, which is what the owner saw. Anything banded across a part has to clear 1.0 by its amplitude plus its softness.
RENAMED FROM 'RAINBOW DRIP' (2026-09-11, owner's call). Two thirds of the horses this gene makes carry Rdw, whose rim is grey to white, and a gene called Rainbow Drip that comes out black and white is a name arguing with the horse in front of you - "the name makes it SUPER confusing". Ribbon Drip describes what both forms are, and the rainbow is now the name of the allele that actually draws one. The KEY is still horsegenetics.rainbow_drip: it is the genotype code's spelling and no horse should change because a label did.
What it paints
Each outcome, described the way the gene file describes it, and then the layers that draw it in the order they are painted. The prose is the part a reader checks a bake against; the list underneath is what the engine actually did.
Ribbon drip, pale
Black poured over the topline with a lobed lower edge, rimmed by four ribbons stepping from grey at the leading edge to white against the black.
- expression 'white' layer 1 —
GOO×GOO inverted, painted withTOWARD - expression 'white' layer 2 —
GOO, painted withRAMP
Ribbon drip, rainbow
Black poured over the topline with a lobed lower edge, rimmed by four ribbons running most of the way round the colour wheel.
- expression 'coloured' layer 1 —
GOO×GOO inverted, painted withTOWARD - expression 'coloured' layer 2 —
GOO, painted withRAMP
Wild type
No drip.
Paints nothing.