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

OutcomeCarrying
Ribbon drip, paleRdw/Rdw · Rdw/Rdc · Rdw/n
Ribbon drip, rainbowRdc/Rdc
Wild typeRdc/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 pairShows asHow often
Rdw/RdwRibbon drip, pale0.002% — 1 in 50,000
Rdw/RdcRibbon drip, pale0.008% — 1 in 12,500
Rdw/nRibbon drip, pale0.038% — 1 in 2,632
Rdc/RdcRibbon drip, rainbow0.008% — 1 in 12,500
n/nWild type99.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.

Keyhorsegenetics.rainbow_drip
Phasemagical — it adds signed colour in phase 3, after the pigment has resolved
Priority387 — where it sits in the one (priority, key) paint order
AllelesRdw · Rdc · n
Varies per horse2 values drawn once off the expressing allele copy, so a foal that inherits the copy inherits the look
Built fromGOO, 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.

  1. expression 'white' layer 1 — GOO × GOO inverted, painted with TOWARD
  2. expression 'white' layer 2 — GOO, painted with RAMP

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.

  1. expression 'coloured' layer 1 — GOO × GOO inverted, painted with TOWARD
  2. expression 'coloured' layer 2 — GOO, painted with RAMP

Wild type

No drip.

Paints nothing.