BEVEZETÉS

 

 

A ZX Spectrum számítógépekhez forgalmazott felhasználói software-ek jelentős részét a programozást elősegítő, úgynevezett toolkit-programok teszik ki. Ezek általában másolás útján, leírás nélkül kerülnek hazánk Spectrum-tulajdonosainak birtokába. Ez a körülmény célszerű felhasználásukat - enyhén szólva - nehézkessé (pontosabban: lehetetlenné) teszi, különösen akkor, ha például nem csak egy egyszerű rajzolóprogramról, hanem egy olyan bonyolult programozási rendszerről van szó, mint a WHITE LIGHTNING. Az LSI ATSz. Spectrum-programokkal foglalkozó kiadványaiban rendre találkozhattunk már toolkit-programok felhasználói leírásaival, de a WHITE LIGHTNING-ról még nem esett szó. Az alábbiakban egy olyan toolkit-programot mutatunk be részletesen, amely Magyarországon közkézen forog (minden Spectrum-klubban hozzáférhető), de a hozzátartozó leírás szinte sehol sem érhető el. A program ismertetését folytatásokban tervezzük, a későbbiekben megjelenő "SPECTRUM-világ" kiadványok középső négy oldalán. Az elhelyezés nem véletlen: a belső lapok kiszedhetőek és a sorozat befejezése után be lehet köttetni.

Mielőtt még részletesebben foglalkoznánk a WHITE LIGHTNING-gal meg szeretnénk említeni a LIGHTNING-programcsomag "testvéröccsét", a szintén az OASIS Software Inc. által, 1986-ban publikált LASER-családot. Ezen programrendszer LASER BASIC alprogramja rendkívül sok hasonlóságot mutat a WHITE LIGHTNING-gal, nem titkolt továbbfejlesztése. Ezzel a programcsaláddal (LASER BASIC, COMPILER, GENIUS) részletesebben megismerkedhettek a "Sinclair SPECTRUM játék és program III." című, az LSI ATSz. gondozásában 1987-ben megjelent kiadványban. A két programcsalád nyelvezete rendkívül hasonló, aki az egyiket ismeri, annak a másik megtanulása már nem okozhat problémát.

Hát akkor lássuk a medvét...

A WHITE LIGHTNING egy magas szintű programozási rendszer a 48 kbyte-os Spectrum számítógépen. Elsősorban azoknak íródott, akik kedvet éreznek a játékok írásához és ehhez van türelmük megtanulni egy új programozási nyelvet. A LIGHTNING nem egy játéktervező-program és nem olyan, amellyel egy nap leforgása alatt máris szédületes eredményt érhetnénk el, de lehetoséget nyújt arra, hogy jó programokat írhassunk. Külön előny az is, hogy a WHITE LIGHTNING által megírt programok minden szabadalmi megkötés nélkül értékesíthetőek.

Minden programozóban felvetődik a kérdés: melyik a jó programozási nyelv? Közelítsük meg ezt a kérdést most a játékok oldaláról: BASIC-en kívül Spectrum számítógépeken leggyakrabban használt magas szintű nyelvnek, az assembly-nek három előnye van a többivel szemben: a gyorsaság, a rugalmasság és a tömörség. Ez különösen az arcade-stílusú játékok futtatásakor jelentkezik: a processzor ideje nagy részét a képpont-adatok kezelésével tölti, mégis a játékok legnagyobb része gyors, jól animált, élvezetes. Ebből már adódik a következtetés: ha a programozási szükségletnek megfelelő toolkit-utasítások egy célszerű nyelvben össze vannak foglalva, a program megírási és végrehajtási ideje jelentősen megrövidül (megjegyzendő, hogy elég sok időbe kerül a végrehajtás sebességét optimalizálni).

Hasonlítsuk össze a WHITE LIGHTNING-ot az assemblyvel: ami a nyelv rugalmasságát illeti 300 (!) utasítással rendelkezik amellett, hogy szükség esetén - kombináltan - hozzáférhető a Spectrum-BASIC és a gépi kód is. Tömörségéről annyit, hogy az általa - többek között - kezelt FORTH nyelv legfőbb jellemzője a maximális tömörségre való törekvés. Az assembly nyelv a programozók egyik legkiválóbb eszköze, azonban van néhány hátránya is. Például meg kell tanulni, bár ez mondjuk a többi nyelvre is érvényes. Megtanulása után a programírás kissé körülményes (pl, más nyelvektől eltérően nincs közvetlen védelem a programok kiakadása-ellen). Hatásos eredmények eléréséhez igen jól kell ismerni a gépi kódú programozás szabályait. Ebből a szempontból a BASIC jóval előnyösebb: a hibaüzeneteket, generáló rutinok kitűnő védelmet nyújtanak a programunknak, az utasítások könnyen elérhetőek és - angolul tudók esetében - rövid idő alatt megtanulhatóak. Ezek a tulajdonságok a hobbiból programozok szemében kiváló nyelvvé emelik a BASIC-et, de a profi játékíróknak a nyelv nem megfelelő mind sebességet, mind rugalmasságot tekintve. Mivel a WHITE LIGTNING - részben - a FORTH nyelvre lett alapozva, gyorsasága a gépi kódéhoz hasonló, nem. szükséges a gép alapos ismerete és a programok elég jól védve vannak az "elszállás" ellen.

Mielőtt részletesen "elmélyülnénk" a programban nézzük át néhány szó erejéig a WHITE LIGHTNING által nyújtott lehetőségeket:

Sprite-tervezés és UDG-karakterek
A WHITE LIGHTNING tartalmaz egy sprite-generátort és egy 167 ábrából álló készletet, amely sok arcade játék figuráit tartalpazza (Asteroids, Pacman, Scranble, Defender, Space Invaders, City Bomber, Lunar Lander, Frogger, Centipede, Donkey Kong és még sokan mások). Ezenkívül 255 sprite-ot definiálhatunk saját használatunkra, amelyeket forgathatunk, tükrözhetünk, invertálhatunk és még sok más műveletet végezhetünk velük. A munka befejezése után a későbbi felhasználás céljából - az elkészült sprite-jainkat magnóra menthetjük.

Az IDEAL-nyelv
A LIGHTNING nyelve két részből áll: az egyik a szupergyors Integer-FORTH, amelyet a Fig-FORTH támogat; a másik egy megszakítás-vezérelt kiterjesztett animációs nyelv az IDEAL (Interrupt Driven Extended Animation Language). A játékíróknak ez a program legfontosabb része: több mint 100 utasítást tartalmaz, amelyeket szabadon keverhetünk mind a FORTH, mind a BASIC-utasításokkal.

 

Megszakításvezérlés
A FORTH/IDEAL parancsok végrehajthatóak interrupt módban is. Ez azt jelenti, hogy pl. egy játék háttere és előtere egyszerre vezérelhető. Tegyük fel, hogy a játékunk amit írunk, tartalmaz a háttérben egy scroll-t, az előtérben pedig egy sprite-mozgatást. A WHITE LIGHTNING ezeket párhuzamosan végzi el, megszabadítva a felhasználót a komplex időszámításoktól.

 

 

OASIS SOFTWARE

9.a Alexandra Parade

Weston Super-Mare

AVON BS23 IQT

ENGLAND

 

 

 

Animációs nyelv
A szerzők sok időt fordítottak arra, hogy lehetővé tegyék az egyik gépen LIGHTNING programmal megírt programok futtatását a másik gépen is. Az egyetlen nagyobb változtatás, amire szükség volt, adaptálni a különböző képernyőformátumokat, azaz az oszlopok és a sorok számát. Emiatt már nem kell aggódnunk, ezt elvégzi az IDEAL. Van azonban néhány tiltás, amely nem engedi meg az attribútumok mozgatását a pixelek nélkül.

BASIC-lehetőségek
Ha ez idáig még nem ismerkedtünk meg a FORTH nyelvvel, az IDEAL-hoz hozzáférhetünk BASIC-kel is. A megírt programok így veszítenek gyorsaságukból és csillogásukból, de azért még tökéletesek maradnak. A BASIC nagyobb memóriaterületet igényel, ezt jó ha figyelembe vesszük mielőtt még letennénk a FORTH elsajátításáról. A legtöbb hangot és grafikát kezelő utasítást (BEEP, DRAW stb.) belevették a SpectraForth nyelvbe, célszerűbb tehát ezeket nem BASIC-ből hívni, mivel FORTH-ban sokkal gyorsabbak.

Kiterjesztések
A FORTH egy kiterjeszthető nyelvjárás, ez volt az oka annak, hogy az IDEAL nyelv mellett bekerült a programba. Az általunk alkalmazni kívánt új szavakat a FORTH és IDEAL szavakkal, vagy a már előzőleg meghatározott szavaink kombinációjával definiálhatjuk.

 

I. rész : A SPRITE-GENERATOR

 

A program ezen része sprite-ok és képernyő-adatok kezelésére szolgáló utasításokat foglal magába, de közvetlenül nem alkalmas sprite-vezérlésre. Ez azt jelenti, hogy egy játékot két fázisban kell elkészítenünk: az egyik fázisban sprite-okat tervezünk és szerkesztünk, a másodikban pedig magát a játékot írjuk meg a LIGHTNING-gal. A gyakorlatban a két fázis tulajdonképpen egymás mellett valósul meg. A program SPT/GEN néven található meg a kazettán, hagyományos módon, LOAD "" paranccsal tölthető be. Önállóan is működőképes, tehát saját - nem a WHITE LIGHTNING-ban történő - felhasználásra is tervezhetünk vele sprite-okat.
Azoknak, akik nem kívánnak új szimbólumokat készíteni, hanem megelégszenek az ismert arcade játékok figuráival, rendelkezésükre áll az arcade-készlet. Ez összesen 167 szimbólumot tartalmaz, megtekintésük a DEMO behívásával lehetséges. Ebben a 'Z' billentyű megnyomásával szelektálhatunk. Az arcade készleten kívül rendelkezésre állnak a demo-sprite-ok is: a szalagon a WHITE LIGHTNING program után találhatjuk őket.

 

A SPRITE-SZERKESZTŐ BETÖLTÉSE ÉS INDÍTÁSA

 

A WHITE LIGHTNING program sprite-generátora SPT/GEN néven található meg a gyári kazettán, betöltése hagyományos módon (LOAD "" vagy LOAD "SPT/GEN") történik. A program egy kérdéssel jelentkezik be: el kell döntenünk, hogy hideg- (COLD) vagy melegindítással (WARM START) kívánjuk-e a szerkesztőt elindítani. A választás a kívánt eljáráshoz tartozó inverz betű ('C' vagy 'W') megnyomásával történik az alábbi következményekkel:

COLD START: a memóriában található összes sprite törlődik, a rendszerváltozók inicializálódnak, tehát a program alapállapotba áll be. Az eddigi munkánk teljes törlésére és a demo-sprite-ok betöltése előtt használatos. A rendszert - betöltés után - mindig COLD START-tal kell elindítanunk.

WARM START: a memóriában tárolt sprite-ok és rendszerváltozók nem törlődnek. Véletlen 'BREAK'-használat vagy - esetleges - hibaüzenetet eredményező hiba esetén újraindítás (GO TO 3) után melegindítást használva a program leállásáig meglévő adatokkal tovább folytathatjuk a munkát. WARM START csak egy - a program indításakor - előzőleg használt hidegindítás után használható.

Az indítási paraméter beállítása után egy újabb kérdést kapunk, amelyben a program érdeklődik, hogy meg kívánjuk-e változtatni a puffer méretét. Amikor a WHITE LIGHTNING ún. background (háttér) üzemmódban van (ld. a későbbiekben), a memória felső része egy törölhető blokk, a puffer. Ennek a mérete a program működésétől és a kiszámított adatoktól függ. A SPRITE-GENERATOR működésekor alapállapotban ez a méret 256 byte. A puffer a későbbiekben lesz hasznos, most egyenlőre ne változtassuk meg a méretét.

 

A SZERKESZTŐ KÉPERNYŐI

 

Az előbbi két paraméter beállítása után rövid időn belül feltűnik a szerkesztő-munkaasztal.

A képernyő bal felső részén (a továbbiakban munkatábla) látható egy karakter kinagyított képe, amelyben a jobb oldali sprite-szerkesztő képernyőre (a továbbiakban munkaterület) kerülő karaktereket szerkeszthetjük meg illetve finomításokat végezhetünk.

A munkatábla bal felső sorában látható a karakterkurzor, amit a kurzor-vezérlő billentyűkkel (5-8) mozgathatunk. A kurzor mozgatása "virtuális", vagyis ha pl. jobb oldalon kimegyünk vele, a bal oldalon fog megjelenni. Ha a kurzor pozíciójában megnyomjuk a '9' billentyűt, az adott pozíció sötét színűre vált (ezt természetesen csak akkor mérhetjük le, ha a kurzort tovább léptetjük). Ez azt jelenti, hogy a szerkesztett karakter adott pozíciója a munkaterületre kerüléskor INK színű lesz. Ha a pixel pozíciója nem felel meg elképzeléseinknek, a - kurzort a pozíciójába állítva - '0' billentyű megnyomásával újra PAPER színűvé változtathatjuk a pixelpozíciót. A munkatábla teljes törlése a 'Q' billentyűvel lehetséges.

A munkatábla bal oldalán láthatjuk a szerkesztett karakterre vonatkozó attribútum-információk kapcsolóit. Ezeket nem szükséges külön magyarázni, a kapcsolók tulajdonképpen a normál Spectrum-BASIC funkciójukat látják el. A funkciók után áll a kapcsolóra vonatkozó számkód, ami meghatározza a színeket (INK, PAPER) illetve a funkciót kapcsolja ki/be. A számkódok állítása következőképpen történik: a funkcióhoz tartozó billentyű megnyomása után (a funkció villog) begépeljük a kívánt számkódot. A funkciókhoz tartozó billentyűk:

'X': INK    (0-7)
'C': PAPER  (0-7)
'B': BRIGHT (0-1)
'V': FLASH  (0-1)
'A': ATTR   (0-1)

 

A kapcsolók átállítása után a munkatáblán látszólag semmi sem történik, de a szerkesztett karakter a munkaterületre történő átmásoláskor már az új attribútum-adatokkal fog átkerülni.

A képernyő jobb felső részén található a sprite-ok tulajdonképpeni szerkesztője, a munkaterület. Ide másolhatjuk át a munkatáblán megszerkesztett karaktereket. A karakterek a munkaterület két kurzora (X és Y-kurzor) által meghatározott pozícióba (a két kurzor metszéspontjába) kerülnek. A kurzorok mindenkori pozíciójának kijelzése a képernyő alatt, az XPOS és YPOS mezők után történik, a sorokhoz/oszlopokhoz rendelt hexadecimális számok alapján. A kurzorok mozgatása hasonló a karakterkurzoréhoz, a 'SYMBOL SHIFT 5-8' (X-kurzor) és a 'SYMBOL SHIFT 6-7'. (Y-kurzor) billentyűkkel történik. A munkaterület teljes törlése a 'SYMBOL SHIFT Q' billentyűk megnyomásával történik.

 

AZ INFORMÁCIÓS ABLAK

 

A képernyő alsó részén látható a program kommunikációs ablaka, amely a munkaterületen szerkesztett sprite-ra vonatkozó adatokat tartalmazza:

MEMORY LEFT: a sprite-ok szerkesztésére felhasználható memóriaterületet jelzi, alapállapotban 12549 byte. Vigyázat, ez az adat csak a memóriába a GET használatával már bekerült sprite-okra vonatkozik!

XPOS, YPOS: erről már beszéltünk, a munkaterület kurzorainak pozícióját tartalmazza, hexadecimálisan.

SPRITE: a szerkesztőről memóriába eltárolt sprite kezdőcíme.

SPST: a sprite-terület kezdőcíme a memóriában, alapállapotban 65279.

SPND: a sprite-terület végcíme a memóriában, alapállapotban - nincs egy sprite sem a memóriában - 65279.

SPRITE HEIGHT: a szerkesztett sprite magasságát jelöli karakterekben. A jelölés maximum 15 karakter mértékig terjedhet (a munkaterület mérete) bár a LIGHTNING egyik funkciójával ennél nagyobb sprite-okat is definiálhatunk.

SPRITE LENGTH: a szerkesztett sprite szélességét jelöli karakterekben (max. 15).

SPRITE NUMBER: az aktuális sprite száma.

Az információs ablak alatt található az input-sor, amelyben a szerkesztő funkció billentyűihez tartozó adatokat vihetjük be illetve a funkciók végrehajtását hagyhatjuk jóvá.

A következő fejezetben megismerkedhetünk a sprite-generátor további funkciókat ellátó billentyűinek használatával.

 

A SPRITE-GENERÁTOR EGYÉB FUNKCIÓBILLENTYŰI

 

A sprite-generátor alábbiakban ismertetett funkcióbillentyűi a megszerkesztett sprite-okkal történő manipulációkra alkalmazhatóak, az általuk kiváltott funkciókat - a hibák elkerülése végett - a megjelenő kérdésre történő 'Y' (YES) válasszal kell jóváhagynunk:

'Z': karakter hívása az arcade-készletből. Az input-sorban be kell gépelnünk a kívánt karakter számát, majd RETURN. A kiválasztott sprite megjelenik a munkaterület aktuális pozíciójában.

'K': az aktuális karakter átmásolása a munkatáblára.

'G' (GET): sprite elhelyezése a memóriában, az aktuális paraméterek szerint (a sprite villog).

'P' (PUT): a SPRITE változó által meghatározott sprite előhívása a memóriából. Ha SPRITE számú sprite nem létezik a memóriában (nem lett GET-tel elhelyezve) "Error: SPRITES NOT DEFINED" hibaüzenetet kapunk.

'J': karakter átmásolása a munkatábláról a munkaterület aktuális pozíciójába.

'S' (SPRITE): a sprite sorszámának megadása.

'L' (LENGTH): a sprite szélességének a beállítása (1-15).

'H' (HEIGHT): a sprite magasságának a beállítása (1-15).

'W' (WIPE SPRITE): a SPRITE változó által meghatározott sprite törlése a memóriából.

'E': a billentyű megnyomása egy sprite megjelenésével történő manipulációkat szolgálja egy újabb menü segítségével:

1. invertálja a sprite-ot (a PAPER és INK színek felcserélődnek)
2. a függőleges tengelyre tükrözi a sprite képpont-adatait
3. a függőleges tengelyre tükrözi a sprite ATTR-adatait

'R' (ROTATION): új sprite definiálásával (a számot nekünk kell megadnunk az 1-255 intervallumban) 90 fokkal elforgatja a memóriában az aktuális karaktert és a SPRITE változót automatikusan átváltja az új karakter számára amelyet PUT-tal ('P') az aktuális munkaterület-pozícióba helyezhetünk.

'I': a munkaterületen - az 'L' (LENGTH) és 'H' (HEIGHT) billentyűkkel - beállított területet az aktuális attributun értékekkel (INK, PAPER stb.) tölti fel.

'U': a munkaterület beállított részének attributumait átírja az attribútum-kapcsolókba.

'M': a billentyű megnyomása után kiválaszthatjuk, hogy milyen manipuláció történjen (invertálás, tükrözés, FLASH), de a kiválasztott funkció a memóriában fog végrehajtódni.

'N': a billentyű megnyomása után nem kell mindig YES válasszal megerősítenünk a művelet végrehajtását.

'Y': a megerősítési kérdések visszakapcsolása.

'0': két sprite logikai összevonása, a megjelenő menüből kiválaszthatjuk, hogy milyen formában történjen az összegzés (GETOR, GETXOR, GETAND).

'F': a munkaterület adott területének villogtatása.

A munkaterület beállított területén az ott elhelyezkedő sprite-ot pixel-scrollal (képpontonként léptetve) görgethetjük. A görgetés a következő billentyűkkel történik:

'SYMBOL SHIFT T': balra
'SYMBOL SHIFT I': jobbra
'SYMBOL SHIFT Y': le
'SYMBOL SHIFT U': fel

A 'D' billentyű megnyomása után a DIRECT DATA INPUT üzemmódba léphetünk. Ezzel az eljárással a billentyűzetről vihetjük be egy karakter adatait, nem kell a munkatáblán dolgoznunk. A program 8 byte begépelését várja (ennyi adat határoz meg egy karaktert, egy pixelsor 1 byte). Az egyes byte-ok begépelése után meg kell nyomnunk az 'ENTER' billentyűt.

 

A SPRITE-GENERATOR INPUT/OUTPUT FUNKCIÓI

 

A szerkesztőben megalkotott sprite-okat - természetesen - felhasználhatjuk a WHITE LIGHTNING-ban írt programjainkban, de ezeket előbb adathordozóra kell mentenünk. A sprite-generátor memóriájában levő sprite-okat egy önálló sprite-készletként menthetjük ki.

A kimentés a 'SYMBOL SHIFT S' billentyűk megnyomásával történik. Ezután meghatározhatjuk, hogy a készletet még tovább kívánjuk-e módosítani a sprite-generátorral (1.opció) vagy már készem van, a WHITE LIGHTNING által kezelhető formában kérjük a kimentést (2. opció, a kimentés előtt a program kiírja a sprite-terület (SPST) kezdőcímét is). Bármelyik opció választása újabb kérdést eredményez: magnóra vagy microdrive-ra kívánjuk-e a kimentést? A kívánt adathordozó kiválasztása után meg kell adnunk a sprite-file nevét és elindítani a kimentést.

A sprite-file-ok betöltése a 'SYMBOL SHIFT J' billentyűkkel történik. Ezután meg kell határoznunk, hogy milyen adathordozóról történik a töltés és be kell gépelnünk a betölteni kívánt file nevét.

A program futása közben a 'SYMBOL SHIFT F' billentyűk megnyomásával lehetőség van a microdrive-kazetta formattálására.