Hi there! I'd like to share what's behind the scenes of my first Playdate game, Paddle vs Paddle, which released on the Catalog few days ago!
The Origin Story
The game targets the classic problem of two people but only one console (a pain I experienced having an older brother and only one Game Boy back in the day).
In 2024, I built a simpler MicroPython prototype of this concept for the Thumby. But when I got my Playdate, I realized the hardware (and the Crank!) was the perfect excuse to learn Lua and build the full fledged version of that handheld multiplayer dream of mine.

Asymmetric Balance
The game is best played shoulder to shoulder. Player 1 (left) uses the D-Pad, while Player 2 (right) uses A/B buttons or the Crank. Because using the Crank in "Absolute" mode is incredibly fast and precise, I built a deep customization system to level the playing field. One can precisely adjust paddle sizes and speeds individually, so giving a kid a massive paddle and oneself a tiny/slower is possible for a perfectly balanced match.

The Tech & "Game Feel"
By day, I'm a Python Backend Engineer, so I skipped the elaborate story and focused entirely on optimization and physics. I wanted it to run at a locked 50 FPS with 300+ elements on screen. Some fun features under the hood:
-
Procedural Audio: Each player paddle has its own customizable synth wave to match its "character", with pitch bending tied to the ball speed and rally length. Each menu has its distinct "character" too, and moving the cursor up and down creates different tunes

-
Live Preview Menus: The UI is a physics simulation too. Changing the ball speed or paddle size settings instantly updates the cursor in the menu to reflect those physics so one can "feel" each individual change before playing.
-
XOR Shockwaves: Expanding rings that invert the pixels of the paddles and particles underneath them on heavy impacts (low CPU cost, but high visual impact ;D).
-
Hit Stop: Pausing the physics for a few frames on impact while keeping the camera shake and particles moving to emphasize the "force" of the ball, and to let human players catch up on the next trajectory.
-
Object Pooling: To keep 300+ particles flying around without triggering Lua Garbage Collection stutters.

Easter Eggs & Details
I couldn't resist hiding some fun stuff in there:
-
Attract Mode: If left idle for 30 seconds, a screensaver kicks in featuring a perfectly balanced AI vs AI match. It pits a massive, reactive paddle against a tiny predictive one (fine-tuned over hundreds of test matches to ensure equal win rates despite their different strategies).
-
Procedural Title Screens: After you see the main logos, the title screen starts generating mix-and-match logos using over 70 procedurally generated 1-bit dither patterns and several "VS" sprites inspired from classics like Street Fighter.
-
Animated Intros: The intro sequence features randomized opponent paddle "faces" that react to getting hit by the ball.

I'd be happy to discuss any questions you may have on the tech or design (even if it looks simple, the menu went through many iterations and testing with friends who hadn't seen the game before... and sometimes not even a Playdate!).
Here's the Catalog link btw: Playdate game PADDLE vs PADDLE