## SEANS SPIRYTYSTYCZNY #2

### - wywoływanie duchów na Atari -

#### * KOLIZJE *

W porzednim odcinku udało się nam zmaterializować na ekranie duszki. Możemy je też dowolnie przemieszczać.

Osiągnięty efekt jest niewątpliwie ciekawy wizualnie, lecz zupełnie nieprzydatny. Zanim napiszemy wspaniałą, niewątpliwie grę, musimy się nauczyć wykrywać kolizje pomiędzy graczami i polem gry. Przy wykorzystaniu grafiki graczy i pocisków jest to wyjątkowo proste. Istnieje cały szereg rejestrów sygnalizujących wystąpienie kolizji. Każdy duszek posiada dwa takie rejestry. W jednym przechowywane są informacje o wystąpieniu zderzeń z polem gry, a w drugim o kolizjach z innymi graczami. Identyczne rejestry posiadają pociski, jednak chwilowo nie będą nam one potrzebne. Wszystkie te rejestry mogą być tylko odczytywane. Wykorzystane są w nich bity 0-3, pozostałe są zawsze nieustawione (równe zero).

Rejestry `KOLPnPF` (n - numer duszka) sygnalizują zderzenie duszka z polem gry. Oto ich adresy:

`KOLP0PF` (53252 - $D004) kolizje duszka nr 0 z polem gry
`KOLP1PF` (53253 - $D005) kolizje duszka nr 1 z polem gry
`KOLP2PF` (53254 - $D006) kolizje duszka nr 2 z polem gry
`KOLP3PF` (53255 - $D007) kolizje duszka nr 3 z polem gry

Ustawienie bitu 0-3 w tych rejestrach oznacza zderzenie gracza z polem gry o kolorze z rejestru odpowiadającemu numerowi ustawionego bitu, np. ustawienie bitu nr 1 wskazuje zderzenie gracza z polem gry o kolorze z rejestru COLPF1. By łatwiej zrozumieć, o jaki kolor chodzi, wystarczy wiedzieć, że zawartość rejestrów COLPF0 do COLPF3 jest ustalana za pomocą instrukcji Basica SETCOLOR 0 do 3.

Rejestry KOLPnP (n - numer duszka) sygnalizują zderzenie duszka z innymi duszkami. Ich adresy:

`KOLP0P` (53260 - $D00C) kolizje duszka nr 0 z innymi duszkami
`KOLP1P` (53261 - $D00D) kolizje duszka nr 1 z innymi duszkami
`KOLP2P` (53262 - $D00E) kolizje duszka nr 2 z innymi duszkami
`KOLP3P` (53263 - $D00F) kolizje duszka nr 3 z innymi duszkami

Ustawienie bitu 0-3 tych rejestrów sygnalizuje kolizję duszka z innym duszkiem, o numerze odpowiadającym numerowi ustawionego bitu, np. ustawienie bitu nr 1 sygnalizuje kolizję z duszkiem nr 1 oczywiście.

Wykrywanie kolizji polega na okresowym sprawdzaniu zawartości podanych rejestrów. Ustawiony bit nie jest kasowany nawet wtedy, gdy obiekty już się nie stykają. Rejestry można skasować (wszystkie jednocześnie) przez wpisanie dowolnej wartości do rejestru `HITCLR` (53278 - $D01E).

#### Terminologia dla nieco zdezorientowanych:

Rejestr
  Komórka pamięci o określonym adresie, przechowująca dane dla prawidłowej pracy systemu operacyjnego lub każdego innego programu.
Pole gry
  Punkty na planszy, mające inny kolor, niż tło.
Bit ustawiony to 1, skasowany - 0. Wyliczanie zawartości rejestru w zależności od ustawienia bitów:

  numer bitu: | 3 | 2 | 1 | 0
  wartość bitu: | 8 | 4 | 2 | 1

czyli zawartość rejestru, odczytana np. instrukcją `PEEK`, równa 2 oznacza, że ustawiony jest bit nr 1. Zawartość rejestru równa 3 oznacza, że ustawione są dwa bity, nr 0 i nr 1, ich wartości się sumują.

Wszystkie wiadomości o ustawionych bitach, numerach kolorów, czy duszków są dla tych bardziej zorientowanych (i ambitnych). Najczęściej wystarczy sprawdzać rejestry, czy nie zmieniły wartości z zerowej na jakąkolwiek inną, co już sygnalizuje kolizję.

#### PRIORYTETY

Podczas przesuwania się duszków na ekranie, należy określić, który z nich będzie widoczny w momencie spotkania. Dotyczy to też spotkań duszków z polem gry, narysowanym kolorami 0-3. Jest to tzw. priorytet wyświetlania duszków. Jest on kontrolowany przez zmianę zawartości rejestru `GTIACTLS` (623 - $026F).

kolejność wyświetlania | rejestru zawartość
duszki 0-3, kolor 0-3, tło | 1
duszki 0-1, kolor 0-3, duszki 2-3, tło | 2
kolor 0-3, duszki 0-3, tło | 4
kolor 0-1, duszki 0-3, kolor 2-3, tło | 8

Inne wartości rejestru spowodują nieprzewidywalne ustawienie priorytetu. Rejestr GTIACTLS może przyjmować wartości różne od podanych wyżej, nas będzie interesować jedynie zwiększenie go o 32. Wtedy przy spotkaniu duszków 0 i 1 lub 2 i 3 ich kolory będą się nakładać. Taka para przemieszczana razem da efekt duszka trójkolorowego.

Marek Turowski