Sunday, September 19, 2010

Guide: Connecting Wii Arcade Fightstick to PC

This guide will show you how to connect your Wii Fightstick or Arcade stick to your computer. We'll do so by connecting the Wii to the PC via Bluetooth. This should work with almost any Wii Fightstick (Tatsunoko vs. Capcom (TvC), HORI confirmed).

Things you'll need:

Bluetooth dongle/adapter
Wii Controller
Wii FightStick (Hori, TvC, etc)
BlueSoleil (EMBRACE Google's capability...)
GlovePIE (w/PPJoy)
This GlovePIE script

Pairing the Wii Controller to PC

1) Download and install BlueSoleil.
2) Right click the Bluetooth icon in the system tray and select 'Display Classic View'

3) Connect the Fightstick to the Wii controller

4) Press the 1 and 2 buttons on the Wii controller simultaneously. The 4 LEDs will flash.
5) While the LEDs are flashing, click the orange sun-looking button in BlueSoleil to search for devices. It should find the Wii remote.

6) Once the device is discovered, double click the device icon in BlueSoleil, then right click it and select "Connect Bluetooth HID." (make sure the lights on the Wii remote are still flashing; if not, just hit 1+2 again.
NOTE: You may get a prompt to install drivers, just hit "Continue Anyway' if you get a prompt.

The device is now paired and connected. Now we have to make its input recognizable.

Putting It All Together

1) Run GlovePIE and open the script you downloaded earlier (here -- also found at the bottom of this post in text)
2) Go to CP-Settings and select PPJoy in GlovePIE
3) Click the Add button
4) Select 'Virtual Port' in the Parallel Port field and make sure the controller number is set to 'Controller 1'
5) Click the Mapping... button and click through until you get these prompts.

NOTE: Change these to your liking. Simply look at the bottom of the script to see which variables correspond to each button (a, b, x, y, L, etc).

6) Finish, click done.
7) Click the 'Run' button in GlovePIE.
8. Success.

What we did there was set up a virtual interface for the joystick -- a IOCTL-based Win32 joystick interface to be precise. This interface allows PPJoy to represent a virtual joystick interface. A Win32 application provides joystick input to PPJoy via IOCTL calls. PPJoy will feed this input into DirectInput as a joystick; Win32 applications will think the input comes from a real joystick. We mapped the buttons on the Fightstick to work with the GlovePIE script. The script was originally for the Classic Wiimote controller, but it works for this, as well. I found that with the TvC stick, using the DPad (PPJoy1.Digital0-3 in the script) works best. When I mapped Analog, it caused some problems in certain applications. I troubleshot this problem by going into Control Panel > Game Controllers > Properties and looking to see what input the fightstick was sending. Mapping analog, I found that the stick had a default origin of either Up-Right, Up-Left, Down-Right, or Down-Left. Not middle. Mapping digital values fixed the problem.

See here for more info on PPJoy Mapping:

Credits to Phil at for providing the GlovePIE script and the initial idea.

// Receiving Updates
var.dummy = Wiimote.RawForceX
if Wiimote.Classic.a then var.A = "A" else var.A = ""
if Wiimote.Classic.b then var.B = "B" else var.B = ""
if Wiimote.Classic.x then var.X = "X" else var.X = ""
if Wiimote.Classic.y then var.Y = "Y" else var.Y = ""
if Wiimote.Classic.Minus then var.Minus = "-" else var.Minus = ""
if Wiimote.Classic.Home then var.Home = "H" else var.Home = ""
if Wiimote.Classic.Plus then var.Plus = "+" else var.Plus = ""
if Wiimote.Classic.Up then var.DPadY = "Up" elseif Wiimote.Classic.Down then var.DPadY = "Down" else var.DPadY = ""
if Wiimote.Classic.Left then var.DPadX = "Left" elseif Wiimote.Classic.Right then var.DPadX = "Right" else var.DPadX = ""
if Wiimote.Classic.LFull then var.LF = " (fully depressed)" else var.LF = ""
if Wiimote.Classic.RFull then var.RF = " (fully depressed)" else var.RF = ""
if Wiimote.Classic.ZL then var.LZ = "pressed" else var.LZ = "not pressed"
if Wiimote.Classic.ZR then var.RZ = "pressed" else var.RZ = "not pressed"
debug = "Buttons: "+var.A+var.B+var.X+var.Y+var.Minus+var. Home+var.Plus+"; D-Pad: "+var.DPadY+var.DPadX+"; L:"+Wiimote.Classic.L+var.LF+", ZL: "+var.LZ+", R:"+Wiimote.Classic.R+var.RF+", ZR: "+var.RZ+"; Left Joystick: X = "+Wiimote.Classic.RawJoy1X+", Y = "+Wiimote.Classic.RawJoy1Y+", Right Joystick: X = "+Wiimote.Classic.RawJoy2X+", Y = "+Wiimote.Classic.RawJoy2Y
6 Axes (no, not the PS3 controller)
1: X - Analog 0
2: Y - Analog 1
3: Z - Analog 4
4: Z Rotation - Analog 3
5: Slider - Analog 2
6: Throttle - Analog 5
1 POV Hat:
North: Digital 0
West: Digital 1
East: Digital 2
South: Digital 3
11 Buttons:
Digital 4 - Digital 14

PPJoy1.Analog0 = Wiimote.Classic.RawJoy1X
PPJoy1.Analog1 = Wiimote.Classic.RawJoy1Y
PPJoy1.Analog3 = Wiimote.Classic.RawJoy2X
PPJoy1.Analog4 = Wiimote.Classic.RawJoy2Y
PPJoy1.Analog2 = Wiimote.Classic.L
PPJoy1.Analog5 = Wiimote.Classic.R
PPJoy1.Digital0 = Wiimote.Classic.Up
PPJoy1.Digital1 = Wiimote.Classic.Left
PPJoy1.Digital2 = Wiimote.Classic.Right
PPJoy1.Digital3 = Wiimote.Classic.Down
PPJoy1.Digital4 = Wiimote.Classic.y
PPJoy1.Digital5 = Wiimote.Classic.x
PPJoy1.Digital6 = Wiimote.Classic.b
PPJoy1.Digital7 = Wiimote.Classic.a
PPJoy1.Digital8 = Wiimote.Classic.LFull
PPJoy1.Digital9 = Wiimote.Classic.RFull
PPJoy1.Digital10 = Wiimote.Classic.ZL
PPJoy1.Digital11 = Wiimote.Classic.ZR
PPJoy1.Digital12 = Wiimote.Classic.Minus
PPJoy1.Digital13 = Wiimote.Classic.Plus
PPJoy1.Digital14 = Wiimote.Classic.Home

No comments:

Post a Comment