Пешком, на велосипеде или на машине: что считается честным в моей GPS-стратегии
В GeoConquest реальная карта служит общим игровым полем. Игрок выходит со своей территории, оставляет за собой след и, вернувшись обратно, захватывает область внутри маршрута.
Из этого правила довольно быстро возникает очевидный вопрос: а что мешает сесть в машину и за вечер захватить половину города?
Как оказалось, гораздо более сложный вопрос звучит иначе: как ограничить машину, но не сломать игру велосипедистам, самокатчикам и обычным пешеходам с плохим GPS?
2783 гекса за одну телепортацию
4 июня один из игроков внезапно переместился на 45 километров.
Игра решила, что всё это расстояние он действительно прошёл. Маршрут склеился, сервер засчитал 2783 гекса, выдал 5566 опыта, и игрок мгновенно поднялся с первого уровня до двенадцатого.
Опыт я у него отбирать не стал. Посчитал это наградой за обнаружение бага.
А вот выдачу опыта и построение маршрута при таких скачках пришлось срочно исправлять.
Сейчас большой разрыв GPS может перенести маркер игрока в актуальное место, но не превращается в нарисованную через полгорода линию, не даёт опыт и не захватывает промежуточные гексы. Небольшие пропуски игра ещё может аккуратно заполнить, потому что GPS теряет отдельные точки даже во время обычной прогулки.
Первые правила были слишком добрыми
В одной из самых ранних версий античита я разрешил скорость до 151 км/ч.
Это не опечатка.
Тогда я в первую очередь боролся с фальшивыми координатами и боялся заблокировать честного игрока из-за неточного замера. В результате игра была готова поверить, что человек вполне законно захватывает территорию почти на скорости движения по автомагистрали.
Потом ограничение стало жёстче. Но просто выбрать одно число оказалось недостаточно.
GPS может на несколько секунд показать странную скорость, когда человек стоит на месте. Телефон иногда присылает координаты с задержкой. В браузере и Android-приложении скорость могла рассчитываться по-разному. А велосипедист проходит гексы значительно быстрее пешехода, поэтому именно на велосипеде первыми проявляются ошибки, незаметные во время спокойной прогулки.
Телефон не знает, на чём вы едете
В GeoConquest нет отдельных режимов «пешком», «велосипед», «самокат» и «машина».
Сервер получает координаты, время, точность и иногда скорость. Но сам по себе GPS не может надёжно сказать, сидит человек в автомобиле или быстро едет на велосипеде.
При скорости 20 км/ч это может быть:
спринтер;
велосипедист;
электросамокат;
машина в пробке;
ошибочный скачок GPS.
Можно было запретить всё, что быстрее бега. Тогда игра действительно стала бы почти исключительно пешеходной, но заодно начала бы наказывать велосипедистов и ловить больше ложных срабатываний.
Поэтому я решил разрешить активный транспорт, пока скорость остаётся разумной.
Как ограничение работает сейчас
Текущий порог составляет 8 метров в секунду, то есть примерно 29 км/ч.
После четырёх последовательных качественных замеров на такой скорости сервер приостанавливает игровой зачёт.
При этом маркер не застывает на старом месте и продолжает двигаться по карте. Но игра временно не строит след, не выдаёт опыт, не продвигает задания и события, не засчитывает столкновения и не позволяет захватывать территорию.
Сервер смотрит не только на скорость, которую сообщил телефон. Он также вычисляет её по расстоянию между координатами и времени замеров. "Никогда не доверяй клиенту!"))
Чтобы игра снова включилась, нужно замедлиться примерно до 22 км/ч. Сервер ждёт, пока медленными окажутся как минимум восемь из последних десяти подходящих замеров. Несколько случайных скачков при этом не заставят стоять на месте бесконечно.
Пропущенный скоростной участок не соединяется с прежним следом. Поэтому нельзя проехать часть петли на машине, замедлиться у своей территории и получить всю область внутри маршрута.
Значит, на машине играть совсем невозможно?
Не совсем.
Если автомобиль действительно движется со скоростью велосипеда, например ползёт в пробке, GPS не способен доказать, что внутри находится машина. Такой участок может засчитаться.
Цель ограничения не в том, чтобы расследовать каждую поездку. Оно должно сделать обычное передвижение на машине невыгодным, сохранив велосипеды и самокаты как допустимый способ игры.
Высокая скорость сама по себе также не считается читерством и не приводит к бану. Игра просто ставит зачёт на паузу.
Велосипедисты нашли другую проблему
Недавно обнаружился ещё один баг, который существовал больше месяца.
Браузер отправлял новую GPS-точку, но иногда ждал не только ответа сервера, а ещё и очередного обновления всего игрового мира. Если обработка затягивалась, следующие координаты успевали потеряться.
Пешеход проходил за это время совсем немного, поэтому проблема почти не бросалась в глаза. А у велосипедиста между двумя принятыми точками уже образовывалась заметная дыра в маршруте.
19 июля я разделил эти процессы. Теперь отправка GPS не ждёт обновления карты, и быстрые последовательные точки не должны теряться из-за медленного запроса.
Получился хороший пример того, как одна и та же ошибка почти незаметна пешком, но ломает игру на велосипеде.
А телефон всё это время лежит в кармане
Для установленной PWA-версии я добавил карманный режим. Он блокирует случайные нажатия, затемняет OLED-экран и позволяет убрать телефон, пока игра продолжает получать GPS.
Это особенно полезно во время долгой прогулки или поездки на велосипеде: не нужно постоянно держать карту открытой перед глазами. Чтобы разблокировать экран, кнопку надо удерживать две секунды.
Где провести границу?
Сейчас GeoConquest позволяет спокойно играть пешком, на обычной скорости велосипеда или электросамоката. При более быстром движении карта продолжает следовать за игроком, но территория и награды временно не засчитываются.
Мне интересно, где вы сами провели бы границу.
GPS-игра должна учитывать исключительно ходьбу? Или велосипед и самокат тоже являются честным способом захватывать территорию, если машина при обычной скорости уже не даёт преимущества?
Играть: https://geo.juju.ru
Патчноуты и история разработки: https://t.me/GeoConquest








