I purchased a Playdate in October 2022. I was interested in the novel crank input, small form factor and limited hardware resources.
Constraints promote creative limitation; I was curious to see how talented developers would utilise the crank and work with the 1-bit display and lower powered CPU to deliver novel experiences on the unique device.
I enjoy the idea of a game's genesis being directly linked to, and driven by, the capabilities and constraints of a device. I also like the idea of game design evolving over time rather than being designed upfront.
I enjoyed discovering Valve's cabal process, aspects of this iterative design philosophy implements values and principles of the Manifesto for Agile Software Development, a simple set of guidelines for effect software development which I often refer to during my day-to-day work.
I decided to take the rough shape of an idea, trying not think too much about the finished product in the initial stages, and proceed to lay the groundwork for a functional prototype. I wanted to let the game evolve as I learnt more and completed regular feedback loops.
The crank input is an obvious inspiration, and so it was the crank which formed the focus of the control scheme for my prototype; I wanted to explore fun and intuitive ways of incorporating this novel control.
The motion of continuously winding the device reminding me of a gatling gun style mechanism whereby the operator is continuously cranking the control to load and fire ammunition. This in turn made me consider the bullet hell subgenre of games and arcade lightgun games such as Point Blank and The House of the Dead as inspiration.
I considered whether having a Point Blank style microgame experience would support the small game approach by simplifying the playfield, limiting it to a single static location. This approach allowed me to reduce scope and focus primarily on creating a sound and extensible architecture, robust game loop and an enjoyable interaction.
The name of the game is influenced by the barrel of the gatling gun, combined with the crank input device.
- Establish extensible architecture.
- Implement a basic gameloop.
- Accept crank based input.
- Track scoring.
- Offer power ups which affect scoring.
- Remove stage selection screen.
- Introduce high score table.
- Improve physics.
- Improve visuals, introduce themed graphics.
- Improve balance of scoring v power-ups.
- On finishing a game, some hit markers remain.
GitHub Copilot was used to assist in the development of this software.
The majority of the game was developed prior to the adoption of Copilot, its use was focussed on code review and refactoring.
Note
Other operating systems and versions will work, where versions are specified treat as minimums.
For compilation and debugging support in VS Code, install the Playdate Debug extension.
Both tasks.json and launch.json are configured to build and run the application using the Playdate Simulator.
Note
When the Playdate Simulator is launched automatically following a build, the debugger is not attached.
To debug the application, pressing F5 will launch the Playdate Simulator with the VS Code debugger attached.
The Playdate SDK ships with an excellent simulator to allow fast feedback loops during development.
If you own a physical Playdate device the simulator can interface with the device, when connected you can:
- use the device as a controller for the on-screen simulation,
- or run your build on the device to see how it performs with accurate hardware execution.
Download the Playdate SDK.
Follow the installation guide.
Follow the guidance to set your SDK path environment variable.
If using Ubuntu you may need to patch the Playdate Simulator. I raised this issue on the Playdate forum, Bubu gave this very useful response. Where they state:
I noticed that the versioning difference between webkit2gtk 4.0 and 4.1 seems to be only the libsoup version they are compiled against (libsoup2 vs libsoup3). The PlaydateSimulator itself doesn't link to libsoup, which led me to believe that it doesn't actually matter with which libweb2gtk version it runs
You can use the ldd command to view the shared library dependencies of a binary.
The following command should reveal which dependencies are reported as not found:
ldd $PLAYDATE_SDK_PATH/bin/PlaydateSimulator | grep "not found"
libwebkit2gtk-4.0.so.37 => not found
libjavascriptcoregtk-4.0.so.18 => not foundYou then locate which version of the missing dependencies you have on your operating system:
locate libwebkit2gtk-4.1 | grep '^/usr/lib/'
/usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.1.so.0
/usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.1.so.0.17.8You can then use patchelf to update the binary to use the modified dependency:
patchelf --replace-needed libwebkit2gtk-4.0.so.37 libwebkit2gtk-4.1.so.0.17.8 $PLAYDATE_SDK_PATH/bin/PlaydateSimulatorThe final command applies the same fix to the second missing dependency:
patchelf --replace-needed libjavascriptcoregtk-4.0.so.18 libjavascriptcoregtk-4.1.so.0.8.6 $PLAYDATE_SDK_PATH/bin/PlaydateSimulatorClone the repository.
Open in Visual Studio code.
Build the projects.
Note
The solution is configured to run the Playdate Simulator following each build.
- Stage selection: A single stage is implemented, the selector is present for future expansion.
- Multiple target types: Score points, extend your time, increase your score through multipliers or lose points by hitting the incorrect targets.
- Track your progress: Track your current score, the active multiplier and the time remaining using the status bar.
The easiest method to test the game is via the Playdate simulator.
The video below demonstrates the basic core mechanics within a working prototype.
Note
The demonstration shows a stage selection screen which allows the user to select from 4 minigames, however only the first minigame is implemented.
The player selects stage 1, instructions are then provided before the round commences.
The round shows the player aiming for a variety of targets, scoring points and increasing their ammunition.
At one point the player hits a multiplier target which temporarily boosts scoring. This is indicated by the X value beside the current score at the top of the screen.
As the round progresses, the rate at which targets are generated increases.
The Playdate is backed by a rich, active, enthusiastic and talented community of developers who communicate via the official developer forum as well as the Playdate Squad Discord server.
Panic, the creators of the Playdate, produce an insightful podcast during which the host, Christa Mrgan, interviews developers who reveal fascinating detail of their design and development process.
Panic also provide excellent tooling to build and release games via their official Playdate Catalog or via other distribution methods such as itch.io; the device supports sideloading to support homebrew development and distribution.
I am a big fan of Don, Ryan and Nick's Hello Playdate Podcast and spend time discussing the device with the hosts and listeners on their Discord server.
I used the small games manifesto as inspiration for my prototype and as a method of controlling scope (KISS).
This repository was created primarily for my own exploration of the technologies involved.
I have selected an appropriate license using this tool.
This software is licensed under the MIT license.
Images have been used from Unsplash.
Images are free for use as per their license.
More detailed information can be found in the documentation:
