You completed all six habits in the gacha habit tracker for two weeks straight, and the collection still shows zero legendary cards. The streak is intact and the machine is not rigged. The odds in the code simply cost more than they appear to, so we computed the full exchange rate between your daily habits and the rare pulls.
How one draw resolves
The draw function runs two random decisions in a fixed order.
const roll = Math.random() * 100;
let cumulative = 0;
const order = ['legendary', 'epic', 'rare', 'common'];
The roll lands uniformly between 0 and 100. The loop adds rarity probabilities in the order legendary, epic, rare, common, so the bands are fixed. A roll under 2 wins legendary. A roll under 12 wins epic. A roll under 40 wins rare. Everything else, 60 out of every 100 draws on average, wins common. The second decision picks one card uniformly inside the winning pool.
The odds behind every rarity card
Seventeen cards ship with the tool, split 6 common, 6 rare, 3 epic, and 2 legendary. Dividing each band by its pool size gives the per card chance.
Each common card carries a 10 percent chance per draw. Each rare card carries 28 divided by 6, about 4.7 percent. Each epic card carries 10 divided by 3, about 3.3 percent. Each specific legendary card, and there are exactly two, carries 1 percent per draw.
The streak math follows from those four numbers. The expected number of draws until your first legendary of either kind is 1 divided by 0.02, which is 50 pulls. For one specific legendary card the expectation doubles to 100 pulls. Reaching a coin flip chance of at least one legendary takes 35 pulls, and reaching 90 percent confidence takes 114 pulls. After 100 pulls with zero legendaries you sit inside a 13 percent outcome, unlucky but entirely normal, because 0.98 to the power of 100 is about 0.13.
The code contains no pity counter. Every draw runs the same two decisions with no memory of past results.
Token income sets your streak ceiling
Pulls cost tokens, and tokens come from completed tasks. The six default tasks pay 1, 2, 2, 1, 2, and 3 tokens, for a ceiling of 11 tokens per day when you complete all six. Each task pays once per day, and custom tasks you add yourself always pay exactly 1 token, a value fixed in the code.
Combine income with odds. The 35 pulls for a coin flip at a legendary cost 35 tokens, which is four days of completing every default task, since three full days pay only 33. The 114 pulls for 90 percent confidence cost 114 tokens, which is eleven days at the ceiling. One specific legendary at 100 expected pulls costs roughly nine full days of tokens.
Tokens do not expire and do not reset overnight. Only the completed task list clears daily, so banking tokens through a light week and spending them in a strong one is a strategy the code permits.
The UTC midnight reset
The daily reset compares dates produced by toISOString, which returns UTC. Your completed list clears at 00:00 UTC, not at your local midnight. Turkey sits at UTC plus 3 all year, so the reset lands at 03:00 local time there. A habit finished at 02:59 counts toward the previous UTC day. Plan late night sessions around this edge when you chase exact daily counts.
Where the gacha math fails you
Five failure modes deserve plain statements. The draw uses Math.random with no seeding, so nothing you do influences any pull. The 13 percent zero legendary band across 100 pulls is real, and hitting it feels broken while being correct behavior. All state, tokens, collection, tasks, and completion history, lives in browser localStorage under five keys, so clearing site data wipes a long streak with no export and no recovery. There is no cloud save and no account. And the daily counter resets on the UTC date, which shifts your local statistics by your zone offset.
Checklist before you trust the streak
- [ ] Budget 50 expected pulls per legendary of either kind, 100 per specific card.
- [ ] Count 11 tokens per day from the six defaults, 1 per custom task.
- [ ] Treat 100 dry pulls as a 13 percent outcome, not a malfunction.
- [ ] Do not clear site data unless you accept losing the whole collection.
- [ ] Remember the daily reset runs at UTC midnight, 03:00 in Turkey.
The full odds table sits in one config object, so you can audit it faster than you can farm tokens. Open the [gacha habit tracker](/en/gacha-habit), keep a draw log against the 60 28 10 2 bands, and send us your count if your legendary rate drifts from 2 percent over more than 200 pulls.