Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych
Dzięki zbyck99, jak dorzucę czwartą część, to już wszystko powinno być ok, bo robiłem poprawki wczoraj.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Grawitacja 2024 Czas na kolejną edycję 8 bitowego GameJamu.
Tenebra na Atari ST/STE Wersja gry na duże atari.
Wyniki FujiCup 2023 Wyniki konkursu FujiCup na najlepszą grę dla 8-bit Atari w 2023 roku zostały ogłoszone!
TONY na małe Atari Nowa gra na małe Atari, w Hiresie, produkcja Rafała Dudka (brat XXL-a), Popmilo i Caruso.
Cosmic Hero 2 Bohater ratujący Ziemię w kryzysowej sytuacji powraca po 30 latach.
atari.area forum » Programowanie - 8 bit » Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych
Strony Poprzednia 1 2 3 4 5 6 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
Dzięki zbyck99, jak dorzucę czwartą część, to już wszystko powinno być ok, bo robiłem poprawki wczoraj.
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.
Po kolejnej części przedstawionej przez Sikora dorzucam kompletny plik pdf z pełnym kursem i z poprawkami :)
Super, że jest kontynuacja :)
Muszę znaleźć trochę czasu i przysiąść od nowa :)
@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.
@zbych099: Dzięki wielkie za poprawki.
No, ja z czasem krucho stoję, ale postaram się działać dalej
@Sikor: Bardzo dobra robota. Jak sklejam to w dokumencie do kupy, to widzę ile tego jest. Super! :)
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 ;)
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 :-).
szansa jest wstępnie na koniec przyszłego tygodnia, o ile syne wieczorem pozwoli posiedzieć ;) Dzięki za zainteresowanie - to daje (pozytywnego) kopa ;)
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.
Ostatnio edytowany przez Sikor (2019-12-17 22:21:28)
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.
Dzięki ;) Zobaczymy co inni powiedzą, a właściwie napiszą ;) W następnej części (jak motywacja i czas pozwolą) chcę zamknąć intro ;)
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ę:-)
Super, dzisiaj siadam i wracam do kursu. Dziękuję za kontynuację :)
@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
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 :)
Ostatnio edytowany przez lopez (2019-12-22 11:54:42)
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 ;)
miałem zapytać jak chronisz fonty przed przypadkowym nadpisaniem, ale już widzę ;)
Ostatnio edytowany przez Pin (2019-12-29 00:47:03)
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.
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.
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.
Jak zdążę zajrzę jutro wieczorem, jak nie - na wyjeździe. Wszystko zależy od tego, kiedy wrócę do domu jutro.
Spoko. Będę cierpliwie czekać na odpowiedź :)
Strony Poprzednia 1 2 3 4 5 6 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.098 sekund, wykonano 9 zapytań ]