
Он обнаружил, что на загрузку влияет проверка всех доступных в игре предметов и оптимизировал этот кода. И даже бан не получил.
Латвийский специалист с никнеймом T0ST играет в GTA Online со старого компьютера. Его очень расстраивают долгие загрузки. От расстройства он даже решил сверить время загрузки одиночного кампании и сетевого режима – вышла пятикратная разница не в пользу онлайн модуля. Он решил самостоятельно разобраться с проблемой и... смогу написать патч, ускоряющий загрузку в 3 раза.
Итак, у человека есть система с процессором AMD FX-8350 (8 ядер, однако), видеокартой GeForce GTX 1070, двумя планками памяти на 8 гигабайта типа DDR3 с частотой 1337 МГц, а там всунут накопитель SATA SSD A400 в форм-факторе 2,5" на 120 гигабайт. На загрузку GTA Online у такого монстра из прошлого десятилетия уходит в среднем около 360 секунд. Замер человек проводил от появления лого до возможности перейти к игровому процессу.
Опросив фанатов, T0ST определил, что дело нечисто – даже мощное железо грузит режим до 2 минут. Он расчехлил инженерные навыки и изучил поведение GTA Online. Оказалось, что игра полностью нагружает только одно из ядер процессора, игнорируя диск, видеокарту, оперативку и все остальное.
При помощи дизассемблера и других инструментов, исследователь обнаружил причину нагрузки – игра проверяет JSON-объект на 10 мегабайт, внутри которого 63 тысячи записей. T0ST считает, что они все про внутриигровые товары. Вне зависимости от их содержания, проверка проходит очень медленно – тормозят процесс лишние проверки на дубликаты, существование которых в принципе невозможно. Кроме того, создатели оригинального кода ловко увернулись от быстрых способов хеширования, используя максимально простые приемы парсинга.
После обширной проделанной работы, программисту удалось ускорить загрузку сперва с 360 до 270, а потом и вовсе до 110 секунд – переход ускорился почти в 3 раза. Тем не менее, все его наработки недолговечны и сломаются после следующего обновления из-за привязки к адресному пространству игры. Ну, то есть парсинг JSON не так прост. Да и у Rockstar могут быть свои причины для замедления загрузки GTA Online.
Познакомиться с анализом можно на сайте энтузиаста, посмотреть на результат работы можно на github. Один патч устраняет лишние проверки, второй использует для проверки новый алгоритм. Оба ускоряют загрузку, а вместе помогают добраться до тех самых 110 секунд.
О бане разработчик не отчитался – значит, что Rockstar его не наказала за взлом игры (пока что). Игроки тоже не радуют сообщениями о внезапном сокращение загрузок, а больше обсуждают сам код – будьте бдительны и лучше не устанавливайте подобные патчи.