суббота, 14 февраля 2026 г.

ETS2 - учим переключать передачи кнопками, но задействовав педаль сцепления (без физической ручной КПП)

Был куплен комплект руль и 2 педали (тормоз и газ), затем решил докупить еще одну педаль - сцепление. Но тут поджидала проблема - игра не хочет работать с педалью сцепления без коробки передач... секвентальная не поддерживает педаль сцепления, только ручная, только хардкор 😎.
Ну пришло сперва самое простое решение - берем и подключаем любой дополнительный геймпад/джойстик и назначаем на нем кнопки на номера передач (главное чтобы кнопок хватило 😊). Да, это работает. но с одним условием - пока сцепление не отпущено или газ на минимуме, необходимо удерживать нужную кнопку.
Немного времени использования такой версии КПП приступил к поиску решения проблемы... Решение было найдено и немного переделано под себя. Ниже предоставленные настройки проверены в ОС Linux Debian, Steam-версии игры 1.58, тягач Volvo, и 3 варианта коробки передач.

Настройка игры через меню.

Первым делом в разделе игры "Кнопки и клавиши", подраздел "Трансмиссия", настраиваем клавиши или кнопки для повышения и понижения КПП, соответственно "Передача вверх" и "Передача вниз".

В разделе "Настройка устройств", подраздел "Трансмиссия". Нас интересует пункт "Трансмиссия" - в нём выбираем "Ручная (с делителем)".
Далее переходим в подраздел "Рычаг КПП". В пункте "Вариант" ставим "С делителем", пункт "Режим ручного переключения передач" устанавливаем "Простой с сигналом".

Выходим из игры и приступаем к следующему этапу.

Корректировка файла настроек игры.

Внимание!!! Настройку выполняем в зависимости от купленной и установленной КПП в Вашем тягаче!

Необходимо найти конфигурационный файл controls.sii, он расположен в библиотеке steam в том месте где игра установлена, по умолчанию домашней папке ~/.steam/steam или если вы добавляли новую директорию то в ней. Переходим по следующему пути в директории библиотеки:

/steamapps/compatdata/227300/pfx/drive_c/users/steamuser/Documents/Euro Truck Simulator 2/steam_profiles/КОД_ПРОФИЛЯ

Где КОД_ПРОФИЛЯ - буквенно-цифровое наименование директории, возможно таких директорий будет несколько, если вы используете несколько аккаунтов steam на одном компьютере для игры.

В данной директории нас интересует файл  controls.sii. На всякий случай сделайте копию файла перед началом внесения правок, например сохраните с именем  controls.sii.bak.

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

Для хранения "номера" передачи я использовал параметры hmdx и hmdy. Возможно они используются для VR, но так как у меня его нет, поэтому ... мне не мешает.

Ищем строки mix с конкретным параметром, см. ниже, которые и будем менять.

Правка для КПП на 6 передач

Подготавливаем "счетчик":

config_lines[295]: "mix hmdx `max(min(memory((gearup | geardown) & gt(clutch, 0.75), hmdy + sel( gearup, 1.0, -1.0 )), 6.0 ), -1.0 )`"

config_lines[296]: "mix hmdy `memory(!gearup & !geardown, hmdx)`"

Нейтраль:

config_lines[481]: "mix gear0 `(gte(hmdx,0.0)&lte(hmdx,0.0)) | semantical.gear0?0`"

Конфигурация передач R + 1..6:

config_lines[534]: "mix gear1 `(gte(hmdx,-1.0)&lte(hmdx,-1.0)) | semantical.gear1?0`"

config_lines[535]: "mix gear2 `(gte(hmdx,1.0)&lte(hmdx,1.0)) | semantical.gear2?0`"

config_lines[536]: "mix gear3 `(gte(hmdx,2.0)&lte(hmdx,2.0)) | semantical.gear3?0`"

config_lines[537]: "mix gear4 `(gte(hmdx,3.0)&lte(hmdx,3.0)) | semantical.gear4?0`"

config_lines[538]: "mix gear5 `(gte(hmdx,4.0)&lte(hmdx,4.0)) | semantical.gear5?0`"

config_lines[539]: "mix gear6 `(gte(hmdx,5.0)&lte(hmdx,5.0)) | semantical.gear6?0`"

config_lines[540]: "mix gear7 `(gte(hmdx,6.0)&lte(hmdx,6.0)) | semantical.gear7?0`" 

Правка для КПП на 12 передач

Подготавливаем "счетчик":

config_lines[295]: "mix hmdx `max(min(memory((gearup | geardown) & gt(clutch, 0.75), hmdy + sel( gearup, 1.0, -1.0 )), 12.0 ), -2.0 )`"

config_lines[296]: "mix hmdy `memory(!gearup & !geardown, hmdx)`"

Нейтраль:

config_lines[481]: "mix gear0 `(gte(hmdx,0.0)&lte(hmdx,0.0)) | semantical.gear0?0`"

Включаем/выключаем первый переключатель режима КПП:

config_lines[528]: "mix gearsel1on `lte( hmdx,-2.0 ) | gte( hmdx, 7.0 ) | semantical.gearsel1on?0`"

config_lines[529]: "mix gearsel1off `!gearsel1on | semantical.gearsel1off?0`"

Конфигурация передач R1..2 + 1..12:

config_lines[534]: "mix gear1 `(gte(hmdx,-2.0)&lte(hmdx,-1.0)) | semantical.gear1?0`"

config_lines[535]: "mix gear2 `(gte(hmdx,1.0)&lte(hmdx,1.0)) | (gte(hmdx,7.0)&lte(hmdx,7.0)) | semantical.gear2?0`"

config_lines[536]: "mix gear3 `(gte(hmdx,2.0)&lte(hmdx,2.0)) | (gte(hmdx,8.0)&lte(hmdx,8.0)) | semantical.gear3?0`"

config_lines[537]: "mix gear4 `(gte(hmdx,3.0)&lte(hmdx,3.0)) | (gte(hmdx,9.0)&lte(hmdx,9.0)) | semantical.gear4?0`"

config_lines[538]: "mix gear5 `(gte(hmdx,4.0)&lte(hmdx,4.0)) | (gte(hmdx,10.0)&lte(hmdx,10.0)) | semantical.gear5?0`"

config_lines[539]: "mix gear6 `(gte(hmdx,5.0)&lte(hmdx,5.0)) | (gte(hmdx,11.0)&lte(hmdx,11.0)) | semantical.gear6?0`"

config_lines[540]: "mix gear7 `(gte(hmdx,6.0)&lte(hmdx,6.0)) | (gte(hmdx,12.0)&lte(hmdx,12.0)) | semantical.gear7?0`"

Правка для КПП на 12+2 передач

Подготавливаем "счетчик":

config_lines[295]: "mix hmdx `max(min(memory((gearup | geardown) & gt(clutch, 0.75), hmdy + sel( gearup, 1.0, -1.0 )), 14.0 ), -4.0 )`"

config_lines[296]: "mix hmdy `memory(!gearup & !geardown, hmdx)`"

Нейтраль:

config_lines[481]: "mix gear0 `(gte(hmdx,0.0)&lte(hmdx,0.0)) | semantical.gear0?0`"

Включаем/выключаем первый переключатель режима КПП:

config_lines[528]: "mix gearsel1on `lte( hmdx,-3.0 ) | gte( hmdx,13.0 ) | semantical.gearsel1on?0`"

config_lines[529]: "mix gearsel1off `!gearsel1on | semantical.gearsel1off?0`"

Включаем/выключаем второй переключатель режима КПП:

config_lines[531]: "mix gearsel2on `gte( hmdx,-4.0 ) & lte( hmdx,-4.0 ) | gte( hmdx,-2.0 ) & lte( hmdx,-2.0 ) | gte( hmdx,7.0 ) & lte( hmdx,14.0 ) | semantical.gearsel2on?0`"

config_lines[532]: "mix gearsel2off `!gearsel2on |semantical.gearsel2off?0`"

Конфигурация передач R1..4 + С1..2 + 1..12:

config_lines[534]: "mix gear1 `(gte(hmdx,-4.0)&lte(hmdx,-1.0)) | semantical.gear1?0`"

config_lines[535]: "mix gear2 `(gte(hmdx,1.0)&lte(hmdx,1.0)) | (gte(hmdx,7.0)&lte(hmdx,7.0)) | (gte(hmdx,13.0)&lte(hmdx,13.0)) | semantical.gear2?0`"

config_lines[536]: "mix gear3 `(gte(hmdx,2.0)&lte(hmdx,2.0)) | (gte(hmdx,8.0)&lte(hmdx,8.0)) | (gte(hmdx,14.0)&lte(hmdx,14.0)) | semantical.gear3?0`"

config_lines[537]: "mix gear4 `(gte(hmdx,3.0)&lte(hmdx,3.0)) | (gte(hmdx,9.0)&lte(hmdx,9.0)) | semantical.gear4?0`"

config_lines[538]: "mix gear5 `(gte(hmdx,4.0)&lte(hmdx,4.0)) | (gte(hmdx,10.0)&lte(hmdx,10.0)) | semantical.gear5?0`"

config_lines[539]: "mix gear6 `(gte(hmdx,5.0)&lte(hmdx,5.0)) | (gte(hmdx,11.0)&lte(hmdx,11.0)) | semantical.gear6?0`"

config_lines[540]: "mix gear7 `(gte(hmdx,6.0)&lte(hmdx,6.0)) | (gte(hmdx,12.0)&lte(hmdx,12.0))| semantical.gear7?0`"

Сохраняем файл настроек и запускаем игру.
Пользуемся назначенными кнопками ранее и выжимом педали сцепления как минимум на 75%.

четверг, 8 января 2026 г.

Добавляем передачу данных из Opentrack для linux в игру ETS2 (steam версия).

Если у вас уже настроен Opentrack в linux системе (я использую Debian), вы столкнетесь с тем что он работает как эмулятор мышки.
Что приносит неудобство его использования, т.к. необходимо возвращать камеру сместив голову в противоположном направлении... ну совсем не то что хотелось бы увидеть в игре.

Настройка Opentrack.

Основные источники.

Источником данных использовался "PointTracker". Для обработки данных о расположении головы я использовал 3 ИК-диода расположенных по модели "Кепка".

В операционной системе windows в opentrack есть опция вывода эмулирующая аппаратное устройство - "трекер", к сожалению в операционных системах семейства linux данный вариант отсутствует. Для игры ETS2/ATS подходящим будет эмуляция геймпада/джойстика, таким образом за выходной интерфейс будет выступать "libevdev joystic reciever". Ниже приведен скриншот главного экрана opentrack с запущенной работой:

Горячие клавиши.

Нажимаем кнопку Настройки и в первой же вкладке назначаем клавишу или комбинацию клавиш для центрирования модели. Я использовал комбинацию клавиш Win+F11:

Выходной интерфейс.

На следующей вкладке настройка выходных данных которые будут поступать от программы в игру. Тут уже зависит от вашего желания и восприятия организма на изменение изображения. Мне достаточно использования 2-х осей - поворота головы влево/вправо и вверх/вниз. Эти оси и будут далее использоваться в настройке конфигурационного файла самой игры. Забегая вперед, у меня одна ось в игре обрабатывалась противоположно повороту головы, поэтому было добавлена опция инвертирования данных:

Tracker.

Следующая вкладка для настройки будет Tracker. Тут выставляем желаемые параметры для вашей вебкамеры и используемой модели. Доработку самой вебкамеры и создание физической модели я тут не рассматриваю.

На вложенной вкладке Камера произведем подстройку работы камеры. Главным критерием для нас это работа камеры с максимально возможной для нее скоростью передачи данных. Поэтому использовалось низкое разрешение и выставлялось желаемое количество FPS. Но на практике у меня максимально полученное соответствовало 15.

Далее вам предстоит настроить блок Изменение точек. К сожалению порог и размеры точек индивидуальны. Это уже вы подстроите по своим ощущениям обработки данных программой. Для облегчения настройки могу порекомендовать расположить окно настроек в центре, а главное окно передвигая мышкой по экрану отслеживать его головой, где вы будете видеть как происходит обработка точек (ИК светодиодов).

На вложенной вкладке Модель. Выбираем вложенную вкладку вашей модели. У меня используется модель Кепка и соответствующая ей вкладка. Укажите соответствующие размеры и проведите калибровку модели используя только две плоскости поворота головы - вверх/вниз и влево/вправо.

Кривые.

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


Настройка игры.

Необходимо найти конфигурационный файл controls.sii, он расположен в библиотеке steam в том месте где игра установлена, по умолчанию домашней папке ~/.steam/steam или если вы добавляли новую директорию то в ней. Переходим по следующему пути в директории библиотеки:

/steamapps/compatdata/227300/pfx/drive_c/users/steamuser/Documents/Euro Truck Simulator 2/steam_profiles/КОД_ПРОФИЛЯ

Где КОД_ПРОФИЛЯ - буквенно-цифровое наименование директории, возможно таких директорий будет несколько, если вы используете несколько аккаунтов steam на одном компьютере для игры.

В данной директории нас интересует файл  controls.sii. На всякий случай сделайте копию файла перед началом внесения правок, например сохраните с именем  controls.sii.bak.

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

Если вы настраивали например оси головы влево/вправо и вверх/вниз, то в строчке параметра input j_look_ud будет наименование необходимого устройства:

config_lines[14]: "input j_look_ud `joy2.ry`"

config_lines[15]: "input j_look_lr `joy2.rx`"

У меня это joy2.
Теперь очистим привязку к нашему устройству данных настроек. Приводим строки к такому виду, удалив содержимое в одиночных кавычках - значения параметра. Наименования в указанных строчках что вы удалите нам пригодятся чуть ниже, поэтому перепишите их себе хотя бы на листик или запомните:

config_lines[14]: "input j_look_ud ``"

config_lines[15]: "input j_look_lr ``"

Далее ищем строку с параметром mix headtron. Например вы найдете вот такие строчки:

config_lines[307]: "mix headtron `c_ht_on & (trackiron | hmdon | eyeposon)`"

config_lines[308]: "mix headtryaw `sel(trackiron, trackiryaw, 0) + sel(hmdon, hmdyaw, 0) + sel(eyeposon, eyeposyaw, 0)`"

config_lines[309]: "mix headtrpitch `sel(trackiron, trackirpitch, 0) + sel(hmdon, hmdpitch, 0) + sel(eyeposon, eyepospitch, 0)`"

Приступаем к корректировке. В первой строчке mix headtron мы оставим только одно значение параметра. В следующих строчках содержащие mix headtryaw и mix headtrpitch допишите ранее найденные значения параметров самое начало после одиночной кавычки. Получаем похожее на это:

config_lines[307]: "mix headtron `c_ht_on`"

config_lines[308]: "mix headtryaw `joy2.rx + sel(trackiron, trackiryaw, 0) + sel(hmdon, hmdyaw, 0) + sel(eyeposon, eyeposyaw, 0)`"

config_lines[309]: "mix headtrpitch `joy2.ry + sel(trackiron, trackirpitch, 0) + sel(hmdon, hmdpitch, 0) + sel(eyeposon, eyepospitch, 0)`"

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

Если все правильно выполнено - пользуемся.
Если после загрузки игры вы немного сместились и в игре расположение отрисовывает не по центру - используйте ранее назначенную в opentrack клавишу.

ПС. Если у вас перепутано влево/вправо с вверх/вниз - поменяйте в последних двух строчках дописанные значения параметров местами.