Improbable Shiny Fancies

This post was originally published on this site

CryptoKitties

Apr 15 · 3 min read

Image for post

On April 15, 2020, against all odds (technically, about 1/10000 odds!), Kitty 1896039 was born as a Shiny Fancy in defiance of our stated requirements for creation of a Shiny Fancy. Our intention of the Shiny Fancy feature had been to provide a small chance for players who breed Fancies from non-fancy parents to create an incredibly special version of the Kitty.

Being the offspring of Fancy parents, the existence of this Kitty clearly defies our original intention of the feature. When taking a deeper look, it proves the mathematics behind what makes a Fancy Shiny. We’re going to walk you through the math behind Shinies using Kitty 1896039.

To calculate a Shiny, we need two numbers — the Shiny Chance Number and a Random Shiny Number. We’ll start by getting the Shiny Chance of Kitty #1896039 with this formula:

Shiny Chance Number=10000*(Total Fancy Traits — Number of those traits in Parent A)*(Total Fancy Traits — Number of those traits in Parent B)/(784/Total Fancy Traits)

Shiny Chance Number=(4–4)*(4–4)/(784/4) = 0

In the above formula, “Total Fancy Traits” refers to the number of required traits in the “Fancy recipe.” Doing the math gives us a Shiny Chance Number of 0. We now need to get the Random Shiny Number so we’ll use Kitty #1896039’s gene string as a random number generating (RNG) source to determine if this will be a Shiny Fancy.

461157126700272548519791719577163961520832057345738484297586251036561415

We group the string into four-digit numbers add all those numbers:

4611 + 5712 + 6700 + 2725 + 4851 + 9791 + 7195 + 7716 + 3961 + 5208 + 3205 + 7345 + 7384 + 8429 + 7586 + 2510 + 3656 + 1415

The sum of these numbers is 100,000. We call this the Summed Gene String.

Now we must get the remainder of the Summed Gene String when divided by 10,000 to get the Random Shiny Number.

100000 / 10000 = 10, remainder of 0

The Random Shiny Number is 0.

If the Random Shiny Number is less than or equal to Shiny Chance Fancies become Shiny. Otherwise, they will become a normal Fancy.

isShiny = RandomShinyNumber <= ShinyChance

isShiny = 0 <= 0

Kitty 1896039 became Shiny because its Random Shiny Number of 0 was equal to its Shiny Chance of 0. This off-by-one error is the culprit for the newly discovered path to Shiny-ness. A one-character change could have prevented this issue: isShiny = 0 < 0. This is the second time in 18,000 Fancy breeds that a Shiny was born with 0 as its Random Shiny Number (The first was born from non-Fancy parents, so did not reveal this issue).

You might be wondering what this means for the fate of our Kitty in question.

There will be no correction of Kitty 1896039’s art and badge. We take decisions to correct misprints very seriously and each incident has nuance to consider whether it be issues with the art for prism or the two so-called “failgatos”. We feel this is the best solution for the integrity of our game and it will be a great learning experience for everyone in the community.

Our goal with the Shiny Fancy feature has always been to give you more exciting ways to collect CryptoKitties in a way that is on-chain verifiable. This experience has reinforced our decisions to make Fancies and Shiny-ness not only verifiable but computed directly on-chain when CryptoKitties comes to Flow.

We are asking you to help us decide if this highly unlikely (approximately 1 in 10,000) chance should become an official feature of the game. While we consider feedback from the community, we will leave open the opportunity for others to have this miniscule chance to breed a Shiny Fancy from Fancy parents.

Share your feedback now.

We’ve created this sheet to verify the Random Shiny Number of ~18,000 CryptoKitties Fancies born since the release of Shiny Fancies. If you’re having difficulty understanding Shiny Fancies, watch this excellent video from @rudem00se.

Leave a Comment

%d bloggers like this: