7-7-2017

Operacja Health: Diagnoza – poziom skomplikowania Hibany

Po poświęceniu dużej ilości czasu na rozwiązanie problemu wierzymy, że udało się nam wyizolować i naprawić niemal wszystkie przypadki, w których gadżet Hibany może działać nieprawidłowo. Od uaktualnienia 2.2.1, które zostanie opublikowane 11 lipca na wszystkich platformach, wyrzutnia X-KAIROS Hibany powinna zachowywać się w bardziej przewidywalny sposób.

Przypadek: Unikatowy charakter Hibany

Przed ogłoszeniem Operacji Health otrzymywaliśmy zgłoszenia dotyczące problemów z wyrzutnią X-KAIROS Hibany. Po zbadaniu przyczyny tych błędów, nasz zespół odkrył fundamentalne problemy związane z projektem gadżetu Hibany, na skutek czego musieliśmy przebudować sposób działania jej pocisków. Porozmawialiśmy z programistą animacji Alexem Busbym, który opisał nasze początkowe podejście do mechaniki działania Hibany oraz sposób, w jaki naprawimy wszystkie związane z nią błędy raz na zawsze.

Najpierw jednak chcemy podzielić się z wami garścią szczegółów opisujących, dlaczego Hibana aż tak bardzo różni się od pozostałych operatorów, a następnie wyjaśnimy, czemu przyjęte przez nas podejście, wybrane podczas budowania tej operatorki, wywołało raportowane przez was problemy. Hibana używa swojego gadżetu do wyrzucania sześciu pocisków X-KAIROS, które następnie mogą zostać zdetonowane zdalnie. Aby zbudować Hibanę, zespół stworzył osobne obiekty sieciowe dla jej ciała, jej gadżetu (wyrzutni) i każdego pocisku z osobna – żaden inny operator nie ma jednocześnie tylu aktywnych obiektów sieciowych.

”Mamy wprawdzie coś podobnego w postaci Ash, ale tutaj po raz pierwszy pojawiają się liczne fazy, podczas których możesz wielokrotnie wystrzelić wiele pocisków, ale również liczne fazy, podczas których możesz wystrzelić jeszcze więcej pocisków, wysadzić te wystrzelone albo przeładować gadżet.” – Alex Busby, programista animacji

Ale czym są obiekty sieciowe? Abyśmy mogli przetwarzać wydarzenia podczas meczu, musimy je podzielić i przyjmować w dowolnej kolejności. Aby wszystko miało jakiś sens, przydzielamy rozmaite poziomy kompetencji niektórym z tych procesów, aby upewnić się, że wszystko w oczach graczy dzieje się tak, jak tego oczekują – nazywamy to kompetencją hosta i kompetencją lokalną. W wielkim skrócie, zarówno serwer, jak i lokalna maszyna każdego gracza rejestruje jakiś ciąg zdarzeń – jeśli występuje jakakolwiek nieprawidłowość pomiędzy tymi ciągami, kompetencja hosta priorytetyzuje informacje z serwera, a kompetencja lokalna - informacje z konkretnej maszyny (twojego peceta albo konsoli). Wszystkie te kalkulacje i porównania dzieją się na tyle prędko, że ludzkie oko nie jest w stanie dostrzec żadnych niezgodności.

Problem: Niezgodność pomiędzy kompetencją hosta i lokalną

W przypadku Hibany musieliśmy monitorować jednocześnie cały szereg zdarzeń związanych tylko z tą jedną operatorką – Hibana ma swoją wyrzutnię, która może wysyłać do serwera informacje w chwili, gdy strzela, jaka jest trajektoria lotu pocisku i kiedy można ją przeładować; należy również raportować pozycję Hibany w świecie gry na wypadek, gdyby jakiś gracz ją zauważył albo zaczął do niej strzelać; i wreszcie jest sześć pocisków X-KAIROS<, z których każdy wysyła informacje o swojej pozycji i stanie aktywacji. Aby precyzyjnie śledzić wszystkie te wydarzenia, każdemu z nich przypisaliśmy obiekt sieciowy, który przekazuje te informacje do serwera.

Jednak po opublikowaniu Hibany zaczęliśmy zauważać degradację zdolności naszych serwerów do przeliczania wszystkich informacji wysyłanych przez jej obiekty sieciowe. Na przykład wyrzutnia Hibany wyrzucała sześć pocisków, ale przepływ informacji był czasami przerywany przez niezwykle wysoki czas oczekiwania (lagi) albo inne złe warunki sieciowe. Zidentyfikowaliśmy mnóstwo rozmaitych kombinacji, podczas których gadżet Hibany może działać nieprawidłowo ze względu na te problemy z komunikacją, wiele problemów wynikało z tego, czy przypisywaliśmy kompetencję hosta czy kompetencję lokalną do poszczególnych kroków.

Rozwiązanie: Optymalizacja obiektów sieciowych

Po wielu miesiącach ciężkiej pracy zoptymalizowaliśmy obiekty sieciowe Hibany. Zaczęliśmy od zmniejszenia ogólnej liczby obiektów sieciowych, które musimy monitorować. Dzięki temu ograniczyliśmy potencjalną liczbę konfliktów pomiędzy znaczeniem hosta i znaczeniem lokalnym, dzięki czemu gracze nie napotykają komplikacji wynikających z braku synchronizacji kompetencji.

“Wprowadzone poprawki sprawiły, że dużo rzeczy otrzymało znacznik kompetencji hosta, ale jednocześnie udało nam się zachować maksymalną możliwą reaktywność i responsywność. Takie było główne założenie tej poprawki. Zidentyfikowaliśmy miejsca, w których może to działać źle albo gdzie następuje desynchronizacja, a następnie staraliśmy się przesunąć gadżet w stronę znaczenia hosta.” - Alex Busby, programista animacji

Dodatkowo wykonaliśmy mrówczą pracę, przerabiając wszystkie scenariusze, w których widzieliśmy inne problemy, takie jak umiejscowienie pocisków oraz błędy wizualne i poprawiliśmy je wszystkie. Więcej szczegółów dotyczących ogólnych poprawek, które Hibana otrzyma wraz z uaktualnieniem tytułu 2.2.1, znajdziecie w informacjach o uaktualnieniu, które opublikujemy w poniedziałek, 10 lipca.

Te zmiany nie tylko poprawią rozgrywkę w wypadku Hibany, ale dadzą nam też więcej swobody podczas projektowania przyszłych operatorów, którzy mogą korzystać z podobnego zachowania gadżetu.

Mamy nadzieję, że udało nam się wyjaśnić, jak głębokie są korzenie problemów Hibany i dlaczego musieliśmy przeznaczyć nasze zasoby na naprawienie związanych z nią błędów podczas Operacji Health.

Bardzo dziękujemy za wasze nieustające wsparcie!

Sprawdź pozostałe media społecznościowe

facebook icontwitter iconyoutube icontwitch icon