Autor Wątek: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje  (Przeczytany 6806 razy)

ediman

  • **
  • Wiadomości: 66
  • Miejsce pobytu:
    Poznań
Witam
Planuję nagrać film o Skool Daze i szukam podstawowych informacji na temat tworzenia grafiki i sprajtów na ZX Spectrum.
Wiem ze Spectrum nie ma hardwearowych sprajtów i musi korzystac z rozwiązań softwearowych.
Ze strony pyskool.ca ściągnąłem grafiki i tu pytanie. Wiem że architektura wymaga tworzenia ekranów z kwadratów o matrycy 8x8 pikseli po 2 kolory na kwadrat.
Z tego co zauważyłem to taka sama restrykcja obowiazuje na grafikach sprajtów i tutaj pytanie. Na dołączonych grafikach zauważyłem np. że w Skool Daze sprajty są zbudowane z matrycy 3x4 kwadraty po 8 pixeli każdy, czy jest jakies ograniczenie w ich wielkości poza ogranczeniami obliczeniowymi-przetwarzania obrazu komputera?
https://adobe.ly/2x6ZSbd
I czy dobrze zauważyłem że stworzyc dodatkowe segmenty pośrednie po to aby została zachowana zasada dwóch kolorów na kwadrat?
https://adobe.ly/2iWUUaB
pozdrawiam
Ediman z kanału RetroSfetro

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #1 dnia: 2017.09.05, 12:44:04 »
W ZX Spectrum nie ma sprajtów. Ekran to 256x192 pikseli. Każdy region 8x8 (32 kolumny, 24 wiersze) może mieć jednocześnie dwa kolory z 8 (15) kolorowej palety, stałej. Warto uruchomić sobie ZX Paintbrush (pod Windows), aby zrozumieć o co chodzi z grafiką.

Wielkość "sprajtów" w grach zależy tylko i wyłącznie od skomplikowania silnika i liczby obliczeń, tak , aby zdążyć z wyświetlaniem wszystkiego w ramce (albo nie ;) )
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #2 dnia: 2017.09.05, 12:47:25 »
Jeszcze do zrozumienia ekranu, warto dodać, iż 1 bajt na ekranie to 8x1 pikseli. Od adresu 16384 mamy 6144 bajtów bitmapy, a następnie 768 bajtów atrybutów, jeden bajt atrybutu określa kolor tła, "pędzla", jasność ON/OFF, mryganie ON/OFF jednego kwadratu 8x8 pikseli.
Pamięć atrybutów ułożona jest liniowo, bitmapy nie.
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

ediman

  • **
  • Wiadomości: 66
  • Miejsce pobytu:
    Poznań
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #3 dnia: 2017.09.05, 12:58:29 »
W ZX Spectrum nie ma sprajtów. Ekran to 256x192 pikseli. Każdy region 8x8 (32 kolumny, 24 wiersze) może mieć jednocześnie dwa kolory z 8 (15) kolorowej palety, stałej. Warto uruchomić sobie ZX Paintbrush (pod Windows), aby zrozumieć o co chodzi z grafiką.

Wielkość "sprajtów" w grach zależy tylko i wyłącznie od skomplikowania silnika i liczby obliczeń, tak , aby zdążyć z wyświetlaniem wszystkiego w ramce (albo nie ;) )

Dzięki właściwie o to mi chodziło.
pozdrawiam

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #4 dnia: 2017.09.05, 13:00:37 »
Nie ma ograniczeń wielkości takiego sprite'a inne niż wydajność. O ile dobrze pamiętam aby wyświetlać animację z maksymalną prędkością (co 1 ramkę) największy możliwy sprite nie mógł być większy niż 1/3 ekranu (256x64) i to zakładając, że gra nie robi nic innego. Sprite'y robi się większe niż trzeba (np. 3x8 w poziomie, mimo, że sprite ma tylko 16 px szerokości) z powodów wydajnościowych. Na Spectrum szybciej jest rysować sprite co 8 px w poziomie, więc sam sprite był wewnętrznie przesuwany przy animacji 1 px, czyli mógł mieć zdublowane ramki przesuwane wewnątrz prostokąta 3x4, a wklejane na ekran co 8 px (z powodów o których napisał ZX Freeq powyżej - 1 bajt to 8 pixeli w poziomie).

Ediman, nie do końca rozumiem Twoje drugie pytanie.

PS. Nowoczesne biblioteki graficzne potrafią wyświetlać "sprite'y" i w ogóle grafikę w formacie 8x2 i 8x1 a nie tylko 8x8 pixeli na parę kolorów, czyli można osiągnąć 4 lub 8 różnych par kolorów w kwadracie 8x8 pixeli. Poszukaj haseł "Bifrost" i "Nirvana", więcej np. tutaj: http://www.boriel.com/wiki/en/index.php/ZX_BASIC:Released_Programs#GAME_ENGINES.


ediman

  • **
  • Wiadomości: 66
  • Miejsce pobytu:
    Poznań
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #5 dnia: 2017.09.05, 14:20:26 »
Ediman, nie do końca rozumiem Twoje drugie pytanie.
teraz tak myślę że jest to po prostu klatka animacji chodu

https://adobe.ly/2iWUUaB
A jeszcze jedno nurtujące mnie pytanie które równiez ilustruje powyższy link. Chodzi o przezroczystość w okół sprajta czyli jednopikselowy obrys który przyjmuje kolor tła po to żeby grafika sprajta (postaci) nie zlewała sie z tłem w miejscach gdzie posiada ono czarne elementy czyli w powyższym przypadku np. rama okna
Czy jest to po prostu założenie programisty czyli zakładamy że np we wszystkich kwadratach 8x8 wszystkie kolory oprócz czarnego są tłem które powinien przyjąć obrys sprajta czy tez jest to jakieś sprzętowe narzucenie?
Mam nadzieje ze nie zagmatwałem tego jeszcze bardziej:)

pear

  • *****
  • Wiadomości: 5509
  • Miejsce pobytu:
    Będzin
  • Z80 only
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #6 dnia: 2017.09.05, 14:34:08 »
Sprajt składa się z dwóch prostokątnych części: maski i właściwej grafiki.
Maska określa, które piksele mają zostać zachowane, a które usunięte przed narysowaniem grafiki.
Dzięki temu postać nie jest prostokątna tylko wtapia się w tło.
Obszar usuwany przez maskę może być większy (w ramach prostokąta) od tego zajmowanego przez samą grafikę robiąc w ten sposób margines.
ZX/Enterprise/CPC/Robotron/C128D

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #7 dnia: 2017.09.05, 15:10:06 »
Nie ma żadnego sprzętowego ograniczenia sposobu, w jaki rysujesz sprite'y (oprócz wydajnośc) Sprite'y w Spectrum to po prostu nakładanie danych do pamięci ekranu - tak jak bloby na Amidze - są wkopiowywane w pamięć video, a ich tło jest nadpisywane.

Najprostsza analogia: wyobraź sobie, że masz kartkę papieru, na której narysowałeś tło. Jeśli nie masz sprzętowych sprite'ów (jak na Spectrum), to musisz narysować klatkę animacji (sprite'a) NA tej kartce. Przy kolejnej klatce animacji musisz odtworzyć tło (np. wytrzeć gumką sprite'a) i narysować nowego obok. Jeśli masz sprite'y sprzętowe, np. jak w Amidze, to możesz mieć narysowanego sprite'a na przezroczystej folii i przykładać na kartkę. Zmiana klatki animacji sprite'a lub jego pozycji nie wpływa na tło w ogóle.

Ramka wokół sprite'a może być lub nie - to zależy co wymyślił programista. Mógł jej nie dodawać (nie maskować sprite'a), tylko go wklejać w tło. W takiej sytuacji, czarny sprite na czarnym tle byłby niewidoczny. Wszystko zależy od pomysłu programisty.

ediman

  • **
  • Wiadomości: 66
  • Miejsce pobytu:
    Poznań
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #8 dnia: 2017.09.05, 15:59:22 »
Panowie, bardzo dziękuję za obrazowe przedstawienie technicznych aspektów związanych z grafiką na ZX Spectrum.
Jestem grafikiem i animatorem stąd analogie z kartkami papieru i foliami zrozumiałem, niestety nie miałem okazji tworzyć nigdy grafiki na ZX Spectrum stąd moje pytania.
Gdybym miał jeszcze jakieś wątpliwości to nie omieszkam poprosić Was o konsultacje, a jak filmik będzie gotowy to dam info na stronie.

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Tworzenie grafiki i sprajtów w ZX Spectrum - prośba o konsultacje
« Odpowiedź #9 dnia: 2017.09.05, 21:05:25 »
Być może już to wiesz ale na wszelki wypadek napiszę - w sieci istnieje bardzo dobra (w porównaniu z innymi grami) dokumentacja gry Skool Daze:

http://skoolkit.ca/disassemblies/skool_daze/

Jest tam też sekcja poświęcona grafice. Jeśli nie jesteś programistą to pewne wątki mogą być za trudne ale jak cię coś zaciekawi to pytaj.