101

Dzięki zbyck99, jak dorzucę czwartą część, to już wszystko powinno być ok, bo robiłem poprawki wczoraj.

Atari 65XE + LDW SUPER 2000 + SIO2SD + SIO2PC + Stereo + TTP + Ultimate Cart + Multicart XE

102

Głosowanie: Czy chciałbyś taki krótki tutorial jak w temacie? (Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych).

Głosuję na Tak z grafikami, ale i wersja tekstowa byłaby pouczająca. Bardzo dobrze podsumował to Mq.

103

Po kolejnej części przedstawionej przez Sikora dorzucam kompletny plik pdf z pełnym kursem i z poprawkami :)

Post's attachments

Krótki tutorial w Turbo Basicu XL do gier.pdf 781.72 kb, liczba pobrań: 17 (od 2019-11-12) 

Tylko zalogowani mogą pobierać załączniki.
Atari 65XE + LDW SUPER 2000 + SIO2SD + SIO2PC + Stereo + TTP + Ultimate Cart + Multicart XE

104

Super, że jest kontynuacja :)
Muszę znaleźć trochę czasu i przysiąść od nowa :)

105

@Alex_D.  Świetna robota. Ale żeby (nieuniknione) literówki nie "biły po oczach", podsyłam pliczek, w którym zaznaczyłem te wyłapane do ew. poprawy.

Post's attachments

Tutorial_GRA-w-TB_poprawki-do PDF.txt 1.93 kb, liczba pobrań: 12 (od 2019-11-12) 

Tylko zalogowani mogą pobierać załączniki.

106

@zbych099: Dzięki wielkie za poprawki.

Atari 65XE + LDW SUPER 2000 + SIO2SD + SIO2PC + Stereo + TTP + Ultimate Cart + Multicart XE

107

No, ja z czasem krucho stoję, ale postaram się działać dalej

Sikor umarł...

108

@Sikor: Bardzo dobra robota. Jak sklejam to w dokumencie do kupy, to widzę ile tego jest. Super! :)

Atari 65XE + LDW SUPER 2000 + SIO2SD + SIO2PC + Stereo + TTP + Ultimate Cart + Multicart XE

109

Ze swojej strony napiszę, że zarówno Alex_D, jak i zbych099 odwalają kawał dobrej roboty, a część literówek to moja klawiatura w lapku tworzy i nie zawsze to wychwycę - piszę tutorial w zasadzie na żywo, w notatniku, wraz z tagami i potem przeklejam całość. Niestety, czasem za późno odpuści prawy Alt i pojawiają się polskie znaczki. Jest to niestety nieregularne i nie wiem do końca, czemu tak się dzieje.
Budujące jest to, że niektórym chce się czytać moje wypociny, a wiem też, że niektórzy z tego tutoriala korzystają. Parę osób, ale zawsze ;)

Sikor umarł...

110

Czy jest szansa, że kolejna część tutoriala pojawi się jeszcze w tym roku (przed świętami)? Czy dopiero  w 2020r.? Nie ukrywam, że z niecierpliwością oczekuję cd. I chyba nie tylko ja :-).

111

szansa jest wstępnie na koniec przyszłego tygodnia, o ile syne wieczorem pozwoli posiedzieć ;) Dzięki za zainteresowanie - to daje (pozytywnego) kopa ;)

Sikor umarł...

112 Ostatnio edytowany przez Sikor (2019-12-17 22:21:28)

Część piąta - czas na ożywienie intra...
Dzisiaj ożywimy nieco nasze intro. Ostatnio przygotowaliśmy sobie grafikę, spróbujmy ją dzisiaj zacząć wykorzystywać w naszej grze, Na początek przypomnę, jak mamy ustawione dane:

Dane:
$95c0-$9fff grafika tytułowa
$9c00-$9fff fonty do gry
$8240-$855f P1
$8560-$887f T4
$8880-$8b9f T5
$8ba0-$8ebf T6
$8ec0-$91df T7
$91e0-$94ff T8

Wczytujemy teraz Turbo Basic, nasze dane (BLOAD"D:DANE.DAT") oraz nasz dotychczasowy kod gry (LOAD"D:GRA1.TB"). Poke 756,$9c (kto przypomni, co to robi?) i listujemy naszą grę. Na początek nieco namieszamy w naszej procedurze INTRO:

100 PROC INTRO
101   GRAPHICS 24:POKE 710,0:POKE 709,
15:POKE 756,$9C
102   MOVE $95C0,DPEEK(88),1600
142   COLOR %1:TEXT 10,100,"Tu b dzie
intro"
150   IF PEEK(53279)<>6 THEN 150
190 ENDPROC

Do dzieła. Na początek zróbmy małą modyfikację:

102   FOR I=39 TO %0 STEP -1
103     MOVE $95C0+1600-I*40,DPEEK(88)
+I*40,40
104   NEXT I

Proszę uruchomić kod. Co się dzieje? Mamy pętlę for-next, która przesyła nam linia po linii naszą grafikę tytułową na początek adresu ekranu. Pamiętamy, że mamy 40 linii, więc licząc od 39 do zera przesuwamy wszystko linia po linii, dostając odwrócony obraz... Dodajmy sobie w linii 103 małe opóźnienie, aby się przyjrzeć, jak to wygląda:

103 MOVE $95C0+1600-I*40,DPEEK(88)+I*40,40:PAUSE 10

Teraz wszystko widać jak na dłoni. W linii 103 możemy oczywiście od razu wyliczyć adres końca grafiki (1600 bajtów szesnastkowo to $640, $95C0+$640=$9C00, pamiętamy że liczymy od zera, czyli $9BFF), wtedy zadziała nieco szybciej (mam mniej liczenia), ale dla naszego przykładu nie robi to różnicy (dobra, dłuższy kod mamy - ale o tym w ostatnim odcinku będzie). Dodajmy nieco więcej "życia" do intra. Mamy 192 linie, najpierw wyświetlmy naszą grafiką na dole ekranu:

103 -MOVE $95C0+1600-I*40,DPEEK(88)+6000+I*40,40:PAUSE 10

Pamiętamy o czasowym zapisywaniu gry (SAVE"D:GRA2.TB" - przypominam tylko) i sprawdzamy. Działa? Działa. Skąd wartość 6000? To proste - nasza grafika ma 1600 bajtów, cały ekran to 7680 - od wielkości ekranu odejmujemy 1600  bajtów, pamiętamy, że liczymy od zera więc odejmujemy jeszcze 40 bajtów, z pewnych przyczyn chcę mieć jedną linię pustą - więc odejmuję jeszcze 40 bajtów... Teraz wszystko przesuńmy w górę (wcześniej proponuję usunąć pauzę - już nie jest nam potrzebna):

105   FOR I=151 TO %1 STEP -%1
106     MOVE DPEEK(88)+I*40,DPEEK(88)+I*40-40,1600
107   NEXT I

W linii 105 określiliśmy skąd przesuwamy nasz obraz (od której linii) i do której (wartość jeden, bo linijkę dalej przesuwamy na adres ekranu), w linii 106 wpisujemy jak przesuwamy. Proszę się pobawić wartościami zmieniając 40 na inne wartości (najlepiej wielokrotność czterdziestu).
Dobrze, mamy napis na górze, ale... Odwrócony. Coś z tym trzeba zrobić... Można to zrobić przepisując z buforem bezpośrednio z ekranu nasze dane lub wykorzystać nasz obrazek z pamięci (ja wolę tak zrobić). Dopiszmy kawałek kodu:

109   FOR I=%0 TO 39
110     MOVE DPEEK(88)+40,DPEEK(88),1600
111     MOVE $95C0+I*40,DPEEK(88)+1560,40
112   NEXT I

Linia 110 przesuwa nam obrazek w górę, natomiast w linii 111 pobieramy jedną linię z naszego obrazka i zapisujemy ją jako ostatnia linia obrazka tytułowego na naszym ekranie. W ten sposób w prosty sposób uzyskaliśmy prosty efekt rolowania obrazka tytułowego.
Zakładam, że w intrze chcemy też wykorzystać grafikę z naszej konwersji. Jesteśmy w trybie graficznym, nic nie stoi na przeszkodzie, wykorzystajmy grafikę T7, ale najpierw zróbmy sobie część ramki - bo czemu nie? Zasada jest taka, że  instrukcja MOVE (lub -MOVE, która działa "od tyłu") możemy się poruszać na ekranie (bez sztuczek) na granicy pełnych bajtów. Nasze obrazki mają 80x80px, więc narysowana część ramki nie powinna nachodzić nam na pełne bajtu obrazka - trzeba uważać szczególnie na linię pionową. Sprawa jest prosta - każdy bajt (w naszym trybie) to odpowiednik ośmiu pikseli. Spróbujmy dodać kod:

120   COLOR %1
121   PLOT 42,50:DRAWTO 140,50
122   PLOT 46,46:DRAWTO 46,140
125   FOR I=%0 TO 79
126     MOVE $8EC0+I*10,DPEEK(88)+2086+I*40,10
127   NEXT I

Co ten kod robi? To proste:
Linia 120 - ustawia nam kolor
Linia 121 - rysuje poziomą część ramki
Linia 122 - rysuje pionową część ramki
U mnie jest to tak dobrane, aby była drobna przerwa między naszym obramowaniem a rysunkiem. Proszę pobawić się tymi wartościami. Pozostałe linie dodają nam rysunek. Proszę teraz uruchomić program.
Coś nam tu chyba nie pasuje, prawda? Mała modyfikacja linii 142 załatwi nam sprawę:

142 COLOR %1:TEXT 10,145,"Tu b dzie intro"

Prawda, że lepiej? To na zakończenie dzisiejszej lekcji jeszcze jedna, drobna modyfikacja wyświetlania obrazka, według mnie uatrakcyjniająca nasze dzieło:

125 FOR I=%0 TO 78 STEP %2
126   MOVE $8EC0+I*10,DPEEK(88)+2086+I*40,10
127   MOVE $91D6-I*10,DPEEK(88)+5246-I*40,10:PAUSE %2
128 NEXT I

Analizę pozostawiam Wam. Jak zwykle oczekuję komentarzy, czy wszystko jest jasne. W następnym odcinku dodamy sobie teksty do intra.
W załączniku atr z bieżącą wersją - pracujemy na wersji gra1.tb, dochodzimy do wersji gra2.tb. Smacznego.

Post's attachments

roboczy_big_po.7z 71.85 kb, liczba pobrań: 12 (od 2019-12-17) 

Tylko zalogowani mogą pobierać załączniki.
Sikor umarł...

113

Sikor napisał/a:

Poke 756,$9c (kto przypomni, co to robi?)

Pierwszy! To oczywiście nowy adres naszego fontu:-)
Przeczytałem dokładnie cały odcinek, uruchomiłem sobie nowe elementy, bardzo fajnie to wygląda, jak na pisanie w Basicu (oczywiście Turbo), to wygląda zachęcająco i już jest wrażenie, że można zrobić w taki sposób interesującą grę. Dzięki Sikor za kolejny odcinek.

114

Dzięki ;) Zobaczymy co inni powiedzą, a właściwie napiszą ;) W następnej części (jak motywacja i czas pozwolą) chcę zamknąć intro ;)

Sikor umarł...

115

Nigdy nie przepadałem za hiresem w Atari, zawsze jakoś wolałem grafikę kolorową w 160x192 w trybie 15 niż 320x192 w trybie 8.
Natomiast niedawnymi czasy dość dużo składałem grafiki w trybie 15 i też pikselowałem różności w tym trybie ostatnio, więc może dlatego mi się przejadł, bo teraz jak zobaczyłem ten początek intra, który przygotowałeś w GR.8, to spodobał mi się ten wcześniej nieszczególnie lubiany przeze mnie tryb. Hmm, może się przeproszę z trybem 8 jednak i też coś sobie w nim kiedyś zaprogramuję:-)

116

Super, dzisiaj siadam i wracam do kursu. Dziękuję za kontynuację :)

117

@Mq: jak się podkoloruje duszkami lub zrobi przerwania DL-ki (ale tu już assembler potrzebny) to może wyglądać świetnie. Jest jeszcze kwestia dobrania koloru - ale u nas akurat czarny pasuje, bo kosmos ;)
@lopez: napisz jak wrażenia

Sikor umarł...

118 Ostatnio edytowany przez lopez (2019-12-22 11:54:42)

No to w końcu usiadłem na kursu ponownie. Sikor WOW nie spodziewałem się efektu :)

Proszę poprawcie mnie, jeśli źle zrozumiałem, ale wartości w liniach 126/127 (2086/5246) są to wartości ekranu?

- cały ekran ma 7680 bajtów
- 1 linia ma 160 bajtów
- wszystkich linii jest 48

2080 to jest 13 linia
5120 to jest 32 linia

To teraz wartość 2086 rozumiem, bo to przesunięcie o 6 znaków w prawo, ale dlaczego 5246 a nie 5126?

ps. ok już załapałem po prostu 5246 to odjęcie 34 od linii 33 (5280) bo w tym wypadku liczymy od tyłu.

Z niecierpliwością czekam na ciąg dalszy :)

119

1 linia ma 40 bajtów: 320/8=40, są to linie rybu graficznego. Linii jest ogólnie 192. czekaj, spojrzę w kod:
linie 126 i 127 to wyświetlanie obrazka od początku/od końca co drugą linię, aby zrobić ładny (według mnie) efekt.  Przyjrzyjmy się dokładniej:

125 FOR I=%0 TO 78 STEP %2
126   MOVE $8EC0+I*10,DPEEK(88)+2086+I*40,10
127   MOVE $91D6-I*10,DPEEK(88)+5246-I*40,10:PAUSE %2
128 NEXT I

2086/40=52 z kawałkiem, czyli 52 linia ekranu plus przesunięcie o resztę w prawo. Analogicznie drugi kawałek, ale tam pobieramy dane od końca. Szerokość naszego obrazka to 10 bajtów (80 pikseli). To chyba wyjaśnia sprawę? Zresztą do większości i tak doszedłeś sam ;)
P.S.
Cieszę się, że ktoś to ze mną dłubie ;)

Sikor umarł...

120 Ostatnio edytowany przez Pin (2019-12-29 00:47:03)

miałem zapytać jak chronisz fonty przed przypadkowym nadpisaniem, ale już widzę ;)

Kontakt: pin@usdk.pl

121

Sikor napisał/a:

Wkłądamy dyskietkę z DOSem i mossadem, wciskamy D (wyjście do DOS), wczytujemy mossada i po kolei:
1. R D:GRA1.CO <return> - wczytanie "naszej gry"
2. R D:DANE.DAT <return> - wzytanie brakujących danych
3. W D:GRA1.COM <return> - zapis całej gry
4. Q T - wyjśie do DOSu (musi być w stacji)

Cześć Sikor. Jakiś czas temu natrafiłem na Twój tutorial i postanowiłem na swojej fizycznej Atarynce 65 XE jego przerobić. Wszystko szło super do czasu, kiedy trzeba było uruchomić Mossada. Po uruchomieniu dostaję komunikat: "Brak ramdysku pod wybranymi bitami". Na SIO2SD wybieram dyskietkę z plikiem GRA1.CO (KOMPILAT.ATR) i wciskam klawisz R. Program rozpoczyna wczytywanie, ale wczytywanie pliku tak jakby się zawiesiło na $0169, tzn. SIO2SD wyświetla mi coś takiego: "31: $53(s) $0169", po czym "31" zmienia się w "32", i tak inkrementuje aż do wartości 38, po czym wraca do "31", znów inkrementuje do 38 i tak w kółko.
Jestem nieco zdziwiony takim działaniem. Fonty w pliku DANE.DAT mam ustawione na 95C0-9BFF oraz 9C00-9FFF, grafikę TYTUL.DAT ustawiłem sobie w komórkach 8F80-95BF. Nie wiem czy ma to znaczenie (może Mossad potrzebuje dostępu do tych komórek?). Próbowałem znaleźć na necie jakieś rozwiązania, ale bezskutecznie. Masz jakiś pomysł co może być przyczyną takiego zachowania?

pozdrawiam.

122

Hej, powinno teoretycznie działać. Rozumiem, że po R dajesz nazwę pliku, a w DANE.DAT masz wszystkie dane i żaden blok się nie powtarza? Będę przed komputerem dopiero wieczorem, ale w razie czego wrzuć - jak możesz - na PW ATR-a. No i mam nadzieję, że na dyskietce (atr) masz wolne miejsce no i wczytujesz spod DOSa? Bo to ważne. Aha, na niektórych wersjach sparta dos X może sam TB nie chodić, o ile pamiętam - ja akurat zawsze korzystam z MyDOSa, ale to jest mój subiektywny wybór.

Sikor umarł...

123

Hej, wklejam ATR z plikiem DANE.DAT.
Co do Twoich pytań:
- żaden blok nie powtarza się (a przynajmniej nie powinien)
- na dyskietce jest wolne miejsce
- wszystko wczytuję spod DOS-a

pozdrawiam.

Post's attachments

grafika.atr 90.02 kb, liczba pobrań: 3 (od 2023-07-30) 

roboczy_tbxl — kopia.atr 90.02 kb, liczba pobrań: 4 (od 2023-07-30) 

Tylko zalogowani mogą pobierać załączniki.

124

Jak zdążę zajrzę jutro wieczorem, jak nie - na wyjeździe. Wszystko zależy od tego, kiedy wrócę do domu jutro.

Sikor umarł...

125

Spoko. Będę cierpliwie czekać na odpowiedź :)