jloehr / HID-Wiimote

Windows Device Driver for the Nintendo Wii Remote
GNU General Public License v3.0
215 stars 45 forks source link

Guitar Hero "Guitar" support: whammy, tilt and axis #24

Closed maxill1 closed 6 years ago

maxill1 commented 7 years ago

Hi,

I tested a Gibson Guitar Hero III controller and "whammy bar" and "tilt" are not recognized/working.

Standing to wikipedia and some other web resources both should be implemented as axis.

I don't know if "tilt" or "whammy bar" are connected to additional axis inside the guitar shell or they're just bond to one of the wiimote's internal axis rotation, but here will follow some observations that may be useful for debug purposes:

  1. X and Y axis movement seems to be bond to their respective rotation, so when i move the little joystick on the guitar, X and Y rotation move along (see images at bottom) instead of when nunchuck is plugged in, where X and Y rotation are indipendent from the nunchuck joystick and follow wiimote internal axis.
  2. Z axis and rotation a constantly on 0.
  3. Not much of an issue but... home button is not working (with guitar plugged 1, 2 and A are remapped to 11, 12 and 13 and don't replicate "green", "red" and "yellow"...so there is no much button left to use...maybe it's a feature)

joystick still image

Joystick at bottom image

Joystick at top image

Joystick at left image

Joystick at right image

jloehr commented 7 years ago

The Whammy Bar is mapped to Rotation X, though it seems to not use the full value range. The Extension Report uses 5 bits for it, whereas my driver maps it to 8 bit unsigned. I don't know if the Extension bits are signed or unsigned. Rotation Y is mapped to the analog touchbar on the neck (which is not on the GHIII Guitars). What do you mean by those two follow the Wiimotes internal axis?

Z axis and rotation is not mapped and used for the Guitar. So that is expected behavior.

By tilt do you mean pulling up the neck to activate the star power (or whatever it is called ingame)? The wiki doesn't say anything about tilt. But i would guess they are using the Wiimotes accelerometers for that. I'll put that on the list to add that feature as well.

I checked the button mapping and i figured the Guitars are featuring 14 buttons (Wiimote Core Buttons + Guitar Buttons). Moreover the driver is writing not one but two buttons (B and Home) to static/unused bits, that are therefore not working. So thanks for pointing that out :smile:

maxill1 commented 7 years ago

Whammy (WB on wiibrew data format table)

If Z axis is unused, could it be a candidate for wammy axis mapping?

Tilt/Star power (WB on wiibrew data format table)

By tilt i mean exactly pulling up to activate the star power.

Considering that we have a wiimote inside the guitar, tilt/star power could be activate by moving the guitar and triggering one of wiimote axis. Since Y rotation is mapped to TB (the analog touchbar on GHWT controller), and therefore is busy, X rotation could be a candidate.

Anyway there may be something to fix on wiimote axis mapping because with a guitar plugged in it's like wiimotes internal axes rotation replicates wiimote internal axes movement. Sorry it's hard to explain without visual so I will try with an example:

Nunchuck plugged in: if i move the analog joystick on nunchuck, X/Y movement coordinates follow my thumb (as it should be) and X/Y rotation stand still (correctly, as i'm not moving the wiimote).

Guitar plugged in: if i move up the analog joystick on guitar, X/Y movement coordinates follow my thumb (as it should be) but X/Y rotation follow too! (i think not correcly because they behave like if a moved also the wiimote, but i'm not).

In the previous post's images you can see what i mean, i every position (top, bottom, left and right) i didn't move the wiimote (inside the guitar) but X and Y rotation follow the analog joystick somehow .

Home button

B button is hidden inside the guitar shell...no chance to hit, you can spare that :smile: Glad to help

:guitar: :guitar: :guitar: :guitar:

jloehr commented 7 years ago

Ah ok. I don't have any Guitars so i can't test it out, but it seems to use another data reporting than in the wiki.

B button is hidden inside the guitar shell...no chance to hit, you can spare that

Ah good to know, then i just need to change the current mapping.

aerisarn commented 7 years ago

// return whammy bar postion: value ranges from 240 (0xF0) when the bar is at rest // to 250 (0xFA) when the bar is pressed all the way down.

source here: https://github.com/jleyrer/WiiGuitarduino/blob/master/wii_guitar_funcs.h

I have a guitar, I will try to polish the driver, right now tilt and whammy are missing. Plus, star power in music games is a discrete event, so I think it's better to map the Z raw force > threshold to an additional button instead of simply reporting the analog value, otherwise you'll have to use a mapping program to make it work with phase shift, for example.