Player/Missile Graphics
From Atariki
Wersja z dnia 21:12, 10 mar 2016 Mono (Dyskusja | wkład) (→Rozmiar - lit.) ← Previous diff |
Wersja z dnia 21:27, 10 mar 2016 Mono (Dyskusja | wkład) (nomenklatura) Next diff → |
||
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 duszków i czterech pocisków (lub pięciu duszków - piątego uzyskujemy przez połączenie czterech pocisków). | + | 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 duszek ma szerokość 8 pikseli. Ich kształty definiuje się w osobnych obszarach określonych przez zawartość [[Rejestry ANTIC-a#PMBASE|PMBASE ($D407)]]. | + | 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 duszka. | + | Każdemu bitowi w bajcie odpowiada jeden piksel gracza. |
- | Kolejne bajty definiowane w obszarze dowolnego duszka: | + | 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 duszków, odpowiada dokładnie jeden piksel pocisku. | + | Każdemu bitowi, podobnie jak w przypadku graczy, odpowiada dokładnie jeden piksel pocisku. |
== Kolory == | == 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 [[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: | + | 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ą duszków kontroluje się wpisując jego 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. | + | 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 duszków (pocisków) w obszarze wskazywanym przez [[Rejestry ANTIC-a#PMBASE|PMBASE ($D407)]]. | + | 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 == | ||
- | 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: | + | 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-KOLP1PF ($D004-$D007)]] Kolizja duszka z tłem: | + | * [[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 duszkiem (nie ma rejestrów służących do wykrywania kolizji pocisku z pociskiem): | + | * [[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 duszka z duszkiem: | + | * [[Rejestry GTIA#KOLP0P|KOLP0P-KOLP3P ($D00C-$D00F)]] Kolizja gracza z graczem: |
<pre> | <pre> | ||
Linia 95: | Linia 95: | ||
== Rozmiar == | == 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 [[Rejestry GTIA#SIZEP0|SIZEP0-SIZEP3]]: | + | 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 wszystkich pocisków używa się rejestru [[Rejestry GTIA#SIZEM|SIZEM ($D00C)]]: | + | 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 obiektu. | + | 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 dnia 21:27, 10 mar 2016
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 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.