Magical gene / recessive / paints nothing in the pipeline

Cutie mark

A horse that wears a little emblem of one to three items, stamped on both flanks, drawn on top of every other coat gene — white patterns included. Which items, how many, whether they sit in a row or a triangle, and how big they are, are all epigenetic and inherited with the allele.

Crossing two of them

It paints nothing in the pipeline

Like particle, all three outcomes are wild types: the baked coat texture is unchanged, so two horses that differ only here share one baked coat. The emblem is a client render layer (CutieMarkLayer, a twin of the glow emissive layer) that reads the gene straight off the genotype and draws item models on the flanks, after the coat and after every white pattern. That is also why the priority is only a code-order slot: the layer draws last regardless of where the gene sorts.

Its gene carrot

Gene key
horsegenetics.cutie_mark
Priority
196 (magical band) — only a code-order slot; a client layer draws the emblem after everything
Alleles
Cutmrk n
Combinations
3 — 3 outcomes (all wild types)
Outcomes
wild, cutie-mark-carrier, cutie-mark
Default allele
n
Wild frequency
6% per allele — recessive, so ~0.36% of wild horses are homozygous, ~11% carry a copy
Founder draws
1 × nextFloat()
Coat effect
none in the bake — the emblem is a separate render layer
Built 2026-09-05, not yet play-tested

No horse has been seen wearing a mark in game. The emblem is a fixed first-guess offset out from the animated body part, anchored (since 2026-09-05) mid-haunch, high on the flank, with the icons shrinking and depth-stacked when there are two or three; it wants tuning. The icons were rendering upside down and are now spun upright in-plane. Block items are filtered out of the pool but a few oddly-shaped flat items may still read poorly. Checklist on To be verified.

The combination table

CombinationOutcomeEffect
n/nwildAn ordinary horse
Cutmrk/ncutie-mark-carrierNothing — a silent carrier
Cutmrk/Cutmrkcutie-markThe emblem, on both flanks

Everything about the emblem is epigenetic

CutieMarkGene.markFor(genotype, epigenome) draws, off the expressing copy's stored values (the names are the contract):

  1. the item count, 1–3 (nextInt(3));
  2. whether three sit in a triangle rather than a row (nextBoolean(), only used at count 3);
  3. three normalised picks in [0, 1) — always three, drawn whether used or not;
  4. a per-emblem scale;
  5. a small tilt.

A foal that inherits the Cutmrk copy inherits the exact same mark. Breed two carriers and about one foal in four is Cutmrk/Cutmrk.

The item pool

A pick is resolved against FlatItemCatalog — every registered item that is not a BlockItem, i.e. the flat item/generated-style icons (tools, food, materials, mob drops). Block items are excluded because they render as little isometric cubes. The list is built once per session off the frozen item registry, so modded items are in the pool and adding a mod (a new session) rebuilds it. Which item a given pick lands on therefore depends on the installed mods — deliberately: cross-install determinism is not a goal (the mod already has 26.1.2-only content), and within one install a horse's mark is fixed and heritable.

Other genes can modify the mark

Cutie mark is a channel with a single owner, like the LUT. This locus decides whether a horse has an emblem and draws the base one; any other gene may then change it through CutieMarkContribution, and markFor folds every implementor over the mark in Genes.codeOrder() order before handing it back.

Why this channel can afford an open hook

The emblem is the last thing drawn on a horse. It sits on top of the finished coat, on top of every white pattern, on top of the emissive layer — nothing composes over it and nothing reads it back. So a modifier cannot corrupt an accumulator, surprise a later painter, or move a texture-cache key, because the mark is not in the baked coat at all. That is why the cross-locus reads discouraged elsewhere (settled) are fine here.

The contract

  • An implementor is called for every combination it can have, including its own wild type, and decides for itself whether it has anything to say. The fold deliberately does not filter on expressionIn(...).wildType(), because most of the magical genes that would want to reach the mark — particle, milk, the body-stat loci — paint nothing and therefore declare every outcome a wild type, so that filter would exclude precisely the genes the hook exists for.
  • It is pure: a mark in, a mark out. Draw any randomness off GeneEpigenetics.forGene(this, genotype, epigenome) so the result stays deterministic and heritable.
  • A modifier can make an existing mark stranger; it can never grant one. A horse that is not Cutmrk/Cutmrk has no mark, so no implementor is called at all.
  • Every field of Mark is something CutieMarkLayer honours, and that is a rule rather than a coincidence — a field nothing draws is a promise the game does not keep. A new one lands in both places in the same change.

The first user

Light. A horse whose hooves, mane or eyes already glow wears a glowing mark: any variant copy sets emissive and the layer draws the emblem full-bright. It is the case that makes the hook obviously right rather than merely general — a horse with four burning gold hooves wearing the one dull thing on its body would read as a bug. Nothing else about the emblem moves, so a light horse and its unlit full sibling wear the same mark, lit differently.

Still open: which genes and breeds should bias the item pool (a milk horse leaning toward bucket and bottle icons), and mark colour — a per-instance tint is not reachable through ItemStackRenderState.submit, so it would need a custom render type. Roadmap.