Around: как я четыре года выбирал карту для игры и трижды всё переделывал
Around – игра, в которой ты закрашиваешь территорию настоящего города своими шагами. Вся игра происходит поверх карты, поэтому вопрос, чью карту использовать, тут не мелочь, а фундамент. Сами карты никто не рисует с нуля: их берут у компаний, которые этим занимаются, примерно как встроенную карту в приложении доставки. За четыре года я менял поставщика трижды, и каждый раз по новой причине.
2022 год: Mapbox, потому что красиво
Когда я начинал, выбор был почти эстетический. Mapbox выглядел лучше всех: аккуратные улицы, приятные шрифты, а главное, карту можно было показать в виде объёмного глобуса, что для игры про захват мира смотрелось идеально. Плюс всё нормально работало и на Android, и на iPhone, а бесплатного лимита на старте хватало с запасом.
Клетки, которые игрок закрашивает, я тогда делал способом, который сейчас вызывает у меня улыбку. Я заранее готовил файл с разметкой всего города на клетки, заливал его на сервер Mapbox, а приложение при каждом открытии карты запрашивало оттуда нужный кусок и перекрашивало клетки в цвета команд. Работало это ровно до тех пор, пока город был маленьким. Как только я попробовал разметить площадь побольше, файл разросся до нескольких гигабайт, бесплатного лимита на его хранение перестало хватать, а на карте начали появляться дыры там, где клетки просто не успевали загрузиться. Про то, почему клетки в итоге стали шестиугольными, я писал отдельно.
Потом у проекта появилась команда и собственный сервер, где мы стали считать всё сами: кто какую клетку закрасил, чья она сейчас, когда её можно перекрасить. Хранить разметку у чужой компании стало незачем.
Оставался вопрос денег. Платить им на стадии разработки, когда у проекта ещё нет ни финансирования, ни выручки, нецелесообразно, а с ростом аудитории пришлось бы уходить с него всё равно. Плюс из России эти счета попросту не оплатить. Так что вопрос закрылся сам собой.
Я сел и сравнил всё, что вообще существует
Прежде чем выбирать заново, я свёл всех поставщиков в одну таблицу и прогнал по критериям, которые важны именно для игры, а не для навигатора. На это ушла примерно неделя.
Пара пояснений, почему эти пункты вообще в списке. Водяной знак, это логотип поставщика поверх карты, который нельзя убрать: в игре, где карта занимает весь экран, чужой логотип в углу выглядит чужеродно. Щипок пальцами, привычное приближение двумя пальцами, оказался не у всех. А под управлением я имел в виду, насколько плавно карта поворачивается, наклоняется и слушается пальца, потому что в игре по ней возят постоянно, а не смотрят один раз на маршрут.
По таблице видно, что идеального варианта не было вообще. Mapbox по-прежнему выигрывал почти по всем пунктам, но упирался в деньги. OpenStreetMap проигрывал в удобстве управления и мелочах вроде щипка, зато был единственным полностью бесплатным вариантом без чужого логотипа поверх игры. Его я и выбрал: недостатки в управлении можно доработать самому, а вот растущий счёт от поставщика ничем не лечится.
Попытка вторая: бесплатные карты OpenStreetMap
OpenStreetMap, это открытая карта мира, которую много лет пополняют обычные люди, вроде Википедии, только про улицы и дома. Работать с ней в приложении мне помогала библиотека osmdroid, то есть готовый набор кода, который умеет показывать такую карту на телефоне. Сам переезд занял около двух недель.
Так мы прожили примерно год. Карта работала, платить никому не надо было, клетки после переезда логики на наш сервер рисовались нормально, и какое-то время всё устраивало.
Проблема оказалась не в самой карте, а в наборе кода. Он никогда не был так хорош, как у Mapbox, а 20 ноября 2024 года его авторы официально закрыли проект и написали прямо: поддерживать дальше стало не по силам. Строить игру на том, что больше никто не чинит и не обновляет под новые версии Android, я не готов, так что пришлось искать замену в третий раз.
Российские карты: посчитал и закрыл вкладку
На этом этапе я ещё раз вернулся к отечественным вариантам и внимательно посмотрел на цены.
У Яндекса бесплатно можно показывать карту максимум тысяче человек в сутки, и только в бесплатном приложении. Всё, что больше, стоит денег: тариф на 5000 человек в сутки обойдётся в 195 000 рублей за год или 20 800 рублей в месяц, на 20 000 человек в 585 000 рублей, а на 100 000 в 1 820 000 рублей. И это только если смотреть на лимиты по людям, если ещё лимиты по тайлам, и другие. То есть чем успешнее игра, тем больше счёт, и рост аудитории превращается в проблему, а не в радость.
У 2ГИС карты для приложений тоже платные и по договору, у Google платные, и оплатить их из России всё равно невозможно. Оставался открытый бесплатный вариант.
Итог: MapLibre
Про MapLibre я до этого момента вообще не знал, наткнулся на него только когда искал замену osmdroid. И оказалось, что он закрывает ровно все нужные мне пункты.
MapLibre, это продолжение того самого Mapbox, только бесплатное. История такая: в декабре 2020 года Mapbox сделал свой движок платным, но последняя свободная версия осталась доступна всем. Сообщество разработчиков взяло её за основу, собрало отдельную организацию и с тех пор развивает своими силами.
Если вернуться к моей таблице, MapLibre собирает плюсы почти во всех строчках сразу. Он бесплатный, как OpenStreetMap, но отрисовывает карту так же хорошо и быстро, как Mapbox, потому что вырос из него. Щипок пальцами, плавный поворот и наклон работают нормально, а это ровно те пункты, где OpenStreetMap с osmdroid проседал. И в отличие от Mapbox, Яндекса и TomTom, никакого чужого логотипа поверх игры нет, экран остаётся полностью нашим. Есть готовые решения и под Android, и под общую версию для Android с iPhone, которую мы используем сейчас, раз готовим выход на iOS.
Отдельно скажу про сообщество вокруг проекта, оно оказалось очень живым и отзывчивым. Я много раз обращался к ним за советом, в том числе по отрисовке наших клеток на карте, и всегда получал нормальные ответы. Для бесплатной библиотеки, которую развивают энтузиасты, это дорогого стоит. Спасибо вам ❤
Этот переезд оказался самым долгим, около двух месяцев. Дело не в самой замене движка, а в том, что мы основательно взялись за жесты и работу камеры: чтобы карта корректно вела себя при приближении, при переходе к событию, при возврате к игроку, во всех этих мелких случаях, которые незаметны, пока не сломаны. Единственная потеря, тот самый глобус: в MapLibre он пока работает только в браузере, а на телефоне его нет.
Как мы переехали на собственный сервер
Сначала мы брали готовые стили карты от MapTiler, и месяца четыре всё работало отлично. Потом начались перебои: из-за блокировок интернета в России запросы к зарубежному источнику стали проходить всё хуже, и время от времени карта у игроков просто не отрисовывалась. Пустой экран вместо города в игре, где вся суть в карте, это приговор.
Поэтому мы решили поднять собственный сервер и раздавать стиль карты с него. Проблему с доступностью это закрыло полностью, но принесло две новые: обновление данных и место.
С обновлением всё решилось просто. Раз в квартал мы выгружаем свежие данные OpenStreetMap и пересобираем по ним стиль, чтобы новые дома и улицы появлялись в игре. Чаще нет смысла, реже уже заметно, что карта отстаёт от реальности.
Свой стиль карты: что мы убрали и почему
Раз стиль теперь наш, мы сразу перерисовали его под игру. Первым делом убрали остановки: их на карте оказалось невероятное количество, и для игрока они не несут никакой пользы, просто засоряют вид. Потом поправили цвета дорог, чтобы они не спорили с цветами команд и вся картинка выглядела спокойнее.
Отдельная история с магазинами, аптеками и прочими коммерческими точками. Мы убрали их подписи полностью, и вот почему. В игре есть рекламные точки от партнёров: компания размещает у себя точку, игрок подходит к ней и получает монеты. Если бы на карте бесплатно светились все аптеки подряд, ценность такого размещения падала бы, и выглядело бы это странно: одна аптека отмечена как партнёр, а соседняя видна просто потому, что она есть в данных.
Cтандартный стиль карты против нашего:
Почему в игре пока есть только Россия
Раз мы больше не платим за карту деньгами, платить приходится местом на сервере: все данные о том, где какие улицы и дома, теперь лежат у нас. Одна только Россия занимает около 12 гигабайт. Для сравнения, исходные данные OpenStreetMap по России весят примерно 4 гигабайта в сжатом виде, а по всему миру почти 88.
Поэтому, если сейчас приблизить карту к Сингапуру, вы увидите пустой холст без улиц и домов. Причём это не гипотетическая проблема. Недавно под одним из постов человек написал, что живёт в Сербии, выбирает себе такое приложение и хочет, чтобы оно работало за рубежом. Ответить пришлось честно: пока никак.
Дело не только в объёме данных. Наш сервер стоит в России, и игрок из Японии или той же Сербии столкнётся с заметными задержками, его клетки будут закрашиваться с опозданием. Ставить серверы в других странах ради нескольких человек пока рано.
Что я вынес из этих четырёх лет
Инфраструктуру для проекта из России нужно выбирать не по красоте картинки, а по двум скучным вопросам: во сколько это обойдётся, когда игроков станет много, и не отвалится ли оно само по причинам, которые от тебя не зависят. Я выбирал Mapbox за глобус и приятные шрифты, а упёрся сначала в целесообразность оплаты, потом в блокировки.
Стоила эта красота трёх переездов и примерно трёх месяцев чистой работы. Игроки, справедливости ради, разницу увидели: стили карты у Mapbox, osmdroid и нашего собственного отличаются заметно, и текущая версия мне нравится больше всех предыдущих.
Как бы вы поступили на нашем месте: добавляли бы другие страны заранее, на случай если игроки оттуда появятся, или ждали, пока они реально придут?
Ссылки
- 📱 Скачать Around (открывать без VPN): https://www.rustore.ru/catalog/app/ru.around.android.app
- 💬 Наш чат игроков в ВК: https://vk.me/join/JojYfi0gZVzL6RUTVDyxJwXGiLKXlHQ_dfw=
- 💬 Новости, плюшки, истории разработки: https://t.me/around_game
- 🌐 Сайт проекта: https://aroundgame.ru/