Wiele osób zna planszówkę Splendor, w której gracze zbierają punkty prestiżu. Znacznie mniej osób zna androidową adaptację o nazwie Prestige, w której gracze gromadzą punkty splendoru. Byłem współautorem tego wiekopomnego tytułu a niniejszy artykuł opowiada krótką historię jego wzlotu i… trwającego dekadę łagodnego przyziemienia.
A było to tak.
W roku 2014 rozpocząłem pracę na stanowisku programisty aplikacji mobilnych w PGS Software. Była to firma typu „software house”, produkująca oprogramowanie na zamówienie podmiotów zewnętrznych. W firmach tego typu pracownikom zdarza się tzw. „ławeczka” czyli przerwa między projektami komercyjnymi – to czas na realizację projektów wewnątrzfirmowych, trening czy szkolenia.
Gdy pod koniec roku 2014 zespół androidowy nie miał żadnego aktywnego zlecenia, wpadłem na pomysł wspólnej realizacji jakiejś małej aplikacji, by poćwiczyć kooperację i dzielenie się zadaniami w jednym projekcie. Wraz z Bartkiem Stokrockim i Rafałem T. postanowiliśmy napisać prostą grę. Nasz wybór padł na Splendor, wydaną w tym samym roku planszówkę, która zgarnęła wiele nagród i błyskawicznie pięła się w rankingach popularności.
Projekty komercyjne szybko wróciły, więc realizacja projektu trwała – z przerwami – kilka miesięcy.
Tytuł i prawa autorskie
Mało kto wie, że prawo autorskie nie chroni zasad i reguł gier. Legalne jest wydanie sklonowanego produktu, o ile nie wykorzystamy elementów podlegających ochronie – takich jak tytuł, projekt graficzny, kolorystyka żetonów, ilustracje na pudełku czy treść instrukcji. Jeśli jednak te elementy wykonamy samodzielnie, to użycie takich samych zasad gry (opisanych oczywiście od nowa) będzie zgodne z prawem.

Kontaktowałem się z wydawcą Splendora z propozycją współpracy, ale wydawca nie był zainteresowany. Wdrożyliśmy więc plan B i po krótkiej burzy mózgów obraliśmy tytuł alternatywny, Prestige. Śmieszy mnie po dziś dzień.
Produkcja
Nikt z nas nie pracował wcześniej w branży gier, ale podzieliliśmy produkcję na części składowe w sposób, który sprawdził się w późniejszej pracy. Jednym z głównych modułów był model stanu gry i tę część zrealizowaliśmy w „czystej” Javie, bez zależności od frameworka mobilnego. Naszym celem było przygotowanie środowiska, w którym zewnętrzni autorzy mogliby tworzyć dodatkowe boty. Z tego powodu gotowa biblioteka trafiła na Githuba: github.com/PGSSoft/PrestigeModel
Choć boty autorstwa osób trzecich nigdy nie powstały, to sam moduł (wraz z areną do pojedynku botów) – był wyposażony w testy automatyczne pokrywające chyba każdy przypadek brzegowy, jaki tylko może przydarzyć się w rozgrywce.
Warstwę wizualną postanowiliśmy zrealizować grę za pomocą standardowych komponentów typu ImageView, przesuwanych po ekranie generycznymi animacjami. Takie umiejętności mogły się przydać przy realizacji aplikacji biznesowych, jakakolwiek biblioteka 2D do gier – nie bardzo.
W miarę, jak na ekranie przybywało komponentów, animacje coraz bardziej przycinały. Po zbadaniu profilerem odpowiednich fragmentów kodu odkryliśmy, że framework zbyt dużo czasu spędza na wyznaczaniu obszarów do przerysowania. Na ekranie było w tym czasie z półtorej setki elementów – kilkadziesiąt monet, kilkadziesiąt kart, na każdej karcie kilka modyfikatorów itp. Dodatkowo kontenery przy odrysowaniu powtarzały czasochłonne rozmieszczanie zawartości.
Spostrzegliśmy jednak, że nawet wielka liczba elementów nie wpływa na płynność animacji, jeśli są niewidoczne, ukryte pod innymi kontrolkami. Pomysł na optymalizację był więc następujący:
- przed animacją robimy zrzut ekranu i umieszczamy go nad polem gry
- na tle tego zrzutu animujemy ruch obiektów
- aktualizujemy niewidoczne pole gry
- usuwamy stary zrzut ekranu
Metoda zadziałała bardzo dobrze, animacja stała się płynna nawet na urządzeniach z dolnej półki.
Kolorowe grafiki do kart pochodziły z serwisu Unsplash, który dziś oferuje sześć milionów darmowych fotek do niemal dowolnego wykorzystania. Wówczas miał ich około 15 tysięcy. Ekran tytułowy, ikonkę i inne niezbędne grafiki przygotowali Mateusz Buczek i Michał Strączek.
Tryb multiplayer
Stworzenie funkcji multiplayer od zera to spore przedsięwzięcie, które wiąże się z koniecznością utrzymania serwerów i ciągłego monitorowania stanu usługi. Na taką inwestycję nie mieliśmy budżetu, więc zdecydowaliśmy się na użycie Google Play Game Services. Biblioteka ta oferowała matchmaking (inicjowanie i dołączanie do rozgrywki) oraz synchronizowanie stanu gry – w naszym przypadku dystrybucję informacji o wykonanym ruchu aktywnego gracza i „przekazanie pałeczki” do kolejnej osoby.
Google Play Game Services zmuszało użytkowników do zalogowania kontem Google+, bo między 2011 a 2015 wszystkie produkty tej firmy musiały korzystać z Google+. Pod koniec 2014 było już jednak boleśnie oczywiste, że ta sieć społecznościowa nie żre ani trochę, i że wpychanie funkcji socialmediowych do wszystkich usług donikąd nie prowadzi. Była to druga duża porażka po Google Wave, ponadto w 2013 firma Google zamknęła Readera. Po raz pierwszy publiczność ujrzała, że firma zarabiająca pierdyliardy dolarów może zamknąć lubianą usługę, by zaoszczędzić półtorej etatu – tyle wymagało utrzymanie Readera w ruchu.
Od samego początku byliśmy więc całkowicie świadomi, że biblioteka Google Play Game Services może podzielić taki los. A raczej – że prędzej czy później się to wydarzy, bo produkt był niszowy a jego popularność była bliska zeru. Ponieważ jednak na rynku nie było alternatyw a chcieliśmy mieć funkcję multiplayer, skorzystaliśmy z tego rozwiązania.
Poprawne wdrożenie rozwiązania wymagało pewnej gimnastyki, musieliśmy nagiąć architekturę biblioteki do potrzeb Prestige. Była to dobra, nikomu niepotrzebna robota. Rozgrywki wieloosobowe stanowiły mniej niż 1% wszystkich rozegranych partii.
Okres półtrwania usług zewnętrznych
Podczas produkcji gry Prestige postanowiliśmy przetestować jak najwięcej usług, które moglibyśmy wykorzystać potem w projektach komercyjnych. Znalazły się wśród nich:
- parse.com – serwis służący m.in. do gromadzenia statystyk użycia aplikacji, korzystaliśmy z darmowego wariantu oferującego obsługę do 30 żądań na sekundę
- Localytics – narzędzie do analityki, wizualizacji lejków, generowania zestawień, śledzenia przejść między ekranami, analizy kohortowej; darmowy wariant oferował obsługę do 10 tysięcy użytkowników miesięcznie
- Amazon Mobile Analytics – kolejne narzędzie do zbierania i analizy danych, darmowy do 100 milionów zarejestrowanych zdarzeń miesięcznie
- Apptimize – narzędzie do organizacji i analizy istotności statystycznej A/B testów, darmowe do 25 tysięcy użytkowników miesięcznie
- Google Analytics – analiza informacji o zachowaniach użytkowników
- Google Play Game Services – obsługa gier wieloosobowych przez internet
- Pusher – narzędzie do agregacji komunikatów i przesyłania ich między różnymi systemami
Możliwe, że zintegrowaliśmy jeszcze inne usługi, których nie pamiętam. Na pewno był jeszcze Crashlytics, już wówczas znany i lubiany.
A potem zaczęła się sekwencja zdarzeń, która stanowiła jedną z ważniejszych lekcji w mojej karierze twórcy oprogramowania. Lekcja ta niosła przesłanie: jeśli uzależniasz swój produkt od usług firm trzecich, zaplanuj od razu działania zaradcze na wypadek ich bankructwa lub drastycznej podwyżki cen. A było to tak:
- Localytics, usługa „na zawsze darmowa poniżej 10 tysięcy użytkowników miesięcznie”, po roku utracił darmowy wariant, a my otrzymaliśmy ofertę subskrypcji opiewającą na 1000 USD miesięcznie. Localytics żyje chyba po dziś dzień, choć publikacje na firmowym blogu urywają się w roku 2021.
- Marka Apptimize została przejęta w 2019 roku przez firmę Airship a oferta zintegrowana z jej produktami, darmowa wersja już nie istnieje,
- Usługa Google Analytics Services SDK dla aplikacji mobilnych została zamknięta w październiku 2019,
- Hostowana usługa parse.com, kupiona w 2013 przez Facebooka, została zamknięta w styczniu 2017. Jednocześnie otworzono źródła Parse Server, więc zainteresowani użytkownicy mogli przemigrować do wersji on-premise,
- Google Play Game Services – usługa została zamknięta w marcu 2020,
- Amazon Mobile Analytics przestał być samodzielną usługą; włączono go do pakietu Amazon Pinpoint, który sam zakończy życie w październiku 2026,
- Crashlytics został w 2017 odkupiony od Twittera przez Google i w ciągu kilku kolejnych lat stał się częścią usługi Firebase
- Pusher jako jedyny żyje po dziś dzień i nadal oferuje darmowy wariant usługi. Co więcej – API jest najwyraźniej kompatybilne 10 lat wstecz, więc integracja z lampką LED (czytaj niżej) powinna działać jak dawniej – gdybym tylko wiedział, gdzie lampka się podziewa
Powyższa lista powinna stanowić memento dla wszystkich, którzy planują produkcję aplikacji w oparciu o stack technologiczny i integracje firm trzecich. Mniej znane marki mogą zniknąć z dnia na dzień. Dostawcy dużych usług chmurowych oferują większą stabilność – AWS EC2 albo S3 pozostaną z nami długo – ale nawet tam usługi są zamykane, tyle tylko, że jest to ogłaszane z odpowiednim wyprzedzeniem.
Lampka z powiadomieniami
Gdy wydajesz grę, to chcesz, by ludzie w nią grali. Producenci planszówek nie mają prawie żadnej możliwości sprawdzenia, jak liczba sprzedanych pudełek ma się do rozegranych partii. Chyba, że zorganizują turniej swojej gry.

W przypadku gry komputerowej mobilnej analityka może być prowadzona w czasie rzeczywistym! Postanowiłem zbudować narzędzie informujące nas na żywo o tym, że ktoś zaczął lub skończył rozgrywkę. Na moim firmowym komputerze działał napisany w kwadrans program korzystający z bibliotek Pusher (do odbioru powiadomień o zdarzeniach) i Blink (do sterowania LED-am) – wszystkiego kilkadziesiąt linii kodu. Kolory informowały o typie akcji – niebieski to nowa instalacja, zielony to start partii, czerwony to koniec partii (podwójne mrugnięcie oznacza grę multiplayer). Wyglądało to tak:
Przez pierwsze dni każde mrugnięcie było świętem, potem gra zaczęła zyskiwać popularność i dioda mrugała najpierw kilka razy na godzinę, potem kilka razy na kwadrans, potem kilka razy na minutę. Zgaduję, że developerzy gier z taką samą ekscytacją patrzą na live statsy Steama, ale nasza lampka LED była fajniejsza.
Statystyki
Do wszystkich narzędzi analitycznych wysyłaliśmy te same dane – informacje o rozpoczęciu i zakończeniu rozgrywki, składzie partii, wykonanych ruchach i tak dalej. Po kilku miesiącach mogliśmy sporządzić następujące statystyki:
Rozkład liczby rund w pojedynczej rozgrywce w zależności od liczby graczy
Rozkład ruchów graczy w zależności od numeru rundy – rezerwacja lub kupno zarezerwowanej karty / wzięcie monet / kupno karty ze stołu
Gra szybko zdobyła popularność – między innymi dzięki temu, że wrzuciłem informację o niej na BoardGameGeek, znany portal fanów gier planszowych. Już dwa miesiące po premierze liczba instalacji była czterocyfrowa zaś gracze rozgrywali dziennie przeszło tysiąc partii.
Wydawca Splendora żąda usunięcia Prestige ze sklepu Play
W czerwcu 2015 dowiedzieliśmy się, że wydawca Splendora szykuje oficjalną wersję gry na obie platformy mobilne. Mobilny Splendor zadebiutował jakiś miesiąc później i był, co tu dużo mówić, prześliczny.
O ile warstwa multimedialna zachwycała, o tyle gameplay już tak nie do końca. Niektóre rozwiązania interfejsu użytkownika były nieintuicyjne, ale największym problemem było bardzo wolne tempo gry. Animacji nie dało się przyspieszyć, boty długo zastanawiały się nad ruchem – przy grze z trzema symulowanymi przeciwnikami okres oczekiwania na ruch był stanowczo zbyt długi.
Jedna partia w Prestige może trwać 3-4 minuty, mobilny Splendor wymagał co najmniej 10 minut na grę. Nie była to tylko moja opinia, dostałem kilka maili w których gracze chwalili tempo rozgrywki i ergonomię interfejsu naszej produkcji.
Przez niecałe dwa lata oba tytuły koegzystowały sobie w sklepie Google Play – aż do dnia, kiedy otrzymaliśmy maila od francuskiej firmy Asmodee z żądaniem usunięcia naszej gry. No i tu niestety rachunek potencjalnych zysków i strat nie był dla Prestige przychylny. Owszem, prawo było po naszej stronie – nie naruszaliśmy znaków towarowych, nie korzystaliśmy z oryginalnych grafik, nie kopiowaliśmy treści ani układu instrukcji.
Tyle tylko, że gdyby sprawa faktycznie trafiła do francuskiego sądu, to spółka PGS Software poniosłaby koszty wynajęcia zagranicznych prawników. Ryzyko wizerunkowe też było niebagatelne – software house sprzedający usługi na zachodnich rynkach nie chce ryzykować oskarżenia o łamanie praw autorskich, niezależnie od werdyktu sądu.
Osobną kategorią ryzyka, którego nie chcieliśmy podejmować, były możliwe perturbacje z firmowym kontem Google Play. Doniesienia o blokadach kont wydawców oraz kaskadowym blokowaniu kont developerów były wówczas na porządku dziennym, przy całkowitym braku możliwość odwołania od automatycznie podejmowanych akcji (nawet, gdy nałożone blokady były całkowicie nieuzasadnione).
Ponieważ w roku 2017 gra Prestige nie była już rozwijana od przeszło półtora roku, podjęliśmy decyzję o jej usunięciu ze sklepu Play.
Dziś w komputerowego Splendora da się pograć jedynie na PC. Wersja mobilna zniknęła ze sklepów Google Play i AppStore w roku 2021. Uzasadnienie tej decyzji brzmiało następująco: „Niestety, napotkaliśmy kilka problemów, które zmusiły nas do zaprzestania sprzedaży i wsparcia mobilnych wersji Splendor. Głównym powodem było to, że kod był przestarzały, a ilość zasobów potrzebnych do dostosowania go do nowych wymagań platform mobilnych była zbyt duża, abyśmy mogli sobie z tym poradzić.”
Życie po życiu
Tak więc na początku roku 2017 nasza gra zniknęła ze sklepu Play. Uznałem, że jej czas się skończył i mentalnie się z nią pożegnałem.
Minęło 6 lat.
W połowie 2023 roku grzebałem w konsoli AWS i coś przykuło moją uwagę – zużycie (znikome) darmowego wariantu usługi Amazon Pinpoint, której w ogóle nie kojarzyłem. Okazało się, że jest to spadkobierca Amazon Mobile Analytics, w którym nadal można odnaleźć… statystyki Prestige z ostatniego kwartału.
Po przeszło ośmiu latach od premiery (i sześciu latach od usunięcia gry) piętnastu graczy wciąż rozgrywało około 80 partii dziennie! Dlaczego??? Czym był dla nich Prestige?! Kim byli? Co widzieli? Tego się nie dowiem, ale nigdy w życiu nie spodziewałbym się takiego przywiązania do naszego tytułu.
AWS przechowywał jedynie dane z ostatniego kwartału. Pisząc niniejszy tekst odkryłem, że Pusher po dziś dzień trzyma dane sięgające początków projektu! Oto średniotygodniowe statystyki dziennej liczby partii z ostatniej dekady.
Tutaj ostatnie pięć lat – w 2025 nadal kilka osób rozgrywa dziennie 20-40 partyjek w Prestige. Mało co tak mnie w życiu zaskoczyło.
Zagraj w Prestige!
Chcesz wypróbować Prestige na swoim urządzeniu? Proszę bardzo! Pchnijcie te statystyki znowu w górę! Wymagany jest Android w wersji 4.1 (SDK 16), co oznacza, że gra pójdzie nawet na urządzeniach o mocy obliczeniowej kartofla. Oznacza to też jednak, że produkcja poprzedza Androida 6, który jako pierwszy potrafił prosić o uprawnienia w trakcie działania programu.
Gdy spróbujesz zainstalować Prestige na współczesnym telefonie, instalator spyta od razu, czy przyznajesz mu dostęp do kontaktów, powiadomień i plików multimedialnych. Nie musisz tego robić, odmów! Te uprawnienia były potrzebne jedynie do gry wieloosobowej, niedostępnej od roku 2020. Lokalna gra dla jednego gracza zadziała bez tych uprawnień.
Plik APK jest dostępny do pobrania tutaj: Prestige_0_96.apk. Ręczę za to, że jest to dokładnie ta sama wersja, która trafiła w sierpniu 2015 do sklepu Play. Rozumiem jednak, jeśli nie chcesz ryzykować instalacji apki spoza zaufanych źródeł.
Oto nagranie wideo prezentujące przegraną partię z dwoma botami.
Co ciekawe, nawet proste boty mogą radzić sobie w rozgrywce zaskakująco dobrze. Zaimplementowaliśmy dwa boty:
- RandomBot (niski poziom trudności) próbuje kupić najdroższą kartę na jaką go stać. Jeśli na nic go nie stać, dobiera losowe żetony lub – mając komplet żetonów – rezerwuje losową kartę.
- BuyerBot (zwykły poziom trudności) gra podobnie, ale kolory pobieranych żetonów dobiera pod kątem karty do której kupna brakuje mu najmniej.
Bardziej zaawansowana sztuczna inteligencja mogłaby uwzględniać dostępność kart bonusowych i podkupywać karty potrzebne przeciwnikom. W dzisiejszych czasach wypadałoby zresztą wytrenować sieć neuronową, ale dziesięć lat temu nie było to jeszcze tak modne (co innego sześć lat temu).
Podsumowanie
Gdyby historia Prestige skończyła się wraz z usunięciem gry ze sklepu Play, nie czytalibyście tego tekstu. Ot, projekcik jak setka innych, wprawka programistyczna, trening pracy zespołowej.
A jednak dla kilkunastu osób nasza gra była czymś więcej. Nie wiem, dlaczego. Nie wiem, co szczególnego odnaleźli w tym tytule. Mam nadzieję, że przez minioną dekadę przejrzeli na wylot mechanikę botów i odnajdują radość w ogrywaniu automatów kierowanych kilkoma prostymi regułami. Może grając wspominają swoją dawną ekipę od planszówek? A może szlifują nowe strategie na nadchodzący weekend spędzany z przyjaciółmi?
Nie wiem. To bez znaczenia. Zawsze gdzieś na świecie jest Sylwester i zawsze ktoś będzie grau w gre.
O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.

2 odpowiedzi na “Historia gry mobilnej Prestige”
Super lektura.
Świetny tekst 😍