Allelic Complexes
Most morphs in the catalog are independent genes. Pastel, Banana, Albino, Clown — they sit on different loci, they sort independently, and the calculator works each one out as a separate Punnett square then combines them.
A handful of traits are different. They are alleles at the same locus — different versions of the same gene — and they interact when crossed in ways that an independent-gene model cannot predict. This is the mechanism behind the Blue-Eyed Leucistic and the Ivory in Ball Pythons, and it's the most distinctive feature of the calculator versus simpler morph predictors.
What "co-alleles" means
A locus is a gene's address on a chromosome. An animal carries two copies of every locus — one from each parent. Each copy can be a different allele.
For most morphs, the catalog tracks two alleles per locus: the morph allele and the wild-type allele. Albino is the morph; everything else at that locus is wild-type.
A handful of loci have three or more alleles segregating in the breeder population. The classic case is the BluEL locus in Ball Pythons: Mojave, Lesser, Butter, Mocha, Russo, Phantom, Mystic — all sit on the same gene. An animal carries two of them (or two wild-type, or one of each).
When you cross two BluEL animals, what you get isn't just "double-Mojave" or "double-Lesser." You get a compound homozygote — an animal carrying two different BluEL alleles. The phenotype is a fully white snake with blue eyes: a Blue-Eyed Leucistic, or BEL.
Compound homozygotes
A "compound homozygote" is the genetics term for an animal carrying two different morph alleles at the same locus. Having two morph alleles produces a homozygous-style phenotype — the locus is "saturated."
For BluEL, any two of the seven alleles together produces BEL. That's why "Mojave × Lesser → BEL" is a real cross result, not Mojave + Lesser as two independent things. The calculator knows BluEL is a single locus and emits BEL as the compound homozygote name.
Named single-locus compounds
Sometimes the breeder community has named a specific compound — not the generic homozygote, but one particular allele combination. The calculator knows these names:
| Cross | Named compound | Locus | |---|---|---| | Mojave × Mystic | Mystic Potion | BluEL (Ball Python) | | Yellowbelly × Asphalt | Highway | Yellowbelly (Ball Python) | | any two BluEL alleles | Blue-Eyed Leucistic (BEL) | BluEL — generic compound homozygote | | Yellowbelly × Yellowbelly | Ivory | Yellowbelly — homozygote |
Mystic Potion is specifically Mojave × Mystic. A Mojave × Lesser cross gives BEL, not Mystic Potion — they're different allele pairs even though they sit on the same locus.
The calculator emits the most specific name available: a curated compound name if the cross has one, otherwise the generic homozygote name (BEL, Ivory), otherwise a fallback "Allele₁ Allele₂" string.
Why this isn't the same as multi-locus compounds
A common confusion. Allelic complexes (this page) and multi-locus compounds (next page) sound similar but are mechanically different:
| | Allelic complex | Multi-locus compound |
|---|---|---|
| Where the alleles live | Same locus, different alleles | Different loci, separate genes |
| Example | Mystic Potion (Mojave × Mystic) | RAPTOR (Tremper Albino + Eclipse) |
| Calculator math | Punnett via the locus engine — gives clean percentages | Marked unknown, returns "outcomes vary" |
| Saved as | Two separate traits on the locus | The named combo entry |
If a Mojave (BluEL) × Lesser (BluEL) baby hatches, the app saves it with two traits on the animal — one Mojave and one Lesser. It is not saved as a fake combined "BEL" trait, because BEL is just the displayed name for that allele combination. A BEL hatchling and a "Mojave + Lesser" hatchling are the same animal in the app, and that's the right model.
If a Sunglow (Albino + Hypo) baby hatches, the catalog's Sunglow combo entry handles it differently — see Multi-locus compounds.
Loci in the catalog today
Ball Python carries four loci:
- BluEL — Mojave, Lesser, Butter, Mocha, Russo, Phantom, Mystic. Compound: Mystic Potion (Mojave × Mystic). Generic compound homozygote: BEL.
- Banana / Coral Glow — Banana and Coral Glow are seeded as synonyms (same locus, same allele) — they're the same gene under two names. Z-linked codominant. See Sex-linked inheritance.
- Yellowbelly — Yellowbelly, Asphalt. Compound: Highway (Yellowbelly × Asphalt). Homozygote: Ivory (Yellowbelly × Yellowbelly).
- Cinnamon — Cinnamon, Black Pastel. Allelic; the homozygote in either is a Super Cinnamon / Super Black Pastel.
Other species' catalog has minimal locus-level structure today — most morphs are at independent loci.
Why we model loci at all
A simpler app would treat every morph as an independent gene and just refuse to predict crosses where it's wrong. The locus model exists because:
- The math is right. Two BluEL alleles produce BEL — the calculator should reflect that, not pretend it's Mojave + Lesser as independent codominants.
- The animal record is right. A BEL hatchling has two BluEL traits on it, not a fake combined "BEL" trait. The morph string and bloodline come out right downstream.
- Synonyms come for free. Banana ≡ Coral Glow are modelled as two trait names sharing a locus — the calculator collapses them in output. No separate "synonym" mechanism needed.
The locus model is the differentiator. It is also why disputed claims like Champagne ≡ Puma stay as separate traits — promoting them to same-locus alleles would change calculator predictions, and breeder consensus isn't there yet. See Disputed claims.