As we have announced, you will be soon be able to burn your doggo (uhm, I mean send them through the portal).
How does this work? In essence, it's a dog deflationary mechanic which sends your dog to a burn address. The dog will forever be lost in the Ethereum network and in return you will receive a Dog Tag Token. Once the cat minting starts, you will be able to 'use up' the token to receive a cat with improved rarity. This guarantees that your cat will be rarer than the one you would have otherwise minted if you had not burned a dog. This will be a one-time only improvement per cat. 1 portalized dog = one rarer cat. Fun fact: the cat you mint will share your dog's ID number.
But fear not! You do not have to send your dogs through the portal to get a cat. Every dog owner will receive one free cat mint per dog. In addition, the good news is mints are random so you could still mint the rarest cat without burning. Furthermore, you'll be glad to know your dog's rarity will not affect the cat's rarity, meaning a floor dog could still mint a rare cat. Your dog tags will become part of a collection themselves, which you'll be able to freely trade like an unopened pack of Pokémon cards, as Abby would say.
The Technical Stuff
The improvement mechanic is straightforward. You will 'roll the dice', so to speak, to generate what would have been your cat. 3 attributes will be chosen on the conditions that they: a) do NOT already have max rarity (legendary) and b) are NOT empty (aka '_none' in our code). Please be mindful that the exact number of attributes, chances for _none and the item chances themselves may change.
Pete and I worked together to create the rarity mechanic for the cat attributes. We are both avid gamers, so it was natural to divide it into 'Common', 'Rare', 'Epic' and 'Legendary' finishes. Usually you would get 5 tiers, including 'uncommon' but it just didn't work for our precious numbers, hence we kept it to 4.
In games, the rarity is determined by how powerful an item is in comparison to other items in their respective tiers. You still get rare items appear rarer than common but it might be irrelevant how many items are in each tier pool. This is clearly not the case where rarity is determined by scarcity, and it made it that much trickier for us. Putting too much of one into a tier pool might break the desired rarity.
For the cats, we have total of 9 attributes. There are 4 core attributes: background, body, eyes, and mouth; and 5 optional attributes with 30% - 60% chance of '_none'. We have worked through an estimated total number of items per attribute and crunched a lot of numbers to best balance item rarities.
We started with all Legendries at 0.5%. We wanted each tier's item rarity to be increased by a value bigger than the one below, with the multiplier of said value being similar. For example, in clothes first from Legendary to Epic, the chance increased by 0.75%, from 0.5% to 1.25%. Epic to rare by 1.04% (x 1.39 of 0.75%) and rare to common 1.52% (x 1.46 of 1.04%). Those 2 multipliers being relatively close determined the item rarity for Commons through to Epic.
Please note, in this example the Legendary Clothes have 0.50% chance of appearing but, as there are 4 of them, the total share of legendries will be 2%. The same logic is applied throughout rest of the attributes.
|Cumulative||Tier Chance||Tier||# Per Era||# Shared||# Total||Item Rarity||Increase|
|Cumulative||Tier Chance||Tier||# Per Era||# Shared||# Total||Item Rarity||Increase|
Let's get into the data. I thought the best way would be to write a Python script to create a bunch of non-existing cats with determined item rarity. We could then play around with the parameters and keep running it until we are happy with the results. I have transformed previously mentioned rarity numbers into a simple table to better read it through Python. Then I got down to coding.
I will quickly go over what the code does in its most basic form, then I might be able to share the whole code later. This is the process we followed.
- Use pandas to read the settings data from Excel and then put this data into an attributes dictionary to be used later.
- Generate the desired number of cats as phase one, as if no burning mechanic was ever present. This is where we call said dictionary to get our chances right.
- Randomly select set percentage of cats to be improved and put them into a list.
- Run a phase two where we add all the cats from phase one and improve if they should be improved from above list.
- Count the number of attributes present in phase one, then phase two, separating them into their slot and their rarity. This way we can later analyse them.
- Determine a rarity of the cat by determining the chance of it existing. We multiply percentages of all its attributes by each other. As we are working with fractions, the smaller the number, the rarer the cat.
- Get the share of 'improved' cats for every 10 percentiles to further analyse the results.
Below is what we get when running the script with the parameters of 8000 cats, 6.25% burn (500) and 3 attributes improved.
Important: Please note, these numbers are a simulation rather than an exact calculation of percentages. The rarity does not account for personality attributes. The rarity might also be determined differently by third party tools such as Rarity Tools or Rarity Sniper.
python catsdata.py --cats 8000 --burns 6.25 --upgrades 3 –detail \*\* Entry \*\* Generating: 8000 cats Burning (improving): 6.25% cats -> 500 count Upgrading: 3 attributes per improved cats \*\* Rarity \*\* - Slot : Clothes Non Burn : 2399 count | Burn : 2399 count | Set: 30.0% vs Imp: 29.98% - \_none Non Burn : 2499 count | Burn : 2416 count | Set: 3.81% vs Imp: 3.77% - Common Non Burn : 2135 count | Burn : 2159 count | Set: 2.29% vs Imp: 2.24% - Rare Non Burn : 797 count | Burn : 827 count | Set: 1.25% vs Imp: 1.29% - Epic Non Burn : 170 count | Burn : 199 count | Set: 0.5% vs Imp: 0.62% - Legendary - Slot : Head Accessory Non Burn : 2407 count | Burn : 2407 count | Set: 30.0% vs Imp: 30.08% - \_none Non Burn : 3063 count | Burn : 2974 count | Set: 4.75% vs Imp: 4.64% - Common Non Burn : 1574 count | Burn : 1609 count | Set: 2.5% vs Imp: 2.51% - Rare Non Burn : 791 count | Burn : 822 count | Set: 1.25% vs Imp: 1.28% - Epic Non Burn : 165 count | Burn : 188 count | Set: 0.5% vs Imp: 0.58% - Legendary [… other attributes] - Totals : Non Burn | Burn Legendary: 1406 | 1579 Epic: 5360 | 5676 Rare: 14466 | 14815 Common: 25968 | 25130 \_none: 16800 | 16800 \*\* Percentile Distribution \*\* 1 - 10 percentiles : 12.25% 11 - 20 percentiles : 10.5% 21 - 30 percentiles : 10.25% 31 - 40 percentiles : 12.12% 41 - 50 percentiles : 3.5% 51 - 60 percentiles : 2.62% 61 - 70 percentiles : 3.5% 81 - 80 percentiles : 2.62% 91 - 90 percentiles : 2.25% 91 - 100 percentiles : 2.87%
From these results we can see that the share of legendary items increases from 0.5% (settings) to approximately 0.6% (improved), and total number of legendary items from phase one: 1348 to phase two: 1507.
Furthermore, improved cats (6.25% of total supply) would take up 12.25% share of top 10% rarity. That equates to 19.6% chance that a burned cat is in top 10% rarity and only 4.59% for bottom 10% rarity. These numbers would have been at 10% chance across the board for every cat if we didn't have any burn and improve mechanics at all.
We thought an increase from 0.5% to 0.6% legendary item share was a significant but acceptable change. We also wanted to make sure that burning a dog gives you an appropriate reward for the risk and we thought doubling the chance for the cat to be in 10% was right, given that you would lose your doggo entirely.
We played a lot with other numbers of cats and numbers of attributes improved, but they would simply reduce the total of commons and increase the total of legendaries too much, giving us too little difference between them. It's all about balance!
Importantly, you can see this doesn't mean you are guaranteed a super rare cat. If you roll a cat which has bottom 10% rarity before any improvement, you are guaranteed that its attributes improve 3 times, but it could remain in the bottom 10%, although the chances of it are significantly lower in comparison to it climbing the higher brackets.
I hope this has clarified things and given you the information you need to make that all-important decision: to portalize or not to portalize?
Feel free to pop into our Discord if you have any questions.
Jakub — TDBC Team