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
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
| Combination | Outcome | Effect |
|---|---|---|
n/n | wild | An ordinary horse |
Cutmrk/n | cutie-mark-carrier | Nothing — a silent carrier |
Cutmrk/Cutmrk | cutie-mark | The 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):
- the item count, 1–3 (
nextInt(3)); - whether three sit in a triangle rather than a row
(
nextBoolean(), only used at count 3); - three normalised picks in
[0, 1)— always three, drawn whether used or not; - a per-emblem scale;
- 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.
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/Cutmrkhas no mark, so no implementor is called at all. - Every field of
Markis somethingCutieMarkLayerhonours, 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.