Doom 3 na Androida? Rozmowa z deweloperem portującym grę

9 minut czytania
Komentarze

Doom jest jedną z najstarszych i zarazem najpopularniejszych serii gier FPS tworzonych na komputery. No właśnie skąd podkreślenie słowa komputer? Okazuje się bowiem, że takie stwierdzenie może być nieaktualne. Dwie pierwsze części Dooma były często portowane na różne mobilne platformy takie jak: GBA, Symbian, Android, a nawet pojawiły się na starszej generacji odtwarzaczy iPod. Trzecia część serii jednak jest na tyle rozbudowana i wymagająca, że wydawało by się, że jeszcze długo nie zobaczymy jej na naszych smartfonach. Rzeczywistość okazała się jednak zaskakująca i to nie tylko ze względu na fakt portowania tak wymagającej gry.

Dla przypomnienia dodam tylko, że Doom 3 została wyprodukowana przez id Software i wydana w 2004 roku przez Activision. Akcja gry dzieje się w 2145 roku w bazie Union Aerospace Corporation na Marsie. Natomiast kod źródłowy silnika ID Tech 4 dostępny jest od listopada 2011 roku.

Kilka dni temu przeglądając Internet w poszukiwaniu ciekawych tematów na newsy trafiłem na film na youtube przedstawiający wczesną wersję gry Doom 3 działającą na smartfonie z Androidem (HTC Desire HD). Był to świetny temat na główną jednak w pewnym momencie zauważyłem, że monit o braku odpowiedzi wyświetlany na ekranie jest w języku polskim. Okazało się, że osobą odpowiedzialną za portowanie gry jest Krzysztof Klinikowski, deweloper z Wrocławia. Mam nadzieję, że opóźnienie w przekazaniu wam tej informacji wynagrodzi fakt, że udało mi się złapać kontakt z Krzysztofem, a on specjalnie dla Was odpowiedział na kilka pytań.

Doom 3 na smartfonie to, wydawało się niedawno, pomysł utopijny. Skąd wzięła się idea portowania tej gry na Androida?

Pomysł zrodził się w maju, gdy Oliver McFadden opublikował pierwsze zrzuty ekranu z jego portu Dooma 3 na Nokię N900. Oliver wspomniał na swoim blogu, że gra uruchomiła się, ale działa naprawdę powoli. Zacząłem się zastanawiać ile klatek możemy wycisnąć z gry na dzisiejszych telefonach i tabletach z systemem Android więc zgadaliśmy się na IRCowym kanale rozmawiając o ewentualnym porcie na Androida jednak programista nie był wtedy zainteresowany pomocą. Dwa tygodnie temu opublikował on kod swojego silnika z systemem renderowania przepisanym na OpenGL ES 2.0. Gdy tylko dowiedziałem się o tym pobrałem źródła jego pracy i rozpocząłem pracę nad portem. Mając wolny weekend udało mi się przepisać systemy budowania, sterowania, zarządzania procesem i oknem. Powstała pierwsza paczka z bardzo wczesną wersją portu oraz pierwsze zrzuty ekranu.

Dlaczego akurat Doom 3? Jest to kwestia sympatii do tej gry, a może po prostu wyzwanie?

Dla mnie osobiście było to wyzwanie. Chciałem sprawdzić czy uda mi się przepisać i uruchomić silnik gry oraz przystosować go do urządzeń mobilnych. Było to też interesujące pole do nauczenia się nowych rzeczy z zakresu programowania i optymalizacji.

Zajmujesz się tym projektem sam, a może ktoś Ci pomaga? Jeżeli pracujesz sam, to czy nie zamierzasz szukać kogoś do pomocy?

Tak jak wcześniej wspomniałem Oliver przepisał sporą część renderera na OpenGL ES 2.0. Bez jego wkładu być może port Dooma 3 nigdy by nie powstał. Zaraz po opublikowaniu pierwszych zrzutów z gry uruchomionej na moim Desire HD pojawiły się pierwsze pozytywne komentarze na temat mojej pracy, dwa dni od  opublikowania wideo z wersji pre-alpha gry, ludzie zaczęli się do mnie zgłaszać z chęcią pomocy w testach. Pojawili się też programiści zainteresowani wsparciem projektu więc nie, już nie zajmuję się nim sam ?

Taki projekt wymaga wiedzy z zakresu programowania, zajmujesz się pisaniem programów zawodowo? Masz wykształcenie z tego zakresu, czy może po prostu jesteś pasjonatem?

Tak. Jestem programistą w jednej z wrocławskich firm zajmujących się właśnie pisaniem gier, chociaż gry które tworzymy różnią się znacznie od FPSów w stylu Dooma 3. Kształcę się również w tym kierunku, chociaż nie mogę powiedzieć, że moje umiejętności wzięły się ze szkoły. Jestem zainteresowany komputerami i programowaniem odkąd dostałem pierwszego peceta na komunię. Po prostu uwielbiam programować i w każdym wolnym czasie staram się uczyć czegoś nowego.

Programowałeś już wcześniej na Androida, czy port Dooma jest pierwszym Twoim projektem na „system sygnowany zielonym robocikiem”?

Programowaniem na Androida interesuje się odkąd kupiłem swój pierwszy telefon z tym systemem a samym Androidem zafascynowałem się od pierwszych wzmianek w mediach. W zeszłym roku próbowałem przeportować grę Uplink po udostępnieniu jej źródeł w jednej z akcji Humble Indie Bundle. Przeniosłem ją na system Android jednak firma która miała prawa do gry postanowiła zabronić mi dalszych prac nad projektem i wynająć firmę trzecią która przygotowała im nowy port. Szkoda. Następnie pracowałem nad multiplatformowym silnikiem gier dwuwymiarowych, skryptowanym w JavaScript. Silnik miał ukazać się również w wersji na Androida jednak do oficjalnego wydania nigdy nie doszło. W międzyczasie zajmowałem się też portem biblioteki libpurple na „zielonego robocika”.

Na youtube widziałem, że wersja testowa (alpha?) działa płynnie na dosyć leciwym już Desire HD, czy zamierzasz zoptymalizować Dooma tak by płynnie działał na urządzeniach z procesorem jednordzeniowym?

Aktualnie w każdej wolnej chwili zajmuję się optymalizacją silnika ID Tech 4. Wraz z garstką zainteresowanych programistów staramy się, aby możliwe było granie w Dooma nawet na starszym sprzęcie, jednocześnie nie tracąc na jakości grafiki. Nie wiem na ile się to nam uda ale aktualnie jesteśmy bardzo pozytywnie nastawieni. Na dniach powinna pojawić się implementacja kompresji tekstur, poprawki dla architektury ARM oraz zmniejszenie wysyłanych danych na GPU.

Na jakich urządzeniach testowałeś swój port? Czy ewentualne problemy/błędy występujące na konkretnych modelach urządzeń będą przez Ciebie naprawiane?

Port był testowany na moim HTD Desire HD oraz na HP Touchpadzie. Z tego co wiem kilka osób testowało grę na Nexusie S oraz tablecie Galaxy Tab. Oczywiście w miarę możliwości będę się starał, by port działał na jak największej ilości urządzeń jednak nie jest to zadanie łatwe.

Nie ukrywam również, że marzy mi się urządzenie z Tegrą 3, na które mnie nie stać… może któryś z producentów sprzętu lub hojny darczyńca chciałby mnie zasponsorować? ?

Jak dużo czasu poświęciłeś na portowanie tej gry? Ile czasu jeszcze jesteś w stanie poświęcić na ten projekt? Jak myślisz kiedy i czy kiedykolwiek pojawi się jego wersja finalna?

Nad projektem pracuję od dwóch tygodni, głównie w wolnym czasie po pracy, czasem do późnych godzin. Zdarzają się dziwne błędy i problemy które nie dają mi zasnąć i póki ich nie naprawię to do łóżka nie idę! Ile czasu mogę poświęcić na ten projekt? To dość trudne pytanie. Dopóki ludzie będą zainteresowani portem, a ja będę miał wolny czas to zapewne będę się nim zajmował. Nie sądzę jednak, że kiedykolwiek pojawi się wersja finalna. Nie zdziwię się, jeśli na jego bazie powstaną inne ciekawe forki, a może i całe gry bowiem silnik jest napisany naprawdę nieźle i mimo, że od premiery minęło już dobre „kilka” lat to nadal można z niego wycisnąć naprawdę dużo.

Czy zdajesz sobie sprawę, że o projekcie robi się (aż tak) głośno? Znalazłem o nim informacje nawet na zagranicznych serwisach.

Ja również. Naprawdę mnie to cieszy i muszę przyznać, że nie sądziłem iż projekt wywoła taki szum w sieci! Opublikowałem wideo na YT by pokazać, że to naprawdę działa, a następnego dnia czytałem o sobie i o moim porcie w popularnych serwisach technologicznych. Cieszy również fakt, że dzięki takiej promocji projektu zainteresowało się nim kilku kolejnych programistów, którzy również pomagają mi przy porcie. Bardzo miło również usłyszeć pozytywne komentarze, które naprawdę cieszą. Fajnie wiedzieć, że ktoś docenia twoją pracę.

Wielu z naszych czytelników jest utalentowanymi deweloperami, czy masz dla nich jakieś rady? Od czego zacząć portowanie? Czego nauczyłeś się podczas realizacji tego projektu?

Oczywiście. Jeśli chodzi o portowanie gier na Androida to z moich doświadczeń – nie ma nic lepszego niż praca pod linuksem. Większość optymalizacji związanych np. z renderingiem wykonuje pod linuksem a dopiero później nanoszę zmiany do kodu dla Androida. Linuks bezproblemowo pozwala na korzystanie z instrukcji OpenGL ES zarówno w wersji 1.0 jak i 2.0 a debugowanie kodu na komputerze jest dużo przyjemniejsze niż wrzucanie paczki z grą za każdym razem na telefon.

Jeśli gra którą portujemy jest napisana w C/C++, możemy użyć wprowadzonej w Androidzie 2.3 biblioteki NativeActivity, dzięki temu, jeśli będziemy mieć szczęście – nie będziemy musieli napisać ani linii kodu w Javie a dostaniemy natywną obsługę sterowania, systemu plików i zarządzania żywotnością procesu gry. Do obsługi dźwięku najlepiej użyć natywnego API OpenSL.

Mam nadzieję, że Cię nie wymęczyłem. Chcesz coś dodać na koniec?

Chciałbym przede wszystkim podziękować zainteresowanym projektem. Wszystkie te komentarze i wzmianki – to naprawdę motywujące!

Zainteresowanych źródłami jak i nowinkami związanymi z portem odsyłam na moją stronę na Google+ oraz mój profil w serwisie GitHub.

Mam nadzieję, że niedługo będę mógł zaserwować Wam paczkę z Doomem 3, który będzie działał płynnie nawet na starszych telefonach z „zielonym robocikiem” na pokładzie ?

Dziękuję Ci za odpowiedzi na moje pytania. Życzę Ci wytrwałości, czasu i hojnych darczyńców, którzy ufundują Ci urządzenie z wymarzoną Tegrą 3.

Rozmowa z Krzysztofem przeplatana jest screenami, które udostępnił specjalnie dla Was, oczywiście pochodzą one z wczesnej wersji portu, dlatego na przykład liczba FPSów, czy jakość grafiki nie powala.

Mam nadzieję, że spodobała się Wam nasza rozmowa oraz projekt tworzony przez Krzysztofa. Jeżeli macie jakieś pytania lub chcecie na bieżąco śledzić projekt możecie odwiedzić jego profil na Google+ lub na Twitterze.

Motyw