Háztáji
programok

A '90-es évek sufni-szoftvergyártása

Akinek volt valamilyen 8-bites számítógépe, biztos próbálkozott saját program írásával is. A programlisták begépelése utáni RUN parancs beírása, és a működő program futásának öröme sokakban indította el a késztetést, hogy valami komolyabbat is alkosson, de már saját ötletekből. A (félig magyar feltalálású) BASIC nyelv szög-egyszerűségét bizonyította, hogy még a legnagyobb analfabélák is könnyen megtanulhattak 5 alaputasítást, amivel aztán már akár kalandjátékot is lehetett írni (mint azt jelen sorok írója is tette). Bármilyen szintű kis programozói siker is közelebb tudta hozni a háziszámítógépet a felhasználójához, és ez volt az a beavatottság, amely kiemelte az embert a sima (játék)géptulajdonosi kategóriából. Az ember akkor azt érezhette tudat alatt, hogy az emberiség össz- intelligenciájának csúcsát érti és használja, nem pedig csak látja és kihasználja, mint tette a tévé, a videó, vagy esetleg később a csillogó játékokkal ellátott konzolokkal kapcsolatban. Ha valaki ezt a lépést viszont nem tette meg, az kicsit olyan, mint amikor a zenészek "hangszertulajdonos"-nak hívnak valakit. Talán érezhető az éles kifejezés mögötti tartalom, nem kell magyarázni.

              
 /\_/\  
( Q.Q )
(")  /

TÁJP MICSMACS ERROR
READY.

Amikor Commodore 16-osunk lett, még olvasni sem tudtam, így a programozás elég távolinak tűnt volna, ha tudom, mi az. Másodikos koromban már lelkesen gépeltem be a programlistákat a különböző kiadványokból, még olyan is előfordult, hogy az iskolában megvehető Kisdobos újságban BASIC lista szerepelt, és büszke voltam magamra, hogy én tudom mit kell ezzel csinálni...

A "Kisdobos" újság
1988 novemberi számából

A C16-os esetében a saját ötlet témája kimerült a képernyőre rajzolásban, felfedeztük, hogy a beépített betűkészlet képernyőelemei sok lehetőséget rejtenek magukban - ezt manapság PETSCII ART-nak hívják, és végülis is egy XX. századvégi művészeti ággá nőtte ki magát, aminek külön örülök, mert így egy új képzőművészeti műfaj egyik első amatőr képviselőjének is számítok, több száz (ezer) emberrel együtt. Ugyanakkor a C16-os BASIC-je sokkal fejlettebb volt, mint a C64-esé, jó néhány utasítás új szintaxisa megkönnyítette volna a munkát, ha a C16 memóriája nem lett volna annyira kicsi, hogy értelmetlen nagyobb lélegzetvételű programokat írni bele ezen a nyelven. Például a COLOUR utasítás színezésre, vagy a CIRCLE utasítás egy kör rajzolására mind jó volt, de a gép ezeket a grafikákat olyan lassan rajzolta ki, hogy az ember kedve elment attól, hogy huszadjára is megvárja, míg végez.

10 REM ************
15 REM *          *
20 REM *  ,       *
25 REM * VEGTELEN *
30 REM *  CIKLUS  *
35 REM *          *
40 REM *          *
43 REM ************
45 GOTO 50
50 GOSUB 45

A Commodore 16-os megismertetett minket egy olyan fogalommal is, amely addig az időkig nem létezett a digitális világban, ez pedig a csalás volt. A géphez kapott könyvekben hosszú oldalak foglalkoztak azzal, hogy melyik játék hol tárolja az életek számát, a pénzt, vagy az extra dolgokat. Ezeket POKE kódsorozatok formájában kellett beírni, ezzel pedig lényegében egy adott játék világának korlátlan urai lettünk.

Részlet a csalástárból

Amikor a C64 megérkezett hozzánk, addigra már rendelkeztünk alapvető ismeretekkel - így nem nulláról indultunk neki - a BASIC alapvető parancsai szinte teljesen megegyeznek a géptípuson. Kivétel persze már az elején akadt: az SCNCLR utasítás itt nem működött (képernyőtörlés)...

Öö... Help?

Még idejekorán, szinte a gép vásárlása után pár hónappal sikerült beszerezni egy HELP című segédprogramot, amelyet az egyik C64-es könyv is ajánlott. A program segítségével könnyebbé vált a programok szerkesztése, az újrasorszámozás, a változók átszervezése. Aki írt annak idején 8-bites gépen, BASIC-ben programot (a beépített szövegszerkesztővel), az most bólogat, mert tudja, mekkora segítséget jelenthet egy ilyen program. Aki pedig kimaradt ebből, annak csak annyit tudok tanácsolni, indítson el egy emulgeátort emulátort, és próbáljon írni egy egyszerű számkitaláló programot. Ma már léteznek olyan fejlesztői környezetek, amelyek elvégzik a körmölést helyettünk (de például a VICE emulátor képes a jobb egérgombbal szöveget beszúrni a vágólapról, amelyet a Windows-ban controlcéztünk rá), de ha ezeket a modern segédleteket elhagyjuk, nem mindennapi fapados élményben lehet részünk - éljük át!

10 REM Ki a fapadost
14 REM nem becsuli
16 REM A vizivigest
18 REM nem erdemli

Hasonlóan nagy felfedezés volt a Simon's Basic című segédprogram, amely szintén a programozási munkálatokat segítette, el volt látva nagyfelbontású rajzoló utasításokkal, hasonlóan az "újabb" BASIC verziókhoz. Leginkább azonban csak szórakozás jelleggel használtuk, hiszen akkor még a saját akaratunk szerinti képernyő villogtatás is nagy élmény volt, akár egy játék. Bár segítségével lehetett akár karaktereket is, sprite-okat könnyen megrajzolni (ki is számolta helyettünk a bájtsorokat), mégis az első, ilyen témájú sikereim az alap BASIC-ben történtek, mégpedig a misztikus Kék Könyv segítségével.

Dr. Úry László féle "Kék Könyv"

Ez a (két) könyv gyakorlatilag a teljes C64-es korszak alatt használatban volt, mivel második része igen részletesen tartalmazta az assembly utasításkészletet, barátaim saláta állagúra forgatták - persze a saját példányukat, de később már az enyémet is. A számítógépes játékmagazinok mellett ezt a könyvet is sokszor lapozgattam (a többivel együtt), talán egyszer elkaphatott az ihlet, és felugrottam az olvasásból, hogy átírjam a betűkészletet: ékezetesre! Sikerült is, később pedig a rögtönzött kalandjátékaimat már azzal kezdtem, hogy betöltöttem az ékezetes betűtípust, amely DATA sorokban feszült.

Mi sem egyszerűbb

Unokatesóm, Z. komolyan fejlesztette Commodore 16-os BASIC tudását, hogy egyik látogatásunk alkalmával bemutatott egy falbontó játékot, amelyet ő írt, karakteres képernyőre! Ezen teljesen elámultunk, mert ez volt az első komolyabb (akció) játékprogram, ami a közelünkben készült, ezalatt azt kell érteni, hogy nem holmi ködös, gyermeki ésszel felfoghatatlan távolságban lévő gépektől és cigarettafüsttől zúgó játékstúdió fejlesztőtermeiben izzadták ki, hanem kakaó kortyolgatása közben, két lakóteleppel arrébb, ráadásul olyan ember készítette, akivel együtt kvarcjátékoztunk nyáron a nagymamánál, a faágon ülve. Mondhatom talán, hogy ez volt azoknak az élményeknek az egyike, ami miatt elkezdett vonzani a játékfejlesztés, mint szabadidős tevékenység (és ezért maradt meg egy szeretteli hobbinak, amely sok örömöt okoz a mai napig).

Valami ilyesmi volt
(érted: "Kísérletek" és nem "Életek!")

A kalandjátékgyártás úgy látszik, 8-bites létből lépett ki hagyományteremtő kulturális tényezővé, az én ismeretségi körömben mindenki ezzel kezdte, aki valaha foglalkozott programozással, a C64 nyüstölésével. Számítógéphasználati időből sajnos nem állt annyi rendelkezésemre, de legalább papíron tudtam dolgozni, sokszor (tanulás helyett...) inkább a négyzethálós papírra rajzoltam titokban, és arra jegyeztem le a programot. Már akkor észrevettem, hogy könnyebben tudom követni a GOTO ugrásokat, mint a számítógép LIST parancsa után, de leginkább csak a lelkesedés volt az, amire ma emlékszem, mint a komoly végeredményre - de hogy gép nélkül is lehet számítógépezni, erre akkor jöttem rá...

10 PRINT"A KOCSMABAN ALLSZ."
15 PRINT"MIT TESZEL?"
20 INPUT A$
25 IF A$ = "ISZOK" THEN PRIN
T"ISZOL.":I=I+5:GOTO 35
30 IF A$ = "KIMEGYEK" THEN P
RINT"KIMESZ.":GOTO 50
35 IF I<>15 THEN GOTO 15
40 IF I=15 THEN PRINT"TELEIT
TAD MAGAD ES HANYSZ.":I=0:GO
TO15

A legkomolyabb fejlesztés azonban, amit végig láthattam, apám programja, a (valószínűsíthetően) Házi Költségvetés című volt - ezt már említettem máskor is. Ő már az első időkben lelkesen forgatta a könyveket, hogy képezze magát, aztán belevágott ebbe az összetett BASIC programba. Itt sem volt előzetes tervezés, specifikáció (azt se tudtuk mi az), csak írta és írta, aztán néha felvette kazettára. A rutingyűjtemények voltak a kedvenc újság rovatai, egy nagyon hasznosnak talált rutint szinte azonnal be akart építeni a programjába. A fejlesztések több éven keresztül tartottak, ha jól emlékszem, valahogy 170 körüli fordulatra rúgott egy későbbi változat (de lehet hogy a 200-at is elérte), így hát már turbósítani kellett! A program részleteire sajnos nem emlékszem (pedig betennék ide egy repró-képet), de az biztos, hogy az adatok bevitele után több oldalas, hasábos kiértékelés következett, színezett mezőkkel, és ebben előre-hátra lehetett lapozni! Az adatok mindenre kiterjedtek (adók, költségek listája, bevételek), így a szülői megbeszélések fontos kellékévé vált a számítógép... Nem tudom, hogy hány nem programozó, nem mérnök ember használta ennyire célirányosan, tudatosan a számítógépet akkor, de biztosan nem lehettek sokan, hiszen ritkaságszámba ment, hogy az ember a különleges munkáján kívül is használja, használhatja, illetve egyáltalán van neki otthon.

Kitérő

Talán éppen ezért volt nagyon rossz érzés, mikor később egy munkahelyen, egy idősebb kollégám a számítógépezést a tévé nézéséhez hasonlította. Addigra már az élet minden területét eluralta a számítógép, a háztartások felében már biztosan volt is - sőt, az autókban is volt már fedélzeti kompjúter - nyilván ezek ténye nem tetszett a kollégának, és szeretett volna valamivel bosszút állni ezért az életen. Én azzal érveltem, hogy olyan ige, hogy számítógépezni nincs is, hiszen az ember például vagy szöveget szerkeszt, betűkészletet készít, rajzol, zenél, programozik, játszik, de ezek olyan egymástól eltérő tevékenységek lehetnek, hogy egy kategória alá vonni teljesen értelmetlen. Már gyerekkoromban óta nyilvánvaló, hogy a számítógépet lehet kreatív módon is használni, de ez attól függ, ki mennyire intelligens és fejlődőképes. Nem mondom, hogy az effajta véleményeknek nincs igazságtartalmuk, de a hiteles véleménnyilvánítás egyik alapfeltétele, hogy az ember tájékozott legyen, legalább a témában.

Turbo Pascal, a menő

A kicsi, de számomra fontos kitérő után viccesebb forrás(kód)okra eveznék: a '90-es évek második fele már egy nagyon skizoid állapotban lebegett számomra és barátaim számára. Egyrészt még C64-em volt (nekik is), tonnaszámra kaptuk a "levetett" floppykat más, régi tulajoktól - másrészt a hétköznapi beszédtémáink nagy részét a PC (és konzol)játékok adták. Unokatesóm például már korábban PC-re váltott, és a Turbo Pascal programozás lett a fő hobbija - ebben a környezetben már egy komolyabb szín-tetrist is alkotott. Ennek a játéknak a címe egyszerűen POTTY lett, a legjobban tetszett benne mindenkinek a csokigolyó, mert Z. úgy alkotta meg a grafikát, hogy különböző 16x16 pixeles gömbökre fényt eresztett egy régi DOS rajzolóprogrammal, és ezért úgy néztek ki a színes golyók, mintha édességek lettek volna.

A C64-es programozás ekkor már nem jelentett versenyképes tudást, legalábbis mainstream értelemben, a PC-hez pedig azért kellett volna egy komolyabb alapozás - ez nekem annyira nem volt meg. Ettől függetlenül lelkes voltam továbbra is C64-en, valahol már említettem, hogy a modern (konzol)játékokban nagyon tetszett a mentési lehetőség helyett létrejött PASSWORD opció, ilyeneket gyártottam, szinte hetente egyet leszállítottam a pénteki összeröffenésre.

Egyszer B.-t megkértem, készítsen nekem egy sprite-lopót és egy szerkesztőt is, mindkettőből fapadosat dobott össze, de legalább ki tudtam szedni a játékokból a szereplőket, és kitenni őket a képernyőre. Az egyik játékból a sétáló krokodil animációját is megcsináltam, mégpedig úgy, hogy egy talajt tettem alá, és kurzornyilakkal lehetett vezérelni balra-jobbra. Ez egy BASIC animálás volt, ugyanúgy mint a később, nagy röhögést kiváltó programom, a Léggitár Szimulátor. Ezt sajnos nem őriztem meg, pedig vicces lenne most képeket betenni ide: úgy kell elképzelni, hogy a képen egy multicolor sprite-okból álló elektromos gitár fekszik, és két sprite-kéz dolgozik rajta. Az egyik két lefogja a hangokat a bundokon, a másik pedig pengeti. Ezeket különböző billentyűkkel lehetett vezérelni - és természetesen trash metal zenei klasszikusok hallgatása mellé kellett betölteni. A program több szempontból is sikeres volt. Egyrészt a haverok szétröhögték az agyukat, és élvezettel játszottak rajta el komplett számokat péntek délutáni ökörködéseken, másrészt többféle gitárt is rajzoltam hozzá, megalapozva grafikai ismereteimet, harmadrészt valószínűleg a Guitar Hero előtt én voltam az, aki ritmusjátékot írt - na jó, némi túlzással, mert se játék nem volt, se ritmus... De a számítógépet erre használtam: kreatív játékra.

A másolásvédelem

Azt hiszem, a legnagyobb, saját szememmel látott törés a Newcomer című játék másolásvédelmének térdre kényszerítése volt. Ha programozói teljesítményekről van szó, akkor ezt szoktam emlegetni: B. barátunk egy pénteki összeröfi alkalmával kinyomtatta a floppy memóriát (leporellós papírral, MPS nyomtatóval), aztán a sok papírt hazavitte. Otthon csak 1 db C64-ese volt össz-vissz, de az nem is kellett: szabadidejében átfésülte a listát, és megkereste, hogyan működik ez a másolásvédelem. A tömör lényege az volt, hogy a floppy lemezre egy olyan sectort tettek, amit a másolóprogramok BAD SECTOR-ként könyvelnek el, és nem tudják másolni. A program viszont valamiféle ravasz módon tud ebből olvasni, valamiféle algoritmus segítségével ellenőrzést végez, és a játék tovább tölt. B. barátunk rájött a titokra, és gyártott egy segédprogramot is. A következő hétvégére vinnem kellett üres floppylemezt, amelyre rámásoltuk az eredeti boot lemez tartalmát.

A másolóprogram hibát jelzett, de B. tovább léptette, a lemez elkészült, bár így használhatatlan volt (viszont a tartalomjegyzéket azért beolvasta a gép). B. a saját programját is lefuttatta a lemezen, a lemezegység egy kicsit berregett, aztán a READY felirat jelezte, hogy kész van a művelet. Ezután betöltöttük a játékot a lemezről, és a játék címképernyője fogadott minket, nem a DISK ERROR.. Ez azt jelentette, hogy innentől kezdve a játék nekem is megvan. A srácok még többször is tesztelték a programot, és azon röhögtek, hogy jobb, mint az eredeti, ugyanis a gyári boot lemez csinált már DISK ERROR-t.. Ez volt tulajdonképpen a C64-es és az egész 8-bites történetem programozási csúcsa, aminek ugyan csak szemlélője, de legalább közeli szemlélője voltam.

Panzer General 2

Nem szalad elfeledkezni a korai PC-s korszakról sem. Ez az időszak számomra 1998-ban jött el, szerencsére igen sok játékot sikerült megszerezni, amelyekre már régen vágytam. Voltak azonban olyanok, amelyekkel nem csak én játszottam, hanem apám is, ilyen volt például a Panzer General 2, amelyre mondhatom, hogy a II. világháborús stratégiai játékok egyik csúcsa. A játékélmény egymás ellen is utánozhatatlanul jó volt, ugyanakkor kiváncsiak voltunk arra, hogy egy brutális túlerővel vajon mennyi ideig tartott volna egy blitzkrieg? Eltelt egy-két nap, míg a kimentett állásban, a Norton Commander Win95-ös verziójának hexadecimális editorát használva megtaláltam a pénz összegét tároló két byte-ot. Nem is emlékszem, hány játéknál sikerült az ilyesmi - bár azt már korábban megtanultam, hogy a játékélményt jelentősen ronthatja is az effajta előny. A poén kedvéért azért megérte.

Csak ásni és ásni

A legjobb szórakozást a Premier Manager 98 című játék módosítása hozta. A játék elegendő kihívást nyújtott, de egy idő után kiváncsivá is tett minket, milyen sikereket lehet még elérni benne? Aztán egy kis turkálás után megtaláltam a szabadon igazolható játékosok adatait, amelyek az adatbázisban hevertek (hol máshol?). Némi rutinos próbálgatást követően a játék betöltése után máris megjelent egy 18 éves játékos, akit ingyen lehet igazolni a csapathoz - és természetesen a képességei kiemelkedően jók, pár játékban eltelt hónap után múlva megoldották klubjaink anyagi gondjait is...

Kis pénz, kis foci

A stratégiai játékok közül még a Dune 2000 című remake mentett játékának átírása okozott hosszú, szórakoztató órákat: a gyakorlatilag korlátlan mennyiségű kredit segítségével irdatlan nagy hadsereget lehetett építeni, és ezt a barátok is méltányolták, mert jó játék a jó játék, de még jobb, amikor az ember kedvére játszhat katonásdit...

Dune 2000 szer ötezer

Azért szeretem ezeket az emlékeket leírni, mert újabb és újabb események bukkannak fel - épp készültem lezárni a témát, amikor eszembe jutott, hogy PC-re is írtam egy kalandjátékot, mégpedig QBASIC-ben! Amikor végeztem a középiskolával, egy felszabadult állapotba kerültem, és úgy gondoltam, a '90-es évek méltó lezárása az lenne, ha valamit produkálnék ezeknek az éveknek emlékére. A BASIC nyelv, a kalandjáték mint stílus, és a középiskola, mint helyszín összegyúródott a fejemben, és két hét alatt, szorgalmas, fegyelmezett fejlesztői munkával elkészítettem egy komplett, végigjátszható kalandjátékot, amellyel mindkét barátom játszott is - az egyikük majdnem végig is jutott benne, hiszen ő a középiskolai osztálytársam volt, ismerte a helyszínt... A játék nem is annyira, mint a készítés volt érdekes: hatalmas izgalommal írtam a sorokat QBASIC egyszerű, cián-sárga szövegszerkesztőjébe, azokkal a "magas" DOS karakterekkel, amelyeket majd egy évtizedig szerelmes áhitattal bámultam a különböző VGA monitorokon. A szerkesztés közben rájöttem, hogy felesleges tökölnöm az optimalizálással, csak megakasztotta volna a munka gyors ütemét - így amikor például harcra került sor a játékban, mert új ellenfél jelent meg, egyszerűen átmásoltam az egész harci rutint, amelyet már az előzőekben megírtam - hely akadt bőven, hiszen PC-ről volt szó és tudtam, a számomra felfoghatatlan nagyságú háttértárnak ez meg se kottyanhat. Az pedig már a fejlesztői kényelem csúcsát jelentette, amikor a RUN opcióra ütött Enter után azonnal elindult a program... Elmondhatom hát, hogy életemben 3 fajta számítógépre is írtam programot, kettőre játékot is - és ezzel bebizonyítottam, hogy egy átlagos felhasználó is képes hatalmas eredményekre - pusztán lelkesedéssel és kitartással.

A téma lezárásaképpen pedig már a közelmúltba kell csak visszautaznom, de ezt ebben a cikkben már megírtam, különben is, ez már nem a '90-es évek témája... A házilag készített programok viszont most is fontosak, bár mostanában inkább PC-re kell gyártani ilyeneket, hogy könnyebb legyen fejleszteni velük C64-re... Legalábbis az utóbbi évek erről szóltak, és nagyon remélem, a jövő évtized is telelesz ilyen jó ötletekkel, sikerekkel - ezekről majd legközelebb!