A Bust-A-Move / Bubble Bobble clone written in Turing (Open Turing), created as a school project at Turing in June 2007.
Authors: David Shi & Jason Hwang
Date: June 13, 2007
Language: Open Turing (.t)
Bust-A-Move Bust! is a faithful imitation of the classic arcade game Bubble Bobble / Bust-A-Move. Most graphics are sourced from the original game. Core gameplay is preserved, with some additional features including background music, a lives system, and no score tracking.
The goal is to clear all bubbles from the board by shooting bubbles from a cannon at the bottom of the screen. Matching 3 or more connected bubbles of the same color causes them to pop. Any bubbles left floating with no connection to the ceiling also fall off. Clear all 12 levels to win.
| Input | Action |
|---|---|
Left Arrow |
Rotate cannon left |
Right Arrow |
Rotate cannon right |
Space |
Fire bubble |
| Click / tap above the cannon | Aim at that point and fire (browser port) |
The browser port also supports touch input, so it plays on phones and tablets as well as desktop.
- Shoot colored bubbles from the cannon at the bottom of the screen.
- When 3 or more bubbles of the same color are connected, they pop.
- Bubbles that become disconnected from the ceiling also disappear.
- If any bubble reaches row 12 (the bottom), you lose a life.
- You have 3 lives. Losing all 3 ends the game.
- Clear all bubbles to advance to the next level.
- There are 12 levels total. Completing all of them shows the win screen.
| ID | Color |
|---|---|
| 1 | Blue |
| 2 | Green |
| 3 | Grey |
| 4 | Orange |
| 5 | Purple |
| 6 | Yellow |
| 7 | Red |
| 8 | White |
The game is a single-file Turing program (Bust-A-Move Bust!.t) structured as a sequence of procedures and a main game loop.
Key procedures:
gameLevel— Clears the board and populates it with the bubble layout for the current level. Also switches the background image and background music.gameOver— Checks if bubbles have reached row 12 and either deducts a life (restarting the level) or shows the game over screen.drawScene— Renders the background, bubble grid, cannon, next-bubble preview, and lives HUD every frame.trackInput— Reads keyboard input to rotate the cannon angle or fire.vectorToXY— Converts the cannon angle to a velocity vector using trigonometry (cosd/sind).bubbleSnap— After a bubble stops, snaps it to the nearest empty grid slot usingMath.Distance.colourCountCheck— Recursive procedure that walks connected same-color neighbors and counts them.colourCheck— Recursive procedure that clears the group oncecolourCount >= 3.ballDrop— Scans the grid and removes any bubbles not supported by the row above.newLevel— Counts remaining bubbles; advances to the next level when the board is clear.
The playing field is an 8×12 hexagonal grid. Odd rows hold up to 8 bubbles; even rows hold up to 7 (offset by half a bubble width for the staggered hex layout).
Uses Turing's offscreenonly mode with View.Update at the end of each frame for smooth double-buffered animation.
Each level plays a different MP3 track using Music.PlayFileLoop:
| Levels | Track |
|---|---|
| 1, 5, 9 | The Postal Service - Such Great Heights |
| 2, 6, 10 | Röyksopp - Remind Me |
| 3, 7, 11 | Hellogoodbye - Here (In Your Arms) |
| 4, 8, 12 | Sandstorm (Techno) |
| Win screen | Hot Hot Heat - Talk to Me, Dance With Me |
| Game over | Plain White T's |
Assets are organised into subfolders:
turing_assets/ — Graphics (BMP):
back, bluebubble, gameover, gameover2, greenbubble, greybubble, gun, instructions, levelbackground (×4), life1/2/3, mainTitle, man, next, orangebubble, play, purplebubble, redbubble, shooter, what, whitebubble, yellowbubble
music/ — Tracks (MP3):
7 tracks (see table above).
turing/ — Original source:
Bust-A-Move Bust!.t — Turing source file.
Bust-A-Move Bust!.exe — pre-compiled Windows executable for running without the Turing IDE.
https://bust-a-move.onrender.com
A full browser port lives in web/ (plain ES modules — no build step or framework). It requires a local HTTP server, since ES modules don't load over file://.
npm run serve # = npx serve .
Then open http://localhost:3000/web/ in your browser.
Serve from the project root (
.), notweb/— the assets (BMP/MP3) live in the root and are referenced via../fromweb/src/assets.js.
The live deployment at https://bust-a-move.onrender.com is hosted on Render as a static site.
To redeploy or fork your own instance:
- Push this repo to GitHub.
- Go to render.com → New → Blueprint and connect the repo.
- Render picks up
render.yamlautomatically and creates a static site. - The root
index.htmlredirects visitors to/web/where the game lives.
BMP and MP3 assets are served from the project root and referenced via
../fromweb/src/assets.js.
- Install Open Turing.
- Open
turing/Bust-A-Move Bust!.tin the IDE. - Press F2 (or Run → Run) to start.
Note: The pre-compiled
Bust-A-Move Bust!.exeis outdated following the project reorganisation and the Open Turing installer is no longer available for download. The recommended way to play is the browser version.
The browser port is vanilla ES modules under web/src/ — no bundler, no dependencies.
| Area | Module(s) |
|---|---|
| Entry / game loop / scene routing | main.js |
| Scenes | scenes/intro.js, scenes/game.js, scenes/gameover.js |
| Pure game logic | game/grid.js, game/bubble.js, game/colourCheck.js, game/ballDrop.js, game/levels.js |
| Rendering / assets / input / audio | game/renderer.js, assets.js, input.js, audio.js |
| Command | Description |
|---|---|
npm run serve |
Serve the site locally (npx serve .) |
npm test |
Run the unit test suite (node --test) |
npm run convert-assets |
Regenerate transparent PNG sprites from the source BMPs |
The pure game-logic modules (grid math, colour-match popping, disconnected-bubble dropping, bubble physics, level data) are covered by unit tests in test/, using Node's built-in test runner — no dependencies to install:
npm test
web/assets/*.png are transparent versions of the source turing_assets/*.bmp sprites, generated by convert-assets.js (pure Node.js, no npm install). The PNGs are committed, so you only need to re-run conversion if the source BMPs change.
School project — no explicit license. Graphics and music are from their respective original owners.

