[#1] procedury do odczytu obrazków IFF
Dla porządku przeniesione do osobnego wątku:
[#2] Re: Strefa twórców - nowy dział na forum
Witam!!!

Tak się złożyło, że w tej chwili mam coś do pokazania, są to gotowe procedury do odczytu obrazków IFF napisane w języku C z wstawkami w asemblerze. Napisałem je wczoraj.

http://members.upcpoczta.pl/r.szacki/wczytaj.txt

Jeśli ktoś chce te procedury wykorzystać w swoich projektach niech da znać - doślę wstawki w asemblerze i plik nagłówkowy.

Zdrowie mi dopisuje jak nigdy, koledzy! Żywię nadzieję, że wkrótce zobaczycie moje ukończone projekty. Jeszcze dziś będę kontynuował pracę.

A pomysł na dział poświęcony twórczości to strzał w dziesiątkę. Cieszę się, że złożyło się to z moim zdrowieniem, które osiągnęło już bardzo zaawansowany poziom.
[#3] Re: procedury do odczytu obrazków IFF

@recedent, post #1

Dziękuję.

Muszę przyznać, że te procedury udały mi się wyjątkowo, są czytelne, są napisane w dobrym stylu programowania. Walczyłem długo z tym zagadnieniem.

Postaram się umieścić brakujące elementy do pobrania. Śledźcie na bieżąco ten wątek, bo zamierzam udostępniać coraz to więcej zaawansowanych procedur, programów użytkowych oraz ukończonych projektów gier.

Pozdrawiam.
[#4] Re: procedury do odczytu obrazków IFF

@Hexmage960, post #3

Bardzo się cieszę z tego, że dopisuje Tobie zdrowie. Dobre samopoczucie to połowa sukcesu.
Gdybyś potrzebował jakiejkolwiek pomocy przy ukończeniu swoich projektów to możesz śmiało na mnie liczyć.
[#5] Re: procedury do odczytu obrazków IFF

@Leon, post #4

Jesteś bardzo miły, bardzo Ci dziękuję! Cieszę się, że mogę na kogoś liczyć.
[#6] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #2

A ja miałbym pytanie w związku z tematem. Mianowicie, jak wyświetlić obrazek na ekranie, tak żeby zajmował on cały ekran i nie było widać belki? I czy można na innym layerze takiego ekranu wyświetlić spirite'a? Czy może lepiej byłoby otworzyć ekran, na nim okno i dopiero potem cokolwiek wyświetlać? Kod źródłowy byłby bardzo pomocny:)

Pzdr
[#7] Re: Strefa twórców - nowy dział na forum

@aszu, post #6

Mianowicie, jak wyświetlić obrazek na ekranie, tak żeby zajmował on cały ekran i nie było widać belki?

Otwierasz ekran bez belki:
W systemie 1.3 ustawiasz w polu Type struktury NewScreen flagę SCREENQUIET. Po otwarciu ekranu możesz też wywołać funkcję ShowTitle( screen, FALSE );

W systemie 2.0+ ustawiasz podczas otwierania ekranu tagi SA_ShowTitle na FALSE oraz SA_Quiet na TRUE.

I czy można na innym layerze takiego ekranu wyświetlić spirite'a? Czy może lepiej byłoby otworzyć ekran, na nim okno i dopiero potem cokolwiek wyświetlać?

To zależy co chcesz wyświetlić. Jeśli chodzi Ci o coś takiego jak w grach Sim City, bądź Colonization gdzie komunikaty wyświetlane są w odrębnych okienkach to możesz użyć właśnie okienek.

Jeśli chcesz utworzyć okienka ze swoją grafiką użyj okienek bez ramki (borderless) lub/i z własną bitmapą (superbitmap).

Ostatnia aktualizacja: 10.05.2014 23:30:46 przez Hexmage960
[#8] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #7

Dziękuję za odpowiedź. Dopiero zaczynam uczyć się C, więc jeszcze długa droga przede mną.

A co do tego co miałem na myśli, to raczej chodziło mi nie o wspomnianą grę Colonization, lecz raczej prosta platformówkę, gdzie obrazek jest ustawniony jako tło, a po planszy porusza się jakiś sprajt.

Mogłbyś mi wyjaśnić to:

http://www.ppa.pl/forum/programowanie/30245/zamykanie-bibliotek-w-c#m427374
[#9] Re: Strefa twórców - nowy dział na forum

@aszu, post #8

A co do tego co miałem na myśli, to raczej chodziło mi nie o wspomnianą grę Colonization, lecz raczej prosta platformówkę, gdzie obrazek jest ustawniony jako tło, a po planszy porusza się jakiś sprajt.


Najlepiej będzie jak użyjesz tzw. Bobów (Blitter object = obiekt blittera). Są to obiekty graficzne rysowane przez układ rysujący w Amidze - Blitter. Ich zaletą jest dowolny rozmiar oraz dowolna liczba kolorów (do 32 na kościach OCS/ECS i do 256 na kościach AGA).

Jak to najlepiej zrealizować w języku C?

Otóż ja sam przez długi czas miałem problem z Bobami w języku C. Spowodowane to było kilkoma czynnikami. Mianowicie system Amigi korzysta często z Blittera więc jeśli chcesz napisać platformówkę z dużą ilością obiektów animowanych działającą systemowo to możesz napotkać problem z szybkością odrysowywania.

Rozwiązanie, które poniżej opiszę wymaga wiedzy w zakresie programowania Amigi. Ja obecnie, po napisaniu procedur czytających IFF mam zamiar stworzyć szybki i elastyczny system Bobów i podzielić się kodem źródłowym. Zatem jeśli czegoś nie rozumiesz nie martw się, niedługo udostępnię kod źródłowy.

Najpierw załóż własny serwer wygaszania pionowego funkcją AddIntServer(). Dzięki temu Twój program będzie dostawać komunikaty o wygaszaniu pionowym, czyli 50 razy na sekundę w natywnych trybach ekranu. Dzięki temu możesz zsynchronizować animację. Równocześnie system będzie działać swobodnie i szybko.

Teraz - jaki sposób rysowania Bobów wybrać?

Istnieje wiele sposobów, przedstawię dwa:

1. Biblioteka graphics.library udostępnia system Bobów - nie jest on może szybki, ale bardzo łatwy w obsłudze. Bardzo dobrze współpracuje z własną obsługą wygaszania pionowego, którą przedstawiłem.

2. Można też inaczej, i ten sposób postaram przedstawić szczegółowo wkrótce. Będzie to własny system Bobów. Użyję najprawdopodobniej rysowania z bezpośrednim użyciem Blittera. Taki sposób jest zalecany przez podręczniki do pisania gier na Amidze.

--
Na koniec gorąco zachęcam Cię do zakupu płyty Amiga Developer CD v2.1. Znajdziesz tam wszystkie materiały potrzebne amigowemu programiście. Jest pełno przykładów w języku C.

Ostatnia aktualizacja: 11.05.2014 13:11:19 przez Hexmage960
[#10] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #9

Moja nauke C zacząłem od kupna płyty, o której piszesz:)
Jestem na początkowym etapie i głównie staram się korzystać z ROM Kernel Reference Manual.
Idzie mi dość wolno, ponieważ nie mam tyle czasu, co kiedyś, niestety. Do tego, o czym wspomniałeś, to jeszcze długa droga, ale na pewno będę się zwracał co jakiś czas o pomoc, naturalnie jeśli nie masz nic przeciwko:)
[#11] Re: Strefa twórców - nowy dział na forum

@aszu, post #10

Jest mi bardzo miło, że mogłem pomóc! Pisz śmiało, jeśli będziesz miał z czymś problem.
[#12] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #9

Z mojego osobistego doświadczenia szybszym rozwiązaniem od bobów może być funkcja BltBitMap (lub BltMaskBitMapRastPort dla przezroczystości), czyli proste blitowanie obrazków. Rozwiązanie ma jednak parę wad, choć część można wykluczyć jeśli danych ficzerów bobów nie potrzebujesz (co daje faktycznego kopa) albo sam o nie zadbasz, na szybko te ważniejsze:

- brak wbudowanego sortowania obiektów
- brak wbudowanego przycinania na krawędziach ekranu i bardzo łatwo przez to wejść na nieswoją pamięć
- brak wbudowanego sprawdzania kolizji

Jeżeli rozważamy grę typu bomberman to lepiej pójść w zwykłe blitowanie - postacie nigdy nie wychodzą za ekran, sprawdzanie kolizji dla bomb i ognia łatwiej zrobić z palca, sortowanie to rzecz, której się raczej nie zauważy, ale też nie problem to z palca dorobić.

W Castlehacku trwa burzliwy romans z różnymi technikami blitowania: najpierw robiliśmy bitmapami, żeby potem pójść w boby, bo odkryliśmy w nich łatwą przezroczystość i pełno rzeczy robionych z automatu, po czym wróciliśmy do bitmap, gdyż są jednak bardziej wydajne. Obecnie rozważamy powrót do bobów, gdyż przycinanie na końcach ekranu już nam trochę dało w kość, ale jednak chyba zostaniemy przy bitmapach, bo widać światełko w tunelu.

Co jakiś czas jeden system wydaje się być ostatecznie lepszy niż drugi, po czym następuje przesiadka i po pewnym czasie pojawiają się miażdżące plusy poprzednio użytego rozwiązania. Dla takich chwil warto żyć ;)
[#13] Re: Strefa twórców - nowy dział na forum

@teh_KaiN, post #12

Przecież jeżeli macie ekran systemowy z layerem i rastportem to przycinanie jest automatyczne. Można też zmniejszyć obszar przycinania, polecam lekturę.
[#14] Re: Strefa twórców - nowy dział na forum

@MorphOS_pl, post #13

Potwierdzam, BltBitMapRastPort() przycina jeśli jest powiązany Layer z RastPortem. Każde okienko (Window) ma swój Layer tworzony automatycznie przy tworzeniu okienka.

Nie musi to być też koniecznie ekran systemowy, może też być własny View. Wtedy Layer trzeba utworzyć i przypisać ręcznie.

Istotne: Własne layery utworzone przez bibliotekę layers.library można używać tylko na własnym View! Dla ekranów systemowych jedyną drogą jest tworzenie okienek systemowych Window.
[#15] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #14

O, a tego nie wiedziałem, bo layersów jeszcze nie używałem. :)

Swoją drogą ciekawy jestem jak będzie to wyglądało wydajnościowo jeśli by przycinanie zrobić z palca a layerami. Nic to, trza zrobić benczmark. Jak będę coś na ten temat wiedział to się pochwalę wynikami.
[#16] Re: Strefa twórców - nowy dział na forum

@teh_KaiN, post #12

@Hexmage960

Zwyczajowo trochę konstruktywnej krytyki z mojej strony :) Oczywiście nic na siłe i nie musisz się stosować do moich przemyśleć, najważniejsze to fun i rozwijanie siebie.

Kod według mnie jest lepiej czytelny jeśli używasz jednego języka, a tu widzę że zmienne są po angielsku a nazwy funckji po polsku. Ja bym wszystko dał po angielsku (mimo że nie znam go tak dobrze jakbym chciał ). Trzymałbym się jednego języka.

Przydałay się chociażby zdawkowa informacja co dana funckja ma robić, na pewno wielu osobom by to się przydało i zaoszczędziło czasu, bo nie wszyscy zaraz będą zadawać pytania, będą woleli siedzieć i rozwiązywać zagadki.

To tyle na tą chwilę :)


@teh_KaiN
Jak duże obiekty blitujesz? Chodzi mi o największy obiekt jaki się może pojawić w grze. Rozmiar w pikselach
[#17] Re: Strefa twórców - nowy dział na forum

@asman, post #16

16x24 aktualnie i jeśli coś innego rozmiaru się pojawi to bardzo sporadycznie jakieś 32x32 lub 48x48. Nie wiem, jakaś eksplozja po bossie, czy coś.
[#18] Re: Strefa twórców - nowy dział na forum

@asman, post #16

Kod według mnie jest lepiej czytelny jeśli używasz jednego języka, a tu widzę że zmienne są po angielsku a nazwy funckji po polsku. Ja bym wszystko dał po angielsku (mimo że nie znam go tak dobrze jakbym chciał ). Trzymałbym się jednego języka.


Spolszczeń jest o wiele więcej. Np. zmienna "uchwyt", "wlasnosc", "nazwa". Nawet spolszczyłem NULL - WSK_ZERO (zerowy wskaźnik) i stałe - BLAD, BEZ_BLEDOW. Generalnie kod jest przeznaczony dla polskiego programisty, więc najpewniej będę trzymać się polskiego (zarówno w identyfikatorach i komentarzach), ale jeszcze się zobaczy.

Przydałay się chociażby zdawkowa informacja co dana funckja ma robić, na pewno wielu osobom by to się przydało i zaoszczędziło czasu, bo nie wszyscy zaraz będą zadawać pytania, będą woleli siedzieć i rozwiązywać zagadki.


Rzeczywiście, komentarze są zdawkowe: w poprawkach, które robiłem parę dni temu do kodu dodałem komentarze do prototypów funkcji. Zatem komentarzy będzie wiecej.

Dziękuję za trafne uwagi.
--

Wczoraj udało mi się opracować podstawę systemu wyświetlania za pomocą własnego View, oraz rysowania za pomocą RastPortu. Zrobiłem też plan działania.

Dodałem swoje stałe, które będą kontrolować kompilację np. __SYSTEM__ - jeśli jest ustawiony na 1 oznacza to, że żądamy użycia tylko systemowych rozwiązań, kiedy jest ustawiony na 0, można korzystać bezpośrednio z rejestrów sprzętowych.

W kolejności będę zabierał się za:
- własną obsługę wiadomości z input.device,
- własną obsługę przerwania wygaszania pionowego,
- system Bobów (najpierw przetestuję te z graphics.library zanim zrobię własny system),
- no i najpewniej wprowadzę jakieś podwójne buforowanie.

W międzyczasie jakaś konwersja szablonów IFF do klatek animacji Bobów by się przydała.

Jak już uporam się z tym wszystkim to droga do klepania gierek będzie stać otworem :) Postaram się Was na bieżąco informować o postępach, kiedy procedury będą już przetestowane i gotowe do publikacji.
[#19] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #18

Spolszczeń jest o wiele więcej. Np. zmienna "uchwyt", "wlasnosc", "nazwa". Nawet spolszczyłem NULL - WSK_ZERO (zerowy wskaźnik) i stałe - BLAD, BEZ_BLEDOW. Generalnie kod jest przeznaczony dla polskiego programisty, więc najpewniej będę trzymać się polskiego (zarówno w identyfikatorach i komentarzach), ale jeszcze się zobaczy.


To tylko mało istotna sugestia z mojej strony, ale języka angielskiego z kodu nie pozbędziesz się całkowicie. Chyba, że planujesz jeszcze spolszczyć słowa kluczowe języka C. Tak samo jak nie zmienisz nazw funkcji systemowych. A taki "polsko-angielski" kod będzie mimo wszystko mniej czytelny...
[#20] Re: Strefa twórców - nowy dział na forum

@teh_KaiN, post #17

A nie łatwiej użyć troszkę większego ekranu ? Wtedy przycinanie odpada, bo obiekt chowa się za oknem wyświetlania.

Jeśli będziesz miał problem i lub dalsze pytania to proponuje utworzyć nowy wątek o tym i przenieść te posty związane z przycinaniem, bo nie chciałbym zaśmiecać.
[#21] Re: Strefa twórców - nowy dział na forum

@mschulz, post #19

@Asman
@MSchulz

Zrobiłem jak radziliście, przepisałem kod na angielski. :) Komentarze do kodu pozostawię za to po polsku.
[#22] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #2

Poproszę plik nagłówkowy, masz taki skrypt do png?
[#23] Re: Strefa twórców - nowy dział na forum

@Artur Jarosik, post #22

Poproszę plik nagłówkowy


Wrzucę go przy okazji update.

masz taki skrypt do png?


Masz na myśli, czy mam procedury odczytu obrazków PNG?
Nie, nie mam obecnie gotowych procedur, choć czytywałem dokumentację do PNG.
[#24] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #23

Witam serdecznie,

Nastąpiło pewne wydarzenie w związku z moją pracą. Cytuję z działu prywatnego.

No i udało mi się przygotować program IFFTOOL.

Cel jego jest prosty: łączyć pliki IFF ILBM w jeden plik (tzw. konkatenację).

Program w ostatecznej wersji jest pozbawiony GUI, skupiłem się na funkcjonalności. Wywołuje się go z linii poleceń. Składnia jest prosta. Opis obsługi programu jest zawarty w archiwum razem z kodem źródłowym.

Skrótowo napiszę, że trzeba stworzyć plik tekstowy z listą obrazków do połączenia i zapodać go programowi IFFTOOL (razem z nazwą pliku docelowego). Szczegółowy opis w plik ifftool.readme.

Oto link do archiwum:
http://members.upcpoczta.pl/r.szacki/IFFTool/IFFTool.lha

Zastosowanie programu - potrzebuję go do importu grafiki do swoich projektów gier. Dla zwykłego użytkownika się póki co nie przyda, chyba że istnieją programy do oglądania zawartości wszystkich obrazków z plików CAT.

Póki co jak spróbujecie załadować plik stworzony przez IFFTOOL np. do Personal Painta to wczytany zostanie tylko pierwszy obrazek w zbiorze.

Jeśli znajdziecie błąd proszę dać znać w tym wątku lub na e-mail.


Pozdrawiam.
[#25] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #24

Jest taki program iffar. Robi to samo (bez ograniczeń do ilbm), ale bez tworzenia plików tekstowych. Używa się go podobnie do archiwizerów, czyli prosto i bez kombinacji. Jako, że jest podane źródło, więc można wykorzystać. Program jest stary, więc nie korzysta z iffparse, więc możesz na tym polu zadziałać.
[#26] Re: Strefa twórców - nowy dział na forum

@cholok, post #25

Jeśli chodzi o to, że dane podajemy w formie ciągów w pliku tekstowym a nie wyboru z requestera, to tak zrobiłem ze względu na to, że program ma służyć do wielokrotnego archiwizowania plików o tych samych nazwach. Zależy mi na tym, żeby nie wybierać za n-tym razem wszystkich plików w requesterze, tylko by program zrobił to automatycznie. Jak archiwizujemy np. 50 małych obrazków to ma znaczenie.

Także wybrałem takie rozwiązanie. Oczywiście można zrobić program, który manipuluje na istniejących plikach CAT, ale jest to trudniejsze zadanie - i nie odczuwam w tej chwili konieczności wprowadzania takich możliwości do programu.

Jeśli chodzi o łączenie innych plików niż ILBM (np. 8SVX) to akurat żaden problem, by to dodać - i dodam to kiedy zajdzie potrzeba (np. będę wprowadzał dźwięki do gry).

Program ma służyć do łączenia danych celem importowania ich do gier. Niestety żaden program malarski (co dziwi) nie oferuje możliwości tworzenia takich zbiorów (są tylko animbrushe, ale to chyba nie to o co mi chodzi).
[#27] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #26

Czy lha ma requester z wyborem plików? Nie. A mimo to można prosto i wygodnie archiwizować. Chodzi o to byś wykorzystał np. jokery.
[#28] Re: Strefa twórców - nowy dział na forum

@cholok, post #27

Tak, z lha to fakt, choć w przypadku mojego programu liczy się też kolejność plików.
[#29] Re: Strefa twórców - nowy dział na forum

@Hexmage960, post #24

mam tylko nadzieje, ze laczenie odbywa sie do IFF CAT lub IFF LIST
[#30] Re: Strefa twórców - nowy dział na forum

@michal_zukowski, post #29

Zgadza się.
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