
Na Atari duszki mogą nie tylko mieć własny kolor, ustawiany w odpowiednich rejestrach duszków, o czym wie każdy, ale również uzyskać dodatkowe kolory w wyniku nakładania koloru jednego duszka z kolorem innego duszka (lub nałożenia koloru duszka na kolor grafiki). Realizuje się tę magię przez włączenie w mocarnym rejestrze PRIOR/GPRIOR bitu odpowiadającego za graczy wielokolorowych. Nie jest to zbyt często wykorzystawaną właściwością w grach i demach, ponieważ początkujący mają problem ze zrozumieniem jak to działa i jakie kolory można uzyskać, a bardziej zaawansowani unikają utrudniania i spowalniania sobie pracy, bo uzyskiwane kolory zależą od kilku czynników, które trzeba wziąć pod uwagę.
Zacznijmy od najprostszego przykładu. Jeżeli na ekranie nałożymy na siebie duszka 0 i 1, to w miejscu nałożenia pikseli obu duszków, powstanie dodatkowy kolor. Kolor ten wyliczany jest poprzez działanie funkcji bitowego OR, stąd potocznie nazywa się to "OR-owaniem koloru". Uwaga! Ta nazwa może być trochę myląca. Może sugerować, że OR-owana jest wartość składowych koloru, a to nieprawda. OR-owany jest indeksu koloru czyli jego pozycja w palecie! A więc pamiętajmy, że zmienia się numer koloru, a nie składowe koloru. Technicznie realizuje to układ GTIA, który wylicza nowy kolor w palecie swoją wewnętrzną funkcją.
W przykładzie powyżej nowe kolory uzyskamy po nałożeniu na siebie duszków 0 i 1. Ale można uzyskać nowy kolor również po nałożeniu na siebie drugiej pary - duszka 2 i 3. Te dwie pary duszków pozwalają uzyskać nowe kolory. Inne kombinacje, na przykład nałożenie duszka 0 i 3 albo 1 i 2 nie dadzą żadnego nowego koloru. Wyjaśnię, że terminem "duszek" określam tu zarówno gracza (ang. player), jak i pocisk (ang. missile), czyli nazwy występujące w terminologii firmy Atari (stąd "grafika graczy i pocisków", co jest kalką ang. Player/Missile Graphics, PMG). Gdy więc piszę o duszku, to piszę zarówno o graczach, jak i pociskach. Tutaj zadziała każda kombinacja gracza i pocisku 0 z graczem i pociskiem 1. Tak samo każda kombinacja gracza i pocisku 2 z graczem i pociskiem 3.
Ponadto jest możliwe, po włączeniu priorytetu 0 dla grafiki PMG, aby duszek 0 i 1 dawały nowe kolory po nałożeniu na dwa kolory grafiki (kolory w rejestrach COLPF0 i COLPF1), a duszek 2 i 3 dawały nowe kolory w interferencji z grafiką z rejestrów COLPF2 i COLPF3. Co więcej, można nałożyć tak uzyskany kolor, pochodzący ze zmieszania duszków 0 i 1 (lub duszków 2 i 3), na kolory grafiki - i uzyskać jeszcze inne kolory, bo w wyniku podwójnego OR-wania!

rys 1. Tak z jednego duszka można wycisnąć 3 kolory w linii (a z dwóch duszków 6 kolorów w linii). Tutaj kolory nie są ułożone w linii, ale to przykład, zależy jak sobie ułożymy piksele w duszkach.

rys 2. Tak z pary duszków można wycisnąć 9 kolorów w linii (a z dwóch par duszków 18 kolorów w linii).

rys 3. Po dodaniu 5 kolorów grafiki mamy 23 kolory!
Maksymalnie możemy więc na ekranie dysponować 23 kolorami, bez specjalnych sztuczek, wykorzystując jedynie standardowe możliwości komputera (o czym Mono pisał tutaj):
Od takiej listy może rozboleć głowa, ale ona pokazuje, co możemy OR-ować, a nie jaki efekt uzyskamy z samego OR-owania. Wyliczenie, jaki kolor uzyskamy przez OR-owanie, możemy oczywiście przeprowadzić "ręcznie". Z tym, że jest to żmudna robota, no i potem trzeba jeszcze "ręcznie" sprawdzić wynik czyli ustawić i wyświetlić odpowiednie kolory we własnym programie, żeby zobaczyć efekt. I tu dochodzimy do początkowego pytania - do czego służy ten program? Do tego, by nie wyliczać tego wszystkiego na piechotę. Mamy tu podgląd efektu mieszania wybranego koloru od razu z wszystkimi pozostałymi stu dwudziestoma siedmioma kolorami.
Po uruchomieniu programu widzimy trzy obszary: po lewej wyświetlana jest paleta 128 kolorów, dostępna we wszystkich trybach graficznych i tekstowych Atari (przypomnę, że paletą 256 kolorów dysponujemy tylko w jednym trybie, GR.9). Każdy kolor ma tu swoją stałą pozycję i wartość, podaną szesnastkowo. Wystarczy kliknąć którykolwiek kolor po lewej, by wybrany kolor pojawił się w środkowej części. A po prawej będziemy widzieli efekt mieszania tego koloru z innymi. Pierwsza kolumna to dany kolor z palety, z którym będziemy mieszać nasz wybrany kolor, a druga kolumna to efekt tego mieszania. Wygląda to skomplikowanie, ale jest banalnie proste w używaniu. Dzięki temu możemy od razu zobaczyć, które składowe nam się przydadzą do mieszania kolorów duszków i jaki efekt mieszania uzyskamy.

Program pokazuje kolory dla pojedynczego OR-owania, a nie podwójnego, które daje dodatkowe 4 kolory, ale w razie potrzeby można sobie i z tym poradzić. Wystarczy zrobić OR w dwóch krokach. Na przykład w pierwszym kroku ze zmieszania koloru o numerze $5A z kolorem o numerze $6E uzyskujemy z-OR-owany kolor $7E. Teraz wybieramy ten kolor $7E z panelu po lewej i odczytujemy wynik drugiego OR-owania z panelu po prawej.

Na moją prośbę autor dodał jeszcze możliwość załadowania palety w formacie ACT, znanym z emulatorów. To przydatna funkcja. Raz, że palety w systemach kolorów PAL, NTSC i SECAM są odmienne, dwa, że nawet w ramach jednego systemu kolorów powstały różne przybliżenia palety prawdziwego Atari (znam ich kilkanaście dla samego PAL). Bywa też, że koderzy i graficy upierają się przy jakiejś konkretnej, swojej ulubionej palecie, więc program daje im możliwość jej wczytania i używania.

Warto też dodać, że ponieważ paleta PAL czy NTSC różnią się wartościami kolorów palety, to mimo, że OR-owanie jest identyczne dla obu systemów, to uzyskujemy inny efekt. Planując nakładanie kolorów w swoich duszkach warto pamiętać o tych różnicach, żeby nie być zaskoczyć, że gra wykorzystująca mieszanie duszków lub duszków z tłem inaczej wygląda kolorystycznie po uruchomieniu na NTSC, a inaczej na PAL. Na przykład kolory brązowe w PAL wyświetlą nam się jako zielone w NTSC... Można się przekonać o tym porównując na przykład paletę laoo.act (PAL) z larry.act (NTSC):


Program multicolor sprites.jar do ściągnięcia stąd. Za pomoc przy opracowaniu artka dziękuję koledze Mono, który przygotował obrazek z nakładaniem się kolorów. Do dyskusji na temat arcyciekawy temat kolorów odsyłam do wspomnianego wątku kolegi Mono.
2021-02-25 20:46 by Kaz
komentarzy: 4