Joy Control
Joy Control — точное управление геймпадом для симуляторов
⬇ JoyControl.rar (15 МБ) ⬇ JoyControl-RU.pdf (730 КБ)ENGI Live JoyControl — это программа для Windows, которая работает между вашим контроллером и игрой. Она читает DualShock 4, DualSense, Xbox (XInput), рули и джойстики (HID / DirectInput), а также клавиатуру. Программа обрабатывает сигнал и отдаёт игре виртуальный геймпад Xbox 360 через драйвер ViGEmBus.
Для игры программа невидима. Игра видит обычный стандартный контроллер, поэтому настройки работают в любом симуляторе. Не нужны моды, не нужна поддержка со стороны разработчика игры, файлы игры не меняются.
Смысл программы в одном. Триггер геймпада имеет ход около 2 см, а педаль автомобиля — около 10 см. Стик отклоняется на 1,5 см, а руль проворачивается на пол-оборота. Именно поэтому на геймпаде так трудно дозировать газ и тормоз: палец проходит весь диапазон от 0 до 100 % за 50–80 миллисекунд, и машина срывается в занос или блокирует колёса. Joy Control возвращает управлению длину хода. Программа делает это не картинкой, а реальным временем и формой отклика.
Как устроена обработка сигнала
Каждое значение проходит через конвейер, и на выходе получается уже свой контроллер:
- Мёртвая зона. Программа считает нулём все сырые значения ниже порога, поэтому дребезг и износ не доходят до игры.
- Взаимодействие триггеров. Один триггер вычитается из другого с множителем.
- Кривая чувствительности. Она задаёт форму отклика: плавный старт или резкий.
- Порог и ограничение выхода. Всё, что ниже «Мин», становится нулём, а оставшийся ход растягивается на полный диапазон; «Макс» ограничивает выход сверху.
- Участки плавности. Они задают скорость изменения в миллисекундах на единицу, отдельно на нажатие и на отпускание.
- Макросы и маппинг действий. Один элемент управления действует на другой.
- Виртуальный геймпад Xbox 360. Готовый результат уходит в игру.
Опрос контроллера идёт с частотой около 120–125 Гц. Все задержки считаются по высокоточному таймеру с накоплением времени, поэтому шаг в 0,1 миллисекунды на единицу отрабатывается корректно даже между кадрами опроса.
Возможности программы
- Любые устройства ввода. PS4 и PS5 определяются автоматически, Xbox подключается через XInput, рули и джойстики работают по HID и DirectInput, а клавиатура заменяет геймпад. Джойстиков сколько угодно: у каждого постоянный ID и свои настройки, поэтому даже два одинаковых геймпада настраиваются раздельно.
- Независимая настройка триггеров. Тормоз и газ настраиваются по отдельности, а не одними ползунками на оба.
- До 10 участков плавности. Участки задаются на диапазоне от 0 до 255, отдельно для нажатия и для отпускания, а задержка на каждом из них бывает от 0,1 до 1000 миллисекунд на единицу.
- Кривые чувствительности. Для триггеров кривая настраивается от −20 до +20, для каждой оси стиков — от −10 до +10.
- Полная настройка стиков. Настраиваются внутренняя и внешняя мёртвые зоны, ограничение диапазона по осям X и Y, растяжение до полного хода и принудительный максимум по оси.
- Макросы. Режимы «Следовать», «Держать», «Импульс», «Переключатель», «Турбо», «Отключить» и «Последовательность» — цепочка до 16 шагов с таймингами. У каждого правила до четырёх условий: кнопки, триггеры и стики с диапазоном, так что комбинация вроде «L1 зажат и L2 продавлен наполовину» задаётся одним правилом. Есть реверс, приоритет, задержки в микросекундах и способ сочетания — большее из двух, замена или сложение, в том числе с другими макросами. Сцепление позволяет результату одного правила запускать другое.
- Маппинг действий. Любой вход можно связать с любым выходом и задать порог срабатывания, требование удержания и задержки до и после.
- Живой осциллограф. На графике за последние 3 секунды серым показано сырое значение с контроллера, а цветом — то, что уходит в игру. Настройку видно, а не приходится угадывать.
- Интерактивная картинка геймпада. Клик по триггеру, стику, кнопке или тачпаду открывает окно его настроек.
- Профили. Настройки хранятся в локальной базе SQLite, у каждого профиля есть уникальный 16-значный код, а обмен с файлами идёт через формат JSON. Для каждой игры удобно завести свой профиль. Настройки каждого джойстика сохраняются и в отдельный файл, который можно загрузить в любой джойстик любого профиля.
- 14 языков интерфейса. Программа состоит из одного исполняемого файла и не требует установки.
- Автосохранение. Любое изменение применяется и сохраняется сразу, поэтому настраивать можно не выходя из игры.
Почему это лучше для игр в симуляторах
Обычные программы для переназначения кнопок меняют только форму отклика, то есть кривую. Joy Control меняет ещё и скорость: сколько миллисекунд выход идёт к цели на каждом участке хода. Это принципиально другой уровень контроля, и именно он решает типичные проблемы симуляторов на геймпаде.
- Машина не срывается в занос при нажатии газа. Палец дожал триггер мгновенно, а выход растёт плавно, и машина получает тягу так, как будто вы плавно давите педаль.
- Торможение дозируется на грани блокировки. Первые 30 % хода быстрые, реакция мгновенная, а последние 30 % медленные. У самого упора можно поймать порог блокировки колёс, чего пальцем физически не сделать.
- Отпускание триггера настраивается отдельно от нажатия. Настоящая педаль газа или тормоза отпускается не с той же скоростью, с какой нажимается. Плавное отпускание тормоза на входе в поворот и мягкий сброс газа на вкате настраиваются своими участками.
- Плавность не мешает аварийным действиям. Отдельные галочки отключают задержку в крайних положениях: как только триггер полностью отпущен, тормоз сбрасывается моментально.
- Руль получает инерцию. Резкий бросок стика не даёт мгновенного поворота колёс, потому что у стика есть свои участки плавности на отклонение и на возврат к центру.
- Руление становится точнее. Ограничение диапазона по оси X превращает полный ход стика в 60–70 % угла поворота, и та же дистанция под пальцем работает вдвое точнее.
- Во всех играх всё работает одинаково. Обработка идёт до игры, на уровне виртуального контроллера, поэтому не нужны ни настройки в самой игре, ни моды.
- Левая нога остаётся на тормозе. Вычитание одного триггера из другого с множителем повторяет поведение машин, где газ и тормоз конфликтуют, или, наоборот, позволяет подтормаживать не сбрасывая газ.
Настройка газа и тормоза
Левый триггер L2 / LT — это тормоз, правый триггер R2 / RT — газ. Каждый настраивается в своём окне, и все параметры независимы.
| Параметр | Что делает | Как ставить для симулятора |
|---|---|---|
| Мёртвая зона | Сырое значение ниже порога считается нулём. | На новом геймпаде мёртвую зону ставят в 3–8 единиц. На изношенном триггере, который подтекает газом, её поднимают до 10–15 единиц. |
| Минимум и максимум | «Мин» — порог входа: ниже него выход равен нулю, а оставшийся ход растягивается на 0–255. «Макс» ограничивает выход сверху. | «Мин» 5–10 убирает дребезг изношенного триггера, не укорачивая ход. Для дождевой трассы или мощной заднеприводной машины «Макс» ставят в 190–210 единиц из 255 — тогда полный газ просто недоступен. |
| Кривая чувствительности | Задаёт форму отклика в диапазоне от −20 до +20. Минус даёт плавный старт и точность в начале хода, плюс даёт резкий выход на максимум. | Для газа уровень кривой берут от −6 до −10, для тормоза от −3 до −6. Плюсовые значения нужны редко, например для кнопочного ручника. |
| Участки нажатия | Задают до 10 отрезков на диапазоне от 0 до 255, и у каждого своя задержка в миллисекундах на единицу. Вне участков значение меняется мгновенно, а на пересечениях задержки складываются. | Ориентир такой: 255 единиц по 1 миллисекунде дают около 0,26 секунды на весь ход. Для газа берут от 0,3 до 2 миллисекунд на единицу, для тормоза от 0,5 до 3 миллисекунд. |
| Участки отпускания | Задают отдельный набор участков на падение значения. | Обычно отпускание быстрее нажатия: от 0,5 до 1 миллисекунды на единицу. Для плавного отпускания тормоза в повороте задержку на больших значениях увеличивают. |
| Мгновенный ноль и мгновенный максимум | Отменяет плавность, когда триггер полностью отпущен или дожат до упора. | Для тормоза включают ради аварийного торможения, для газа обычно выключают. |
| Вычитание триггеров и множитель | Тормоз ослабляет газ или наоборот, с заданным коэффициентом. | Множитель от 0,5 до 1,0 повторяет торможение левой ногой и работу с перегазовкой. |
Готовые пресеты триггеров
| Пресет | Нажатие | Отпускание | Для чего |
|---|---|---|---|
| Плавный тормоз | 0–80: 0,5 · 80–180: 1,5 · 180–255: 3,0 | 120–255: 1,0 · 0–120: 0,5 | Кольцевые гонки и дозирование у порога блокировки. |
| Плавный газ | 0–60: 0,3 · 60–200: 1,0 · 200–255: 2,0 | 0–255: 0,8 | Задний привод и выход из поворота без срыва. |
| Как ABS | 0–128: 0,2 · 128–255: 2,5 | мгновенно | Быстрое начало торможения и медленное додавливание. |
| Как TC | 0–128: 2,5 · 128–255: 0,2 | мгновенно | Медленная подача тяги на старте и свободный верх диапазона. |
Числа в таблице — это задержка в миллисекундах на одну единицу выхода. Пресет служит отправной точкой: дальше участки правят под конкретную машину и смотрят на осциллограф, где серая линия показывает палец, а цветная — то, что получает игра.
Настройка стиков
Левый стик в автомобильных симуляторах работает как руль, а правый отвечает за обзор или камеру. У каждого стика настраиваются и геометрия, то есть мёртвые зоны, диапазон и кривая, и плавность по участкам, причём для осей X и Y независимо.
| Параметр | Что делает | Как ставить для симулятора |
|---|---|---|
| Внутренняя мёртвая зона | Убирает дрейф в центре. | От 3 до 6 % на новом стике и от 8 до 12 % на изношенном. Чем меньше значение, тем точнее машина держит прямую. |
| Внешняя мёртвая зона | Обрезает край, поэтому максимум достигается чуть раньше упора. | От 92 до 97 %, чтобы полный поворот срабатывал по всей окружности, включая диагонали. |
| Максимальный диапазон по осям | Ограничивает выходной угол по оси X или Y. | Это главный приём для руления: от 60 до 75 % по оси X. Руль перестаёт выкручиваться до упора, и точность растёт кратно. |
| Растяжение до полного диапазона | После обрезки краёв снова растягивает сигнал до максимума. | Включают, когда нужен полный ход при большой внешней мёртвой зоне. |
| Чувствительность по осям | Задаёт кривую от −10 до +10. Минус растягивает центр и делает отклик плавным, плюс делает реакцию резкой. | Для руления уровень кривой по оси X берут от −4 до −7. Для обзора правым стиком берут от +2 до +4, чтобы быстро крутить головой. |
| Участки отклонения | Задают плавный уход от центра. Амплитуда от 0 до 255 — это полный ход от центра, и у каждого участка есть свои флаги осей X и Y. | Для руления подходит набор задержек 0–60: 0,4 · 60–160: 1,2 · 160–255: 2,5 миллисекунды на единицу. Стик реагирует быстро около центра и тяжело у упора. |
| Участки возврата | Задают плавное возвращение к центру. | От 0,5 до 0,8 миллисекунды на единицу по всему ходу — это имитация самовозврата колёс. Для камеры возврат делают быстрее отклонения. |
| Постоянный максимум по оси | При любом отклонении по оси выдаёт максимум в пределах диапазона. | Подходит для аркадного руления и игр, где нужен цифровой поворот. |
| Полное отключение стика | Стик не передаётся в игру, но его макросы продолжают работать. | Удобно, когда рулит руль, а стик нужен только как источник макросов. |
Оси X и Y настраиваются вместе или раздельно: у участка есть флаги «X» и «Y», а пересекающиеся участки складывают задержки. Рядом с настройками работает такой же осциллограф со шкалой от −255 до +255. Двигайте стик и смотрите, насколько выход отстаёт от вашего пальца.
Что нужно для работы
- Windows 10 или 11 в разрядности x64.
- Драйвер ViGEmBus 1.22.0. Программа проверяет его наличие и предлагает установку в один клик.
- Контроллер, подключённый кабелем, через адаптер или по Bluetooth.
Программа запускается в пробном режиме на 20 минут за один запуск. Полная работа открывается по бессрочной лицензии engi.live.
Руководство с картинками: где что нажать
Ниже — пошаговое описание всех окон программы со снимками экрана. Это же руководство можно скачать в PDF — кнопка вверху страницы.
1. Драйверы: ViGEmBus и HidHide
- ViGEmBus — драйвер виртуального геймпада. Без него программа не создаст Xbox-геймпад. В строке состояния внизу окна должно быть Драйвер ViGEmBus: OK; если нет — там же появится кнопка установки.
- HidHide — не обязателен. Нужен, только если игра видит одновременно и настоящий геймпад, и виртуальный и персонаж «двоит». Подробнее — в разделе 15.
2. Главное окно

- Верхняя панель — выбор профиля, Профили…, сохранение и загрузка профиля целиком, Маппинг действий, Сбросить настройки, язык интерфейса.
- Слева — устройства ввода. Все джойстики профиля, их ID, галочки и групповые операции.
- Справа — картинка геймпада. Показывает в реальном времени, что получает игра от выбранного джойстика. По картинке можно щёлкать: триггер, стик или кнопка открывают свои настройки.
- Под картинкой — макросы выбранного джойстика: каждая фишка — одно правило, щелчок открывает его источник.
3. Несколько джойстиков и их ID
Программа поддерживает любое количество джойстиков. Каждый получает постоянный ID: у Bluetooth-геймпада это его MAC-адрес, поэтому два одинаковых DualShock различаются. По ID программа сама находит настройки джойстика при подключении — даже в другой USB-порт.

| Элемент строки | Что делает |
|---|---|
| × | Убрать джойстик из профиля вместе с его настройками. |
| Первая галочка | Работает: для джойстика создаётся виртуальный Xbox-геймпад. |
| Вторая галочка | Выбран: участвует в групповых операциях. |
| Имя | Щелчок — настраивать этот джойстик. Двойной щелчок — переименовать. |
| ID | Щелчок — скопировать ID в буфер обмена. |

Групповые операции
- Применить отмеченным — копирует все настройки выбранного (▶) джойстика на джойстики с галочкой «выбран».
- Отметить все / Снять все — быстро расставить галочки.
- Джойстик → файл — сохранить настройки одного джойстика в отдельный файл .joy.json.
- Файл → джойстик — загрузить настройки из файла только в выбранный джойстик. Если отмечены другие — программа спросит, применить ли всем отмеченным. Подходит и обычный файл профиля: если в нём несколько джойстиков, программа предложит выбрать, чьи настройки взять.
4. Профили и файлы
Профиль — это полный набор: все джойстики и настройки каждого. Профилей может быть сколько угодно, например под разные игры.

- Активировать, Новый, Дублировать, Переименовать, Удалить — работа с профилями.
- Сохранить в файл… / Загрузить из файла… — профиль целиком.
- Блок «Настройки одного джойстика» — сохранить или загрузить файл конкретного джойстика в любом профиле, даже неактивном, и Убрать из профиля.
- ● — у джойстика есть свои настройки; ○ — он ещё не настраивался и берёт общие настройки профиля.
5. Триггеры L2 / R2

| Настройка | Как работает |
|---|---|
| Мин | Порог входа: всё, что ниже, — ноль, а оставшийся ход растягивается на полный диапазон 0–255. Пример: Мин = 10 убирает дребезг, но курок по-прежнему даёт полный газ. |
| Макс | Ограничение выхода сверху: игра никогда не получит больше этого значения. |
| Мёртвая зона | Сырое значение ниже порога превращается в 0 без растяжения. |
| Кривая | −20 — мягкий старт, точный контроль в начале хода; +20 — резкий отклик. |
| Мгновенно в 0 / в максимум | Отпущенный до конца или дожатый до упора курок срабатывает без задержек. |
| Вычитать L2 из R2 | Для гонок: тормоз ослабляет газ, Множитель задаёт силу. Есть и обратный вариант. |
| НАЖАТИЕ / ОТПУСКАНИЕ | Участки плавности: на выбранной части хода значение растёт или падает не мгновенно, а с задержкой в мс на единицу. До 10 участков, пересечения складываются. |
6. Стики и дрейф

- Включить ремап / свои мёртвые зоны — главная галочка. Без неё значения мёртвых зон не применяются.
- Внутренняя мёртвая зона — убирает дрейф стика в центре. Обычно 8–15 %.
- Внешняя мёртвая зона — край хода, где стик считается выведенным до упора.
- Макс. диапазон X / Y, Растянуть, Всегда максимум — ограничить или усилить ход по каждой оси.
- Чувствительность X / Y — кривая отклика.
- ОТКЛОНЕНИЕ / ВОЗВРАТ — участки плавности, как у триггеров; у каждого участка галочки X и Y — на какие оси он действует.
7. Макросы: основа
Макрос — правило «источник в состоянии → действие над другим элементом». Источником бывает:
- участок хода стика или триггера — макрос работает, пока значение в его диапазоне;
- кнопка — макрос работает, пока она нажата (раздел 11).
Макрос на участке стика или триггера
- Откройте окно стика или триггера и создайте участок.
- Щёлкните по номеру участка — 1 +.
- Откроется картинка геймпада — щёлкните по цели: кнопке, триггеру или стику. У стика затем выберите направление.


Все параметры правила

| Параметр | Смысл |
|---|---|
| Цель | На какой элемент действует макрос. |
| Режим | Что именно происходит с целью — раздел 8. |
| Направление стика | Для источника-стика: любое, только вверх/вправо или только вниз/влево. |
| Вых. от / до | Какие значения получает цель. Реверс — источник растёт, цель падает. |
| Сочетание с физическим | Большее из двух; Заменить физическое; Сложить — прибавить к тому, что вы жмёте физически, и к другим макросам с тем же приоритетом и тем же режимом «Сложить». |
| Приоритет | Если на одну цель действуют несколько макросов, побеждает больший. При равном «Отключить» сильнее всех. |
| Задержки | Срабатывание и отпускание в микросекундах: 10 000 = 10 мс. Срабатывание — источник должен продержаться в диапазоне это время. |
8. Режимы макросов
| Режим | Что делает | Пример |
|---|---|---|
| Следовать | Цель повторяет источник: его диапазон пересчитывается в выходной диапазон цели. Только для источника-стика или триггера. | Стик вперёд плавно жмёт газ. |
| Держать | Пока источник активен, цель нажата со значением «Вых. до». | L1 держит L2 зажатым. |
| Импульс | При входе в диапазон цель нажимается один раз на заданное время. | Короткое нажатие A при резком отклонении стика. |
| Переключатель | Каждый вход включает или выключает цель. | Одно нажатие — присесть, ещё одно — встать. |
| Турбо | Пока источник активен, цель нажимается и отпускается с заданным периодом. | Автоогонь. |
| Отключить | Цель заблокирована, даже если нажата физически. Работает и для всего стика. | Отключить стик, пока зажат L2. |
| Последовательность | Цепочка шагов: элемент, значение, сколько держать, пауза — раздел 10. | Комбо-удар одной кнопкой. |
9. Комбинации: условия
Условия отвечают на вопрос «что делать, если нажаты два элемента и больше». Макрос сработает, только когда выполнены все условия. Условием может быть:
- кнопка — она нажата;
- триггер или стик — его значение попало в диапазон, например «L2 продавлен больше половины: 128–255»;
- любое из них с галочкой наоборот — кнопка НЕ нажата или значение ВНЕ диапазона.
На одно правило — до четырёх условий.

10. Последовательности
Одно срабатывание — целая серия действий по времени. Каждый шаг: элемент, значение (для кнопки любое больше нуля = нажата), сколько держать и пауза после. До 16 шагов. Галочка повторять по кругу крутит серию, пока источник и условия держатся.


11. Макросы кнопок

- + Макрос (выбрать на джойстике) — добавить правило и выбрать цель.
- Полностью отключить кнопку — в игру кнопка не передаётся, а её макросы продолжают работать. Так кнопку можно целиком переназначить.
- Все режимы, условия и последовательности работают так же, как у стиков и триггеров.
12. Все макросы и сцепление

- Включение, приоритет, ⚙ и × — прямо в таблице. Щелчок по источнику открывает его окно.
- Красным подсвечены конфликты: два макроса на одну цель с одинаковым приоритетом, когда неясно, кто победит.
- Удалить все макросы — начать с чистого листа.
- Сцеплять макросы — результат одного правила становится источником для другого. Например, «× → L2» и «L2 в диапазоне → R1» сработают цепочкой от одного нажатия ×. По умолчанию выключено: так готовые профили работают как раньше. Глубина ограничена тремя проходами, зациклиться нельзя.
Как макросы видно на картинке геймпада
- Зелёные линии идут от источника к цели. У последовательности линии ведут к каждому элементу, подписи #1, #2, #3 — номера шагов.
- Полоски под элементом — шкала 0–255: зелёная у источника показывает диапазон срабатывания, оранжевая у цели — выходной диапазон.
- Зелёная точка — на элементе есть макросы.
13. Маппинг действий
Простое переназначение «вход → выход» с порогом срабатывания, удержанием и таймингами — общее для профиля.

14. Готовые рецепты
Убрать дрейф стика
Стик → Включить ремап / свои мёртвые зоны → внутренняя мёртвая зона 10–12 %. Проверьте по живому графику: в покое линия выхода должна лежать на нуле.Убрать дребезг триггера, не теряя полного хода
Триггер → Мин = 5–10. Всё ниже станет нулём, а оставшийся ход растянется до 255.Плавный газ для гонок
R2 → Разбить 0–255 на N = 3 в блоке НАЖАТИЕ, задержка 1–3 мс/ед. на первом участке. Кривая −5…−10 для точного начала хода. При желании — Вычитать L2 из R2.Комбо двух кнопок: L1 + × → R2
Кнопка × → + Макрос → цель R2, режим Держать → ⚙ → условие L1. Без L1 кнопка × работает как обычно.Одна кнопка — серия ударов
Кнопка → макрос → ⚙ → режим Последовательность → шаги × → □ → △ по 60/60 мс. Для непрерывной серии — повторять по кругу.Автоогонь
Кнопка R1 → макрос с целью R2 → режим Турбо → период 80–120 мс.Два игрока на двух геймпадах
Подключите оба геймпада — каждый появится в списке со своим ID. Настройте первый, отметьте второй галочкой «выбран» и нажмите Применить отмеченным. Дальше каждый настраивается отдельно.Перенести настройки на новый джойстик
Старый джойстик → Джойстик → файл. Новый джойстик — щелчок по имени → Файл → джойстик.15. Если что-то не работает
| Симптом | Причина и решение |
|---|---|
| Правки «не работают» | Скорее всего, настраивается отключённый джойстик — строка «Настраивается» оранжевая. Щёлкните по имени подключённого. |
| Триггер сам дёргается | Проверьте макросы со стика на этот триггер: дрейф стика включает макрос. Нужна мёртвая зона стика (раздел 6) или диапазон источника макроса от 10. |
| В игре персонаж «двоит» | Игра видит и настоящий геймпад, и виртуальный. Установите HidHide: вкладка Applications → «+» → добавьте JoyControl.exe; затем вкладка Devices → галочка на Wireless Controller; переподключите геймпад. Порядок важен: сначала программа в белый список, потом скрытие. |
| Игра не видит геймпад | Проверьте Драйвер ViGEmBus: OK и первую галочку «работает» у джойстика. |
| Пятый джойстик не виден в игре | Ограничение Windows: XInput отдаёт играм не больше четырёх геймпадов. |
| Второй DualShock не подключается по Bluetooth | Удалите старые записи «Wireless Controller» в настройках Bluetooth, сбросьте геймпад скрепкой (отверстие сзади у L2), включите режим сопряжения Share + PS до частого двойного мигания. Или просто подключите кабелем. |
