Квест WOTTEN, 10 - 24 августа 2020 года.
Изнутри и снаружи.
Начало этой истории вы можете найти здесь:
Первая часть
Вторая часть
Видеоуказатели
Эта задачка очень сильно тормозила всю цепочку производства, поскольку без ее реализации невозможно было скомпоновать 10-ти часовое видео, а значит, невозможно было зашить в бота ответ пятнадцати игрокам, которые его решат. Дело усложнялось тем, что, когда я готовил видео, указывающие на расположение FM модуляторов, я знал, что там будут FM модуляторы, но понятия не имел, что именно будет в модуляторах (именно поэтому тематика видео максимально схематична и оторвана от любого мыслимого контекста, помимо танков). Поначалу я планировал сделать одно шаблонное видео, которое будет похожим образом указывать на 6 разных мест (первое место, по которому я сделал видео был Благовещенск - глобус был взят из Google Earth Pro, записан виндовой программой захвата экрана - нажмите Windows+G если у вас Windows 10).
Мне показалось, что делать все видео одинаковыми будет скучно, и я стал думать, как обозначить места. После Благовещенска я стал кодировать Арбат. Изначально идея была дать точки в местах расположения известных танковых памятников (Танковое сражение в Белгороде, Памятник танку в Челябинске и какой-нибудь еще мемориал). Кроме фотографий мемориала я собирался дать расстояние от мемориала в метрах и заставить игроков триангулировать магазин. Однако эта идея с треском провалилась из-за того, что на таких расстояниях разные общедоступные карты давали погрешность в несколько километров. Идею пришлось упростить. Так появилась видео с азимутами - в этом видео в качестве подсказок я нарисовал схематичное изображение Поклонной горы и 15 Андреевских флагов, которые намекают на памятник Петру в Москве (на нем как раз установлено 15 Андреевских флагов):
Прохождение:
По найденным в 10-ти часовом видео кодам находилось 6 видео на YouTube.
https://youtu.be/dKRfNqJjp3w В видео было указание на фабрику Рот Фронт. Где-то в середине есть вставка с google maps с общим планом района, по которому игроки нашли точное место.
https://youtu.be/Kop1qkrHKeo В видео изображена подводная лодка “Красный Октябрь” из книги Тома Клэнси “Охота за красным Октябрем”. Узнать, что это именно Красный октябрь, можно по имени капитана подлодки и одного из главных героев книги - “М.А. Рамиуса”. Видео дает понять, что подсказку следует искать на Болотном острове, где расположен магазин “Аленка”.
https://youtu.be/IVCJmuj96wM В видео изображены 15 Андреевских флагов и надпись “Азимут 339”, а затем схематичное изображение Поклонной горы и надпись “Азимут 68,75”. 15 Андреевских флагов указывают на памятник Петру I в Москве, а схема изображает Поклонную гору. Если от Петра и стелы провести соответствующие азимутальные линии, они пересекутся точно на здании, в котором расположен магазин Аленка на ул. Арбат.
https://youtu.be/DAHIrc2Pyyw В видео камера падает на землю в район г. Благовещенск - прямехонько в магазин “Аленка” на ул. Ленина.
https://youtu.be/heCbEvHj570 В видео показано очень узнаваемое здание - доходный дом графа Шувалова на Невском проспекте в Санкт-Петербурге. Если бы камера продолжала опускаться, и видео не оборвалось, показался бы магазин “Аленка” на Невском.
https://youtu.be/1N51VwYWy6c В видео показаны небоскребы Москва-Сити и чертеж реактивного снаряда, похожий на схему ТЦ Афимолл (вернее схема ТЦ, отдаленно напоминающая реактивный снаряд). На чертеже красным крестом отмечено место, где расположен магазин “Аленка”.
FM модуляторы
До того, как начать загадывать загадки про шоколад и танки, я 6 лет проработал в области радиосвязи. В 2012 году мне посчастливилось поучаствовать во вводе в эксплуатацию первой в России LTE сети (“Йота”). Я неплохо знаю законодательство в этой области и правила вещания, поэтому мог с уверенностью проектировать задачку с радиостанцией. Первые идеи были очень разные, связанные в основном с вещанием на частотах радиолюбителей. Сначала мы хотели задействовать как можно больше локаций в городах РФ (был даже вариант разместить станцию в Рыльске в Курской области), но быстро стало понятно, что впятером мы не сможем проконтролировать постоянную круглосуточную работу радиостанций на такой территории. Именно этим объясняется то, что большая часть финальных точек расположена в Москве. В качестве радиостанций я использовал самые простые автомобильные FM модуляторы, которые были установлены под стойками касс в магазинах сети “Аленка”. Когда мне пришла в голову идея с модуляторами, я сходил и купил модулятор и радио в ближайшем магазине М-Видео (не реклама). Сначала я хотел записать на каждый голосовое сообщение, но мне показалось это скучным, да и голосовое сообщение игроки могли легко спутать с эфирным радио. Эта мысль очень долго отлеживалась в голове. Когда я окончательно отказался от идеи голосового сообщения, я стал искать способы кодирования изображения в звуке и достаточно быстро вышел на распространенный у радиолюбителей метод SSTV https://en.wikipedia.org/wiki/Slow-scan_television. Я записал на пробу картинку в модулятор (для записи я использовал программу SSTV Signal Generator), специально вышел на шумную улицу, поймал сигнал приемником, записал звук на диктофон и попробовал расшифровать, чтобы узнать приблизительно какой результат могут получить игроки. Вот картинки с первых тестов (расшифровку я осуществлял программой RX-SSTV и дополнительно обращался к коллегам с просьбой дублировать тестирование приложением Robot36 для Android):
Результат превзошел все ожидания. Мы определились с локациями, я купил еще 5 модуляторов и стал думать над тем, что, собственно, в них записать.
Прохождение:
По разгаданным из видео местоположениям находились 5 магазинов “Аленка”, а также Кот, выглядывающий из-за решетки окна в здании фабрики “Рот Фронт” в Москве.
В каждой из локаций была размещена картинка, в нижней части которой был размещен dot code. При расшифровке доткода сканером, который можно скачать на смартфон, появлялось слово “FM!!!”
Если подойти к картинам с обыкновенным радиоприемником (или с телефоном, имеющим радиоприемник), на FM частотах можно было поймать трансляции вот этих звуков: https://soundcloud.com/red-wojak/sets/shokoladnyy-rok
Данные звуки на самом деле являются картинками, зашифрованными по стандарту кодирования SSTV (Slow Scan TV). С помощью программы Robot36 для андроид, эти звуки можно было дешифровать и получить 6 картинок.
3D Пазл
Я очень долго размышлял над тем, что можно записать в модуляторы. Мы определились с тем, что локаций должно быть шесть, что записаны будут картинки, и на этом все. Я хотел сделать задачу, которая была бы разделена на 6 частей, причем таким образом, чтобы без какой-либо из этих частей она не решалась. Сначала Покровитель предложил сделать ребус, в котором будет зашифровано слово из 6 слогов, но подумав над этой идеей пару дней и не найдя ни одного толкового варианта, мы отбросили эту идею, и я стал думать дальше. Почти с самого начала меня не покидала мысль о том, что хотя мы не можем наградить всех участников, хотелось бы сделать так, чтобы у тех, кто зайдет достаточно далеко, остался какой-нибудь сувенир на память. Мы долго обсуждали идею геокэшей, но мне это показалось слишком ненадежным способом. Кроме того, мы вряд ли успели бы произвести достаточно сувениров, да и хотелось исключить нежелательные коннотации с сами знаете чем. Идея с геометрической фигурой пришла ко мне из детства: в школе на уроках черчения нас заставляли склеивать икосаэдры, и тогда это казалось мне достаточно мучительным. Я подобрал выкройку посложнее и покрасивее, разрезал на 6 частей и стал думать, что на ней зашифровать. Короткое слово не подходило, а писать очередной бессмысленный набор букв мне казалось слишком пресным и не эстетичным. Чтобы было сложно по смыслу разгадать надпись, не имея всех кусков, я стал рассматривать фразы на разных языках и в итоге остановился на латинской фразе:
Ducunt volentem fata, nolentem trahunt - желающего идти судьба ведет, нежелающего — влачит.
Эта фраза мне казалась максимально близкой к идее квеста и имела намек на дух соревнования. Мне нравилось, как она отделяет пассивных наблюдателей от активных участников. Я нанес необходимые буквы на грани развертки, но обнаружил, что на фигуре остается большое количество места, а некоторые части развертки содержат всего 2-3 буквы. Тогда я подобрал еще одну фразу, чуть короче:
Mors omnia solvit - смерть решает все проблемы.
Я даже успел нанести эту фразу на фигуру, но упоминание смерти показалось нам слишком мрачным. Я попробовал заменить слово “смерть” на “шоколад”, но в латыни не оказалось подходящего слова, поэтому я заменил всю фразу на чуть более светлую:
Fors omnia versas - слепой случай меняет все.
Эта фраза отлично перекликалась с духом великого рандома в играх и должна была настроить и успокоить игроков, которые по тем или иным прихотям рандома не смогли получить приз. Надеюсь, этот паззл и воспоминания об эмоциях, полученных в процессе решения моих загадок, станут вашим сувениром.
Для тех, кто опоздал, оригинальные выкройки я разместил в конце своего рассказа.
Прохождение:
Найденные картинки представляют из себя развертку трехмерной фигуры Great Dodecahedron.
Если правильно склеить выкройку, по красной линии, начерченной на гранях можно было прочитать две латинские фразы: “DUCUNT VOLENTEM FATA, NOLENTEM TRAHUNT” - “Желающего идти судьба ведет, нежелающего - влачит” и “FORS OMNIA VERSAS” - “Слепой случай меняет все”. На эти фразы бот возвращал коды, QXyCmb и Jk99o, которые складываются в ID видео со следующей задачей на Youtube.
Откровение Деда Мишлен
Как вы, наверное, догадались, сделать все в срок мы не успели. Именно этим и объясняется второй таймер, который мы установили в телеграм бота. Задача с чтением по губам - одна из первых, которую предложил Покровитель в самом начале, но по факту оказалась последней, которую мы собирали. Оригинальная концепция была в том, чтобы сделать анимированный ролик, в котором Аленка (та самая - с шоколада) читает сообщение, которое надо прочесть по губам. Для анимации Аленки я использовал нейросеть, выложенную в открытый доступ https://github.com/AliaksandrSiarohin/first-order-model. Поскольку я баловался с этой моделью задолго до квеста, мне не составило труда сделать прототип говорящей Аленки. Однако при тестировании выяснилось, что прочесть по губам анимации ничего не выходит (с тестированием нам помогала Котенок, т.к. через знакомых она нашла девушку, отменно читающую по губам). Тем не менее, идею решили воплотить. Мы попросили Мечтателя снять ролик (он любезно согласился сам срежиссировать ролик и сняться в нем). Изначально мы предлагали ему завязать глаза, чтобы сохранить анонимность, но он отказался. Покровитель предложил сдвинуть звуковую дорожку, чтобы плохой липсинк на эпизодах, где Мечтатель читает кодовую фразу, не так сильно бросался в глаза, и добавить дефектов, что я и сделал при монтаже видео. К моменту съемок и монтажа сообщество любезно подкинуло нам великолепный мем про Деда Мишлен, и мы его с удовольствием вставили в описание к видео. В правом верхнем углу видео красной лампочкой (морзянкой) была выбита следующая фраза:
“Селена в созвездии Коперника Сагот ножками по компасу Цой Лимночика Рик Асли Юша Учитель Антония Вспышка Джов не торт а дед Мишлен”
Это некая компиляция мемов, образовавшихся в форумах и чатах тех, кто решал наши задачки, на первой неделе квеста, которые нам больше всего понравились, и которые хотелось закрепить в сознании игроков. Так же видеозапись имела явную отсылку на сайт alenka.ru, и с нашей стороны было бы преступлением не разместить там что-нибудь. Я нашел в сети midi вариант Never Gonna Give You Up, декомпилировал его в текст, убрал заголовок, и мы разместили его в комментарии на сайте.
Прохождение:
По адресу https://youtu.be/QXyCmbJk99o игроки нашли видео, звуковая дорожка в котором не соответствует тому, что говорит человек. Заметно, что два куска из середины записаны позже и врезаны в видео отдельно (т.к. он на них человек без бороды, а все остальное время - с бородой).
По губам можно прочитать фразу "Покровитель предал меня, спасите золото" в первой вклейке и "тридцать тире танк кролик расчет солнце апельсин шоколад".
Указание на Аленка.ру - ложный путь. В комментарии на сайте alenka.ru стоит декомпилированный на ASCII midi файл (разумеется - “Рикролл”).
Из файла специально убраны заголовки, чтобы его чуть сложнее было собрать обратно в миди.
Красная точка REC в левом верхнем углу мигает морзянкой и отбивает текст:
"Селена в созвездии Коперника Сагот ножками по компасу Цой Лимночика Рик Асли Юша Учитель Антония Вспышка Джов не торт а дед мишлен" - это набор мемов, которые игроки придумали в ходе квеста. Морзянку писали вручную, возможно есть опечатки.
После прохождения видео, боту надо было отправить слова "тридцать тире танк кролик расчет солнце апельсин шоколад" - на это он отвечал: "?? - Ig83LQ Что делать дальше - спроси благородного дона Румату".
Дон Румата Эсторский - герой книги “Трудно быть богом братьев Стругацких”. Его настоящее имя в книге - Антон. Сочетание имени и подложной фамилии "Антон Эсторский" при отправке боту давало набор букв, который представляет из себя url, который надо дописать к wotten.babaev.ru чтобы "легально" перейти на загадку с двоичным кодом.
Бинарный код
К моменту, когда я составлял загадку с бинарным кодом, моя фантазия практически иссякла. Мне постоянно приходилось себя одергивать, чтобы не начать повторяться. Единственным из стандартного арсенала интернет-загадок, что мы не использовали, оставался бинарный код. Но, учитывая обилие всевозможных загадок с бинарными кодами, было непросто придумать что-то оригинальное. Сначала мне пришла в голову мысль комбинировать ASCII art и бинарный код, и я нарисовал логотип “Бабаевского”, составленный из нулей и единиц. Потом мне подумалось, что неплохо было бы придать нулям и единицам смысл, и я закодировал ими текст из “Евгения Онегина” Пушкина (обычно я использую его для проверки текстовых полей на сайтах, которые мы разрабатываем), но позже, я заменил Онегина моим любимым отрывком из повести “Трудно быть Богом” братьев Стругацких. Так как он явно лучше соответствует духу квеста. Эта загадка получилась сама собой, когда я подумал о том, что в бинарный код влез достаточно большой отрывок, чтобы вписать туда еще один бинарный код. Я заменил некоторые буквы “о” в тексте на латинские, так, чтобы, приняв русские “о” за 0, а латинские “о” за 1, при дешифровке получился ID видео с финальным мини-кодом, и задача была готова.
Прохождение:
В бинароном коде, которым изображен логотип “Бабаевского”, расположенный по адресу: https://wotten2.babaev.ru/azhrkzxtoougr9cdclqst5du5lmmso, зашифрован текст - отрывок из книги “Трудно быть Богом”.
Часть букв “о” в тексте заменены с русских на латинские. Если принять русские буквы за “0”, латинские за “1”, а остальные буквы и символы в тексте удалить, то при дешифровке получится строка:
0101001000110111010110000101100001000101010011110100100101100001001100100101100001001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Любым онлайн дешифратором эта строка превращается в ID видео на Youtube - R7XXEOIa2XI.
LastCode42
С самого начала было известно, что главным призом квеста будет 1 млн. золота для WoT, а также у нас будет запас в 150 тысяч золота на промежуточные призы.
Некоторое время мы обсуждали, каким же образом будет вручаться главный приз, и пришли к мысли, что такое безумное количество золота вряд ли будет нужно одному единственному игроку. Мы договорились с WG о том, что по просьбе победителя (если таковая поступит), код на 1 млн голды будет разбит на несколько частей, чтобы он мог поделиться золотом с друзьями (учитывая, что многие задачки обязывают игроков работать в команде).
Из-за волокиты с оформлением документов на закупку, сами коды мы получили практически в последний день перед стартом. Когда стало понятно, что быстро мы их не получим, я решил сделать свои собственные мини-коды и механизм, который будет раздавать промежуточные призы.
Первыми были сгенерированы коды, которые попали в модуляторы. Тогда мне было неизвестно, сколько всего получится загадок, поэтому мы перестраховались и взяли первое число, которое пришло в голову - 42. Вы, наверное, заметили множество отсылок к литературе, и эта, конечно же, тоже не исключение.
Телеграм бот идеально подходил для реализации механизма раздачи промокодов. Я сгенерировал 42 коротких кода, каждый со своим номером, которые были разбросаны по всему квесту в случайном порядке, чтобы не отображать явную индикацию прогресса, но давать туманное представление об общем количестве кодов.
В процессе работы над 3D пазлом я понял, что квесту необходимо нечто, что будет сшивать все загадки в единое целое и являться ключом, открывающим финал. Покровителю, да и мне тоже, не хотелось отдавать приз тому, кто решит только одну - последнюю загадку.
Мне хотелось, чтобы по ходу решения человек собирал некие кусочки, которые надо сложить вместе и получить ключик, который даст доступ к финальному “сундуку”. Были идеи сделать огромный сейф с паролем на главной странице квеста, но делать нечто настолько очевидное показалось мне не в духе квеста. Все мини-коды были пронумерованы, и для получения финальной подсказки их нужно было отправить боту.
Прохождение:
Видео доступно по ссылке https://youtu.be/R7XXEOIa2XI. В тегах к нему лежит код номер 17, а на самом видео сквозь помехи написан последний код 42 - LastCodE42.
Стеганография
До финальной подсказки нужно было еще дойти. Когда я окончательно сломал себе голову, как мне его зашифровать, Покровитель подкинул идею со стеганографией (это метод скрытого размещения информации в графике путем изменения последнего бита в картинке на значащую информацию). Есть много различных методов стеганографии, например, метод наложения двух картинок друг на друга, все, что я нашел, имело различные алгоритмы. Я подобрал более менее удобный, локальный софт для стеганографии (то самое расширение к Chrome - PassLok Image Steganography). Этот метод был применен к картинке с балетной парой, размещенной на самой первой странице квеста wotten.babaev.ru. По плану финальное сообщение, зашифрованное в ней, давало спрятанную на сайте ссылку на форму, которую должен был заполнить победитель, после чего мы должны были связаться с ним. Впоследствии мы изменили метод связи на SMS.
Чтобы привести игроков на изначальную страницу и помочь им разобраться, что делать дальше, мы сделали подсказку в предыдущей задаче. Видео, которое открывалось по ссылке после разгадки бинарного кода, содержало в себе не только LastCode42. Если присмотреться к помехам, то они появлялись морзянкой. На этот раз латиницей было выбито слово PassLok Image (тот самый софт для стеганографии).
А при отправке всех 42 кодов боту, игрок получал сообщение:
“Да. Пришло время вернуться в начало. Ты тут первый. Остался последний шаг - поспеши, тебе дышат в спину!”, если он был первым, а всем последующим на финальный код бот отвечал: “Да, но ты тут не первый. Вернись в начало, возможно, все еще есть шанс успеть! Финал уже рядом.”
Это намекало ему на необходимость отправится назад, на самую первую страницу, и расшифровать послание, закодированное в картинке с балетной парой.
Прохождение:
Необходимо собрать в строчку все 42 кода и отправить их боту. Получить в ответ намек на то, что нужно вернуться на стартовую страницу квеста https://wotten2.babaev.ru/.
Расшифровать морзянку, которая изображена помехами в видео предыдущего этапа, и получить подсказку “PassLok Image”. Со стартовой страницы взять картинку с балетной парой и расшифровать закодированное в ней послание с помощью PassLok Image Steganography. В послании были инструкции для связи с Покровителем для получения главного приза (отправить sms с определенным текстом на указанный номер).
Мы предполагали, что квест будет проходиться именно так.
А как все вышло на самом деле?
Об этом в следующем посте =)