1. Пожалуйста, внимательно прочитайте правила раздела.
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Эмуляция руля или джойстика (vJoy + FreePIE)

Тема в разделе "Кладезь мудрости", создана пользователем Awasaky, 25 янв 2016.

  1. Awasaky

    Awasaky

    Регистрация:
    23 окт 2004
    Сообщения:
    883
    И так, Colin McRae Rally теперь старая игра :crazy: (в порядке ворчания)
    Да и вообще по гонкам можно сходить с ума всегда или набегами.
    Но есть ситуация, которая неприятна многим любителям игр про гонки - это что управление во многих играх про "нечто ездящее" на PC обычно это совсем даже пошлые стрелочки, а хочется чего-то более точного, тем более что мышка в большинстве гонок обычно или вообще не задействована, или задействована в меню, максимум.
    Озаботившись покупкой гоночного железа, быстро обнаружил, что данное железо занимает на столе и в квартире столько места, что хочется его не точно убрать, а просто выкинуть.
    Если попытаться обмануть старую игру и подсунуть вместо джойстика один из стиков геймпада, то быстро обнаружится, что управление таким образом имеет заметное замедление реакции, вызванное сложностью быстрой перекладки стика справа налево, например.

    Поиграв в Live for Speed обнаружил идеальную реализацию управления на PC - когда руль поворачивается движениями мыши, а газ и тормоз на левом и правом клике соответственно.

    Увы и ах, в большинстве гоночных игр до сих пор стрелочки, для обладателей обычных ПК - единственная возможность играть в гонки. Но голь на выдумки хитра и для относительно старых компьютеров появилась система, в которой движения мышки преобразовывались в отклонения джойстика. Это JMOUSE, PPJoy + GlovePIE, вот только совместимости с новыми системами Vista и новее у них не было.

    В итоге мне удалось найти и что немаловажно заставить работать систему и под относительно новыми Vista, Win7, может быть это будет работать и под Win 8, 10.

    Программа эмулятор джойстика - vJoy.
    Скачать тут - http://vjoystick.sourceforge.net/site/
    Критически важный момент в установке эмулятора - это отключение Force Feedback и отключение лишних кнопок и осей в утилите конфигурации джойстиков, см под катом:
    Скриншот утилиты настроек

    Далее ставим программатор джойстика, это программа FreePIE - младший братик GlovePIE.
    Скачать тут - http://andersmalmgren.github.io/FreePIE/
    Язык программирования используется Python, впрочем читателям данной темы не понадобится даже он.

    Наконец, качаем скрипты https://yadi.sk/d/ak2WEywcni5rf
    в архиве два файла:
    1. mouse_joy_multiscale.py - скрипт для игр, без захвата мышки, например Colin McRae Rally, ToCa Race Driver.
    2. mouse_joy_offscreen.py - скрипт для игр, с захватом мышки например F1 Racing Simulation 3, Colin McRae Rally 2.0.
    3. mouse_joy_multiscale+WSAD.py - добавлен отдельно скрипт для игры Colin McRae Rally 3 под Windows 10 https://yadi.sk/d/mp2m_dfWu36Cq клавиши QWEASD - эмулируют кнопки джойстика 1-6. Газ рекомендую ставить все таки на кнопки. Чтобы игра не вылетала, запустите её в режиме совместимости с Windows 7, а в настройках vjoy-устройства включите Force Feedback (в самой игре его включать не нужно).
    Скрипты естественно можно редактировать на свое усмотрение, тем более, что я и сам не ахти программист и в процессе реализации их, постарался обильно сдобрить комментариями, которые упрощают понимание работы.

    Запускаем FreePIE, открываем в нем подходящий скрипт, далее выбираем в меню Script - Run Script или нажимаем F5.
    Далее нажимаем Caps Lock (кнопку активации в скрипте) и убеждаемся во вкладке Watch, что джойстик слушается мышки.
    При активации скрипта, мышиные кнопки работают как кнопки джоя, конкретно это клавиши левый и правый клик, а так же 2 боковые кнопки, если они у вас на мышке есть.
    Средняя кнопка мыши или нажатие на колесико - центрирует виртуальный джойстик.
    Квадратные скобки "[" и "]" - используются для изменения чувствительности джойстика. Причем ее можно изменять в довольно широких пределах, вплоть до инвертирования - будьте внимательны.
    UPD: Добавлено отключение вертикальной оси при работающем виртуальном джойстике, через клавишу \ (Backslash)

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

    Проехал как смог, шумахер из меня не выйдет :pilot:
    Видео из Colin McRae Rally
     
    Последнее редактирование: 17 сен 2016
    Eraser, 01d1, Sharp_ey и ещё 1-му нравится это.
  2.  
  3. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.138
    мёртвая зона же регулируется, как и время отклика... XPADDER давно уже решил эту проблему.
    Кроме того на руле это тоже присутствует, даже на реальном - колёса не меняют положение мгновенно.
    А управление мышкой в автосимуляторах... ну в авиасимуляторах нужнее всё же.

    В любом случае - материал полезен. Грац.:good:
     
  4. AlexDC

    AlexDC

    Регистрация:
    30 мар 2009
    Сообщения:
    1.611
    Я ограничился Xoutput + XInput, позволяют работать с Xinput устройством как с DirectInput, и использовать отдачу там где нужно(за это отвечает драйвер XInput). Таким образом и в эмуляторы играю на боксовом паде.
     
  5. Awasaky

    Awasaky

    Регистрация:
    23 окт 2004
    Сообщения:
    883
    Почему-то не могу отредактировать первый пост - под Windows 10 и драйвер и управляющая программа работают. А вот сами Колины макрей ралли - уже нет.
    Первая часть падает на втором заезде.
    Вторая часть более менее идет, но почему-то имеется граница окна.
    Третья, четвертая и пятая части работают ок, но не позволяют подключить никакое устройство управления кроме клавиатуры - креш после назначения клавиш, на этапе включения/отключения обратной связи.
     
  6. kreol Старший офицер Чёрной Гвардии

    kreol

    Администратор

    Регистрация:
    2 июл 2007
    Сообщения:
    101.034
    @Awasaky, могу дать права куратора темы (к тебе полное доверие) - тогда сможешь редактировать.
    --- добавлено 8 авг 2016, предыдущее сообщение размещено: 8 авг 2016 ---
    В общем, кураторство выдано - проверь.
     
  7. Awasaky

    Awasaky

    Регистрация:
    23 окт 2004
    Сообщения:
    883
    Небольшое добавление для тех, кто владеет 3-4х осевым джойстиком, и хочет играть в игры "как с рулем".
    Скрипт, который объединяет оси поворота стика, с осью наклона стика влево-вправо на одну ось виртуального джойстика.
    То есть если вы наклоняете реальный джойстик на на 100% влево или вправо, то виртуальный джойстик/руль, отклоняется всего лишь на 33%.
    При этом, если вы поворачиваете стик в какую-либо сторону, то или вы усиливаете наклон виртуального стика еще на 66%, или соответственно противодействуете наклону оси.
    Полученная схема, опробована мной на Porsche Unleashed и действительно, так значительно удобнее играть, чем с рулем или одно-осевым контролем оси на джойстике.
    Потому, что основной угол поворота руля задаешь поворотом стика, а уточняешь поворот руля - наклоном стика. В результате в заносе, машину можно спокойно выловить чисто наклонами стика, без страха контр-заноса в противоположную сторону - руль легко перекладывается и незначительно отклоняется.
    Странно, что такая схема самими производителями джойстиков не сделана основной, просто потому это расширяет область применения много-осевого джойстика.

    Скрипт - объединяющий на виртуальном джойстике 2 оси реального джойстика. В моем случае это был Cobra M5:
    https://yadi.sk/d/YLwqLAgLvJNgZ (продублирован в аттаче)
     

    Вложения:

    • Summ-2-axis.zip
      Размер файла:
      870 байт
      Просмотров:
      167
    Последнее редактирование модератором: 16 окт 2016
    ivanhoeivanhoe нравится это.
  8. black1

    black1

    Регистрация:
    10 окт 2016
    Сообщения:
    1
    Блин, спасибо! все круто, хотел в Grid3, но когда назначаю кнопки он не хочет ось Х брать, пытаешься назначить На Лево он делает, а когда делаешь на Право, он переназначает... как быть, конфиги не нашел..

    Кароч что то получилось DiRT 3 - Complete Edition\actionmap
    в опциях управления появилась возможность выбора!)

    xml вот создал для vJoy Device.xml
    и все пашет также actionMapPaths.xml прописать строчку
    Код:
    <xmlreader processor="ActionMap2" filename="actionmap/vJoy Device.xml" map="UPDATE" pool="UPDATE_TEMPORARY" />

    Код:
    <!-- Action map for a default Direct Input device -->
    <!-- Defaults:          deadZone: 0.2f          saturation: 0.8f          threshold: 0.5f -->
    <ActionMap actionMapName="vJoy Device" deviceName="vJoy Device" priority="3">
    
      <!-- In Game Actions -->
       <Action actionName="Accelerate">
        <Axis axisName="vk_code_0x26">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
        <Axis axisName="vk_code_0x68">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
        <Action actionName="Brake">
        <Axis axisName="vk_code_0x28">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
        <Axis axisName="vk_code_0x62">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Handbrake">
        <Axis axisName="vk_code_0x51">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Steer Left">
        <Axis axisName="di_x_axis">
          <CalibratorSimple type="biDirectionalLower" deadZone="0.0" saturation="1.0" />
        </Axis>
        <Axis axisName="di_dpad_0_left">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Steer Right">
        <Axis axisName="di_x_axis">
          <CalibratorSimple type="biDirectionalUpper" deadZone="0.0" saturation="1.0" />
        </Axis>
        <Axis axisName="di_dpad_0_right">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
        <Action actionName="Change View">
        <Axis axisName="vk_code_0x43">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Gear Up">
        <Axis axisName="vk_code_0x53">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Gear Down">
        <Axis axisName="vk_code_0x41">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Look Left">
        <Axis axisName="vk_code_0x2E">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Look Right">
        <Axis axisName="vk_code_0x23">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Look Up">
        <Axis axisName="vk_code_0x21">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Look Down">
        <Axis axisName="vk_code_0x22">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Look Back">
        <Axis axisName="vk_code_0x57">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Pause">
        <Axis axisName="vk_code_0x1B">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Instant Replay">
        <Axis axisName="vk_code_0x70">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Horn">
        <Axis axisName="vk_code_0x58">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
    
      <!-- Menu Actions -->
      <Action actionName="Menu Left">
        <Axis axisName="vk_code_0x25">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
        <Axis axisName="vk_code_0x64">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Right">
        <Axis axisName="vk_code_0x27">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
        <Axis axisName="vk_code_0x66">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Up">
        <Axis axisName="vk_code_0x26">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
        <Axis axisName="vk_code_0x68">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Down">
        <Axis axisName="vk_code_0x28">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
        <Axis axisName="vk_code_0x62">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Select">
        <Axis axisName="vk_code_0x0D">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Back">
        <Axis axisName="vk_code_0x1B">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Button3">
        <Axis axisName="vk_code_0x70">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Button4">
        <Axis axisName="vk_code_0x71">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Menu Start Button">
        <Axis axisName="vk_code_0x0D">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Fe View Tweak Left">
        <Axis axisName="vk_code_0x41">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Fe View Tweak Right">
        <Axis axisName="vk_code_0x44">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Fe View Tweak Up">
        <Axis axisName="vk_code_0x57">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Fe View Tweak Down">
        <Axis axisName="vk_code_0x53">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Fe View Tweak In">
        <Axis axisName="vk_code_0x45">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Fe View Tweak Out">
        <Axis axisName="vk_code_0x51">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
    
      <!-- Replay Actions -->
      <Action actionName="Replay Rewind">
        <Axis axisName="vk_code_0x71">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Fast Forward">
        <Axis axisName="vk_code_0x72">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Pause">
        <Axis axisName="vk_code_0x70">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Next Camera">
        <Axis axisName="vk_code_0x77">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Prev Camera">
        <Axis axisName="vk_code_0x76">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Jump In">
        <Axis axisName="vk_code_0x7B">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Exit">
        <Axis axisName="vk_code_0x1B">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay UI On Off">
        <Axis axisName="vk_code_0x78">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Replay Youtube">
        <Axis axisName="vk_code_0xA0">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Youtube Drag Left">
        <Axis axisName="vk_code_0x76">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Youtube Drag Right">
        <Axis axisName="vk_code_0x77">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Youtube Speed Up">
        <Axis axisName="vk_code_0x26">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Youtube Speed Down">
        <Axis axisName="vk_code_0x28">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Youtube Upload">
        <Axis axisName="vk_code_0x7B">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Youtube Exit">
        <Axis axisName="vk_code_0x1B">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
    
    
      <!-- Spectator Actions -->
      <Action actionName="Spectator Next Camera">
        <Axis axisName="vk_code_0x77">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Spectator Previous Camera">
        <Axis axisName="vk_code_0x76">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Spectator UI On Off">
        <Axis axisName="vk_code_0x70">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Spectator List On Off">
        <Axis axisName="vk_code_0xA0">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Cycle Forward On Board Cameras">
        <Axis axisName="vk_code_0x77">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Activate Replay System">
        <Axis axisName="vk_code_0x76">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
    
      <!-- 3D stereo rendering Actions -->
      <Action actionName="SeparationInc">
        <Axis axisName="vk_code_0x32">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="SeparationDec">
        <Axis axisName="vk_code_0x31">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="ViewPlaneInc">
        <Axis axisName="vk_code_0x34">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="ViewPlaneDec">
        <Axis axisName="vk_code_0x33">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
    
      <!-- Dev Actions (should be added in code) -->
      <Action actionName="Temp Left Shoulder">
        <Axis axisName="vk_code_0x70">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
      <Action actionName="Temp Right Shoulder">
        <Axis axisName="vk_code_0x71">
          <CalibratorSimple type="uniDirectionalPositive" />
        </Axis>
      </Action>
    
    </ActionMap>
    
     
    Последнее редактирование: 10 окт 2016
    Awasaky нравится это.
  9. NekoSukaSoul

    NekoSukaSoul

    Регистрация:
    12 сен 2019
    Сообщения:
    1
    У меня трабл, длл файл по версии не сходится с дровами , причем именно длл файл (скрипт) старее чем дрова т.т
    хелп
    --- добавлено 12 сен 2019, предыдущее сообщение размещено: 12 сен 2019 ---
    upload_2019-9-12_23-37-41.png Вот скрин для понимания ситуации :)
     
  10. Awasaky

    Awasaky

    Регистрация:
    23 окт 2004
    Сообщения:
    883
    Это предупреждение, а не ошибка, мешать работе оно не должно. Обратите внимание, что написано это сообщение в консоли, а не в ошибках.
     
  11. zeews77

    zeews77

    Регистрация:
    5 июн 2020
    Сообщения:
    1
    Хочу в скрипт добавить зажатие клавиши,как это сделать?
     
  12. drift dadada

    drift dadada

    Регистрация:
    8 ноя 2020
    Сообщения:
    1
    Привет, дело такое. Установил, работало. Сегодня захожу, не работает. Так загружается и пишет всё ОК. Потом нажимаю Caps Lock (репорты видны) пишет что сделать что бу убрать проблему? upload_2020-11-8_21-6-51.png
    --- добавлено 8 ноя 2020, предыдущее сообщение размещено: 8 ноя 2020 ---
    Всё заработало, другую версию установил.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление