kategorie: AMOS, Blitz
[#31] Re: Re:

@cramer, post #30

no właśnie mi się zawsze coś sypało przy kompilacji w tym amosie aga. Dałem sobie spokój. OCS rulez!
[#32] Re: Re:

@cramer, post #30

Czy ma ktoś AMOSA pod AGE i chciałby mi podpowiedzieć gdzie robię błąd .
Nie działają procedury ruchu w danym kierunku wywoływane po procedurze szukania drogi a*. A jeśli wywołam je bez a* to działają. Pewnie coś ze zmiennymi globalnymi popieprzyłem
Oczywiście dostarczę pliki .amos i .abk.


Ostatnia aktualizacja: 22.07.2024 16:30:24 przez cramer
[#33] Re: Re:

@cramer, post #32

Ej, pytanko takie. Skoro wiesz co to jest astar, i najpewniej sam go napisałeś (amos go chyba nie ma wbudowanego?), to nie myślałeś może żeby napisać to w jakimś normalnym języku programowania? Wtedy Ci odpadnie problem z dziwnie działającym kompilatorem i supportem AGA. ;) Sugerowałbym albo BlitzBasic albo C, bo tego kilka osób tu używa i coś podpowiedzą.

Ostatnia aktualizacja: 22.07.2024 20:57:56 przez teh_KaiN
1
[#34] Re: Re:

@teh_KaiN, post #33

Niestety sam nie napisałem a* (choć próbowałem) kod podesłał mi kolega tukinem. I z Nim też dużo rozmawialiśmy i testowaliśmy różne pomysły na to co chcę napisać. Okazało się, że w BB hires laced w 256 kolorach jest dość... uciążliwy. Na C się nie znam więc zostaje tylko AMOS. A nie chcę, żeby ktoś za mnie to napisał tylko chcę spróbować sam (chętnie z pomocą grupowiczów) i zobaczyć czy się da.
[#35] Re: Re:

@cramer, post #32

Amos AGA to taka ciekawostka, która na każdym kroku zaskakuje swoją nie kompatybilnością. Ale zawsze możesz napisać do autora programu o twoich niecnych planach, może uda się go przekonać do pracy nad twoją grą, a sam AmosAGA na tym skorzysta.
[#36] Re: Re:

@cramer, post #32

OK doszedłem do tego co było nie tak. Otóż na początku programu wczytywałem bank bobów a potem wszystkie zmienne. A że algorytm astar na AMOSa jest mega pamięciożerny to okazało się, że podczas obliczania drogi kasowała się część banku bobów. Wystarczyło do wyznaczeniu drogi ponownie wczytać bank bobów. Pewnie nie jest to rozwiązanie eleganckie ale działa
1
[#37] Re: Re:

@cramer, post #36

W Amosie wszelkie zmienne są 4-bajtowe. Tworzenie dużych tablic to spora uciążliwość. Odpowiednik a-stara, czyli algorytm DIJSKTRY to sam napisałem w Blitzu i właśnie wtedy musiałem ogarnąć obsługę list. Na statycznych tablicach, w dodatku bez obsługi struktur to jest tragedia. W Blitzu prościutko tworzy się strukturę, w tej strukturze dwie listy i można działać.

Co do Interlaced to już wyjaśnię o co chodzi. Nie ma tu wbudowanego trybu przeplotu, jak i podwójnego buforowania, czy bitmap interleaved. Trzeba go sobie ręcznie ogarnąć. W trybie BLITZ, czyli na ekranie niesystemowym jest do dyspozycji w AGA jedynie biblioteka DISPLAY. Dla OCS/ECS jest też lżejsza biblioteka SLICE, ale nie używam jej nigdy i tu w temacie nie ma znaczenia. Zresztą zarówno DISPLAY jak i SLICE nie mają obsługi przeplotu. Trzeba sobie go ręcznie wygenerować.

Wzorowałem się na kodzie EAROKa, ale u mnie wychodzą babole, a dokładniej wyświetlana jest co druga linia na ekranie. Nie powinno to tak wyglądać.

Jedyna możliwa opcja to użycie w trybie AMIGA biblioteki SCREEN, czyli typowo systemowy ekran Intuition. Tu jest obsługa przeplotu, lecz znowu nie bardzo wiem, jak załączyć Fetch Mode aby przyspieszyć blitter. W trybie BLITZ używam FMODE3, czyli najszybszej możliwej opcji (przykład: Electroman i Sołtys oraz niedoszły Pinball Dreams 2). Może kolega Hexmage960 podpowie, jak załączyć Fetch mode na ekranie Intuition? To by sporo rozwiązało. W DISPLAY po prostu w komendzie InitCoplist do parametru FLAGS dodawałem odpowiednio: $1000 dla FMODE 1 lub $3000 dla FMODE 3. FMODE 2 bardzo dziwny lustrzany obraz tworzy. Na pewno do czegoś jest przydatny, lecz jeszcze nie wiem do czego
1
[#38] Re: Re:

@cramer, post #36

Wystarczyło do wyznaczeniu drogi ponownie wczytać bank bobów.

Albo po prostu zmienić numer banku tak by się nie kasował/nie nadpisywał. W zależności od tego jak duża jest ścieżka, różna będzie ilość potrzebnej pamięci. W celu optymalizacji zamiast szukać z dokładnością do piksela, lepiej podzielić obszar na większe kafle i dopiero gdy jesteś już blisko celu, wówczas można wykonać jeszcze jedno, bardziej precyzyjne szukanie.
[#39] Re: Re:

@diobou, post #38

Cała mapa, astar oraz wyświetlanie bobów działają na "tablicowych" x,y które służą mi do opisania danego kwadratu mapy (czy jest pusty czy nie). A siatka ma pola 44x44 pixele. Czyli np x1=2,y1=3 co przekłada się na xe=88 i ye=132. A więc tablice w astar mają max 13x10 bo tyle ma siatka na ekranie.

Ostatnia aktualizacja: 23.07.2024 16:21:11 przez cramer
[#40] Re: Re:

@cramer, post #39

Macie jakieś patenty na widoczność postaci na mapie z elementami tła? Chodzi o to, żeby postać przed elementem zasłaniała go a jak jest za tym elementem to on zasłaniał ją. Teraz wszystkie elementy animowane (boby i sprajty) zasłaniają elementy tła niezależnie od położenia


Ostatnia aktualizacja: 06.08.2024 12:09:58 przez cramer
[#41] Re: Re:

@cramer, post #40

Jeśli wszystkie te elementy rysujesz co klatkę, to sortujesz współrzędne i rysujesz je od góry do dołu. Jeżeli jednak któryś element jest statyczny i rysowany jest rzadziej, to nie ma siły i musisz sobie gdzieś na boku trzymać albo liczyć który element jakie pola przesłania i narysować go po narysowaniu elementu przesłanianego.

Można by kombinować z komponowaniem maski przezroczystości, ale raczej nie będzie to szybsze.

Ostatnia aktualizacja: 06.08.2024 15:40:41 przez teh_KaiN
[#42] Re: Re:

@teh_KaiN, post #41

Można w Amosie ręcznie edytować maski shapów?
[#43] Re: Re:

@tukinem, post #42

A czy ja wyglądam na kogoś kto zna amosa? ;)

Nie mam pojęcia jak tam są shape'y zorganizowane i jak się dostać do ich danych. Bardziej myślałem o bitmapie roboczej, na którą zblitujesz maskę obiektu i wytniesz z niej kolejnym blitem odpowiedni fragment korzystając z maski zasłanianego obiektu, i potem takiej maski użyjesz w blicie ostatecznym. Na 95% trzeba by pod to ustawiać blitter ręcznie. Te wszystkie abstrakcje shape'ów, bobów, itd. są fajne do momentu kiedy chce się zrobić coś nieszablonowego - wtedy bardziej przeszkadzają niż pomagają.

Z tego co pamiętam to Proxy w Impsbru coś kombinował z komponowaniem masek, ale ta gierka jest napisana w C...
[#44] Re: Re:

@cramer, post #40

Takiego efektu sensownie działającego w automatycznym trybie na pewno nie uzuskasz. Musisz przejść w tryb manualny (Autoback 0).
Obiekty możesz pobrać komendą Get Bob (automatyczny transparent koloru 0) lub Get Block (z parametrem ,1, czyli z transparentem jak u Bob'a). Oba działają identycznie w trybie manualnym i zajmują podobną ilość pamięci, więc wybór jest z grubsza obojętny.
Rysujesz scenę na ekranie logicznym, robisz Screen Swap, czekasz na ramkę (Wait Vbl) i wtedy kopiujesz ekran fizyczny na logiczny. Ale metoda rysowania i kopiowania całego ekranu będzie wolna niezależnie od języka programowania (na 7 MHz). Najlepiej odświeżać tylko te obszary, które się zmieniły - tylko wtedy będzie działać sensownie.
No i nie musisz się bawić w wycinanie żadnych shape'ów - po prostu blittujesz obiekty wg warstw jak już teh_KaiN napisał.
[#45] Re: Re:

@Umpal, post #44

Zrobiłem tak... przeszkodę podzieliłem na dwie części - dolną (zawsze zasłanianą przez postać) oraz górną, która zasłania postać. Dolną wklejam jako grafikę na plansze i wczytuje całość jako plik .iff, a górną jako boba z ID wyższym od wszystkich postaci czyli zawsze postać będzie za nią. No i działa bez przeliczania czegokolwiek. Chyba czasem najprostsze rozwiązania są najlepsze ale oczywiście bardzo dziękuję za Wasze sugestie
1
[#46] Re: Re:

@cramer, post #45

Tak samo rozwiązałem sprawę w moim duck hunt - tam też trawa, droga, drzewa, itp to boby o różnych ID, które mają przykrywczać kaczki czy psa. Jednak na początku etapu jest animacja psa ktory idzie droga, a nastepnie przeskakuje za trawe, ktora go zakrywa do połowy - tutaj w locie" zmieniam" ID boba psa.
Zastanawaiałem się czy jest może bardziej eleganckie rozwiązanie ;) bo to jest takie zbyt proste żeby było najlepsze :)
1
[#47] Re: Re:

@marggines, post #46

Tutaj pewnie będę musiał coś podobnego robić bo chcę dołożyć opcję przeskakiwania przez mniejsze przeszkody. Czekam na animację, przeskoku. Dodam ją jeśli poradzę sobie (z pomocą bardziej doświadczonych amosowców) z bagami wyświetlania większej ilości bobów.
[#48] Re: Re:

@cramer, post #47

No niestety w AMOSie nie jestem w stanie dalej dłubać w tym projekcie przede wszystkim względu na brak możliwości kompilacji programu (AGA). Dzięki pomocy kolegi tukinem staram się teraz to co napisałem w AMOSie (a jest ruch postaci z algorytmem A*, wybór postaci, tworzenie banków różnych postaci z gry czy zasłanianie postaci przez obiekty) przenieść do BlitzBasica. Dziękuje, za wszystkie rady i komentarze. I zapraszam do działa BLITZ bo tam będę kontynuował swoją walkę z amigową wersją Gear Tactics
5
[#49] Geras Tactics
Z pomocą kilku osób zacząłem w AMOSie pisać Gears Tacyics na Amigę. Jednak napotkałem tam problemy związane z wersja AGA AMosa więc za namową tukinem'a przeniosłem się na Blitz Basica. No i tu jest dużo trudniej bo to mój pierwszy program w tym języku. Na razie mam wycinanie różnych shapów postaci, strzałów, znaczników itd z zapisem tego na dysk i poruszanie się postaci GDPL po ekranie 640x512 hires+laced. Na emulatorze interlaced jest niezauważalny (dzięki za kod tukinem). Pozostaje mi do przepisania z AMOSa... generowanie mapy z przeszkodami, wczytywanie tej mapy do programu głównego i jej rysowanie, algorytm A* do szukania najkrótszej drogi. A potem wybór działania postaci (2 akcje - ruch lub strzał), strzelanie, krwawienie, zasłanianie postaci przez obiekty terenu, zmiana postaci... i to będzie zdaje się wszystko w głównym "silniku" gry. Potem dodanie scenariuszy, zadań, zapis postępów w grze na dysku, granie na dwie osoby lub przeciwko "AI" itd. Wiem, że projekt duży i ambitny ale mam czas, nigdzie mi się nie spieszy i mam nadzieję, że będę mógł znowu liczyć na pomoc na forum.
Zacznę więc od pytania... sprawdzam shapy przez ich wyświetlanie po kolei od nr 1 ale przy pozycji 52 wyskakuje mi błąd bufora. Trochę mnie to zaniepokoiło, że są jakieś problemy z ilością shapów.
[#50] Re: Geras Tactics

@cramer, post #49

Przypomnę. Jeśli wyświetlasz shapy przez BBlit, musisz najpierw wyczyścić bufor funkcją Unbuffer, bo ci braknie bufora, a poza tym tak stawiasz sobie boba, co nie jest mądre przy takiej liczbie. Prosty kod:

BitmapOutput B
Use Bitmap B
For i.w = 0 to 99
   Cls
   VWait 10
    Locate 20,0
   NPrint "NR: ",i
   If Peek.w(Addr Shape(i) )<>0  
      Blit i,0,0 ; BLIT! 
   EndIf
   MouseWait
Next


Jak nie wyświetli shapa, to nie wywali się błąd, tylko będzie pusto na ekranie.

Ostatnia aktualizacja: 08.09.2024 11:01:24 przez tukinem
[#51] Re: Geras Tactics

@tukinem, post #50

ale tu jest unbuffer...

WBStartup

#WIDTH = 640
#HEIGHT = 512
#HIRES = $8000
#INTERLACED = $4

db.b = 0 ; zmienna podwojnego buforowania
X.q = 320
Y.q = 256
G.w = 0

For i.l = 0 To 1
BitMap i,640,512,8
Buffer i,16384
Next

LoadBitMap 0,"plansza.iff",0
CopyBitMap 0,1

; LADUJE BANK GRAFIK
LoadShapes 0,"BOBY_0.DAT"

; TWORZE EKRAN INTUITION
Screen 0,0,0,#WIDTH,#HEIGHT,8,#HIRES | #INTERLACED,"GT",1,0
LoadBitMap 0,"plansza.iff",0
Use Palette 0

frame=1
.PETLA_GLOWNA
While NOT RawStatus($45) ; dopoki nie wcisniemy ESC

; -----------PODWOJNE BUFOROWANIE
VWait
ShowBitMap db
db = 1-db
UnBuffer db
Use BitMap db
; --------------------------------

BBlit db,frame,200,200

frame=frame+1
frame = QWrap(frame,0,60)
VWait 50

Wend
End
[#52] Re: Geras Tactics

@cramer, post #51

While NOT RawStatus($45) ; dopoki nie wcisniemy ESC

; -----------PODWOJNE BUFOROWANIE
VWait
ShowBitMap db
db = 1-db
UnBuffer db
Use BitMap db
; --------------------------------

BBlit db,frame,200,200

frame=frame+1
frame = QWrap(frame,0,60)
VWait 50

Wend


Tu masz VWait 50 na końcu, a potem po powrocie do początku znowu masz VWait. Niepotrzebnie.

Skoro przekraczasz bufor, to stwórz sobie większy przy funkcji Buffer, ale radzę przesiąść się na Blit.

Możesz też Buffer i,16384 zamienić sobie na Queue i,2. Później zamiast Unbuffer db wpisujesz UnQueue db, a zamiast BBlit piszesz QBlit. Wtedy masz boby, które nie zapamiętują tła i po użyciu UnQueue będziesz mieć wyczyszczony obszar po bobie. BBlit tu jest zupełnie niepotrzebny.
[#53] Re: Geras Tactics

@tukinem, post #52

Do sprawdzenia zmiana Buffer na Queue działa spoko ale już do samej gry potrzebuje zapamiętywania tła pod "bobem". No i zwiększenie dwukrotne bufora rozwiązało sprawę. Dziękuję
[#54] Geras Tactics
Z pomocą kilku osób zacząłem w AMOSie pisać Gears Tacyics na Amigę. Jednak napotkałem tam problemy związane z wersja AGA AMosa więc za namową tukinem'a przeniosłem się na Blitz Basica. No i tu jest dużo trudniej bo to mój pierwszy program w tym języku. Na razie mam wycinanie różnych shapów postaci, strzałów, znaczników itd z zapisem tego na dysk i poruszanie się postaci GDPL po ekranie 640x512 hires+laced. Na emulatorze interlaced jest niezauważalny (dzięki za kod tukinem). Pozostaje mi do przepisania z AMOSa... generowanie mapy z przeszkodami, wczytywanie tej mapy do programu głównego i jej rysowanie, algorytm A* do szukania najkrótszej drogi. A potem wybór działania postaci (2 akcje - ruch lub strzał), strzelanie, krwawienie, zasłanianie postaci przez obiekty terenu, zmiana postaci... i to będzie zdaje się wszystko w głównym "silniku" gry. Potem dodanie scenariuszy, zadań, zapis postępów w grze na dysku, granie na dwie osoby lub przeciwko "AI" itd. Wiem, że projekt duży i ambitny ale mam czas, nigdzie mi się nie spieszy i mam nadzieję, że będę mógł znowu liczyć na pomoc na forum.
[#55] Re: Geras Tactics

@cramer, post #53

Przepraszam za zamieszanie ale wiadomości od #49 miały być w dziale Blitz. Czy admin mógłby je tam przenieść albo je skasować? (tukinem odpowiedział na moje pytanie, rozwiązując problem)
[#56] Re: Geras Tactics

@cramer, post #54

Czy w Blitz można ustawić kolor jako półprzeźroczysty?
Potrzebuje tak zrobić środek tej "zębatki"



Ostatnia aktualizacja: 09.09.2024 09:33:02 przez cramer
[#57] Re: Geras Tactics

@cramer, post #56

To raczej nie sprawa Blitza, AMOSa, jakiegokolwiek innego języka czy biblioteki tylko specyfiki układów OCS/ECS/AGA i trybów z indeksowaną paletą kolorów. Tak po prostu częściowej przezroczystości się nie zrobi, bo po nałożeniu półprzezroczystego koloru na jakiś inny kolor powstałby kolor, którego nie ma w palecie. Taka specyfika tego rodzaju grafiki. Zabawa z przezroczystościami to tylko na karcie graficznej w trybach 15, 16, 24-bitowych.
Oczywiście można pomyśleć o różnych trickach, udawaniu true color (większość dem na AGA to pokazuje). Także na AGA można coś tam poudawać. Ale to już trzeba się mocno nakombinować, coś poświęcić żeby coś uzyskać.

W takich "paletowych" trybach półprzezroczystość często udawało się robiąc taką "szachownicę" z czarnych pixeli albo szybko mrugało się czarnym kolorem. W ten sposób były np. rysowane cienie w różnych salonowych chodzonych bijatykach. Osobiście tego mrugania nie lubię, bo mnie irytuje. Ale taka "szachownica" nie jest zła. Tym bardziej, że używasz wyższej rozdzielczości (Hires Laced). Ja bym to tak zrobił i niczym się nie przejmował, bo to jest detal. Takie rozwiązanie stosowali wielcy tego świata w czasach gier w "paletowych" trybach więc i my możemy.

Ostatnia aktualizacja: 09.09.2024 09:51:49 przez MDW
1
[#58] Re: Geras Tactics

@cramer, post #56

Tak jak napisal MDW nie zrobisz teog na AGA w latwy sposob. Do polowy lat 90tych wiekszosc sprzetu nie miala wsparcia dla przezroczystosci. Popularne byly wlasnie takie warstwy "co drugi pixel" (szachownica jak to nazwal MDW). Zobacz jak to wyglada a praniu np na konsoli Sega Saturn:
https://mattgreer.dev/articles/sega-saturn-and-transparency/

Jakbys chcial zrobic udawana przezroczystosc na AGA to w zasadzie w najprostszej wersji musisz liczyc sie z tym ze uzyjesz tylko polowe polorow - 128, a druga polowe zostawiasz sobie na dynamiczne tworzenie kolorow w palecie, przez podbicie bazowych kolorow o zadane wartosci skladowych RGB. Ogolnie bardzo nieprzyjemne dziubanie. Pol biedy jak chcesz zrobic cos statycznego na ekranie w ten sposob, ale jak kursor myszki chcesz tak wykorzystac, no to musisz przygotowac funkcje ktora to caly czas przelicza po zmianie polozenia kursowa na ekranie, lub w ogole zmiany czegokolwiek na ekranie w zasiegu tego obiektu ktory ma byc przezroczysty.
[#59] Re: Geras Tactics

@Axi0maT, post #58

Nie wiem czemu mimo, że pisałem w dziale BLITZ ciągle wkleja moje posty do działu AMOS... HELLOŁ ADMIN!
Ale przy okazji pytania trafiłem na...
https://www.youtube.com/watch?v=azc8ZddZAZM&t=2282s
czyli jednak się da i to w AMOSIE i nie jest to szachownica tylko prawdziwa półprzeźroczystość
1
[#60] Re: Geras Tactics

@cramer, post #59

Ciekawe :). Nigdy nie używałem tego polecenia Set Bob:


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