Inspiration

Twenty-five years ago Lucky Jack sat down at the Big Shots Table with everything he owned, lost it in an hour, and then bet his son. Tonight he walks back in to collect. We wanted a story you could tell in one sentence and a fight you could learn in one turn, and casinos gave us both: chips are life, a hand is an attack, and the house edge is literally the enemy's defence. Balatro and Inscryption showed us that one keyword per card is plenty if the order you play them in matters.

What it does

All In is a card-combat roguelike. You walk up through a casino, floor by floor, and every encounter is a hand of cards against the House.

Draw seven, play up to five. The cards you play stack into your Hand. Clear the House Edge and the extra comes off the enemy's chips; fall short and the difference comes off yours. Two card types bend that: a Streak doubles if the card before it had a Tell, and an All In burns another card from your hand and takes its chips. Same five cards in a different order can be worth half as much, so sequencing is the whole skill.

Once your Hand is final you can Push Your Luck on a coin that's 45/55 the House's way: win and the payout doubles, lose and your Hand is zero. Bosses pay in a perk you pick one of two, with no going back. Every few turns the Blinds rise.

Then the House. It reads your Hand after your fourth card and sets its Edge one chip above it. Your fifth card is the only one it can't see. Everything the game just taught you about leading with your best card gets you killed at that table, and the tutorial is designed so you learn the habit before the House punishes it.

There's a tutorial in the lobby that deals a fixed hand, walks you through every mechanic in eight keypresses, and ends on a real perk pick that quietly applies nothing. And there's an ending we'd rather you find yourself.

How we built it

Rust and Bevy 0.19, two developers and one artist, about thirty-six hours.

The first thing we did on Friday night was decide the seam between the combat engine and the overworld and freeze it: overworld inserts an Encounter, combat runs the whole duel and hands back a CombatOutcome, and that's the only state transition combat is allowed to make. That let one of us build the card engine test-first while the other built the casino, and we merged without stepping on each other for the rest of the weekend.

The combat model is pure Rust with no Bevy in it, which is why it has 130 tests and why we could simulate it. Before setting a single enemy's numbers we ran a few thousand hands through the deck with two player models, careless and careful, and tuned the House Edges and the Blinds against those. The simulation is what told us the Blinds were originally too steep (every fight past six turns was unwinnable) and, more usefully, that a player who follows the tutorial's advice loses to the House every single time. We kept that. It's the design.

We ran the project as a shared map on GitHub Issues: every design question became a ticket, decisions got made before code got written, and the map recorded each one so nobody had to ask twice. Art dropped into image slots that fall back to text, so the game was playable end to end before the first PNG landed.

Challenges we ran into

Bevy draws an image on a padded node inside the padding. We learned that twice: once when the backdrop shrank to a letterboxed square and the corner text spilled into the bars, and again when the card values sat on the frame's bezel instead of inside it. The fix both times was to make the art its own full-size layer behind the content.

Push Your Luck's "best two of three at 49/51" perk turned out to be worse than a fair coin: 3p² − 2p³ at p = 0.49 is 48.5%. The perk only makes sense if the base coin is unfair, so the base coin is 45/55 and the House got a little meaner.

The tutorial script had two bugs we only caught by tracing the card indices in a test: an All In stays in slot 1 until you name the burn, so the burn is slot 2, and the Push key was P, not Y. And a stale target/ after a pull fails to link with undefined hidden symbols, which is a fun thing to discover at midnight.

Accomplishments that we're proud of

A full run works: three floors, four bosses, rewards, a rigged tutorial, a glossary overlay, mouse and keyboard, damage that you can see, and the son walking in at the end. The House's hole-card rule came out of a design ticket on Saturday morning and it's the best thing in the game. And the numbers were set by simulation before anyone playtested, so the first real playtest didn't move them.

What we learned

Freeze the seam on night one. Write the pure model first and let the UI be a thin thing over it. Simulate before you tune. Decide before you build, and write the decision down where the next person will find it. And read the engine's source when its docs are thin; the answer to the padding question was one line in bevy_ui.

What's next for All In

The cuts, in the order we'd add them back: the reactive House deck (it reveals a card each turn: raise the Edge, force a discard, sour your next play), Push Your Luck on a Whiff, the secret Back Room and the man who beat the House, a voiced narration, and a browser build so nobody has to download anything. The card faces have art slots waiting for eighteen drawings. And the deck itself is fixed; a deckbuilding layer between floors is where this becomes a real roguelike.

Built With

Share this project:

Updates

Submission history