Sunday, March 02, 2008

How to use the Wii Guitar Hero III guitar on Guitar Hero III for the PC

Right! I'm going to explain to you how to get the Les Paul from Guitar Hero III: Legends of Rock for the Nintendo Wii to work with Guitar Hero III: Legends of Rock for the PC. I took a lot of this from the Wiihacks post on using your Wiimote as a mouse in Windows so if something isn't clear enough, go read that first.


*UPDATE* March 6: the GlovePIE script is now DONE. I just added the correct keybinding to the + key (Backspace instead of Escape) and changed the whammy code to use the mouse for whammying. It's not as smooth as I'd like, but it's the best you can get.
*UPDATE* March 5: updated the script to be three times shorter, and added support for Star Power activation by tilting the guitar. The Wiimote will also rumble for a second when you do this, somewhat like it does in GH3 for the Wii. Yay!


Why?

Because GH3 for the PC has better graphics and STEREO SOUND, and I wanted to see if it could be done. These guys got most of it working and I've had some tips from them. You've all seen the videos of people using the Wiimote as a mouse, and some of you probably have seen some of Johnny Chung Lee's videos where he uses the Wiimote as cheap implementations of head tracking solutions and multi-touch whiteboard screens.
I got the whole thing working in about an hour, on Windows XP. The GlovePIE script (which is completely my own) took about three days work off and on.


What do I need?

You're going to need the following things:

  • A Nintendo Wii controller and a Wii Les Paul guitar controller, obviously.

  • Guitar Hero III: Legends of Rock for the PC

  • A bluetooth adapter or USB dongle - If your computer doesn't already have one (look in the Device Manager to check this), you can get a cheap one that plugs into your USB port from eBay. I got one for $1 and it works fine.

  • BlueTooth drivers - If your computer doesn't have them already (Windows Vista should) and the above bluetooth adapter/dongle didn't have a driver CD included, get the free BlueSoleil drivers.

  • GlovePIE 0.30 or newer - this interprets the signals from the Wiimote and can map them to key presses. Version 0.30 added support for the Wii guitar.

  • A bit of persistence to get the GlovePIE script to work right :-)

Connect the Wiimote to your PC via Bluetooth

This should be the easiest part. Plug the Bluetooth dongle in if you have one, then install the BlueSoleil drivers. The Microsoft Bluetooth stack will NOT work, unless have a Bluetooth device that is in the list of compatible devices on the WiiBrew wiki.


Once the Bluetooth part is setup, put the Wiimote in discovery mode by pressing 1+2, then let your Bluetooth device on the PC discover it. It should find something like Nintendo RVL-CNT-01, which offers a Human Interface Device (HDI) service. If the Wiimote LEDs stop flashing, press them again until your PC finds the Wiimote and the service. When that's done, connect to the HID service.


Setup GlovePIE to use the Wiimote

Now that the Wiimote is connected to your PC, open up GlovePIE. Go to File > Open and open the script called TestWiimote.PIE in the OldScripts folder. Now click RUN and wave around your Wiimote. There should be numbers changing in the debug window in response to your waving. If they don't change, either your Wiimote is not connected properly, or your Bluetooth stack is incompatible with the Wiimote.


If you got GlovePIE working, you can try this mouse script from the Wii Hacks blog and fiddle around with it. Tilting your Wiimote should control the mouse cursor, and it should make the Wiimote vibrate when you hit the screen. A and B control the mouse buttons.


Setup GlovePIE to use the Wii guitar controller

Now for the hard part. You'll need a custom script to interpret the signals from the Wii guitar and map them to keys on your keyboard. The script I wrote to do this is below, you can copy and paste it into GlovePIE (don't forget to save it) and change it to your liking.



Key.Ctrl = False
Key.LeftShift = False
Key.LeftAlt = False
Key.RightAlt = False

debug = 'whammy=' + wiimote.Guitar.WhammyBar + ', pitch=' + RemoveUnits(Wiimote.Pitch)

//change these to your liking (use debug info)
var.whammythreshold = 0.55
var.starpowerangle = 50

//bind frets to V-C-X-Z etc
Keyboard.V = Wiimote.Guitar.Fret1
Keyboard.C = Wiimote.Guitar.Fret2
Keyboard.X = Wiimote.Guitar.Fret3
Keyboard.Z = Wiimote.Guitar.Fret4
Keyboard.A = Wiimote.Guitar.Fret5
//make the 4 wiimote leds light up with the first 4 frets
Wiimote.Led1 = Wiimote.Guitar.Fret1
Wiimote.Led2 = Wiimote.Guitar.Fret2
Wiimote.Led3 = Wiimote.Guitar.Fret3
Wiimote.Led4 = Wiimote.Guitar.Fret4
//other mappings
Keyboard.Space = Wiimote.Guitar.Minus
Keyboard.W = Wiimote.Guitar.StrumDown
Keyboard.E = Wiimote.Guitar.StrumUp
Keyboard.Backspace = Wiimote.Guitar.Plus

//make whammy when whammy is pushed
If Wiimote.Guitar.WhammyBar > var.whammythreshold
   Mouse.x = Wiimote.Guitar.WhammyBar
EndIf
//push star power button when guitar is tilted
If RemoveUnits(Wiimote.Pitch) > var.starpowerangle
   Key.Space = True
   Wiimote.Rumble = True
   Wait 1000 ms
   Key.Space = False
   Wiimote.Rumble = False
EndIf

A few things to note on this script:

It maps most of the Wii guitar controls to the default mappings of GH3 for the PC. E.g. the frets G-R-Y-B-O are mapped to V, C, X, Z and A. Look around in the script, it's really easy to do.


To configure the whammy, run the script and look at the debug value for the whammy bar. My guitar gave a value of 0.55 for the whammy bar in rest, so you'll only want GlovePIE to send it to GH3 when a value greater than 0.55 is registered (or it'll be constantly whammying). Change the line 'var.whammythreshold = ...' so that it has the value there that your whammy bar sends while in rest.


If you tilt the guitar higher than 50 degrees, Star Power is activated. If you like it better when it's at 30 degrees, or 90 degrees, change the var.starpowerangle value. Use the debug value to find your best angle.


Whichever mappings you use in the script doesn't really matter, as long as you configure GH3 for the PC to use the same mappings. So if you have the script setup to send 'Q' when you press the orange fret, setup GH3 for PC so that the 'Q' presses the orange fret.


Other stuff you can do


Besides accomplishing this great feat, you can:

  • Plug your bigass flatscreen into the PC, set it as the primary screen and rock out in an even higher resolution!

  • Add new songs to GH3! This is possible in the PC version only (at least with minimal effort). See this thread on the ScoreHero forums. I've already added a few songs, and it turns out to work best when you have FretsOnFire songs to be imported - those already have separate channels for song/rhythm/guitar sounds, though it is also possible with normal mp3 files.

That's it!

Using this setup, I got my Wii guitar working great with GH3 for the PC. You might not be able to get the same scores since the Bluetooth connection sometimes seems to drop things or lag a bit, but it's great for getting that extra graphics quality boost that you won't get on the Wii. :-) Have fun!

24 comments:

Dave said...

Great tutorial - I got everything set up and working well.

I was wondering if it was possible to use two wiimotes (and guitars) so that I could play multiplayer.

I was looking at the GlovePIE script but the controller just appears to be defined as Wiimote so I'm not sure if it is even possible to have different mappings for each of the wiimotes.

Any help would be appreciated :)

Buitrako said...

Awesome.

I've been looking for this, and here it is!

Great job, man. Thank you.

HI said...

Nice job but im having a problem. None of my frets or strum bar work but the led lights up when u push the fret.

Keef said...

Dave - you can call the second wiimote with:

F1=wiimote2.classic.a

Or set which ever keyboard shortcut you want from the first half of the arguement.

I play Frets on Fire with the Wiiguitar, and here's the script I use, that's been half inched from another website:


// 2-Player WiiGuitar script for FoF
// Created by Mario Valenzuela
// Adapted from Marc-Andre Larouche's ZNES script
// Thanks to jlaudio7 for the key mapping
// Feel free to modify this script to use the WiiGuitar for another purpose

// Player 1 settings

// WiiGuitar button mapping
// Strumming
Enter = Wiimote1.Classic.Down
RightShift = Wiimote1.Classic.Up

// Frets
F1 = Wiimote1.Classic.a
F2 = Wiimote1.Classic.b
F3 = Wiimote1.Classic.x
F4 = Wiimote1.Classic.y
F5 = Wiimote1.Classic.ZL

// Face buttons
// Switch if you want the other button to be cancel
//Escape = Wiimote1.Classic.Plus
Escape = Wiimote1.Classic.Minus

// Whammy bar
// Only shows % depressed in the debug window
var.rAnalog1 = Wiimote1.Classic.R * 100

// These don't map to anything on the WiiGuitar
// = Wiimote1.Classic.Left
// = Wiimote1.Classic.Right
// = Wiimote1.Classic.Home
// = Wiimote1.Classic.ZR
// = Wiimote1.Classic.L
// Right analog stick

// Analog stick for movement in FoF
Left = Wiimote1.Classic.Joy1X <= -25%
Right = Wiimote1.Classic.Joy1X >= 25%
Up = Wiimote1.Classic.Joy1Y <= -25%
Down = Wiimote1.Classic.Joy1Y >= 25%

// Wiimote button mapping
// Glovepie uses
Shift+P+I+E = Wiimote1.Home

// Unused Wiimote buttons, if you want to map anything to them
// = Wiimote1.Down
// = Wiimote1.Left
// = Wiimote1.Right
// = Wiimote1.Up
// = Wiimote1.A
// = Wiimote1.B
// = Wiimote1.Plus
// = Wiimote1.Minus
// = Wiimote1.One
// = Wiimote1.Two

// LEDs
Wiimote1.LED1 = true;
Wiimote1.LED2 = false;
Wiimote1.LED3 = false;
Wiimote1.LED4 = false;

// Player 2 settings

// WiiGuitar button mapping
// Strumming
//PageDown = Wiimote2.Classic.Down
//PageUp = Wiimote2.Classic.Up

// Frets
//F8 = Wiimote2.Classic.a
//F9 = Wiimote2.Classic.b
//F10 = Wiimote2.Classic.x
//F11 = Wiimote2.Classic.y
//F12 = Wiimote2.Classic.ZL

// Face buttons
// Switch if you want the other button to be cancel
//F7 = Wiimote2.Classic.Plus
//F7 = Wiimote2.Classic.Minus

// Whammy bar
// Only shows % depressed in the debug window
//var.rAnalog2 = Wiimote2.Classic.R * 100

// These don't map to anything on the WiiGuitar
// = Wiimote2.Classic.Left
// = Wiimote2.Classic.Right
// = Wiimote2.Classic.Home
// = Wiimote2.Classic.ZR
// = Wiimote2.Classic.L
// Right analog stick

// Analog stick for movement
//Left = Wiimote2.Classic.Joy1X <= -25%
//Right = Wiimote2.Classic.Joy1X >= 25%
//Up = Wiimote2.Classic.Joy1Y <= -25%
//Down = Wiimote2.Classic.Joy1Y >= 25%

// Wiimote button mapping
// Glovepie uses
//Shift+P+I+E = Wiimote2.Home

// Unused Wiimote buttons, if you want to map anything to them
// = Wiimote2.Down
// = Wiimote2.Left
// = Wiimote2.Right
// = Wiimote2.Up
// = Wiimote2.A
// = Wiimote2.B
// = Wiimote2.Plus
// = Wiimote2.Minus
// = Wiimote2.One
// = Wiimote2.Two

// LEDs
//Wiimote2.LED1 = false;
//Wiimote2.LED2 = true;
//Wiimote2.LED3 = false;
//Wiimote2.LED4 = false;

Debug = var.rAnalog1 + " " + var.rAnalog2

// Possible additions
// Accelerometer for activating star power if FoF adds the feature
// Rumble for star power if FoF adds the feature
// Rumble and sound for missed note
// Whammy bar information going to outside program



All the //'s are commented out lines - I don't have two guitars, so just disabled player two for now. But hopefully, you can see another way of approaching this. Obviously, the guitar actually maps a series of buttons that already exist on the wii controller (a, b, z, etc), and this script just happens to play on that fact - I'm going to have a go at modding the main script here to run with FoF, as I like the idea of calling the buttons by their fret names.

Thanks for the info, hope my info was useful too.

K

Joe said...

Hi, Thanks for the tutorial, but I cannot get my wiimote connected to the pc! I am using a logitech MX bluetooth thing, and it will find it, but evretime I try and connect with it it asks me for a passcode =/ any ieda what it might be?

macgyver said...

Since the GHIII game is recognizing only the keyboard/mouse as an input device, i can't seem to trick it into thinking i have 2 controllers.

Any ideas on how i can use glovePIE to map one wiimote to the keyboard, and another to, say, an emulated xbox360 guitar controller???

thx

Nyceane said...

thanks, I am gona go try it out

Grupo 14 said...

yo can also use the stick to manage the direction arrows using this code

Key.Right = Wiimote1.Classic.Joy1X > 0.2
Key.Left = Wiimote1.Classic.Joy1X < -0.2
Key.Up = Wiimote1.Classic.Joy1Y > 0.2
Key.Down = Wiimote1.Classic.Joy1Y < -0.2

Shadow77 said...

WOW dude this was an awesome tutorial!!! And Great job for the script! Can we use it for the guitar that comes with the guitar hero world tour? Or if not is it possible to mod the script somehow to make it work? Because one of my friends only has the World tour guitar (for wii) and he is dying to do this. Cheers ^_^

frag said...

@Shadow77
I hope so, i'll try today and post if it was succesful

Shadow77 said...

I just got my GHWT for wii today and i went to test this out with the new guitar! Unfortunately they have taken down the glovepie 0.30 version so i can't test it :( If anybody has a mirror... ;)

Shadow77 said...

OK jist found a mirror... It doesn't work unfortunately... :( We can only wait for a new version of glovepie wich will support the GHWT guitar. And don't forget... Merry Christmas!!!

frag said...

@Shadow77

I downloaded glovepie 0.3 before they took down it... i just got GH:WT for christmas, si today i tested it with GP 0.3 and it won't work... it only support les paul for GH3 :(
so we must wait for glove pie 0.31 or something, im using 0.29, because it work better with wiimonte scripts
Marry christmas too

Syclone0044 said...

GHWT (World Tour) Guitar scripts available here:

http://www.wiili.org/index.php/GlovePIE:Frets_On_Fire

Alexander said...

unfortunatly i,ve got a lot of errors,,

6 invalid wiimote value
13 incalid wiimote value
15 ''''''''
17 ''''''''
19 ''''''
21'''''''
24''''''''
26 ''''''
30 '''''''
31 ''''''

Carlos said...

I need help, it didn't work for me, i'm having some sort of problem:

*the wiimote KIND OF works, but with the guitar it doesn't.
It gives the following errors:

12:Invalid Wiimote Value
18:Invalid Wiimote Value
20:Invalid Wiimote Value
22:Invalid Wiimote Value
30:Invalid Wiimote Value
32:Invalid Wiimote Value
36:Invalid Wiimote Value
37:Invalid Wiimote Value



-During the TestWiimote.PIE script, when I run the test the wiimote does turn on,
and I can get it to vibrate, but the numbers in the debug box
DON'T CHANGE with movement.



I'd really appreciate ANY help.

Hector said...

So GH World Tour guitar doesnt work with 0.30 or any version? Its the only one i have and dont wanna have to go buy a Les Paul guitar.

Denis said...

hi.. I have a nyko wii guitar (frontman guitar) and its not working too. Wiimote is working perfectly but none of the buttons from guitar are working.

Can I do something about it?

Popo said...

Can someone help me?

Im getting this error when the bluetooth wiimote controller is installed then running the game http://i16.photobucket.com/albums/b45/popodc/Others/ghwterror.png

rocklover2009 said...

Wow.. This worked perfectly! Thank you so much =)

But I got a weird problem and I hope I can get some help with it. When I connected my Wiimote to the bluetooth for the first time and ran the TestWiimote.PIE it worked and I could play GH3. But when I connected it later the same day it wouldn't work. So I ran the test again and noticed that the pitch and roll(debug window)didnt change at all.. Any way to make it work again?

darkside44 said...

ok im having a error here... its giving me red lines for my frets. the guitar vibrates when it is tilted vertical. the adaptor is a IOGEAR Bluetooth USB 2.1 Micro Adapter GBU421 and it works with the bluetooth fix on. I cant play it with GH3... and i havent tried with FOF. but it seems as if its having an issue with the frets. I am useing the gibson wireless adapter for the Wii.

Kyle said...

As another commenter said, on the TestWiimote script I can make the Wiimote rumble, but when I move it, the debug menu numbers don't change.

Any fixes?

BroZac said...

does this only work for the Les Paul guitar? cuz my gh5 guitar aint working with it :/

BroZac said...
This comment has been removed by the author.