800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

Несколько недель назад я рассказал здесь про свою игру в Telegram. Статью посмотрели 800 раз, а реакций было ноль. Перечитал — и понял почему. Поэтому сегодня без «а ещё у нас есть». Только то, что пошло не так, и что я из этого вынес.

Если коротко, что за игра: Telemon живёт прямо в Telegram-чатах. Выращиваешь питомцев, сражаешься с друзьями, всей группой ходишь в рейды на боссов, а между делом играешь в кости в таверне. Делаю её один, без бюджета. Как и в прошлый раз, честно: код и модельки питомцев я собираю вместе с нейросетью, а от меня - идеи, геймдизайн, баланс и бесконечные тесты. Ниже будет видно, что нейросеть тоже ошибается, и иногда очень уверенно.

Первая статья была рекламным буклетом: перечень функций с картинками. Читать такое скучно, я бы и сам пролистал. Так что вторая - дневник. Шесть историй, в каждой что-то сломалось.

1. «Бот тормозит — значит, виноваты гифки»

В какой-то момент бот начал зависать. Нажимаешь кнопку - и тишина секунд на десять, а потом всё прилетает разом. Иногда не прилетает вовсе.

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

Не помогло. Тогда я наконец сделал то, с чего надо было начинать: открыл логи. Процессор скучал. Зато там было полно сообщений о том, что запрос к Telegram не дождался ответа. Бот был ни при чём - у него просто плохо получалось достучаться до самого Telegram. Мой сервер стоит в России, и связь с серверами Telegram оттуда работала через раз.

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

Что понял: сначала логи, потом гипотезы. Час, потраченный на «очевидную» причину, мог уйти на чтение одного файла. Хотя вынос рисования в фон всё равно пригодился - с ним сервер спокойнее переносит пиковые часы.

2. Две игры в одном чате

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

Оказалось, у Telegram есть лимит, о котором я знал только в теории: сколько сообщений бот может отправить и отредактировать в одном чате за короткое время. Каждый бросок в костях - это ролик плюс несколько правок сообщения. Одна партия в лимит укладывается. Две - уже нет. Telegram отвечал «подожди немного», а бот молча терял это обновление. Партия оставалась без кнопок навсегда.

Исправлял в три слоя:

• Ждать, а не терять. Если Telegram просит подождать недолго, бот ждёт и повторяет запрос.

• «Горячий чат». Если Telegram пожаловался на частоту, бот на полторы минуты перестаёт показывать в этом чате анимации и сразу присылает результат. Красота уступает место скорости.

• Кнопка «разморозить». Если что-то всё-таки зависло, любой игрок партии может вернуть кнопки сам.

Что понял: в Telegram-игре дефицитный ресурс - не процессор, а количество сообщений в чате. Каждую анимацию нужно проектировать так, будто их в этом чате будет пять одновременно.

3. Где искать игроков (спойлер: не там, где я искал)

Это самая болезненная часть. Игра есть, а людей в ней нет. Я попробовал то, что советуют все:

• Пиар-группы и чаты взаимопиара. Ноль. Мои сообщения просто проигнорировали, а в одном месте предложили купить рекламу.

• Писать людям в личку. Когда я начал писать незнакомым людям, Telegram быстро ограничил мой аккаунт: писать можно только контактам. Самое смешное, что официальный бот проверки ограничений уверял, что всё в порядке. Урок усвоил, больше так не делаю - и вам не советую.

• Чаты про покемонов. Логично же: игра про питомцев. Собрал целый список, живых оказалось четыре, и почти все - про Pokémon GO, где людям интереснее рейды в парке, чем бот в чате.

А потом бота добавили в один обычный живой чат: около двухсот участников, из них человек тридцать реально переписываются. Оттуда пришли 32 игрока. Больше, чем изо всех предыдущих попыток вместе взятых. А живые игроки, кстати, первыми и находят баги - вроде того, с двумя партиями.

800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

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

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

4. Шестнадцать моделек без художника

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

Напомню, как они сделаны. Художника нет, 3D-редактора тоже. Каждый питомец - это описание в коде: «вот эллипсоид-туловище, вот конусы-уши, вот голова чуть повёрнута». Программа складывает фигуры, сглаживает стыки и рендерит картинку. Это удобно - можно в любой момент поправить одну цифру. И коварно - ты не видишь, что получилось, пока не нарисуешь.

А получалось разное. Мои любимые провалы:

• Воздушный змей Ветролиса сначала выглядел как теннисная ракетка. Поправили - стал похож на рожок мороженого. Только с третьей попытки стал змеем.

• Шарф того же лиса развевался вперёд и выглядел как высунутый язык.

• Жук Самоцветик получил полоски на панцире и превратился в пчелу.

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

• Хомяк-Богатырь получил плащ размером с себя, Грозовая Летяга - крылья-забор, а Ураганный Лис - ноги жирафа.

800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

Каждую модельку я смотрел глазами: в маленьком размере, в карточке, рядом с остальными. Половина правок - не про красоту, а про то, чтобы питомца можно было узнать по силуэту размером с ноготь в чате.

800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

5. Симулятор, который нашёл имбу

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

Первый прогон выдал две проблемы:

• Самоцветик, бронированный жук, на 40 уровне выигрывал 68% боёв. Высокая защита плюс фирменный луч, который ещё и снижает защиту врага, - классическая имба.

• Хомка на 8 уровне выигрывал 8% боёв, а на 40 - уже 60%. В начале у него только слабые атаки, зато потом появляется «Хомячий таран» - сильный и тоже снижающий защиту. Жалкий малыш, который вырастает в танк.

Ослабил Самоцветику характеристики и луч. Хомке дал сильную стартовую атаку и порезал таран. Быстрому Искрику поднял силу атаки. Вот что получилось:

800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

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

6. Новичку нечего открыть

Последняя история - про экономику. Валюта в игре только зарабатывается: за бои, задания и ежедневный вход. Купить её нельзя, это принцип. Сундук с атаками стоит 400 искр. Для игрока, который играет неделю, это нормально. Для новичка в первый день - бесконечность. Человек проходит обучение и видит магазин, где ему ничего не по карману.

Решение - дешёвый кейс за 150 искр, «Капсула находок». Внутри одна вещь: чаще свиток с атакой или конфеты, иногда питомец. Чтобы не было обидно, есть гарант: редкий питомец выпадет не позже 25-й капсулы. Новичкам после обучения сразу дают две капсулы, ещё по одной - на 3-й и 7-й день ежедневной серии. И да, капсулы, как и всё остальное, только за заработанные искры.

Заодно у каждого питомца появилась сияющая форма - редкий окрас с шансом 2–5% из яиц и капсул. На силу не влияет, только на то, как сильно тебе будет завидовать чат.

800 просмотров, спамблок и Хомяк-Богатырь: дневник разработчика Telegram-игры

Маленькая победа напоследок

Не всё ломалось. Однажды мне пришла в голову идея: когда ты вызываешь кого-то на бой, пусть в чат прилетает не сухой текст, а твой питомец, который выходит на арену. Сделали. Мелочь, но такое сообщение в ленте чата просто невозможно пролистать.

Что я понял

• Логи раньше гипотез. Особенно когда гипотеза «очевидная».

• В Telegram главный лимит - сообщения в чате, а не мощность сервера.

• Игроков приводят живые чаты, а не реклама. И точно не сообщения незнакомцам.

• Симулятор баланса окупается за один прогон. Без него я бы выпустил имбу и узнал об этом от злых игроков.

• Новичку нужно что-то открыть в первые пять минут. Иначе пятой минуты не будет.

• И статья-буклет никому не интересна. Посмотрим, как зайдёт дневник.

Два вопроса к вам

Первый - к тем, кто делал игры. Как сделать скорость полезной, если броня и здоровье почти всегда важнее? Давать быстрым шанс уклониться? Второй ход подряд? Я склоняюсь к уклонению, но боюсь, что бои станут лотереей.

Второй - ко всем. Где бы вы искали первых игроков для игры, которая живёт в чатах? Я понял, куда не надо, а вот куда надо — пока выясняю.

Если захочется посмотреть на всё это вживую, бот здесь: @pvpgame_app. А в следующем дневнике расскажу, что из ваших советов сработало.

11