понедельник, 30 сентября 2013 г.

Bit.trip Runner 2 и Джойстик

Есть такая замечательная игра от gaijin games - bit.trip runner 2. Это продолжение игры bit.trip.runner - где персонаж бежит, а мы должны уворачиваться от препятствий и собирать золото.






После очередного обновления мой джойстик Logitech Rumble Gamepad F510(его ещё иногда называют xbox controller) просто перестал определяться в этой игре. Во всех играх работает, а в этой - нет!
К счастью, есть стим-сообщество, где описали рецепт, как это можно вылечить. Ну, а я опишу это в своём блоге по-русски и это кому-то поможет, а для меня - лишний информационный бэкап.
Итак, поехали!
Сначала нам нужно установить драйвера xbox. Скажу сразу, что у меня xubuntu, т.е. ubuntu+xfce, поэтому все команды привожу для убунты.
В терминале пишем:

sudo apt-get install xboxdrv

и соглашаемся с установкой пакетов. после это выполняем другую команду:

sudo xboxdrv --silent --type xbox360 --device-by-id 046d:c21d --mimic-xpad --detach-kernel-driver

Если всё прошло хорошо, нам напишет

Your Xbox/Xbox360 controller should now be available as:
/dev/input/js0
/dev/input/event13

Press Ctrl-c to quit

Пока control+c ни в коем случае не нажимаем.
Теперь Открываем игру bit.trip runner 2 и наслаждаемся игрой с джойстиком :)

Когда поиграли, лучше зайти в терминал и нажать control+c. Если хотите, можно просто закрыть терминал, но тогда система сама себе выдаст некритичную ошибку.






Т.к. это линукс, тут вообще можно обойтись без терминала, можно взять одну программу, добавить её в автозагрузку и сделать ей кнопки для переключения джойстика.

А можно вообще пойти радикально и поставить qjoypad и эмулировать нажатия клавиш на клавиатуре - универсально и просто. Для каждой игры можно выставить свои настройки.

Но. Зачем так заморачиваться, если можно взять и скопировать одну строчку в терминале? :)

Лично я решил сделать простой скрипт, чтобы не копировать длинную команду, а просто написать определённый набор букв.

Это делается очень просто:

echo "sudo xboxdrv --silent --type xbox360 --device-by-id 046d:c21d --mimic-xpad --detach-kernel-driver" >x360
chmod +x x360

В дальнейшем мне будет нужно просто написать x360, у меня попросит пароль и я его введу.

Всем успехов в решении проблем. :)

8 комментариев:

  1. Это конечно вес хорошо, но вот второй джой xBox360 Wireless не в какую не хочет подключаться. Как сделать чтобы работали два и более джойстика с помощью xboxdrv?

    ОтветитьУдалить
  2. беспроводной вообще не работает или не работают два одновременно?
    если первое, то тут надо копать в сторону беспроводного подключения.
    если второе - у джойпэда наверняка другой id или что-то ещё. они ведь должны чем-то отличаться? нужно тогда команду подправлять.

    ОтветитьУдалить
  3. Ресивер определяется, джойстики по отдельности тоже подключаются, но вместе они не могут подключаться, так как драйвер почему-то подключает только одно устройство. Вот вывод:
    Controller: Microsoft Xbox 360 Wireless Controller (PC)
    Vendor/Product: 045e:0719
    USB Path: 007:003
    Wireless Port: 0
    Controller Type: Xbox360 (wireless)

    Your Xbox/Xbox360 controller should now be available as:
    /dev/input/js0
    /dev/input/event9

    Как заставить программу подключать оба джойстика одновременно я так и не нашел, даже на забугорных ресурсах. Все гамают на одном джое.

    ОтветитьУдалить
  4. ID определяется только у ресивера и поэтому он всегда неизменный. А джойстики просто подключаются к нему как устройства ввода. Команду которая подключает сразу несколько устройств я не нашел, но возможно плохо смотрел.

    ОтветитьУдалить
  5. у меня только один джой, поэтому проверить не могу, но вот что можно попробовать:
    вместо --device-by-id написать --device-by-path BUS:DEV
    правда, каждый раз устройство подключается к разному адресу.
    и каждый раз нужно будет смотреть вывод lsusb, чтобы определить по какому адресу подключились устройства.

    если не смотрели, то можете почитать, какие опции можно добавить: xboxdrv --help
    там и про wireless что-то есть.

    ОтветитьУдалить
  6. Ладно, спасибо за помщь, но ничего не получилось, ругается:
    -- [ ERROR ] ------------------------------------------------------
    bad lexical cast: source type value could not be interpreted as target

    ОтветитьУдалить
  7. Нашел ответ в help, может кому-то пригодится:

    USING MULTIPLE CONTROLLER
    If you want to use multiple wired controllers you need to start
    multiple instances of the xboxdrv driver and append the -i argument to
    select the appropriate controller like this:

    $ xboxdrv -i 1

    If you have multiple wireless controller you need to start multiple
    instances of the xboxdrv driver and append the --wid option like this:

    $ xboxdrv --wid 1

    ОтветитьУдалить
  8. У меня определяется джойстик, и все вроде бы нормально, но вот проблемы со стиками, совсем не знаю как их настроить, и работают они очень странно, правый не работает совсем, а левый работает только влево-вправо, и еще и еще при этом всем берет на себя управление правым стиком.

    ОтветитьУдалить