Кроме работы я делаю браузерную игру для нердов

История создания аналога игры «Змеиные бои» Snek Fite с режимом «королевская битва».

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

Кроме работы я делаю браузерную игру для нердов

Меня зовут Михаил, в рабочее время я руковожу веб-студией и управляю развитием tech-продукта для ecommerce-компании. В нерабочее время — делаю то же самое. Всё как у всех. Но, как вы поняли, рассказ будет не про работу.

Начну из-за угла

Свою первую игру я сделал в одиннадцатом классе. Мы поспорили на деньги с одноклассником, смогу ли я сделать за лето текстовую адвенчуру. У меня не было компьютера, но я знал QBasic и немного TASM, и у меня был друг с компом, а также 2,5 месяца свободного времени.

Если кто помнит, что такое текстовые адвенчуры, тот знает, как они строятся. Это карта-лабиринт с локациями и переходами между ними. В локациях встречаются разные персонажи, квесты и мобы. Игрок управляет героем, вводя текстовые команды вроде «пойти на сервер» или «вломить орку булавой».

Раньше это было круто и здорово развивало воображение — оно работало вместо графического движка. Такие игры теперь ещё застенчиво называют Interactive fiction.

Спор есть спор, нужно было его выиграть.

Каждый день я ходил к товарищу, занимал его комп на два часа и фигачил на «Бейсике». После этого бэкапил всё на 3.5" дискету и уносил с собой.

Я придумал предысторию персонажа, самого персонажа, чем всё должно закончиться. Населил локации гоблинами, орками и другими NPC. Накидал таверн, магазинов и оружейных. Создал систему текстовых команд. Сделал карту на 2000 локаций.

Как оказалось, c картой вышел перебор. Мир был огромный. Для каждой локации пришлось придумывать описание местности. Больше моего мира был только The Worm in Paradise на «Спектруме» — там было 20 тысяч локаций.

После двухсот моя фантазия сдалась, и на помощь пришёл писатель Пришвин из школьной программы, у него как раз детализированные описания природы. Пришвина хватило ещё на 900 локаций. Толкина, как ни печально, всего на тридцать. Остальное пришлось описать по-чеховски: «луг», «густой лес», «дорога».

Как это водится, перед дедлайном я решил добавить фичу — каждый враг перед нападением кричал что-нибудь воинственное в зависимости от своей расы. Что-то вроде: «Огр закричал "буэерхгляяя!", нанёс удар бревном, но промахнулся». Это-то меня и подвело.

Для каждой расы был индивидуальный файл с репликами. Во время финальной демонстрации встреченный на локации «Дорога» гоблин попытался прокричать воинственную фразу, и игра вылетела, потому что в коде в имени файла с репликами гоблина была допущена опечатка.

В споре решили сделать ничью: игра-то была готова, а демо провалено из-за одной лишь опечатки.

Прошло, получается, уже почти 20 лет. И я надумал сделать ещё одну игрушку. Просто так, для себя. Мышки плакали, кололись, но продолжали жрать кактусы.

Идея

Дано:

  • Полное отсутствие свободного времени (20 минут в день в метро).
  • Непонимание законов геймдева как индустрии.
  • Технологический перфекционизм (это добавляет изюма в процесс).
  • Желание сделать игру.

Я подумал, что логичнее всего делать игру в том жанре, в котором сам разбираешься. Это вообще ко всему относится, хоть ты книгу пиши — если читаешь преимущественно эпическое фэнтези, то и получится у тебя эпическое фэнтези.

Поэтому я взялся за хардкор. В начале девяностых была такая компания Gamos — они в своё время выпустили множество винрарной классики вроде Lines и «Балды». То, что сейчас назвали бы казуальными играми. Среди продуктов компании была игрушка Snake Battle (или «Змеиные бои»).

На вид — обычная «змейка» с PvP на четверых. На самом деле — симулятор программирования. Свою змею нужно было обучать во встроенном редакторе, расставляя объекты по клетчатому полю. Вот так выглядела настройка — поле, объекты, логические операторы.

Кроме работы я делаю браузерную игру для нердов

Процентов девяносто новых игроков отваливались на этапе «я увидел экран настройки». Зато те, кто смогли пройти дальше, — залипали надолго. В общем, игра была достойной, а механика чуть ли не уникальной.

В детстве я играл в бесплатную версию Snake Battle — полную в моём регионе купить было практически невозможно (да и кто тогда покупал лицензионные игры, сознайтесь?). Единственное, чего сильно не хватало, — возможности поиграть с другом и выяснить, у кого змея длиннее.

Чем я и решил заняться — сделать свою Snake Battle с онлайном, турнирами, таблицей лидеров, разными режимами и всем таким.

Скриншот концепции. Препятствия на поле — пока что в планах, в текущей версии стены есть только по периметру
Скриншот концепции. Препятствия на поле — пока что в планах, в текущей версии стены есть только по периметру

Snek Fite. Origins

Что нужно инди-игре для успеха? Мемное название.

Ну нет, конечно. Нужна команда. Сначала я так и хотел поступить: в России набирали популярность хакатоны, мы даже стали проводить свой HackDay. Думал так: приду с концепцией, наберу людей, по-быстрому за 48 часов запустим прототип, а дальше видно будет.

Но команда как-то всё не собиралась. В конечном счёте решил сделать Snek Fite сам и между делом проверить книгу про customer development — сделать прототип, нащупать целевую аудиторию, расставить фичам правильные приоритеты.

Стал искать путь создания проекта. Всего нашёл три модели:

  1. Стартаперская. Сделать лендинг, форму лидогенерации. Полить трафиком и посмотреть, сколько народу наберётся. Если нормально, то делать MVP.
  2. Олдскульная. Игра рассчитана на программистов и тех, кто около. Объяснить её на лендинге в виде двух картинок и трёх абзацев текста будет сложновато. Поэтому можно просто сделать MVP (минимальную жизнеспособную версию) игры и опубликовать её, а потом уже полить трафик.
  3. Краудфандинговая. Судя по всему, игра укладывается в категорию «инди». А значит, можно создать проект на Indiegogo и проверить, будет ли спрос. Такой способ я ещё не пробовал. В целях образования — интересно, но запуск отодвинется.

Устроил опрос в Telegram-канале, где большинством голосов (их было три) было решено: делаем по старой доброй модели — сначала первая версия игры, потом все маркетинговые пляски. В мае нашёл несколько часов подряд и засел за код. За ночь развернул рельсы, установил админку, сделал регистрацию и прикрутил GA.

Визуально игра была страшноватой, но это ведь первые два часа разработки МЖП. первая версия игры могла регистрировать змей, программировать их с помощью BPI (basic programming interface) и запускать бой на четыре змеи.

Актуальная версия Snek Fite: 9 змей на одном поле в режиме «Боевой рояль»

Игру сделал браузерной, чтобы не привязываться к какой-то платформе и собственноручно ограничивать базу игроков. На бэкенде — Ruby-on-Rails и PostgreSQL.

Не удержался и купил красивый домен Snek.app — совсем лоукостером остаться не получилось.

Игровой процесс

Чтобы начать играть, нужно создать змею, дать ей имя, и всё — у тебя появляется первый играбельный персонаж. Поначалу цвет шкурки выдавался рандомно перед началом каждого матча, сейчас за каждой змеёй навсегда закрепляется её уникальная раскраска.

Кроме работы я делаю браузерную игру для нердов

Потом нужно настроить логику поведения — примерно то же самое, что в игре-прародителе.

Кроме работы я делаю браузерную игру для нердов

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

Дуэль. Тут просто, один на один.

Кроме работы я делаю браузерную игру для нердов

Стандарт. Четыре змеи на одном большом поле. Намного веселее и динамичнее.

Кроме работы я делаю браузерную игру для нердов

Батл-рояль. Deathmatch на девять змей на одной карте. Настоящее змеиное спагетти, исход матча предсказать невозможно — лидер в первых двух третях игры может быть ловко съеденным ближе к финалу каким-нибудь выскочкой.

Кроме работы я делаю браузерную игру для нердов

Онлайновая часть игры — это асинхронный мультиплеер. После того как ты создал змею, она попадает в общую базу. Из неё и «вытягиваются» змеи для матча, выбираются случайным образом.

Долгое время игрок Undefined был нашим королём, к этому даже все привыкли. Он даже написал своё <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1sKfvZeq2IqoVjJRfg0QcvG9SFGDqy-QgxFr2TW3xBNc%2Fedit%23heading%3Dh.90mw9xfqz77d&postId=43330" rel="nofollow noopener" target="_blank">руководство</a> по игре. Государственный переворот произошёл буквально на днях, короля с шипением стащили с трона
Долгое время игрок Undefined был нашим королём, к этому даже все привыкли. Он даже написал своё руководство по игре. Государственный переворот произошёл буквально на днях, короля с шипением стащили с трона

Рейтингов в игре, кстати, сейчас три — по эффективности, активности и национальный (показывает топ стран с наибольшим количеством очков).

В общем, я постоянно что-то допиливаю. И как порядочная игровая компания из одного человека, прислушиваюсь к фанбазе — через опросы в Telegram, Facebook, Twitter и «ВКонтакте». Там же у нас есть чатик для дискуссионного клуба. Сообщество живое и активное, что есть плюс.

Присоединяйтесь. Чем больше игроков, тем веселее. И обновления тестировать лучше.

Ну и рассказывайте, какие у вас сайд-проекты, чтобы не зацикливаться на работе.

1313
8 комментариев

О, я хотел сделать батл рояль со змейками, у которых головы в виде аваторов из ВК, но пока передумал из-за отсутствия киллер-фич

Если позиционировать игру как симулятор программирования - может стрельнуть. Если качество будет нестыдным, можно завернуть в Электрон и продавать в Стиме.

Единственное, проблема браузерных игр - пока доходы придут, сервер на что-то надо поддерживать, а нагрузка может расти непропорционально выручке.

Удачи, продолжай!

3

Спасибо.
Да, доделаю фичи, приведу внешний вид в порядок и пойду на steam. Нагрузка там пока небольшая, несмотря на 40000 проведённых баттлов.

1

Такие игры надо на Python писать, символично получится.

Отдельный модуль будет на питоне. Про ML.

А можно было написать в заголовке статьи не “нердов», а «задротов»?

Модераторы не пропустят.