Important
Campfire Sandwich is currently in active development for Hack Club's Campfire Flagship programme.
The deadline for the completion of this project is Sunday 22nd March 2026. There is no guarantee for support or continued development after this date.
Introducing Campfire Sandwich, an endless-scroller rhythm game that blends nostalgic art styles with fast-paced, music-driven gameplay.
It reimagines classic endless-runner aesthetics - from cozy farming vibes to retro browser-game minimalism - through a rhythmic twist that keeps every moment engaging.
Players jump, dodge, and sync their actions to the beat as the world shifts between styles inspired by beloved games like Stardew Valley, the Chrome Dino game, and Go Go! Pogo Cat.
This game was initially created for Hackclub's Campfire Flagship hackathon alongside its sister project 'Grand Throw Auto V', but is still being worked on both for fun and also to qualify for future in-person Hackclub events.
If you'd like to learn more about previous versions of Campfire Sandwich, look no further than the demo document I created for the Hackclub review team :)
- Python 3.10+ including
pip - Git
- Pygame and other associated dependencies
- Microsoft Visual Studio Code or other Python-compatible IDE
Tip
Using VS Code is recommended for development on Campfire Sandwich because it makes debugging easiest.
git clone https://github.com/Lamparter/CampfireSandwich
cd CampfireSandwichpython src/main.py...or simply press F5 if in a compatible IDE.
Scroll down to the bottom of this page to see a demo of the game in action.
After opening the game for the first time, press 'Start' to enter the song selection screen. You should then see a menu like this:
You can then choose a song using either the mouse or keyboard, for example California Gurls by Katy Perry.
You will then enter the endless runner game, where you need to avoid obstacles that run towards the player sprite (in this case, cacti, because this is the Chrome Dinosaur game theme) by jumping to dodge them. There may also be a count-in timer on the screen; this will count you into the song so you can prepare yourself to play and enjoy the song at the same time. You can jump by pressing SPACE like in any classic endless runner game.
The musical twist of Campfire Sandwich is that you must also match your jumps to the beat of the song. If you can't hear the beat well, there is a beat bar at the top that will show you exactly when you must press the space button to score more points. Every time you jump, a judgement of how accurate your jump was to the beat of the song will be displayed below the beat bar and the screen will flash if you jump precisely on the beat. You should aim to jump right as the progress of the beat bar reaches the end (right side) of the bar.
Screen.Recording.2026-03-07.231700.mp4
At any point in the game, you can press ESC to pause the game, this will dim the screen although the music will continue to play in the background. Some songs have a higher BPM than others: a higher BPM generally means a more difficult song to play as you need to jump to avoid obstacles more often.
Campfire Sandwich has multiple custom themes that allow you to experience the game in unique ways, including:
- Stardew Valley (classic theme), the original pixel-art theme of Campfire Sandwich
- Below the Surface, the theme designed at Hackclub's Campfire London event on Saturday 28th February 2026 at Ada, the National College for Digital Skills in Victoria, London
- Santa Monica, a theme inspired by Campfire Sandwich's sister project, Grand Throw Auto V, which is set by the Santa Monica pier
- Chrome Dinosaur, a theme inspired by the Chrome dinosaur endless runner game (scroll down to see a demo of this theme at the bottom of the page!)
- Campfire Flagship, a creative theme inspired by the art and branding used by Hackclub for its Campfire event series
- Go Go! Pogo Cat, a theme inspired by the endless runner game of the same name by the Japanese indie game studio PONOS
Contributions are welcome - please feel free to add new rhythm mechanics, design sprites, or fix bugs. And of course, open as many issues or pull requests as you like. Every contribution is helpful in its own way.
Due to how unorganised the Python programming language itself is, a lot of the codebase is unorganised too! Therefore, a lot of the codebase may not make a lot of sense as a lot of information about the way it works is stored in my head and not written down. Please be patient while I write documentation comments and refactor code so it makes more sense to the lay person. (this problem would not exist if the game was written in an Actually Good programming language like C#...)
If you're a member of Hackclub, hello! Enjoy playing my game :)
CampfireSandwich/
│
├── art/ # Album art from songs
├── fonts/ # Fonts used in game
├── music/ # Song files used in the rhythm game, in OGG format
├── sfx/ # Sound effects used by the game
├── sprites/ # Game UI elements and spritesheets
├── src/ # Game source code
└── README.md
The Campfire Sandwich game is programmed in Python (CPython) and uses Pygame as its game engine. A rewrite in IronPython (Python on .NET) was originally planned but would be impossible due to the design of the Pygame framework and its heavy reliance on C extensions.
The game's architecture follows an MVVM-like design pattern, with user controls, views and models mostly separated. This MVVM practice also applies to the game's theming system, which requires that every theme be in the same format and means that there is no need to change any line of code to introduce a new theme.
Campfire Sandwich uses a custom written UI library that I have spent a long time working on.
Most of the controls from Campfire Sandwich's built-in UI library can be found in ui.py.
These controls include:
-
Button: a flexible button control
-
ToggleSwitch: a toggle control that allows switching between "YES" and "NO" enumeration state
-
Slider: a slider control that allows choosing a value within a selected range
-
TextInput: a dynamic text input control with full Unicode integration
-
TileLayout: a horizontally stacked layout (used in the settings screen) that allows encapsulating controls
-
ParallaxLayout: an image view that overlays multiple images on top of eachother and applies a parallax scrolling effect -
Panel: a smart content dialogue, used to present the pause and game-over overlays, as well as the settings screen -
ScrollViewer: a content container (built-in toTileLayout) that allows scrolling and navigation by both mouse and keyboard
These controls are custom written for this game, but are detached from the actual game UI and can be reused in any pygame project. Every UI control accepts input from both the pointer and the keyboard.
This project is free, open source software licensed under the MIT License.
Please contact @Lamparter on Slack if you have legal questions.
Note
The source code contains copyrighted material that has been modified. This copyrighted material is intended for personal use only.
Screen.Recording.2026-03-07.193541.mp4
Made with <3 by teenagers, for teenagers. Learn more about Hackclub.