Gra "Pogromcy Potworów"

16

Po 12 latach z nudów wróciłem do projektu mojej starej gry napisanej w Delphi i DirectX.

Jest to darmowa gra RPG całkowicie po polsku w której wybieramy jedną z czterech klas a następnie dołączamy do tytułowego klanu "Pogromców Potworów" by walczyć z potworami nękającymi mieszkańców tego świata. W grze znajduje się 6 wysp do eksploracji na których możemy otrzymywać różne zadania od mieszkańców. W sumie w grze znajdują się 34 zadania do wykonania. Walka odbywa się w systemie turowym.

imageimageimageimageimageimageimageimageimageimageimageimage

Strona projektu: link

1

Napiszesz coś więcej na temat technicznej strony tego projektu?

3

Projekt powstawał przez długi czas w przeszłości (od 2008-2010 roku) oryginalnie na Delphi 5 korzystając z komponentów VCL Omega (DirectX 8.1). Cały kod gry zawarty jest w jednym pliku tekstowym mającym około 8000 linijek. Do stworzenia mapy świata napisałem osobny edytor w którym można zmieniać mapę, parametry wrogów czy tworzyć nowe zadania do gry. Obecny build został skompilowany na Delphi 11, a komponenty Omega zostały przeze mnie zmodyfikowane by działały pod DirectX 9 (Co prawda istniała wersja Omegi pod DirectX 9 napisana przez oryginalnych twórców ale nie da się już jej znaleźć na necie). Co tu więcej powiedzieć, pomimo zmiany na DX9 gra dalej używa "fixed function pipeline" do wyświetlania grafiki. Gra po sieci realizowana jest przez starutkie komponenty TServerSocket i TClientSocket i tak naprawdę jest tylko małym dodatkiem bo na raz mogą ze sobą grać tylko dwie osoby. Chyba nie muszę dodawać że jest to 32 bitowa aplikacja dla platformy Windows 😉

2

Nie myślałeś o wykorzystaniu czegoś nowszego, jeśli chodzi o backend do renderowania? Nie potrzebujesz jakichś komponentów Omegi, skoro jest SDL, Allegro, RayLib, SFML i wiele innych bibliotek z nagłówkami do Pascala. A w nich możesz używać jednego zestawu funkcji/klas, bez względu na to jaki backend wybierzesz. Taki SDL wspiera domyślnie Direct3D (w tym Direct3D 12), ale można śmiało ustawić OpenGL, Vulkan czy Metal (API jest wieloplatformowe), a do tego są również funkcje do obsługi TCP/IP czy UDP.

Tego typu biblioteki nie tylko zapewniają wygodne w użyciu API do renderowania harware'owego, ale dają też możliwość wygodnej obsługi miksera dźwięków, czy choćby inputu i okna. Poza tym ani nie musiałbyś się ograniczać do rozdzielczości 640×480 (mógłbyś ustawić dowolną obsługiwaną przez sterownik graficzny), ani tym bardziej do 32-bitów (to już zabytek).

1

Generalnie furious dobrze doradził. Ja również ze swej strony polecam SDL.Wykorzystałem tą platformę do zrobienia symulacji poruszania się ramienia robotycznego.Rzuć na to okiem : https://www.freepascal-meets-sdl.net/. Dosłownie tutorial prowadzi za rękę. Z drugiej strony "+" za ukończenie gierki, również miło wspominam TServerSocket i TClientSocket :) Wiele lat temu napisałem gierke do grania w tzw. piłkarzyki w oparciu o te komponenty. Zanim to nastąpiło, to za czasów szkoły średniej graliśmy w taką grę namiętnie na lekcjach wychowawczych. Potrzebnych było dwóch graczy z długopisami/ołówkami, kartka papieru i mecz gotowy :)

2

Ogólnie gdy zabierałem się za tworzenie tej gry w 2008 roku nie miałem bladego pojęcia o DirectX, OpenGL itd, pamiętam że w tamtym czasie wiele osób chwaliło sobie te komponenty Omega i tak właśnie zacząłem z nich korzystać, gdy już ukończyłem ten projekt zabrałem się za pisanie własnego mini silnika 3D w Delphi pod DirectX 9, już w tamtym czasie miałem myśli żeby zastąpić te komponenty na coś swojego ale jakoś nigdy się za to nie zabrałem, chyba największym problemem jest ta rozdzielczość 640x480, cała grafika była projektowana pod nią i samo zwiększenie rozdzielczości nie da zadowalających efektów, musiałbym przerobić całą grafikę, niby jest to do zrobienia ale nie mam już tyle czasu co dawniej, szczególnie że tworzę też inną grę w Unity. Może w przyszłości gdy znajdę więcej czasu wrócę jeszcze do tego projektu i zrobię jakieś większe zmiany, przejście na SDL to dobry pomysł. 🙂

0

Niezła.

0

Fajny styl graficzny z tym guiem ala Diablo i prymitywną grafiką 3D.

0
furious programming napisał(a):

Nie myślałeś o wykorzystaniu czegoś nowszego, jeśli chodzi o backend do renderowania? Nie potrzebujesz jakichś komponentów Omegi, skoro jest SDL, Allegro, RayLib, SFML i wiele innych bibliotek z nagłówkami do Pascala. A w nich możesz używać jednego zestawu funkcji/klas, bez względu na to jaki backend wybierzesz. Taki SDL wspiera domyślnie Direct3D (w tym Direct3D 12), ale można śmiało ustawić OpenGL, Vulkan czy Metal (API jest wieloplatformowe), a do tego są również funkcje do obsługi TCP/IP czy UDP.

Tego typu biblioteki nie tylko zapewniają wygodne w użyciu API do renderowania harware'owego, ale dają też możliwość wygodnej obsługi miksera dźwięków, czy choćby inputu i okna. Poza tym ani nie musiałbyś się ograniczać do rozdzielczości 640×480 (mógłbyś ustawić dowolną obsługiwaną przez sterownik graficzny), ani tym bardziej do 32-bitów (to już zabytek).

Twoja uwaga o wykorzystaniu nowszych technologii backendowych do renderowania jest absolutnie trafna i w pełni uzasadniona. Biblioteki takie jak SDL, Allegro, RayLib, czy SFML rzeczywiście oferują wszechstronne możliwości, a jednocześnie są przyjazne dla użytkownika. Zgadzam się, że dają one znacznie więcej swobody, zarówno pod kątem obsługiwanych rozdzielczości, jak i możliwości wykorzystania nowszych technologii, takich jak Direct3D 12, OpenGL, Vulkan, czy Metal. Możliwość łatwej obsługi TCP/IP czy UDP to kolejny plus.

Patrząc na projekt wydaje się, że jego autor miał specyficzne cele, prawdopodobnie chcąc stworzyć coś od podstaw. Jest to podejście, które można porównać do pracy rękodzielniczej – czasochłonne, ale dające ogromną satysfakcję z tworzenia czegoś unikalnego i całkowicie osobistego. W dzisiejszych czasach, zdecydowanie, można by zrealizować podobny projekt znacznie szybciej, korzystając z gotowych komponentów i bibliotek.

Jednakże, warto pamiętać, że dla młodego programisty, często z ograniczonym dostępem do zasobów, taka forma eksperymentowania i uczenia się może być niezwykle wartościowa. To ciekawy relikt przeszłości, który pokazuje, jak daleko zaszliśmy w rozwoju technologii, ale jednocześnie przypomina o wartościach takich jak ciekawość, pasja i pragnienie tworzenia czegoś własnego. Warto zatem docenić ten projekt jako ważny krok w rozwoju autora, nawet jeśli z dzisiejszej perspektywy wydaje się on nieco archaiczny.

1
MrProtek napisał(a):

Ogólnie gdy zabierałem się za tworzenie tej gry w 2008 roku nie miałem bladego pojęcia o DirectX, OpenGL itd, […]

I po to właśnie istnieją biblioteki takie jak SDL — nie potrzebujesz znać API np. OpenGL, aby móc renderować grafikę za pomocą GPU, bo SDL ma zestaw funkcji, które przyjmują proste parametry (np. teksturę i obszary), a cała magia dzieje się pod spodem. Nie tylko nie trzeba się uczyć API konkretnego backendu, ale też taki kod jest przenośny między platformami i isniejących na nich API (np. WIndows→Direct3D, Linux→OpenGL, macOS→Metal itd.).

[…] chyba największym problemem jest ta rozdzielczość 640x480, cała grafika była projektowana pod nią i samo zwiększenie rozdzielczości nie da zadowalających efektów, musiałbym przerobić całą grafikę […]

Nie musisz niczego przerabiać. Jeśli grafikę masz zaprojektowaną pod 640×480, to renderuj klatkę na tylnym buforze (teksturze) o takim rozmiarze, a następnie wyrenderuj gotową klatkę w oknie, odpowiednio ją rozciągając. Z tego sposobu korzystają deweloperzy, np. na potrzeby gier w stylu retro, które charakteryzowały się konkretną rozdzielczością i pikselozą.

Sam też z niego korzystam — tylny bufor ma rozmiar 358×224 piksele, na nim renderowana jest klatka, a następnie ten bufor renderowany jest w oknie, rozciągając klatkę na całe okno (z zachowaniem odpowiednich proporcji). Rozmiar okna i jego proporcje nie mają żadnego znaczenia.


Ogólnie to bardzo ciekawy projekt, rzadko można spotkać sensowniejszą grę pisaną w Pascalu, a już szczególnie taką, która wykorzystuje hardware'owe renderowanie i konkretny mikser dźwięków. Z chęcią kuknąłbym do źródeł tej gry, ale ich nie znalazłem — zdaje się, że to projekt zamkniętoźródłowy. ;)

To co pisałem na temat bibliotek to tylko pytanie zadane z ciekawości. Przeportowanie kodu całej gry, aby skorzystać ze współczesnych technologii, wymagałoby trochę czasu, choć 8kLoC to w sumie niewiele. Tak więc w razie czego warto pamiętać, że do Delphi i Free Pascala bez problemu można znaleźć odpowiednie nagłówki i korzystać z najlepszych istniejących bibliotek multimedialnych.

Przy okazji — antywirus windowsowy ubił mi proces gry mniej więcej po minucie grania, raportując zagrożenie w formie trojana. To najpewniej false-positive mechanizmów heurystyki, ale grać mi nie pozwolił. Zdążyłem obadać menu gry oraz przespacerować się kawałek. Fajna ta mechanika chodzenia — zaskoczyła mnie pozytywnie. :]

0
furious programming napisał(a):

Przy okazji — antywirus windowsowy ubił mi proces gry mniej więcej po minucie grania, raportując zagrożenie w formie trojana. To najpewniej false-positive mechanizmów heurystyki, ale grać mi nie pozwolił. Zdążyłem obadać menu gry oraz przespacerować się kawałek.

A jaki to antywirus? Domyślny windowsowy? Wiem że Avast potrafi mi wysypać grę podczas pierwszego skanowania, ale później już chodzi dobrze. Niestety na to już nic się poradzić nie da, może gdyby aplikacja miała cyfrowy podpis to wtedy antywiry dały by jej spokój, ale taki podpis to spory wydatek. 😐

0
MrProtek napisał(a):

A jaki to antywirus? Domyślny windowsowy?

Windows Defender, pod Windows 10.

Niestety na to już nic się poradzić nie da, może gdyby aplikacja miała cyfrowy podpis to wtedy antywiry dały by jej spokój, ale taki podpis to spory wydatek. 😐

Sam mam jeszcze sporo czasu, ale z chęcią dowiedziałbym się ile faktycznie to kosztuje i z którego rozwiązania ludzie najczęściej korzystają, jeśli chodzi o podpisywanie plików wykonywalnych (aplikacji oraz instalatorów). Ale nie wiem czy jest tutaj ktoś, kto chciałby się podzielić takimi informacjami i napisać jak wygląda cała procedura podpisywania oraz jakie są to koszty.

Ale sam podpis cyfrowy nie ma nic wspólnego z antywirusami — w końcu malware też sobie można podpisać. ;)

0
furious programming napisał(a):

Ale sam podpis cyfrowy nie ma nic wspólnego z antywirusami — w końcu malware też sobie można podpisać. ;)

Owszem można ale podpis gwarantuje że aplikacja nie była w żaden sposób modyfikowana, więc wydaje mi się że jeżeli aplikacja jest podpisana, szczególnie przez jakąś znaną firmę to antywirus będzie traktował taką aplikacje inaczej niż taką niepodpisaną.

Kiedyś sprawdzałem ceny takich podpisów to było coś koło 350 funtów na rok, ale widziałem też tańsze alternatywy jeżeli aplikacja była open source, dlatego też w przypadku mojej gierki mogę o tym zapomnieć. 😉

0

Aż się zalogowałem. Kiedyś na to trafiłem i przeszedłem do momentu jaki był. Nie była jeszcze ukończona. Z tej gry sporadycznie używam rybostwór i przeinaczam na inne rzeczy. Całkiem dobrze pamiętam.

0
M-M napisał(a):

Aż się zalogowałem. Kiedyś na to trafiłem i przeszedłem do momentu jaki był. Nie była jeszcze ukończona. Z tej gry sporadycznie używam rybostwór i przeinaczam na inne rzeczy. Całkiem dobrze pamiętam.

To były dobre czasy, z samego warsztatu.gd przez lata gra była pobrana kilkanaście tysięcy razy, kilka lat temu dostałem maila od jakiejś osoby która mi napisała że grała w tę grę za dzieciaka i miło ją wspomina, miłe uczucie. 🙂

0

o, chyba nawet wieki temu pobralem to z Warsztatu i odpalilem.

1

@furious programming @MrProtek Cennik masz np. tutaj: https://sklep.certum.pl/bezpieczenstwo-danych/certyfikaty-code-signing.html
Certyfikat w wersji standard nie likwiduje pojawiania się okienka SmartScreen Application Reputation

Ja korzystam z certyfikatu z Sectigo OV - odpowiednik wersji standard. Ogólnie to od czerwca 2023 zmieniły się przepisy w zakresie certyfikatów do podpisu kodu (wcześniej można było podpisywać za pomocą klucza prywatnego znajdującego się w pliku), natomiast po zmianach klucz prywatny musi znajdować się na sprzęcie posiadającym certyfikat FIPS 140-2 level 2, Common Criteria EAL 4+. Wpłynęło to również na ceny certyfikatów OV - wzrosły o około 200%.

0

Po 12 latach z nudów wróciłem do projektu mojej starej gry napisanej w Delphi i DirectX

moglbys powiedziec skad czerpales wiedze/podstawy

1
krzychu82a napisał(a):

Po 12 latach z nudów wróciłem do projektu mojej starej gry napisanej w Delphi i DirectX

moglbys powiedziec skad czerpales wiedze/podstawy

To dość ciekawe pytanie, gdy miałem z 17 lat i jeszcze mieszkałem w Polsce nie miałem internetu, mój komputer to był wrak na którym ledwo cokolwiek działało, miałem stary psujący się monitor CRT i ogromne chęci by coś stworzyć. Miałem wtedy manie na Warcrafta 3, a dokładnie na edytor map do tej gry, siedziałem przy tym cały czas i próbowałem stworzyć jakieś fajne mapki. Po roku zabawy z tym narzędziem zrozumiałem podstawy takie jak zmienne czy instrukcje warunkowe. Miałem już wtedy jakieś wyobrażenie jak musi wyglądać programowanie mimo że nie miałem styczności z żadnym językiem programowania. Jakiś czas później w szkole nauczyciel informatyki pokazał nam na lekcji Turbo Pascala, oczywiście byłem nim mega zafascynowany, przyniosłem sobie ten program do domu i zacząłem czytać całą pomoc jaka tam była dostępna, pamiętam że po 2 tygodniach przyniosłem do szkoły grę tekstową która była oczywiście śmiesznie napisana, nie było w niej ani funkcji, ani procedur, a wszystkie pętle były realizowane przez "goto". Pytałem się nauczyciela o jakieś wskazówki ale on nie miał bladego pojęcia o programowaniu i nie umiał mi pomóc. Ostatecznie więc kupiłem sobie jakąś książkę o tworzeniu gier w pascalu i to mi sporo pomogło. Potem były kafejki internetowe, stronki z kursami programowania itd. Tak było w moim przypadku. 😉 Tak poza tym ta pierwsza tekstowa gra którą przyniosłem do szkoły po 2 tygodniach nauki programowania miała tytuł "Pogromcy Potworów" 😅

0

Czy ta książką było "programowanie gier 2d/3d w Turbo Pascal" napisane przez mojego kolegę z liceum? :-D

2
opiszon napisał(a):

Czy ta książką było "programowanie gier 2d/3d w Turbo Pascal" napisane przez mojego kolegę z liceum? :-D

To była dokładnie ta książka:
https://helion.pl/ksiazki/tworzenie-gier-2d-i-3d-w-jezyku-turbo-pascal-piotr-besta,2d3dtp.htm#format/d 😉

0

No to ta :-)

0
opiszon napisał(a):

No to ta :-)

Ta książka to było coś co idealnie wtedy potrzebowałem, lubiłem ją czytać żeby się motywować do działania, zaraz później napisałem gierkę o strzelaniu do samolocików w trybie 13h 😀 W sumie do tej pory mam tę gierkę razem z kodem źródłowym, no ale książki już nie mam niestety.

0

@MrProtek piękne to byli czasy jak przynosisz prostego Arkanoida na zaliczenie Pascala a kolega wpada z jakimś wypasem w 13h i wstawkami asm :-p

0

swoją drogą szkoda, że ta ksiązka nie jest już nigdzie dostępna. Niby staroć, ale by się człowiek pobawił ;)

0
UncleChesster napisał(a):

swoją drogą szkoda, że ta ksiązka nie jest już nigdzie dostępna. Niby staroć, ale by się człowiek pobawił ;)

3 sztuki na allegro ;-)

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