Sinclair Spectrum Játék és Progrgam

Bevezetés

Hogyan született a könyv?
Nem titkolt előzménye jelen könyvünknek az 1001 játék és a Graphics Basic Commodore 64-en (LSI 1985.) című kiadvány. Abban a Commodore 64 tulajdonosai ismerkedhettek számítógépes játékokkal és más hasznos programokkal. Tudjuk, hagy sok játéknak Commodore és Spectrum változata egyaránt elkészült. Az olvasók véleményéből kitűnt , hogy a Spectrum tulajdonosok is szívesen forgatták, sok játék leírását onnan ismerték meg. Önként adódott tehát az ötlet, hogy készítsük el a könyvet, talán használni fogják a Commodore tulajdonosok is. Kislexikon rovatunkban megjelöltük azokat a játékokat, amelyekről leírás kiszült az 1001...c. könyvben.

Másolunk, másolunk...
Nem volt nehéz összeállítani a második fejezetet, a "minilexikont". Forrásaink azok a gyűjtemények voltak, amelyek tudomásunk szerint hazánkban szinte minden Spectrum tulajdonosnak megvannak. A programok könnyen hozzáférhetők a barátok, klubtársak gyűjteményéből.
A másolás nagy hátránya, hogy eredeti leírás nélkül kerül hozzánk a program. Játékok esetében persze izgalmas kaland megfejteni, mit tud a program. De sokszor találkozhatunk olyanokkal, akik azért nem játszanak egyébként fantasztikusan jó játékokkal, mert nem jöttek rá a legérdekesebb részletekre. Ilyenkor hajlamosak primitívnek tartani a jó programokat is. Pl. a TORNADO első laikus megközelítésben talán unalmas. A repülő repül, fel lehet szállni vele igen egyszerűen, le is lehet szállni, a pontszám növekszik, de nem történik semmi Különös. Aki nem kap hozzá leírást, hamar félreteszi. Ám ha valaki elmondja, hogy az igazi feladat fölkapni a kis korongokat, máris érdekes a játék, a játékost nem lehet elválasztani a géptől.
Segíteni szeretnénk azoknak, akik eredeti leírás nélkül jutottak hozzá a játékokhoz. Könyvünk harmadik fejezete a legjobb játékokról közöl leírásokat. Olyan Dolgokat akarunk elárulni amiket mi is csak hosszas kísérletezgetés után "hoztunk ki" a programokból. Aki szereti maga megfejteni a titkokat, ugorja át ezt a részt.
Azokra a játékokra koncentráltunk, amelyek eredeti ötleteket tartalmaznak, izgalmasak, nagy ügyességet igényeinek, valamilyen különleges szolgáltatást tartalmaznak, vagy nagyon jó grafikai, animációs kivitelben készültek. Sok játékról nem közlünk leírást. Elképzelhető, hogy némely leírás nem tökéletes lehet, hogy Te még újabb dolgokat fedezel föl. Ám - annak tudatában, hogy minden válogatás többé-kevésbé önkényes - elsősorban segíteni akartunk.

A játék és a játékos
Tapasztalatunk, szerint mindenki eljut egyszer arra a szintre, amikor már igényesen válogat a programok között. Kezdetben "ide nekem az oroszlánt is" alapon hatalmasra duzzasztjuk kazettáink számát. Majd rájövünk, hogy sok kazetta sok helyet foglal és szinte mindig csak ugyanazzal az 5-7 játékkal játszunk. Lassan már elfelejtjük az első nagy szenzációkat. Elkezdünk szelektálni. Már jobban megnézzük egy-egy program grafikáját, animációját. Szinte már első pillantásra kitaláljuk a játék lányegét. Sajnos valóban kevés az eredeti ötlet. Ám nagy bátorság az első benyomás után ítélkezni. Sokszor nagyon jó játékok pocsék formát mutatnak. A számítógépes játékok igazi szerelmese az igazi ötleteket, a mind kalandosabb programokat szereti, keresi. Ha majd valaki megírja a számítógépes játékok történetét, ki fog derülni, hogy egyenes út vezet az igénytelen, de ötletes játékoktól a "Horace"-játékokon át a "Beach Head" féle jó grafikájú többféle feladatot magába foglaló ötletes játékokig. Mindannyian végigjárjuk ezt a sort. Ha valaki először kap jó és ötletes játékokat, akkor hamarabb eldobja a Horace-t.
Az igazi ínyencek azonban előbb-utóbb a nagy választékbál kicsemegézik a jó, vagy a javítható ötleteket. Már nem ülünk meredten a képernyő előtt, hanem elkezdünk kombinálni. Előbb-utóbb mindenkiben felmerül, hogy "ezt én jobban is meg tudnám csinálni", vagy "ezt még ki kellene bővíteni valamivel és egészen jó lehetne". És így szépen lassan átváltunk a játékról a játék készítésére, a programozásra. Segítségünkre vannak ebben speciális játékkészítő programok. Ezekkel játszani is lehet, de emellett új szituációk felállítása is könnyű - csak ötlet kérdése az egász. Vannak olyan segédprogramok is, amelyekkel a teljesen eredeti ötleteket is meg lehet valósítani. Könyvünkben ilyen programok bemutatására is törekszünk.
Negyedik fejezetünk segítséget ad BASIC és gépi kódú programozáshoz. Nem teljes - mert nem is lehet az segédprogramok bemutatása. És ne feledjük: a programozáshoz nem elengedhetetlenül szükségesek ezek a segédletek. A Spectrum alapkiépítésben is sokmindenre képes. Ezek a segédprogramok nem oldanak meg mindent, csak könnyebbé teszik a munkát.
A Spectrum grafikai és zenei teljesítménye nagyon eltér más gépektől. Alapkiépítésből például nem tudunk repülő-zajt generálni. Grafikus képességei a gépnek alapkiépítésben is elég jók, de egy segédprogrammal egyszerűen kiváló animációt alakíthatunk ki. Ezekhez is segítséget nyújt a negyedik fejezet.
Egy kis ajándékkal is kedveskedünk olvasóinknak. A könyv végé meglepetés egy olyan program listája és leírása, amely kezdőknek igyekszik megmutatni, mit, hogyan lehet megvalósítani Spectrumon. Emellett persze nem mellékes, hogy a program könnyen általánosítható tetszőleges nyilvántartási feladatok magoldására.
A játékokat sokan sokféle kategóriába sorolják. A már említet 1001 játék... c. könyv besorolása igen laza és talán önkényes volt. Azon az alapbesoroláson kívül, hogy vannak ügyességi és logikai játékok, minden további alkategória megállapítás bizonytalan. Tudva ezt, igyekeztünk az egyébként igen nagy terjedelmű Spectrum-szaksajtóra támaszkodni. Kategória-rendszerünk tehát most más, mint az 1001 játékban volt.
Táblázatunk osztályzatokat is tartalmaz. Ilyen. osztályzatok szaksajtóban rendszeresen megjelennek. Ha úgy éreztük, hogy azok az osztályzatok nem felelnek meg a mi ízlésünknek, bátran átminősítettük azokat.
Segítettek a minősítésben olyan folyóiratok listái is, ahol a osztályzás kilenc fokú skálán volt megadva. Ezeket átfordítottuk az ötös rendszerre. Vállaljuk a tévedés lehetőségét, hiszen a ízlések és pofonok különbözők. Aki nem ért egyet velünk, írja felül az osztályzatokat.

Mit másoljunk, hogy másoljunk?
A spectrum népszerűségének egyik oka, hogy közönséges magnetofonról is betölthető minden program. (Azon kevesek, akiknek van microdrive-juk, most nem kapnak jótanácsokat -elnézést kérünk tőlük.) A magnetofonnal ugyan lényegesen olcsóbb, mint lemezegységgel, de az olcsóságért türelmünkkel kell fizetni.
Hogy mit másoljunk, arra nagy bátorság lenne konkrét ötletet adni. Sokan soha nem szoknak le a "harácsolásról" és lehet, hogy nekik van igazuk. Ha minden elérhetőt megszerzünk, később olyan programok is rendelkezésünkre állnak, amikre ma még nem is gondolunk.
Amit mindig érdemes lemásolni, az a másolóprogram. sokféle létezik. A másolásvédelem és a másolás egymás nyomában jár. Minden védelem feltörhető valahogy. Sőt sokszor a fejlesztő cégek is forgalomba hoznak másoló programokat. Hogy melyik másoló jobb, az nehéz kérdés. Általában megállapítható, hogy az a jó másoló, amelyikkel másolni lehet. Egyesek fejléc olvasóként is használhatók, mások csak másolásra jók. Ha már valaki ,jobban tud programozni, érdekes lehet számára, hogy milyen fejléc-adatokat lehet leolvasni egy-egy programmal.
A kazettáról mindig blokkokban lehet másolni. A legtöbb másoló program legalább azt kiírja, hogy melyik blokk beolvasása, majd kimentése következik. Auto copy-val talán gyorsabb a másolás, de nagy figyelmet igényel.
Pár szót szólni keli a kazettáról-kazettára másolásról is. Talán mindenki gondolt már arra, hogy időt takaríthat meg, ha két magnóval, mint valami zeneszámot, átmásolja a programokat. Aki már csinálta, az tudja, hogy felettébb kockázatos ez a módszer.
Első másolatot átjátszani még talán megy, de aztán arról újabb átjátszás már nem biztos, hagy sikerül. Ha arra gondolunk, hogy magnóról-magnóra való átjátszáskor figyelni kell a hangerőre, a hangszínre, a szalag hosszra, és még így is bizonytalan az eredmény, hamar beláthatjuk, hogy megéri a másoló programok használata az időt. Maradjunk meg azoknál a technikáknál amelyek számítógéphez kötődnek.
Másolni csaknem minden típusú kazettára lehet. Nem érdemes azonban drága, szuper minőségű kazettát használni, mert az olcsóbb közönséges kazetták éppoly megfelelőek. Minden programot két példányban őrizzünk meg! Nem érdemes 90 perces kazettát használni, mert a sok tekercselés sok időt igényel és a felvételek minősége is hamarabb megváltozik. A 90 perces kazetta másodpéldányok tárolására nagyon megfelelő. Használjunk 5-30 perces kazettákat. Ezekre 4-5 program is elfér és hamarabb visszakereshető egy-egy játak. Vigyázat! Az 5 perces kazettákra legfeljebb 16K-s játékok férnek rá. A kazettákat inkább mechanikai szempontok alapjen válasszuk ki. Nem jók azok amelyek könnyen elakadnak. Ezt nem szereti a Spectrum.
Nagyon kell vigyázni arra, hogy a szalaghoz ne érjen hozzá a kezünk. Ha sokat tapogatjuk a szalagot, a rákerülő zsírréteg a leolvasást megzavarhatja. (Ha mégis előfordul, jó ha van másolatunk minden programról.) Megelőzhetjük a szalag tapogatását, ha a játak beolvasása után mindig visszatekercseljük a szalagot alaphelyzetbe. Az sem árt, ha felvétel után a kazetta hátulján kitörjük a műanyag füleket ezáltal megvédve a letörléstől, felülírástól.
A legtöbb játak betöltés után automatikusan indul (indulásnak vesszük azt is, ha menüvel bejelentkezik). Kétféle betöltési módot ismerünk A legtöbb játék LOAD "" utasításra betöltődik. Ám néha a gyártók -különböző okokból- elhagyják a BASIC betöltőt. Ilyenkor LOAD "" CODE utasítást kell használni. Ha kényelmetlennek találjuk, hogy a CODE utasítást ki kell tenni írjunk a program elé egy betöltő programot (10 LOAD "" CODE) Ezt a sort felvéve kazettára, megoldódik a betöltés minden gondja.
A legtöbb játék, ha bonyolult, első ismerkedéskor hamar vége ér, mert elfogy az "életünk". Az életek száminak megnövelésére vagy végtelenné tételére általában lehetőségünk van, ha ismerjük ehhez a megfelelő címet. A POKE utasítást az alábbiak szerint használva megkönnyíthetjük magunk számára a játék megismerését (Ha már ismerjük a programot, nem izgalmas a végtelen élet lehetősége, mert hiszen a szigorú feltételek is hozzátartoznak játék lényegéhez.

A POKE utasítás
Az alábbiakban egyféle magoldást közlünk. Bizonyára létezik olyan játék, ahol ez nem használható és létezik olyan is, ahol ennél egyszerűbben is alkalmazható a POKE. A programot az alábbi utasítással olvassuk be:

MERGE "": PAPER 7: INK 0: CLS: LIST
(ENTER és magnó indul)
A képernyőn megjelenik a BASIC betöltő listája és alul OK 0:5 (Magnó állj!)

A listában meg kell keresni a LOAD "" CODE-ot és a PRINT USR (vagy RANDOMIZE USR) utasítást. Közéjük kell beírni a POKE n,m utasítást. Tehát EDIT-tel le kell hozni a munkasorba a listát (vagy annak itt érdekes részét) és be kell szúrni a POKE n,m-et. ENTER-el vissza a sort, majd RUN és ENTER. Magnó indul, így a játék örökéletű lesz.
Ha a program betöltésekor megjelenik az "Out of memory" üzenet, akkor már egy kicsit bonyolultabb a helyzet. Ekkor ugyanis a memóriát elfoglalja sok olyan adat, mely az igazi program működéséhez nem szükséges. Ilyenkor az előbbiek szerint beolvassuk a Basic betöltőt, majd törlünk néhány "felesleges" utasítást. (PAPER, INK, BORDER, stb.) és az így megspóroltak helyett az előbbi helyre beírjuk a POKE-ot.
A negyedik fejezetben röviden ismertetünk egy módszert arra, hogy hogyan lehet megkeresni néhány játéknál az ismeretlen POKE értéket. Ez már sok munkát és némi gépi kódú programozási ismeretet igényel, ezért közöljük ott. Jó szórakozást!

Az igényesebb játékok menüvel jelentkeznek be: megjelölhetjük, hányan akarunk játszani, kiválaszthatjuk a joystick-et, és azt is megtudjuk, melyik az a billentyű, amivel elindul a játék. Ha menü nincs, legtöbbször bármely billentyű megnyomására elindul a játék. Ilyenkor kapkodhatunk, melyik billentyűvel mozgathatjuk figuránkat.
Általában - ha külön nem jelölik - az alábbi billentyűkkel próbálkozzunk:
- kurzornyilak (ilyenkor 0 a "tűz")
- klaviatúra szélső billentyűi (O,P,Q,A), ilyenkor a SPACE, az ENTER vagy egyéb billentyű pl. M jelenti a "tűz"-et
Sokszor a menü bejelentkezésekor jut eszünkbe, hogy elfelejtettük az interface behelyezését. Bekapcsolt állapotban nem szabad SEMMIT a géphez illeszteni az él-csatlakozón keresztül. Tehát ha elfelejtettük ajz ínterface-t illeszteni, ki kell kapcsolni a gépet és az illesztés után újra betölteni a programot.
Néhány program nem szereti a KEMPSTON interface-t. Ilyen pl. a Chequered Flag. Könnyen lehet, hogy más programok is "elszállnak" betöltés után. Próbáljuk meg ilyenkor interface nélkül betölteni.
Reméljük, sok segítséget nyújthatunk Neked a játékokhoz de ha programozni akarsz, akkor is hasznos lesz számodra ez a könyv.
Sok sikert és érdekes kalandokat kívánunk!

4.1 Egy kis segítség programozó barátainktól - játékosoknak

4.1.1 A hangok gépi kódú programozása

Egy Csatornás BEEP szimulátor
Mindenek előtt a BASIC-ben hozzáférhető BEEP utasítás gépi kódú változatát ismertetjük. A BEEP rutin X,Y páraméterekkel működik, ahol X a tartam, Y a hangmagasság értéke. A tartam értékét 00 és +10 között (sec) - tört értéket is feltételezve - állították be, míg a hangmagasság értéke -60 és +69 között szabályozható. A gépi kódú rutinban X és Y értéke is két byte-on tárolódik, tehát nehezebb kiszámítani a szükséges értéket, hisz a tartam értéke is 0-65535 értéket vehet fel, úgy mint a hangmagasságé.
A hangmagasság a 130 : 65535 arányból kikalkulálható, míg a tartam értéke az alsó byte-on byte-onként 1 msec.

ADDR+00
ADDR+03
ADDR+06
ADDR+09
33,A,B
17,C,D
205,181,3
201
LD HL,
LD DE,x
CALL 989
RET
; hangmagasság
; tartalom
; BEEPER ROM rutin

Az ADDR értéke tetszőleges RAM cím lehet. Próbáljuk meg a programot lefuttatni:
A = 0 ; B = 3 ; C = 150 ; D = 0 értékekkel.
( C = 200 ; D = 0 értékkel a tartam = 2 sec )

Kétcsatornás hanggenerátor
Ezzel a 31 byte-os rutinnal már sokkal több - a fül számára kellemesebb és sokrétűbb - hangzás előállítható.
A tartam értékét az ADDR+07 címen kell megadni (x=255 felel meg egy sec-nek).
Az ADDR+18 címen az 1. hang, míg az ADDR+27 címen a 2. hang frekvenciáját (y ill. z értékét 0-255-ig) kell megadni.

ADDR+00
ADDR+03
ADDR+04
ADDR+05
ADDR+06
ADDR+08
ADDR+10
ADDR+11
ADDR+13
ADDR+14
ADDR+17
ADDR+19
ADDR+20

ADDR+22
ADDR+23
ADDR+26
ADDR+28
ADDR+30

58,72,92
31
31
31
6,x
14,254
37
32,6
238,16
237,121
38,y
45
32,244
238,16
237,121
46,z
16,236
201

LD A,(23624)
RRA
RRA
RRA
LD B,x
LD C,254
DEC H
JR NZ,ADDR+19
XOR 16
OUT (C),A
LD H,y
DEC L
JR NZ,ADDR+10
XOR 16
OUT (C),A
LD L,z
DJNZ,ADDR+10
RET




; tartam




; 1. hang megszólal
; 1. hang frekvencia



; 2. hang megszólal
; 2. hang frekvencia

A rutin meglehetősen sok variáció előállítására alkalmas, melyet a felhasználó változatosan alkalmazhat.
Mi most csak néhány változatot ismertetünk:

Legyen x=240 ; y=238 ; z=254
A RANDOMIZE USR ADDR tipikus autóduda jellegű hangot fog előidézni.

Gépkocsi motorzaj:
POKE ADDR+07,12
POKE ADDR+18,1

ezután

10 FOR I=10 TO 1 STEP-1
20 POKE ADDR+27,I
30 RANDOMIZE USR ADDR
40 NEXT I
50 GO TO 10

és RUN

Túráztatott kismotor:
POKE ADDR+07,3
POKE ADDR+18,1

ezután:

10 FOR I=20 TO 1 STEP-1
20 POKE ADDR+27,I
30 RANDOMIZE USR ADDR
40 NEXT I
50 GO TO 10

és RUN

Helikopter jellegű zaj:
POKE ADDR+07,180
POKE ADDR+18,2

POKE ADDR+27,4
ezután:

10 RANDOMIZE USR ADDR
20 GO TO 10

és RUN

Dobgép jellegű alap:
POKE ADDR+07,2
POKE ADDR+18,1
ezután:

10 FOR I=20 TO 200 STEP 40
20 POKE ADDR+27,I
30 RANDOMIZE USR ADDR
40 NEXT I
50 PAUSE 3
60 GO TO 10

és RUN
ezután a 10-es sort cseréljük ki:

10 FOR I=200 TO 10 STEP-10

és próbáljuk ki így is:

10 FOR I=200 TO 10 STEP-2

ismét érdekes hanghatásokhoz jutottunk.

Effekt szimulátor
Az ADDR+01 címen kell beállítani a hangmagasság növekmény (x=0-255) értékét, az ADDR+02 címen a hangok számát (y=0-255), az ADDR+04 és ADDR+05 címeken két byte-on a hangmagasság értékét (v,w) , ill. az ADDR+07 és ADDR+08 címeken szintén két byte-on a tartam értékét (k,l) msec-ban.

ADDR+00
ADDR+03
ADDR+06
ADDR+09
ADDR+10
ADDR+11
ADDR+12
ADDR+15
ADDR+16
ADDR+17
ADDR+18

ADDR+19
ADDR+20
ADDR+21
ADDR+23

1,x,y
33,v,w
17,k,l
229
213
197
205,181,3
193
209
225
125
145
111
16,242
201

LD BC,(x+256*y)
LD HL,(v+256*w)
LD DE,(k+256*l)
PUSH HL
PUSH DE
PUSH BC
CALL 949
POP BC
POP DE
POP HL
LD A,L
SUB C
LD L,A
DJNZ,ADDR+09
RET






; BEEPER ROM rutin

Próbáljuk ki a rutint a következő adatokkal:

  x y v w x k
1. 4 250 0 2 15 0
2. 200 100 0 2 20 0
3. 200 2 0 2 100 0
4. 200 10 0 4 40 0
5. 170 10 0 1 60 0

ezután gépeljük be:

10 POKE ADDR+04,1
20 RANDOMIZE USR ADDR
30 GO TO 10

Megjegyzés: A hangok minősége ugrásszerűen javul erősítő használatával. Próbáljuk ki milyen szépen szólnak így az effektek!


Tartalom

Vissza