You are not logged in.
Сразу скажу что я всего пару дней как заинтересовался CLEO, еще толком ничего не разобрал, но я заметил что в мануалах и сабжах вообще нет ничего связанного с геймпадом! Все используют клавиатуру, в лучшем случае мышь, в списке инпутов вообще ничего о геймпаде не сказано, только клава и мышь.
Клео принципиально с геймпадом не дружит или автор просто не использовал сей девайс при разботке? Можно ли байндить фичи на кнопки пада в клео скриптах?
Кто нибудь исследовал как III\VC\SA общается с падом через dinput?
И самый важный вопрос - кто нибудь сможет по описанию моей идеи написать CLEO скрипт для всех 3 игр, для фикса недоработок управления с геймпадом?
Конечно для VC и SA рейсер сделал пару мемхаков, Advanced control, но они слишком неудобные и внешние, а вся прелесть ASI и CLEO в том, что их можно использовать добавил и расширив функционал внутри игры, от чего клео и аси скорей напоминают неофициальные патчи, что намного лучше всяких внешних утилит, да и для гта 3 подобной утилиты нет, а там с управлением с пада самый ад.
У меня тут есть несколько идей, как сделать игру удобней при управлении с пада:
1) Изучить исходники SAAC 2 для того чтобы разобраться с тем как работает сабж
2) так сказать портировать его логику и фиксы в виде ASI или CLEO (последняя предпочтительней) чтобы все это работало в игре нативно.
Дальше уже у меня список необходимых изменений и добавлений общий для 3х игр:
1) Отключить использование кнопок DPAD как дубликата Левого министика
2) Позволить игре распознавать независимо 4 напраления DPAD как 4 дополнительных кнопки (либо как Joy 13-16 на манер первых анриал игр, либо лучше как полагается как POV1-3 Up\Down\Righ\Left) чтобы байндить кнопки POV1 U\D\L\R на любые действия так же как и JOY1-32, что даст в общей сложности 12 дополнительных кнопок.
Что это даст? Ну в 3 и Вайсе можно будет забайндить запись реплеев с F1-F3 на кнопки дипеда, что позволит с комфортом развалить ленивые задницы на диване и не отвлекаться на клаву.
А в сан андреасе позволить как на ПС2 и Боксе использовать dpad для ответов Да/Нет и групого выбора вверх и вниз (не помню как правильно эта фича называется), которые от лени и ошибок рокстаров, в пк версии хрен забайндишь на дипед. Так же 4 лишних дипед кнопки не повредят для кастом фунции многих клео скриптов, ибо на свете есть не мало людей, которые играю на паде, и которых просто бесит, что для активации некоторых вашиз модов, нужно тянуться к клаве и судорожно искать на ней кнопку, на которую вы забили включение вашей суперфичи.
3) Отключить нативный неизменяемый байнд всех поддерживаемых Dinput осей
4) позволить так же как и в случае с дипедом, байндить независимо каждую ось в позитивном или негативном состоянии, не забыв при этом про то что она аналоговая (то есть сохранить ее нативный аналоговый режим), всего dinput поддерживает 8 разных осей в позитивном и негативном состоянии:
X,Y,Z,RX,RY,RZ,Slider1,Slider2 , с учетом позитивного и негативного смещения от центра получается 16 направлений, которые в игровом меню должно дать до 16 дополнительных кнопок, причем АНАЛОГОВЫХ (так как их нажатие измеряется грубо говоря в процентах от 0 до 100% что в теории позволяет на одну полуось при разной глубине нажатия назначить несколько разных функций, как например в ГТА 4 если зажать левый аналоговый триггер Z-negative то вместо автоприцела получаете свободное прицеливание, а в случае с управлением машиной, аналоговая ось позволяет плавно регулировать скорость машины, а при ходьбе плавно менять скорость перемещения от медленного шага до бега, чего на клавиатуре никогда не получится добиться и что является важнейшим преимуществом пада перед клавой).
Если кто не понял из текста в скобкаъ что это даст, то еще раз поясню - кроме возможности аналогово управления скоростью машины с помошью триггеров, это так же позволить полноценно использовать Xbox 360 controller и ему подобные девайсы, которые имеют 10 кнопок или боле 4х аналоговых осей. В данный момент использование 360 контроллера затруднено тем, что вместо цифровых кнопок 11 и 12, там есть 2 аналоговых триггера являющихся полуосями Z, которые ни одна из ГТАшек до 4ой части не распознает.
Тут я должен поддчеркнуть что важно сохранить аналоговое перемешение на ногах, так чтобы вместо WASD можно было забить Y+\X-\Y-\X+ и герой бы не перещался с фиксированной скоростью как на клаве, а так же плавно менял бы скорость как на паде по умолчанию, тоже самое касается байнда поворот камеры в 4х направлениях.
Так же при байнде аналоговой оси на ускорения и задний ход машины, важно чтобы игра научилась отличать цифров joy 1-32 от аналоговой оси и при ее выборе выдавала бы аналоговое управление скоростью машины. Скорей всего игра нативно поддерживает такой функционал для перемещения машины, но возможно придется написать сабрутину, но логика и реализация очень простая -
если зажал полуось на 65% то получи ускорение машины до 65% от ее максимальной скорости, а если зажал до 100% то получи полной ускорение так же как при использовании цифровых кнопок пада или клавы. Вы тут умудряетесь трамваи в Сани людьми напичкать и заставить у светофоров тормозить, а уже такая фигня как привязка аналоговой оси к скорости машины для вас раз плюнуть))
5) У рокстар большая беда с назначением хардкодед кнопок, которые никак нельзя переназначить, важная функция, котору никакль нельзя забить на геймпад - это выход в меню, оно по умолчанию привязано только к ESC и настройка управления отсутсвует пункт назначения кнопок на выход в меню - это надо исправить, добавить последний пункт "Menu" и возполить ребайндить ESC на любую клавишу как клавы так и пэда, потому что это реально бесит, с падом ты никак не можешь выйти в меню и посмотреть карту, постоянно приходится тянуться к клаве.
6) Так же можно добавить 3 функции управления реплеями и пару других хардкодед фишек, вроде пропуска мп3, чтобы и их можно было ребайндить, в том числе и на пад.
7) по возможно добавить распознавание 1 цифровой клавиши как нескольких независимых, при разном поведении. Сейчас поясню подробней:
Во многих консольных играх, при игре с падом наблюдается нехватка клавиш, от чего разработчики приходят к простому решению - назначают на одну клавишу несколько функций, но активируют их либо контекстно (что убого, имхо) либо в зависимости от того как вы нажали клавишу, именно последнее и нужно реализовать. Наиболее распространенные методы:
стандартное нажатие клавиши (tap\push), очень быстрое нажатие клавиши (quick tap), медленное и длительное нажатие (hold), быстрое двойное нажатие (double tap), комбинация 2х клавиш (hold+tap).
Про первую пояснять не буду, стандартный тайминг, во второй тайминга как миниму в 2 раз короче, в третей в полтора-два раза длинней, в четвертой общий тайминг двойного нажатия примерно равен таймингу стандартного одинарного нажатия, а комбо работает так, если при зажатии одной клавиши (hold) нажат другая, но исполнения закрепленной за каждой функции прекращается и начинает исполняться функция назначенная на комбинацию. Если обе клавиши нажаты одновременно, то в при правильной настройки тайминга одиночные функции обоих клавиш не должны успеть активироваться, для этого вводят небольшую задержку с нескольких долях секунды, если до ее окончания успевает нажаться вторая клавиша, то исполнение первой не начинается, если вторая не нажата до окончания задержки, то начинает выполняться функция первой. При отжатии одной из клавиш начинает исполняться функция назначенная на одинарное действие.
В общем пока я вас окончательно не запутал скажу так - здесь вся фишка в том, чтобы в ГТА при байнде кнопки, отображалась одна кнопка в нескольких состояниях Joy 1 (hold) Joy 1 (quick tap) и при байнде этой клавиши но в другом состоянии и на другую функцию, чтобы первая не сбрасывалась, короче чтобы 1 клавиша в разных состояниях считалась за несколько разных.
Таким образом каждая из 32 возможных клавиш может иметь как минимум 4 состояния и виртуально дать до 128 "кнопок", а если еще добавить поддержку комбо, то число "виртуальных" кнопок в разных комбинация становится довольно большим, но гта может обойтись и без комбо, это пригодилось бы лишь для кастом функций разных клео и аси модов.
Добавить в вайс сити и гта 3, при выборе классического режима ввода, меню с настройками пада, а не мыши, как это сделано в сан андреасе, с возможностью реверсировать оси и даже поменять их местами. Этой функции очень нехватает в гта 3 и вайсе, где целится довольно затруднительно из-за того что при нажатии вверх, камера уходит вниз и наоборот, при том что лево и право не реверсированы.
Но и тут есть но, есть несколько режимов, как например при езде на байке, где в отличии от стрельбы и ходьбы реверсирование y оси не нужно, по этому стоит позаботиться о разделении этих режимов и реверсировать ось не во всех.
Так же это меню должно быть динамическим и либо отображать только забайнденные оси, либо отображать все 8, вместо 4х имеющихся в сан андреасе.
9) Добавить настройку чувствительности каждой оси или чувствительности перемещения и прицеливания, а так же настройку ускорения осей (опять же желательно разделить оси для перемещения и оси для прицеливания)
10) чисто косметически - добавить опцию выбора типа пада, отображаемого в хаде - PC\PS2\Xbox\Nintendo и в случае с PC отображать во всех подсказках кнопки как есть - joy1 etc, при выборе PS2 тащить из рудиментов PS2 хада кнопки с треугольниками квадратами, в случае с Xbox и Nintendo совместимыми падами, тащить текстуры из дополнительного txd файла или добавленные во fronten.
Думаю для начала этого хватит, у кого будут какие идеи и предложения реализации всего этого и возможно ли это с помощью клео?))
Offline
Ох ёмаё.... Да тут про клео вообще вспоминать не надо. Геймпад может использоваться клео, но максимум для проверки клавиш (Тех, что меняются в управлении и распознаются игрой). Если все остальное хоть как-то более менее можно сделать (И то в мечтах), убив кучу времени, то распознавание степени "зажатости" стика на геймпаде, чтобы ограничивать скорость хода/езды в клео невозможно (В конце концов если писать плагин на c++, то получается, что придется свой драйвер на геймпад писать, чтобы получать информацию о кнопках и судя по их состояниям менять что-то в игре (Да и код игры предварительно расшарить/изменить придется, например: изменить кнопку выхода в меню - но это самое простое из всего списка)).
"уже такая фигня как привязка аналоговой оси к скорости машины для вас раз плюнуть" - да, это легко, но откуда же получать информацию о степени зажатости кнопки...
Поправте, если windows'овскими методами можно получать полную информацию о контроллерах (В панели управления ведь получается). Ну или использовать стандартный драйвер, который устанавливает винда при подключении устройства.
Last edited by Jack Daniel's (30-07-2011 19:24)
Offline
падом/джойстиком никогда не пользовался, поэтому половина текста осталась мною непонятой).
насчет реализации идей, все что относится к "железу" удобнее реализовать через внешние библиотеки, которые дают гораздо больше возможностей, чем ограниченные скрипты. Т.е. копайте код игры, пишите свою ASI и делайте что хотите с поддержкой геймпадов. CLEO тут вряд ли поможет.
Offline
Я сейчас не могу добраться до исходников, но общий принцип такой: есть два объекта - CPad и CInputEvents.
CPad содержит внутри три объекта, которые работают с клавиатурой, мышью и падом.
Данные из них обрабатываются и собираются в события, которые обрабатывает непосредственно игра. События - аналоговые. Дискретные элементы (+X/-X/+Y/-Y) преобразуются в минимальное/максимальное значения аналогового диапазона. Весь игровой код (не моды, а то, что в игре изначально) работает только с событиями.
Offline