Intro: Interfaces for Games: PunchOut
This is how to turn Mike Tyson's Punch Out into a full-body workout with real feedback.
(how to make reliable, rugged, touch sensors)
(how to hack a game controller)
(how to make blinding feedback from the game itself)
t - j - m
Step 1: Shopping List: Rugged, Clean Handgemacht Touch Sensors
A shopping list for a nice, clean way to make touch sensors.
What you need:
Wires - ours were slightly longer than 1m (to reach the floor, and to be inserted into the bag).
Cardstock (150lb, I think...).
Metallic duct tape.
Foam wrap (2-3mm thick, usually used for shipping electronics).
Sponge - Art / Craft material (1.5mm thick - found in arts and crafts stores)
Book binding tape (25-30mm wide - a special weaved material, because it's strong and clean)
+ all the general tidbits for hacking: microcontrollers (for testing), solder + iron, cutters, blades, etc...
Step 2: Conductive Pads
Run a strip of metallic tape along the width of your cardstock.
Cut the taped portion off, and then into equal size squares [ you will need 2 for each sensor ].
You should have a bunch of pads. We had 10 buttons [ up, down, left, right, a (x2), b (x2), select, start ] , so we needed 20 pads.
Step 3: Wiring the Pads
Cut your wires.
Since our interface was going to be on the floor, and in a punching bag, we made the wires approximately 1m long ( so we bought 25m of 0.5mm wire just in case).
Strip the tips of the wires on either end.
Attach one end of each wire to the pad by fastening it underneath another portion of metallic tape.
Step 4: Assembling the Pads
We use book binding tape to assemble the pads for a couple of reasons.
First, the glue is very sticky (once it sets).
Second, the tape material itself is a weaved fabric, so it is very strong.
Third, it is easy to work with and is a clean material.
Tape the top side of one pad, making sure the amount of tape being used is approximately half the width.
Place the top edge of a second pad 3mm (or the width of your foam wrap) away from the first pad, with both metallic faces upwards.
Place the foam in between the pads, fold them over and tape the opposite open edge. The construction should look like a little sandwich.
Make sure to have 3 strips of foam, one each on opposite edges, and one in the middle to push the pads apart. And, make sure there's enough space between foam pieces so that they pad will easily make contact when pressed. Cut the foam to fit the sensor when you're done.
Step 5: Wrapping the Pads - Complete Sensor
We wrapped the sensors in a sponge to make them more rugged. The sponge will take most of the brute force (remember we built them to resist punching and kicking), while staying rigid enough to not continuously compress the sensors when they aren't being pressed. This protects the main pads and helps to push back against any material, or device, within which you may want to hide the pad.
Cut a piece of sponge that is slightly larger (5-10mm) on each edge and a little more than 2x longer than the size of an individual pad.
Place the pad loosely on the sponge.
Fold the sponge over and tape the 3 open edges.
You have a complete sensor.
If you want, you can test the responsiveness of the pads with an Arduino.
The pads work quite well.
Step 6: Hack the Controller
With a game controller torn apart, solder each end of the sensor to the appropriate ground / power edges of a button. You'll see them easily because they look like forks that don't touch (i.e. one wire per fork).
Now you should have a ton of wires all over the place.
It gets messy, so the best thing to do is fold them up carefully and fasten them (electrician's tape works well).
With all the sensors connected properly you're almost ready to play.
Step 7: Pad - Button Mapping
We mentioned earlier, we need 10 pads even though we're only mapping 8 buttons.
The reason: combos.
In Punch Out, you can throw a super punch by tapping UP and A (or B) at the same time.
We tried making single units of double-stacked sensors, with 3 wires coming out, but the controller wouldn't handle the mapping.
So, we put 2 individual sensors together (taped of course) and found that they were sensitive enough to press both at the same time... and this saved the day.
2 - UP+A
2 - UP+B
1 - A
1 - B
1 - DOWN
1 - LEFT
1 - RIGHT
1 - SELECT
Select is used for your super-star punches, so we needed that one kept in. And, we didn't map UP (alone) because it wasn't need... neither was START for actual gameplay.
Step 8: Screen Cap As Feedback
Ok, so the next step is to get a spaniard to build you a cool little max patch.
The patch is designed to capture a certain portion of the screen and use its color as a trigger for real-time feedback.
Punch Out uses sprites which are always the same color, but when your character is punched during the game, its color changes to a funky pink. Because the pink is so distinct from all other colors, the MAX patch reads the pixels and sends serial information to an arduino.
When the character is hit, the arduino triggers a light.
For now we could only get an LED working, but the general idea was to have flashing strobes that temporarily mess with your vision. Should be fairly simple to implement, but we didn't have time enough during the workshop to hit the extra step.
Step 9: PLAY
Get a game emulator.
Hook your controller up to your computer.
Make sure to map the sensor pads properly (we used the mapping functions directly in the NES Emulator were using).
Get your punching bag and insert the pads.
Mika graciously found us a punching bag made of big pillows and other soft goodies.
For Punch Out:
place 5 pads in the punching bag (we did it in the following oritentation)
(top of bag)
(bottom of bag)
Place 3 pads on the ground:
Now you can use your feet to control your character's dodging, and your fists to punch.
Watch Jayme punch like a rock-em sock-em robot:
t - j - m