Скажи-ка, дядя, ведь недаром, или Как мы делали Telegram-игру «Атомный Графъ»

vqlvnnclxivsayqjbbgsk_q_fou.png


Если вы ещё не сыграли в нашу прорывную игру «Атомный Графъ», которую можно назвать, без ложной скромности, разработкой года, то самое время приобщиться. А сегодня мы расскажем, как создавали её, как защищали от читеров и какие призы приготовили для самых активных игроков.

Как вам в голову вообще пришёл такой трэш?


2022 год получился весьма и весьма богатым на события. Они привлекли к себе внимание в конце февраля и уже не давали о себе забыть, заставляя каждый час листать новости и удивляться тому, как такое вообще может случиться в нашей вселенной?

Ближе к концу года мы поняли, что людей из новостных чатиков в Telegram сможет вытащить только кринжовая игра, в которой будет совершенно другая реальность. И тогда одному из наших разработчиков попалась на глаза альтернативная версия истории Отечественной Войны 1812 года в духе РЕН ТВ, настолько нелепая по своей сути, что у любого человека с высшим образованием ничего кроме улыбки не вызвала бы. И в любое другое время мы прошли бы мимо, но на фоне всего того трындеца, что творился весь 2022-й, видимо, произошло смещение координат «нормальности» и мы схватились за этот выдуманный атомный взрыв над Москвой как за соломинку, чтобы окончательно не сбрендить.

ujvjgokrfbf0lac2hzzqkcyxkey.png


Дальше цепочка размышлений увлекла наши воспалённые умы в картинку, которая висела в нашем офисе, а именно на плакат игры Duke Nuken 3D. Duke Nukem — это же, если дословно, «Атомный Герцог». Тут весь пазл в нашей голове сошёлся и мы решили, что вот она, истина!

jofw_yhkma9l8llwofcqg69ikpc.gif


Мы делаем русскую версию Duke Nukem, только со своим, «старорусским» героем. Весь 2022 год многие страны отказывались и всячески отменяли русскую культуру, что нас абсолютно не устраивало. У нас есть своя, русская мифология, в которой твари не менее фантастические, герои не менее брутальные, а недостающее имбовое оружие появится, если поместить это всё в атмосферу стимпанка, который, раз уж речь зашла об альтернативной истории, не мог быть проигнорирован.

Чтобы совсем уж не зарваться в своём безумии, мы позвонили Ричарду Грею — дизайнеру уровней в нетленке Duke Nukem, также известному как Levelord, и рассказали ему о проекте. Ответ был примерно таким:

zw2krmzjotzzl6nhtdfv5h4xieo.png


Так на борту нашей лодки начинающих геймдевов оказался Levelord, и мы поплыли…

Прототипирование


В качестве инструмента для прототипирования мы выбрали proto.io — довольно простой и удобный облачный сервис, который позволяет быстро накидать расположение блоков и показать основную механику игры:

ycmvcdkl2qrg0jqg3aa8ucvn6uu.png

Чтобы не потерять хрупкую вовлечённость на мобильных устройствах (ведь в соседнем чатике новости про возможную третью мировую…), мы сразу погружаем нашего участника в игру, благо механика простая, и о монстрах, которые становятся причиной смерти, рассказываем уже после смерти:

pihbo39l-khqwscjyi5a4tvzaik.png


Отрисовка героя и врагов


Начали мы, конечно же, с главного героя. В нашей стимпанк-вселенной Атомный Граф (в миру — Евграфъ Ананиевич Голенищев) — внебрачный троюродный племянник светлейшего князя Михаила Илларионовича Кутузова. Он был интеллигентным юношей, дворянином из обедневшей ветви знатного рода.

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

Характер героя:

Обижается, когда его называют Квантовым Графом. Девушки его любят, поэтому он вынужден быть с ними немного высокомерным, чтобы не давать им ложной надежды. Но при этом тайно страдает по одной Полуднице, которую не может убить. Она одним своим взглядом делает его бессильным».

Стилистически отрисовываем героя как стимпанковского графа:

  • На голове характерный для того времени котелок.
  • На лице подкрученные усики и короткая бородка.
  • Вместо пенсне у него высокотехнологичный гаджет, который позволяет видеть в разных диапазонах, со встроенным моноклем, прибором ночного видения и пр.
  • Костюм с элементами защиты и бронепластинами.
  • Правая рука не родная, заменена искусственной с гаджетами.
  • В левой руке трость с атомным источником энергии.


Иллюстратор по этому ТЗ сделал такой вот набросок:

_xr04xwxltlynmse25wgt35vueu.png


Нам он сразу же понравился, и мы отправили его на доработку:

cd2goodumqyctacw6umiealcgou.png


Ну, красавец ведь! По словам Ричарда, прожившего в России последние 10 лет, именно таким он представляет нашего героя. «Я, к сожалению, не застал те времена, когда в России носили такие котелки и трости, но уверен, что наш Граф выглядит как настоящий, благородный дворянин из параллельной вселенной!»

tzujfyz-ttrc6ozqihgcshvi8p4.png


Вид сверху и анимация пинка:

ahxoce49bddv_nqnaj5toijemoe.png


Кстати, пинок был позаимствован у Duke Nukem. При его использовании количество баллов за смерть врага выше, чем при использовании трости. Ричард вспоминал, что эта фишка в Duke Nukem дико радовала игроков, и мы не могли не использовать это в нашей игре.

Дальше мы приступили к отрисовке всех врагов.

▍ Изба на курьих ногах


ymrcy3g7ft0z_3k9cale9jlsuk0.png


Изба на курьих ногах — результат генетического эксперимента Дмитрия Донского по созданию оружия против орды хана Тохтамыша. Из-за атомного взрыва в 1812-м избёнки разбежались из мест дислокации по лесам, одичали и стали нападать на одиноких путников и отошедших от обоза по нужде.

▍ Кощей


flbqaesj7yyplwxbpsc0rbhkvhi.png


Из-за атомного взрыва этот мутант обрёл сверхъестественную силу и здоровье, фактически став бессмертным. Правда, радиация несколько попортила его внешность.

▍ Яга — смертоносная красотка


pzxtuw3emkgkez2sipnqlvqakmy.png


Во времена Наполеона баба Яга уже была давно немолода. А радиация прошлась по ней катком: испоганился характер и окостенела нога, зато появились способности к левитации.

▍ Не купайся в реке без трусов, водяной не дремлет


g2k0mkgn6g5qi7patc4schuerza.png


Радиация наградила водяного невиданной силой, биоэхолотом и тентаклями. Раньше он любил тихие омуты с тиной, а теперь рыщет на мелководье у городских пляжей и подстерегает самонадеянных купающихся.

▍ Лихо одноглазое


5uj1x595honmpsyzprwdvlfrm8g.png


Подвид среднерусского циклопа. Когда-то был широко распространён на территории европейской части России. Со временем лихо ассимилировались в среде местных юродивых, беглых каторжан и скотоложцев.

▍ Оборотни


uav5kvhri2jvzflm1ptr4bkdk_g.png


Это заблудившиеся в лесах и болотах солдаты армии Наполеона, которые с голодухи нажрались радиоактивных мухоморов, одичали и остались жить в чаще. По ночам воют на луну, которая напоминает им сияющий шар воздушного атомного взрыва.

Казалось, что набор врагов идеальный. Мы показали это всё Ричарду, на что получили ответ:
«Nice! Maybe some evil child-like enemies? Children scare me».

Мы сильно призадумались… Ведь в славянской мифологии из детей почему-то не делали монстров, и самым близким персонажем был хитрый и коварный… колобок. Когда мы предложили этот вариант Ричарду и рассказали о том, что это за тварь, он расхохотался. На том и порешили.

▍ Колобок


efqwfj5juulyvccfgxkaolh4i5a.png


По одной из версий, первые колобки прикатились на Русь, сбежав из каравана на Шёлковом пути. В 1812-м некоторые из них мутировали, стали плотоядными и крайне агрессивными шарами.

Итак, все персонажи отрисованы, делаем вид сверху:

talnwg4vgggn5ppoi-cfso8kugy.png


Отрисовка дизайна игры


vqlvnnclxivsayqjbbgsk_q_fou.png


Мы не были оригинальными, и для отрисовки дизайна использовали Figma. Сроки были сжатые, а для коллективной работы распределённой команды лучшего инструмента пока не придумали.

Levelord вспоминал 2016-й год, когда Москва уже появлялась в Duke Nukem в дополнении Alien World Order, и сокрушался, что на тот момент не существовало таких удобных инструментов, как Figma, и нельзя было так быстро обсудить и реализовать такие интересные проекты.

uxx_jd6lzj6-4t-fh0p1-wtbjow.png


Элементы интерфейса и вид карточек с врагами, появляющиеся после смерти героя:

syj05tpzdqxhvomikrl3iuaqkp0.png


Локаций у нас три: лес, пустыня и город.

0oytjdbj_9ahkuwilzpnk4kc7as.png


Уже в самой игре здания, деревья и другие элементы генерируются случайно, создавая иллюзию бесконечности.

Звуки


Атмосферу невозможно создать без соответствующих звуков. К их подбору и микшированию мы подошли весьма ответственно, потому что игра фактически «бесконечная» и нужно было сделать так, чтобы они не сильно надоедали и не вызывали через час игры рвотного рефлекса:

zr9pyd_rugsfuxv-euoyjrxurvk.png


Каждый из врагов умирает или принимает удар от пинка со своим звуком:

sui8x1od5wld9yxtxj7_revnwvu.png


Специальные звуки есть и при подборе всяческих усилений:

6tayh0mfwtgxymjpmu0qrwnf0eg.png


Предварительный этап на этом можно считать оконченным, мы посмотрели на объём исходных файлов и вспомнили старый анекдот:

Закончилась посадка на суперлайнер ИЛ-2086. В салон выходит стюардесса: «Дамы и господа! Чтобы помочь вам скоротать время полёта, на борту нашего лайнера имеются библиотека, кинозал, три бара, ресторан, бассейн и два теннисных корта. А теперь я попрошу вас пристегнуть ремни безопасности, потому что сейчас вместе со всей этой фигнёй мы попытаемся взлететь!»


Программирование


Хоть игра и двумерная, она создана на основе Unity. Эта среда разработки — прекрасный инструмент для трёхмерных игр и анимации с высочайшей детализацией, но она весьма удобна и для создания подобных «Атомному Графу» простых веб-приложений. Сначала у нас были опасения, будет ли игра хорошо работать, но после тестов они развеялись.

В основном мы использовали С# с редкими включениями JavaScript. Также пришлось немного покопаться в Telegram API, чтобы подключить игру к этому мессенджеру.

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

Продумывая игровой процесс, мы хотели постепенно усложнять игру, добавляя всё новых и новых врагов и делая их быстрее. Но в результате неизбежно упёрлись бы в потолок человеческих возможностей. Игроки раздражались бы, что справиться с врагами физически невозможно, и мы получили бы много негатива. Поэтому от постоянного усложнения мы отказались.

Попутно пришлось отказаться от некоторых механик и адаптировать отдельные части кода, чтобы не создавать новых лазеек для читеров и упростить защиту.

Защита от читеров


Было бы желание, а сломать можно что угодно. Мы не питали иллюзий и понимали, что любая игра привлекает читеров, особенно если на горизонте маячат хорошие призы. Но мы не собирались опускать руки и старались защитить проект, чтобы отсеять мамкиных хакеров, которых подавляющее большинство среди любителей накернить систему.

Изначально наша защита состояла в шифровании всех данных, отправляемых клиентом на сервер, с помощью применяемого в Telegram алгоритма. При этом система не позволяла обращаться к серверу без запуска клиента, чтобы не было примитивных накруток. Взломать передачу данных можно было только узнав ключ шифрования. Сначала мы выдавали каждому участнику фиксированные ключи, а позднее сделали их динамическими, чтобы усложнить читерам жизнь.

В новом апдейте защита от читеров будет более серьёзная. За месяц боевой эксплуатации мы собрали данные по более чем 6000 игровым сессиям, проанализировали и поняли, что есть довольно простой и изящный способ защиты, о котором мы, дабы не упрощать читерам жизнь, рассказывать тут не будем.

Первый запуск игры


Сразу же после сборки первой стабильной версии мы дали её потестить Ричарду. «Здорово! Но… слишком просто. Я набрал 20 000 очков одной левой», — пошутил Levelord и дал советы, как сделать геймплей более сложным и интересным. Мы увеличили скорость некоторых врагов, сделали бОльшим ущерб от их атаки, добавили объектов в ландшафте. Кроме того, двойной тап, который запускал пинок, слушался не очень хорошо — пришлось переписать этот класс.

После того, как каждый из нашей команды набрал пару десятков тысяч очков, и все баги были вылизаны, мы почистили рейтинг, запустили игру в чат-боте и сделали анонс на Хабре.

Статистика


minwfk3ld3wyqqmqu265y6ubnda.png


За месяц (с 20 декабря 2022 года по 20 января 2023 года) игру запустили 1995 человек (нельзя сказать, что уникальных — некоторые, как мы заметили, играли с нескольких аккаунтов, но таких было немного, в основном они пытались взломать игру, чтобы занять первые места). Конечно же, были читеры, которые попытались обойти нашу защиту, но мы не стали их удалять из рейтинга, чтобы усыпить бдительность. Почистив результаты, мы увидели тех, кто набрал свои баллы не макросами, а ручками:

  • 1-е место — наушники Apple AirPods 3 достались Rez***7 (619 500 очков).
  • 2-е место — геймерский кейпад Razer Tartarus Pro Mercury получил Zer***p (393 050 очков).
  • 3-е место — игровая мышь SteelSeries Rival 5 выиграл @EA***I (315 550 очков).


Также все победители получили уникальные футболки с изображениями Атомного Графа и Duke Nukem с подписью Ричарда Грея!

Будет ли новый конкурс?


Да-да-да. Мы выпустили обновление и анонсируем новый конкурс.

Что нового?

  1. Режим «Ночной кошмар» — включается, если пнуть череп. При его активации всё становится чёрно-белым, контрастным, и враги умирают сами при приближении к главному герою. Длительность режима — 10 секунд. Если череп не пинать, а пробовать уничтожить из лазера, то он не уничтожается. Если не успеть пнуть, то он отнимает 50% здоровья.
    lmhbx8vhfuy7yq7hkvm5aepcofg.png
  2. Добавили ещё одну пасхалку. Первому нашедшему — приз!
  3. Вводим ещё одного героя — Полудницу: сексапильную девушку, которую нельзя убить, её можно только облететь. Пролетая мимо неё, граф томно вздыхает.
    snautn0ok24zci2ayez4m1vgsgc.png
  4. За смерть врага от пинка даём больше очков, потому что это сложнее.
  5. Увеличили скорость колобка, ведь он катится.
  6. Сделали разный урон у разных врагов.
  7. Полностью пересобрали защиту от читеров.


В целом, играть стало сложнее и интереснее, попробуйте!

Участникам, набравшим больше всего очков до 23:59 15 февраля, достанутся:

  • 1-е место — Sony PlayStation 5.
  • 2-е место — очки виртуальной реальности Oculus Quest 2.
  • 3-е место — умная колонка Яндекс Новая Станция Мини.


А ещё трое лидеров турнирной таблицы получат по фирменной футболке с подписью Ричарда Грея!

Играй в нашу новую игру прямо в Telegram!

sz7jpfj8i1pa6ocj-eia09dev4q.png

© Habrahabr.ru