Tomasz Cieślewicz przedstawia:
Stare edytory...
W zeszłym roku zaprezentowałem wiekowy edytor znaków i grafiki,
który powstał przy okazji tworzenia kilku innych programów i gier w
Mirage Software LTD.
"Help me", bo o nim mowa, był programem zaskakująco (nawet dla
mnie, autora!) dopracowanym i posiadającym wiele funkcji (unikalne
w tym czasie undo, itp.), jak na proste narzędzie, które nawet nie
miało szans na wydanie.
Dziś zaprezentuję drugi niezbędny edytor dla każdego twórcy
programów multimedialnych: edytor sprzętowych duszków. Niestety,
mimo że został oparty o źródła programu „Help me”, nie był tak
dopracowany i rozbudowany jak tamten, początkowo umożliwiał jedynie
proste zmienianie bitów w kolejnych duszkach, kolorów i kilku
innych parametrów. Wcześniej cała grafika w moich programach
pochodziła z kartek papieru, na których podliczałem wszystkie
bity... Zapewne któregoś razu powiedziałem dość i powstał ten
edytor. Potem dzięki niemu powstało wiele duszków do moich
programów.
papierowy "edytor" znaków
papierowy "edytor" duszków, rysunek powstał
w czasie lekcji w podstawówce :)
Publikacja tego edytora była przeze mnie planowana od lat, ze
względu na fakt, że trudno znaleźć programy o podobnej
funkcjonalności, choć wielu programistów zapewne miało/ma podobne w
swoich prywatnych zbiorach narzędzi. W końcu zdecydowałem się na to
z powodu imprezy Global Game Jam, w czasie trwania której miałem
przygotować grę ze swoim zespołem. Potrzebowałem czegoś do
zaprojektowania duszków, a więc należało zapoznać zespół z
programem. A skoro tak - należało dopracować działanie i nieco
ulepszyć interfejs.
wersja 0.4 z 1991 roku
W moich zbiorach znalazłem wersję 0.4 pochodzącą z 1991 roku. Gdy
chciałem przygotować jako tako funkcjonującą wersję na potrzeby
teamu GGJ, zajrzałem do źródła. Po upływie prawie 20 lat kompletnie
nie wiedziałem o co chodzi w tym kodzie. Po drugie, niektóre
fragmenty wzbudzały mój śmiech, na przykład znalazłem w kodzie
zapis i odczyt danych dla dobrze wszystkim znanego urządzenia
"C:"... (magnetofon).
...i nowe edytory ;)
Dziś do Waszych rąk trafia znacznie udoskonalona wersja edytora.
Początkowo chciałem upublicznić historyczną wersję programu, jednak
wspólna praca z kolegą Insertem po GGJ zaowocowała szeregiem
usprawnień. Dzięki Insertowi oraz pośrednio GGJ obecna wersja
programu jest dość rozbudowana, nie jest to już tak mały i prosty
program jak poprzednio.
wersja 1.7 z 2011 roku
Dla wielu twórców chcących tworzyć kolorowe obiekty na ekranie za
pomocą sprzętowych duszków, istotne będzie, że program umożliwia
edycję kilku wybranych duszków naraz. Nazwałem to trybem scalania
duszków. Po włączeniu go funkcje operujące na większej ilości
danych graficznych, np. kopiowanie bloku danych, wypełnianie,
inwersja itp. będą funkcjonować równocześnie na wybranych duszkach.
Bardzo istotne jest, że tryb ten można w każdej chwili przełączać
(klawisz K), ustawiać jego parametry (np. klawisze H i J), a
operacja undo (klawisz Back Space) również działa, odpowiednio do
aktualnego trybu oraz jego parametrów. Operacja ta na razie nie
dotyczy grupowego ustawiania pozycji pionowej duszków. W następnych
wersjach programu będzie taka możliwość, obecnie należy ręcznie
ustawić pozycje, kolory kolejnych duszków, itp. Następnie można je
zapisać do pliku (kombinacja Control+S) i odczytać następnym razem
(klawisze Control+A).
Poza podstawowymi operacjami na duszkach, mamy możliwość operowania
na blokach w obrębie danego duszka, a prawie każda z funkcji może
dotyczyć wybranych duszków (scalanie). Istnieje możliwość sprytnego
kopiowania danych w tym trybie i bez. Do tego program posiada dwie
niezależne opcje undo, w tym jedna podwójna, w odniesieniu nawet do
wszystkich duszków (zależnie od wybranego trybu scalania).
Opis funkcji edytora
Niżej będzie używana następująca terminologia PMG (Player/Missile
Graphics): gracz - Player, pocisk - Missile, duszek - Player or
Missile. Funkcji edytora jest ponad osiemdziesiąt:
- 1, 2, 3, 4, 5 - wybór duszka do edycji, 1-4 kolejni
gracze, a 5 to pociski (jako piąty duszek), po uruchomieniu
programu aktywny jest gracz numer 1
- Shift + 1, 2, 3, 4, 5 - kolory duszków +2 (Shift + 2
zastąpiony jest kombinacją Control+2)
- Control + Shift + 1, 2, 3, 4, 5 - kolory duszków
-2
- Control + Shift + Q, W, E, R, T - kolory duszków
+16
- spacja – bit
- strzałki - poruszanie kursorem
- Shift+Control+ strzałki góra/dół - przesuwanie obszaru
edycji (zoomu) o ekran (tak jak w edytorze Action!)
- Shift + - oraz O - przesunięcie obszaru edycji o
1 linię
- Shift+ = oraz P - przesunięcie obszaru edycji o 1
linię
B - dane z bufora, undo dla całego pojedynczego duszka,
działa pomiędzy przełączaniem się pomiędzy duszkami. Oznacza to, że
dane z całego duszka są zapamiętywane w momencie przełączania się
pomiędzy duszkami
- < - wczytywanie pliku danych (grafika duszków), np. z
pliku D:DUSZKI.DAT
- > - zapisywanie pliku danych
- Control + A - wczytanie pliku parametrów (zawsze plik:
D:EDUCHOW.DAT)
- Control + S - zapisanie pliku parametrów (zawsze plik:
D:EDUCHOW.DAT), zapisywane są ustawione przez użytkownika: pozycje
duszków i ich parametry np. kolory oraz początek i koniec
zaznaczonego bloku
- Q, W, E, R, T, Y, U, I - przesuwanie graczy i pocisków
+1
- Shift + Q, W, E, R, T, Y, U, I - przesuwanie graczy i
pocisków -1
- A, S, D, F, G - sprzętowe skalowanie kolejnych duszków
(zwiększanie wartości odpowiednich rejestrów)
- Shift + Control + Delete - kasowanie wszystkich duszków,
wymaga potwierdzenia klawiszami: Control+Delete
- 8 - zaznacza początek bloku dowolnego duszka (góra
bloku)
- 9 - zaznaczamy koniec bloku dowolnego duszka (dół
bloku), jeśli wskazany punkt będzie mniejszy od pozycji wskazanej
klawiszem 8 - długość bloku wyniesie jedną linię
- 0 - kopiuje w miejsce kursora zaznaczony blok dowolnego
duszka
Po uruchomieniu programu długość kopiowanego bloku wynosi 16 linii.
Jeśli nie wybrano początku klawiszem 8 to początek pochodzi z
danych nad strzałami (piąty duszek). Kopiowany blok może nachodzić
na obszar celu, itp. Jednak druga taka operacja dotyczy już
wcześniej zmodyfikowanej (czyli nie tak jak "wklej ze schowka" w
16-bitowych systemach). Bez trybu scalania duszków (klawisz "K")
kopiuje z danego duszka do dowolnego aktualnie edytowanego. W
trybie scalania kopiuje z wskazanej wysokości (klawisze 8 i 9) ze
wszystkich aktywnych duszków do wszystkich aktywnych.
Back Space - undo (drugie) dla ostatniej grupowej, np.
blokowej, operacji na fragmencie duszka, np. wypełnianie,
kopiowanie, także wstawianie z bufora (klawisz "B") itp. Działa
przemiennie czyli da się wycofać efekt undo poprzez ponowne
naciśnięcie tego klawisza. Undo działa we wszystkich trybach
(potrafi podwójnie kopiować wszystkie duszki nawet w całości). To
undo jest podwójne, działa na 5 duszkach, w 5*2 trybach.
Funkcje działające w trybie scalania duszków
- Z - kasuje jedną linię (pod kursorem)
- Shift + Z - kasuje albo obszar edycji albo zaznaczony
blok (klawisze 8 i 9)
- Control + Z - kasowanie aktualnego duszka
- L - wartość losowa w linii kursora
- Shift + L - wartości losowe albo w obszarze edycji albo
w zaznaczonym zakresie
- Control + L – wstawia wartości losowe na całej
powierzchni aktualnego duszka
- X - wypełnia aktualną linię wartością $FF
- Shift + X - wypełnia blok lub obszar edycji
- Control + X - wypełnia całego aktualnego duszka
- Inverse - negatyw aktualnej linii
- Shift + Inverse - negatyw w obszarze edycji lub w
zaznaczonym bloku
- Control + Inverse - negatyw całego sprite'a
- C - odbicie aktualnej linii
- Shift + C - odbicie obszaru edycji, odbijanie nie działa
w trybie scalania duszków. Należy jednak pamiętać, że funkcja undo
działa w trybie scalania (o ile jest włączony) i będzie przywracać
dane dla wszystkich aktywnych w tym trybie duszków - co może
czasami prowadzić do nietypowych rezultatów.
Scalanie duszków
- H - zwiększanie numeru duszka, od którego ma się
zaczynać scalanie
- Control + H lub Shift + H - zmniejszanie numeru
duszka, od którego ma się zaczynać scalanie
- J - zwiększanie numeru duszka, na którym ma się kończyć
scalanie
- Control + J lub Shift + J - zmniejszanie numeru
duszka, na którym ma się kończyć scalanie
- K - tryb łączenia-scalania duszków (włączone/wyłączone),
undo (klawisz BackSpace) działa na wszystkich duszkach wskazanych w
tym trybie
- Esc - wyjście z programu, wymaga potwierdzenia T (Tak)
lub Y (Yes) lub w przeciwnym wypadku należy nacisnąć dowolny
klawisz.
Dodatkowe informacje
Domyślną nazwą pliku danych (grafika duszków) to D:DUSZKI.DAT.
Program do tego pliku NIE zapisuje dodatkowych parametrów duszków
jak: pozycje, kolory, skalowania duszków itp. Dane zapisywane są do
pliku jako struktura danych układu GTIA czyli pierwszymi danymi
będą pociski, następnie kolejni gracze. Dodatkowo pomiędzy danymi
duszków jest niewielka przerwa wynikająca z funkcjonowania GTIA.
Dzięki tej zgodności, plik wystarczy wczytać we własnym programie w
odpowiednie miejsce, aby osiągnąć tą samą grafikę duszków, która
jest widoczna w edytorze.
Edytor nazwy plików - umożliwia wybór nazwy pliku do zapisu/odczytu
danych duszków. Aktywne są tylko niezbędne klawisze związane z
poprawną nazwą pliku oraz jego edycją. Zatwierdzenie nazwy pliku
następuje za każdym razem, jednak klawisze Return i Tab kontynuują
zapis lub odczyt pliku o podanej nazwie, natomiast klawisz Esc
przerywa operacje czyli do zapisu/odczytu nie dojdzie. Jeśli nazwa
pliku zawiera spację to nazwa pliku zostanie przycięta do tej
pozycji. Wprowadzona nazwa pliku nie musi się rozpoczynać od
"D:".
Program zapisuje parametry duszków oraz ustawienia programu w pliku
D:EDUCHOW.DAT. Pierwsze 5 bajtów to kolory odpowiednio: graczy 1-4
oraz pocisków. Pozycje duszków to 8 następnych bajtów, 5 następnych
bajtów to sprzętowe skalowanie duszków, dalsze dane są parametrami
edytora. Program nie kasuje zawartości duszków przy uruchomieniu i
zakończeniu pracy, dzięki czemu możliwe jest wyjście z programu do
DOS-a, a następnie ponowne uruchomienie i kontynuowanie pracy (o
ile inny program nie uszkodził roboczego fragmentu pamięci).
Obszar, który nie może być uszkodzony w tym czasie przez inny
program to $8595-$9800. Uszkodzenie danych bufora (undo) może
spowodować uszkodzenie zapamiętanych adresów i dane zostaną
przekopiowane do nieprawidłowego adresu - może to zawiesić
komputer. Program sprawdza taką ewentualność, jednak nigdy nie
wiadomo jakie jeszcze inne dane zostaną uszkodzone.
Ponowne uruchomienie programu może polegać na jego wczytaniu lub
wykonaniu polecenia RUN w DOS-ie. Jeżeli wcześniejszy program
umieścił jakieś dane w obszarze $85xx - $9800 to po uruchomieniu
edytora duszki mogą być wypełnione śmieciami. Należy wtedy nacisnąć
kombinację klawiszy Shift + Control + Delete (kasowanie wszystkich
duszków) i potwierdzić klawiszami: Control + Delete.
Program przed wczytaniem pliku danych duszków, zapamiętuje dane
(odpowiednio do aktualnego trybu scalania duszków). Dzięki temu po
wczytaniu nowego pliku można osiągnąć opcją undo wcześniejszą
grafikę na wybranych duszkach. Wystarczy jedynie przed wczytaniem
pliku włączyć tryb scalania duszków, wybrać duszki do zapamiętania,
a następnie je odtworzyć po wczytaniu pliku. Z wyłączonym trybem
scalania, zapamiętany zostanie jedynie aktualnie edytowany
duszek.
Przykłady
Po uruchomieniu programu możemy wczytać jeden z przykładowych
plików. Naciskamy klawisz „<”, podajemy nazwę pliku:
„misiek.dat” lub „bauvan.dat”. Następnie naciskamy Control + A, aby
wczytać zapisane ustawienia duszków. Dzięki temu przekonujemy się
jaka jest ulubiona broń bauvanów :).
Program był rozwijany w ostatnich tygodniach, nie miałem jednak
czasu na dokładne testowanie, więc może posiadać jakieś błędy.
Dlatego apeluję o rozwagę, jeśli ktoś zechce w nim zrobić "Archon
III" ;). Oczywiście wszelkie nieprawidłowości proszę zgłaszać do
mnie, na przykład na Forum Atarum.
Obraz dyskietki z edytorem w wersji 1.7 do pobrania w tym
miejscu. Następne wersje programu w drodze ;).