Skip to content

dcmshi/bust-a-move

Repository files navigation

Bust-A-Move Bust!

Bust-A-Move Bust! title

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)


About

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.


Gameplay

Controls

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.

Rules

  • 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.

Bubble Colors

ID Color
1 Blue
2 Green
3 Grey
4 Orange
5 Purple
6 Yellow
7 Red
8 White

Technical Details

Architecture

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 using Math.Distance.
  • colourCountCheck — Recursive procedure that walks connected same-color neighbors and counts them.
  • colourCheck — Recursive procedure that clears the group once colourCount >= 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.

Grid

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).

Rendering

Uses Turing's offscreenonly mode with View.Update at the end of each frame for smooth double-buffered animation.

Music

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

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.


Play Now

https://bust-a-move.onrender.com

Bust-A-Move Bust! screenshot


Running the Game

Option 1: Browser port (JavaScript)

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 (.), not web/ — the assets (BMP/MP3) live in the root and are referenced via ../ from web/src/assets.js.

Option 2: Deploy to Render

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:

  1. Push this repo to GitHub.
  2. Go to render.comNew → Blueprint and connect the repo.
  3. Render picks up render.yaml automatically and creates a static site.
  4. The root index.html redirects visitors to /web/ where the game lives.

BMP and MP3 assets are served from the project root and referenced via ../ from web/src/assets.js.

Option 3: Open Turing IDE

  1. Install Open Turing.
  2. Open turing/Bust-A-Move Bust!.t in the IDE.
  3. Press F2 (or Run → Run) to start.

Note: The pre-compiled Bust-A-Move Bust!.exe is 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.


Development

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

npm scripts

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

Tests

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

Sprites

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.


License

School project — no explicit license. Graphics and music are from their respective original owners.

About

classic video game made in Turing

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages