Spis treści
1. Wstęp
Top down to mój pierwszy projekt wykonany w całości i pierwszy przygotowany na game jam. Początkowo miał być wykonany w zespole który znalazłem i do którego dołączyłem jednakże po poznaniu oczekwiań pozostałych członków względem projektu zdecydowałem się na pracę samemu.
Po poznaniu motywu „As above so below” zacząłem myśleć nad designem gry i co powinna zawierać. Kierowałem się prostotą oraz łatwością wykonania. Z racji, że byłem sam, ograniczał mnie 7-dniowy deadline i nie miałem jeszcze odpowiedniej wiedzy, nie chciałem przesadzać z poziomem zaawansowania projektu, chciałem się więc skupić na jednej, maksymalnie dwóch mechanikach.
2. Design


Z myślą o prostocie od razu do głowy przyszły mi gry typu arcade/retro w których duży nacisk położony był na kilku małych mechanikach, repetywności oraz rywalizacji z innymi graczami przez zdobywanie wyników.
Co do samego motywu, w głowie miałem takie rzeczy jak popularny w tym czasie serial „Stranger things”, grę „Gravity Rush”, oraz mikro/makro kosmos. Procesy myślowe doprowadziły mnie do zmiany wektora grawitacji jako głównej mechaniki oraz pokonywania trasy w jak najlepszym czasie która wymusza na graczu użycie ww. mechaniki.
W związku z pokonywaniem trasy na czas i stylem retro zdecydowałem się jeszcze na Power up’y które miały nagradzać graczy za ich wykorzystanie.
Minimalizując nakład pracy oraz potrzebnych materiałów wykorzystałem tryb pierwszoosobowy w którym gracz nie posiada modelu postaci, dzięki temu zabiegowi nie potrzebowałem dodatkowych modelów, ani animacji.
3. Rozgrywka
Wykorzystałem Darmowe pluginy z marketu Unreal Engine: Directional & Planet Gravity do stworzenia mechaniki zmiany wektora grawitacji, Ultra Dynamic Sky oraz Blocking Starter Pack do tworzenia poziomów w grze.
3.1 Menu
Po wejściu do gry po raz pierwszy, pojawia się okno w którym należy wpisać swój nick. Nick jest wymagany do zapisu wyniku w tablicy rankingowej i jest zapisywany w pliku lokalnym, po kolejnym włączeniu gry, sprawdzane jest czy istnieje plik zapisu, jeśli tak to pobierany jest nick, jeśli nie to ponownie wyskakuje okienko w którym trzeba go wpisać. Istnieje podstawowa filtracja najbardziej wulgarnych słów przy wyborze nicku, Słowa te zostały przeze mnie wpisane w tablice typu string, i są sprawdzane w polu tekstowym nicku, jeśli słowo z tablicy zostanie wykryte w ciągu tekstowym to pojawia się komunikat i zablokowany jest przycisk confirm. Jest to naprawdę podstawowe, chciałem wykorzystać zewnętrzny plik *.json zawierający większość zakazanych słów, ale nie miałem wystarczajacej wiedzy i czasu żeby to zintegrować.


Z tego poziomu można przejść do wyboru poziomów (Play), zobaczyć krótki poradnik (How to play), sprawdzić kto utworzył grę 🙂 (Credits), wyjść z gry do pulpitu (Quit to desktop), zmienić ponownie nick (Change nickname), sprawdzić grę na stronie itch.io (Check on Itch.io)
3.2 Postać
Postać gracza nie posiada modelu, gracz gra z perspektywy pierwszej osoby, posiada możliwość chodzenia w dowolonym kierunku, skakania, interakcji z obiektami za pomocą ustalonego przycisku, posiada możliwość zmiany wektora grawitacji na ustalonym przycisku
Interakcja z przedmiotami, po naciśnięciu ustalonego przycisku wykonuje się efekt, w tym przypadku dźwignia wyłącza laser i pozwala przejść do dalszej lokacji w poziomie.
Interakcja z ulepszaczami, gdy gracz wejdzie w kolizje z ulepszaczem, efekt automatycznie się nakłada.
3.2.1 HUD

Gravity Change Cooldown Notify – To powiadomienie o tym, że mechanika zmiany czasu jest obecnie nie dostępna na X czasu, standardowo czas cooldown’u wynosi 5 sekund. Po upływie tego czasu powiadomienie znika, a mechanika jest znów dostępna.
Timer – To wynik aktualnego czasu zapisywany do rankingu przy pokonaniu poziomu.
Interact Notify – To powiadomienie o dostepności interakcji z danym przedmiotem.
Gravity Change Notify – To powiadomienie o zmianie wektora grawitacji. Zmieniać wektor grawitacji można dwa razy po czym następuje 5 sekundowy cooldown.
3.2.2 Mechanika zmiany wektora grawitacji
Główna mechanika gry która sprawia, że użyciu, postać zmienia wektor swojej grawaitacji na Z(-1). Można użyć jej dwa razy po czym następuje 5 sekundowy cooldown. Chciałem w ten sposób wykorzystać motyw game jamu „As above so below”. Poziomy w grze zostały tak zaprojektowane, by gracz musiał używać tej mechanki pokonując przeszkody i, by mógł dostać się do mety. Starając się o jak najlepszy wynik/czas gracz musi rozważnie korzystać z mechaniki ze względu na cooldown.
3.3 Przeszkody
W dotychczasowej wersji gry występują 3 rodzaje przeszkód

Koła zębate, obracają się, gracz nie może dotknąć czerwonych elementów.

Ściany laserów, poruszają się po wyznaczonym torze tam i z powrotem, gracz nie może dotknąć czerwonych elementów.

Kolczaste kule, poruszają się w jedną stronę po wyznacoznym torze, gracz nie może ich dotknąć.
3.4 Power ups
Zmiana grawitacji – Gdy gracz zbierze taki power up, wektor grawitacji (inny niż Z) zmieni się na X(-1) do czasu zakończenia poziomu
Przyspieszenie – Gdy gracz zbierze taki power up, prędkość z którą się porusza zwiększy się o X do czasu zakończenia poziomu.
3.5 Ranking wyników
Ranking wyników to zewnętrzny plugin zintegrowany z projektem. Posiada stronę na której można zainicjować projekt oraz utworzyć klucz API do integracji. Link

Każdy poziom posiada osobny klucz Api oraz bazę danych wyników. Po dojściu gracza na metę w danym poziomie, wysyłany jest czas w jakim gracz ukończył poziom oraz jego nick. Cała reszta jak dodawanie wyniku do bazy, segregacja na podstawie najlepszego czasu oraz aktualizacja jest wykonywana po stronie pluginu. Czasy dla tego samego nicku nadpisują się jedynie jeśli dany wynik jest lepszy od poprzedniego

3.6 Muzyka
Każdy poziom posiada swoją własną ścieżkę dźwiękową która swoją tonacją i emocjami odzwierciedla poziom trudności oraz kolorystykę na danej mapie. Menu główne również posiada swoją ścieżkę dźwiękową.
3.7 Poziomy
W top down zdążyłem wykonać dwa poziomy.
4. Podsumowanie
Pomimo tego, że z Unreal engine korzystam od początku 2020, Top Down jako mój pierwszy ukończony projekt wyszedł dopiero w 2022. Był to niejako mój moment przełomu w którym zrozumiałem, że muszę przestać mierzyć siły na zamiary i realizować projekty które da się ukończyć z moją wiedzą, doświadczeniem, motywacją, a także czasem jakim dysponuje.
Nie obyło się bez problemów. Najpoważniejszym z nich jest bug związany z fizyką. Zawsze śmiałem się z Bethesdy i tego, że żeby fizyka w ich silniku poprawnie działała wymagany jest limit klatek na sekundę. W przypadku Top Down, jakimś cudem, gdy gracz posiada ponad 120 fps-ów, koła zębate które stanowią jedną z trzech dostępnych przeszkód w grze zaczynają się obracać w osi innej niż zostały zaprogramowane. Nie wiem dlaczego tak się dzieje, i jedynym fixem jaki w tamtym czasie udało mi się wymyślić był limit klatek do 120 na sekunde.
Kolejnym problemem był zbyt duży próg wejścia dla osób które nigdy wcześniej nie miały styczności z grą. Było to spowodowane tym, że level design nie był dość intuicyjny, np. dźwignia w poziomie pierwszym była słabo widoczna i nie było przy niej żadnych indykatorów czy podpowiedzi które mogły poprowadzić gracza na jej trop.
Najbardziej bolesnym błędem z mojej strony był fakt, że całą logikę projektu robiłem bez użycia source control oraz zapisywałem ją w folderze w którym znajdował się plugin. Podczas, gdy pojawiła się aktualizacja pluginu i, gdy go zaktualizowałem, wszystkie pliki projektu zostały usunięte 🙁 Wiem na przyszłość żeby nigdy więcej nie zapisywać żadnych plików w folderze innym niż Content.
Dzięki temu projektowi wiele się nauczyłem i dostałem potężną dawkę motywacji poprzez ukończenie projektu na czas oraz ukończenie go w ogóle.