Многомесячные ошибки в Apex Legends были вызваны одной строчкой кода

Months of Apex Legends Bugs Were Caused By a Single Line of Code

Это было похоже на поиск иголки в стоге сена.

Разработчик Apex Legends компания Respawn Entertainment сообщила, что одна строчка ошибочного кода, привязанная к штурмовой винтовке, стала причиной множества звуковых и графических ошибок, которые досаждали игрокам во время 16-го сезона игры battle royale.

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



Согласно сообщению на Reddit, описывающему поиск ошибки, серверы Apex Legends способны отправлять до 128 «записей» эффектов для каждого кадра игры. Эти записи могут включать команды остановки/запуска для любых эффектов, начиная от звуковых эффектов оружия, заканчивая физическими ударами, трассировкой пуль и т.д. Любые запросы на эффекты, полученные сервером после того, как он достиг предела в 128 записей, отбрасывались, что могло объяснить отсутствие звуков и FX, о которых сообщали игроки.

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

Затем команда попыталась выяснить, какой неисправный процесс или актив вызывал перегрузку эффектов. Однако, как отмечается в обновлении на Reddit, в каждом новом сезоне Apex Legends появляются тысячи ассетов и корректировок кода. Поиск причины проблемы был сродни поиску «иголки в стоге сена».

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

В конце концов, команда нашла свою иглу — одну строчку кода, которая была прикреплена к винтовке Nemesis, представленной в 16 сезоне. Немезида была создана с помощью специально разработанного эффекта частиц, интенсивность которого увеличивалась при многократном выстреле.

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

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