Как мы строили квест в реальности
Нет нужды лишний раз объяснять, что такое квесты в реальности и с чем их едят. Тем более, эта тема уже не раз освещалась на Хабре (и Гиктаймс) [1][2] [3]. Расскажу, как мы строили «Космическую одиссею» — самый технически сложный и, наверное, самый высокобюджетный из квестов «Клаустрофобии».
Согласно легенде, команда игроков (от 2 до 4 человек) — космические туристы, летящие в соседнюю галактику для изучения внеземных цивилизаций. Но что-то пошло не так, и теперь игрокам нужно за час выпутаться из сложившейся ситуации, решая разнообразные головоломки с электричеством, сжатым воздухом, компьютерными панелями управления, видеокамерами и дополненной реальностью.
Чтобы обойтись без спойлеров, я не буду раскрывать принципы работы головоломок, зато будет много технических подробностей о том, как все устроено изнутри. Или, по отношению к игрокам, снаружи.
Мы постарались уйти от концепции «каждая головоломка — независимое устройство». Структура квестовой электроники очень напоминает умный дом: множество модулей, сгруппированных по функциям (а не по игровой логике), сеть передачи данных и сервер. Игровой сервер централизованно управляет всеми устройствами квеста.
Например, так ситуация выглядит с точки зрения игрока:
- игрок нажимает на кнопку
- включается свет
А так всё происходит на самом деле:
- игрок нажимает на кнопку
- блок ввода считывает состояние кнопки
- сервер опрашивает блок ввода
- сервер выбирает нужное действие в соответствии со скриптом игры
- сервер отправляет команду на блок вывода
- блок вывода подает питание на светильники
Такой подход позволяет программно менять логику игры, отслеживать ее состояние и при необходимости вмешиваться оператору для ручного управления.
Структурная схема квеста (увеличение по клику):
Схема выглядит довольно тяжелой и запутанной, но далее мы рассмотрим по очереди каждую подсистему. Думаю, стоит вести рассказ в хронологическом порядке, по мере строительства квеста.
Начало
Работа над квестом начинается с наброска сценария, пустого помещения и неисчерпаемого энтузиазма создателей. Постепенно сценарий обрастает деталями, дизайнеры — идеями и макетами, инженеры — схемами и чертежами, а стены комнат — разметкой («тут будет люк», «головоломка», «оттуда — сюда пыщь-пыщь»). Когда все договорятся, что же именно они будут строить (хотя бы в общих чертах), начинаются работы.
Стены
В качестве материала для стен выбран алюминиевый композит. Это довольно интересный материал: слой пластика (4 мм), покрытый с обеих сторон тонкими слоями алюминия. С лицевой стороны нанесено покрытие, его цвет может быть различным: от белого до антрацитово-черного. Композит на ощупь холодный, как металл, не создает впечатления «дешевой пластмассы». Но, в отличие от металла, он не издает гулкого звука при ударе. Одним словом, задача «подобрать материал, с которым большинство людей не встречалось в обычной жизни» выполнена.
Листы композита прогибаются от нажатия рукой, поэтому под ними расположен гипсокартон на стальном каркасе (в местах со сложной геометрией — каркас из дерева). Композит легко обрабатывается: его можно резать, пилить, фрезеровать. Надрезав внутренний слой, лист можно аккуратно согнуть. Это позволяет строить сложные декорации без швов и видимых крепежей. Мы вообще постарались избежать видимого крепежа, где это возможно. Стены с рядами болтов и заклепок уместны для стимпанк-атмосферы, но не для звездолета из далекого будущего.
На фотографиях — монтаж стен и декораций идет полным ходом. Лицевая сторона композита закрыта защитной пленкой, которую снимут только перед самым запуском. В тех местах, где будут головоломки и интерактивные элементы, заранее прорезаны ниши и сделана проводка.
Потолки
То, что игроки видят над своей головой — это фальшпотолок, сделанный из перфорированного стального листа черного цвета. Такое решение очень удобно тем, что за потолком можно спрятать все коммуникации. Можно легко организовать кондиционирование и вентиляцию, не переживая о том, что решетки будут торчать в самых неподходящих местах. За потолком находятся акустические системы и микрофоны. Наконец, потолок скрывает некоторые механизмы головоломок. Чтобы через фальшпотолок ничего не просвечивало, все поверхности над ним покрашены черной матовой краской. Вот идет монтаж проводки за потолком:
Полы
Пол представляет собой «бутерброд» из нескольких слоев. Снизу вверх: бетонная стяжка, подложка, ламинат, линолеум темного цвета и наконец, черный перфорированный лист, такой же, как и на потолке. Линолеум уменьшает грохот от шагов по металлу. В слое ламината сделаны пазы, в которых находится подсветка: алюминиевый профиль со светодиодными лентами. Профиль закрыт рассеивателем (на фото он еще не установлен), верхняя поверхность которого находится заподлицо с остальным уровнем пола. В листах металла никаких прорезей нет, свет виден через перфорацию.
Напольная подсветка, как и вся остальная, имеет две группы, белую и красную, которые переключаются по ходу сюжета. Подсветка пола играет декоративную роль, её мощность в несколько раз ниже, чем мощность настенного и потолочного освещения.
Автоматика
Отделка идет полным ходом, все коммуникации проложены, пора заняться аппаратной частью. Вот так выглядит коса проводов, приходящая из квеста:
Все игровые устройства можно разделить на четыре категории: компьютеры, исполнительные механизмы, освещение и головоломки.
Компьютеры
Какой же космический корабль без кучи экранов и терминалов управления? В квесте установлено в общей сложности 7 компьютеров с 9 мониторами. Там, где логика задач укладывается в схему «одно приложение — один монитор», используются компьютеры формата nettop: компактные, не шумят, мало греются. Там, где предполагается вывод картинки на несколько мониторов сразу, стоят обычные системники c «многоголовыми» видеокартами.
Мониторы — бескорпусные (open frame), предназначенные для банкоматов и терминалов оплаты, встроены в декорации. Некоторые из мониторов — сенсорные, снабжены тач-панелями, остальные — просто антивандальными стеклами. Еще две интерфейсные панели сделаны на базе планшетов, встроенных в стены.
Компьютеры объединены в локальную сеть, по которой все игровые приложения общаются с сервером. Ко всем машинам настроен удаленный доступ, так что обновить или поправить что-нибудь в софте можно хоть во время игры. К планшетам Ethernet-кабель подключить нельзя, поэтому они выходят в сеть через Wi-Fi. Разместить точку доступа так, чтобы обеспечить нормальную связь, оказалось не так-то просто. В помещении толстые стены, да еще и обшивка из металлокомпозита работает как клетка Фарадея: вайфай ловится только в пределах прямой видимости.
Исполнительные механизмы
Следующая категория квестовых «железяк» — исполнительные механизмы, которыми надо управлять в режиме «вкл-выкл». Это приводы дверей, электромагнитные замки, пневмоклапаны — в общей сложности полтора десятка каналов. Часть нагрузок работает от 220 В, часть — от 12 В. Для управления всеми этими механизмами использованы модули промышленной автоматики.
Эта коробочка — модуль дискретного вывода. Он принимает команды через интерфейс RS-485 и имеет восемь независимых релейных выходов. Два таких модуля обслуживают все исполнительные механизмы. Мощные нагрузки, вроде моторов, включены через промежуточные реле. Все модули связаны в одну сеть и управляются сервером через преобразователь USB/RS-485 по протоколу MODBUS.
Освещение
Освещают корабль в общей сложности около 50 метров светодиодных лент. Все освещение поделено на основное (белое) и аварийное (красное), эти группы включаются в разное время по сюжету квеста. Для управления светом использованы такие же промышленные модули, как и для исполнительных механизмов, но не с релейными, а с аналоговыми выходами.
Модуль имеет 6 выходов, на каждый из которых он может выдавать напряжение от 0 до 10 В с шагом 0.1%. Эти сигналы управляют многоканальными диммерами, через которые запитано освещение. Таким образом, мы получаем возможность плавно и независимо менять яркость любой группы подсветки по команде сервера.
Вот так выглядит полностью смонтированный шкаф автоматики:
1. колодка для исполнительных механизмов;
2. колодка для освещения;
3. модули дискретного вывода;
4. блок питания управляющей электроники (24 В);
5. преобразователь RS-485/USB;
6. модули аналогового вывода;
7. диммеры;
8. блок питания светодиодных лент (12 В, расположен за диммерами).
Головоломки
Многие головоломки имеют свой собственный микроконтроллерный «мозг». Точнее даже, мозжечок, т.к. он только передает данные о своем состоянии серверу, и принимает от него команды. Модули головоломок подключены к той же самой шине MODBUS, что и промавтоматика.
В качестве платформы для головоломок взяли… Кто сказал «Ардуино»? Нет, всё немного круче. Нами была разработана унифицированная плата, специально под квест. Она включает в себя ядро (контроллер ATmega32), преобразователь RS-485/UART, источник питания (вход до 36 В, выход 5 В), несколько силовых транзисторов для управления различной нагрузкой, и пару лампочек — поморгать для красоты отладки. Вот они, аккуратной кучкой ждут распайки деталей:
Вот уже собранная плата:
А вот как она выглядит в естественной среде обитания (одна из головоломок с изнаночной стороны):
В сеть платы соединяются обычной витой парой, по одному и тому же кабелю идут и данные (RS-485), и питание (24 В). Всего в квесте использовано 8 плат. Повторю, что все они одинаковые, головоломки различаются только схемой подключения и прошивкой. Платы оказались настолько удачными, что наш следующий квест («Студия звукозаписи») тоже построен на них.
Воздух
Для одной из головоломок нужен сжатый воздух, и это вызвало неожиданное затруднение. Обычный компрессор слишком громкий, его слышно даже из соседнего помещения. Решение нашлось в виде стоматологического компрессора, который у нормальных людей питает воздухом бормашину. Не то чтобы он очень тихий (обычно его заглушает звук самой бормашины и вопли пациента), но гораздо тише строительных. Если компрессор спрятать в недрах корабля и дополнительно звукоизолировать, то его почти не слышно.
Компрессор включается заранее, чтобы набрать давление в ресивере к тому моменту, как игроки дойдут до пневматической головоломки.
Командная рубка
Сердце корабля — командная рубка, она доступна игрокам начиная со второй половины игры. Во всю ширину рубки протянулся пульт с мониторами и кучей светящихся индикаторов. На стадии строительства все выглядит гораздо скромнее:
Над пультом находятся два проекционных экрана, во время игры показывающие звездное небо (а также █████████). Экраны сделаны из оргстекла с наклеенной на него специальной полупрозрачной пленкой. Проекторы находятся сзади экранов, что вызывает определенные трудности, поскольку места там очень мало. К счастью, существуют сверхкороткофокусные проекторы, которые можно вешать почти вплотную к экрану. Так как экран расположен под углом, штатные крепления проекторов пришлось нещадно доработать болгаркой и повесить к потолку на шпильках, в наклонном положении.
Стены позади экранов покрасили черной матовой краской, чтобы избежать переотражений. При выключенных проекторах через экраны ничего не видно:
Сенсорные кнопки
Чтобы пульт не казался безжизненным куском пластика, на него решили поставить побольше разных кнопочек и лампочек, которые не делают ничего полезного, но создают антураж. Корабль у нас из далекого будущего, так что нельзя портить минималистичный дизайн тумблерами и рубильниками. Кнопки решено сделать сенсорными.
Каждый сенсор — это отдельная маленькая плата, на которой смонтирован микроконтроллер (ATtiny13) и RGB-светодиод. Пульт сделан из листа белого пластика, а сенсоры крепятся с нижней стороны этого листа. Пластик полупрозрачный, так что светодиод просвечивает, при этом снаружи ничего не торчит. Схема реагирует на прикосновение к панели за счет изменения емкости антенны. Антенна — это кусок проволоки, вплавленный в панель изнутри. Вот так выглядят сенсорные модули и заготовки для антенн:
Каждый модуль приклеен на свое место, подключен к антенне и питанию. Под каждую кнопку вырезано отверстие, в которое она ложится при установке панели на место:
Всего таких модулей около 100 штук. За счет массового производства они получились даже дешевле, чем готовые механические кнопки с подсветкой (не говоря уже про сенсорные).
Видеонаблюдение
Операторы непрерывно следят за ходом игры, готовые вмешаться, если что-то пойдет не так. В помещениях квеста установлены купольные IP-камеры наблюдения. Видеопоток транслируется на компьютер оператора и одновременно записывается в архив.
Камеры имеют свои встроенные микрофоны, звук с которых тоже идет в архив. Однако для наблюдения в реальном времени стоят отдельные микрофоны «Шорох». Сигнал с них не оцифровывается, а выводится через микшер в операторскую. Это позволяет избежать задержек, которые очень неприятны при общении оператора с игроками.
Аудиотрансляция
Квест имеет две независимых системы аудиотрансляции: одна для игровых звуков и фоновой музыки, вторая для сообщений оператора. Мы использовали обычные активные колонки (примерно по 20 Вт на помещение), которые спрятаны за фальшпотолком. Как показал опыт, это не самый удачный вариант. Колонки любят ловить всякие помехи и наводки (особенно от мобильных телефонов). Лучше ставить пассивную потолочную акустику и внешний усилитель.
Кнопка помощи
Игроки в любой момент могут попросить подсказку, нажав на специальную кнопку. При этом у оператора звучит сигнал. В других квестах часто используют для этого беспроводные звонки — дешево и сердито. Нам такой вариант не подошел. Во-первых, кнопка звонка не вписывается в интерьер космического корабля. Во-вторых, как уже было сказано, обшивка стен прекрасно гасит все радиосигналы. Пришлось вмонтировать в стену кнопку с подсветкой и пустить от нее до операторской отдельный кабель.
Вот как выглядит рабочее место оператора:
На один монитор выводися картинка с камер наблюдения, второй служит для управления играми и администрирования. Сервер имеет web-интерфейс, где показан ход игры, состояние всех приложений и устройств, а также имеются кнопки для ручного управления.
Разбор полетов
Прошел уже почти год с момента открытия «Космической одиссеи», и можно сделать некоторые промежуточные выводы по работе квеста. Первые месяц-два после запуска шел период вылавливания ошибок. Без них никуда, особенно в такой сложной программно-аппаратной системе. Большая часть багов была выявлена на этапе тестовых игр, перед официальным открытием, но несколько самых коварных ошибок терпеливо ждали в засаде.
Следующие несколько месяцев квест проходил «проверку на прочность». Одно дело — испытать все самостоятельно, и совсем другое — беспощадными руками игроков. Так мы с удивлением узнали, что одна из головоломок имеет не два варианта решения, а четыре. Но чаще открытия были не столь радостными. Один за одним выходили из строя самые разные элементы. Часть — из-за выработки ресурса, часть — из-за того, что игроки бывают не только умные, но и сильные.
Постепенно мы заменяли детали на более прочные, переделывали некоторые элементы. Несколько головоломок переделали полностью, включая конструкцию и игровую механику. Например, в одной из задач нужно было, используя эндоскоп, отыскать спрятанную подсказку. Потом внезапно оказалось, что очень похожая задача есть в другом квесте. Теперь у нас эндоскопа нет, а вместо него — совсем другой девайс.
Расскажу напоследок несколько наиболее ярких случаев из наших игр.
Совсем ручное управление
В квесте все двери автоматические. По-хорошему, нужно было ставить пневматические раздвижные двери (как в метро), но места под них (и опыта работы с пневматикой) не хватало. В итоге поставили моторизованные рольставни. В один прекрасный момент сгорает реле, управляющее одной из дверей. Что тут делать, понятно: ставить более мощное, а лучше — твердотельное реле. Но на это нужно время, а игры идут, show must go on. В результате оператору выдается специальная перемычка и инструкция: в нужный момент замкнуть в щитке этот и вон тот контакты. Выходные отыграли на таком вот ручном управлении.
Осторожно! Двери закрываются
Не все ладно с этими дверьми. Как я уже говорил, игроки иногда бывают сильные. И вот один из таких игроков поддевает рольставню и рывком поднимает. Полотно изгибается буквой S где-то внутри декорации и уходит наверх. После игры оператор пытается привести квест в исходное состояние, дает команду на закрытие двери — дверь не закрывается. Тогда он берется за полотно и тянет его обратно вниз. Хрясь! Полотно двери встает на место и обрывается где-то наверху, у самого привода.
Вся соль ситуации в том, что добраться до привода можно только изнутри, из того помещения, вход куда закрыт оборвавшимся полотном. В конце концов, его удалось поднять сантиметров на 30 от пола и пролезть туда, а затем просунуть стремянку и инструменты.
Закон подлости
В определенный момент по сюжету открывается потайной люк, за которым игроки находят очередной полезный предмет. Привод люка электрический, люк снабжен концевыми выключателями «полностью открыто» и «полностью закрыто», которые отключают мотор. Однажды отказал концевик закрытого положения. Мотор доходит до упора, слегка гнёт люк и выворачивает одну из деталей привода, которая блокирует собой концевик открытого положения. Приплыли. Добраться до привода можно только через люк, он закрыт. А открыть его нельзя, потому что система считает, что люк уже открыт полностью (концевик-то зажат), и питание на двигатель не подает.
Люк в итоге удалось открыть, чуть попортив обшивку вокруг. Систему концевых выключателей полностью переделали, чтобы больше такого не повторилось. И на всякий пожарный случай был сделан тумблер, который подает питание на мотор в обход концевиков. К сожалению, вынести его из квеста наружу, не разобрав полкорабля, не получилось. Так что тумблер прикрутили в самый дальний и темный угол потолка, в надежде, что его никто не найдет.
Зря надеялись. Не прошло и двух недель, как один довольно рослый игрок нашел этот тумблер — и нажал, причем в сторону закрытия люка. Мотор потянул, привод расцепился в специально сделанном месте и люк с грохотом распахнулся вниз. К счастью, никто не пострадал, игроки отделались легким испугом. Тот тумблер теперь завинчен специальной заглушкой, но расслабляться все равно нельзя — закон Мёрфи никто не отменял.