G3 (A4b Deluxe Pack ex) rarity probabilities don't sum to 1 and don't match the real pack structure #1

Closed
opened 2026-10-08 21:43:00 +02:00 by freydis · 0 comments
Owner

`data/rarity_probabilities.csv` for `G3/normal` is the G1 table with the 4-diamond slots shifted left and the two shiny rows bolted on without reducing uncommon/rare. Column sums (active slots 1-4): 1.0, 1.0, 1.01047, 1.0419. `manage.py validate_probabilities` would flag this; it is not run anywhere (not in CI).

Effects in `prob_at_least_one_new_card`:

  • With >1 mass per slot, P(no new) can exceed 1, so the "chance to get a new card" goes negative for a fully collected Deluxe pack (reproduced: returns -0.0167 when every card is owned). The view only clamps with `min(..., 1.0)`, not at 0.
  • The table also contains a `shiny_rare` row (0.714% / 2.857%) but A4b has no shiny_rare cards (only 2 double_shiny_rare), so that mass is dropped per slot, inflating the chance for partially collected users.
  • The real Deluxe Pack ex structure is different: slot 1 common, slot 2 a 1♢/2♢ mix, slot 3 a wide mix of all rarities, slot 4 guaranteed 4♢ or higher (see e.g. https://www.destructoid.com/deluxe-pack-ex-odds-why-its-impossible-to-get-a-pokemon-tcg-pocket-master-set/). The stored table has none of that.

Fix: replace the G3 rows with the in-game offering rates for Deluxe Pack ex, drop the shiny_rare row, then run `validate_probabilities` (and consider adding it to CI / the import command).

\`data/rarity_probabilities.csv\` for \`G3/normal\` is the G1 table with the 4-diamond slots shifted left and the two shiny rows bolted on without reducing uncommon/rare. Column sums (active slots 1-4): **1.0, 1.0, 1.01047, 1.0419**. \`manage.py validate_probabilities\` would flag this; it is not run anywhere (not in CI). Effects in \`prob_at_least_one_new_card\`: - With >1 mass per slot, P(no new) can exceed 1, so the "chance to get a new card" goes **negative** for a fully collected Deluxe pack (reproduced: returns -0.0167 when every card is owned). The view only clamps with \`min(..., 1.0)\`, not at 0. - The table also contains a \`shiny_rare\` row (0.714% / 2.857%) but A4b has no shiny_rare cards (only 2 double_shiny_rare), so that mass is dropped per slot, inflating the chance for partially collected users. - The real Deluxe Pack ex structure is different: slot 1 common, slot 2 a 1♢/2♢ mix, slot 3 a wide mix of all rarities, slot 4 guaranteed 4♢ or higher (see e.g. https://www.destructoid.com/deluxe-pack-ex-odds-why-its-impossible-to-get-a-pokemon-tcg-pocket-master-set/). The stored table has none of that. Fix: replace the G3 rows with the in-game offering rates for Deluxe Pack ex, drop the shiny_rare row, then run \`validate_probabilities\` (and consider adding it to CI / the import command).
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
freydis/tcgp-tracker#1
No description provided.