Deep Platformer – technologiczne demo prostej platformówki

Odpowiedz Nowy wątek
2018-09-18 22:33
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Tuchów

12

Biorąc pod uwagę fakt, iż moje wpisy na blogu dotyczące projektu Deep Platformer cieszyły się jakimś zainteresowaniem i że gramolę się niemiłosiernie z wydaniem końcowej wersji, podjąłem decyzję, aby już teraz opublikować wczesną wersję platformersa.

title screen.png


Deep Platformer

Deep Platformer to otwartoźródłowy projekt prostej platformówki. Pierwotnie miał to być jedynie wizualny test paralaksy oraz efektu płynnej zmiany warstwy, jednak z ciekawości i chęci eksperymentów, szybko przerodził się w coś znacznie większego.

Celem gracza jest sterowanie bohaterem w kształcie sympatycznego klocka, pokonywanie wielowarstwowych labiryntów w poszukiwaniu świetlików i bramki wyjścia. Sterowanie ogranicza się raptem do kilku klawiszy, pozwalających na chodzenie i skakanie, a także na wykorzystywanie specjalnych bramek. Dzielą się one na cztery kategorie: do zmiany warstwy, do zmiany kierunku działania siły przyciągania, do zapisu pozycji gracza oraz do wyjścia z planszy. Tylko bramka do zapisu bieżącej pozycji bohatera nie potrzebuje interakcji – pozostałe wymagają wciśnięcia odpowiedniego klawisza.

Demo składa się z intra (długiego lub krótkiego), menu, ekranów tytułowych dla różnych światów, pierwszego świata jako tutoriala (bez ekranu tytułowego), czterech światów podstawowych i jednego dodatkowego, a także siedmiu outro i creditsów. Każdy ze światów docelowo zawierać będzie po kilka poziomów, a wiele z nich również będzie wyposażonych w tematyczne, animowane cutscenki (tym zajmuję się obecnie).


Klawiszologia

Podstawowa obsługa platformówki ogranicza się do kilkunastu klawiszy. Bohaterem na boki poruszamy strzałkami, skaczemy spacją, bramek używa się strzałkami w górę i w dół (w zależności od funkcjonalności danej bramki). Rozgrywkę pauzuje się i wznawia za pomocą Escape, klawiszem F3 się ją resetuje a F4 zamyka. Klawiszami + i - zwiększa się lub zmniejsza okno. Jeśli okno nie jest rozciągnięte na pełen ekran, możliwe jest jego przesunięcie za pomocą myszy, na dowolny ekran.

Klawisze Escape i Space służą też do przyspieszania (a raczej pomijania) animacji.

Pełna lista klawiszy (również tych służących do debugowania) znajduje się w pliku readme.txt. Docelowo ten plik będzie zawierał pełen opis gry, ale póki co posiada tylko listę klawiszy.


Technikalia

Projekt w całości został napisany we Free Pascalu (Lazarus 1.8.4) i dzieli się na sześć różnych aplikacji – pięciu generatorów oraz głównej gry. Gra służy do grania (a jakże), a generatory do tworzenia binarek z jej zawartością. Kod źródłowy wszystkich wymienionych aplikacji możliwy jest do skompilowania do postaci 32- i 64-bitowej. Niestety, z racji konstrukcji kodu obsługi okna, jedyną wspieraną platformą jest Windows. Szkoda… :/

Wiele informacji na temat niecodziennych założeń oraz historii tworzenia tego pojektu podałem w moim ciągu wpisów na blogu, więc zainteresowanych takimi informacjami odsyłam do tych materiałów. Na blogu znajdziecie też zrzuty ekranu oraz fragmenty kodu. Natomiast jeśli ktoś ma jakiekolwiek pytania na temat technicznych aspektów tego projektu to z chęcią odpowiem na każde z nich.

Demówka jest przenośna (portable) – nie wymaga żadnego instalowania i nie zapisuje żadnych informacji na dysku użytkownika. Można ją uruchamiać z dysku lokalnego, z pendrive'a, a nawet z CD (jeśli ktoś jeszcze pamięta co to).


Kod źródłowy

Źródła głównej aplikacji (docelowej gry) składają się z 33 modułów, o łącznej liczbie linii równej 11.133:

  • Platformer.Main.lpr – główny moduł projektu,
  • Platformer.Window.pp – zawiera klasę formularza i jego obsługi,
  • Platformer.CommandLine.pp – zawiera klasę do obsługi linii poleceń,
  • Platformer.UserInterface.pp – zawiera klasę do manipulacji rozmiarem i pozycją okna,
  • Platformer.Game.pp – zawiera główną klasę gry,
  • Platformer.Scenes.pp – zawiera zestaw klas dla wszystkich scen gry,
  • Platformer.Story.pp – zawiera zestaw klas do obsługi fabuły gry i zarządzania nazwami plików,
  • Platformer.Buffers.pp – zawiera obiekty tylnych buforów oraz klasę bufora cyklicznego z templatkami szumu,
  • Platformer.Renderers.pp – zawiera klasy służące do renderowania wszystkiego co widoczne na ekranie,
  • Platformer.Time.pp – zawiera klasę głównego zegara utrzymującego zadany klatkaż,
  • Platformer.Fonts.pp – zawiera klasy reprezentujące fonty,
  • Platformer.Input.pp – zawiera drzewko klas do obsługi klawiatury,
  • Platformer.Cheats.pp – zawiera klasę do manipulowania trybem cheatowania (debugowania),
  • Platformer.Animations.pp – zawiera klasy do opisu wszelkich animacji (cutscenek),
  • Platformer.TitleScreens.pp – zawiera bazową klasę dla ekranów tytułowych,
  • Platformer.Sprites.pp – zawiera klasy przechowujące sprajty bohatera i świetlików,
  • Platformer.Levels.pp – zawiera klasy reprezentujące wielowarstwowy poziom,
  • Platformer.Slots.pp – zawiera klasę przechowującą dane na temat pozycji gracza (save slot),
  • Platformer.Worlds.pp – zawiera klasę opisującą ekran tytułowy dla światów,
  • Platformer.Menu.pp – zawiera klasę obsługi głównego menu gry,
  • Platformer.Camera.pp – zawiera klasę przechowującą dane na temat kamery,
  • Platformer.Gates.pp – zawiera zestaw klas do opisu bramek zmiany warstwy, grawitacji, zapisu oraz wyjścia,
  • Platformer.Fireflies.pp – zawiera klasy reprezentujące pojedynczy świetlik oraz ich listę,
  • Platformer.Hero.pp – zawiera klasy przechowujące dane na temat pohatera,
  • Platformer.Pause.pp – zawiera klasę przechowującą dane na temat zapauzowań rozgrywki,
  • Platformer.Counters.pp – zawiera klasy z danymi na temat liczby zgonów oraz zebranych świetlików,
  • Platformer.Scores.pp – zawiera klasy przechowujące statystyki gracza dla danej sesji,
  • Platformer.Movements.pp – zawiera klasy służące do modyfikacji pozycji gracza oraz świetlików,
  • Platformer.Collectors.pp – zawiera klasy z wydzieloną logiką kolekcjonowania (póki co tylko świetlików),
  • Platformer.Utils.pp – zawiera zestaw uniwersalnych subrutyn do przetwarzania bitmap,
  • Platformer.Types.pp – zawiera kilka typów danych, wymaganych głównie do renderowania tekstu,
  • Platformer.Helpers.pp – zawiera klasy helperów dla typów prostych i klas z biblioteki standardowej,
  • Platformer.Constants.pp – zawiera mnóstwo stałych, służących do kalibrowania gry i wielu jej elementów.

Generatory to dość proste aplikacje konsolowe, o specyficznej budowie i sposobie użycia. Składają się raptem z kilku modułów, a kod każdego z nich napisany jest w takim samym stylu.

Kod źródłowy nie zawiera żadnych komentarzy (nie licząc informacji o twórcy i licencji w każdym module). Nigdy ich nie dodaję, wzamian staram się pisać kod w taki sposób, aby sam informował o swoim przeznaczeniu. W razie czego pytać o szczegóły.


Uniwersalne fragmenty kodu

Projekt nie zawiera zbyt wiele fragmentów kodu, które możnaby zastosować w innych projektach, np. w zwykłych aplikacjach okienkowych. Jedyne moduły, których zawartość może być faktycznie przydatna, to Platformer.Utils.pp oraz Platformer.Helpers.pp. Znajdziecie tam praktyczne przykłady użycia metody ScanLine i efektywnej obróbki bitmap, a także przykłady rozszerzania typów prostych o dodatkowe metody.


Dalsze plany

Prace będą kontynuowane jedynie do ukończenia pierwszej wersji z pełną, docelową zawartością. Jak już wszystkie binarki m.in. z poziomami i animacjami zostaną ukończone, projekt wyląduje na GitHub (który posłuży tylko jako taki backup, bo w przyszłości nie zamierzam go rozwijać). Przetestowałem to co chciałem przetestować (a nawet o wiele więcej), a to co trafi do repozytorium, najpewniej już nigdy nie będzie przeze mnie aktualizowane.

Źródła udostępniam na licencji GPL, więc każdy chętny będzie mógł forknąć repozytorium i stworzyć coś swojego. Ewentualni moderzy będą mieli prostą drogę do przeróbek, za sprawą otwartego kodu źródłowego i dostępu do narzędzi, z których i ja korzystam. Oczywiście informacje na temat używania generatorów i tworzenia plików konfiguracyjnych znajdą się docelowo w plikach readme.txt (póki co są puste, a uzupełnię je na samym końcu).


Załączniki

deep platformer – release.zip

Zawiera skompilowaną wersję platformówki, bez źródeł. Niektóre pliki są jeszcze nieuzupełnione. Do dyspozycji są dwa pliki wykonywalne i oba zawierają to samo, tyle że ten z postfiksem debug ma włączony stały tryb debugowania, dzięki czemu można się pobawić również dodatkowymi opcjami.

Pliki wykonywalne nie są podpisane cyfrowo, do tego są skompresowane za pomocą UPX, więc oprogramowanie antywirusowe oraz pewne usługi Windows mogą ostrzegać przed potencjalnie szkodliwą zawartością. Pliki te są jak najbardziej czyste, nie zawierają żadnych wirusów.

deep platformer – mirror.zip

Jest to kopia całego katalogu z projektem, zawiera pełne źródła wszystkich aplikacji, skompilowane pliki wykonywalne oraz pliki konfiguracyjne (i nie tylko) dla generatorów, do tworzenia testowej zawartości. Jednym słowem wszystko co potrzebne do zbudowania gry i tworzenia zawartości.

Zawiera też skróty do generatorów (*.lnk) z ustalonymi parametrami, tak aby móc tworzyć binarki dwuklikiem, bez koniczności otwierania konsoli i ręcznego podawania parametrów ze ścieżkami (a te są dość długie). Skróty powłoki zawierają ścieżki relatywne, więc śmiało można z nich korzystać.


Have fun. ;)


edytowany 21x, ostatnio: furious programming, 2019-01-28 21:48
Wiem wiem, dlatego o tym wspomniałem. W razie braku zaufania, zawsze można odpalić w antywirusowym sandboksie. ;) - furious programming 2018-09-18 22:56

Pozostało 580 znaków

2019-06-12 12:51
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 3 godziny temu

Lokalizacja: Poznań

0

Będzie mniej więcej 20-30, dokładnie nie wiem – zależy od pomysłów i czasu na ich robienie

A czy nie myślałeś, żeby zaangażować wolontariuszy do tworzenia leveli?


Naczelny forumowy hejter Apple

That game of life is hard to play, I'm gonna lose it anyway
The losing card I'll someday lay, So this is all I have to say

Pozostało 580 znaków

2019-06-12 12:53
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Tuchów

0

Raczej nie – w końcu nadal nikt nie wie (bo nikt nie widział) jak mają wyglądać docelowe poziomy. :]

Do tej pory wrzucane wersje gry posiadały poziomy z platformami, których kształt jest zgodny z hitboksami, czyli zbudowane były z kwadratów. No ale finalnie takie nie będą – kształty będą nieregularne, z różnymi detalami.


edytowany 1x, ostatnio: furious programming, 2019-06-12 12:54
Jakbyś tyle energii co w tą grę wsadził w jakiś projekt komercyjny, to byś jeździł autkiem za pół bańki i mieszkał w pałacu :P - cerrato 2019-06-12 13:02
Dorzucę button paypal do readme w repo – może na Ładę się uzbiera. ;) - furious programming 2019-06-12 13:06
kumpel kupił kilka dni temu Ladę Nivę. Trochę się pobawiłem - fajna sprawa :D Zwłaszcza dla kogoś, kto całe życie jeździ osobówkami, które potrafią czasem zahaczyć o wyższy krawężnik, a tutaj sobie można wjechać na półmetrową górkę. - cerrato 2019-06-12 13:08

Pozostało 580 znaków

2019-06-12 14:05

Rejestracja: 2 lata temu

Ostatnio: 5 godzin temu

0
furious programming napisał(a):

Raczej nie – w końcu nadal nikt nie wie (bo nikt nie widział) jak mają wyglądać docelowe poziomy. :]

W moim ulubionym indyku: "Po prostu Łoś" autorzy oryginalne zrobili dwa zestawy poziomów i dorzucili edytor dzięki któremu powstało ich jeszcze dwieście a gra żyła (co prawda w niszy) przez dobrych kilkanaście lat.


Pozostało 580 znaków

2019-06-12 14:11

Rejestracja: 17 lat temu

Ostatnio: 3 godziny temu

0

A w World of Goo jest skończona ilość poziomów. Ale od samego początku mają one wysoką jakość. Gra wciąż żyje, lata po premierze ;)

Jeśli edytor poziomów nie obsługuje skryptowania, to nikt nie zrobi lepszych leveli niż sam developer. Bo programista może oprócz wyglądu, może oprogramować nieprzewidziane wcześniej akcje.

edytowany 2x, ostatnio: Spine, 2019-06-12 14:13
Kłóciłabym się. Z Łosiem było jak z ZX Spectrum. Maniacy powymyślali takie myki, na które sami autorzy nie wpadli. - Freja Draco 2019-06-12 14:21
To musiał mieć rozbudowany edytor, który pozwalał na takie myki. - Spine 2019-06-12 14:24
Edytor jak edytor. Sama boulderowa fizyka Łosia przypomina trochę automat komórkowy i daje szerokie pole do popisu. A w sumie to nawet błędy w silniku fizycznym można wykorzystać tworząc obiekty o dziwnych właściwościach. No ale może nieobiektywna jestem jako wieloletnia maniaczka tej produkcji. - Freja Draco 2019-06-12 21:43

Pozostało 580 znaków

2019-06-12 14:24
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Tuchów

0

W moim platformerze będzie skończona liczba światów i poziomów. Aby moderzy mogli dodawać nowe lub przerabiać istniejące, będą mieli do dyspozycji odpowiednie narzędzia. Czyli będą mieli te same możliwości co ja.

Spine napisał(a):

Jeśli edytor poziomów nie obsługuje skryptowania, to nikt nie zrobi lepszych leveli niż sam developer.

Jako takiego edytora poziomów nie będzie, ani wbudowanego, ani w postaci zewnętrznej aplikacji – wszystko dlatego, że po prostu nie mam na tyle czasu. Być może w przyszłości taki dorobię, ale nie mam pojęcia kiedy i czy w ogóle to nastąpi.

Bo programista może oprócz wyglądu, może oprogramować nieprzewidziane wcześniej akcje.

Silnik tego platformera nie wykorzystuje skryptów, więc każdy może zrobić to samo co ja. Zresztą wcale nie jest powiedziane, że sam zrobię najlepsze poziomy jakie tylko się da. Być może ktoś będzie potrafił zrobić lepsze i zmodowana wersja będzie jeszcze ciekawsza niż moja – czego sobie życzę. :]

Ogólnie chodzi o to, że sam zrobię taką podsawę, która będzie na tyle dobra, aby cieszyła się zainteresowaniem i dało się w nią przyjemnie pograć. Natomiast zrobiłem ją w taki sposób, aby można było dokładać zawartość (używając dedykowanych generatów binarek) i aby rozszerzać logikę (korzystając z otwartego kodu i prostoty jego struktury).


edytowany 4x, ostatnio: furious programming, 2020-05-06 23:40
@furious programming No Panie, jakiś update? ;) Ja już się pogubiłem w tych sześciu kartach gdzie tu była ostatnia demówka :D - several 2020-05-06 21:49
Niestety aktualizacji nie było do tej pory, ze względu na poświęcenie całego wolnego czasu na pracę nad programem CTCT. Teraz co prawda program skończony i kampania trwa, ale jeszcze jedną apkę tetrisową muszę zrobić. Tym razem dla siebie – layout przykrywający emulator i wyposażony w dodatkowe liczniki, wykresy, statystyki i podgląd wciskanych klawiszy. Muszę nagrać jak robię max out, coby dowód mieć i liczyć się w globalnych statystykach. A skoro tak, to przyda się ładny filmik, bo sama gra paskudna. :D - furious programming 2020-05-06 23:38
I tak to widzisz jest – pojawiają się nowe okoliczności i bieżące projekty lecą do poczekalni. TreeStructInfo pasuje już zaktualizować (choć w CTCT używam tej libki i jestem bardzo zadowolony), Deep Platformer czeka na dokończenie, a model RC w ogóle na rozpoczęcie… Słomiany zapał powoli wychodzi… :/ - furious programming 2020-05-06 23:39
CTCT wygląda świetnie, mocno się zdziwiłem, że kampania szła w ślimaczym tempie, ale w sumie apka dedykowana bardzo wąskiej grupie, czyli ludzi którzy parają się organizacja turniejów tetrisowych. - several 2020-05-07 22:42
Kampania leży i kwiczy – już sam nie wiem co robić, aby zachęcić ludzi do pomocy. Apka niby dla wąskiej grupy przeznaczona, ale sądziłem, że znajdą się dobroduszni chętni do wsparcia. W końcu nawet minimalna dotacja w wysokości 1 euro nikomu budżetu nie zrujnuje (a już na pewno nie koderom), a powoli by się uzbierało i można by w eleganckim stylu organizować turnieje w Polsce (i konkurować z USA). Smutno trochę. - furious programming 2020-05-07 22:47

Pozostało 580 znaków

2020-06-27 15:02

Rejestracja: 14 lat temu

Ostatnio: 14 godzin temu

0

Super sprawa:-)
http://www.fmxexpress.com/fre[...]iremonkey-on-android-and-ios/


Iucundi acti labores
furious programming grałem w twoja gierkę ciekawa, lecz nie ma z kim walczyć tam... - Bruno(M) 2020-06-27 15:14

Pozostało 580 znaków

2020-06-27 15:16
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Tuchów

0

@Bruno(M): ale co „super sprawa”? Platformer, czy to co linkujesz?


Pozostało 580 znaków

2020-06-27 15:24

Rejestracja: 14 lat temu

Ostatnio: 14 godzin temu

0
furious programming napisał(a):

@Bruno(M): ale co „super sprawa”? Platformer, czy to co linkujesz?

Platformer. wiesz ja nigdy nie siedziałem w grach. przyznam tobie, że od zawsze algorytmy w grach mnie przerastały. Ja wolę statystykę.


Iucundi acti labores

Pozostało 580 znaków

2020-06-27 15:39
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Tuchów

0
Bruno(M) napisał(a):

przyznam tobie, że od zawsze algorytmy w grach mnie przerastały.

A próbowałeś jakąś napisać? Sam spróbowałem – i tak zwykły PoC rozrósł się do sporego projektu. ;)

Ten platformer jest inny niż typowe gry, bo zamiast odmierzać czas (jako delta), zlicza klatki i wykonuje dane czynności przez zadaną ich klatek. Rozwiązanie bardzo proste – łatwe do zrozumienia i zaprogramowania.


edytowany 1x, ostatnio: furious programming, 2020-06-27 15:39
Pokaż pozostałe 20 komentarzy
No to elegancko, o tym właśnie cały czas pisałem – jedno drugiego nie wyklucza. W takim razie masz swój zegar, który działa bardzo podobnie lub tak samo jak te w profesjonalnych silnikach. ;) - furious programming 2020-06-28 17:48
Sam nie brałem tego pod uwagę, bo chciałem, aby mój platformer działał zgodnie z konsolą NES. Ta miała przypisaną stałą liczbę cykli CPU na daną klatkę, najpierw wykonywana była logika, potem ”busy waiting” (bo przesypiania procesor nie wspierał) aż do przerwania oznaczającego czas na aktualizację pamięci wideo. Jeśli logika wykonywana była zbyt długo i przerwanie zostało przegapione, ”busi waiting” czekał do kolejnego przerwania, pomijając poprzednią klatkę (lub kilka), tworząc laga, a tym samym spowalniając animacje. - furious programming 2020-06-28 17:51
To samo robi mój platformer, tyle że używa Sleep, aby nie żreć mocy CPU bez opamiętania. NES tego nie potrafił, więc nie było wyboru, ale współczesny sprzęt potrafi, więc wstydem byłoby z tej opcji nie skorzystać. A delty nie używam, bo delta nie jest retro – w odróżnieniu od liczenia klatek i działania tylko na intach. :P - furious programming 2020-06-28 17:52
Czyli taka trochę sztuka dla sztuki :). Ale szanuję, bo to co ja klecę, też nie ma najmniejszego sensu :D. Mógłbym skorzystać z OpenGL albo DirectX ale to byłoby pójście na łatwiznę ;d. PS. Da się jakiś skompilować twój platformer bez Lazarusa? Bo nie chce mi się go instalować tylko po to, a mój RAD studio raczej z plikami pp się gryzie ;s. - Crow 2020-06-28 18:02
No dokładnie – sztuka dla sztuki. Ale to nie zmienia faktu, że z takiego prymitywnego mechanizmu czy renderowania pół-software'owego da się stworzyć cudeńka. Możesz skompilować z poziomu konsoli, mając gołego FPC. Ale sam nigdy w ten sposób nie pracuję, bo ani to wygodne, ani szybsze. - furious programming 2020-06-28 18:21

Pozostało 580 znaków

2020-06-28 18:48

Rejestracja: 2 lata temu

Ostatnio: 6 godzin temu

0

Może wrzuć to na jakieś publiczne repo?

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0