Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Marek Turowski
Seans spirytystyczny - wywoływanie duchów na Atari XL/XE (2)
Syzygy #3

W poprzednim 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

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info