[ Home ] [ Publications ] [ Resume ] [ Family ] [ Projects ] [ The Others ] [ Sitemap ]
The Dean of Science asked if I could make something fun for visitors to play with at Payap University's 35th Anniversary celebrations. I had been wanting to make some controllers to play the 1994 arcade game Puzzle Bobble (also known as Bust-a-Move) that worked like the coffee-grinder/pedestal winches that racing yachts use for controlling their sails (see the image below) - so this was the perfect opportunity.
In Puzzle Bobble the two monsters from 1986's Bubble Bobble game return to operate a steampunk-esque bubble shooting machine (see the images below or play it online). One monster rotates a wheel to aim the bubbles which are loaded and launched by the other monster. If three or more bubbles of the same colour touch then they burst and disappear. The aim of the game is to clear the screen of bubbles.
While the original arcade game used the joystick to aim the bubbles, with these controllers the monster rotates the wheel in response to you turning the cranks. It makes the game a lot more physical and it's a lot of fun - especially playing against someone else.
The controller physically consists of the crank handle that you rotate, a base or pedestal to hold the crank, and a stripped down optical mouse which detects rotation by watching the crank handle turn. The computer simply sees the controller as a mouse and some other software is used to convert that into the joystick input expected by the game.
Source: Latitude 38 |
|
|
Here's a video of Coffee Grinder Puzzle Bobble in action. You can read on below for more details on how the controllers were constructed and how they work.
The crank is made from 18mm (1/2") PVC pipe using 4 x elbows, and 2 x end caps, with 2 x 20mm (3/4") joiners for the hand-grips. You can cling tightly to the hand-grips and they rotate freely as the crank turns. Each hand-grip has two pieces of 20mm pipe that have been cut in half and glued in either end of the handle to reduce the amount of wobble. I also rubbed a small amount of wax inside each handle to help things turn smoothly.
The crank shaft also includes a larger diameter wheel and this is what the mouse "watches" to detect rotation. The diameter of the wheel is built up using four layers of pipe and connector sections starting with 20mm pipe, a 20mm connector, some 25mm pipe and finally a 25mm connector (see the diagrams below). This gives it the same diameter as the 25mm T-piece that holds the crank at the top of the pedestal. I made the outer section of the wheel wider than the inner layers so that I would have more flexibility in where to position the mouse that detects rotation. So the handle isn't off-center I slid this wider section back over the elbow like a cuff which you can see in the far-right image.
Here is a picture of the crank handle in place in the completed controller. I didn't glue the right elbow (on the side of the shaft without the wheel) but used a small bolt to secure the right handle so that the crank can still be removed for storage or transport.
The pedestal that supports the crankshaft raises it to a comfortable height above the table while allowing it to rotate freely. The pedestal is made from 25mm (1") pipe using 2 x T-Pieces, 3 x elbows and 2 x end caps. The elbows form a simple G-clamp to secure the controller to the table (see the side-view below). The connection at the table's edge is not glued so that it can be easily removed.
One of the problems when building things from PVC pipe is that the pieces either fit together very tightly (normally what you want but it doesn't allow any movement) or if you use different sizes of pipe together they are too loose. If you want to build something that rotates smoothly (like a crank handle!) this is a problem. I encountered this problem when I first tried to build a steering wheel for the the PVC racing cars.
The crank shaft is made from 18mm (1/2") pipe and it turns out that this size pipe fits smoothly through the center of a 20mm (3/4") T-piece. I cut the center section from two of these T-pieces and with a small amount of filing they fit nicely inside either end of a 25mm (1") T-piece. When glued in place they effectively reduce the diameter of the larger T-piece so that a piece of 18mm (1/2") pipe will rotate freely with only a small amount of "play" (see the pictures below). The picture below right shows a normal 25mm (1") T-piece on the left and a T-piece with inserts on the right.
My original thought for detecting the rotation of the crank handle was to use the encoder wheel and optical sensor from a mechanical ball mouse. The wheel would be connected to the shaft so that it rotated in unison with the handle. This should work quite well but as I started looking at mice (mouses?) I decided that it might be easier to use a mouse with a scroll-wheel and simply put the wheel in contact with the shaft. I didn't want the bulk of the whole mouse mounted near the shaft and so I started building the mouse equivalent of a stretch-limo by cutting a mouse in half and extending the wiring to the encoder wheel (see the picture below left). Unfortunately the mechanism didn't work reliably so in the end I decided to simply use an optical mouse.
I stripped down a $3 mouse by removing the button switches and wheel sensor, re-positioning the capacitors, and shaving a small section off of the circuit board (see the side-by-side before and after image of the board below) so that it fit snugly into a Clorets container (the orange plastic box in the right images).
The black line on the top of the Clorets box is an off-cut from a
cable-tie. The box is hot-melt glued under the pedestal and held in
place with another cable-tie. The off-cut glued on top of the box
ensures that there is a small amount of separation between the box and
the wheel on the crank shaft. Some masking tape on the wheel
increases its visibility to the mouse.
Mouse to Joystick Conversion
The original Puzzle Bobble arcade game (running in MAME - the Multiple Arcade Machine Emulator) expects joystick input so I needed to find a way to turn the output from the mouse into joystick movements and button clicks. PPJoy (Parallel Port Joystick) is a virtual joystick driver that includes a mouse to joystick option that would work for a single controller but I wanted to support two controllers so people could play against each other.
Carl Kenner's GlovePIE is an extremely flexible input re-mapping tool originally designed for use with the P5 data glove. It support up to eight mice connected to a single computer and in conjunction with PPJoy it can be used to remap input from multiple mice to multiple virtual joysticks (GlovePIE also has Nintendo Wii-mote support so this is a common solution for people wanting to use Wii-motes to play games on PCs). The image below illustrates the conversion of mouse output from the coffee grinder controller to virtual joystick input for MAME:
GlovePIE uses a scripting language and the following script maps
the rotation of a single Puzzle Bobble controller (really just the
left and right mouse movement) to the X-axis of a PPJoy virtual
joystick. It is based on the "MouseParty.PIE" script distributed with
GlovePIE and assumes that the computer already has a mouse
attached:
You can download an expanded version of this script for two controllers here: MouseJoystick.PIE
GlovePIE also has some command-line options (to see these try running GlovePIE from a command prompt using 'glovepie /?'). I wrote a batch file called 'startgame.bat' to start Puzzle Bobble in MAME and this can be called by GlovePIE along with the 'MouseJoystick.PIE' script like this:
glovepie -MouseJoystick.PIE "/r:startgame.bat"
You can then put this line in a desktop shortcut so all you have to do is click the shortcut to launch the game with the appropriate input remapping for the controllers.
For the "shoot" buttons I mounted microswitch arcade buttons in the base of a slightly larger version of the plastic containers I used for my multiplayer Guitar Hero project. Two wires are patched into the left button of the mouse (the white and pink wires coming out the side of the Cloret's container in the picture above) that run through the pedestal to a connector mounted on one of the PVC end-caps. I originally used RCA connectors but then decided that speaker terminal connectors would give me a little more flexibility - if there was a problem with the button wiring I could simply strip the wires without needing to re-solder a new plug.
Puzzle Bobble is a great game but it's even more fun to play against someone else while using a large rotating controller! You could also use these controllers to play other games with similar gameplay mechanics like Snood or Zuma (my wife's a big fan). It would also be fun to try some other arcade games like Tempest (although you would need a second button or someone else on superzapper) or Hyper-Olympics (also known as "Track & Field" in North America). I am also thinking of building a steampunk-esque controller with many gears akin to the machine in the game - but that will have to be a project for another time.
You may also be interested in reading about my hipster game controller that uses an actual coffe grinder to play Puzzle Bobble, more things you can do with PVC pipe or, some of my other projects: