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+0933,A,B
17,C,D
205,181,3
201LD 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
201LD 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+231,x,y
33,v,w
17,k,l
229
213
197
205,181,3
193
209
225
125
145
111
16,242
201LD 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