Player/Missile Graphics
From Atariki
Spis treści |
Charakterystyka
Player and Missile Graphics - "grafika graczy i pocisków". Właściwość układu GTIA polegająca na nakładaniu na ekran obiektów niezależnych od zwykłej zawartości ("tła" oraz "ramek"). Generowane w ten sposób ruchome obiekty znane są na innych platformach sprzętowych pod nazwą "duszków" (ang. sprites).
W 8-bitowych komputerach Atari możliwe jest uzyskanie czterech niezależnych duszków i czterech pocisków (lub pięciu duszków - piątego uzyskujemy przez połączenie czterech pocisków).
Kształt
Każdy duszek ma szerokość 8 pikseli. Ich kształty definiuje się w osobnych obszarach określonych przez zawartość PMBASE ($D407). Każdemu bitowi w bajcie odpowiada jeden piksel duszka.
Kolejne bajty definiowane w obszarze dowolnego duszka:
0 7 - piksel
n ........
..oooo..
.o....o.
o.o..o.o
o......o
o.oooo.o
.o....o.
..oooo..
n+8 ........
: 7 0 - bit
bajt
Szerokość pocisku wynosi 2 piksele. Ponieważ wszystkich dostępnych pocisków jest dokładnie 4, to definiuje się je razem poprzez wypełnienie odpowiednich par bitów w obszarze pocisków określanym również przez zawartość PMBASE ($D407):
Kolejne bajty definiowane w obszarze pocisków:
3 2 1 0 - pocisk
: : : :
01 01 01 01 - piksel
n .. .. .. ..
.. oo oo ..
.o .. .o o.
o. .. oo .o
o. .o o. .o
o. oo .. .o
.o o. .. o.
.. oo oo ..
n+8 .. .. .. ..
: 76 54 32 10 - bit
bajt
Każdemu bitowi, podobnie jak w przypadku duszków, odpowiada dokładnie jeden piksel pocisku.
Kolory
Jeden duszek może mieć dowolny, wybrany z palety, kolor - pocisk ma zawsze ten sam kolor co odpowiadający mu duszek (np. jeśli duszek nr 3 ma kolor $0A pocisk ma również kolor $0A). Wyjątkiem jest sytuacja, kiedy łączymy pociski w celu otrzymania piątego gracza - w tym przypadku gracz ten otrzymuje kolor z rejestru COLPF3 ($D019). Przez ingerencję w rejestr GTIACTL ($D01B) można też spowodować, że nakładające się piksele obiektów będą miały trzeci kolor uzyskiwany przez wykonanie logicznego OR na wartościach rejestrów kolorów nakładających się obiektów. Nakładanie kolorów zachodzi wyłącznie w parach:
- gracz 0 + gracz 1
- gracz 2 + gracz 3
- pocisk 0 + pocisk 1
- pocisk 2 + pocisk 3
Kolory ustalamy wpisując odpowiednie wartości do rejestrów COLPM0-COLPM3 ($D012-$D015).
Pozycjonowanie
Pozycję poziomą duszków kontroluje się wpisując jego położenie do rejestrów HPOSP0-HPOSP3 ($D000-$D003). Podobnie zmienia się pozycję poziomą pocisków - należy wpisywać pożądane wartości do rejestrów HPOSM0-HPOSM3 ($D004-$D007). Są to rejestry tylko do zapisu.
Niestety nie ma rejestrów określających pozycję pionową - kontroluje się ją zmieniając położenie duszków (pocisków) w obszarze wskazywanym przez PMBASE ($D407).
Wykrywanie kolizji
Komputery z serii 400/800/XL/XE mają również możliwość sprzętowego wykrywania kolizji duszków (pocisków) z tłem, jak i z innymi duszkami (pociskami). Służą do tego rejestry tylko do odczytu:
KOLM0PF-KOLM3PF ($D000-$D003) Kolizja pocisku z tłem. Wartości odczytujemy z poniższego schematu:
Bit 7 6 5 4 3 2 1 0
Rejestr koloru ...nieużywane.... 3 2 1 0
KOLP0PF-KOLP1PF ($D004-$D007) Kolizja duszka z tłem:
Bit 7 6 5 4 3 2 1 0
Rejestr koloru ....nieużywane... 3 2 1 0
KOLM0P-KOLM3P ($D008-$D00B) Kolizja pocisku z duszkiem (nie ma rejestrów służących do wykrywania kolizji pocisku z pociskiem):
Bit 7 6 5 4 3 2 1 0 Duszek ...nieużywane.... 3 2 1 0
KOLP0P-KOLP3P ($D00C-$D00F) Kolizja duszka z duszkiem:
Bit 7 6 5 4 3 2 1 0 Duszek ...nieużywane.... 3 2 1 0
Rozmiar
Matryca duszków ma 8 punktów szerokości, pocisków 2 punkty. Duszki oraz pociski mogą być sprzętowo rozszerzane za pomocą przeznaczonych do tego celu rejestrów. Możliwe są: szerokość pojedyncza, podwójna i poczwórna. Uzyskuje się je ustawiając odpowiednie kombinacje bitów w rejestrach SIZEP0-SIZEP3:
Bit 7 6 5 4 3 2 1 0
Szerokość: ...nieużywane... 0 0 pojedyncza (8 cykli koloru)
0 1 podwójna (16 cykli koloru)
1 0 pojedyncza
1 1 poczwórna (32 cykle koloru)
Dla ustalenia szerokości dla wszystkich pocisków używa się rejestru SIZEM ($D00C):
Bity Szerokość:
pojedyncza podwójna poczwórna
7 i 6: pocisk 3 0,128 64 192
5 i 4: pocisk 2 0, 32 16 48
3 i 2: pocisk l 0, 8 4 12
1 i 0: pocisk 0 0, 2 1 3
Co do wysokości, zarówno gracze jak i pociski mają zawsze wysokość całego ekranu (łącznie z ewentualnymi ramkami) - oczywiście widać przy tym tylko te ich części, które zostały "narysowane" w obszarze wskazywanym przez rejestr PMBASE $D407. Bit skasowany oznacza tu piksel przezroczysty, bit ustawiony - piksel w kolorze wybranym dla danego obiektu.
