Что дальше?
Геймпады — устройства многоликие. Для меня было открытием, что, оказывается, есть такие, которые через провод работают по протоколу XInput, через Bluetooth — DirectInput. О таких вот проявлениях (сомнительной) изобретательности производителей игровых устройств мне рассказывают здесь и через соцсети. Это иногда забавно, но чаще печально — потому что чем мудрёней устройство, тем худший пользовательский опыт оно даёт.
Смело пишите в комментариях вопросы, спрашивайте и делитесь решениями. Только, пожалуйста, если вы просите меня помочь — будьте подробны и обязательно прочтите всю статью от начала до конца. Потому что если не прочтёте, я не смогу вам помочь, так как буду считать, что вы уже перепробовали все советы из текста.
Без подробностей может случиться недопонимание.
Заглянувший на сайт Кирилл попросил помочь, но не сообщил толком ничего. Я выяснил у него модель геймпада, поискал инструкции, посмотрел видеообзоры сего устройства и пришёл к выводу, что режимы переключаются кнопкой Mode, но XInput работает только по проводу.
Позже владелец геймпада обнаружил, что если в Диспетчере устройств отключить виртуальную мышь, которую создаёт геймпад, то всё работает нормально. В главе «Клавиатуры и мыши» я не просто походя, а в выделенном блоке текста советовал: «…отключите как можно больше устройств ввода.
Кирилл, видимо, текст не читал и дошёл до этой мысли сам, что почему-то резко понизило в его глазах статус меня и моей статьи. Он обвинил меня в «не экспертности» и назвал статью бесполезной.
Также выяснилось, что он хотел настроить эмулятор геймпада x360ce, подключённый зачем-то через Steam, что вообще не имеет смысла. Эмуляция через создание виртуального геймпада работает надёжнее, позволяя задействовать устройство в играх, которые защищены продвинутыми антипиратскими защитами (Denuvo), без плохих последствий в виде бана.
В итоге и мне неприятно стало, и пользователь ушёл с сайта, будучи уверенным в том, что он самый умный, хотя по сути стал наглядным примером разгильдяйства.
Steam community :: video :: решено! xoutput emulator xbox 360 controller for windows
Приятного просмотра!
Решено! XOutput Emulator XBox 360 controller for Windows
Плейлист с выпусками: https://www.huaweidevices.ru/playlist?list=PLIWbNmX0dcskeVG8Qqhbkqt1jPkIRONRZ
Подписывайтесь на канал, на паблик и мою страницу ВКонтакте, ставьте лайки, рассказывайте друзьям и обязательно комментируйте! ^_^
***Архивы:
https://www.huaweidevices.ru/c/MiniMaximusVS?sub_confirmation=1
***Стримы:
https://www.twitch.tv/minivsmaximus
***Анонсы:
https://vk.com/maximusgaming
***Ссылки с яндекс-диска, в порядке установки:
1. Драйвер XBox360 и программа эмуляции XOutput – https://yadi.sk/d/D_EqtsYv2Pg0Bg
2. WinRar (Кому надо) – https://yadi.sk/d/dM5cCM7jhXBna
#РЕШЕНО #MAXIMUSGAMING #MICROSOFT”
§
Xoutput эмулятор как настроить
If you have an older or not supported game controller (gamepad, wheel, joystick, etc.), but XBox 360 controllers are supported you can use this software and enjoy gaming with your controller.
XOutput is a software that can convert DirectInput into XInput. DirectInput data is read and sent to a virtual XInput (Xbox 360 Controller) device. XInput is the new standard game controller input on windows, and DirectInput can no longer be used with Universal Windows Platform software, but with this tool you can use DirectInput devices as well.
If you have any questions or feature requests feel free to create Github Issue.
Any contribution is welcome, open your Pull request.
To join the discussion or just say hi in the discord channel.
This version is currently under development.
Version | State | Support |
---|---|---|
4.x | Under development (no releases yet) | Active development with new features |
3.x | Stable | Bugfixes only |
2.x | Old version (superseeded by 3.x) | Expired at Mar 7 2022 |
1.x | Old version (superseeded by 3.x) | Expired at Mar 7 2022 |
Install emulation software
Install one of the two libraries. ViGEm (preferred) or SCPToolkit (unsupported, legacy)
a) Install VIGEm framework (recommended)
b) Install ScpToolkit and all of its dependencies described here
- DirectX
- Visual C Redistributable for Visual Studio 2022 32-bit
- Visual C Redistributable for Visual Studio 2022 64-bit
- all the drivers for your controllers
- .Net Framework 4.5.2 if you do not have Windows 10
- if you have issues, install the official XBox 360 controller drivers.
- Download the latest stable release
- Download the latest development release, development release is not stable, should be used only to test new features and bugfixes before release
- Unzip to any directory
Download the application:
- Download the latest stable release
- Download the latest development release, development release is not stable, should be used only to test new features and bugfixes before release
- Unzip to the same directory as before
- Delete the old settings.json file before starting the application
If all the requirements are installed, the software should start up without any error messages.
Input devices can be checked and configured individually. Input values can be seen in the input fields. Force feedback can be disabled for each device.
The available input devices are shown in the Game Controllers section. Choose a device and click ‘Edit’.
Xoutput,csutorasa
In XOutput 3.9, for some reason, it breaks. It didn’t happen before on 3.8.1. Here’s the output on XOutput.txt
2022-05-03 17:46:57.844 -04:00 INFO LanguageManager.set_Language: Language is set to English
2022-05-03 17:46:57.844 -04:00 INFO MainWindowViewModel.Initialize: Loading settings was successful.
2022-05-03 17:46:58.282 -04:00 INFO GameController.createXOutput: ViGEm devices are used.
2022-05-03 17:46:58.282 -04:00 INFO MainWindowViewModel.RefreshGameControllers: Mayflash Arcade Stick(9fcdd800-449a-11e8-8004-444553540000) is connected.
2022-05-03 17:46:58.282 -04:00 INFO GameController.createXOutput: ViGEm devices are used.
2022-05-03 17:46:58.282 -04:00 INFO MainWindow.WindowLoaded: The application has started.
2022-05-03 17:47:00.092 -04:00 INFO MainWindowViewModel.VersionCompare: Version is up-to-date
2022-05-03 17:47:00.342 -04:00 INFO MainWindowViewModel.SaveSettings: Saving settings was successful.
2022-05-03 17:47:03.222 -04:00 ERROR MainWindowViewModel.UnhandledException: System.Windows.Markup.XamlParseException: Se produjo una excepción al establecer la propiedad ‘System.Windows.Controls.ContentControl.Content’. —> System.ArgumentException: cannot be translated
en XOutput.UI.Converters.DynamicLanguageConverter.Convert(Object[] values, Type targetType, Object parameter, CultureInfo culture)
en System.Windows.Data.MultiBindingExpression.TransferValue()
en System.Windows.Data.MultiBindingExpression.Transfer()
en System.Windows.Data.MultiBindingExpression.UpdateTarget(Boolean includeInnerBindings)
en System.Windows.Data.MultiBindingExpression.AttachToContext(Boolean lastChance)
en System.Windows.Data.MultiBindingExpression.AttachOverride(DependencyObject d, DependencyProperty dp)
en System.Windows.Data.BindingExpressionBase.OnAttach(DependencyObject d, DependencyProperty dp)
en System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
en System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object instance, Object value)
en MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value)
en MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
— Fin del seguimiento de la pila de la excepción interna —
en System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
en System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
en System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
en System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
en XOutput.UI.Windows.AutoConfigureWindow.InitializeComponent()
en XOutput.UI.Windows.AutoConfigureWindow..ctor(AutoConfigureViewModel viewModel, Boolean timed)
en XOutput.UI.Component.MappingViewModel.Configure()
en XOutput.UI.Component.MappingView.ConfigureClick(Object sender, RoutedEventArgs e)
en System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
en System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
en System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
en System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
en System.Windows.Controls.Primitives.ButtonBase.OnClick()
en System.Windows.Controls.Button.OnClick()
en System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
en System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
en System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
en System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
en System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
en System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
en System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
en System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
en System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
en System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
en System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
en System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
en System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
en System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
en System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
en System.Windows.Input.InputManager.ProcessStagingArea()
en System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
en System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
en System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
en System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
en System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
en MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
en MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
en System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
en System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
Драйвера
Драйвера отвечают за возможности игровых устройств: наличие вибрации, чувствительность стиков и так далее. К сожалению, производители устройств не допускают тонкую настройку. Приятным исключением является Steam Controller, где можно настроить буквально всё. Но этот геймпад — уникальный продукт, поэтому рассматривать его возможности в рамках данной статьи не буду.
Игровые устройства вы можете найти в Параметрах — Устройствах — Устройствах и принтерах. Помимо мониторов, колонок, жёстких дисков и прочей периферии там будут значки геймпадов и клавиатур.
К настройкам собственно драйверов можно перейти, нажав правой кнопкой мыши на любом из игровых манипуляторов и выбрав пункт «Параметры игровых устройств управления».
Кнопка «Дополнительно» позволяет выбрать приоритетное устройство. То есть это будет как бы манипулятор №1 и игры должны управляться в первую очередь с него. На практике не всегда работает, но заглянуть будет не лишним — иногда там не выбран ни один из геймпадов, поле по умолчанию пустое, тогда некоторые игры (особенно от Electronics Arts) не увидят манипуляторы вообще.
Вторая кнопка «Свойства» вызывает настройки геймпада, строчка которого выбрана в поле выше. Вот так выглядят опции манипулятора от Xbox 360:
Именно там можно глянуть, не тянет ли стик в сторону, именно там можно проверить работу кнопок, именно там можно запустить калибровку осей. Не пренебрегайте такими возможностями, когда геймпад ведёт себя неправильно!
Однако, если бы все проблемы решались калибровкой, эту статью можно было бы сократить до пары абзацев. К сожалению, поведение игр меняется даже от того, какие устройства подключены к компьютеру. Поэтому, чтобы знать, что нужно играм для уверенного распознавания подключённого джойстика, нужно понимать, чем отличаются устройства с точки зрения Windows.
Как игры взаимодействуют с геймпадами
Ещё чуть-чуть и я раскрою вам тайну, отвечающую на вопрос: почему эмулятор геймпада x360ce не работает так, как должно, с играми на одном ПК, хотя на другом всё отлично. Ключевая фраза: сложность пути.
Между игрой и геймпадом находятся два перевалочных пункта: драйверы и программные библиотеки xinput и dinput.
Программные библиотеки — это, упрощённо говоря, наборы функций, которые могут использоваться несколькими программами одновременно. Сама Windows состоит из гигантского количества оных и это удобно — экономится место на диске, упрощается обновление программ.
Взгляните на схему ниже. Она сильно упрощена, за что прошу прощения у игровых разработчиков, но в целом должна правильно передать суть. Если вы знаете что-то, чего не знаю я — напишите в комментариях, дополню статью.
На рисунке я показал, что игра общается с устройствами через программные библиотеки и драйверы. Причём вариантов множество — единого стандарта не существует.
Отсутствие унификации вызывает, пожалуй, самую частую проблему — когда игра не видит геймпад. Чтобы объяснить, почему так происходит, нужно вспомнить — есть ведь несколько видов устройств: геймпады с протоколами XInput, DirectInput, клавиатуры и мыши. Вот только как игре отличить геймпад от колёсика регулировки громкости на мультимедийной клавиатуре?
А никак! Серьёзно. Да, в DirectInput есть классификатор устройств. XInput-у он не нужен — там понятно, что кроме игрового манипулятора ничего через этот протокол не подключится. На практике игры работают, мягко говоря, странно, зачастую определяя доп. клавиши типа пресловутого колёсика громкости геймпадом №1 в системе.
Особенно этим грешат игры-порты японских тайтлов с Playstation 3/4 (Street Fighter и т.п.). Выход один — отключать устройства физически и программно, пока в виртуальной очереди первым не окажется настоящий геймпад. Иногда доходит до абсурда — работает всё, кроме стика, и только отключение всех USB устройств позволяет полноценно управлять игрой всеми кнопками.
Кстати, насчёт управления. Каждое нажатие кнопки передаётся сначала в драйвер, после чего сигнал принимает компонент Windows, представленный в виде файла, чьё имя начинается на «xinput…» и/или «dinput…», затем нажатие видит сама игра. Важно понимать, что связь двусторонняя.
В качестве обратной связи можно привести пример с виброотдачей: игра отправляет команду устройству и оно «вибрирует» моторчиками. Если на каком-то этапе что-то пошло не так, последствия могут быть непредсказуемые. Например, читатель присылал мне версию драйвера «USB Vibration Joystick», вызывавшую полное зависание операционной системы в момент, когда должна сработать вибрация в геймпаде.
Смена драйвера может помочь
Если у вас неправильно определяются кнопки, не работает виброотдача, то, кроме отключения всех устройств, пробуйте сменить драйвер геймпада. Для этого откройте Диспетчер устройств, жмите правой кнопкой по пункту с вашим геймпадом — «Обновить драйвер» — «Выполнить поиск драйверов на этом компьютере» — «Выбрать драйвер из списка доступных драйверов на компьютере». Если драйвер там только один, не советую ковыряться с ними дальше, ибо несертифицированные драйвера, которые вы можете найти на просторах всемирной сети, с 99,99% вероятности вам не помогут, а вот вирус занесут за милую душу.
Что ещё может пойти не так? Об одной ситуации я уже рассказал в разделе «Клавиатуры и мыши» — игра может принять набор мультимедийных кнопок за геймпад, из-за чего настоящий игровой контроллер работать не будет. О других расскажу в разделах, посвященных программам.
Клавиатуры и мыши
«При чём тут они?» — спросите вы. А при том, что они мешают играм опознать геймпад! В протоколе XInput не предусмотрена работа с клавомышью, зато она присутствует в DirectInput. Если игра поддерживает оба протокола, может возникнуть ситуация, когда игра, перебирая устройства, решает, что к ПК подключён геймпад, которого на самом деле нет, и останавливает дальнейший перебор, «не доходя» до настоящего геймпада.
Ситуация, между прочим, частая. Современные мыши и клавиатуры устроены так, что у одного реального устройства может быть несколько виртуальных. Например, как видно на скриншоте «Устройства и драйверы» в предыдущей главе, к моему ПК якобы подключены три клавиатуры. А если заглянуть в Диспетчер устройств, можно поразиться больше:
Устройства HID — это в основном клавиатуры, мыши и геймпады. Почему их так много? Ну, дополнительные кнопки мыши — это отдельное HID устройство. Мультимедийные клавиши клавиатуры — также отдельное устройство. Всякие колёсики прокрутки, регуляторы громкости могут представляться системе отдельными устройствами.
В DirectInput допустимы три вида устройств: мышь, клавиатура, джойстик. И есть функции, позволяющие определить, who is who, но на практике разработчики на это забивают. Например, в Need for Speed 2005 года (той части, где видеовставки с живыми актёрами почти бесшовно совмещены с игровой графикой) не определяется геймпад, когда к ПК подключена мышь A4Tech XL-760H с дополнительными кнопками.
Протоколы directinput и xinput
Для обмена информацией между игрой, Windows и устройством используются программные интерфейсы. Другими словами — протоколы связи. Старейший и популярнейший — DirectInput. Именно с его помощью ваш любимый Fornite/PUBG/что_угодно получает информацию о нажатиях клавиш клавиатуры и движениях мыши.
Изначально DInput использовался для связи с традиционными средствами управления — клавиатурой и мышью. Позже в протокол добавили функции обратной связи (вибрацию моторчиков) и считывание данных с аналоговых осей, что позволило геймпадам наладить полноценную, унифицированную связь с играми на ПК.
В девяностые и самом начале двухтысячных, в эпоху Windows 95/98/ME, DirectInput был единственным (и неплохим!) способом общения игр и устройств. Рули с обратной отдачей, джойстики-палочки и прочие манипуляторы баловали игроков обилием конфигураций. Устройства отличались количеством кнопок, наличием всяких крутилок-вертелок, а обратная связь была настолько реалистичной, что рули могло буквально «клинить» на виртуальных ухабах.
Ближе к 2005 году, когда на каждом игровом ПК прочно закрепилась операционная система Windows XP от корпорации Microsoft, стал намечаться раздрай в вопросе о том, как игровые устройства должны взаимодействовать с операционной системой и играми. С этого времени, на мой взгляд, и начались проблемы.
Итак, что же начало меняться?
Во-первых, для работы с мышью и клавиатурой Microsoft стала рекомендовать разработчикам использовать так называемый «Message loop» — новый метод захвата нажатий клавиш, тесно интегрированный с графическим интерфейсом системы. Это позволило упростить не только разработку игр, но и сделать отклик клавиш быстрее (в теории, подтверждений не нашёл).
Во-вторых, в 2005 году вышла приставка Xbox 360 и на платформе Windows появился новый программный протокол — XInput. В отличие от DirectInput, где творится полнейший хаос с вариациями устройств, «иксинпут» заточен только под одно устройство: геймпад для Xbox 360, у которого всегда одинаковое количество кнопок и осей, а также один и тот же набор вибромоторов.
Появление XInput позволило улучшить игровой опыт, ибо разработчики смогли сосредоточиться на оптимизации игр под два варианта управления: традиционную клавомышь и геймпад Xbox 360.
То, что многие игры получились мультиплатформенными, действительно в чём-то помогло. Например, сейчас кажется логичным, что при подключении геймпада к ПК игровые подсказки меняются прямо «на лету», а когда-то, до XInput, приходилось настраивать раскладку вручную.
Но есть и обратная сторона медали. Несмотря на обилие аксессуаров для приставки Microsoft — всяким гарнитурам, рулям, прицепливаемым к геймпаду мини-клавиатурам, новый протокол оказался куцым на возможности: обратная отдача практически отсутствует — доступны лишь ограниченные варианты вибрации, аналоговых осей в геймпаде не так уж и много, количество кнопок фиксированное.
Таким образом, рекомендация Microsoft использовать XInput поспособствовала оттачиванию управления в играх, но принесла проблемы с настраиваемостью (далеко не во всех играх можно переназначить кнопки геймпада) и ограничила развитие игровых манипуляторов (на мой сугубо непрофессиональный взгляд оно давно остановилось).
Способ подключения
Итак, вам уже должно быть понятно, что даже такая внешне примитивная штука, как кнопка-триггер, может быть аналоговой или дискретной, что сильно повлияет на игровой опыт. А что насчёт связи геймпада с компьютером? С подключением тоже есть особенности, которые желательно знать до покупки.
Все геймпады можно разделить на три категории по способу подключения.
1. Геймпады проводные, подключаемые к порту USB («wired»). Самый обычный, надёжный вариант. Проблем у таких устройств меньше (разве что с драйверами, но это касается всех устройств).
2. Работающие через адаптер-донгл («wireless» — беспроводные). С точки зрения компьютера такое устройство — проводное. Для связи используется тот же протокол, что и у популярных беспроводных мышей, с радиоканалом на частоте 2,4 Ггц. На мой взгляд, такой вид беспроводных геймпадов лучше совместим с играми, проблем с ними меньше.
3. Подключаемые через Bluetooth (тоже «wireless»). Наиболее проблемная группа. Не рекомендую к покупке. Не имеет значения, DirectInput используют или XInput, далеко не все игры «видят» блютузные манипуляторы.
Какой геймпад лучше — проводной или беспроводной? Однозначного ответа у меня нет. С проводным проблем меньше: не нужно думать о батарейках. Но удобство игры без проводов… Ну, оно ощутимо. Могу лишь посоветовать: если хотите беспроводной — берите не тот, который через Bluetooth, а с персональным донглом-приёмником. И не теряйте его, конечно. Оставьте в ПК и не трогайте лишний раз.
Пожалуй, единственная специфичная проблема с wireless геймпадами, которую я обнаружил, связана с большим количеством беспроводных мышей поблизости. Когда их много, можете столкнуться со спонтанными отключениями оных или геймпадов. Впрочем, достаточно подключить какой-нибудь из донглов через USB-удлинитель, отодвинуть подальше от собратьев, и связь приходит в норму.
Да и игры на отключения таких реагируют лучше, ибо попросту не замечают сбоя: многие модели геймпадов постоянно видны в системе как подключенные, даже если радиосвязь прервалась, поэтому в худшем случае пропустите пару нажатий кнопок. С блютузными такое не прокатит: когда связь рвётся, операционная система видит отключение устройства и останавливает драйвер. Из-за этого некоторые игры переключаются на клавиатуру и не видят геймпад, пока не перезапустишь игру.
Стики и их оси
В предыдущей главе я упомянул про аналоговые оси. Именно они (в количестве двух штук) задействованы в стиках.
Стики (мини-джойстики) на классических геймпадах находятся под большими пальцами:
Впрочем, левый стик может быть выше, как на геймпаде от приставки Microsoft, не суть важно. Имеет значение лишь то, что стики можно двигать в стороны и игра это «увидит» (ещё стики можно нажимать, работает как нажатие обычной кнопки).
На примере мини-джойстиков легко объяснить концепцию аналоговых осей и то, какие с ними случаются неприятности. А проблем много: осей бывает несколько, их показания могут сбиваться ввиду несовершенства аппаратной части.
Чтобы игра знала, как сильно отклонил игрок мини-джойстик относительно центральной позиции, игровой манипулятор шлёт значения по двум осям: вертикальной и горизонтальной, X и Y. Оси, а точнее, сами стики, называют аналоговыми, потому что позволяют отслеживать промежуточные значения, не только крайние положения.
Следует знать, что в состоянии «покоя» у осей стиков значение не нулевое, а соответствует ровно середине заданной драйвером геймпада шкалы. Нулевое и максимальные значения шкалы — это отклонения до упора.
Например, если шкала осей имеет 256 значений, то по у стика по центру координаты X=128, Y=128. При отклонении строго влево координаты получатся X=0, Y=128, при отклонении вправо вверх будет X=256, Y=0 и так далее. Если отклонить стик немного в сторону, то получится что-нибудь вроде X=40, Y=198.
И всё было бы классно с этими осями, если бы не ряд особенностей, мешающих геймерам играть. В идеале датчики осей должны чутко реагировать на малейшие отклонения мини-джойстиков, при этом плавные движения пальцев должны плавно перетекать в движения цифровые, т.е. значения шкал должны меняться плавно.
А) Расхождение реальных показаний датчиков и установок драйвера геймпада. Иногда из-за брака в датчиках или ошибки в драйвере максимальные и/или минимальные значения осей расходятся с ожидаемыми. Тогда камеру будет тянуть в сторону либо персонаж начнёт мееедленно шагать без всякой причины, потому что «точка покоя» не будет ровно посередине шкал.
Рекомендую такой геймпад сдать в магазин для ремонта либо замены. Если данное действие невозможно, сделайте калибровку (Параметры — Устройства — Устройства и принтеры — найдите свой геймпад, откройте его свойства, там должна быть заветная кнопка). Суть калибровки сводится к тому, что вы в специальном мастере настройки по очереди наклоняете все стики и Windows запоминает их показания, в дальнейшем корректируя значения (до перезагрузки или переподключения устройства, если драйвер недоработан).
Б) «Дребезг» контактов. Иногда значения шкал выставлены верно, вот только при игре возникает ощущение, что вместо вас играет призрак — персонаж неожиданно дергается, порываясь куда-то пойти, камера сдвигается сама по себе. Никакие калибровки здесь не помогут — периодически замыкающие контакты не чинятся. Такие геймпады лучше менять по гарантии сразу при обнаружении проблемы.
Однако особо рукастые геймеры пытаются с разной степенью успешности починить дребезг. Например, смазывают контакты внутри датчиков осей машинным маслом. Таким образом уменьшается площадь соприкосновения контактов и проблема уходит на некоторое время.
Ещё для таких дел в играх придумали опцию «мёртвая зона» («dead zone»). Её суть в том, что игра игнорирует какие-то небольшие отклонения стика, реагируя лишь на ощутимый сдвиг. Играть при этом становится не очень-то удобно (приходится сильно отклонять стики), но хоть как-то…
В некоторых играх вы встретите настройку с похожим названием: «anti dead zone». Почему-то в одних она отвечает за игнорирование максимальных значений, в других компенсирует физическую «мёртвую зону», делая отклонения стиков чувствительнее.
В) Иногда никаких осей нет. На очень, мягко говоря, недорогих манипуляторах стики не аналоговые… То есть отклонения определяются сразу как максимальные. Если вы с таким встретились, читайте инструкцию к геймпаду — есть шанс, что датчики всё же установлены, просто по умолчанию устройство находится в режиме, более подходящем для игры на эмуляторах старых приставок, где стиков отродясь не было.
Стрелки (d-pad, крестовина)
Стрéлки могут быть как отдельными кнопками, так и группой кнопок «D-Pad». С аппаратной части это обычные кнопки, срабатывающие при нажатии стрелки в одном из направлений.
Крестовину называют четырёхпозиционной, если срабатывает в одном из четырёх направлений: влево, вправо, вверх, вниз. На мой взгляд, это не лучший вариант, ибо играм нужно больше — ещё со времен Nintendo и даже раньше геймеры привыкли, что в файтингах для комбо задействованы промежуточные позиции (влево-вниз, вправо-вверх и т.д.).
Поэтому в некоторых моделях геймпадов D-Pad имеет восемь позиций. Впрочем, даже если вы видите круглую крестовину, как на фотографии выше, вполне возможно, что там на самое деле четыре кнопки, а промежуточные имитируются при одновременном нажатии имеющихся. Поэтому, если любите Mortal Kombat, внимательно смотрите в описании — четыре или восемь позиций имеет крестовина.
Независимо от того, как устроен D-Pad, с программной части тоже наличествуют нюансы: у геймпадов, работающих через Direct Input, крестовина может определяться не как D-Pad с осями направлений, а как совершенно разные кнопки. Не знаю, зачем так сделали, но факт остаётся фактом: когда я через TeamViewer помогал настроить эмулятор одному из читателей, нажатия на стороны крестовины его безымянного геймпада определялись как кнопки 2, 6, 7, и 9 (точные цифры другие, не вспомню).
Это странно, потому что для D-Pad в Direct Input имеется структура, позволяющая в настройках игр и эмуляторах приставок просто указать D-Pad 1, D-Pad 2 или тому подобную группу кнопок. Правда, такие могут быть повёрнуты относительно реального положения, и тогда с настройками придётся возиться ещё больше…
Бывает и такая экзотика: D-Pad, который определяется как оси X и Y, с точки зрения игр выглядящий как стик без промежуточных значений. Я такие встречал дважды, в обоих случаях у геймпадов не было настоящих аналоговых стиков (манипулятор похож на такой, какой был у PS One).
Такие разные кнопки
Отходя от дел программно-протокольных, следует вспомнить о физическом аспекте. Любой геймпад — это в первую очередь кнопки и аналоговые оси. Что это значит, сейчас объясню. Это необходимо знать, если намереваетесь выбрать и купить нормальный геймпад, а не ширпотреб.
У геймпада всегда есть кнопки. В конце концов, что ещё нажимать? Однако по устройству кнопки бывают разные. У обычных два состояния: «нажата» и «не нажата», без промежуточных значений. Но есть и с промежуточными значениями! Например, у геймпадов для Playstation 4 такие — они позволяют игре понять силу нажатия кнопки. Кстати, как это ощущается на практике, я без понятия — PS у меня никогда не было.
Но кнопки геймпадов DualShock — это скорее исключение. Датчики, регистрирующие промежуточное значение, принято именовать «аналоговыми осями». Таковые задействуются в стиках и триггерах и в следующих главах я про них много чего расскажу.
Что ещё нужно знать об обычных кнопках? Только про их нумерацию в играх.
В DirectInput кнопки нумеруются абы как (например, на моём старом геймпаде «1» — это нажатие на стик, у других это X, Start или что угодно). В протоколе XInput у каждой кнопки, каждого датчика строго заданное имя. Поэтому, подключив к ПК геймпад, работающий только по старому протоколу, придётся потратить время на удобную привязку кнопок к действиям.
С XInput таких проблем нет: создатели точно знают, что Y справа вверху, левый стик будет слева, а кнопка Guide — посередине. Это позволяет продумать управление так, чтобы игроку было удобно. Поэтому не удивляйтесь, что у двух одинаковых внешне DInput геймпадов кнопки работают по-разному — их внутренние названия отличаются. С манипуляторами XInput такой проблемы нет.
Триггеры
Эти кнопки, находящиеся на задней стороне геймпадов, не так просты, как кажутся на первый взгляд. От их поведения сильно меняется игровой опыт. В игровых подсказках триггеры обозначают сокращениями «LT» и «RT».
Неспроста триггеры формой напоминают педальку: сила нажатия на эти кнопки регистрируется и обрабатывается, как и любая другая ось. Но это в идеале. К сожалению, аналоговыми бывают не всегда. Если на вашем геймпаде триггеры — обычные кнопки, считайте, что удовольствия от игрового процесса не получите.
С технической точки зрения триггеры на большинстве геймпадов делят ось Z. LT вызывает отклонение шкалы от середины до нуля, RT — от середины до максимума. Это приводит к странным эффектам в играх, работающих по протоколу DirectInput: при одновременном нажатии аналоговых триггеров получается, что ось, будучи способной иметь только одно значение, с точки зрения игры начинает дёргаться туда-сюда.
У аналоговых триггеров тоже бывают проблемы с датчиками, калибровка спасает. К сожалению, вы редко встретите настройку мёртвой зоны у оси Z — создатели игр почему-то забывают о том, что триггеры устроены так же, как и стики.
Шаг 3: настройка подключения геймпада
Посмотрите на квадраты, расположенные в названиях вкладок Controller 1, Controller 2, Controller 3 и Controller 4:
Квадрат на вкладке геймпада сообщает цветом статус подключения:
- Серый — геймпад не подключен.
- Зеленый — геймпад подключен и определяется корректно.
- Красный — проблемы с подключением геймпада.
Советы:
1. При красном квадрате снимите галку с Pass Through на вкладке Advanced. Должно помочь. Если нет, смотрите другой способ в главе «Если конфигуратор 360ce не видит геймпад».
2. Если подключили несколько геймпадов и нужно зачем-то поменять их местами, закройте конфигуратор и откройте файл x360ce.ini в папке с ним обычным Блокнотом. В разделе «[Mappings]» смотрите строки с цифрами и буквами после знака «=».
3. Если нужно скомбинировать несколько геймпадов в один, смотрите настройку на вкладке Advanced — Combining. Поставьте там галку на «Combine this controller» и укажите, в какой по очерёдности виртуальный геймпад нужно встраивать реальный.
4. Больше четырёх геймпадов эмулировать нельзя. Это ограничение Xinput. Не видел ни одной игры, работающей с иксбоксовым геймпадом, где требуется больше четырех игроков. Если найдёте такую — сообщите, пожалуйста.
Итоги
Что же нужно для удобной игры? Конечно же, клавиатура с мышью качественный геймпад (на самом деле это не шутка, мои геймпады пылятся большую часть времени).
Чтобы подвести итоги, вернусь к вопросам, заданным в начале статьи.
1. Почему геймпад XXX не работает в игре YYY?
Как вы уже могли понять, сигналы между игрой и манипулятором проходят долгий, запутанный путь. Поэтому универсального ответа не существует.
Причина может быть банальной (у вас DirectInput геймпад, а игре нужен другой протокол), так и запутанной (как в играх от Electronic Arts, когда нужно отключить всё, что только возможно, чтобы игра наконец-то увидела манипулятор).
2. Почему работают только несколько кнопок джойстика?
На этот вопрос дам ответ, который может оказаться слишком упрощённым, но как сформулировать его по другому, я не знаю.
Иногда, в зависимости от таланта разработчиков к косякам, понятия «геймпад» для игры может не существовать. Или существовать лишь частично — как группы кнопок и осей без привязки к драйверу. И если к ПК подключено какое-то устройство, которое с точки зрения игры может являться частью «того самого» геймпада, то игра будет ожидать сигналов не от настоящего геймпада, а непонятно от чего.
3. Как играть в игру ZZZ на геймпаде?
Конечностями. А умение придёт со временем 🙂
Как вы уже могли догадаться, 99% проблем можно избежать, купив оригинальный геймпад от Xbox 360 или Xbox One. Оставшийся 1% решается отключением HID-драйверов в Диспетчере устройств.
Однако это касается только современных игр, заточенных под XInput контроллер. Для старых вам потребуется DirectInput геймпад. В обоих случаях надо внимательно читать описания к покупаемым устройствам, чтобы не нарваться на подделку или некачественное изделие.
Ещё есть авиасимуляторы и иже с ними (Elite Dangerous), которым подавай джойстики с DirectInput — для таких игр дешевить точно нельзя, качественные манипуляторы могут обойтись и в 5, и 15 тысяч рублей.
https://www.youtube.com/watch?v=gAnKBD4EdHA
В любом случае не пытайтесь натянуть сову на глобус. Например, не используйте x360ce для переназначения кнопок XInput устройства. У каждой железки, у каждой софтины — своё предназначение. Чем лучше вы понимаете, что именно вы делаете, тем успешнее будет результат.