AI Game Dev Search

Card packs that feel like an event: six rarity tiers, holo foil and fair odds

One prompt and a skill added card packs to our pixel sushi bar: 28 sushi cards from Common to Ultimate, each tier with one more effect, a reveal that builds to the best card, shown odds, pity and no wasted duplicates. Part 2. Open a pack.

Tested with Claude Code 2.1.296 · Opus 5.5

An Ultimate card being revealed: a pixel-art wagyu nigiri on a red and gold card with a rising sun, light rays and an ULTIMATE banner, with an Epic uni card in the stack beside it
What we asked“Add card packs to Neta. Packs cost coins and give ingredient cards (fish and other toppings) in six rarity tiers from Common to Ultimate, and each new card adds a new nigiri to the menu that customers can order. Opening a pack should be the most exciting moment in the game.”

What happened

  • Loaded the card-packs skill and read the whole game from part 1
  • Wrote one card table that both the game and the art script read: 28 nigiri, from tamago to wagyu
Claude
The structure works, but the toppings read as boxes and Epic+ items cover their backgrounds. Reworking the slab silhouette into a draped, arched shape and shrinking the Epic+ items.
  • Wrote the odds, pity and duplicate rules as plain code and opened 100,000 packs with a fixed seed
  • Ran the shop with a simulated player who buys packs
Claude
Packs come too often early (every ~1.5 min). Raising base price and growth, then re-measuring.
  • Built the pack screen: tear, rise, flip, glow before rare cards, summary, book and odds
  • Drove real pack openings of every tier in a browser, frame by frame, at 720 px and on phones
Claude
The Ultimate reveal looks right. Tuning the build-up glow (too dim), stale banners carrying into the next card, and over-bleached Ultimate foil.
Claude
Tilted cards stay crisp: whole art pixels, stepped foil bands, the aura hugging the topping.

In part 1 we got a pixel sushi bar that runs itself, with three fixed nigiri. Now the menu grows through card packs. Every card is a sushi topping, and a new card puts a new nigiri on the menu that customers order right away. We asked for one thing above all: opening a pack should be the best moment in the game.

A pack opening from start to finish: the pack is torn, Common and Uncommon cards flip, an Epic uni card glows purple before it flips, then the screen darkens and an Ultimate wagyu card bursts in with light rays, ending on the summary of five new cards

Open a pack

The first pack is free: click the pack button at the bottom, then drag across the top of the pack or just tap. After that a pack costs coins. Click to turn on sound. Open full screen

1. Each tier adds one thing

Marvel Snap upgrades a card in steps you can see: grey and flat, then green with the art breaking the frame, then blue and 3D, purple and animated, orange with a shiny logo, red with an animated border (Marvel Snap Zone). Our own holo-card game uses the same idea. It started from Holo Card Studio, EverettFish's open-source skill that turns one artwork into a layered 3D foil card with a laser rainbow, sparkle and a gold edge, and later grew its own six rarity tiers, each adding one layer: none, depth, foil, motion, light, spectacle. The skill gives Claude that ladder, and the rule that a lower tier never borrows a higher tier's effect:

TierAdds
Common (grey)a flat card
Uncommon (green)depth and a drop shadow
Rare (blue)rainbow foil and a sea-wave background
Epic (purple)moving art that breaks out of the frame, a night sky
Legendary (gold)glare under the pointer and a glow behind the card
Ultimate (red)an aura around the sushi, an animated border, orbiting sparkles

Here is the reveal of each tier, from Common to Ultimate. You can tell them apart by the frame alone, and colour-blind players get a corner gem and one to six pips:

Six card reveals side by side: Aji (Common, grey), Tai (Uncommon, green), Engawa (Rare, blue with a RARE banner), Chutoro (Epic, purple with a night sky), Nodoguro (Legendary, gold with a rising sun and rays), Wagyu A5 (Ultimate, red with rays and a ring)

All 28 cards. Claude drew every nigiri as pixel art in code, and rarer cards get a richer background: waves for Rare, a night sky for Epic, a sunrise for Legendary and Ultimate.

All 28 cards in four rows: eight grey Commons such as tamago, salmon and ebi, six green Uncommons such as maguro and unagi, five blue Rares such as ikura, two purple Epics, then more Epics, three gold Legendaries and two red Ultimates

2. Crisp pixels, separate shine

Holographic cards on the web are usually made the way simeydotme's pokemon-cards-css does it: the card tilts toward the pointer, and a rainbow layer and a white glare move over the art with blend modes (GitHub). On pixel art that blurs everything. The skill keeps the art and the shine apart: the art stays whole pixels, the foil moves in stepped bands, and sparkles are tiny plus shapes. Claude checked a tilted card up close before calling it done:

A close-up of a tilted Ultimate card: every art pixel stays square and sharp, the foil is drawn in stepped colour bands

3. A reveal that builds

The order comes from Pokémon TCG Pocket and Hearthstone. You tear the pack (dragging, or a tap), and light leaks out of the slit in the colour of the best card inside. The five cards are sorted so the best comes last. Before a Rare or better flips, it glows its tier colour and trembles while a sound rises. Hearthstone shows the rarity colour on face-down cards in the same way (Hearthstone Wiki). Before a Legendary or Ultimate, the rest of the screen goes dark.

Players open packs a lot, so the whole thing can be skipped. The team behind TCG Pocket tuned the tear sound on real packs "since we expect users to open packs every day" (GoNintendo), and not being able to skip became its top complaint (Dexerto). In Neta a tap finishes the current card and "Reveal all" finishes the pack. Measured from tap to summary:

Best card in the packTime
Rare5.6 s
Epic6.6 s
Legendary8.4 s
Ultimate10.9 s
Legendary, reduced motion4.4 s

4. Fair, and shown

The odds are one tap away from the shop, the pack and the summary. They follow Hearthstone's well-tested rules (Hearthstone Wiki): the fifth card is always Rare or better, an Epic or better is guaranteed within 10 packs and a Legendary or better within 40, with the counters on screen. You can't get a second Legendary or Ultimate before you own them all, and duplicates turn into pearls, which buy any card you choose.

Claude opened 100,000 packs to check. The longest run without an Epic was 9 packs, and without a Legendary 39. A full collection takes a median of 132 packs, or 97 if you spend pearls on the missing cards. In a simulated game, a player opens a pack about every 3 minutes at the start and every 19 minutes after three hours, while income grows from about 70 to 350 coins a minute.

What it cost

One prompt, no follow-ups: 39 minutes and $8.52 of Claude Code working alone, starting from the part 1 game.

Not done yet: nothing is saved yet, so the collection resets when you reload. Duplicates give pearls but don't level cards up. The reveal runs at 60 fps with a graphics card; on a machine with only software rendering and a large screen it drops to 14–40 fps.

Next: inventing sushi

Right now each card is one fixed nigiri. In part 3 the cards become ingredients: rice, toppings, sauces and preparations that you combine into your own sushi. Some combinations are great and some are terrible, and the rules come from what sushi chefs actually do.

Add packs to your game

  1. Copy the skill below into .claude/skills/card-packs/, or download it with its references.
  2. Ask your agent: "Add card packs to my game. Make opening one the most exciting moment."
  3. Check its report: the measured rate of each tier, the longest drought (it must respect the guarantees), and how long a pack takes to open.

The skill that made it work

This is the skill we gave Claude Code. The full version has three reference files: the tier table, the reveal timings and the odds, pity and duplicate rules. Copy the rules below, or download it with its references.

card-packs
  1. Cards are game items. Every card is something the game uses (an ingredient, a unit, a recipe), with its data in one table: id, name, tier, art, and what it does in the game. Packs feed the main loop: a new card unlocks or improves something within the next minute of play. A collection that sits beside the game is a side game nobody needs.
  2. Six tiers, one new effect each. Common (grey, flat), Uncommon (green, depth), Rare (blue, foil), Epic (purple, motion), Legendary (gold, light), Ultimate (red, spectacle). Each tier keeps everything from the tier below and adds one thing, the way Marvel Snap's card upgrades do. A lower tier never borrows a higher tier's effect. The tier must read from the border colour alone, plus a corner gem and pips for colour-blind players. See references/tiers.md.
  3. Crisp art, separate shine. The card art is pixel art at one scale, never blurred. Shine, glare, sparkle and glow are separate layers on top: shine through a hand-drawn foil mask (only the parts meant to be foil shine), with its colour bands stepped to whole art pixels; sparkles are 1–3 px plus-shapes from the palette, not soft dots. Cards tilt toward the pointer (at most about 14°) and spring back.
  4. Make each card worth looking at. A card shows a big illustration of the item (about 40–56 art px), a name in a pixel font and one line of what it does. Rarer cards get richer art: a background scene instead of a flat colour, the item breaking out of the frame at Epic and above.
  5. An opening sequence that builds. Tear (following the drag or a click), cards stacked face down, flip one at a time, the best card last. Before a rare-or-better card flips it glows its tier colour, longer for higher tiers; then a burst, a flash and a small screen shake that grow with the tier. End on a summary of the pack with NEW tags. See references/reveal.md for the timings.
  6. Always skippable. Tap to finish a card early, a "reveal all" button, and a reduced-motion setting (no shake, half the time). A pack with only commons must take under about 4 seconds to open.
  7. Show the odds. Per-slot odds for every tier, and the real chance per pack including guarantees, one tap away in the shop and the pack screen. Never change the odds based on what the player has done or spent.
  8. Guarantees and pity. Every 5-card pack has at least one Rare or better in its last slot. Visible pity counters: an Epic or better within 10 packs, a Legendary or better within 40. The first pack is free and scripted to unlock something new right away.
  9. No wasted pulls. No second copy of a Legendary or Ultimate until the player owns every card of that tier. Duplicates turn into a currency (and/or raise the card's level) that can buy a chosen card, worth about a quarter of that card's price. See references/fairness.md.
  10. Price that grows. Packs cost the game's main currency and get pricier as the player grows (`price = base × 1.07^packsBought` or tied to income), so an active player opens one every 3–5 minutes early on and every 15–30 minutes later.
  11. Measure it. Simulate at least 100,000 packs with a fixed seed and report the real rate of each tier per card and per pack, the longest drought for Epic and Legendary (must respect pity), how many packs a full collection takes, and how much currency duplicates give. Check the opening sequence in a real browser at 720 px wide and on a phone, for every tier (add a debug way to force a tier).
  12. Report the tier table, the measured rates, the time to open a pack, and what is not done.

Save it as .claude/skills/card-packs/SKILL.md in your project. Put the references folder next to it.

Part 2 ofMake a sushi chain incremental with AI
All parts →