Lex Kravetski (lex_kravetski) wrote,
Lex Kravetski
lex_kravetski

Category:

Оседлание Вимота

Надо отметить, что трава в детстве была куда зеленее. Сейчас трава качественная, высокотехнологичная, но не так хорошо забирает. Да. Не так. О чём, то бишь, я? Ах да, детство.

В детстве у меня был компьютер БК0010, а чуть позже — ZX Spectrum. В первом 16 килобайт памяти, во втором — сто двадцать восемь. Четыре и шестнадцать цветов соответственно. Скорость процессора я сейчас даже и не вспомню, однако это в те времена было пофиг — один хрен, поменять его нельзя. В общем, процессор тоже медленный. Из-за всего этого об играх уровня Call of Duty 5 даже мечтать не получалось. Про видеть я и не говорю — представить-то ни в какую. Ну, представить, что будут трёхмерные солдатики бегать, фотореалистичные взрывы и война по интернету с американцами, европейцами и китайцами. Просто анриал. Даже человечки три сантиметра высотой воспринимались как мега-технологический прорыв, поскольку ещё буквально позавчера человечек состоял из пары десятков пикселей.

В общем, никаких 3д-шутеров и стратегий в реальном времени с тысячами юнитов не было. Были исключительно простые и прямолинейные игры: бежишь вперёд и во всех стреляешь. Ну или едешь и стреляешь. Или летишь и стреляешь. Многим покажется, что в Ил-2 так же — летишь и стреляешь, — но оно совсем не так. Оно было в плоскости, без даже тени реализма и с бешеной динамикой. Такое до сих пор временами привлекает, но его уже не особо делают. То есть, делают, но в основном на приставках. Но приставки у меня, напротив, нет. Причём, не потому что стоит дорого, а потому что ставить некуда.

Новые времена: ценностью является уже не компакт-диск или некий девайс, а место, куда всё это можно поставить.

Без приставки, ясное дело, игры я получал совсем другие. Тоже очень клёвые, но тех, старых прямолинейных не хватало. Особенно не хватало игр стиля «надери их всех», килл-эм-оллеров — это когда бравый пацан идёт вперёд и голыми руками / подручными предметами вымешивает толпы врагов. Вымешивать толпы врагов — это весело. Армиями руководить тоже весело, однако временами хочется просто сесть и некоторое время поистреблять всех врагов максимально простыми способами. Желательно зрелищными. Жаль, на PC игр с простыми зрелищными способами всегда было не особо много. Временами совсем не было. Сейчас вдруг что-то случилось и разом вышла масса подобных игр и для PC тоже. Что лично меня не может не радовать.

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

Сразу понятно: надо с этим что-то делать. И, кроме того, сразу понятно что. На приставках используют приблуду под названием «геймпад». Приблуда удобно располагается в руке и позволяет жать на гораздо большее количество кнопок разом, нежели клавиатура. Плюс ещё два мини-джойстика под большими пальцами. Удобство налицо. Вот ей и следует играться.

Геймпад много места не занимает, поэтому я его неприминул купить. Играться в килл-эм-оллеры и прочие аркады после этого стало удобнее. Однако душа ведь никогда не останавливает свой полёт к совершенству. Прознал я про ещё один чудо-девайс, которым играются владельцы приставки Nintendo Wii. Сама приставка на фоне икс-боксов и плейстейшенов не ахтец. Графика даже от PC-игр семилетней давности в среднем отстаёт, но не суть. Мне приставка пофиг, главное новый прогрессивный способ управления. По счастью, прогрессивный способ продаётся и отдельно от приставки. Причём, способ действительно прогрессивный. Вместо геймпада нинтендовцы предлагают играть пультом для телевизера. Не, ну этот самый wiimote — реально пульт ДУ, не отличишь.

Вимот на картинке справа, а слева — нунчак. Они в паре работают. Причём, отходящий от них провод, он не к приставке идёт, он их соединяет — батарейка-то только в Вимоте, а нунчак от него вынужден запитываться. Несведующие спросят: а в чём радость? Ну один мини-джойстик, ну штук десять кнопок, и чего теперь? Отчего бы вместо этой хрени не юзнуть геймпад и тем возрадоваться?

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

Как мы знаем из законов Ньютона, если некоторый объект двигать с ускорением, то на его детали будет действовать сила инерции. Соответственно, акселерометры могут померить и её тоже. При этом в некоторых случаях мы даже сможем отличить поворот от движения — для наклонов акселерометры будут давать значение из диапазона от минус сила тяжести до плюс сила тяжести, ускоренным же движением мы можем получить и бо́льшие значения. Если же двигать с малыми ускорениями, то да, можно и перепутать.

Кроме акселерометров в Вимоте ещё расположена инфракрасная камера, способная отслеживать до четырёх инфракрасных источников одновременно. Это даёт нам возможность детектировать и движение без ускорения тоже: источники, соответственно, закреплены, а Вимот относительно них движется. Мы считываем положения источников и определяем смещение (или, чего там, прямо сразу координату). Причём, движение мы можем фиксировать и в третьем измерении тоже — оценивая изменеие расстояния между точками.

В общем, основной цимес данных девайсов — способность отслеживать движения рук. Что, конечно, управление изрядно обогащает — завсегда же приятнее рубить врагов, просто размахивая руками, а не нажимом на кнопки. Да и целиться прикольнее прямо пультом в экран, а не движениями мышки. Помимо того, запоминать движения и их комбинации для человека естественнее именно в виде движений, а не последовательностей кнопок. Навыки в этом случае вырабатываются ощутимо быстрее. Сплошные, таким образом, плюсы. Минус же ровно один: мега-пультом играются владельцы Nintendo Wii. Владельцы же PC не играются пультом. Думал я.

Оказалось, думал неправильно. Данная система общается с приставкой посредством bluetooth. То есть, при наличии блютус-адаптера для компа Вимот начнёт слать все необходимые данные прямо в комп. Нам их остаётся только перехватить и правильно обработать. Второй момент — инфракрасные источники. У Wii они вделаны непосредственно в сенсор-бар, поставляемый вместе с приставкой, желающим же заюзать девайс для PC придётся прикупить инфракрасных диодов и обеспечить их питание. Либо же довольствоваться только акселерометрами (которых для файтингов за глаза хватает, но вот для 3д-шутеров — уже нет). Но технически проблема решается, причём, не особо даже сложно. Я проверял.

За техническими проблемами сразу же следуют программные — сигналы-то мы словили, а что с ними делать? Ясен пень, игры на PC даже и не догадываются о наличии у вас прогрессивной системы управления и ждут сигналов клавиатуры, мыши, джойстика или на крайняк геймпада. Тут сразу понятно: нужна программа, которая будет одни сигналы переделывать в другие. И такая программа есть. Называется GlovePie. Читает сигналы практически с чего угодно и пишет их практически во что угодно. С её помощью можно запросто сделать управление курсором мыши с джойстика безо всяких там драйверов от производителя джойстика. Вимот программа тоже целиком и полностью воспринимает.

Правда, для некоторых игр (тех самых файтингов, например) дискретное управление персонажем вида «w-a-s-d» не особо хорошо подходит. Ибо с ним герой бегает строго по восьми направлениям розы ветров, а хотелось бы возможности бегать как угодно. То есть, при помощи GlovePie сигналы с Вимота надо будет переделать не в нажатия кнопок клавиатуры, а в повороты мини-джойстика на геймпаде. GlovePie это позволяет, но только в том случае если в системе присутствует виртуальный джойстик, созданный при помощи PPJoy.

То есть, целиком не очень сложная, но и не очень простая система заюзывания мега-девайса выглядит так: приобретается девайс (≈4000 р) и usb-адаптер bluetooth ( ≈300 р.), при помощи ИК-диодов (≈15 р. за штутку) собирается система из нескольких источников (взаимное расположение их неважно, можно, например, на углы монитора прикрепить), ставится софт для адаптера blootooth (рекомендуется адаптер, работающий через систему bluesoleil), адаптер bluetooth втыкается в usb-порт, нажатием кнопок 1 и 2 на Вимоте активизируется подача сигнала для связи с адаптером, в софте адаптера запускается поиск устроиства, после того, как устройство найдено, запускается GlovePie — теперь он получает сигналы Вимота. Если есть желание эмулировать ещё и геймпад, то ставится программа PPJoy и с её помощью создаётся виртуальный джойстик. Теперь из GlovePie можно слать сигналы виртуальному джойстику, которые будет перехватывать игра. Выглядит вроде как запутанно, однако, если отвлечься от ваяния инфракрасных источников, исполняется оное за полчаса-час. После же описанной настройки надо будет только запускать GlovePie и загружать нужный скрипт. Цена устройства — немалая, но для желающего семь вёрст не крюк. Ощущения от девайса всё это окупают.

Что не исполняется за полчаса, так это перенаправление сигналов. Конечно, скрипты имеются прямо в дистрибутиве GlovePie, но от идеала они далеки. Что в шутерах, что в килл-эм-оллерах заскриптованные варианты желаемого удобства не создают. Поэтому, вооружившись пространственным воображением и познаниями в физике с программированием, первым делом надо написать свои, правильные скрипты.

Путь написания скриптов в GlovePie чем-то сродни пути познания дао. Сначала вообще ни хрена не ясно, как и что делать. Лично у меня просветление наступило только через пару дней и вот это — самое сложное, что было в настройке. Понять, как с помощью трёх акселерометров описывать всевозможные движения, оно непросто. И я даже вот так прямо сразу объяснить этого не смогу. Разве что могу сказать: совершайте движение и представляйте как меняются показания акселерометров. Обычно достаточно описания критической точки, но иногда надо найти ещё одно условие, позволяющее отличить одно движение от другого. Но при этом сам язык прост. Команды на нём выглядят примерно так:

Key.j = wiimote.gx > 2 and Abs(wiimote.gy) < 0.2

Смысл команды: установить клавишу клавиатуры «j» в состояние «нажата», если ускорение по оси x больше 2g и направлено влево, а ускорение по оси y меньше 0.2g. То есть, должно сэмулироваться нажатие кнопки «j» на клавиатуре, если Вимотом махнули влево, держа его почти горизонтально. Вместо булевских значений могут использоваться и числа с плавающей точкой — если это подразумевает эмулируемое устройство (например, перемещение по оси мини-джойстика). Кроме того, есть условия, математические функции, усреднение по времени, команда ожидания и прочее подобное. Можно также определять переменные. Правда, язык не совсем похож на обычные линейные языки, он скорее — описание одной итерации с возможностью временно сохранить значение.

var.swordPush = KeepDown(Key.j, 300ms)

Вот пример такой нетривиальной команды. Тут написано: установить значение переменной swordPush равным значению Key.j, при этом, если значение Key.j сменилось с false на true, то значение true следует сохранять в течении 300ms даже если оно за это время реально уже сменилось на false. Понять сиё непросто, но практика решает. Я, например, после двух дней практики написал мега-скрипты — один для килл-эм-оллера и ещё один для 3д-шутеров. В последнем даже удалось устранить эффект дрожания рук — курсор мыши реально замирает, если движения «почти нет», но если движение начинается, то реагирует на него мгновенно.

В шутеры играть пока не попробовал — скрипт для него потестил прямо на виндовых окнах: действительно в иконки при помощи Вимота попадать не тяжелее, чем мышью. Килл-эм-оллер же опробовал непосредственно. Внушает. Играется гораздо бодрее, чем с геймпадом, не говоря уже про клавиатуру. И гораздо азартнее, поскольку физически ощущаешь рубилово. Результатами доволен. Буду продолжать изыскания.

Tags: игры, программирование
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 56 comments