Projektuję sobie API dla okna do swojej gry. Założenie jest takie, że prócz standardowego trybu kampanii single player, gra ma dodatkowo wspierać ”kanapowy” tryb kooperacji dla dwóch osób — jest on coraz chętniej brany pod uwagę przez deweloperów zamiast tryb multiplayer online. Sam też jestem nim zainteresowany ze względu na specyfikę samej produkcji, do której będzie świetnie pasował — kampania dla jednego gracza lub dwóch.
Tryb ten zwykle implementuje się jako split screen lub — jeśli mechanika gry na to pozwala — w formie ujęcia obu graczy na jednym ekranie, z dostosowaniem zakresu ruchów oraz dopasowaniem kamery do pozycji graczy. Jest jeszcze trzecia opcja, która przychodzi do głowy, czyli podział nie ekranu na pół, a gry na dwa ekrany (dwa okna).
Od lat popularne są stanowiska wielomonitorowe z podziałem pulpitu na kilka ekranów, do tego każdy ma przecież telewizor, który również może być używany jest jako dodatkowy ekran. Można więc zrobić tak, że na jednym ekranie (np. laptopa) gra jeden gracz, a na drugim ekranie (monitorze lub telewizorze) gra drugi. Mając dwa okna i dwa różne rzuty, problem ograniczania zakresu ruchów graczy oraz wyrównywania kamery względem ich pozycji nie istnieje — każdy widzi swój fragment mapy i swój HUD.
Taka forma kooperacji daje niesamowite możliwości — nie zmusza obu graczy do współpracy ”jednoekranowej”, chodzenia wszędzie razem, rozwiązywania razem zagadek itd. Dzięki temu, że gracze nie będą przykuci do siebie, jeden będzie mógł wykonywać jedno zadanie, a inny eksplorować zupełnie inną część mapy. Oczywiście w dalszym ciągu powinne być zadania, które trzeba będzie wykonać we dwoje, jednak nie jako wszędobylski przymus, a jako urozmaicenie.
Pogłówkowałem nieco na temat tego, jak coś takiego zaimplementować. Silnik w założeniu będzie miał wszystkie dane w RAM-ie (całą mapę), więc będzie mógł mógł bez problemu wykonywać logikę dla dwóch osobnych lokalizacji na mapie (interakcje ze środowiskiem, fizykę otoczenia, spawny przeciwników itd.). Aby widzieć dwa miejsca, wystarczy umieścić dwie kamery i przykuć je do dwóch postaci. Renderer zamiast tworzyć jedną klatkę, wyrenderuje dwie, na osobnych buforach, a na koniec wyrenderuje je w dwóch oknach. Obsługa wielu kamer jednocześnie i tak mi się przyda na potrzeby edytora zawartości, bo chcę mieć widok obiektu/mapy z czterech perspektyw.
Oczywiście nie wszystko da się tak fajnie zuniwersalizować — taki tryb kooperacji wymusi napisanie dodatkowego kodu, jednak przy odpowiednim zaprojektowaniu logiki, nie powinno go wyjść dużo. Większość pewnie dotyczyć będzie interfejsu (np. zasobnika z przedmiotami, obsługi menu itp.). Przy czym taką logikę można wykorzystać do typowego split screena, więc jedyne co trzeba będzie dodatkowo zrobić to oprogramować obsługę dwóch okien, oprócz tylko jednego. Summa summarum, lokalny koop będzie możliwy jako jednoekranowy, split screen oraz dwuekranowy (do wyboru do koloru).
Co o tym myślicie? Znacie gry, w których lokalny tryb kooperacji opiera się na obsłudze wielu ekranów? Ciekaw jestem waszej opinii na ten temat i tego, czy jako gracze bylibyście nim zainteresowani.