Zaczynamy.
Część pierwsza - przygotowujemy narzędzia.
Zanim napiszemy scenariusz i rozpoczniemy pracę nad programem - napiszę, jakich narzędzi będziemy używać do pisania naszej gry. Za namową kolegów z Zielonej Góry spreparowałem dwie dyskietki (opis za chwilę, dołączone do postu) w gęstości pojedynczej. Od razu napiszę, że osobiście używam większych pojemności i widzę, że na sam koniec trzeba będzie przygotować jeszcze jedną - ze względu na to, że dążymy do wykonania gry plikowej, a tu się nie zmieszczę z linkowaniem skompilowanego produktu. Osobiście obrazy dyskietek tworzę pod makeATR, dość archaicznym dziś narzędziem, ale które nigdy mnie nie zawiodło. Zasadniczo sam obraz dyskietki (dla osób działających pod emulatorem lub pod późniejsze wykonanie) można wykonać dowolnym programem, który na to pozwala, ale mam jedną uwagę - z autopsji (Grawitacja, inne party) wiem, że obraz pod MyDOSa tworzony pod pluginem do Total Commandera potrafi taką wirtualną dyskietkę rozwalić (nie wiem jak pod inne DOSy) - przerabiałem to swego czasu na kompie Mikera, jak dołączaliśmy rzeczy do obrazu, które potem starałem się odtworzyć na moim Atari.
Z ankiety wynika, że będziemy się starali robić grę w hiresie (najwyższej rozdzielczości) z grafikami o rozdzielczości 80x80px. Jest to tryb jednokolorowy (instrukcja graphics 8+16, śmiało można napisać graphics 24 - ale opisy kodu będę robił w części temu poświęconej). Wybrałem język Turbo Basic XL, bo to w nim tworzę swoje programy. W programie nie będziemy używać żadnych procedur języka maszynowego - oprócz wywołania muzyki w Chaos Music Composerze (mam nadzieję, że jakąś muzykę dostarczą czytelnicy, jak nie - weźmiemy jakiegoś gotowca). Z uwagi na brak grafika (chyba, że jakiś się zgłosi) - konwersji i poprawek kodu będę dokonywał na PC pod programem GIMP, ale może być to dowolny program pozwalający na zapis jednokolorowych bitmap (ja będę zapisywał w formacie *.gif i dalej działał na Atari). W tym trybie proporcja piksela jest 1:1, więc taki obraz idealnie się konwertuje na Atari.
Do pracy przygotowałem dwie dyskietki, każda zawiera MyDOSa i dodatkowe programy/dane.
1. roboczy_tbxl.atr o zawartości:
DOS SYS 0035 - MyDOS
DUP SYS 0054 - powłoka MyDOSa (menu)
LINKER COM 0111 - linker do skompilowanych programów
TB COM 0145 - Turbo Basic XL
TBC COM 0080 - Turbo Basic XL Compiler, czyli kompilator
RUNTIME2EXE 0088 - dołączany plik uruchomieniowy do naszych zlinkowanych programów
POLSKIE FNT 0009 - polskie fonty z PANTHER-a, jako przykład*
0186 FREE SECTORS - ilość wolnego miejsca na dyskietce
* UWAGA! znak "," zamieniony ze znakiem ";" - dlaczego opiszę w kolejnych częściach tutorialu
2. roboczy_tools.atr o zawartości:
DOS SYS 0035 - MyDOS
DUP SYS 0054 - menu MyDOSa
SP COM 0060 - Super Packer
MOSSAD3 COM 0108 - Mossad
JV COM 0075 - jview
BLOCKCUTXEX 0170 - GR_Block cutter
0206 FREE SECTORS
Czemu takie a nie inne narzędzia? No cóż, takich używam na Atari i mi wystarczają. Brak CMC-a (Chaos Music Composera) - tten dodamy potem, a właściwie tylko muzyczkę i player z niego, po wybraniu odpowiedniej wersji. Opiszę najpierw narzędzia (dyskietka 2), gdyż niekoniecznie używam ich wszystkich zgodnie z oczekiwaniami, a mianowicie:
- Super Packer - jest przeze mnie używany głównie do nadawania... Nagłóków binarnych w danych, które używam. Ułatwia mi to życie przy pisaniu programów plikowych, a w jaki sposób - opiszę w trakcie tworzenia dalszych części artykułu, zdradzając jedynie, że wykorzystuję tu jedną ze specyficznych cech TBXL (jak od teraz będę w skrócie nazywał Turbo Basic XL).
- Mossad - służy mi do linkowania całości, ma znacznie większy bufor od Super Packera, więc pozwala w łatwy sposób tworzyć większe pliki (równie dobrze można linkować przy pomocy dosa, ale po co utrudniać sobie życie?).
- JView - posłuży mi do zamiany GIF-ów na format graphics 24 (UWAGA! Zawsze pełen ekran!).
- GR_Block cutter - takie moje narzędzie do wycinania bloków grafiki, może nie jest intuicyjne, ale mi wystarcza, a wydaje mi się, że Wam też się przyda
Pierwsza dyskietka oczywiście służy do programowania, mamy tam:
- nasz edytor TBXL.
- kompilator do niego.
- linker do kompilowanych programów wraz z poprawionym (o ile pamiętam przez Simiusa) runtime-m, czyli plikiem uruchomieniowym z bibliotekami, co nam pozwala uruchomić skompilowane programy bezpośrednio pod DOSem (lub jako pliki samouruchamialne typu XEX z urządzeń typu SIO2_coś_tam).
- przykładowy font do zastosowania w grze.
Teraz poproszę Was o zabootowanie drugiej dyskietki, po wgraniu MyDOSa o wybranie klawisza 1 (directory stacji nr 1), pokaże się spis zawartości dyskietki, a następnie uruchomienie po kolei wszystkich plików (póki co sprawdzamy, czy Wam poprawnie działają), czyli: opcja "L" i wpisujemy nazwę programu (wystarczą dwa pierwsze znaki i dwie gwiazdki, na przykłąd do Mossada wystarczy wpisać: MO**). Jak się program uruchomi - wyjście do DOSu i kolejny (lub reset komputera i kolejny). Jak wszystko się uda - proszę o zabootowanie dyskietki nr 1 i wgranie TBXL ("L" a następnie TB.COM lub TB**), jeśli wszystko pójdzie prawidłowo - pokaże nam się znajomy nappis READY. Można spróbować wgrać dalsz eprogramy, ale ja Wam zaproponuję pewien test kompilatora, napiszmy typowy program "hello world":
1 GRAPHICS 0:POKE 710,0:POKE 709,15
2 ? "Witaj skompilowany programie!"
3 GET KEY
Prawda, że ciężki kod? Proponuję zapisać go pod nazwą TEST.TB (ja standardowo zapisuję programy w TBXL z rozszerzeniem .TB, ale nazwa jest zwyczajowa i dowolna właściwie. Zapisujemy całość (SAVE"D:TEST.TB") i spróbujmy uruchomić nasz program (RUN). Działa? Działa, tylko nas oszukuje (nie jest skompilowany, ale to zaraz zrobimy). W linii nr 3 wykorzystałem specyficzną instrukcję TBXL - GET zmienna, która zatrzymuje nasz program i czeka na naciśnięcie dowolnego klawisza, po jego naciśnięciu zaś zapisuje wartość klawisza do zmiennej (w naszym przypadku KEY) i kontynuuje działanie programu. Będziemy z tej opcji często korzystać w naszym programie, a dałem tutaj ten przykład, aby zaraz po uruchomieniu programu DOSowego nie przeszedł do DOSu lub RUNTIME-u (jak by było w naszym przypadku - nie ma instrukcji kończącej działanie programu, czyli END, zresztą sam END też czasem wraca do RUNTIME-u).
Dobrze, wpiszmy teraz polecenie DOS i z MyDOSa wgrajmy kompilator ("L" a następnie "TBC**") - od tej chwili już nie będę pisał jak wgrywać programy spod DOSa, bo to chyba każdy potrafi, tu opisałem to tylko ze względu na specyfike MyDOSa, ale być może będziecie używać innych DOSów.
Po wgraniu kompilatora - naciskamy 1 (o ile dyskietka z programem w napędzie nr 1) i klawiszami kursora wybieramy nasz program. O ile wszystko poszło bez błędów - pojawia się prośba o podanie nazwy pliku, przy czym program podpowiada nam rozszeżenie *.CTB - pozostańmy przy nim, wpisujemy słowo "TEST" i wciskamy Return, następnie "N" (nie chcemy kolejnej kopii) i Control-D i Y(wychodzimy do DOS-a). I teraz clue dzisiejszego wieczoru: wgrywamy nasz linker, podajemy pełną ścieżkę przy pliku źródłowym (D:TEST.CTB) i docelowym (D:TEST.COM). Jeśli wszystko przebiegło prawidłowo (All done) - naciskamy klawisz Esc (koniecznie!) i wychodzimy do DOSu (D). Mamy nasz pierwszy program DOSowy z TBXL - sprawdźmy listując katalog. Niestety od razu rzuca się w oczy objętość RUNTIMEu, ale to jest rzecz drugorzędna teraz. Uruchamiamy nasz program spod DOSu i cieszymy się pierwszą produkcją.
Na tym kończymy pierwszą, dość długą część tutorialu. Obrazy dyskietek dołączone do postu.
Napiszcie proszę, czy taka forma Wam odpowiada - dziś tylko przetestowaliśmy narzędzia. Od kolejnej części zajmiemy się szkieletem programu, a następnie wypełnimy go treścią.