feat: add slot game assets and update tutorial style

- Add new image assets for Gold Rush slot game (bandit, dynamite, pickaxe, saloon, sheriff, wagon)
- Add new image assets for Sugar Spin slot game (bear, berry, cane, chocolate, jelly, lollipop, mint, rainbow)
- Add cabinet and card artwork for all slot games (Liberty Belle, Fruit Frenzy,Lucky Sevens,Sugar Spin)
- Update slots-artwork.json with paths for all new and existing slot assets
- Modernize Mastermind tutorial language with casual/colloquial tone
This commit is contained in:
Brian Fertig 2026-06-13 15:00:37 -06:00
parent 980dae5374
commit b59e805614
28 changed files with 55 additions and 48 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

View File

@ -39,12 +39,12 @@
{ {
"id": "liberty-belle-cabinet", "id": "liberty-belle-cabinet",
"key": "slots-liberty-belle-cabinet", "key": "slots-liberty-belle-cabinet",
"path": null "path": "/assets/images/slots/slots-liberty-belle-cabinet.png"
}, },
{ {
"id": "liberty-belle-card", "id": "liberty-belle-card",
"key": "slots-liberty-belle-card", "key": "slots-liberty-belle-card",
"path": null "path": "/assets/images/slots/slots-liberty-belle-card.png"
}, },
{ {
"id": "fruit-frenzy-cherry", "id": "fruit-frenzy-cherry",
@ -84,12 +84,12 @@
{ {
"id": "fruit-frenzy-cabinet", "id": "fruit-frenzy-cabinet",
"key": "slots-fruit-frenzy-cabinet", "key": "slots-fruit-frenzy-cabinet",
"path": null "path": "/assets/images/slots/slots-fruit-frenzy-cabinet.png"
}, },
{ {
"id": "fruit-frenzy-card", "id": "fruit-frenzy-card",
"key": "slots-fruit-frenzy-card", "key": "slots-fruit-frenzy-card",
"path": null "path": "/assets/images/slots/slots-fruit-frenzy-card.png"
}, },
{ {
"id": "lucky-sevens-blank", "id": "lucky-sevens-blank",
@ -134,12 +134,12 @@
{ {
"id": "lucky-sevens-cabinet", "id": "lucky-sevens-cabinet",
"key": "slots-lucky-sevens-cabinet", "key": "slots-lucky-sevens-cabinet",
"path": null "path": "/assets/images/slots/slots-lucky-sevens-cabinet.png"
}, },
{ {
"id": "lucky-sevens-card", "id": "lucky-sevens-card",
"key": "slots-lucky-sevens-card", "key": "slots-lucky-sevens-card",
"path": null "path": "/assets/images/slots/slots-lucky-sevens-card.png"
}, },
{ {
"id": "pharaohs-fortune-ankh", "id": "pharaohs-fortune-ankh",
@ -324,7 +324,7 @@
{ {
"id": "gold-rush-wagon", "id": "gold-rush-wagon",
"key": "slots-gold-rush-wagon", "key": "slots-gold-rush-wagon",
"path": null "path": "/assets/images/slots/gold-rush/wagon.png"
}, },
{ {
"id": "gold-rush-queen", "id": "gold-rush-queen",
@ -334,7 +334,7 @@
{ {
"id": "gold-rush-pickaxe", "id": "gold-rush-pickaxe",
"key": "slots-gold-rush-pickaxe", "key": "slots-gold-rush-pickaxe",
"path": null "path": "/assets/images/slots/gold-rush/pickaxe.png"
}, },
{ {
"id": "gold-rush-ace", "id": "gold-rush-ace",
@ -349,87 +349,87 @@
{ {
"id": "gold-rush-sheriff", "id": "gold-rush-sheriff",
"key": "slots-gold-rush-sheriff", "key": "slots-gold-rush-sheriff",
"path": null "path": "/assets/images/slots/gold-rush/sheriff.png"
}, },
{ {
"id": "gold-rush-saloon", "id": "gold-rush-saloon",
"key": "slots-gold-rush-saloon", "key": "slots-gold-rush-saloon",
"path": null "path": "/assets/images/slots/gold-rush/saloon.png"
}, },
{ {
"id": "gold-rush-dynamite", "id": "gold-rush-dynamite",
"key": "slots-gold-rush-dynamite", "key": "slots-gold-rush-dynamite",
"path": null "path": "/assets/images/slots/gold-rush/dynamite.png"
}, },
{ {
"id": "gold-rush-bandit", "id": "gold-rush-bandit",
"key": "slots-gold-rush-bandit", "key": "slots-gold-rush-bandit",
"path": null "path": "/assets/images/slots/gold-rush/bandit.png"
}, },
{ {
"id": "gold-rush-cabinet", "id": "gold-rush-cabinet",
"key": "slots-gold-rush-cabinet", "key": "slots-gold-rush-cabinet",
"path": null "path": "/assets/images/slots/slots-gold-rush-cabinet.png"
}, },
{ {
"id": "gold-rush-card", "id": "gold-rush-card",
"key": "slots-gold-rush-card", "key": "slots-gold-rush-card",
"path": null "path": "/assets/images/slots/slots-gold-rush-card.png"
}, },
{ {
"id": "sugar-spin-jelly", "id": "sugar-spin-jelly",
"key": "slots-sugar-spin-jelly", "key": "slots-sugar-spin-jelly",
"path": null "path": "/assets/images/slots/sugar-spin/jelly.png"
}, },
{ {
"id": "sugar-spin-gummy", "id": "sugar-spin-gummy",
"key": "slots-sugar-spin-gummy", "key": "slots-sugar-spin-gummy",
"path": null "path": "/assets/images/slots/sugar-spin/bear.png"
}, },
{ {
"id": "sugar-spin-candy-cane", "id": "sugar-spin-candy-cane",
"key": "slots-sugar-spin-candy-cane", "key": "slots-sugar-spin-candy-cane",
"path": null "path": "/assets/images/slots/sugar-spin/cane.png"
}, },
{ {
"id": "sugar-spin-mint", "id": "sugar-spin-mint",
"key": "slots-sugar-spin-mint", "key": "slots-sugar-spin-mint",
"path": null "path": "/assets/images/slots/sugar-spin/mint.png"
}, },
{ {
"id": "sugar-spin-berry", "id": "sugar-spin-berry",
"key": "slots-sugar-spin-berry", "key": "slots-sugar-spin-berry",
"path": null "path": "/assets/images/slots/sugar-spin/berry.png"
}, },
{ {
"id": "sugar-spin-sugar", "id": "sugar-spin-sugar",
"key": "slots-sugar-spin-sugar", "key": "slots-sugar-spin-sugar",
"path": null "path": "/assets/images/slots/sugar-spin/sugar.png"
}, },
{ {
"id": "sugar-spin-lollipop", "id": "sugar-spin-lollipop",
"key": "slots-sugar-spin-lollipop", "key": "slots-sugar-spin-lollipop",
"path": null "path": "/assets/images/slots/sugar-spin/lollipop.png"
}, },
{ {
"id": "sugar-spin-chocolate", "id": "sugar-spin-chocolate",
"key": "slots-sugar-spin-chocolate", "key": "slots-sugar-spin-chocolate",
"path": null "path": "/assets/images/slots/sugar-spin/chocolate.png"
}, },
{ {
"id": "sugar-spin-rainbow", "id": "sugar-spin-rainbow",
"key": "slots-sugar-spin-rainbow", "key": "slots-sugar-spin-rainbow",
"path": null "path": "/assets/images/slots/sugar-spin/rainbow.png"
}, },
{ {
"id": "sugar-spin-cabinet", "id": "sugar-spin-cabinet",
"key": "slots-sugar-spin-cabinet", "key": "slots-sugar-spin-cabinet",
"path": null "path": "/assets/images/slots/slots-sugar-spin-cabinet.png"
}, },
{ {
"id": "sugar-spin-card", "id": "sugar-spin-card",
"key": "slots-sugar-spin-card", "key": "slots-sugar-spin-card",
"path": null "path": "/assets/images/slots/slots-sugar-spin-card.png"
} }
] ]
} }

View File

@ -1,42 +1,49 @@
## Mastermind — Decryption Duel ## Mastermind — Decryption Duel
Two hackers, two secret codes, one race. You and the rival AI each lock in a Yoooo bro, listen up. Two hackers, two secret codes, one absolutely *unhinged* race to crack
**secret code**. On every round you try to crack the rival's code while the rival each other's encryption. You and this rival AI both lock in a **secret code**. Each round
tries to crack yours. **First to fully crack the other's code wins.** you're out here trying to break their code while they're coming for yours. **First one to
fully crack the other's code? That's the W, no cap.**
### The code ### The code
A code is a row of colored pegs — by default **4 pegs drawn from 6 neon colors**, Bro, a code is literally just a row of colored pegs — default is **4 pegs pulled from 6 neon
and **colors may repeat**. You compose your secret at the start by clicking color colors** (so cyberpunk, so valid), and **colors can totally repeat**. Compose your secret at
chips into your slots, then press **LOCK IN**. the start by clicking color chips into your slots, then smash that **LOCK IN** button. Don't
sleep on the repeats, they go *hard* for throwing off the AI.
### Guessing ### Guessing
On your turn, click chips to build a guess at the rival's code and press On your turn, click chips to vibe-check the rival's code and hit **SUBMIT**. The system
**SUBMIT**. You get feedback pegs back: sends back feedback pegs and lowkey they slap:
| Feedback peg | Meaning | | Feedback peg | Meaning |
| --- | --- | | --- | --- |
| **Green (exact)** | Right color **and** right position | | **Green (exact)** | Right color **and** right position — bussin fr fr |
| **Yellow (partial)** | Right color, **wrong** position | | **Yellow (partial)** | Right color, **wrong** position — close but no cap |
| **Dim** | That color isn't (further) in the code | | **Dim** | That color ain't it, bestie |
Feedback never tells you *which* peg is right — only *how many*. Use the pattern The feedback never tells you *which* peg is right — only *how many*. Stack your pattern
across rounds to narrow it down. reads across rounds and big-brain your way to the answer. It's literally a whole data
analysis arc, bro.
### Winning ### Winning
- Get **all green** (every peg exact) to crack the code and win immediately. - Get **all green** (every peg exact) to crack the code and secure the bag immediately.
- If both sides use up all **10 rounds** without a full crack, whoever got the - If both sides burn through all **10 rounds** without a full crack, whoever locked in
most exact pegs in a single round wins; a true tie is a stalemate. the most exact pegs in a single round takes the dub. True tie? Straight up stalemate,
and honestly? Respect.
### The rival's skill (15) ### The rival's skill (15)
Set in the lobby before the match. Skill controls how cleverly the rival uses its Set this in the lobby before the match drops. Skill controls how hard this AI goes with
feedback: its feedback reads:
- **1** — sloppy; fires mostly random guesses and wastes rounds. - **1** — total bot behavior; mostly yolo guesses, wastes rounds, couldn't hack its way
- **23** — keeps its guesses *consistent* with the clues most of the time. out of a wet paper bag.
- **4** — always plays a logically valid guess. - **23** — keeps its guesses *consistent* with the clues most of the time. Mid threat,
- **5** — runs Knuth's optimal strategy and will usually crack a 4×6 code in **five tbh.
rounds or fewer**. Lock in a tricky code with repeats! - **4** — always plays a logically valid guess. This one's actually built different.
- **5** — runs Knuth's optimal strategy and will crack a 4×6 code in **five rounds or
fewer** basically every time. This AI is from the future, bro. Lock in a wild code
with repeats or you're cooked. Not gonna lie.