Как разработчики онлайн-шутеров ставят игроков в равные условия — на примере VALORANT
Шутер Riot Games с точки зрения сетевой игры: серверы, матчмейкинг, борьба с читерами и другое.
Материал подготовлен при поддержке Riot Games
Для любого, кто ценит в мультиплеерных шутерах соревновательный дух и честную борьбу, важны не только карты, оружие и другой внутриигровой контент, но и техническая реализация проекта. Эффективность работы сервера, компенсация задержки ввода, качество системы античита — от этих факторов напрямую зависит, насколько приятный опыт в конечном счёте получат игроки.
Разобрались, как Riot Games борется с читерами в VALORANT, стремится улучшить баланс и поставить всех в равные условия.
Как борются с читерами
Полностью избавиться от читеров невозможно. Разработчикам лишь остаётся прикладывать все усилия, чтобы минимизировать ущерб, наносимый ими.
По мнению Riot Games, ни одно стороннее решение не в силах справиться с такой задачей в должной мере. Поэтому разработчики уже на ранних стадиях создания игры собрали команду, целью которой стало создание собственной системы защиты Vanguard.
Как и схожие решения от других компаний, Vanguard работает на уровне системного драйвера, однако запускается программа не вместе с игрой, а заранее — одновременно с операционной системой. Чаще всего вредоносное ПО включают перед тем, как открыть игру и активировать её систему защиты. Но если античит работает в системе постоянно, то и обойти его становится сложнее.
При этом до запуска игры Vanguard работает пассивно и ничего не сканирует в системе. Когда же он переходит в активный режим, то всё равно полностью автономен и не посылает никакой информации на удалённый сервер.
Например, вот как Riot Games борется с воллхаком — читом, позволяющим видеть противников сквозь стены. Как правило, такой чит работает потому, что в онлайн-играх сервер постоянно посылает клиенту (то есть, игроку) информацию о происходящем в матче. В том числе, где находятся враги. И уже на стороне клиента система решает, что игрок может видеть, а что нет (находится за препятствием). Воллхак же внедряется в этот процесс и даёт игроку всю информацию, что приходит с сервера.
Чтобы снизить эффективность этого чита, Riot Games ввела систему «Тумана войны». На тот момент она уже хорошо себя показала в League of Legends, оставалось только перенести её в VALORANT. Хотя это и потребовало значительных усилий — новый движок и 3D-окружение накладывали свои трудности.
«Туман войны» означает постоянную проверку на стороне сервера, какую информацию посылать клиенту о том или ином противнике. Если система решает, что игрок видит или слышит конкретного агента, его оружие или эффект от его способности, то посылается команда об отображении соответствующего объекта. В любом другом случае клиенту поступает информация о том, что объект необходимо скрыть от пользователя.
Таким образом, если противник не находится в прямой видимости или его не слышно, то на стороне клиента не только нет информации о его текущем местоположении, также стираются данные о том, где он был в последний раз, когда его видел игрок. В итоге это означает, что воллхаку просто не с чем работать. Если на стороне пользователя отсутствует информация о местонахождении соперника, то и отобразить её никак не выйдет.
Увы, какой бы продуманной ни была защита, её всё равно можно обойти. Поэтому в борьбе с хакерами особое место занимает работа с жалобами от самих игроков. Команда Vanguard ежедневно изучает подозрительные аккаунты, что позволяет не только своевременно банить (в том числе по «железу») тех, кто каким-то образом обошёл античит, но и совершенствовать сам Vanguard, встраивая в систему защиту от ранее неизвестных читов.
Особую роль в этом играет само сообщество. Чем более активно игроки посылают жалобы на нечестных по их мнению соперников (или тиммейтов), тем выше шанс, что в скором времени читера забанят. Так, Riot Games подтверждала, что благодаря активистам вроде GamerDoc удаётся более активно поддерживать эффективность античита — к августу этого года, помимо автоматических банов, было вручную изучено и заблокировано тысячи читеров и их компьютеров.
Что такое тикрейт, и на что он влияет
Эффективно внедрить «Туман войны» получилось только благодаря игровым серверам с тикрейтом в 128 Гц. Фактически это означает, что сервер посылает данные клиенту 128 раз в секунду, в том числе и данные о «тумане войны».
В первую очередь такая высокая частота обновления сервера нужна для более гладкого и комфортного геймплея. Например, снижается количество ошибок расчётов попаданий по врагу, а движения игроков выглядят плавными и не столь резкими, как при тикрейте 64 Гц, на котором работает большинство шутеров.
Ещё высокий тикрейт уравнивает шансы игроков в некоторых ситуациях. Чтобы было понятнее, зайдём издалека.
Карты в VALORANT построены таким образом, чтобы минимизировать количество длинных простреливаемых коридоров и свести большинство перестрелок в зоны для ближнего боя. Без всех этих укрытий навыки персонажей были бы слишком эффективными.
Повсюду стоят ящики, перекрывающие обзор, и фактически каждая перестрелка начинается с того, что атакующему нужно выйти из-за укрытия. Философия геймдизайна VALORANT в данном случае предполагает, что игрок, удерживающий позицию и угол, должен иметь преимущество в реакции перед тем, кто атакует.
В свою очередь, тот, кто выходит из-за угла, также должен понимать, что он находится в невыгодной позиции — в том числе из-за огромного разброса оружия во время ходьбы или бега. Поэтому атакующий должен не просто выбегать из-за укрытия и полагаться на шанс заметить противника первым, а применять способности своего персонажа или кооперироваться с тиммейтами, в чём и заключается основная особенность игры.
Однако такой игровой баланс сложно выдержать в сетевом шутере из-за так называемого Peeking Advantage, или преимущества атакующего — ситуации, которая присуща большинству шутеров. Из-за особенностей устройства сети и системы «сервер-клиент», игрок, который выходит за угол, увидит соперника, находящегося за этим углом, на несколько десятков миллисекунд раньше, чем тот увидит его. Учитывая низкий TTK (time to kill — время на убийство) в VALORANT, этих мгновений достаточно, чтобы убить противника, который остаётся беззащитным в такой ситуации.
Чтобы решить эту проблему, Riot Games пришлось предпринять сразу несколько действий. Среди них увеличение скорости обработки поступающей информации и запуск 128-герцовых серверов, которые позволяют посылать результаты обработки данных игрокам как можно чаще. Это позволяет свести к минимуму задержку передачи информации, то есть в бою враги увидят друг друга почти одновременно, а условия их перестрелки будут максимально честными.
Один из способов бороться с peeking advantage – минимизировать задержку. Для этого Riot построила собственную сеть Riot Direct, которая, благодаря собственным разработкам, дата-центрам и сотрудничеству с интернет-провайдерами, позволяет серьезно снизить пинг с поправкой на удалённость серверов.
Полностью искоренить проблему peeking advantage почти невозможно, однако на данный момент, по заверениям разработчиков, если у обороняющегося игрока пинг ниже 45ms (а пинг атакующего здесь не играет особой роли), то фактически преимущество остаётся за ним. Хотя, конечно, всё зависит от реакции играющих и даже от фреймрейта — у владельца 144-герцового монитора с соответствующим FPS будет несколько дополнительных кадров, чтобы успеть заметить противника.
Также высокий тикрейт позволяет установить единую высокую частоту обновления данных для клиента и сервера, вне зависимости от того, какой FPS в данный момент у игрока — 30, 60 или 240. То есть и сама игра у всех десяти участников матча, и сервер обрабатывают одну и ту же информацию с одинаковой частотой.
За одну секунду и сервер, и компьютеры всех игроков получат, обработают и отправят одинаковое количество действий — 128 «тиков». А системе уже останется только сверить и соотнести все эти действия друг с другом. Таким образом удаётся избежать рассинхронизации, вызванной разницей между частотой кадров в игре и частотой обновления сервера.
Создание честных условий
VALORANT не поддерживает «растянутый» широкоформатный режим на мониторах с соотношением сторон 4:3, который позволил бы сохранить широкий угол обзора и в то же время увеличить модели противников для преимущества в бою.
Также у всех игроков по умолчанию установлен FOV, равный 103 градусам, и изменить его никак нельзя. По мнению разработчиков, у всех должен быть одинаковый угол обзора для идентичного количества поступающей с экрана информации.
Ещё в Riot Games считают, что плохое соединение одного игрока не должно серьёзно сказываться на остальных. Так что даже если у кого-то слишком высокий пинг или наблюдается потеря пакетов данных, благодаря встроенному в игру компенсатору лагов, для всех остальных такой персонаж всё равно должен двигаться плавно, без резких скачков, а попасть по нему будет не сложнее, чем по кому-либо другому.
Система не идеальна, казусы случаются: например, игрок с хорошим интернет-соединением уже зашёл за укрытие, а по нему всё равно попадает противник с зашкаливающим пингом. Но часто компенсатор всё же выручает.
Зато, опять же благодаря высокому тикрейту и хорошей синхронизации между сервером и клиентом, надёжно работает система регистрации попаданий. При том, что каждый выстрел параллельно обрабатывается на стороне клиента и на стороне сервера (причём информация от сервера всегда в приоритете), результаты почти всегда совпадают.
Одна из проблем, на которые жалуются пользователи, — это то, что есть разница между регистрацией попадания и тем, как это отображается на экранах игроков.
По факту регистрация работает корректно. Но из-за особенностей неткода выстрел (дульное пламя и след от него) отрисовываются не сразу — только со следующего кадра после того, во время которого игрок выстрелил. Из-за этого может показаться, что он попал не туда, куда это засчиталось сервером.
Хотя во втором кадре отчётливо видно, что выстрел совершается в голову, фактически он был осуществлен на один фрейм раньше, когда прицел был направлен в стену
Как работает матчмейкинг
И в казуальном, и в рейтинговом режимах людям подбирают оппонентов и соратников на основе статистики, закреплённой за каждым игроком. Riot следит не только за тем, какое у вас соотношение побед к поражениям, но также насколько вы эффективны в бою и в каком составе хотите играть — если вы зашли вместе с друзьями, то и соперников вам будут стараться искать среди заранее сформированных отрядов.
Если же вы захотите сосредоточиться на соревновательном режиме, то можете быть уверены в том, что ваш рейтинг и рейтинг всех, с кем вы играете, будет довольно точно отображать ваши персональные навыки игры.
Когда игрок впервые зайдёт в соревновательный режим, ему будет предложено пройти пять квалификационных матчей. По их результатам вычисляется приблизительный ранг, который в дальнейшем повышается или понижается в зависимости от результатов. А уже исходя из него осуществляется подбор тиммейтов и соперников.
При этом помимо текущего ранга мастерства, который определяется и постоянно меняется в зависимости от результатов матчей, у каждого игрока в соревновательном режиме теперь есть ранг акта. Он никак не помогает в матчмейкинге, но мотивирует совершенствовать свои навыки.
Ранг акта определяется не по среднему результату всех матчей, а только по девяти лучшим победам сезона. То есть по тем моментам, когда игрок оказывается на вершине своих возможностей. Причём победы на более высоких рангах будут заменять победы на рангах пониже.
В теории система глобальных рангов должна легко адаптироваться к любым ситуациям. В том числе к смурф-аккаунтам (новым аккаунтам под управлением про-игроков) и к случаям, когда игрок показывает себя в матче очень хорошо, но из-за слабых тиммейтов всё равно проигрывает. На деле ранжирование работает не так идеально, как хотелось бы.
Особенно сложно правильно выдержать баланс между скоростью поиска матча и соответствием игроков между собой. Так, недавно пришлось исправлять ошибку, из-за которой одиночек кидало против заранее сформированных отрядов — такая ситуация возникла как раз из-за того, что в приоритете был быстрый подбор оппонентов.
Поэтому рейтинговую систему с каждым актом совершенствуют, в том числе ориентируясь на отзывы игроков — как профессиональных, так и низкоранговых. Например, сейчас в планах у разработчиков повысить прозрачность и наглядность изменений ранга подбора соперников, хотя это и не единственные цели будущих улучшений матчмейкинга.
VALORANT вышла в начале лета — она бесплатная и полностью на русском языке. 5 августа в игре стартовал второй Акт — в игру добавили нового агента Killjoy, обновлённую систему рейтинга и бета-версию режима Deathmatch.
Ого. Судя по галочке тебя взяли в редакцию? Круто.
А почему рейтинг этого поста отображается только с мобильного приложения?
При этом до запуска игры Vanguard работает пассивно и ничего не сканирует в системе
Комментарий недоступен