Newsroom Wiadomości Najciekawsze Komiksy Tematy RSS
Wiadomość gry 4 marca 2021, 17:24

autor: Adrian Piotrowski

Czas ładowania GTA Online skrócony o prawie 70 procent, internauta znalazł rozwiązanie [Aktualizacja]

Internauta o pseudonimie T0ST znalazł sposób na skrócenie czasów ładowania trybu sieciowego GTA V o prawie 70 procent. Na swojej stronie wyjaśnił też, dlaczego wczytywanie GTA Online trwa tak długo.

Aktualizacja:

Jeden z naszych czytelników podesłał nam wiadomość o tym, że dzieło T0ST-a doczekało się aktualizacji od innych programistów, którą możecie znaleźć tutaj. Pozwala ona na skorzystanie z poprawki na wszystkich platformach oraz systemach operacyjnych (oryginał działał tylko na Steamie i Rockstar Games Launcher w systemie Windows). Zasady implementacji są takie same jak przy pierwszej wersji. Ponownie ostrzegamy, że użycie tego patcha może skutkować zawieszeniem konta.

Oryginalna treść:

W skrócie

  • Internauta o pseudonimie T0ST odnalazł przyczynę długich czasów ładowania w GTA Online.
  • Winny okazał się wadliwy kod, który wykonywał zbędne działania związane z przedmiotami umieszczonymi w grze.
  • Wyeliminowanie tego błędu sprawiło, że wczytywanie trybu sieciowego zostało skrócone z 6 minut do 110 sekund.

Mimo że od premiery gry Grand Theft Auto V minęło już prawie 8 lat, to dołączone do niej GTA Online nadal cieszy się bardzo dużą popularnością, a dla wydawcy, czyli firmy Take-Two, to wciąż żyła złota. Jednak tryb sieciowy produkcji Rockstar Games jest też znany z powodu swoich bardzo długich czasów ładowania sięgających nawet 10 minut. Ten problem jest obecny w grze od samego początku, lecz dopiero teraz jeden z internautów, ukrywający się pod pseudonimem T0ST, postanowił nie tylko przyjrzeć się mu, ale też, w miarę możliwości, wyeliminować go.

Ostatecznie udało się. T0ST, korzystający z komputera o średnich parametrach, skrócił czas ładowania trybu online o prawie 70 procent. To wszystko z pomocą małych zmian w wadliwym kodzie gry. Oto szczegółowy opis, jak udało mu się tego dokonać.

Czas ładowania GTA Online skrócony o prawie 70 procent, internauta znalazł rozwiązanie [Aktualizacja] - ilustracja #1
Wczytywanie trybu online zajmuje kilka dobrych minut.

Szukanie winnego

T0ST najpierw postanowił porównać czasy ładowania obu dostępnych trybów gry. W tym celu użył swojego komputera, który składał się przede wszystkim z procesora AMD FX-8350, 16 gigabajtów pamięci RAM, budżetowego dysku SSD oraz karty graficznej Nvidia GeForce GTX 1070. Na załadowanie się fabularnej kampanii potrzeba było ok. 70 sekund. Na uruchomienie trybu online aż 6 minut (oba czasy były liczone od momentu pojawienia się logo Rockstara, z wyłączonym menu startowym).

Programista chciał ustalić, co konkretnie dzieje się z komputerem, kiedy trwa wczytywanie trybu sieciowego. W tym celu ponownie zaczął ładować GTA Online, lecz tym razem włączył wbudowany w Windows menadżer zadań. Po minucie zauważył, że użycie procesora wzrosło z poziomu 25% do ponad 60%. Co więcej, gra wykorzystywała tylko jeden rdzeń z ośmiu dostępnych. Reszta podzespołów była przez prawie pięć minut praktycznie bezrobotna. T0ST doszedł do wniosku, że problem tkwi w kodzie gry…

Czas ładowania GTA Online skrócony o prawie 70 procent, internauta znalazł rozwiązanie [Aktualizacja] - ilustracja #2
Zużycie procesora podczas ładowania GTA Online na komputerze o średnich parametrach. Źródło: Nee.lv (strona T0ST-a)

Syzyfowe prace

…i miał zupełną rację, ponieważ winny okazał się plik o wielkości zaledwie 10 megabajtów i rozszerzeniu .json. Zawiera on listę wszystkich przedmiotów dostępnych do kupienia w grze (chodzi o te, która można nabyć za wirtualną gotówkę, a nie na zasadzie mikrotransakcji) oraz ich ulepszeń. Jest ich około 63 tysiące. Problem polega na tym, że w momencie, kiedy gra wczytuje ten plik, dokonuje jego analizy składniowej. I jest to powtarzane dokładnie tyle razy, ile jest itemów.

Dodatkowo wszystkie rzeczy mają swój własny „hash”, czyli unikalny kod pozwalający na ich identyfikację. Za każdym razem, kiedy analiza przedmiotu zostanie ukończona, jest on umieszczany na liście i porównywany z tymi, które już się na niej znajdują. Ma to na celu uniknięcie przypadków zduplikowanych itemów. Początkowo lista jest pusta, jednak z czasem zapełnia się ona wszystkimi 63 tysiącami rzeczy i każde muszą być ze sobą porównane. T0ST policzył, że łącznie zostaje wykonanych prawie 2 miliardy akcji. Mało tego, skoro każdy item posiada unikalny „hash”, to cała praca staje się syzyfowa.

Solucja

T0ST stworzył swój własny kod, który nadpisał dwie wadliwe funkcje gry. Zredukował on liczbę wykonywanych analiz składniowych do jednej oraz wyłączył sprawdzanie zduplikowanych przedmiotów. Rozwiązanie pierwszego problemu zmniejszyło czas ładowania do 4,5 minuty, a w połączeniu z drugą solucją do 110 sekund. Twórca podzielił się swoim dziełem na GitHubie i można pobrać je tutaj. T0ST nie gwarantuje jednak, że rozwiązanie zadziała na innych komputerach, zwłaszcza tych z górnej półki (różnica może być niezauważalna), oraz przestrzega, iż dodanie tego kodu może skończyć się zablokowaniem konta.

Programista ma nadzieję, że Rockstar pochyli się nad tym bugiem i wyda oficjalną łatkę, ponieważ jego zdaniem może zostać to naprawione w jeden dzień, przez jednego człowieka.

Powyższe tłumaczenie jest zarówno oparte na wpisie T0ST-a, umieszczonym na jego stronie internetowej, jak i artykule Willa Judda, dziennikarza portalu Eurogamer oraz jednego z członków ekipy Digital Foundry.