Guitar Hero: Подключение гитары от PS2 к PC.

Aug 09, 2011 10:20



Расскажу свое решение, может кому пригодится.

Итак, дано:
Гитара: 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

мануал, видеоигры, guitar_hero, айтишное, я творю фигню

Previous post Next post
Up