BALL - a Pong adaptation with analogue input for both players


An introductory CS class I'm a volunteer teacher for has started their PONG project. Knowing that the world is cluttered with terrible PONG adaptations and that the Playdate could probably handle the game's input requirements better than a gamepad could, I did my best to actually not do the half-century classic a disservice. Because it's actually a good game, but hard to get to see in its best light.


Warioware Twisted's Push-off minigame is great. Versus cocktail cabinets are great. So why not have one player tilt the Playdate and the other grab the crank? It works better than you might think.

There's also a D-pad control option for cowards, wherein the left diagonals move slower than straight up and down, so you can kind of roll your thumb around for pseudo-analogue control. It's surprisingly decent, but in PONG, absolute input is king.

Free download on Itch


Itch analytics suggest -- in the unlikely event that downloads of updates don't count as separate downloads -- I may have achieved over a 0.1% attach rate on the Playdate? That sounds better than 50-odd downloads, right? Either way, it feels like a tremendous success, given no other platform has made me comfortable releasing, like, a working thing I made to the wider world. The accessibility of this platform as a means to get from shower thought to a thing other people you'll never meet have running in their hands is unbelievable.

Source is at GitHub - jalexchapman/ball. I think it's presentable? I'm happy with the phosphor trails and how little it took to stick in a couple menu settings and get those settings to persist.

I mean seriously.

function InitializeSettings()
    MenuValues ="MenuValues")
    if MenuValues == nil
     or MenuValues.ballTrailLength == nil
     or MenuValues.sensitivity == nil then -- wipe the old settings store and go back to defaults
        MenuValues = {ballTrailLength = "M", sensitivity = "1"}
    PopulateSystemMenu() -- which will also call all the menu callbacks on whatever's in MenuValues now
function SetSensitivity(sensitivityName) --one of the system menu callbacks
    MenuValues.sensitivity = sensitivityName
    if sensitivityName == "1" then
   -- snipped: apply that and other possible values of this setting to the requisite program vars
    playdate.datastore.write(MenuValues, "MenuValues")

It's just downright rude how pleasant this thing is to work with and how eager it is to get out of your way.

1 Like