Jason. Cała informatyka w jednym miejscu!

Moi mili, koniec trasy w kwestii przygotowywania szablonu do gier! Miesiące żarliwych testów, poprawek i skryptów nareszcie doprowadziły mnie do sukcesu w tym zakresie! Jeszcze nigdy programowanie jednej rzeczy nie trwało u mnie aż tak długo :). Jason jednak się łatwo nie poddaje i przynosi Wam w końcu kompletny oraz w pełni działający fundament na jakim będą "stać" przyszłe gry. To nie żarty, ruszam z "Surrounded" od 1 kwietnia!!! Gorąco zachęcam każdego czytelnika do zajrzenia do środka.

PROGRAMOWANIE "SURROUNDED" RUSZA 1 KWIETNIA!

Dobrze widzicie, nie przecierajcie oczu :). Starałem się ze wszystkich sił, żeby ten tytuł ujrzał światło dzienne już znacznie wcześniej, przypominam o skończonej produkcji w "TIC-80" już 2,5 roku temu. Jest jak jest i nie będę powtarzał historii kolejny raz.

STRESZCZENIE GRY

"Surrounded" to gra reprezentująca kategorię "top-down shooter" oraz grafikę retro z lat .80 znaną z konsoli "NES" ("pegazusową"). Gracz ma do dyspozycji wieżyczkę umieszczoną na środku planszy i jego zadaniem jest odpieranie nadchodzących fal przeciwników dookoła siebie.

Wraz z czynieniem postępów, stajemy czoła coraz groźniejszym przeciwnikom. Mogą strzelać, eksplodować na styl Kamikaze czy też zmierzać w naszą stronę zdecydowanie szybciej. Ponieważ uwielbiam system ulepszania postaci kierowanej przez gracza, zaimplementowałem gromadzenie doświadczenia. Gracz otrzymuje punkty doświadczenia za zniszczenie przeciwnika i jest zdolny awansować na wyższe poziomy podnoszące statystyki bojowe.

Jest również możliwość zbierania bonusów wzmacniających wieżyczkę takie jak przywrócenie części zdrowia (a raczej wytrzymałości), o wiele szybsze strzelanie czy też strzelanie "potrójne" robiące duże zamieszanie.

Dwa tryby gry, cztery poziomy trudności, czterech bossów, mnóstwo odznaczeń. To będzie wizytówka edycji Premium gry "Surrounded". Nie wspomnę o dwóch wersjach językowych, które stały się znakiem rozpoznawczym gier utworzonych przez Jasona.

Logo gry "Surrounded"

Geneza projektu gry "Surrounded" sięga drugiej połowy 2018 roku.

SKĄD TAKA DATA?

Powody są dwa. Po pierwsze, zdecydowanie łatwiej będzie mi liczyć dni prac nad projektem, bo po publikacji gry zawsze odnotowuję wszystkie daty. Kiedy zacząłem prototyp, kiedy skończyłem prototyp, kiedy zacząłem "pełną wersję" gry oraz kiedy ją skończyłem. Wszystko musi być udokumentowane, żeby na przyszłość wiedzieć czy nie robiłem zbyt trudnego projektu. Drugim powodem są zajęcia ze studiów, które kończą się przed Wielkanocą właśnie 31 marca, 2021 roku. Uwierzcie mi, że po harówce jaki mi przyniósł szablon do następnych gier, stawianie się na zajęcia i robienie na nich czegokolwiek umysłowego było ostatnią rzeczą o której myślałem. Chciałem tylko iść w cholerę do łóżka i wypocząć.

KULISY POWSTAWANIA SZABLONU

Co prawda, kodu źródłowego nie zdradzę z szacunku do mojej pracy i mojego kręgosłupa, aczkolwiek mogę ujawnić parę szczegółów co do produkcji na jakiej będzie się opierać "Surrounded".

TRZY PRZEPROWADZKI

Dacie wiarę, że szablon produkowałem w trzech różnych narzędziach? Początek 2020 roku to był "HaxeFlixel", w marcu pracowałem w "raylib" (stąd garść artykułów na temat języka C), a pod koniec tego samego roku spojrzałem na "Love2D". Już wcześniej miałem ten framework na oku. Tak naprawdę tylko odrzucał mnie brak oficjalnego wsparcia dla platformy HTML5. Kiedy jednak zobaczyłem, że pojawił się odnośnik do konwertera wspierającego najnowszą wersję, przyjrzałem się tej wtyczce na GitHubie i obejrzałem sobie zamieszczone tam demonstracyjne projekty w postaci dowodów działania. Spodobały mi się, działało niezaprzeczalnie nawet zapisywanie i odczytywanie danych. Postanowiłem "dać mu szansę" i zabrałem się za pisanie w Lua. Jak sobie zanotowałem wcześniej, zacząłem pisać 12 grudnia, 2020 roku.

SYSTEM "WTYCZKOWY"

Nazwę wymyśliłem samodzielnie i już wyjaśniam jej sens. Pierwsza "wersja" szablonu (ukończona 26 lutego bieżącego roku) posiadała w sobie "wszczepienia", które wymagały wielu edycji w "rdzeniu" (jak ja to nazwałem kodowo - "core"). W praktyce, gdybym chciał wyeksportować sobie darmową edycję gry (a jest w projekcie wszystko, co musi posiadać Premium), musiałbym wycinać mnóstwo fragmentów kodu w wielu plikach naraz i to jeszcze w tej części ogólnej, niezwiązanej z konkretną grą (czyli to samo przy "Surrounded" i przy każdej następnej grze, bo będą różnić się czymś więcej niż logiem). Każdy piszący na co dzień programista doskonale wie, że dostałoby się cholery gdyby się było zmuszonym robić takie modyfikacje za każdym razem, przez co jedynym wówczas koślawym rozwiązaniem było utworzenie trzech osobnych projektów z podziałem na różne platformy.

Problem jaki sobie postawiłem był na tyle poważny, że nie wytrzymałem i nie przyjąłem tego szablonu. Któregoś wieczoru wpadłem przypadkowo na rozwiązanie będące jedynym wybawieniem. Spojrzałem na te edycje jak na drzewko katalogów. Widząc, że jest taki podział na edycje działające jak dodatki do podstawowej wersji gry, zauważyłem że to muszą być osobne kontenery zawartości w postaci dodatkowego kodu, grafiki, dźwięków, muzyki, poziomów oraz innych elementów niewystępujących w poprzednich edycjach (trochę jak dziedziczenie przez klasy potomne, ale tylko w pewnym sensie). Zastosowanie takiej separacji spowodowało uniezależnienie kodu podstawowego (rysowanie i reagowanie na przyciski na przykład) od kodu konkretnej gry (np. skakanie po platformach, bo nie każda gra będzie platformówką!). W ten sposób, systemy niemające nic ze sobą wspólnego nie wtrącały się między sobą i nie doprowadzały do konieczności modyfikowania "rdzenia", a jeśli już, to co najwyżej do nadpisywania funkcji (np. edytując nazwę sceny do której się przechodzi po kliknięciu danego przycisku), ale "core" jest nadal nietknięty.

Schemat systemu szablonu do gier

"Wtyczkowy" system szablonu do gier spowodował znaczne zwiększenie kontroli nad strukturą katalogów w kwestii osadzania zawartości jakie ma w sobie każda z edycji, a także "włączania" / "wyłączania" określonego sposobu wykrywania sterowania bez uszkadzania przebiegu programu.

Dlatego określiłem to systemem "wtyczkowym", gdyż zarówno w przypadku edycji, jak i wyboru obsługiwanych urządzeń do sterowania (myszka, klawiatura oraz ekran dotykowy), działają teraz jak swoiste "wtyczki", które przypinam lub odpinam od "rdzenia", a ŻADEN manewr z tych dwóch nie powoduje powstawania zależności oraz nie doprowadza do powstawania błędów.

Trzydzieści jeden dni dodatkowej pracy nad tym ulepszeniem. Opłacało się? JAK NAJBARDZIEJ!


Na tym zakończę opowiadania. Jestem więcej niż pewny, że coś trzeba będzie jeszcze poprawić, aczkolwiek główny cel projektowy został osiągnięty. Eksportowanie projektu teraz jest proste, przyjemne i co najważniejsze, wymagające drobnej edycji tylko w dwóch miejscach, a nie w dwustu. Stuka 1 kwietnia w kalendarzu i lecę z "Surrounded" jak najszybciej! Nie mam pojęcia ile może mi to zająć czasu. Na pewno system "wtyczkowy" znacznie go skróci.

PODOBNE ARTYKUŁY