Jerzy "Mono" Kut to zupełne przeciwieństwo wielu forumowych
krzykaczy, do których sam się pewnie zaliczam :). Zamiast panoszyć
się ze swoimi poglądami, w zaciszu dłubie i dłubie... a potem
okazuje się, że wydłubał, najczęściej coś, o czym inni tylko
rozmawiają, marnując czas na jałowe dyskusje. Pokazałem
wczoraj jego rewelacyjne grafiki zrobione autorskim programem
Graph8, a dziś prezentuję sam program, w którym powstały. To
jeszcze jedno wykopalisko z zeszłego stulecia - aplikacja
powstawała w latach 1994-1997. Przez skromność autora dotychczas
tylko kilka osób miało przyjemność widzieć to dziełko, ale nastał
czas, by zaprezentować je szerszej publiczności.
Mono w Głuchołazach z Epim (po lewej) i TDC
(po prawej)
Program, jak sama nazwa wskazuje, służy do tworzenia grafiki w
ósmym trybie graficznym czyli w hi-res, w kolorze (w sensie
komputerowym) czarnym i białym, o maksymalnych rozmiarach obrazka
320 na 200 pikseli. Działa na standardowym Atari i do prawidłowego
działania wymaga oczywiście DOS-a (ma specjalne wsparcie dla
SpartaDOS). Z unikalnych rzeczy: posiada własny format zapisu i
odczytu danych (format: rozszerzenie GHG - Gephard Hires Graphics,
nagłówek tego formatu to dwa bajty szerokości obrazka, potem bajt
wysokości, a potem lecą żywe dane od lewej do prawej i z góry na
dół), potrafi zapisywać rysunki w formacie peceta (BMP) oraz Amigi
(IFF/ILBM). Zaprawdę ciekawe narzędzie jak na lata, w których
powstawało.
Po uruchomieniu widzimy ściągawkę ze spisem klawiszy rozpoznawanych
przez program. Naciśnięcie dowolnego klawisza przenosi nas na ekran
główny. Tutaj mamy nasze pole do rysowania o wymiarach 320 na 200
pikseli, kształt narzędzia (pędzla) do rysowania w lewym, górnym
rogu ekranu oraz linię informacyjną na dole ekranu. Pasek
informacyjny oprócz nazwy programu zawiera dane o aktualnym kolorze
pędzla (Colr) oraz jego rozmiarze (Brsh), wymiarach aktualnego
bloku (szerokość i wysokość, standardowo blokiem jest cały obrazek)
i aktualnej pozycji pędzla na ekranie (x i y). Rysować możemy
klasycznie i oldschoolowo - joystickiem lub klawiaturą (kursory i
Shift), albo bardziej nowocześnie - przy użyciu myszki od Amigi
(jak pisze Mono:
"prawy przycisk trzeba podpiąć do +5V przez
rezystor i jest chyba okey - przynajmniej w mojej myszce; ale chyba
tutaj nie jest prawy przycisk w ogóle obsługiwany, więc można
śmiało wpinać do Atari bez przeróbki i powinno działać").
Klawiszami od 1 do 8 zmianiamy grubości pędzla, klawisz inwersji
zmienia kolor pędzla między czarnym i białym (pędzlem, a gumką),
Control+Clear czyści ekran. Blok odznacza się wciskając Control+B,
po czym należy wcisnąć przycisk i ciągnąć do punktu, w jakim chcesz
blok zakończyć (nie mają znaczenia kierunki). Robimy to
następująco:
- wciskamy Control+B,
- wciskamy i trzymamy Shift,
- przesuwamy kursor w dowolne miejsce za pomocą strzałek (na
prawdziwym Atari Control+-/=/+/*),
- puszczamy Shift.
Można to też zrobić joystickiem - wciskamy i trzymamy fire zamiast
Shift, przesuwamy kursor na koniec bloku i puszczamy fire.
Analogicznie myszą, ale z użyciem jej lewego przycisku. Rozmiar
bloku będzie się zmieniał na bieżąco. To, gdzie mamy aktualnie
zaznaczony blok można łatwo sprawdzić inwersją bloku (Control+I).
Ładowanie bloku odbywa się za pomocą Control+L i wpisania lokacji -
linia nazwy pliku ma support do SpartaDOS 3.2d:
- Control+strzałki poruszają kursorem,
- Shift+Clear/Insert to skok do początku i końca wiersza,
- Shift+strzałki przeskakują do kolejnych członów nazwy
(separowanych :,<,> i .),
- Control+Backspace kasuje obrazek,
- Shift+Backspace usuwa człon do najbliższego separatora po
lewej,
- Escape opuszcza linię nazwy pliku.
Zapis bloku (a więc i całego obrazka) do pliku to Control+S.
Program potrafi czytać i zapisywać własny format GHG, a eksportować
do prawdziwej pecetowej bitmapy (BMP) całego ekranu odbywa się za
pomocą Control+X. Samo X eksportuje do IFF/ILBM. Przetestowałem oba
formaty - zarówno mój pecet (BMP, IFF), STE (IFF), jak i Amiga
(IFF) czytają je bez problemu. Mamy do dyspozycji schowek - używane
są do jego obsługi dwa klawisze: Insert - wstawia blok ze schowka,
Delete - pobiera blok do schowka.
I jeszcze komentarz od Jurka:
Wszystkie prace zostały wykonane
tym właśnie programem przy użyciu: klawiatury, joysticka i myszki
od Amigi podłączonej do Atari (różne manipulatory przydawały się na
różnych etapach pracy). Rozwijałem ten programik jeszcze pod kątem
obsługi różnych kształtów pędzla, ale nie wiem czy jest jakaś
działająca wersja. Jak znajdę to podeślę.
Dzisiaj nie umiem już rysować :). To były chyba jedne z ostatnich
prac, które zrobiłem w ogóle. Trochę jeszcze rysowałem ołówkiem na
papierze, ale to też tamte czasy (pierwsze lata technikum - ponad
10 lat temu). Na Głuchołazach 2007 zastanawiałem się, czy nie
pokazać tych obrazków na gfx compo, ale w końcu zrezygnowałem.
Dawno to było i nieprawda :). Pokazałem je publicznie w sumie tylko
raz, na sztabie u Jada, w obecności Pinokia, Dracona, Truba i
Yerzmyeya.
.png)
.png)
"Prince.ghg" to jakiś szkic; to samo "cos.ghg". "game1.ghg" to
szkice postaci do planowanej przeze mnie dawno temu gry
polityczno-przygodowej. Obawiam się jednak, że sam nie dałbym rady
temu nawet dzisiaj - podstawa to bardzo dobry scenariusz, a nie
grafika. "Aplr.ghg" to grafika do playera CMC. "Digits.ghg" to
jakieś wydziwiane cyferki. Reszta to różne skończone
rzeczy."
Dysk z programem i wszystkimi grafikami jest już w
katalogu
użytków. Dodatkowo na dyskietce znajduje się programik
WORM.COM, który jest ciekawym wygaszaczem ekranu (włącza się
zamiast trybu przyciągania uwagi). Enjoy!
------------
Uzupełnienie podesłane przez Jurka:
"Nawiasem mówiąc analizowałem format zapisu pliku GHG i trzeba
uściślić - plik jest binarny o następującym formacie:
0...1: LSB-MSB szerokość bloku w
pikselach
2: wysokość bloku w pikselach
3..x: grafika
Grafika zapisywana jest począwszy od linii 0 aż do n-1 (dla bloku
złożonego z n linii). Każda linia zapisywana jest w postaci m
bajtów uszeregowanych następująco:
piksel
0 0 0 1 1 2
0 7 8 5 6 3
-------- -------- --------
0 1 2
bajty
W przypadku gdy ilość pikseli nie jest wielokrotnością 8 (tyle
pikseli mieści się w bajcie), bity odpowiadające pikselom poza
linią bloku są kasowane na 0, na przykład blok o szerokości 3
pikseli zostanie zapisany następująco:
bity
0 7
***-----
0
bajty.
Ilośc bajtów linii można więc obliczyć za pomocą wzoru:
(width+7)/8. Wynik jest oczywiście liczbą całkowitą z OBCIĘTYMI
miejscami po przecinku (nie zaokrąglamy)."