Where the numbers come from
PullSim starts with published pack-opening studies from the TCGplayer Authentication Center. We do not infer a missing rarity, average figures from unrelated sets, or substitute a community guess for a reported value. The Ascended Heroes guide uses a sample of packs and a release date of . The Prismatic Evolutions guide uses packs and a release date of . The Phantasmal Flames guide uses packs and a release date of .
Every series page links directly to its TCGplayer article, displays the stated confidence interval, and shows the number of cards assigned to the tier. The simulator reads those same values from the site data at runtime. This keeps the explanatory pages, the displayed table and the draw engine tied to one source of truth rather than three separately maintained copies. Card names, identifiers and image bases come from TCGdex, an open-source community-maintained database; those card records determine what can appear after a tier has been selected, but they never set the tier probability.
How a pack is built
A modeled pack has cards. The engine draws one rare slot, then the first reverse-holo slot, then the second reverse-holo slot. The remaining positions come from the combined Common and Uncommon pools without replacement. Each slot keeps its own list of eligible tiers and its own base-card remainder. A tier listed in one reverse-holo slot does not compete with a tier in the rare slot, and no global rarity bucket is created.
Mega Hyper Rare is handled differently because the source does not assign it to one of those three slots. PullSim treats it as an independent per-pack event. When it hits, it replaces one filler card, so the pack still has cards. It does not take the rare slot, and it is not the same as Mega Attack Rare: Mega Attack Rare remains an Ascended Heroes rare-slot tier. This replacement rule is important because appending a pack-level hit would silently create oversized packs and distort both the user experience and the measured per-pack frequencies.
Rate per pack vs rate per card
The source rate answers a tier-level question: how many cards of that rarity were observed per opened pack? PullSim first draws the tier using that absolute per-pack rate. Only after a tier wins does the engine choose one card uniformly from the corresponding pool. If a tier has a rate of r and its verified pool contains c cards, the estimated rate for one named card is r ÷ c. The tier rate and the single-card estimate are therefore not interchangeable.
This order of operations preserves the published probability. A larger checklist makes any particular card harder to hit without making the whole rarity less likely. Conversely, a small checklist can make an individual card relatively accessible even when the tier itself is rare. The equal-within-tier assumption is explicit and testable, but it is still a model: collation, print runs and regional product differences could make physical distribution less uniform. PullSim describes the calculation as an estimate and keeps the source sample visible so visitors can judge that limitation.
Why we never normalize
Each tier rate is already an absolute probability inside a particular slot. PullSim adds the tier rates in that slot and leaves the rest of the probability for the slot's ordinary card. It never divides each tier by the sum of the rare tiers. That normalization would answer the wrong question: “given that some listed hit occurred, which hit was it?” A pack simulator needs to answer “did a listed hit occur at all?”
The failure is easy to see with Prismatic Evolutions. Its Special Illustration Rare rate is . If the second reverse-holo slot's listed hit rates are flattened so that they must sum to a full outcome, that SIR figure rises to roughly twenty-nine percent. Nothing in the sample supports that result; it is a bug created by removing the ordinary reverse-holo remainder. The engine instead draws one random value, walks the tiers using their unmodified cumulative rates, and returns the base card when no tier threshold is crossed.
Where our sources disagree with themselves
Loading the Ascended Heroes comparison…
Loading the Prismatic Evolutions comparison…
Loading the specific-card comparison…
We keep these discrepancies visible because hiding them would make the dataset look more certain than the articles allow. The selected values are the values used by the engine, while alternate figures remain contextual records. This approach is deliberately conservative: it favors a reproducible main-table value and transparent notes over inventing a blended estimate.
What we cannot model yet
Poké Ball Foil and Master Ball Foil are patterns applied across cards rather than standalone TCGdex rarity categories. Their tier rates are sourced, but the available pool is the official-set pool of roughly one hundred thirty-one cards. As a result, dividing the tier rate by that full pool produces a conservative single-card estimate. PullSim does not select a smaller arbitrary subset merely to force the pool size to match a different published card count.
God Packs and Demigod Packs are also outside the current draw model. Ascended Heroes describes a special pack configuration but none were found in its recorded sample. The Prismatic Evolutions article discusses both configurations and notes what may have been two Demigod Packs, yet it could not confirm them. With no confirmed independent rate, PullSim stores the descriptions and leaves the rates null. A null value means “not established for simulation,” never zero probability and never permission to invent a number.
How to read a rate
A displayed percentage is a sample estimate, and the confidence interval shows how much uncertainty remains around that estimate. Common outcomes receive many observations, so their intervals are usually tighter. Extremely rare outcomes may be seen only a few times, which makes the estimate much less stable even when the sample includes thousands of packs. The interval is not a promise that every box, case or future print run will behave identically.
Ascended Heroes Mega Hyper Rare is reported at with a confidence interval of . The interval is almost as large as the central estimate, a clear sign that the sample is not yet large enough to pin down the true rate closely. Read that row as evidence of a very rare pack-level event with substantial uncertainty, not as a precise guarantee. When comparing sets, use the rate, interval, sample size, tier pool and slot together; no single cell tells the whole story.