League of Legends r.

Riot: Mikropatche ratują Anivię

Mikropatche uratowały Anivię! Jak? Dowiedzcie się sami!

Riot: Przed kilkoma tygodniami dzięki Karnawałowej Anivii w Summoner’s Rift zapanowała karnawałowa atmosfera. Zabawom i kostiumom nie było końca — dopóki nie zaczęły spływać zgłoszenia błędu związanego z naszą lodową ptaszyną. Zespoły kontroli jakości Riot szybko potwierdziły, że jej superumiejętność nieprawidłowo nakłada osłabienie, które podwaja obrażenia zadawane przez Odmrożenie. Błąd był na tyle poważny, że dawał podstawy do wyłączenia jej z gry do czasu znalezienia rozwiązania, a rozwiązanie wymagałoby jeszcze nocnych testów kontroli jakości przed wdrożeniem go na serwerach. To oznacza, że Anivią dałoby się grać najwcześniej w piątek po południu… ale w piątki nie wysyłamy poprawek, chyba że gra jest poważnie uszkodzona. Ryzyko niezamierzonego wywołania problemu w czasie weekendowych godzin zwiększonego ruchu jest zbyt wysokie.

W związku z tym imprezę trzeba było przerwać zaraz po rozpoczęciu, a Anivia wyleciała z Summoner’s Rift do poniedziałku. Ale chwileczkę — w rzeczywistości Anivia nie była wyłączona z gry na cały weekend.

Co ocaliło Kriofeniksa od tak okropnego losu? Odpowiedź na to pytanie wymaga zagłębienia się w prestiżowy świat serwerów, klientów, poprawek i mikropatchów.

Przejdźmy do (odrobiny) technikaliów

Dane gry są przechowywane w dwóch miejscach: w kliencie gry i na serwerze. Dane klienta są pobierane na komputer każdego gracza, a ich zmiana wymaga pobrania patcha. Klient zawiera dużo danych wizualnych i dźwiękowych, takich jak wygląd Summoner’s Rift, modele bohaterów i nagrania głosów.

Z serwerem gry łączysz się po wyborze bohatera — jest jak mały wszechświat, w którym odbywa się twoja gra 5 na 5 (albo 3 na 3, czy 1 na 9). Kiedy dokonujemy zmian na serwerach gry, nie ma przerw w działaniu i nie trzeba nic pobierać. Serwery zawierają dane liczbowe, takie jak statystyki bohaterów, a także skrypty kontrolujące działanie umiejętności (ale niekoniecznie ich wygląd).

anivia

Koncepcja portretu Karnawałowej Anivii

Przez długi czas jedynym sposobem na dokonanie zmian w kliencie lub na serwerze było wysłanie zupełnie nowych danych w postaci patchów lub poprawek. Poprawki dotyczą najczęściej danych serwerowych i to głównie nimi w przeszłości naprawialiśmy na bieżąco ważne błędy (duże problemy z wyważeniem, błędy bohaterów itd.).

Wysyłanie poprawek jest ryzykowne i wymaga nocnych testów kontroli jakości, mimo że w większości dotyczą one drobnych problemów i wiążą się ze zmianą niewielkiej ilości danych. Nie możemy jednak wysłać na serwer tylko wybranych danych — musimy wysłać wszystkie dane. Architekt oprogramowania Brian „Riot Penrif” Bossé mówi: — Przeprowadzanie dużego procesu angażującego w znacznym stopniu kontrolę jakości, by dokonać niewielkiej zmiany, może być marnotrawstwem i wiąże się czasem z nieuzasadnionym ryzykiem.

Nawet po nocnych testach nie wysyłamy poprawek w piątki, chyba że w niezwykle pilnych sprawach (takich jak zepsute kolejki rankingowe czy możliwość grania wyłącznie Teemo). Część architektury League powstała dawno temu, gdy jeszcze nie wiedzieliśmy, jak wiele treści będą musiały unieść te fundamenty, a niektóre z nich nie są tak solidne, jak byśmy chcieli.

Kiedyś po wysłaniu poprawki do danych klienta, u każdego użytkownika kasowany był plik wykonywalny League, co znaczy, że nikt nie mógł uruchomić League of Legends. Kierownik działu publikacji Donna „Riot Feithen” Mason mówi: — W idealnej sytuacji spodziewamy się, że kiedy naciśniemy przycisk, za każdym razem stanie się to samo, ale czasami tak nie jest.

Wciąż pracujemy nad aktualizacją części przestarzałych fundamentów League, ale nim to nastąpi, wprowadzanie poprawek jest obarczone pewnym ryzykiem. Staramy się działać z rozwagą, szczególnie przed weekendem, bo wysyłanie poprawek zmusza nas do ponownego przesłania wszystkich danych bez względu na to, jak drobna jest to zmiana.

Byliśmy pewni, że musi istnieć lepszy sposób naprawy drobnych błędów wywołujących duże problemy.

 

Mikropatche, skryci superbohaterowie

Jakiś rok temu wszystko się zmieniło za sprawą technologii mikropatchów. W odróżnieniu od poprawek mikropatche mogą dokonywać precyzyjnych, konkretnych zmian w danych rozgrywki. Gdyby pomyśleć o serwerze gry jak o tablicy informacyjnej, to mikropatch jest samoprzylepną karteczką umieszczoną na tej tablicy. Poprawki są jak wymiana całej tablicy, czasem w celu poprawienia tylko jednej literówki. Po wprowadzeniu mikropatchów serwer gry pozostaje w starej wersji, ale przy wczytywaniu nowej gry szuka samoprzylepnych karteczek i dokonuje konkretnych zmian.

„Możemy rozesłać mikropatch na cały świat w czasie poniżej dwóch minut”.

Dzięki temu mikropatche są o wiele mniej ryzykowne, a także o wiele szybsze do zaimplementowania niż poprawki. Po pierwsze mikropatche dodaje się do istniejących danych serwera zamiast wysyłać wszystko na nowo, więc zmiany mają o wiele bardziej ograniczony zakres. Po drugie mikropatche niezwykle łatwo wdrożyć i wycofać. Możemy rozesłać mikropatch na cały świat w czasie poniżej dwóch minut — i równie szybko go usunąć.

Przez pewien czas mikropatche służyły wyłącznie do zmian danych liczbowych — były zasadniczo używane do rozwiązywania problemów z wyważeniem, którymi trzeba się było zająć natychmiast. Nie było sposobu na dokonywanie precyzyjnych zmian w skryptach kontrolujących działanie umiejętności bohaterów, co oznaczało, że jedyną metodą naprawy (większości) błędów skazujących bohaterów na wyłączenie wciąż były poprawki wymagające wymiany wszystkich danych.

Technologię ratującą bohaterów ukończono kilka tygodni przed wystąpieniem błędu, który miał wyłączyć Anivię. Teraz mogliśmy już mikropatchami dokonać precyzyjnych zmian w skryptach umiejętności.

 

Odrodzenie Anivii

W dniu premiery Karnawałowej Anivii przekonaliśmy się, że jej superumiejętność zawiera błąd we wszystkich skórkach. Pracownicy działu kontroli jakości rzucili się do pracy nad ustaleniem dokładnej przyczyny problemu. Współprojektant gry Matthew „PhRoXzOn” Leung-Harrison, który pracował nad zmianami w Anivii zawartymi w patchu 6.23, wspomina: — Gdy tylko zobaczyłem ten błąd, od razu wiedziałem, w czym dokładnie tkwi problem.

Dla każdego z bohaterów w League istnieje plik logiczny ze skryptami kontrolującymi jego umiejętności. Nie oznacza to, że są w nim informacje o wyglądzie umiejętności czy zadawanych przez nie obrażeniach. Plik jest raczej odpowiedzialny za działanie umiejętności — jak płyta główna, która łączy wszystkie informacje i syntetyzuje je w to, co widać na ekranie.

Przez pomyłkę wysłaliśmy na działające serwery zepsutą wersję pliku logicznego superumiejętności Anivii. W wyniku tego superumiejętność wyglądała, jakby działała — włączała się po naciśnięciu „R” i pokazywały się śliczne efekty cząsteczkowe — ale nie funkcjonowała poprawnie. Burza Lodu powinna nakładać dwusekundowe osłabienie podwajające obrażenia od Odmrożenia, a nakładała półsekundowe. Jak to ujął lider działu kontroli jakości Brian „Aotus” Brause, „wyglądało to pięknie… tylko nie zadawało obrażeń”.

Po rozpoznaniu problemu zaktualizowaliśmy skrypt logiczny Anivii i przeznaczyliśmy trochę czasu na testy kontroli jakości. Zmiana naprawiła nowy błąd, ale drobiazgowe poszukiwania błędów pozwoliły odkryć starą lukę, która pojawiła się wraz z patchem 6.23. Na szczęście proces kontroli jakości dla mikropatchów jest dość szybki, ponieważ sprawdzamy tylko efekty jednej konkretnej zmiany. Dokonaliśmy drugiej modyfikacji i ta zadziałała. Oba błędy zostały naprawione i można było wysłać graczom mikropatch.

Koniec z wyłączaniem na weekend — w ciągu czterech godzin Anivia wróciła do (prawidłowego) mrożenia i zabawy na Summoner’s Rift.

 

Mikropatchami można naprawić wszystko?

Dawniej mikropatchów używano do rozwiązywania problemów z wyważeniem gry, a teraz po raz pierwszy zmodyfikowaliśmy mikropatchami skrypt logiczny i ocaliliśmy bohatera od okrutnego losu wyłączenia z gry. Technologia ta nie jest uniwersalnym rozwiązaniem — nie dodamy Anivii nowego skrzydła ani jeszcze bardziej mroźnych efektów wizualnych przy użyciu mikropatchów — ale pozwala naprawić na bieżąco pewne błędy w szybki i mało ryzykowny sposób.

W tej chwili pracujemy nad lepszym sposobem informowania graczy o zmianach wprowadzanych mikropatchami. Obecnie dodawane są one na początku opisów patchów, ale kto do licha wraca do czytania opisów kawał czasu po wypuszczeniu patcha? Rozważaliśmy powiadamianie o większych zmianach w rodzaju osłabień i wzmocnień poprzez pasek informacyjny w kliencie gry, ale on służy tylko do informowania o awariach i braku stabilności. Mamy nadzieję, że w zaktualizowanym kliencie znajdzie się lepszy sposób na obwieszczanie zmian wprowadzanych mikropatchami.

A do tego czasu, jak mówi żartem Riot Penrif, „jeśli coś, co wydawało się zepsute, zacznie znienacka działać, można założyć, że sytuację uratowały mikropatche”.