Если вы ещё не сыграли в нашу прорывную игру «Атомный Графъ», которую можно назвать, без ложной скромности, разработкой года, то самое время приобщиться. А сегодня мы расскажем, как создавали её, как защищали от читеров и какие призы приготовили для самых активных игроков.
Как вам в голову вообще пришёл такой трэш?
2022 год получился весьма и весьма богатым на события. Они привлекли к себе внимание в конце февраля и уже не давали о себе забыть, заставляя каждый час листать новости и удивляться тому, как такое вообще может случиться в нашей вселенной?
Ближе к концу года мы поняли, что людей из новостных чатиков в Telegram сможет вытащить только кринжовая игра, в которой будет совершенно другая реальность. И тогда одному из наших разработчиков попалась на глаза альтернативная версия истории Отечественной Войны 1812 года в духе РЕН ТВ, настолько нелепая по своей сути, что у любого человека с высшим образованием ничего кроме улыбки не вызвала бы. И в любое другое время мы прошли бы мимо, но на фоне всего того трындеца, что творился весь 2022-й, видимо, произошло смещение координат «нормальности» и мы схватились за этот выдуманный атомный взрыв над Москвой как за соломинку, чтобы окончательно не сбрендить.
Дальше цепочка размышлений увлекла наши воспалённые умы в картинку, которая висела в нашем офисе, а именно на плакат игры Duke Nuken 3D. Duke Nukem — это же, если дословно, «Атомный Герцог». Тут весь пазл в нашей голове сошёлся и мы решили, что вот она, истина!
Мы делаем русскую версию Duke Nukem, только со своим, «старорусским» героем. Весь 2022 год многие страны отказывались и всячески отменяли русскую культуру, что нас абсолютно не устраивало. У нас есть своя, русская мифология, в которой твари не менее фантастические, герои не менее брутальные, а недостающее имбовое оружие появится, если поместить это всё в атмосферу стимпанка, который, раз уж речь зашла об альтернативной истории, не мог быть проигнорирован.
Чтобы совсем уж не зарваться в своём безумии, мы позвонили Ричарду Грею — дизайнеру уровней в нетленке Duke Nukem, также известному как Levelord, и рассказали ему о проекте. Ответ был примерно таким:
Так на борту нашей лодки начинающих геймдевов оказался Levelord, и мы поплыли…
Прототипирование
В качестве инструмента для прототипирования мы выбрали proto.io — довольно простой и удобный облачный сервис, который позволяет быстро накидать расположение блоков и показать основную механику игры:
Чтобы не потерять хрупкую вовлечённость на мобильных устройствах (ведь в соседнем чатике новости про возможную третью мировую…), мы сразу погружаем нашего участника в игру, благо механика простая, и о монстрах, которые становятся причиной смерти, рассказываем уже после смерти:
Отрисовка героя и врагов
Начали мы, конечно же, с главного героя. В нашей стимпанк-вселенной Атомный Граф (в миру — Евграфъ Ананиевич Голенищев) — внебрачный троюродный племянник светлейшего князя Михаила Илларионовича Кутузова. Он был интеллигентным юношей, дворянином из обедневшей ветви знатного рода.
«Однажды на Ивана Купалу Евграфъ упал по пьяни в ров, куда стекали нечистоты с половины Китай-города, хватанул несколько рентгенов, и в результате у него ссохлась правая рука, нога и глаз, но при этом открылись всякие опасные способности, тревожившие его разум и пугавшие домочадцев и челядь. Надо отдать Евграфу должное: он не пал духом, но нашёл придворного мастера Людвига родом из Пруссии, пребывавшего в опале, который на задворках Всехсвятского монастыря организовал потаённую мастерскую. В той мастерской Людвиг помог покалеченному Евграфу, выточив для него механическую руку и ногу. А в пустую правую глазницу несгибаемый молодецъ с помощью всё того же Людвига вставил себе хризолит чистейшей воды в серебряной оправе.
Характер героя:
Обижается, когда его называют Квантовым Графом. Девушки его любят, поэтому он вынужден быть с ними немного высокомерным, чтобы не давать им ложной надежды. Но при этом тайно страдает по одной Полуднице, которую не может убить. Она одним своим взглядом делает его бессильным».
Стилистически отрисовываем героя как стимпанковского графа:
- На голове характерный для того времени котелок.
- На лице подкрученные усики и короткая бородка.
- Вместо пенсне у него высокотехнологичный гаджет, который позволяет видеть в разных диапазонах, со встроенным моноклем, прибором ночного видения и пр.
- Костюм с элементами защиты и бронепластинами.
- Правая рука не родная, заменена искусственной с гаджетами.
- В левой руке трость с атомным источником энергии.
Иллюстратор по этому ТЗ сделал такой вот набросок:
Нам он сразу же понравился, и мы отправили его на доработку:
Ну, красавец ведь! По словам Ричарда, прожившего в России последние 10 лет, именно таким он представляет нашего героя. «Я, к сожалению, не застал те времена, когда в России носили такие котелки и трости, но уверен, что наш Граф выглядит как настоящий, благородный дворянин из параллельной вселенной!»
Вид сверху и анимация пинка:
Кстати, пинок был позаимствован у Duke Nukem. При его использовании количество баллов за смерть врага выше, чем при использовании трости. Ричард вспоминал, что эта фишка в Duke Nukem дико радовала игроков, и мы не могли не использовать это в нашей игре.
Дальше мы приступили к отрисовке всех врагов.
▍ Изба на курьих ногах
Изба на курьих ногах — результат генетического эксперимента Дмитрия Донского по созданию оружия против орды хана Тохтамыша. Из-за атомного взрыва в 1812-м избёнки разбежались из мест дислокации по лесам, одичали и стали нападать на одиноких путников и отошедших от обоза по нужде.
▍ Кощей
Из-за атомного взрыва этот мутант обрёл сверхъестественную силу и здоровье, фактически став бессмертным. Правда, радиация несколько попортила его внешность.
▍ Яга — смертоносная красотка
Во времена Наполеона баба Яга уже была давно немолода. А радиация прошлась по ней катком: испоганился характер и окостенела нога, зато появились способности к левитации.
▍ Не купайся в реке без трусов, водяной не дремлет
Радиация наградила водяного невиданной силой, биоэхолотом и тентаклями. Раньше он любил тихие омуты с тиной, а теперь рыщет на мелководье у городских пляжей и подстерегает самонадеянных купающихся.
▍ Лихо одноглазое
Подвид среднерусского циклопа. Когда-то был широко распространён на территории европейской части России. Со временем лихо ассимилировались в среде местных юродивых, беглых каторжан и скотоложцев.
▍ Оборотни
Это заблудившиеся в лесах и болотах солдаты армии Наполеона, которые с голодухи нажрались радиоактивных мухоморов, одичали и остались жить в чаще. По ночам воют на луну, которая напоминает им сияющий шар воздушного атомного взрыва.
Казалось, что набор врагов идеальный. Мы показали это всё Ричарду, на что получили ответ:
«Nice! Maybe some evil child-like enemies? Children scare me».
Мы сильно призадумались… Ведь в славянской мифологии из детей почему-то не делали монстров, и самым близким персонажем был хитрый и коварный… колобок. Когда мы предложили этот вариант Ричарду и рассказали о том, что это за тварь, он расхохотался. На том и порешили.
▍ Колобок
По одной из версий, первые колобки прикатились на Русь, сбежав из каравана на Шёлковом пути. В 1812-м некоторые из них мутировали, стали плотоядными и крайне агрессивными шарами.
Итак, все персонажи отрисованы, делаем вид сверху:
Отрисовка дизайна игры
Мы не были оригинальными, и для отрисовки дизайна использовали Figma. Сроки были сжатые, а для коллективной работы распределённой команды лучшего инструмента пока не придумали.
Levelord вспоминал 2016-й год, когда Москва уже появлялась в Duke Nukem в дополнении Alien World Order, и сокрушался, что на тот момент не существовало таких удобных инструментов, как Figma, и нельзя было так быстро обсудить и реализовать такие интересные проекты.
Элементы интерфейса и вид карточек с врагами, появляющиеся после смерти героя:
Локаций у нас три: лес, пустыня и город.
Уже в самой игре здания, деревья и другие элементы генерируются случайно, создавая иллюзию бесконечности.
Звуки
Атмосферу невозможно создать без соответствующих звуков. К их подбору и микшированию мы подошли весьма ответственно, потому что игра фактически «бесконечная» и нужно было сделать так, чтобы они не сильно надоедали и не вызывали через час игры рвотного рефлекса:
Каждый из врагов умирает или принимает удар от пинка со своим звуком:
Специальные звуки есть и при подборе всяческих усилений:
Предварительный этап на этом можно считать оконченным, мы посмотрели на объём исходных файлов и вспомнили старый анекдот:
Закончилась посадка на суперлайнер ИЛ-2086. В салон выходит стюардесса: «Дамы и господа! Чтобы помочь вам скоротать время полёта, на борту нашего лайнера имеются библиотека, кинозал, три бара, ресторан, бассейн и два теннисных корта. А теперь я попрошу вас пристегнуть ремни безопасности, потому что сейчас вместе со всей этой фигнёй мы попытаемся взлететь!»
Программирование
Хоть игра и двумерная, она создана на основе Unity. Эта среда разработки — прекрасный инструмент для трёхмерных игр и анимации с высочайшей детализацией, но она весьма удобна и для создания подобных «Атомному Графу» простых веб-приложений. Сначала у нас были опасения, будет ли игра хорошо работать, но после тестов они развеялись.
В основном мы использовали С# с редкими включениями JavaScript. Также пришлось немного покопаться в Telegram API, чтобы подключить игру к этому мессенджеру.
Общая разработка заняла пять дней, из них чуть больше суток — на создание самого движка, а около 60 % времени ушло на вёрстку элементов интерфейса под разные платформы. Это частая проблема в двумерных веб-приложениях: на разных устройствах могут непредсказуемо сдвигаться кнопки, всплывающие сообщения, элементы меню и т. д. Остальное время мы потратили на привязку к Telegram, заливку на сервер и отладку.
Продумывая игровой процесс, мы хотели постепенно усложнять игру, добавляя всё новых и новых врагов и делая их быстрее. Но в результате неизбежно упёрлись бы в потолок человеческих возможностей. Игроки раздражались бы, что справиться с врагами физически невозможно, и мы получили бы много негатива. Поэтому от постоянного усложнения мы отказались.
Попутно пришлось отказаться от некоторых механик и адаптировать отдельные части кода, чтобы не создавать новых лазеек для читеров и упростить защиту.
Защита от читеров
Было бы желание, а сломать можно что угодно. Мы не питали иллюзий и понимали, что любая игра привлекает читеров, особенно если на горизонте маячат хорошие призы. Но мы не собирались опускать руки и старались защитить проект, чтобы отсеять мамкиных хакеров, которых подавляющее большинство среди любителей накернить систему.
Изначально наша защита состояла в шифровании всех данных, отправляемых клиентом на сервер, с помощью применяемого в Telegram алгоритма. При этом система не позволяла обращаться к серверу без запуска клиента, чтобы не было примитивных накруток. Взломать передачу данных можно было только узнав ключ шифрования. Сначала мы выдавали каждому участнику фиксированные ключи, а позднее сделали их динамическими, чтобы усложнить читерам жизнь.
В новом апдейте защита от читеров будет более серьёзная. За месяц боевой эксплуатации мы собрали данные по более чем 6000 игровым сессиям, проанализировали и поняли, что есть довольно простой и изящный способ защиты, о котором мы, дабы не упрощать читерам жизнь, рассказывать тут не будем.
Первый запуск игры
Сразу же после сборки первой стабильной версии мы дали её потестить Ричарду. «Здорово! Но… слишком просто. Я набрал 20 000 очков одной левой», — пошутил Levelord и дал советы, как сделать геймплей более сложным и интересным. Мы увеличили скорость некоторых врагов, сделали бОльшим ущерб от их атаки, добавили объектов в ландшафте. Кроме того, двойной тап, который запускал пинок, слушался не очень хорошо — пришлось переписать этот класс.
После того, как каждый из нашей команды набрал пару десятков тысяч очков, и все баги были вылизаны, мы почистили рейтинг, запустили игру в чат-боте и сделали анонс на Хабре.
Статистика
За месяц (с 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 с подписью Ричарда Грея!
Будет ли новый конкурс?
Да-да-да. Мы выпустили обновление и анонсируем новый конкурс.
Что нового?
- Режим «Ночной кошмар» — включается, если пнуть череп. При его активации всё становится чёрно-белым, контрастным, и враги умирают сами при приближении к главному герою. Длительность режима — 10 секунд. Если череп не пинать, а пробовать уничтожить из лазера, то он не уничтожается. Если не успеть пнуть, то он отнимает 50 % здоровья.
- Добавили ещё одну пасхалку. Первому нашедшему — приз!
- Вводим ещё одного героя — Полудницу: сексапильную девушку, которую нельзя убить, её можно только облететь. Пролетая мимо неё, граф томно вздыхает.
- За смерть врага от пинка даём больше очков, потому что это сложнее.
- Увеличили скорость колобка, ведь он катится.
- Сделали разный урон у разных врагов.
- Полностью пересобрали защиту от читеров.
В целом, играть стало сложнее и интереснее, попробуйте!
Участникам, набравшим больше всего очков до 23:59 15 февраля, достанутся:
- 1-е место — Sony PlayStation 5.
- 2-е место — очки виртуальной реальности Oculus Quest 2.
- 3-е место — умная колонка Яндекс Новая Станция Мини.
А ещё трое лидеров турнирной таблицы получат по фирменной футболке с подписью Ричарда Грея!
Комментарии (8)
Khan54rus
02.02.2023 05:40Очень долго загружается игра, даже с быстрым интернетом.
Зато пасхалку быстро нашёл
Hidden text
igrovestnik
02.02.2023 11:29+2По-моему идея неплохая) Смесь дюка и нашей мифологии - звучит, как что-то интригующее ????
Особенно порадовал арт) выглядит очень симпатично.
isitnull
Увы, не взлетело (Telegram 4.3.3, Linux x86_64):
https://imgur.com/PnZ702y
Ошибка возникает во время загрузки игры в окне телеграм, индикатор загрузки при этом во второй половине шкалы.