kategoria: Blitz
[#91] Re: Nauka Blitz Basic

@tukinem, post #90

"If Warunek1 AND warunek2 OR Warunek3 AND Warunek4"

od lewej do prawej jezyki interpretuja kod

- jesli warunek1 = false, dalsza czesc nie zostanie sprawdzona, bo nie jest juz spelniony podstawowy - pierwszy..

w amosie tez tak to powinno dzialac swoja droga..

to powinno byc cos w stylu:
if WAR1 AND WAR2 THEN (...) ELSE IF WAR3 AND WAR4 THEN (...)
(pseudokod bo nie znam blitza)

dla jasnosci:
If Warunek1 AND warunek2 OR Warunek3 AND Warunek4
oznacza:

jesli warunek1 jest true ORAZ "warunek2 jest true, ale jesli warunek2 nie jest true to jesli warunek3 i warunek4 sa true"

i jeszcze prostsze wyjasnienie:
jesli masz pieniadze (warunek1) to kup ser, a jak sera (warunek2) nie bedzie to kup pomidory (w3) jesli sa ladne (w4)

wizualizujac to nawiasami (ktore sa zbedne) to masz dokladnie cos takiego, a nie to co myszlisz: If (Warunek1) AND (warunek2 OR (Warunek3 AND Warunek4))



Ostatnia aktualizacja: 29.09.2022 13:10:13 przez juen
[#92] Re: Nauka Blitz Basic

@juen, post #91

No to w amosie AND działa jak mnożenie a OR jak dodawanie patrząc po kolejności wykonywania działań. Wiem bo już przywykłem do tego.
[#93] Re: Nauka Blitz Basic

@tukinem, post #92

zapewne jest tak jak mowisz, ale jest to mocny dysonans miedzy innymi jezykami i jak widzisz wprowadzil Cie w blad :)
[#94] Re: Nauka Blitz Basic

@juen, post #93

Zauważyłem że szybko mi idzie przestawianie się z Amosa na BB. Już Sokobana prawie przepisałem chociaż ma problem na kick 1.3 z DualPlayfield.
[#95] Re: Nauka Blitz Basic

@tukinem, post #94

Mnie zastanawia po co rozwija się AmiBlitz jak ludzie i tak korzystają ze starego BB? Szkoda tego, co próbuje to rozwijać.
[#96] Re: Nauka Blitz Basic

@tukinem, post #1

Mam problem z utworzeniem poprawnie ADFa z grą napisaną w Blitzu.

1. Skompilowałem kod do pliku.
2. W DF0:S/Startup-sequence umieściłem nazwę pliku do uruchomienia
3. do DF0:LIBS dograłem następujące pliki:
- diskfont.library
- icon.library
- info.library
- mathieeedoubbas.library
- mathieeedoubtrans.library
- mathtrans.library
- translator.library
- version.library

Czy coś jeszcze należy dodać? Czy może coś jest niepotrzebne?

Gra lubi się zawiesić oraz w kodzie jest problem z obsługą komendy If WriteFile do nadpisywania pliku. Dodatkowo problem jest z wyświetleniem ekranu DualPlayfield pod kickstartem 1.3. To tyle, co zdążyłem zauważyć. Gra pisana była w Ultimate Blitz Basic 2. Zauważyłem też, że komenda Timer i ResetTimer, której użyłem nie działa w zwykłym Blitz Basic 2.

Jeśli ktoś chce potestować, to proszę:
Link do www i proszę wybrać soko-blitz.adf
[#97] Re: Nauka Blitz Basic

@tukinem, post #96

W katalogu L przyda się plik disk-validator (dla kick1.3)
[#98] Re: Nauka Blitz Basic

@Norbert, post #97

Wrzuciłem i dalej to samo.

Dodatkowo mam problem odnośnie wczytywania imienia do listy highscore.

Podczas gry zostaje kilka razy wciskany ENTER

Później przy zapisie do hiscore mam:
BitMapOutput 0
NPrint"Please enter your initials:"
BlitzKeys On
BitMapInput
VWait 50
name$=edit$(3)

niestety wyłapywany jest wcześniejszy stan wciskania klawiszy, co wpływa na wpisany tekst, a dodatkowe wcześniejsze ENTERy potwierdzają wpis.

Próbowałem różnych metod zresetowania bufora klawiatury i nic :/ ma ktoś jakieś pomysły? Uruchomiłem grę z przejściem do konkretnego momentu, żeby nie wciskać enterów, jednak po powciskaniu kilku liter pojawiają się później przy prośbie o podanie name$. Próbowałem zaraz po przejściu do trybu Blitz dać BlitzKeys Off oraz BlitzKeys On, ale to na nic. Da się to jakoś ten bufor klawiatury wykasować?

Chodzi mi coś odpowiedniego do amosowego Clear Key.

Ostatnia aktualizacja: 02.10.2022 20:14:06 przez tukinem
[#99] Re: Nauka Blitz Basic

@tukinem, post #98

Wszystkie te problemy zostały rozwiązane.

Po pierwsze aby wykasować "entery" użyłem pętli
While RawStatus($44)=0
  name$=edit$(3)
Wend


dzięki temu pozbyłem się wczytywania z gry zbędnych "enterów"

Po drugie, problemem nie działania na kicku 1.3 i zwiech był brak przejścia z trybu BLITZ do AMIGA/QAMIGA podczas komend WriteFile i ReadFile. To tak dla wyjaśnienia.

Dzisiaj po mozolnych próbach doszedłem do wyrysowania czegoś takiego, co miałem w wersji z Amosa:



Jeśli dalej będzie tak dobrze szło, to tło gry dorobię jeszcze i będę już bliziutko końca. Mogę dodać od siebie tyle, że zrozumienie rainbowa w Blitzu z jednej strony jest prostsze niż w Amosie, a z drugiej bardziej skomplikowane, ale łatwiej zaprojektować unikalnego rainbowa.

Samo tworzenie jest bardzo dziwne, ale faktycznie działa.
[#100] Re: Nauka Blitz Basic

@tukinem, post #99

Kolejny problem wyniknął, jeszcze gorszy niż ostatnio.

Po dodaniu rainbowa gra wymaga kickstartu minimum 3.1 (albo 3.0). Na niższych kickach gra się wiesza.

Stworzyłem ADFa z prościutkim Rainbowem i jest to samo.

Tak ma wyglądać rainbow:


Tu jest PLIK ADF, który jest bootowalny, a tu zamieszczam kod:
WBStartup

Dim kolor.b(32)

For a=0To15
  kolor(a)=a
  kolor(a+16)=15-a
Next

BitMap 0,320,256,4

InitPalette 0,32
PalRGB 0,0,$0,$0,$0;                              kolor 0 glownej palety
PalRGB 0,1,$f,$f,$f;                              kolor 1 glownej palety

InitPalette 1,256;                                niekoniecznie musi byc

BLITZ
InitCopList 0,34,256,$4,8,32,-1;                  kazda ujemna wartosc CustomCop pozwala uruchomic rainbowa
CreateDisplay 0
DisplayPalette 0,0
DisplayBitMap 0,0
Use BitMap 0

For a=0To127
  PalRGB 0,a,kolor(a/4),kolor(a/4),kolor(a/4);    kolory bieli w rainbow
  PalRGB 0,a+128,kolor(a/4),0,0;                  kolory czerwieni w rainbow
Next

DisplayRainbow 0,0,0

VWait 50

Repeat
Until RawStatus($45)
End


Może ktoś pomoże? Już sam nie wiem, co robię źle...
[#101] Re: Nauka Blitz Basic

@tukinem, post #100

W dokumentacji jest napisane, żeby poczekać na zakończenie operacji dyskowych przed wejściem do trybu Blitz.

Sugerują dodać polecenie VWait 100 przed instrukcją Blitz. Spróbuj może to dodać.
[#102] Re: Nauka Blitz Basic

@Hexmage960, post #101

To nie to ale faktycznie masz rację że powinienem dodać pauzę w programie. W samym sokobanie już w trybie BLITZ działa ładnie a gdy dochodzi do wyświetlania rainbowa komendą DisplayRainbow wtedy się wiesza.

Ciekawe czy używając Slice zamiast Display też by były takie schody, ale skoro już wybrałem Display, który jest nowszy, to tego się będę trzymać.

Ostatnia aktualizacja: 08.10.2022 10:52:11 przez tukinem
[#103] Re: Nauka Blitz Basic

@tukinem, post #102

Co robi ta instrukcja?

InitPalette 1,256;


PS Właśnie doczytałem, że 256 to liczba kolorów. Zmień tę wartość na 32 (albo najlepiej na jeszcze mniejszą, bo przecież Twój rainbow jest robiony na jedym kolorze) i zobacz czy zadziała pod kickiem 1.3.

Ostatnia aktualizacja: 08.10.2022 11:10:16 przez mastaszek
[#104] Re: Nauka Blitz Basic

@mastaszek, post #103

W sumie nie potrzebna jest.

Dostałem kod z demonstracją ruchomych rainbowów z EAB. Tam właśnie były użyte rainbowy przy display.library w Blitzu. Odchudziłem kod, pozbyłem się warunków dla AGA, bo kod jest uniwersalny dla AGA i OCS. Pozbyłem się przemieszczania rainbowów i doszedłem do tego w jaki sposób powstaje rainbow.

Tworząc Coplistę na końcu zamiast 0 ma być ujemna liczba. Próbowałem kilku i zawsze działa. Następnie pomimo własnej 32 kolorowej palety, przypisujemy indeksom kolorów 0-255, jeśli mamy ekran 256 linijek pikseli, osobno kolory. Ja tu zastosowałem pętlę, która połowie linii przypisuje odcienie bieli, a drugiej połowie odcienie czerwieni.

Na koniec DisplayRainbow wyświetla rainbowa. I chyba ta komenda wiesza program na kickstarcie 1.3 i 2.05.
[#105] Re: Nauka Blitz Basic

@tukinem, post #104

Spróbuj testowo zmniejszyć liczbę kolorów z 256 do 32 i zobacz czy zadziała pod 1.3.

Na Blitzu się w ogóle nie znam, więc tak tylko sobie gdybam :)

Ostatnia aktualizacja: 08.10.2022 11:17:17 przez mastaszek
[#106] Re: Nauka Blitz Basic

@mastaszek, post #105

Jeśli ten rainbow jest robiony na ekranie systemowym (domyślnie BlitzBasic tworzy po prostu usercoplist) to podejrzewam że to wymaga po prostu OS 3.1 (bądź ewentualnie 2+)
Zmiana głębokości ekranu do 32 kolorów więc raczej nic nie da. Tym bardziej że operujemy tutaj copperem i nawet na ekranie 1 bitowym można w ten sposób mieć 256+ kolorów.

Ostatnia aktualizacja: 08.10.2022 11:51:53 przez pisklak
[#107] Re: Nauka Blitz Basic

@tukinem, post #104

Dodam jeszcze obserwacje:

Wewnątrz pętli:

Repeat
Until RawStatus($45)

Powinieneś dodać jedno polecenie VWait. Konstrukcja pętli, jaką napisałeś nosi nazwę "Busy Wait" i niepotrzebnie marnuje czas procesora.

Według mnie DisplayRainbow nie powinno zależeć od kickstartu.

Co do wypowiedzi kolegi Mastaszka, zauważyłem taki wpis w dokumentacji (dotyczy InitCopList):

The #agacolors flag must ALWAYS be set when more than 32 colours are in use or
when 24 bit color definition is required.

Sprawdź może czy nie masz jeszcze jakichś innych ustawień w emulatorze oprócz kickstartu.

Również nie znam się na Blitzu, ale może te spostrzeżenia się przydadzą.

@Pisklak

Z tego co wiem, User Copperlist działa też na OS 1.3. Korzystam z tego w swoim kodzie.

Ostatnia aktualizacja: 08.10.2022 12:04:13 przez Hexmage960
[#108] Re: Nauka Blitz Basic

@mastaszek, post #105

paleta może być spokojnie 256 kolorowa. Palette to obiekt "wirtualny" który służy tylko do zdefiniowania kolejnych kolorów - tutaj na potrzeby Rainbow. Więc to nie to.
I tak jak Ci już piszą koledzy to jest jakiś Dźwiny babol bo Kick nie ma tutaj żadnego wpływu.
Komenda Blitz wyłącza system i piszesz bezpośrednio na hardware. Takie rzeczy spokojnie działają pod kick 1.3 - wiem bo pisałem/testowałem. Kod wygląda OK na pierwszy rzut oka. Zerknę za chwilę na wykonywalny plik bo wg mnie najpewniej brakuje czegoś (biblioteka?) i dla tego się wywala na kick 1.3
W takich sytuacjach odpalaj ze SnoopDosem.

[edit]
i nawet nie myśl o powrocie do Slice. ;) To wszystko działa z Display bo display jest po prostu lepsze :)

[edit2]
ta Palette 1,... nie jest potem nigdzie używane.
Palette 0 ma rozmiar 32 a w pętli próbujesz przypisać 127 kolorów. - wg mnie to jest to.

Palette 0. użyj do obrazka - jeśli będzie
Palette 1. o rozmarzę 256 użyj do tęczy


Ostatnia aktualizacja: 08.10.2022 12:17:34 przez c64portal
[#109] Re: Nauka Blitz Basic

@mastaszek, post #105

Właśnie to jest najdziwniejszy myk.

Zauważ, że dopisując kolory do palety "256-kolorowej" nie ustawiam po kolei numerów kolorów w palecie, a konkretne kolory linii dla rainbowa. To jest właśnie taka ciekawostka odnośnie pisania rainbowa w Blitzu dla display.library. Wiem, że gdybym użył Slice zamiast Display byłoby zupełnie inaczej, ale odradzono mi tu używanie przestarzałego Slice. I w sumie słusznie.

Co do użycia blitzowego "usercoplist", to bym się zgodził, że to mogłoby wymagać wyższego kickstartu. Sprawdzałem na 2.05 i również zawiesza się na amen. Zarówno kick dla A600, jak i A600 HD. Na kickstarcie 3.1, 3.1.4 i 3.2 działa pięknie.

@Hexmage: Wiem, że ta pętla jest niewłaściwie napisana, ale jest jedynie po to, aby program zaczekał, aż wciśnie się ESC. Równie dobrze mógłbym zamiast tej pętli wpisać sobie po prostu VWait 150 lub MouseWait.

Kod animowanych rainbowów, który pochodzi z EAB jest niby uniwersalny dla AGA i OCS, ale po kompilacji również wiesza się na niższych kickstartach. Sprawdziłem to. Różnica jest taka, że program sprawdza, czy jest układ AGA i w zależności od tego przypisuje większą rozpiętość kolorów, lub nie. Sama animacja pasków rainbowa jest imponująco szybka, ale tam nie ma co się dziwić, bo Coplista składa się z 1 bitplanu, co znacznie przyspiesza jeszcze i redukuje zużycie pamięci.
[#110] Re: Nauka Blitz Basic

@tukinem, post #109

Ciekawostka...
Nie dawało mi to spokoju i przetestowałem ten kod który wkleiłeś wyżej.
Doszedłem do tego że na OCSie wywala się funkcja PalRGB i faktycznie na Kick 3.0+ działa.

Tzn PalRGB w sumie działa, ale jak indeksy koloru (2 parametr tej funkcji) są większe od 31 to się wywala.
To wg mnie jest błąd. Mógłbym tu tłumaczyć, ale nie chce mi się tyle pisać ;)
Myślę że można by zapytać na EAB... chyba zapytam.
[#111] Re: Nauka Blitz Basic

@c64portal, post #110

To zapytaj bo ja tam mam konto zablokowane przez długie nieużywanie.

Samo PalRGB działa w OCS ale nie przy ustawianiu rainbowa. A może sama komenda DisplayRainbow 0,0,0 blokuje OCS?
[#112] Re: Nauka Blitz Basic

@tukinem, post #111

no nie. problemem jest to co napisałem powyżej. Problemem jest PalRGB.
wygląda to tak jakby PalRGB do ustawiania kolejnych indeksów w palecie używało jakiejś funkcji w KickStarcie, ale czekam aż ktoś może to potwierdzi.
[edit]
i dla porządku dopiszę tylko że taką tęczę jak chcesz to da się zrobić - na piechotę, linia po lini w zasadzie bez użycia PalRGB, ale to może być nieco trudne jak na początek kodowania w BB

Ostatnia aktualizacja: 08.10.2022 16:02:00 przez c64portal
[#113] Re: Nauka Blitz Basic

@c64portal, post #112

Ponieważ nie znam się na BlitzBasic ale głupio zapytam -
A po co ustawiać całą paletę akurat tutaj skoro to zrobienia takiego efektu copperem wystarczy w zasadzie 1 wybrany kolor? A przecież chyba copper bedzie właśnie używany?
[#114] Re: Nauka Blitz Basic

@pisklak, post #113

Też mnie to dziwi skoro na ekranie 99 widać, że powinien być otwarty ekran 1 bit. Czyli dwa kolory. 0 na tlo/rainbow, 1 na kolor liter (który też fajnie by było zmieniać copperem dla danej linii)
[#115] Re: Nauka Blitz Basic

@pisklak, post #113

Panowie @pisklak i @juen
I to co mówicie właśnie się tutaj dzieje... Przecież to widać w kodzie. ;)
Palette to jest struktura 256 kolorów - w pamięci - nie ma nic wspólnego z ilością kolorów na ekranie
Komenda DisplayRainbow wstawia paletę tutaj #0 (a powinno wg mnie być Nr #1) pod kolor/index (tutaj w przykładzie tukinema pod indeks 0) do copperlisty #0.
Dla tego komenda wygląda tak:

DisplayRainbow 0,0,0
gdzie parametry w kolejności to coperlista, indeks koloru, która paleta
proste? proste! :)

inna sprawa dlaczego w tym przykładzie tukinem otwiera ekran na 32 kolory a bitmapę 4 bitplany... rozumiem że to jakieś Copy+Paste z przykładu z EAB

Ostatnia aktualizacja: 08.10.2022 17:17:24 przez c64portal
[#116] Re: Nauka Blitz Basic

@c64portal, post #115

Często otwieram ekran o różnej ilości bitplanów, amimo to ilość kolorów daję 32. Po to, aby móc ewentualnie ustawiać kolory dla sprajtów.

Mogę dać InitCoplist 0,44,200,$1,8,32,0 dzięki czemu będzie 1 bitplan na ekranie, a sprajta mogę wstawić 16-kolorowego. Jeśli utworzę coplistę 4 bitplanową i 16 kolorów dam, to nie będę mógł ustawić kolorów o indeksach 17-31 dla sprajtów. To samo tyczy się używania ekranów ze Slice. Już to przerabiałem. Liczba bitplanów odnosi się do zdefiniowanej wcześniej bitmapy którą chcemy wyświetlić i lepiej żeby się zgadzały. Ilość kolorów jaka się ustala to po prostu limit kolorów, które można ustawiać sobie.

Zapomniałem się usprawiedliwić czemu jedna paleta i druga ma nr 0. Sugerowałem się kodem który mam z EAB. Tam tak właśnie jest a nie chciałem sobie mieszać póki co. Dla rozwiania wątpliwości chyba mógłbym tu wstawić ten kod z ruchomymi rainbowami. Jest uniwersalny dla AGA i OCS. Jego również skompilowałem i się wiesza na OCS z niższymi ROMami

Ostatnia aktualizacja: 08.10.2022 17:43:13 przez tukinem
[#117] Re: Nauka Blitz Basic

@tukinem, post #116

Poprawiam się. Pisałem ekran a chodziło o wiadomość.99.

zawsze zużywaj najmniej pamięci czyli tyle bit planów ile faktycznie potrzebujesz.

I najważniejsze. Jak dobrze pamiętam to ilość bit planów nie ma wpływu na kolory spriteow... Wciąż je ustawiasz w odpowiednich rejestrach nawet jakby ekran miał jeden bitplan to sprajt o danym numerze przypisany jest do konkretnych rejestrow koloru.

Mimo że piszesz w blitzbasic to oprócz jego dokumentacji przeczytaj amiga hardware referencje manual

Nie widzę powodu by miała się zgadzać ilość kolorów. To hardwatowy absurd byłby, a ten język nie jest taki glupi

Ostatnia aktualizacja: 08.10.2022 18:28:18 przez juen
[#118] Re: Nauka Blitz Basic

@juen, post #117

a tu masz przyklad z zycia wziety. o ile wiesz, ze kursor w amigowym wb to SPRITE

ten ekran ma 2 kolory:

[#119] Re: Nauka Blitz Basic

@c64portal, post #115

Ponieważ nie znam się ale drugi raz głupio zapytam
Skoro Palette ustawia po prostu strukturę/dane w pamięci to czy nie powin być oddzielny rozkaz dla ustawiania realnej palety ekranu na podstawie tej struktury (i pewnie jest/są)?
W takim razie dlaczego niby PalRGB miałby zawieszać system. Predzej już to będzie robił ten rozkaz co na podstawie Palette tworzy coplistę, chyba że to właśnie robi PalRGB

Ostatnia aktualizacja: 08.10.2022 18:34:09 przez pisklak
[#120] Re: Nauka Blitz Basic

@c64portal, post #115

Przede wszystkim to w pętli tam gdzie jest palrgb winno być palrgb 0,0, a tam w pętli leci zmiana koloru od 0 do 255 jak widzę :)

Ogólnie to szok że to w ogóle coś rysuje

Ostatnia aktualizacja: 08.10.2022 18:37:07 przez juen
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