Taktyczna gra karciana na kontrolerze: jak działa obsługa kontrolerów w Ancient Duel
Obsługa kontrolerów zwykle dotyczy gier opartych na ruchu i celowaniu. W Ancient Duel nie ma ani jednego, ani drugiego. To gra karciana: patrzysz na planszę, zastanawiasz się chwilę, a potem podejmujesz jedną, wyraźnie określoną decyzję.
Właśnie dlatego kontroler tak dobrze do niej pasuje. Każda akcja w pojedynku sprowadza się do tej samej krótkiej listy. Która karta. Która pozycja. Który cel. Potwierdź. Wstecz. To naturalny język kontrolera, który słabo pasuje do urządzenia, którego największym talentem jest wskazanie dowolnego piksela.
Kontroler nie powinien udawać myszy
Kusi droga na skróty: pozwolić, by gałka przesuwała kursor po ekranie. Szybko się to programuje i nieprzyjemnie się z tego korzysta: prowadzisz wskaźnik nad pustym suknem stołu, wykonując analogową pracę po to, by podjąć cyfrową decyzję.
Ancient Duel przesuwa zamiast tego zaznaczenie. Gałka lub krzyżak przeskakują między rzeczami, które naprawdę mają znaczenie (kartą w ręce, jednostką na polu bitwy, celem, przyciskiem, zakładką), a Potwierdź aktywuje to, co jest w danej chwili zaznaczone. Nigdy nie celujesz. Mówisz „następna karta”, „ta”, „tak”.
Cała warstwa obsługi wejścia trzyma się zasady, którą przyjąłem wcześnie i której nigdy nie złamałem: nigdy nie implementuje od nowa żadnej akcji gry. Przesuwa fokus i pozwala, by przycisk, który już tam był, zrobił swoje. Od kwietniowych prac nad dostępnością w grę dało się już w pełni grać z klawiatury, więc obsługa kontrolerów nie wymagała żadnych zmian w logice gry. Działa to też w drugą stronę: czego nie da się osiągnąć klawiaturą, tego nie da się osiągnąć kontrolerem. Dodanie czegoś do nawigacji oznacza uczynienie z tego punktu fokusu, a nie pisanie nowego kodu obsługi wejścia.
Plansza była już siatką
Tu gra karciana pomaga w sposób, w jaki świat 3D nie potrafi. Pole bitwy w Ancient Duel to stała, skończona struktura: cztery pozycje jednostek po każdej stronie, miejsce na Dowódcę pośrodku, rząd strategii, ręka, dwa cmentarze, strefa terenu. Nie ma żadnej ciągłej przestrzeni, którą trzeba by przemierzać.
Widoczny układ może więc po prostu stać się nawigacją. Lewo i prawo przesuwają zaznaczenie wzdłuż rzędu, góra i dół przenoszą je między ręką a polem bitwy, a przyciski na ramionach kontrolera przeskakują całe strefy naraz, zamiast przechodzić przez wszystko, co leży pomiędzy. Prawa gałka przewija stronę, a Start otwiera ustawienia kontrolera.
Fokus jest kursorem
Z myszą zawsze wiesz, na co wskazujesz, bo wskazuje twoja własna ręka. Zabierz wskaźnik, a interfejs musi w każdej chwili odpowiadać na trzy pytania: co jest zaznaczone, co zrobi z tym Potwierdź i co cofnie Wstecz.
Brzmi to oczywiście i właśnie na to poszła większość żmudnego dopracowywania. Okno dialogowe, które otwiera się z zaznaczeniem na przycisku zamknięcia, jest technicznie nawigowalne, a w praktyce bezużyteczne: gra właśnie zapytała, którą kartę odrzucić, a podświetlenie stoi na ✕. Okna dialogowe otwierają się teraz na pierwszym prawdziwym wyborze, a tryby wyboru celu stawiają zaznaczenie na pierwszym dozwolonym celu, zamiast tylko podświetlać wszystkie, co działało ze wskaźnikiem, a bez niego zamieniało się w poszukiwanie skarbu.
Dobra obsługa kontrolerów to nie stan, w którym każdy przycisk jest osiągalny. To stan, w którym przestajesz myśleć o tym, jak do nich dotrzeć.
Nigdy nie ufaj indeksowi przycisku
Tę część zdecydowanie najbardziej zbagatelizowałem.
Kontroler do PC może zgłaszać, że używa standardowego układu, a potem numerować przyciski tak, jak podoba się jego oprogramowaniu układowemu. Kontroler, na którym testuję, robi dokładnie to, a na dodatek ma nadrukowane 1 / 2 / 3 / 4 zgodnie z ruchem wskazówek zegara, zaczynając od góry, zamiast A/B/X/Y. Za każdym naciśnięciem kryją się więc trzy różne fakty i tylko pierwszy z nich można naprawdę poznać: surowe wejście, fizyczne położenie tego przycisku na obudowie i oznaczenie nadrukowane obok. Gra, która przypisuje Potwierdź do „przycisku 0”, zgaduje dwa z tych trzech faktów.
Dlatego Ancient Duel ma kreator kalibracji, który nigdy niczego nie wnioskuje z indeksu. Fizyczne położenie poznaje dzięki twoim rękom, a oznaczenie z tego, co według ciebie widnieje na urządzeniu. Oznaczenia wybiera się z listy zamiast je wpisywać, bo kontroler nie ma liter, i nie są ozdobą: jeśli powiesz grze, że na twoim dolnym przycisku jest „B”, a na prawym „A”, trzymasz w rękach sprzęt w konwencji Nintendo, cokolwiek sądzi o tym przeglądarka, i Potwierdź oraz Wstecz odpowiednio zamieniają się miejscami.
Pominięte polecenie pozostaje nieprzypisane. Gra nie wraca do zgadywanego indeksu, bo przycisk na ramieniu, który potwierdza poddanie partii, to dokładnie ten błąd, któremu kalibracja ma zapobiegać.
Kalibracja, która nie może prosić o mysz
Kryje się w tym paradoks. Gracz ze źle zmapowanym kontrolerem to właśnie ten, kto najbardziej potrzebuje ekranu kalibracji, i właśnie ten, kto nie przejdzie do niego przez zwykłe menu.
Dlatego cały projekt trzyma się jednej zasady: kontroler musi dać się skalibrować, opisać, zapisać, ponownie otworzyć i naprawić bez myszy i klawiatury. Na komputerze obie działają dla wygody; nic nie może od nich zależeć.
W praktyce oznacza to, że kreator zaczyna od „naciśnij dowolny przycisk, aby rozpocząć” i przyjmuje dowolny surowy przycisk z dowolnego podłączonego kontrolera, a to naciśnięcie decyduje też, który kontroler steruje sesją. Następne są potwierdzenie i anulowanie, których nie można pominąć. Od trzeciego pytania przycisk wskazany przed chwilą jako prawy przycisk akcji cofa o jeden krok, więc naciśnięty wystarczająco wiele razy zamyka kreator: to jedyne wyjście, które nie wymaga wskaźnika. Każdy krok przechwytywania przechodzi dalej sam, bo ktoś, komu właśnie kazano nacisnąć dolny przycisk akcji, nie ma jak nacisnąć jeszcze „Dalej”.
Dlaczego nigdy nie pyta o gałkę
Osiem pytań i wszystkie dotyczą przycisków. O kierunki nie pyta żadne.
Po części dlatego, że kierunki są tą niezawodną częścią: w kontrolerze ze standardowym mapowaniem lewa gałka przychodzi jako dwie pierwsze osie, co czyni sterowanie kierunkowe znacznie bardziej przewidywalnym niż przyciski ponumerowane przez producenta według własnego uznania. Przede wszystkim jednak z powodu czegoś, co zrozumiałem dopiero wtedy, gdy zobaczyłem, jak to zawodzi. Przycisk jest albo wciśnięty, albo nie. Oś nie ma sensownego stanu spoczynku: zużyta gałka dryfuje, przełącznik hat krzyżaka spoczywa na 3,29, spust zostaje na −1, i każde z nich może odpowiedzieć na pytanie, którego nikt nie zadał, albo nie pozwolić zakończyć kroku z powodu, którego nic na ekranie nie potrafi wyjaśnić. Rezygnacja z tego pytania usunęła całą kategorię niewytłumaczalnych zachowań.
Przytrzymanie kierunku powtarza ruch, z szybkością, którą możesz ustawić, podobnie jak martwą strefę, jeśli twoja gałka dryfuje.
Pisanie bez liter
Potem trafiasz na pole tekstowe, a kontroler nie ma nic do zaoferowania. Logowanie, nadawanie nazwy talii, przeszukiwanie puli kart: wszystko to wymaga znaków, których nie ma żaden kontroler.
Dlatego Potwierdź na polu tekstowym otwiera pełną klawiaturę QWERTY na ekranie. To zwykłe przyciski na zwykłej warstwie, więc porusza się po nich ta sama nawigacja, a Wstecz zamyka klawiaturę jak wszystko inne. Kto ma prawdziwą klawiaturę, nigdy jej nie zobaczy.
Szczegół, o którym nie sądziłem, że będzie miał znaczenie: układ odwzorowuje prawdziwe fizyczne przesunięcie rzędów, te same przesunięcia o ćwierć klawisza co klawiatura ANSI. Nawigacja odczytuje wyświetloną geometrię, by zdecydować, dokąd prowadzi „w górę”, więc to właśnie przesunięcie umieszcza W nad szczeliną między A i S. Okrąglejsze liczby naprawdę zawodzą: przy przesunięciu o dokładnie pół klawisza każdy klawisz jest równo oddalony od dwóch klawiszy pod nim, a remis rozstrzyga kolejność, w jakiej akurat stoją w kodzie strony.
Co kontroler znalazł w reszcie gry
Najbardziej użyteczne w tej pracy okazało się to, co wydobyła na światło dzienne. Mysz pozwala obejść problemy interfejsu, wskazując wprost to, czego chcesz. Kontroler na to nie pozwala, więc interfejs musi jawnie określać te zależności, a w kilku miejscach okazało się, że tego nie robił.
Zapisane talie nie były punktami fokusu, co oznaczało, że bez myszy w ogóle nie dało się otworzyć talii. To samo dotyczyło cmentarzy i terenu. Kreator talii przebudowywał obie swoje kolumny przy każdej dodanej karcie, niszcząc przycisk, który właśnie został naciśnięty, i gubiąc twoje miejsce; teraz zapamiętuje kartę i akcję i odnajduje je z powrotem. Własne okna potwierdzeń i ostrzeżeń przeglądarki leżą całkowicie poza modelem fokusu aplikacji, więc zastąpiono je oknami dialogowymi na stronie, które otwierają się na bezpiecznej odpowiedzi.
Żaden z tych problemów nie jest błędem kontrolera. To błędy interfejsu, które wskaźnik po cichu nadrabiał, a ich naprawienie ulepszyło grę także dla tych, którzy nigdy nie dotkną kontrolera.
Steam, kanapy i Deck
Ten sam kod działa w przeglądarce, w wersji na Windows dostępnej na Steamie i w wersji na macOS, a wszystkie trzy korzystają z tego samego systemu obsługi kontrolerów i tej samej logiki konfiguracji, choć same ustawienia zapisują się na urządzeniu, a nie na twoim koncie.
Korzyść jest prosta: PC to już nie tylko biurko. Ta sama wersja działa na laptopie, na komputerze podłączonym do telewizora i na kanapie, z kontrolerem w ręku. Gra karciana nadaje się do tego lepiej niż większość gatunków, bo naturalna postawa w Ancient Duel to odchylić się na oparcie i myśleć, a nie pochylać się do przodu i klikać.
Jeśli chodzi o urządzenia przenośne, takie jak Steam Deck, uczciwy stan rzeczy jest taki: fundamenty są gotowe, testy nie. Steam Input może udostępniać wejście kontrolera przez standardowe mapowanie zgodne z XInput, więc istniejący model jest w zasadzie użyteczną podstawą, a gra, która nigdy nie zakłada obecności myszy, spełnia ważny warunek dla tego rodzaju urządzeń. Nie sprawdziłem Ancient Duel na samym sprzęcie, więc nie będę twierdził, że tam działa. Jest też tryb TV, który dodaje margines bezpieczeństwa, bo niektóre ustawienia telewizorów wciąż stosują overscan i obcinają część obrazu na krawędziach, na tyle dużą, że przycisk poddania partii może wypaść poza ekran.
To samo rozumowanie dotyczy każdej przyszłej platformy. Wersja na konsole wymagałaby znacznie więcej niż pracy nad obsługą wejścia: SDK, certyfikacji, usług platformy, przygotowania pakietów, zatwierdzenia w sklepie. Jedną przeszkodę można jednak usunąć wcześnie i jest to ta, która dotyczy każdego ekranu: gra nie może zakładać, że istnieje mysz. To nie czyni niczego gotowym na konsole. Utrzymuje otwarte drzwi, których ponowne otwarcie byłoby później kosztowne.
Mysz nigdzie nie zniknęła
Nic z tego niczego nie zastępuje. Mysz i klawiatura działają dokładnie tak jak wcześniej i na komputerze nadal są szybsze. Nigdy nie chodziło o to, by wybierać urządzenie wejścia za graczy.
Pojedynek rozegrany na kontrolerze nie jest innym pojedynkiem. Zaznaczasz tę samą kartę, wybierasz ten sam cel, podejmujesz tę samą decyzję i ponosisz jej konsekwencje. Zmienia się tylko droga, którą decyzja dociera do gry, a im mniej Ancient Duel zakłada o tym, co trzymasz w rękach, tym więcej jest miejsc, w których da się rozegrać ten sam pojedynek.
Daniel Rusu
Twórca i deweloper Ancient Duel