BALL - a Pong adaptation with analogue input for both players

card

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.

ball

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

4 Likes

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 = playdate.datastore.read("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"}
        playdate.datastore.delete("MenuValues") 
    end
    PopulateSystemMenu() -- which will also call all the menu callbacks on whatever's in MenuValues now
end
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
    end
    playdate.datastore.write(MenuValues, "MenuValues")
end

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

Small update: I added a rally mode. Press A to play the regular Pong-style game; press B to cooperate with a friend (or yourself) to go for the longest possible rally (and be scored accordingly).

This changed some UI stuff.

Also got around to doing the icon for list view and even did a launch animation for card view, which for its five frames took easily several times more effort than implementing the scoring for the Rally game type, but far easier than all the UI cleanup needed to make room for the rally game type.

The transition is tiny, but it pleases me -- just a very quick pan and zoom through the arcade bezel to the screen:
ball-launch
(weird, I've never seen that little artifact below the left score on-device)

You can get the update on Itch, free as always.

2 Likes