kategorie: ANSI C, Asembler
[#31] Re: Kilka technik dla Amiga OS

@Hexmage960, post #30

Ja podaję sporo pomysłów, chciałem je jakoś usystematyzować i udostępnić innym programistom. Te techniki są sprawdzone w praktyce, kompletne i działające.


Gdy już napiszesz wszystko to dopiero udostępnij.
Posprawdzaj wszystko i pamiętaj, to ma być Twoj punkt widzenia na zagadnienie.
To nie praca zbiorowa, więc dlaczego ktoś miałby wpływać na Ciebie.
2
[#32] Re: Kilka technik dla Amiga OS

@Norbert, post #31

Hej,

Zgodnie z wcześniejszą zapowiedzią wrzuciłem nową wersję mojej biblioteki pisanej w języku ANSI C o nazwie GameX na Aminet.

Jest to pierwsza aktualizacja od 2012 roku. Tamta zawierała jeszcze mój nieaktualny e-mail i dane.

Biblioteka ma za zadanie ułatwić pisanie gier dla programistów. Szczególnie tych piszących w języku C i Asembler.

Ale, po skompilowaniu i przerobieniu na bibliotekę, dostęp do niej mogliby mieć też programiści piszący w Amiga E, a nawet AMOSie czy Blitz Basicu.

W paczce aktualnie jest kod źródłowy oraz pierwsza demonstracja, która obrazuje możliwości zawartych technik i kodu.

Demo wyświetla okno o rozmiarze 320x120 z animowaną mapą. Okno może być przemieszczane za pomocą myszy i jest animowane na bieżąco.

Ekran dema to 640x256 w wysokiej rozdzielczości. Rozmiar kafelków to 32x20 pikseli.

Jest to praktyczny przykład. Oczywiście silnik może wyświetlać dowolną zawartość w oknie, również przesuwaną.

Wymogiem biblioteki i demonstracji jest Amiga z OS 3.0+.

Planuję zamieścić jeszcze ok. dwie demonstracje. Chciałbym oczywiście stworzyć samodzielnie grę na tym silniku, waham się jeszcze w tej kwestii (przygotowałem ostatnio grafikę do klonu Boulder Dasha).

Są możliwe gry o różnej złożoności - np. taka w stylu Alien Breed lub gry wyścigowej z widoku z góry.

Poniżej zrzut z dema. Animowane drzewka narysowane zostały na szybko. System umożliwia tworzenie i animowanie większej liczby okienek na ekranie.

GameX pobierzecie z Aminetu: http://aminet.net/package/dev/c/GameX

W razie pytań proszę śmiało zadawać. Aktualnie pakiet nie ma jeszcze dokumentacji do funkcji bibliotecznych, planuję ją dodać do archiwum LHA.

Pozdrawiam.

4
[#33] Re: Kilka technik dla Amiga OS

@Hexmage960, post #32

Hej, chciałem podzielić się fajnymi postępami w mojej pracy:

Otóż przygotowałem nową wersję biblioteczki GameX. Największą nowością jest własna implementacja funkcji DrawGList() z biblioteki graficznej, która rysuje Boby.

Zaimplementowałem większość funkcji:
- Flaga OVERLAY mówi, czy Bob ma maskę,
- Flaga SAVEBACK mówi, czy zapamiętywać tło.

Zanim powstanie grafika możemy przetestować nasz silnik z kolorowymi prostokątami.

Ponadto funkcja rysująca ikony została wydzielona do odrębnego pliku.

Najnowszą wersję można pobrać stąd: https://coreprogramming.pl/GameX/GameX.lha

Uwaga: zawiera nowe demo pokazujące możliwości!

Poniżej zrzut ekranu z dema. Grafikę przygotowałem sam.

Biblioteczka jest w pełni używalna i większość funkcji przetestowana. Dodam niedługo opis funkcji dla programisty i wtedy wrzucę też na Aminet.

Serdecznie pozdrawiam.

P.S. Będę informował o kolejnych postępach. W planach mam dokończyć najpierw Blastera (choć grafika w demie pochodzi z planowanej, innej gry). Mechanika Blastera jest bardzo prosta, stąd taki wybór.

4
[#34] Re: Kilka technik dla Amiga OS

@Hexmage960, post #33

Hej!

Postępy w mojej pracy są coraz bardziej widoczne.

Przygotowałem w ostatnim czasie kilka nowych funkcji:

- Z rodziny rysujących przygotowałem funkcję, która wkleja w okienko bitmapę opcjonalnie ją skrolując - jedną operacją. Przydatna gdy chcemy wkleić fragment dużej mapy.

Opcjonalnie możemy użyć maski, gdy np. nanosimy drugą warstwę (Boby itp.). Funkcja jest ta sama. Rysowanie możemy sobie dowolnie rozdzielić na obszary - nie musimy rysować całości.

- Funkcje do przetwarzania grafiki (pikseli). Przydatne gdy chcemy zmapować grafikę itp. Możemy rozłożyć to w czasie.

- Technika 50 fps, która dzięki paru zabiegom umożliwia płynną animację, rozkładając kosztowne operacje w czasie w razie potrzeby.

Mój silnik w obecnej postaci umożliwia opracowanie na Amigę 1200 gier typu The Lost Vikings 2, Worms 2 itp. gdzie mamy dużą mapę, dużo obiektów animowanych i 256 kolorów. Myślałem, żeby wypuścić demonstracje, które to udowadniają, ale nie mam grafiki.

Aktualnie dopracowałem silnik komórkowy, na bazie którego oprócz wcześniejszego Sokobana chciałem zrobić klon Boulder Dasha (grafika pokazana wcześniej) oraz nową wersję klonu Robbo. Do Blastera mam starszą grafikę - a chciałem ją troszkę poprawić.

Silnik komórkowy jest bardzo fajny i definiuje po prostu interakcje obiekt - pole i obiekt - obiekt.

Moje problemy systematycznie się zmniejszają i faktycznie jest postęp. Mam też sporo roboty na ostatnim semestrze studiów i piszę grę tekstową na konkurs, ale postaram się wrzucić działające demo/grę korzystające z moich technik.
3
[#35] Re: Kilka technik dla Amiga OS

@Hexmage960, post #34

Hej,

Piszę tutaj ponieważ poruszono na forum ważne zagadnienie związane z moimi produkcjami.

Otóż udało mi się opracować technikę, która wyświetla animowane okienka w Amiga OS.

Okienka są zoptymalizowane pod kątem ilości pamięci graficznej do zapełnienia. Może być np. okno na cały ekran w 4 kolorach, okno na połowę ekranu w 16 kolorach i okno na ćwierć ekranu w 256 kolorach. Wszystkie te okna zajmują tyle samo pamięci graficznej. Okienek może być więcej, w różnych miejscach.

Okienka dodaję też jeżeli mam do narysowania jakiś kolorowy element graficzny.

Przemieszczanie każdego okna zajmuje tyle ile zajmuje przesunięcie tych danych w pamięci graficznej. Okno z jednobarwnym tłem nie kosztuje nic (a takie okno może być podkładem pod inne).

Wszystko to można wykorzystać do implementacji ciekawych silników graficznych. Da się zrobić mechanizmy z zaawansowanych gier z platformy PC typu Worms 2 (jak pisałem).

Dodatkowo można otworzyć na ekranie kilka dowolnych okien i każdy gracz może korzystać ze swojego okienka, swobodnie przemieszczanego.

Są to techniki. Ostatnio dużo pisałem i testowałem kod. Jestem teraz trochę zajęty, ale chciałem napisać ten post w związku z ostatnim tematem na forum dot. okienek.

Pozdrawiam.

Ostatnia aktualizacja: 17.05.2024 17:09:37 przez Hexmage960
1
[#36] Re: Kilka technik dla Amiga OS

@Hexmage960, post #35

Chciałbym serdecznie poinformować, że przygotowałem podręcznik on-line do mojej biblioteki GameX oraz wydałem nową wersję tej biblioteki.

Biblioteka jest napisana w języku C (ze wstawkami w asemblerze). Stanowi rozszerzenie bibliotek systemowych Amiga OS 3 o:
- wydajne funkcje graficzne pracujące na okienkach (zarówno przesuwane i maskowane bitplany jak i tablice pikseli z możliwością mapowania pozycji i koloru),
- specjalizowane funkcje IFF (ładowanie grafiki),
- obsługę joysticka,
- obsługę animacji.

Podręcznik (w języku angielskim) znajduje się na głównej stronie pod adresem: https://coreprogramming.pl.

Można tam pobrać bibliotekę w bieżącej wersji. Zawiera kod źródłowy przeznaczony do kompilowania w DICE lub SAS/C (zawiera słowa kluczowe tych kompilatorów). Plik asemblerowy .s kompilujemy np. za pomocą PhxAss. Jest to biblioteka linkowalna, tzn. że załączamy ją do swojego programu w postaci plików obiektowych z rozszerzeniem .o (lub pliku biblioteki z rozszerzeniem .lib) za pomocą linkera DICE, SAS/C lub PhxLnk.

W razie pytań, chętnie odpowiem.
1
[#37] Re: Kilka technik dla Amiga OS

@Hexmage960, post #36

Masz może coś nagrane, by można było zobaczyć jak okienka działają bez nowych funkcji i z nimi.
[#38] Re: Kilka technik dla Amiga OS

@koczis, post #37

Masz może coś nagrane, by można było zobaczyć jak okienka działają bez nowych funkcji i z nimi.

Nie mam w tej chwili nagrania demonstracji działania biblioteki.

Dla jasności, biblioteka nie jest łatką na funkcje systemowe. Tylko stanowi ich rozszerzenie o wydajne funkcje, których brakuje w Amiga OS 3.

Po prostu moje funkcje rysujące działają na okienkach (inaczej warstwach) dzięki czemu można przycinać rysowanie tylko do widocznych fragmentów, co przydaje się np. przy odświeżaniu.

Biblioteka służy do pisania gier. Aktualnie możesz zobaczyć jak pracują moje funkcje w praktyce sprawdzając moją grę Zaczarowana Kopalnia (Rocky) w wersji 0.10 (link jest w odpowiednim wątku), albo pobierając GameX w starszej wersji 1.1 z Aminetu, która zawiera plik wykonywalny z demonstracją.

Wersja 0.11 tej gry, nad którą jeszcze pracuję, korzysta z nowej wersji biblioteki GameX i posiada usprawniony silnik z listą obiektów.

Ostatnia aktualizacja: 08.10.2024 12:55:44 przez Hexmage960
[#39] Re: Kilka technik dla Amiga OS

@koczis, post #37

Proszę bardzo, przygotowałem małą demonstrację. Obrazuje najnowszy silniczek graficzny Zaczarowanej Kopalni uwzględniający przesuw mapy.

Mapę możemy przesuwać za pomocą klawiszy kursora (okno z mapą musi być aktywne) oraz możemy edytować planszę wybierając kafelek w oknie po prawej stronie i wklejając na mapie lewym klawiszem myszy.

Kafelki są duże (32x32) ze względu że rysuję po bitplanach i planuję rysować też z maską.

Do pobrania stąd (w pliku Data1/Graphics.iff załączona jest grafika, która wymaga AGA do wyświetlenia, ale ogólnie program wymaga OS 3.0 i ECS):

https://coreprogramming.pl/Downloads/Demo1.lha

Nota: to jest tylko przykład zastosowania biblioteki, a nie demo gry. Właściwa nowa wersja gry powstaje powoli, bo mam w tej chwili mało czasu (będę miał go więcej).

Pozdrawiam.

1
[#40] Re: Kilka technik dla Amiga OS

@koczis, post #37

@Koczis

Na wstępie chciałbym serdecznie Ci podziękować za przetestowanie gry Zaczarowana Kopalnia i podzielenie się opinią w odpowiednim wątku.

Co do Twojej uwagi, to będę chciał wprowadzić ogniki z Boulder Dasha do gry. Mam pomysł na ich postać graficzną.

Natomiast piszę tutaj, bo wrzuciłem aktualizację do biblioteki GameX dostępnej na mojej stronie. Posiada teraz pełną obsługę podwójnego buforowania.

Moja obsługa podwójnie buforowanego ekranu działa następująco:

1. Do ekranu dodawany jest sygnał wysyłany przez koprocesor graficzny (Copper) do naszego tasku kiedy ekran jest widoczny i promień wizji znajduje się na linii 0 (początek wygaszania pionowego),
2. Kiedy sygnał nadejdzie wyświetlamy przygotowany przez nas bufor,
3. Kiedy nadejdzie wiadomość, że można już rysować w drugi bufor zaczynamy rysowanie.
4. Przechodzimy do punktu 2.

Te techniczne szczegóły nie są potrzebne do korzystania z tych funkcji. Warto jednak wiedzieć, że oba sygnały dodajemy do puli sygnałów na które czekamy w pętli głównej naszego programu/gry.

Ponadto dodałem kilka funkcji:

1. Ustalany jest odpowiedni tryb ekranu adekwatny do monitora ekranu publicznego,
2. Bitmapy ekranowe są alokowane i należy je wypełnić grafiką, a następnie otworzyć ekran podpinając na wstępie jedną z bitmap.
[#41] Re: Kilka technik dla Amiga OS

@Hexmage960, post #40

Witam serdecznie,

W ostatnim czasie (w przeciągu ostatnich paru miesięcy) udało mi się przygotować wiele rzeczy, w tym nową wersję dosyć niefortunnego projektu gry Magazyn, oraz nowy, całkiem sympatyczny silnik do Zaczarowanej Kopalni, który rozwiązuje wszystkie problemy z rekurencją.

Chciałbym tutaj wrzucić kolejną demonstrację moich technik, które stosuję i które rozwijam na bieżąco.

Zazwyczaj miałem problem z moimi projektami, bo powstawało bardzo wiele chaotycznych wersji. Staram się z tym walczyć choć zazwyczaj to nie zależało ode mnie i musiałem czekać na efekty. Efekty postępu są widoczne.

Tutaj załączam małą demonstrację czegoś co mnie bardzo interesuje, czyli animowanych okienek w Amidze.

https://coreprogramming.pl/GameX/WBDemo1.lha

Bardzo chciałem przygotować coś na nadchodzące Święta Bożego Narodzenia. Coś małego, działającego. I oto jest. Będę pracował i rozwijał to dalej. Mam nadzieję, że spotka się to z pozytywnym, przychylnym odzewem.

Wymagania to Amiga z OS 3.0+ i iffparse.library. Wystarczy 4-kolorowy Workbench (poniżej ilustracja również z 8-kolorowego).


9
[#42] Re: Kilka technik dla Amiga OS

@Hexmage960, post #41

Działa, ale wymaga chipsetu (w trybach RTG okno jest puste).
[#43] Re: Kilka technik dla Amiga OS

@Krashan, post #42

Działa, ale wymaga chipsetu (w trybach RTG okno jest puste).

Tak, program wykorzystuje Blitter, ale sprawdza czy bitmapa ekranowa jest w odpowiednim formacie i w przeciwnym przypadku funkcja rysująca się nie wykonuje. Dziękuję za raport.
[#44] Re: Kilka technik dla Amiga OS

@Hexmage960, post #43

nie idz ta droga, przeciez zawsze pisales pod system, niech wiec dziala na kazdym amigowym..
[#45] Re: Kilka technik dla Amiga OS

@juen, post #44

nie idz ta droga, przeciez zawsze pisales pod system, niech wiec dziala na kazdym amigowym..

Moje funkcje rysujące mają odpowiedniki w RTG, więc dodanie obsługi sytuacji, gdy bitmapa ekranowa nie jest w standardowym formacie jest całkiem proste.

Jednakże:
- Nie mam karty graficznej (RTG) w Amidze 1200, żeby testować,
- Wiele funkcji nie ma odpowiedników (np. dźwięk, muzyka), albo ma duże wymagania (68040+).

Demo celuje w Amigę 1200, ale zadziała też na innych Amigach.

To prawda, że piszę pod system, ale skoro system ma funkcje do koprocesorów graficznych, to korzystam.
1
[#46] Re: Kilka technik dla Amiga OS

@juen, post #44

Kazda Amiga ma blitter.
I jak Hex uzywa systemu do obslugi blittera to powinno to dzialac na RTG tez.
Chyba, ze Hex wymyslil/znalazl cos czego nie obsluguje prawidlowo P96.
Wtedy nalezy zglosic sie do Thor-a, zeby to poprawil w P96.
No chyba, ze to jest jednak jakis bug w kodzie Hex-a.
[#47] Re: Kilka technik dla Amiga OS

@Don_Adan, post #46

przez każdy amigowy system rozumiem także aos4 i mos
1
[#48] Re: Kilka technik dla Amiga OS

@Don_Adan, post #46

Ale on pewnie jedzie po rejestrach. To nie jest programowanie pod system
1
[#49] Re: Kilka technik dla Amiga OS

@Don_Adan, post #46

Używam alokacji Blittera z graphics.library.

Tak jak napisałem, mogę przekierować własne funkcje rysujące na funkcje graficzne z RTG.

Ale problem jest z innymi funkcjonalnościami, w tym nawet z przerwaniem Vertical Blank, który też alokuję systemowo.

Jeżeli mój program uruchomimy na Amidze, która dysponuje odpowiednimi zasobami, zadziała dobrze.

Już była tu wcześniej dyskusja o systemie. Jest wiele komponentów systemowych, które zależą od chipsetu Amigi.

Gdybym zdecydował się na pełne wsparcie RTG, AHI, to program wymagałby min. procesora 68040.

@Kiero
Ale on pewnie jedzie po rejestrach. To nie jest programowanie pod system

Wykorzystuję rejestry tylko Blittera. Czyli nie BltBitMapRastPort(), BltMaskBitMapRastPort(), tylko mój odpowiednik.

Rysuję w okno korzystając z LockLayer().

Panowie, rozumiem Waszą opinię. Ja bardziej celuję w platformę, na której rozwijam swoje programy. Nie jest proste, by było to zgodne ze wszystkimi systemami jak OS 4.0 a jednocześnie działało dobrze na Amidze 1200 z OS 3.1.

Ostatnia aktualizacja: 19.12.2024 15:14:57 przez Hexmage960
[#50] Re: Kilka technik dla Amiga OS

@kiero, post #48

Hex raczej nie jedzie po rejestrach, to nie jest w jego stylu.
On kocha system.
[#51] Re: Kilka technik dla Amiga OS

@Hexmage960, post #45

Hexmage960 Nie obraź się ale dla mnie pisanie pod system to właśnie takie pisanie że ktoś kto nie ma karty graficznej to sobie odpali i u niego działa. I z drugiej strony ktoś kto ma taką kartę graficzną też sobie odpali i też będzie u niego działało. I to jest dla mnie pisanie pod system.

Nie wiem do końca jak ty rozumiesz pisanie pod system i stąd może to rodzić nieporozumienia.
[#52] Re: Kilka technik dla Amiga OS

@juen, post #47

To masz mocno rozszerzone pojecie Amigi.
Ale to tam tez powinno dzialac.
Jesli Hex alokuje i uzywa blitter systemowo (czyli przez graphics.library), tak jak przypuszczam.

Ostatnia aktualizacja: 19.12.2024 15:08:09 przez Don_Adan
[#53] Re: Kilka technik dla Amiga OS

@asman, post #51

Dziękuję za podzielenie się swoją opinią. Dobrze Was rozumiem. Używam rejestrów tylko w jednym miejscu, tzn. po OwnBlitter(), który jest funkcja systemową.

I mogę dodać przekierowanie na graphics.library.

Tylko co mam zrobić z przerwaniem Vertical Blank, czy dźwiękiem i muzyką? Robię to systemowo z użyciem exec.library i audio.device. Są to systemowe funkcje, ale nie mają odpowiedników. I tu tkwi szkopuł.

Sorki, nie dogodzę wszystkim ale moje demko działa na większości Amig.
[#54] Re: Kilka technik dla Amiga OS

@Don_Adan, post #50

"Wykorzystuję rejestry tylko Blittera." <- tak jak pisałem
[#55] Re: Kilka technik dla Amiga OS

@Hexmage960, post #53

To zrob przekierowanie na graphics.library.
Audio.device jest systemowe, to tez powinno dzialac na tych innych systemach Amigowych, o ile masz playera, ktory je wykorzystuje, a to trudne. Chyba tylko MaxTrax by sie nadawal.
Co do Vertical Interrupt to chyba AddIntSer czy cos takiego jest i tez chyba powinno dzialac na tych innych systemach Amigowych.
1
[#56] Re: Kilka technik dla Amiga OS

@Hexmage960, post #53

Spoko, po prostu napisz następnym razem że to działa na A1200 z AGA z kick 3.0+ i cześć. Nikt nie będzie miał o to pretensji. To ty napisałeś i dla takiego odbiorcy a nie innego.
[#57] Re: Kilka technik dla Amiga OS

@kiero, post #54

A czy według kolegów AddIntServer() jest funkcją systemową? Bo według mnie jest. Tylko na PowerPC może być problem.

Narzut w funkcjach graphics.library w OS 3.1 jest dość wysoki, a poza tym brakuje wielu funkcji rysujących (do których powstał OwnBlitter), albo w dokumentacji do systemu nawet polecają ich poprawę (WritePixelArray).

Czy jak dodam przekierowanie na graphics.library w sytuacji gdy ekran jest na RTG, to Panowie zgodzą się, że jest to pisane systemowo?

Rozumiem, że koledzy którzy piszą te uwagi działają na takiej platformie z RTG i chcą uruchomić moje demko.

@Asman

OK, napisałem że demo wymaga Amigi z OS 3.0, mając na myśli Amigę z chipsetem.
[#58] Re: Kilka technik dla Amiga OS

@Hexmage960, post #57

AddIntServer() jest jak najbardziej. Nie wiem dlaczego miałby być problem.

Narzut w funkcjach graphics.library w OS 3.1 jest dość wysoki, a poza tym brakuje wielu funkcji rysujących
I wszystko spoko, po prostu nie mów że piszesz pod system. OwnBlitter() nie powstał jako furtka dzięki której nagle wszystko co robisz bezpośrednio na sprzęcie/rejestrach nagle zacznie być systemowe.

albo w dokumentacji do systemu nawet polecają ich poprawę (WritePixelArray).
I dalej zgoda, ale nie nie usprawiedliwia walenia po rejestrach nazywania "pisaniem pod system".
2
[#59] Re: Kilka technik dla Amiga OS

@kiero, post #58

Kod w 99% korzysta z systemowych funkcji. Jest alokacja ekranu (LockPubScreen), alokacja kolorów, otwieranie okna (OpenWindowTagList).

Te moje nowe techniki po prostu wspomagają się koprocesorem graficznym, który jest w Amidze, by uzyskać ładniejszą animację i więcej funkcji graficznych.

Faktem jest, że zawężam grono odbiorców do Amig klasycznych.

Proszę zobaczyć sobie artykuł "OS Game Techniques" na Amiga Developer CD v1.1.

Przedstawione demo opiera się na moich technikach i póki co jest przeznaczone dla Amig z ECS/AGA i systemem w wersji 3.0 (jest niezbędny).

Pozdrawiam.
[#60] Re: Kilka technik dla Amiga OS

@Hexmage960, post #59

To nie tak sie robi wtedy.
Jezeli Twoje funkcje graficzne sa szybsze niz te w graphics.library.
To patchujesz graphics.library wlasnym programem, piszesz cos ala SetPatch.
A sam program korzysta z odwolan do graphics.library.
Czyli dla klasyka sa 2 programy uruchamiane wtedy, a dla innych systemow tylko 1 program.
Przykladem niech bedzie BlazeWCP:
link

A tutaj masz wersje graphics.library ze zintegrowanym BlazeWCP plus jeszxze jakies zmiany:

link

Oczywiscie Twoje funkcje graficzne musza byc w 100% kompatybilne z tymi, ktore sa w graphics.library.
1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem