Raport Tygodniowy #47 – Łączenie Regionów – World War 3 – Official Website
Weekly Report

Raport Tygodniowy #47 – Łączenie Regionów

03/02/2020

 Witajcie ponownie, Żołnierzu!

Chcieliśmy przybliżyć Wam nasze plany na to jak poprawić kondycję gry i uniknąć samonapędzającego się problemu braku graczy wynikającego w dużej mierze z braku graczy. Aktualnie nasi gracze są podzieleni na trzy regiony, bazując na lokacji grającego: Region Północnej i Południowej Ameryki, Europy i Afryki oraz Azji i Oceanii. Gracz nie jest zmuszony do grania na najbliższym mu regionie, natomiast zmiana preferowanego regionu nie jest wygodna, a dodatkowo gracz nie posiada swojego profilu gracza, więc musi odblokowywać wszystko ponownie, jeśli zdecyduje się spróbować gry na innym regionie, by zagrać ze znajomymi zza oceanu albo w poszukiwaniu większej populacji na serwerach. Ten sposób podziału nie jest dobry dla naszej gry, dlatego zmieniamy go.

Chcielibyśmy wyjaśnić ten problem najlepiej jak potrafimy oraz przybliżyć Wam kroki, które podejmujemy, by upewnić się, że to najlepsze rozwiązanie aktualnych i potencjalnie również przyszłych problemów.

Regiony wyjaśnione

Po pierwsze, odrobina wyjaśnienia dlaczego regiony zostały w ogóle podzielone w ten sposób. Na początku Wczesnego Dostępu spodziewaliśmy dużego obciążenia naszej infrastruktury, więc zdecydowaliśmy podzielić je na trzy odrębne regiony, dodatkowo upewniając się, że wszyscy gracze mają lepsze pingi i uniknąć problemów z brakiem informacji na temat lokalizacji serwera, na którym się gra i konieczności dostosowywania swojego stylu rozgrywki do zmieniających się warunków sieci. Niestety, nie było to wystarczające i nasze główne serwery logowania i profili (Master Serwery) zostały przeciążone i w efekcie musieliśmy zmienić część naszej struktury sieciowej i implementacji systemu by lepiej radzić sobie ze wzmożonym ruchem teraz i w przyszłości.

Pisaliśmy już o całej sytuacji, więc tylko pokrótce – nowa implementacja Master Serwera jest – w teorii – w pełni skalowalna i powinna być w stanie wytrzymać tylu graczy, ilu trzeba bez potrzeby wprowadzania zmian lub ze zmianami minimalnymi.

Aktualnie, poprzez połączenie zmniejszonej populacji graczy i o wiele potężniejszych serwerów, nie ma potrzeby, by regiony były rozdzielone. Wielu graczy wybiera region EU/AF z powodu większej populacji graczy, co w efekcie zmniejsza populację na pozostałych region, pogłębiając problem jeszcze bardziej dla tych regionów. Dodatkowo, zmiana regionu to coś, o czym nie każdy wie, a nowy wygląd Biblioteki Steam dodatkowo utrudnia cały proces, ukrywając tę opcję jeszcze bardziej. Z tych powodów zdecydowaliśmy się na połączenie regionów, ponieważ poza połączeniem profili, o którym za chwilę, nic nas przed tym nie powstrzymuje.

Jak to będzie działać?

Aktualnie testujemy, czy nasze rozwiązanie nie produkuje nieprzewidzianych rezultatów podczas łączenia ze sobą trzech baz danych z profilami graczy. Nasze narzędzie do łączenia profili najpierw sprawdza, na których regionach grał każdy gracz, wybiera ten, na którym gracz spędził najwięcej czasu (na podstawie zdobytego doświadczenia w grze) i zachowuje z tego profilu ustawienia postaci, broni, zrzutów itd. Nie jesteśmy w stanie połączyć tej części profilu, więc musimy wybrać jeden z nich. Po tym kroku, narzędzie dodaje do siebie XP i walutę w grze i zapisuje w nowym profilu, by wszystkie godziny globalnie były zachowane na nowym profilu. Jedyna część profilu, której nie możemy połączyć z różnych względów to statystyki, więc wybieramy również te z profilu, na którym gracz spędził najwięcej czasu.

Wiemy, że nie wszyscy uważają, że warto robić to w ten sposób i nie mieliby nic przeciwko, by zacząć od nowa, natomiast są również gracze, którzy cenią sobie swoje profile i chcieliśmy przeprowadzić całe łączenie jak najlepiej. Moglibyśmy po prostu wybrać profil z największą ilością godzin i tyle lub nawet wyczyścić wszystko do zera, czyniąc cały proceder o wiele łatwiejszym dla nas, ale wydaje nam się, że nasza forma sprawi, że największa ilość graczy będzie zadowolona z łączenia.

Co się zmieni?

Po zakończeniu łączenia (co prawdopodobnie zajmie kilka godzin, więc postaramy się wybrać porę i dzień, które będą najmniej uciążliwe), wszyscy gracze ze wszystkich regionów będą widzieli każdy serwer gry w ich przeglądarce serwerów. Aktualnie przeglądarka sortuje najpierw po ilości graczy, a następnie po wartości pingu. Powinno to upewnić się, że każdy gracz dołączający do gry ma z kim zagrać, nawet jeśli nie jest to w optymalnych warunkach. Mamy nadzieję, że dzięki tej zmianie, gracze zaczną naturalnie grawitować do meczów, które są najbliżej ich i ograniczy to ilość graczy, którzy włączając grę, nie widzą nikogo lub mało osób, z którymi mogliby zagrać, zwiększając ogólna populację i powoli poprawiając sytuację z ilością graczy. Ostatecznie, lepiej zagrać z wysokim pingiem, niż nie zagrać wcale.

Dodatkowo, będzie to oznaczało, że musimy bacznie przyglądać się przewadze graczy na podstawie pingu i upewnić się, że ta zmiana nie wpłynie negatywnie na odbiór gry przez ludzi grających z niskim opóźnieniem.

Jedna, bardzo ważna informacja: nie przenosimy lokalizacji naszych maszyn, będą one nadal dostępne tam, gdzie były, jedyne, co zmienia się z perspektywy gracza to lista dostępnych serwerów, która będzie zawierała dodatkowo również serwery z pozostałych regionów. Serwery te mają nazwy reprezentujące ich regiony, więc zawsze można wybrać mecz znajdujący się jak najbliżej.

Co z kodem sieciowym?

Niefortunnym skutkiem ubocznym fizyki oraz tego, jak działa Internet jest fakt, że nie da się zrobić stuprocentowo sprawiedliwej gry w czasie rzeczywistym dla każdego gracza na mapie. Jest możliwe jedynie w sytuacji, w której obaj gracze znajdują się na tym samym łączu i w tej samej odległości od serwera. Problemem tutaj jest wspomniany wcześniej ping, który reprezentuje czas wymagany do komunikacji pomiędzy graczem a serwerem. Jest mierzony w milisekundach i generalnie pingi powyżej 100ms w dynamicznej, sieciowej strzelance mogą zauważalnie wpłynąć na to, który z graczy ma przewagę. Jest wiele sposobów na radzenie sobie z tym problemem, jednak większość z nich to wybór pomiędzy dokładnością symulacji a responsywnością gry, więc jest to zawsze świadoma decyzja, w którą stronę powinno się pójść – sprawić, że gra jest mniej responsywna, ale bardziej sprawiedliwa czy odwrotnie – bardziej przyjemna, ale mniej sprawiedliwa dla graczy z niskim lub wysokim pingiem.

Prostym przykładem tego problemu jest następująca sytuacja: biegniesz za przeszkodę, mając 50ms pingu, co oznacza, że w dowolnym momencie w czasie, na serwerze, Twoja postać znajduje się 50ms w przeszłości. Na Twoim ekranie udało Ci się dobiec do przeszkody, ale z jakiegoś powodu i tak umierasz. Minęło tylko 50ms od kiedy Twoja postać znalazła się za przeszkodą u Ciebie, więc nie powinno być problemu – tak krótki czas rzadko wystarcza, by poczuć opóźnienie.

Twój przeciwnik natomiast, ma 450ms opóźnienia do serwera. Oznacza to, że otrzyma informację o Twojej pozycji sprzed 500ms (czyli pół sekundy). Pozycji, w której Twoja postać była jeszcze daleko od przeszkody, więc ich strzały ewidentnie trafiły Ciebie, a ich strzały powinny się liczyć. Dzieje się tak, ponieważ informacja o Twojej lokalizacji trafiła na serwer po 50ms, po czym została wysłana do przeciwnika po kolejnych 450ms – widzą Ciebie z przeszłości.

Jeśli jesteś osobą odpowiedzialną za kod sieciowy, pojawia się decyzja: kto powinien mieć przewagę w tej sytuacji? Jeśli zdecydujesz, że symulacja powinna być stuprocentowo dokładna, dla osób z pingiem powyżej 100-200ms gra może być niegrywalna, ponieważ strzelaliby w miejsca, w których już nie ma przeciwników i musieliby nauczyć się strzelać przed przeciwników, zamiast w nich, w dodatku w różnej odległości w zależności od tego, na jakim są serwerze, co powoduje, że najważniejsza część strzelanki – strzelanie – nie sprawia w ogóle przyjemności.

Jest to problem, którego nie można naprawić z powodu prędkość światła i dodatkowych opóźnienia na infrastrukturze sieciowej pomiędzy graczami a serwerem. Nie zrobiłeś nic złego, ale przeciwnik również nie zrobił niczego złego, zwłaszcza, jeśli został przydzielony do meczu automatycznie lub nie jest w pozycji, która pozwala na zmianę połączenia.

Bardzo wcześnie w procesie tworzenia World War 3 musieliśmy podjąć serię decyzji determinujących, czy przewagę będzie miał gracz z niskim, czy wysokim pingiem. Brzmi jak prosty problem, ale składowych jest wiele, a graczy grających na słabych łączach lub z dużej odległości – jeszcze więcej. Zdecydowaliśmy ostatecznie, że ludzie z niższym pingiem powinni mieć przewagę nad tymi z pingiem powyżej 150ms. W naszym przykładzie powyżej, strzały gracza z opóźnieniem 450ms nie byłyby zaliczone, a nasz przykładowy gracz nie otrzymałby obrażeń. Wydaje nam się, że granica 150ms to dobry balans pomiędzy byciem sprawiedliwym, a dokładnością.

Kolejnym, dużym powodem stojącym za tą decyzją była próba uniknięcia ludzi, którzy celowo wykorzystują kod sieciowy zbudowany pod wysoki ping poprzez używanie tzw. lag switches i innych metod dających im przewagę w grze sieciowej. Jeśli serwer akceptuje strzały z przeszłości bez limitu, można celowo przerwać połączenie na chwilę, oddać kilka strzałów do nieporuszających się przeciwników, po czym odnowić połączenie, a strzały zostałyby zaliczone na serwerze – co, w naszym odczuciu – jest nie do zaakceptowania.

Aktualnie system działa dobrze, ale nie jest idealny. Mamy nadzieję, że połączenie regionów pozwoli nam zebrać dodatkowe dane i przeprowadzić więcej testów, by upewnić się, że gra jest najsprawiedliwsza dla jak największej ilości graczy oraz, że ludzie, którzy mogą i wybierają serwery z dobrym pingiem nie są za to karani. Doprowadzenie kodu sieciowego w tym aspekcie może zająć trochę czasu, więc mamy nadzieję, że nasi gracze zrozumieją, że zwłaszcza na samym początku, ludzie mogą grać na serwerach, na których mają zbyt wysoki ping.

Mamy plany co do tego, jak poradzić sobie z ewentualnymi problemami, kiedy populacja graczy osiągnie zdrowy poziom. Możemy ograniczyć możliwość łączenia się graczy z serwerami z wysokim pingiem, jeśli mają do wyboru lepsze połączenie, natomiast wprowadzenie takich restrykcji w tym momencie mija się z celem łączenia regionów zupełnie.

Mamy jeszcze trochę pracy związanej z kompensacją opóźnienia i innymi technikami, których używamy w kodzie sieciowym World War 3 by osiągnąć optymalną rozgrywkę, natomiast jesteśmy pewni, że nasz kod sieciowy może być jednym z najlepszych w branży.

Kiedy?

Aktualnie plan przewiduje połączenie regionów na ten tydzień, natomiast nadal upewniamy się, że wszystko przebiegnie bez problemów. Domyślnie łączenie regionów powinno być niezauważalne dla graczy oraz wymagać minimalnej aktualizacji gry.

Dziękujemy za poświęcony na czytanie czas i do zobaczenia w kolejnym Raporcie Tygodniowym!