Czy tych duszków potrzebujesz do obiektów ruchomych czy do statycznego tła?
Zauważ, że nawet przy poczwórnej rozdzielczości w poziomie pozycję sprite'a możesz ciągle ustalać z dokładnością do jednego piksela (tryb 12OS). Jeśli ustalisz priorytet ducha tak, że będzie on rysowany pod kolorami pola gry (czyli pod obrazem wyłączywszy tło czyli parę bitów 00), to stawiając piksele na obrazie możesz zasłonić część szerokiego piksela sprajta. Dzięki temu możesz sobie przykryć cały ekran (statycznie) lub mieć dodatkowe kolory dla programowego sprajta (bo pozycję szerokiego sprajta zmieniasz z precyzją cyklu koloru czyli piksela w OS12). Wyglądałoby to np tak:
5555 - jeden bit sprajta x4
0123 - zawartość znaczka
w efekcie dostajesz coś co wygląda na ekranie
5123
a więc piksel dodatkowego koloru 5 :) Sprajt jest w poziomie ustawiony tak, że jego piksele pokrywają się dokładnie ze znakami.
Oczywiście jeśli grafika wygląda tak:
5555 - jeden bit sprajta x4
0103 - zawartość znaczka
to dostaniesz
5153
a więc nie użyjesz tu koloru tła (00), bo przesłania go ciągle sprajt. Jeśli natomiast sprajta przesuniesz o piksel
5555 - jeden bit sprajta x4
01030120 - zawartość dwóch znaczków
to wtedy w wyniku dostaniesz
01535120
ale część sprajta przesłoni wtedy następny tło następnego znaczka (pierwsza para bitów 00 z drugiego znaku została przesłonięta przez sprajta).
Dokładając kolejnego sprajta dostaniesz
6666 - jeden bit sprajta x4
5555 - jeden bit sprajta x4
01030020 - zawartość dwóch znaczków
dostaniesz
01535620
i tak aż do wyczerpania ilości dostępnych sprajtów. Missiles podlegają tym samym regułom a mają tylko mniejszą szerokość, ponadto możesz włączyć 5 playera co daje dodatkowy kolor na wszystkich missiles. Kolor ten brany jest z rejestru, jaki używany jest dla pary bitów 11 w znaku w inverse. Dzięki temu możesz mieć naraz widoczne kolory 3 i 4 np.
4444 - zawartość jednego bitu missile z włączonym 5 playerem
0123 - znak BEZ inverse
a na ekranie zobaczysz
4123
Nie używając missile w tym trybie lecz samego znaku w inverse miałbyś:
0124 - znak Z inverse
Można więc tutaj czarować do woli.
Na dli możesz też zmieniać priorytety sprities pozwalając na przesłanianie dodatkowo niektórych kolorów ekranu (nie tylko koloru tła - para bitów 00).
Jest to dość skomplikowane - to fakt, ale pozwala na uzyskanie pojedynczych pikseli dodatkowych kolorów na całkiem sporych obszarach ekranu. Stosując sprite'a w rozdzielczości x1 ten obszar gwałtownie się zredukuje, a co więcej żeby uzyskać dodatkowe kolory trzeba będzie multiplikować sprajty w każdej linii ekranu co oznacza zarżnięcie procesora. Trzeba też wziąć pd uwagę, że w trybie tekstowym cała pierwsza linia skaningowa praktycznie jest zablokowana na działania ANTIC'a i tam kolorów/pozycji nie przełączysz. W trybie graficznym zaś tracisz kolor dla znaków w inverse i możesz go uzyskać już tylko 5 playerem.
Można też prócz 5 playera włączyć nakładanie kolorów, wtedy jeśli sprajty nałożą się na siebie uzyskujesz kolor będący wynikiem wykonania funkcji bitowego OR na zawartości rejestrów kolorów dla odpowiednich sprajtów - dostajesz wtedy dodatkowy kolor, którego nie ma w żadnym rejestrze :)
Na koniec słownik:
duch/sprite - player lub missile
0..3 kolory znaku bez inverse
4 - kolor dla pary 11 znaku w inverse lub tzw. 5 playera
5..8 - kolory sprajtów
Wszystko to napisałem, żeby Cię przekonać jednak do użycia szerokich sprajtów :)
Technika prostsza, o której wspomniałeś, czyli migotanie dwoma displaylistami i bankami sprajtów ze zmianą kolorów na vblk/dli (jeśli masz wyłączone przepisywanie rejestrów cienii na vlbk, to przełączanie ekranów naprzemienne można zrealizować samą dlist rozkazem jvb - wtedy na dlist przepisujesz tylko kolory i pozycje sprities), ma tę wadę, że masz dwa razy więcej grafiki do kopiowania podczas animacji.
Na koniec drobna uwaga. ANTIC ma tylko 9 rejestrów kolorów co pozwala w trybach ANTIC'a uzyskać max 9 kolorów. Uzyskanie 10 kolorów jest możliwe albo:
- multipleksowaniem sprities w linii
- przełączaniem kolorów w linii
- włączeniem trybu nakładania kolorów GTIA.
Dwie pierwsze techniki zabierają masę czasu procesora - ostatnia przerzuca całą pracę na GTIA.
edit: ponieważ chcesz zastosować BASIC proponowałbym jednak coś co nie obciąży procesora, a więc faktycznie sprities (w takiej rozdzielczości, jaka Ci wystarczy z ewentualnym włączonym trybem 5 playera) i nakładaniem kolorów i priorytetami, tudzież zmianę kolorów/priorytetów/położenia na dli/vblk.
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje