Odds

The table is what the breeding code rolls. It is not a second, conflicting target.

Utility alleles

Each kitten has 7 genes and 3 alleles per gene, packed into 84 bits. Genes 5, 6 and 7 are Miner, Racer and Nine-lives. Every utility allele, dominant or recessive, is an independent roll of the same table. The expressed tier is the dominant allele (slot 0). Parent genes change the hash, so different parents make different children, but they do not change these probabilities.

TierAlleleBasis pointsProbability
Ordinary0600060.00%
Rare1280028.00%
Epic2100010.00%
Legendary31901.90%
Mythic4100.10%

These constants are oddsTable() on the kitten contract.

Whole kitten, derived

A label below uses only the three dominant utility alleles. It is not rolled separately. With three independent 60% Ordinary rolls, an all-Ordinary kitten is 0.6³ = 21.6%, not about 50%.

LabelRuleProbability
OrdinaryAll three dominant alleles Ordinary21.6000%
RareBest dominant allele is Rare46.5472%
EpicBest dominant allele is Epic25.9720%
LegendaryBest dominant allele is Legendary5.5811%
MythicAt least one dominant allele is Mythic0.2997%

Cosmetic traits

Fur, eyes, ears and headband each have 16 traits. Each cosmetic allele is uniform: 1/16. The picture uses the dominant trait as the main feature and the recessive alleles as the accent and pattern. Placeholder art, until the final drawings arrive.

100,000 breeds

Foundry calls the same mixGenes the contract uses, 100,000 times, and checks every utility allele against the table. One run landed at:

BucketCountExpected
Ordinary alleles541,109 / 900,000540,000
Rare alleles251,300 / 900,000252,000
Epic alleles89,759 / 900,00090,000
Legendary alleles16,903 / 900,00017,100
Mythic alleles929 / 900,000900
All-Ordinary dominant trio21,697 / 100,00021,600

The test allows about ten standard deviations, wide enough not to flake and tight enough to fail if the table and the code drift apart. Re-run it with forge test --match-test test_oddsSimulation_100k -vv.