Интернет-пользователь, известный как T0ST, нашел способ сократить время загрузки онлайн-режима GTA V почти на 70%. На своем веб-сайте он также объяснил, почему GTA Online так долго загружается.
Несмотря на то, что с момента выпуска Grand Theft Auto V прошло почти 8 лет, GTA Online по-прежнему очень популярна и остается золотой жилой для издателя Take-Two. Однако онлайн-режим игры Rockstar Games также известен своим очень долгим временем загрузки, достигающим 10 минут. Эта проблема присутствует в игре с самого начала, но только сейчас один из пользователей, известный как T0ST, решил не только посмотреть на нее, но и, по возможности, устранить .
В конце концов, ему это удалось. Используя компьютер со средними параметрами, T0ST сократил время загрузки онлайн-режима почти на 70 процентов. Все это с помощью небольших изменений в некорректном коде игры. Вот подробное описание того, как он это сделал.
В поисках виновника
T0ST сначала решил сравнить время загрузки двух доступных игровых режимов. Для этого он использовал свой компьютер с процессором AMD FX-8350, 16 гигабайтами оперативной памяти, бюджетным SSD и Nvidia GeForce GTX 1070. На загрузку сюжетной кампании потребовалось около 70 секунд. Для запуска онлайн-режима целых 6 минут (оба раза отсчитывались с момента появления логотипа Rockstar при выключенном стартовом меню).
Пользователь хотел определить, что именно происходит с компьютером во время загрузки онлайн-режима. Для этого он снова начал загружать GTA Online, но на этот раз включил встроенный диспетчер задач Windows. Через минуту он заметил, что загрузка ЦП увеличилась с 25% до более 60%. Более того, в игре использовалось только одно ядро из восьми доступных. Остальные компоненты практически ничего не делали почти пять минут. T0ST пришел к выводу, что проблема была в коде игры …
… и он был абсолютно прав, потому что виновником оказался файл размером всего 10 мегабайт с расширением .json. Он содержит список всех предметов, доступных для покупки в игре (тех, которые можно приобрести за виртуальные деньги, а не через микротранзакции), и их улучшений. Их около 63 тысяч. Проблема в том, что в тот момент, когда игра загружает файл, она проверяет его синтаксис. И это повторяется ровно столько раз, сколько элементов в файле.
Кроме того, все элементы имеют свой собственный «хэш», уникальный код для их идентификации. Каждый раз, когда анализ элемента завершен, он помещается в список и сравнивается с уже имеющимися в списке. Это сделано для того, чтобы избежать дублирования элементов. Первоначально список пуст, но со временем он заполняется всеми 63 000 элементами, и каждый из них необходимо сравнивать с другим. T0ST подсчитал, что всего в процессе выполняется почти 2 миллиарда действий. Более того, поскольку каждый элемент имеет уникальный «хеш», вся работа с самого начала бессмысленна.
Решение
T0ST создал свой собственный код, который перезаписал две некорректные функции игры. Это уменьшило количество проверок синтаксиса, выполняемых игрой, до одной и отключило проверку повторяющихся предметов. Решение первой проблемы сократило время загрузки до 4,5 минут, а в сочетании со вторым решением — всего до 110 секунд. Разработчик поделился своей работой на GitHub, и ее можно скачать здесь. Однако T0ST не гарантирует, что решение будет работать на других компьютерах, особенно на высокопроизводительных установках (разница может быть незаметной), и предупреждает, что добавление этого кода может привести к блокировке вашей учетной записи.
Программист надеется, что Rockstar найдет время, чтобы исправить эту ошибку и выпустить официальный патч, поскольку он считает, что это может быть исправлено одним человеком менее чем за день.