games things soft
Достал с полки MOCUTE 039, посмотреть, как на самом деле обстоят дела с глупыми геймпадами в Windows и эмуляцией XInput.
При подключении, его тут же обнаружил Steam и замапил на него какие-то действия, но, впрочем, невпопад.
Хорошая новость (вернее, успешно забытая старость) — generic controllers Steam тоже поддерживает. Выключил Steam не время экспериментов, вернусь к нему позже.
Плохая новость — виндовый диалог, который должен показывать состояние пада (нажатые кнопки) — ничего не показывает.
Хорошая новость — есть годная программка для этого:
Pointy's Joystick Test
И ещё вот такая штука для браузера:
html5gamepad.com
Плохая новость — виндовая программка и сайт, использующий Gamepad API, показывают два разных маппинга и оба кривые. (Порядок кнопок не стандартизирован, плюс, возможны странности имплементации web gamepad api.)
Впрочем, главная цель — с XInput подружить, а это решится в процессе.
Но сперва отвлекусь и упомяну другую программку:
antimicro
Это как старый joy2key, только лучше. Хоть в данном случае не очень полезен, т.к. позволяет мапить только клавиатуру и мышь. Интересная особенность — выставленный напоказ SDL 2 Game Controller Mapping String. Вот бы ещё базу маппингов вели...
1.
Возвращаемся к теме. Самое известное решение —
x360ce.com
Посмотрел, пришёл к выводу что это оверинжиниринг поверх костылей.
В принципе, я бы не обломался его использовать — не так много игр играю, и в любом случае что-то настраивать приходится — меняются лишь инструменты. Есть дополнительные плюшки вроде грамотной настройки аналогов. Главная заморочка — в подборе хуков под каждую игру. Но глядя на имеющиеся пресеты — вариантов не так много.
Но понятно, что решение очень костыльное и недовольство объяснимо. Идём дальше.
2.
Находим
XOutput (самый активный форк на данный момент)
Он добавляет в систему виртуальный боксовый пад. Никаких хуков непосредственно к игре. Простое решение, которое должно работать везде. Возможны, правда, и свои подводные камни.
Используется драйвер-эмулятор из состава
ScpToolkit — тот же, который используется в
DS4Windows для DualShock.
Но если DS4Windows содержит, помимо прочего, фичу сокрытия физического контроллера (чтобы избежать двойного ввода в тех играх, которые могут увидеть и физический и виртуальный контроллеры), то XOutput — весьма примитивная программа. На
html5gamepad.com можно увидеть ввод с двух контроллеров одновременно.
3.
Выключаю XOutput, запускаю Steam снова.
Settings > Controller > General Controller Settings > Detected controllers > мой контроллер > Define Layout.
Всё. Теперь он должен без проблем работать везде в Стиме.
Дальше под конкретую игру кастомизируется через меню этой игры, при необходимости.
Игры не из Стима можно тоже добавлять в библиотеку (Games > Add a non-Steam game to my library...) — при запуске из Cтима они тоже получают оверлей вместе с поддержкой контроллера.
(Поддержка любых контроллеров в Steam, которая пришла вместе с фирменным Steam Controller — это незаметная революция, кмк. Очень круто, особенно если разработчики игр начнут его полностью поддерживать и выставлять actions и action sets в API.)
Подводя итоги:
* чтобы просто работало — используйте Steam.
* не хотите Steam — используйте XOutput. Но дотянуть его до уровня DS4Windows потребует много пулл-реквестов.
* не Steam, мало игр, не лень копаться в настройках — x360ce.
P.S. По древней китайской традиции, аккум в китайском геймпаде перестал держать заряд за год лежания на полке.