Daily Joker Devlog: Month 1

Remember in 2024 when I made a terrible video game? I think it’s about time I tried again. I’m writing this about a month into development, and this might be the only one! Let’s find out together!
AI Disclaimer
There’s a lot of buzz about AI slop games, clones, decompiling, etc. Here’s where I stand right now.
I’m a software engineer by day, game designer by night. AI has drastically changed both of those fields. Despite my qualms with AI (of which there are many), I can’t afford to ignore it any more. However, the design process is what I enjoy. A chef might order pizza on a busy night, but they still enjoy cooking a fine meal for friends when they have the time. I have the time.
All the code and art will be human-made. I’m relying on a paid Claude subscription to aid me when I get stuck, and I’m following some Godot tutorials on Zenva by Daniel Buckley.
Let’s see how far I get this time…
No one should make this
Inspirations:
- Wordle. I want to make something simple that you can play for 5-10 minutes every day.
- Overpowered. One of my favorite things about Overpowered was the online leaderboard. Unfortunately it doesn’t work any more (thanks capitalism), but I want to make something vaguely competitive.
- No One Is Going to Buy Your Game. Absolutely give it a read if you feel depressed or frustrating about the world of games right now.
- GameMaker’s Toolkit Perks. I really liked his solution described here, and wanted a framework that I could add lots of things onto.
- Balatro. If you don’t include Balatro in your inspirations, the Indie Dev Council will issue a warrant for your arrest.
The Pitch
Daily Joker: A deck-building blackjack auto-battler
- Short Pitch: Can you build a deck that will defeat the Daily Joker in 1000 games of Blackjack?
- Long Pitch: Assemble a deck of 10 cards that will auto-play 1000 games of Blackjack against the Daily Joker and other players. Every day features a new Daily Joker with special modifiers. Explore synergies across hundreds of wacky cards. Refine your strategies with in-depth statistics and reports.
Design Goals
- A simple mobile game. Something you can play in 5 minutes.
- Vaguely competitive. More than just a leaderboard, but less than a turn-by-turn match.
- Expandable. I want to have fun thinking up dozens or hundreds of modifiers and cards.
- Data driven. Players need to be able to make informed decisions. They should always be able to answer the question, “Why did I lose?”
Design Challenges
- Hundreds of Cards and Jokers. I need to find synergies, strategies, different win conditions, etc.
- Detailed feedback. Since players don’t actually experience the gameplay, they need to know what happened and how to improve.
- Fast and scalable multiplayer server(s). It’s a simple game, so it should be able to handle hundreds or thousands of players. SHOULD
- Controlled randomness. Cardgames are inherently random, but players should feel some sense of control over the outcomes.
Gameplay
Win games to earn Pennies, spend those pennies on card packs, and use those cards to improve your decks.
New players start with 10 Blank cards (valued 1-10) and a free pack to open. Each pack contains 5 new cards.
Players create a deck of 10 cards and submit that deck to the server. The server pits that deck against the Daily Joker and other player-submitted decks. The server auto-plays 1000 games of Blackjack, keeping track of who won, who lost, etc. The results are sent back to the player, along with how many pennies they earned. Players can only submit one deck per day.
A quick example game:
1) David has a deck of 10 cards (valued 1-10). His threshold is 17. On the first turn he draws two cards, a 6 and a 3. His score is 9.
2) Next turn he draws another card: a 4. His score is now 14.
3) Next turn he draws another card: a 5. His score is now 19. That’s above his threshold, so he doesn’t draw any more cards.
After all other players have met their thresholds or busted, the server determines who won. In this case, David tied with the Daily Joker for the highest score of 19. But since the Daily Joker wins any ties, David loses this game.
Cards
Each card has a Value and a Suit.
- The Value of the card contributes to your total score when drawn.
- The Suit has some special effect on the game.
Here are some example cards:
- 5 of Blanks. Adds 5 to your score. Does nothing else.
- 2 of Negatives. Reduces your score by 2.
- 8 of Jacks. Adds 8 to your score. If you would bust, discard this card instead.
- 6 of Queens. Adds 6 to your score. At the end of the game, if you are not a winner, draw one more card.
- 10 of Kings. Adds 10 to your score. If you are the only winner, gain double pennies.
My original goal is to have 30 Suits with 10 values each. So that’s 300 cards for players to mess with.
Daily Jokers
The other big modifier is the Daily Joker. It changes every day, so I want there to be lots of variety. The DJ is the primary opponent. While players can affect one another, the DJ is the focus of the game.
Here are some example Daily Jokers:
- Handful: Deck is all 4s. Whoever has more cards in hand than the DJ is also a winner.
- QuickDraw: Deck of cards 1-10. Everyone draws two cards, and then the game ends.
- Doubled: Deck of cards 1-20. Players only bust with a score above 42.
- Communist: No cards. The DJ’s deck is made up of all the other players’ decks combined.
Weeks 1 and 2
I spent most of this time filling out a Google doc with ideas for Cards and Daily Jokers. I shared it with a few folks, but quickly realized that it’s hard to give feedback on something that doesn’t exist. That being said, I did accomplish three major things:
- A name and pitch for the game, as well as some design goals. Oh, and I also started writing this blog post.
- I made a quick python version of the game, just to test out the game rules, card resolution order, and get a feel for where the challenges will lie.
- 45 Suits and 30 Daily Jokers. Most of them are kinda bad, but at least I have a pool of ideas to start designing around.
Week 3: Godot, Networking.
Just like my last game, I wanted to make it using Godot. Not only is it open-source, but I’ve heard it has lots of nice server functions and mobile-development tools. I also learned a lot about Godot during my last go-round.
I started with the hard stuff first and made a simple UI and some server code. I wanted a player to be able to connect to the server, and then have the server return results back to the player. No special cards, no Daily Joker.
behold! One server window connecting with one client window!
This was where Claude really came in handy. I would ask questions like, “How can I maintain a client connection long enough for the server to finish playing all its matches” and “Explain how Godot handles multi-threading, particularly for these gameplay loops.” I gotta admit, Claude does feel like the next evolution of a search engine. Its explanations where comprehensive, and helped me get past some of the most basic hurdles.
However Claude really struggles to think outside the box. It kept trying to make a traditional blackjack game with a nice UI and “Hit” or “Pass” buttons where clients log in to play in real-time. Despite my constant corrections, it just assumed I wanted to make a basic Blackjack game.
And while I’m sure it could have eventually generated everything I needed, I had more fun letting Claude help with the “boring” stuff while I focused on the design elements. Which leads me to…
Week 4: Prototype
With a lot of the foundations built, I started adding in some suits and card abilities. It felt like every card ability revealed some flaw in the game loop. “Oh, this card lets you discard a card, but the game doesn’t have any way to put discarded cards back into the deck for the next round!”
20% of the time was building fun new suits and modifiers, while 80% was realizing how crappy my game was and patching logic holes.
Also the UI is just…ugh. Turns out the deckbuilding screens in lots of popular games are VERY hard to get right! Too bad my game is JUST a deckbuilding screen.
At first I just had all the cards shown in a grid. But that took up WAY too much space. I could only show a dozen cards on each screen, especially when each card had the rules text on it.
Then I tried shrinking the card image and moving all the card text to the side of the screen. That helped a bit, but still didn’t look nice.
My current solution is to stack the cards by suit. After all, the only difference is the value, and that’s all we need to see. I don’t love the suit explanation text being on the right hand side, so maybe the next upgrade is to make it a floating box on mouseover.
The deckbuilder screen
And I also added a little “Practice Mode” toggle that gives the player access to all possible cards.
Practice mode enabled
I have also started to clean up the player results, with some nice charts and info. Thanks to Gabriel Correa for the excellent pie chart code.
Practice mode enabled
Overall I’m happy with how things are going! I plan to add a dozen more suits, implement a Daily Joker, and then see if I can get something shareable for folks to try out. Until next month!