rotary bobble title

Puzzle Bobble, but with rotary controls

Rotary Bobble is a ROM hack for the Neo Geo game Puzzle Bobble. It replaces the joystick controls with a rotary dial. A custom controller is used to send angle values to the game as the dial turns.

I always felt this is how the game should have been made. The rotary controls are much more accurate and more fun to use.

Build the ROM

The game ROM needs to be altered with IPS patches. This will add the rotary control logic to the game.

  1. Copy from your MAME roms into a directory somewhere
  2. Download the latest release into that directory
  3. Unzip both
  4. Verify the three files below have the same sha (or skip this and just try the result and see if it works)
    d96-02.c5 69c9ea415773af94ac44c48af05d55ada222b138
    d96-03.c6 042ae50a528cea21cf07771d3915c57aa16fd5af
    d96-07.ep1 328429d11de5b327a0654ae0548da4d0025a2ae6
  5. Run an IPS patcher for the three files. If you don't have one, you can use this online one.
  6. Make sure the newly patched files have the same name as the originals
  7. Rezip all the files back up into a file

From here you can load the ROM into a flashcart like the TerraOnion NeoSD or Darksoft's Multi Cartridge, or onto something like the MiSTer. You can play the ROM in an emulator like MAME, but getting a proper controller to work in that environment is more difficult.

Build the Controller

The game needs a custom controller built with an Arduino, a potentiometer and some transistors

More to come on the controller, I'm still experimenting in this area. Here is a schematic that uses an Arduino Nano. If you are good with electronics and microcontrollers and want to help out, let me know on GitHub.

high score entry screen

Playing Tips

Difficulty select, number of player select and high score name entry are all done with rotary controls. It might take a little bit to get used to this. The high score screen's timer was increased to 99 to help a bit.

high score entry screen

You can switch to joystick controls by holding start for 1.5 seconds. It will show what you just switched to for a moment on the side of the screen. Each player can do this. Useful if you want to play a two player game but only have one rotary controller.

Indicating whether joystick or rotary is the current control scheme

At the title screen, the version of the hack is shown. Please include this version if reporting a bug. To see this on MVS, don't insert a coin during the eyecatcher and wait for the title screen.

title screen with version displayed

How it Works

The controller has a potentiometer that sends a varying voltage to the Arduino based on its position. The Arduino converts that voltage into an angle value

Potentiometer sending an angle to the Arduino

It then sends that value to the Neo Geo using the controller port. Directions left, right, up and down, plus the buttons B, C and D are used as seven bits to send the number on

Arduino sending value to Neo Geo through controller port

The game receives this input on the controller port. Which normally it wouldn't understand...

The game normally can't understand the angle value

... but the game was changed to know how to convert these bits coming from the controller port back into an angle value.

The game was changed to understand the angle value

It then tells the shooter to position itself based on this angle

Shooter positions itself based on the angle

This happens sixty times per second, resulting in smooth rotary controls

Game ready for a new angle value
Hack created by Matt Greer
Original game by Taito