Deep Platformer – technologiczne demo prostej platformówki

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

Rejestracja: 8 lat temu

Ostatnio: 4 minuty 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-04-15 20:27
Moderator Kariera

Rejestracja: 2 lata temu

Ostatnio: 56 minut temu

Lokalizacja: Poznań

1

Lazarus 1.8.4. na Linux Mint 19.1 - kompilacja oraz uruchomienie poszło od razu, zero problemów.
Jedyne co mnie zastanawia, to efekt, który widziałem na ekranie. Piszesz o demo gry, ale tak naprawdę nie była to gra, a jedynie napisy końcowe. Pojawiają się gratulacje z powodu przejścia wszystkich poziomów oraz creditsy. Tak miało być?


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
edytowany 1x, ostatnio: cerrato, 2019-04-15 20:28

Pozostało 580 znaków

2019-04-15 20:29
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

1

A jak wydajność i jakie parametry sprzętu? Jak możesz to odpal grę z takimi parametrami:

> platformer cheatmode on

i napisz coś więcej. Głównie chodzi o licznik load podczas gry na dowolnym poziomie. ;)

cerrato napisał(a):

Jedyne co mnie zastanawia, to efekt, który widziałem na ekranie. Piszesz o demo gry, ale tak naprawdę nie była to gra, a jedynie napisy końcowe. Pojawiają się gratulacje z powodu przejścia wszystkich poziomów oraz creditsy. Tak miało być?

I tak i nie. :D

Zapomniałem usunąć parametry uruchomieniowe (okno Run Parameters) z ustawień projektu, w których zostały przełączniki dotyczące pomijania wszystkich scen prócz ostatniej, tak aby można było przetestować ekran staffu.

Zaktualizowałem załącznik w poprzednim poście i dodałem źródła bez żadnych parametrów.


edytowany 2x, ostatnio: furious programming, 2019-04-16 15:27
Postaram się później, teraz nie mogę. A co do kompa - raczej tragedii nie ma, i5 4x3,2GHz, 8GB RAM - cerrato 2019-04-15 20:38
Spoko, nie spieszy się. ;) - furious programming 2019-04-15 20:38

Pozostało 580 znaków

2019-04-16 14:50
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

2
furious programming napisał(a):

Teoretycznie teraz można ten kod skompilować na innych systemach, takich jak Linuks, FreeBSD czy macOS […]

Tego macOS chwilowo odwołuję – najwyraźniej ten gսpi system nie ma clock_gettime, więc muszę skorzystać z nanosleep. Ale dla Uniksów też skorzystam z nanosleep – gra nie będzie zżerała całej mocy CPU. Pod Windows niestety nadal będzie, bo ten system nie posiada Sleepa o dużej rozdzielczości. :/


edytowany 2x, ostatnio: furious programming, 2019-04-16 14:58

Pozostało 580 znaków

2019-04-22 02:25
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

2

Ok, świeżutkie źródła gry w załączniku. ;)


Zmodyfikowałem kod zegara, dzięki czemu gra korzysta z systemowej funkcji nanosleep do oczekiwania na kolejną klatkę (oczywiście na Uniksach, bo na Windows nic się w tej materii nie zmieniło). Po drugie, dodałem jeszcze jedną klasę, która przygotowuje ścieżki plików tuż przed ich (ścieżek) użyciem. Dzięki temu wykorzystywane są tylko absolutne ścieżki, zawsze zawierające natywne dla systemu separatory katalogów. Ścieżki bezwzględne są wymagane tylko dla macOS, bo pozostałe systemy potrafią korzystać z relatywnych. No ale już niech wszędzie będzie tak samo.

Dzięki tym dwóm zmianom, źródła powinny się kompilować i działać prawidłowo na wielu platformach i systemach operacyjnych, m.in. na Windows (od XP wzwyż), Linuks, BSD, Solaris czy macOS.


Jeśli ktoś chce to może przetestować – skompilować i uruchomić.

Feedback by się przydał, jeśli chodzi o systemy Uniksowe (na Windows śmiga). Przed zmianą kodu zegara wszystko na nich działało prawidłowo, ale nie wiem jak z nowym zegarem, bo choć źródła ludzie pobierali, to nikt nie dał znać co i jak. No i na macOS demówka nie była w ogóle testowana, więc co do tego systemu nie mam pewności… :/


edytowany 7x, ostatnio: furious programming, 2019-04-22 02:29

Pozostało 580 znaków

2019-04-22 14:27
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

1

Mała aktualizacja – na macOS kompiluje się i działa, ale okno jest niewidoczne… :D


Pozostało 580 znaków

2019-05-01 23:36
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

2

Co do powyższego posta, to zrezygnowałem z portowania kodu na macOS – nie mam nerwów do tego systemu, a i widgetset jest w pewnych miejscach niekompletny, więc nie będę tracił czasu na szukanie innych rozwiązań i oczekiwanie na testy i feedback.


Jedną rzecz dodałem do kodu. Do tej pory bramki były niewidoczne, a po wejściu na nie wyświetlała się etytkieta z ich przeznaczeniem. Czyli normalnie nie było wiadomo gdzie one się znajdują – detale platform miały sugerować ich pozycję na planszy, a po wejściu na bramkę, etykieta miała informować o tym że stoi się w bramce i można jej użyć. Tyle że i tak trudno by było je znaleźć, więc trzeba było coś z tym zrobić.

Aby zawsze było wiadomo gdzie są bramki, zawsze wyświetlana jest animowana, skacząca strzałka. Jeśli bramka stoi na ”podłodze” to strzałka wyświetla się nad nią, jeśli jest na suficie to strzałka jest pod nią, a jeśli bramka jest w powietrzu to wyświetlane są dwie strzałki – jedna nad i jedna pod. Animacja jest prosta – byle się coś ruszało i przyciągało wzrok. Po wejściu w bramkę wyświetlana jest etykieta, tak jak wcześniej.

Deep Platformer — gate markers.png

Wyjątkiem są bramki zapisu pozycji – te są dostępne tylko jeśli orientacja bohatera jest zgodna z orientacją bramki. W przeciwnym razie bramki nie da się użyć, a strzałka nie jest wyświetlana w ogóle.

Oczywiście wszystkie bramki będą dodatkowo ozdobione detalami platform.


W załączniku dodaję krótkie nagranie przedstawiające nowy ficzer. :]


edytowany 4x, ostatnio: furious programming, 2019-05-01 23:41

Pozostało 580 znaków

2019-05-13 14:37
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

2

Aktualizacja. :]


Dodałem ostatnią brakującą część, czyli kod w klasie zegara, pozwalajacy oszczędzać moc procesora. Teraz na platformie Windows gra nie zżera już całej dostępnej mocy jednego rdzenia, dzięki poprawieniu obliczeń oraz oczywiście użyciu procedury Sleep. Ale aby móc precyzyjnie zamrażać działanie gry pomiędzy klatkami, pętla zjadająca też jest używana – tyle że znacznie rzadziej niż wcześniej, stąd oszczędność mocy.

Jednak wykorzystanie takiego sposobu tworzenia przerw między klatkami jest mniej dokładne i czasem powoduje wahania klatkażu, dlatego w kodzie zegara pozostawiłem kod pozwalający pominąć użycie procedury Sleep i – tak jak wcześniej – przerwy wykonywać wyłącznie zżerając całą dostępną moc. To w jaki sposób ma się zegar zachowywać można zdeterminować parametrami wejściowymi.

Wykorzystanie ”lekkiego” zegara, oszczędzającego procesor (wartość domyślna):

> platformer.exe clock light

Użycie precyzyjnego zegara, wykorzystującego pełną moc:

> platformer.exe clock precise

Drugim ficzerem jest przystosowanie zegara do luźnego wykonywania klatek w momencie, gdy gra jest zatrzymana (za pomocą klawisza F2 lub gdy okno gry jest nieaktywne albo zminimalizowane). W takim przypadku logika gry oraz renderowanie klatek nie są wykonywane – sprawdzany jest jedynie input oraz okno jest przemalowywane (używając bieżącej klatki). No i ten ficzer sprowadza się do użycia Sleep(100) w takiej sytuacji, co zmniejsza zużycie mocy procesora do poziomu kilku procent.


Jeśli chodzi o kod źródłowy to raczej już nic się nie zmieni, co najwyżej kosmetyka. Bieżące źródła dodaję do załączników i zabieram się konkretnie za tworzenie zawartości.


edytowany 3x, ostatnio: furious programming, 2019-05-13 15:02
Jądra? Zmień na "rdzenia" proszę :) - Spine 2019-05-13 14:41
Mnie tam jądra nie przeszkadzają. ;) - furious programming 2019-05-13 15:01
Mnie też, ale dziękuję za poprawkę :) - Spine 2019-05-13 15:03

Pozostało 580 znaków

2019-05-28 22:42
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

3

No dobra, jeszcze jedna aktualizacja kodu – i jeszcze jedna przede mną. ;)

Dodałem kilka funkcji pomagających mi w debugowaniu oraz z dodatkowymi informacjami – oba dostępne w trybie cheat mode. Po pierwsze, dodałem jeszcze jeden licznik, pokazujący rozmiar danych na stercie. Przynajmniej nie muszę używać menedżera zadań.

Drugi ficzer jest bardziej przydatny, bo są to hinty dotyczące używanych dodatkowych opcji debugowania, których to włączenia/wyłącznia nie widać na ekranie (np. zmiana framerate'u) lub w określonych sytuacjach mogą nie być widoczne (np. pokazanie bramek lub ukrycie świetlików). Teraz zawsze wiadomo kiedy te opcje są używane, bo wyświetla się w lewym dolnym rogu hint z krótką informacją. Oczywiście w formie animowanej – rozwija się, a na koniec zwija. Hinty są permanentne (globalne) – są pokazywane niezależnie od scen.

Deep Platformer — new look.png

Oprócz opcji pomagających debugować grę, dodałem jeden wodotrysk. Skoro gra rozpoczyna się animacją imitującą włączanie kineskopowego telewizora z szumem, przełączaniem kanałów i włączaniem konsoli, to gra powinna się kończyć jakąś animacją w tym stylu. Dorobiłem więc animację wyłączania telewizora, która jest odgrywana po zamknięciu gry (najpierw odtwarzana jest krótka animacja, a po niej okno gry jest niszczone). Wyszło przesłodko.

I w sumie to dobrze, że postanowiłem zrobić tę końcową animację, dlatego że dzięki niej namierzyłem błąd w klasie filmu, czyli w TMovie. Polegał on na tym, że przejście do kolejnej animacji (w obrębie jednego filmu) nie uwzględniało inkrementacji indeksu klatki, przez co animacja zawsze trwała o jedną klatkę za długo. Niby to tylko 1/60 sekundy, więc kto by to zauważył… No ale film składający się z jednoklatkowych animacji trwał dwa razy dłużej niż powinien, co już było baaardzo widoczne – dlatego trzeba było to poprawić. :]


edytowany 8x, ostatnio: furious programming, 2019-05-29 14:59
zarąbiste! Animacje wyglądają przyzwoicie :) - no_solution_found 2019-06-05 12:35
W rzeczywistości animacje wyglądają ładniej. Filmiki są w 30fps, w dodatku komputer mi nie wyrabia podczas nagrywania i widać ”żabkowanie”. :P - furious programming 2019-06-05 15:21

Pozostało 580 znaków

2019-06-12 06:15

Rejestracja: 2 lata temu

Ostatnio: 1 miesiąc temu

3

Ściągnąłem projekt, by pooglądać źródła. Odpalam i pograłem chwilkę. Po pierwsze jestem zdziwiony, ale gra serio jest grywalna i ma potencjał. Lubię takie gry. Ciekawy pomysł. Mam nadzieję, na wiele poziomów, może system punktów i wysyłki do globalnego rankingu? Przydała by się też muzyczka. Szkoda generalnie, że taki mały ekran, i nie można powiększyć okna. Co do skakania nad przepaścią to zacząłem się wkurzać, aż ktoś mi powiedział, że mam ukryte przejście - a ciągle spadałem - fajne zagranie ;) Niemniej chciałem wyłączyć - nie wiedziałem jak bo esc robi pauzę więc nacisnąłem alt+F4 to spowodowało crash - to chyba do poprawki. Mam nadzieję na dalszy rozwój.

  • dp.png (0.01 MB) - ściągnięć: 45

Pozostało 580 znaków

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

Rejestracja: 8 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Tuchów

0
somedev napisał(a):

Po pierwsze jestem zdziwiony, ale gra serio jest grywalna i ma potencjał.

Pograć się da, ale niezbyt wiele jest w tej gierce do zrobienia – ot szukanie świetlików i wyjścia. Całość urozmaica wielowarstwowość poziomów i możliwość zmiany kierunku siły przyciągania.

No ale to tylko tyle. Nie ma np. ruchomych platform, przełączników, specjalnych znajdziek, nie ma też przeciwników i bossów. Wszystko dlatego, że to nie miała być pełnoprawna gra, a jedynie apka do sprawdzenia, czy da się zrobić ”lepszą” gierkę bez żadnej biblioteki do tworzenia gier. No i jak widać da się. ;)

Mam nadzieję, na wiele poziomów […]

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

[…] może system punktów i wysyłki do globalnego rankingu?

Oj nie. Punktów jako tako gra nie liczy – cała rozgrywka opiera się o liczbę złapanych świetlików i liczbę straconych żyć. Na tej podstawie gra pozwoli odblokować dodatkową zawartość, czyli jeszcze jeden świat z kilkoma poziomami (bardzo trudnymi). I również na tej podstawie gra wybiera odpowiednią animację dla outro z informacją o tym czy udało się przejść grę na jednym życiu i czy nie pominięto świetlików.

Dodatkowo jest też tryb speedrun, który charakteryzuje się zawsze odblokowaną dodatkową zawartością i innym zestawem animacji dla outro, w których oprócz podania wyników, podaje też czas przejścia gry w postaci zegarka cyfrowego oraz liczby klatek:

Deep Platformer — speedrun time.png

Dodałem ten tryb głównie dlatego, że może kiedyś znajdą się chętni do pobijania rekordów (może nawet GDQ). A że kosztował mnie góra kilkanaście linijek kodu to warto go było dodać. Natomiast strony z rankingami nie ma sensu robić – jest przecież https://www.speedrun.com/

Przydała by się też muzyczka.

Tej na pewno nie będzie. Wszystko dlatego, że z założenia projekt ma nie używać żadnej dodatkowej biblioteki i żadnego dodatkowego pakietu (z rozszerzeniem .lpk), a sam pakiet LCL nie posiada multiplatformowych funkcji/API do odtwarzania kilku dźwięków jednocześnie. W sumie to w ogóle takich funkcji nie posiada (multiplatformowych), nawet do odtwarzania jednego dźwięku.

Szkoda generalnie, że taki mały ekran, i nie można powiększyć okna.

No tutaj dowaliłeś – użyj nienumerycznych klawiszy + i -. Gra obsługuje kilka rozmiarów okna (w tym dwa tryby pełnoekranowe) i wspiera stanowiska wieloekranowe. Okno można przesuwać za pomocą LPM.

Wiem że to niepopularne, ale polecam jednak otworzyć plik readme.txt i zapoznać się z jego zawartością. Nie tylko można się z niego dowiedzieć czym jest ta gra i o co w niej chodzi, ale też dowiedzieć się:

  • jaka jest klawiszologia,
  • jak włączyć tryb speedrun i czym się on charakteryzuje,
  • jakie opcje są dostępne do konfiguracji z linii poleceń,
  • jak włączyć cheat mode i pobawić się w boga,
  • jakie są wymagania systemowe i ograniczenia/problemy,
  • jakie są dodatkowe narzędzia (dla sceny moderskiej).

Co do skakania nad przepaścią to zacząłem się wkurzać, aż ktoś mi powiedział, że mam ukryte przejście - a ciągle spadałem - fajne zagranie ;)

Ten poziom samouczka ma z założenia poinformować gracza o tym, że poziomy mogą posiadać ukryte przejścia. Takie przejścia pozwolą dojść do ukrytych świetlików. Tak więc w podstawowym trybie, aby móc odblokować dodatkowy świat i pograć jeszcze trochę, trzeba będzie złapać wszystkie świetliki, czyli trzeba będzie znaleźć takie ukryte przejścia.

Przy czym tę przepaść da się bez problemu przeskoczyć, używając skoku regulowanego – sam zobacz.

Natomiast cutscenki z założenia mają być nieco wredne/ironiczne, tak aby wkurzać gracza uszczypliwymi docinkami. Być może dodam nieco bardziej wnerwiające cutscenki, ale tylko dla specjalnych przypadków – jako easter eggi, dla bardzo słabych lub dociekliwych graczy.

Niemniej chciałem wyłączyć - nie wiedziałem jak bo esc robi pauzę […]

readme.txt – sam F4 wystarczy. :P

[…] więc nacisnąłem alt+F4 to spowodowało crash - to chyba do poprawki.

Okienko które się pojawia po wyłączeniu gry to okienko z informacjami na temat użytej pamięci, wyświetlane automatycznie przez moduł HeapTrc. Bardzo mylące jest to, że tytuł okna to Error – to sugeruje że wystapił błąd. No ale tak to zrobili, więc cóż… Przy okazji możesz z niego wyczytać, że nie ma wycieków pamięci, co jest przeze mnie spodziewane.

To okienko wyświetlane jest jedynie w przypadku kompilacji projektu jako Debug – wersja produkcyjna nie będzie używała modułu HeapTrc, a więc to okienko nie będzie się pokazywało.

Mam nadzieję na dalszy rozwój.

Chciałbym ten projekt rozwijać, jednak ze względu na inne projekty (w tym również otwarte), zrobię pierwszą konkretną wersję i na tym póki co poprzestanę.

Natomiast liczę na to, że znajdą się moderzy i go przerobią/rozwiną. No i aby każdy chętny mógł stworzyć własną wersję tej gry (nieco przerobioną, np. tylko z innymi poziomami lub dużą, mocno rozwiniętą, również jeśli chodzi o logikę), dostępne będą źródła gry oraz źródła pięciu konsolowych narzędzi do generowania zawartości (plików binarnych z fontami, poziomami, ekranami tytułowymi i cutscenkami/animacjami). Udostępnię też snapshot deweloperski, ze wszsytkimi narzędziami i wszystkimi plikami potrzebnymi do budowy zawartości (z których sam korzystam).


edytowany 9x, ostatnio: furious programming, 2019-06-12 12:49
Dzięki za wyjaśnienia, ale nie musisz się tłumaczyć. Grę włączyłem z ciekawości i postanowiłem zostawić opinię - to już od Ciebie zależy jak ja przyjmiesz. Pliku readme nie czytałem bo nie miałem czasu - moim celem byl sam kod a nie gra. Jeśli w przyszłości będę grał to poczytam. - somedev 2019-06-12 15:19
Nie tłumaczę się. Napisałeś takie rzeczy, że musiałem je zdementować, abyś przypadkowo nie wprowadził innych w błąd. :P - furious programming 2019-06-12 15:25
Będzie jakieś repo, np. GitHub? - Tonyu 2019-06-12 20:00
Będzie – w GitHub. - furious programming 2019-06-12 20:49

Pozostało 580 znaków

Odpowiedz

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