Player/Missile Graphics: Różnice pomiędzy wersjami
m →Rozmiar: lit. |
nomenklatura |
||
| Linia 3: | Linia 3: | ||
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). | 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 | W 8-bitowych komputerach Atari możliwe jest uzyskanie czterech niezależnych graczy i czterech pocisków (lub pięciu graczy - piątego uzyskujemy przez połączenie czterech pocisków). | ||
== Kształt == | == Kształt == | ||
Każdy | Każdy gracz ma szerokość 8 pikseli. Ich kształty definiuje się w osobnych obszarach określonych przez zawartość [[Rejestry ANTIC-a#PMBASE|PMBASE ($D407)]]. | ||
Każdemu bitowi w bajcie odpowiada jeden piksel | Każdemu bitowi w bajcie odpowiada jeden piksel gracza. | ||
Kolejne bajty definiowane w obszarze dowolnego | Kolejne bajty definiowane w obszarze dowolnego gracza: | ||
0 7 - piksel | 0 7 - piksel | ||
n ........ | n ........ | ||
| Linia 42: | Linia 42: | ||
bajt | bajt | ||
Każdemu bitowi, podobnie jak w przypadku | Każdemu bitowi, podobnie jak w przypadku graczy, odpowiada dokładnie jeden piksel pocisku. | ||
== Kolory == | == Kolory == | ||
Jeden | Jeden gracz może mieć dowolny, wybrany z palety, kolor - pocisk ma zawsze ten sam kolor co odpowiadający mu gracz (np. jeśli gracz 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 [[Rejestry GTIA#COLPF3|COLPF3 ($D019)]]. Przez ingerencję w rejestr [[Rejestry GTIA#GTIACTL|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 0 + gracz 1 | ||
| Linia 57: | Linia 57: | ||
== Pozycjonowanie == | == Pozycjonowanie == | ||
Pozycję poziomą | Pozycję poziomą graczy kontroluje się wpisując ich położenie do rejestrów [[Rejestry GTIA#HPOSP0|HPOSP0-HPOSP3 ($D000-$D003)]]. Podobnie zmienia się pozycję poziomą pocisków - należy wpisywać pożądane wartości do rejestrów [[Rejestry GTIA#HPOSM0|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 | Niestety nie ma rejestrów określających pozycję pionową - kontroluje się ją zmieniając położenie graczy oraz pocisków w obszarze pamięci wskazywanym przez [[Rejestry ANTIC-a#PMBASE|PMBASE ($D407)]]. | ||
== Wykrywanie kolizji == | == Wykrywanie kolizji == | ||
Istnieje również możliwość sprzętowego wykrywania wzajemnych kolizji duszków z tłem, jak i z innymi duszkami. Służą do tego rejestry tylko do odczytu: | |||
[[Rejestry GTIA#KOLM0PF|KOLM0PF-KOLM3PF ($D000-$D003)]] Kolizja pocisku z tłem. Wartości odczytujemy z poniższego schematu: | * [[Rejestry GTIA#KOLM0PF|KOLM0PF-KOLM3PF ($D000-$D003)]] Kolizja pocisku z tłem. Wartości odczytujemy z poniższego schematu: | ||
<pre> | <pre> | ||
| Linia 72: | Linia 72: | ||
</pre> | </pre> | ||
[[Rejestry GTIA#KOLP0PF|KOLP0PF- | * [[Rejestry GTIA#KOLP0PF|KOLP0PF-KOLP3PF ($D004-$D007)]] Kolizja gracza z tłem: | ||
<pre> | <pre> | ||
| Linia 79: | Linia 79: | ||
</pre> | </pre> | ||
[[Rejestry GTIA#KOLM0P|KOLM0P-KOLM3P ($D008-$D00B)]] Kolizja pocisku z | * [[Rejestry GTIA#KOLM0P|KOLM0P-KOLM3P ($D008-$D00B)]] Kolizja pocisku z graczem (nie ma rejestrów służących do wykrywania kolizji pocisku z pociskiem): | ||
<pre> | <pre> | ||
| Linia 86: | Linia 86: | ||
</pre> | </pre> | ||
[[Rejestry GTIA#KOLP0P|KOLP0P-KOLP3P ($D00C-$D00F)]] Kolizja | * [[Rejestry GTIA#KOLP0P|KOLP0P-KOLP3P ($D00C-$D00F)]] Kolizja gracza z graczem: | ||
<pre> | <pre> | ||
| Linia 95: | Linia 95: | ||
== Rozmiar == | == Rozmiar == | ||
Matryca | Matryca graczy ma 8 punktów szerokości, pocisków 2 punkty. Gracze 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 [[Rejestry GTIA#SIZEP0|SIZEP0-SIZEP3]]: | ||
<pre> | <pre> | ||
| Linia 105: | Linia 105: | ||
</pre> | </pre> | ||
Dla ustalenia szerokości dla | Dla ustalenia szerokości dla pocisków używa się rejestru [[Rejestry GTIA#SIZEM|SIZEM ($D00C)]]: | ||
<pre> | <pre> | ||
| Linia 116: | Linia 116: | ||
</pre> | </pre> | ||
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 [[Rejestry ANTIC-a#PMBASE|PMBASE $D407]]. Bit skasowany oznacza tu piksel przezroczysty, bit ustawiony - piksel w kolorze wybranym dla danego | 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 pamięci wskazywanym przez rejestr [[Rejestry ANTIC-a#PMBASE|PMBASE $D407]]. Bit skasowany oznacza tu piksel przezroczysty, bit ustawiony - piksel w kolorze wybranym dla danego duszka. | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] | ||
Wersja z 10 mar 2016, 22:27
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 graczy i czterech pocisków (lub pięciu graczy - piątego uzyskujemy przez połączenie czterech pocisków).
Kształt
Każdy gracz 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 gracza.
Kolejne bajty definiowane w obszarze dowolnego gracza:
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 graczy, odpowiada dokładnie jeden piksel pocisku.
Kolory
Jeden gracz może mieć dowolny, wybrany z palety, kolor - pocisk ma zawsze ten sam kolor co odpowiadający mu gracz (np. jeśli gracz 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ą graczy kontroluje się wpisując ich 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 graczy oraz pocisków w obszarze pamięci wskazywanym przez PMBASE ($D407).
Wykrywanie kolizji
Istnieje również możliwość sprzętowego wykrywania wzajemnych kolizji duszków z tłem, jak i z innymi duszkami. 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-KOLP3PF ($D004-$D007) Kolizja gracza 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 graczem (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 gracza z graczem:
Bit 7 6 5 4 3 2 1 0 Duszek ...nieużywane.... 3 2 1 0
Rozmiar
Matryca graczy ma 8 punktów szerokości, pocisków 2 punkty. Gracze 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 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 1 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 pamięci wskazywanym przez rejestr PMBASE $D407. Bit skasowany oznacza tu piksel przezroczysty, bit ustawiony - piksel w kolorze wybranym dla danego duszka.