Расскажу свое решение, может кому пригодится.
Итак, дано:
Гитара:
PlayStation 2 Guitar Hero Wireless Kramer Striker ControllerЕе нужно приготовить так, чтобы играть в Guitar Hero на PC
(У меня Guitar Hero III и Guitar Hero: World Tour).
Тут возникло 3 проблемы:
1) Разъем у нее неформатный, пришлось купить
переходник для геймпада PS2-PS3 (позволяет воткнуть ее в USB-порт).
2) Гитара определяется не как гитарный контроллер, а как обычный геймпад
(возможно, это лечится правильным переименованием названия девайса в системе, еще не экспериментировал).
Логичное решение - использовать программу для маппинга геймпада на клавиатуру, например
JoyToKey.
3) Я не знаю, в чем дело - может, мне попался не лучший переходник PS2-PS3, но с зеленым ладом есть проблемы: если дернуть струну при зажатом зеленом ладу, компьютер считает, что лад отжали, и нажали кнопку Select (воспроизвожу ситуацию по памяти, но общий смысл такой, что обычный маппер типа JoyToKey не поможет). В общем, без танцев с бубном сыграть зеленую ноту просто невозможно.
В итоге я написал собственный скрипт для
AutoIt, который лечит проблему с зеленым ладом.
Скрипт скомпилировать в исполняемый файл, и запускать параллельно с игрой.
Если у Вас подобных проблем с ладом нет, проще использовать JoyToKey, либо выкинуть из моего скрипта специфические костыли, и обрабатывать зеленый лад по аналогии с остальными.
settimer release, 10
greenfixdelay := 4
whammy_coord := 50
; green fret
Joy8::
if (not vpressed) {
Send, {v down}
vpressed := true
}
greenfix := greenfixdelay
return
; red fret
Joy2::
Send, {c down}
cpressed := true
return
; yellow fret
Joy1::
Send, {x down}
xpressed := true
return
; blue fret
Joy3::
Send, {z down}
zpressed := true
return
; orange fret
Joy4::
Send, {Shift down}
shiftpressed := true
return
; select button
Joy9::
Send, {Enter down}
enterpressed := true
return
; start button
Joy10::
Send, {BS down}
bspressed := true
return
; tilt
Joy7::
Send {MButton down}
mbpressed := true
return
release:
; ----------------
; all about whammy
; ----------------
whammy := GetKeyState("JoyY")
;if (not whammypressed and whammy < 45) {
; send, {RAlt down}
; whammypressed := true
;}
;if (whammypressed and whammy > 45) {
; send, {RAlt up}
; whammypressed := false
;}
whammydiff := whammy - whammy_coord
if (Abs(whammydiff) > 2) {
MouseMove, whammydiff * 3, 0, 0, R
whammy_coord := whammy
}
; ---------------
; all about strum
; ---------------
povstate := GetKeyState("JoyPOV")
if (povstate = 27000)
{
povstate := 0
if (not vpressed) {
Send, {v down}
vpressed := true
}
greenfix := greenfixdelay
}
if (povstate = 9000)
{
povstate := 18000
if (not vpressed) {
Send, {v down}
vpressed := true
}
greenfix := greenfixdelay
}
if (not strumdown and povstate = 18000)
{
send, {Down down}
strumdown := true
}
if (strumdown and not povstate = 18000)
{
send, {Down up}
strumdown := false
}
if (not strumup and povstate = 0)
{
send, {Up down}
strumup := true
}
if (strumup and not povstate = 0)
{
send, {Up up}
strumup := false
}
; -------------------------------
; green fret - release with delay
; -------------------------------
if (greenfix > 0) {
greenfix := greenfix - 1
}
if (vpressed and not GetKeyState("Joy8") and greenfix <= 0)
{
send, {v up}
vpressed := false
}
; -----------------
; all other buttons
; -----------------
if (cpressed and not GetKeyState("Joy2"))
{
send, {c up}
cpressed := false
}
if (xpressed and not GetKeyState("Joy1"))
{
send, {x up}
xpressed := false
}
if (zpressed and not GetKeyState("Joy3"))
{
send, {z up}
zpressed := false
}
if (shiftpressed and not GetKeyState("Joy4"))
{
send, {Shift up}
shiftpressed := false
}
if (enterpressed and not GetKeyState("Joy9"))
{
send, {Enter up}
enterpressed := false
}
if (bspressed and not GetKeyState("Joy10"))
{
send, {BS up}
bspressed := false
}
if (mbpressed and not GetKeyState("Joy7"))
{
send, {MButton up}
mbpressed := false
}
return