- 1. Tárgyak és tulajdonságok
- 1.1. Új tárgy létrehozása
- 1.2. Mik egy tárgy tulajdonságai?
- 1.3. Tárgy tulajdonságainak beállításai
- 1.4. A tárgy tulajdonságainak használata
- 1.5. Tulajdonságok típusai
- 3. Igék
1. Tárgyak és tulajdonságok
1.1. Új tárgy létrehozása
Ha egy új tárgyat akarsz létrehozni, két dolgot kell tudnod kapásból: a tárgy azonosítóját és a tárgy típusát. Az azonosító a tárgy belső neve, ezt a játékos sosem fogja látni. Az azonosító, szemben a többi rövid és hosszú leírással, nem tartalmazhat szóközt, ékezetes betűket, vagy speciális karaktereket.
A tárgy típusa az előregyártott típusok egyike lehet. A leggyakoribbak ezek közül a /Room (szoba) és a /Thing (dolog). Új tárgyat a new paranccsal hozhatunk létre, például így:
new Thing 'alma';
Kívánság szerint rögtön megadhatjuk a tárgy néhány tulajdonságát is:
new Thing 'alma', noun => 'alma', adjective => 'piros', sdesc => 'alma', adesc => 'egy piros alma', location => $almafa ;
1.2. Mik egy tárgy tulajdonságai?
A tárgy tulajdonságai határozzák meg azt, hogy a tárgy a játékos számára mit nyújt: hogyan néz ki, milyen szavakkal lehet rá hivatkozni, és mire jó vagy nem jó.
Alapból egy újonan létrehozott tárgyat meg lehet vizsgálni (ez, ha mást nem állítunk be, csak annyit fog mondani: "Úgy néz ki, mint bármelyik közönséges X") és fel lehet venni; másra nem is jó.
A tárgyat felruházhatjuk tulajdonságokkal. Tetszőleges számú tulajdonság lehet, ezeknek hasonló azonosítójuk van, mint a tárgyaknak maguknak: csak ékezet nélküli kis- és nagybetűkből állhatnak. Például jó tulajdonság név az "ldesc" (ez egyben a tárgy hosszú leírása), vagy a "miEzMarItt" (ez egy új tulajdonság, amit a rendszer maga nem kezel, de ha egyszer létrejött, már lehet rá hivatkozni.
1.3. Tárgy tulajdonságainak beállításai
Egy már létező tárgy tulajdonságait a létrehozása után is beállíthatjuk. Például, az előző fejezetben létrehozott almának később így tudunk újabb tulajdonságokat adni:
%$alma = ( %$alma, ldesc => 'Egy csodaszép, mosolygós, piros alma. Kedved lenne egy jó nagyot beleharapni. Nyamm!', verDoEat => 1, doEat => '! Myprint "Ilyen finom almát rég nem ettél!"; $this->moveInto(undef);', );
(Ha esetleg gonoszabbak akarunk lenni, egy mérgezett almával kínálhatjuk meg a játékost:)
%$alma = ( %$alma, doEat => sub { my ($actor) = @_; Myprint "Sajnos az alma mérgezett volt. A gyomrod már az első falat után megcsikordul. Kétségbeesetten próbálsz telefonálni a mentőknek, de már késő..."; Die $actor; }, );
Fontos, hogy az első sorban pontosan szerepeljen a %$alma kétszer, és az utolsó sorban csak a bezárójel és a pontosvessző szerepeljen.
1.4. A tárgy tulajdonságainak használata
Ha már egyszer létrehoztuk a tárgy tulajdonságait, lehet is rájuk hivatkozni. A hivatkozáshoz a tárgy és a tulajdonság nevére van szükség. A tárgy neve elé mindig $ (dollár) jelet kell tenni.
Például, a $alma nevű tárgy ldesc tulajdonságát a következőképpen érhetjük el:
$alma->ldesc
Vegyük például a következő kódrészletet:
Myprint "Megvizsgálod ", $alma->targydesc, ". ", $alma->ldesc, " Most már sokkal többet tudsz róla!";
Ez a következőt fogja kiírni a játékosnak:
Megvizsgálod az almát. Egy csodaszép, mosolygós, piros alma. Kedved lenne egy jó nagyot beleharapni. Nyamm! Most már sokkal többet tudsz róla!
1.5. Tulajdonságok típusai
Egy tárgynak sokféle tulajdonsága lehet. Az alaptípusok a szöveg, lista, szövegkód és szubrutin.
A szöveg típusú a legegyszerűbb. Szimpla vagy dupla idézőjelek közé kell tenni, és már kész is van. Például:
%$alma = ( %$alma, onDesc => "az almán", ldesc => 'Az almára valaki filctollal ráírta: "Mérgezett!". Biztos csak viccnek szánták.', );
Amit fontos tudni: A szövegben nem szerepelhet az az idézőjel típus, amivel körülvettük. Ezen kívül szöveg típusnak számít mindenféle perl nyelvű kifejezés, ami végül szöveget eredményez, így pl. hivatkozhatunk egyéb tárgyakra, hívhatunk eljárásokat, és ezeket összefűzhetjük. Például:
new Thing naptar, location => $nappali, noun => 'naptar', sdesc => 'naptár', ldesc => 'Megnézed a naptárat. ' . scalar(localtime) . ' van ráírva.', ;
Az így létrehozott naptár mindig azt az időt fogja mutatni, ami akkor volt, amikor a kalandot betöltötték. Később a szubrutin és szövegkód típusú tulajdonságoknál látni fogjuk, hogyan lehet olyan naptárat létrehozni, ami folyamatosan az aktuális időt mutatja.
Vegyük észre, hogy bár nincs idézőjelek között, a location is szöveg típusú: azt fejezi ki, hogy a naptár a $nappali nevű helyen található kezdetben. (Vagyis, amíg a játékos fel nem veszi).
A lista típusú tulajdonság tetszőleges számú szöveg típusú tulajdonságból áll. Ezeket vesszővel kell elválasztani, és [ ] jelek közé kell tenni. Például....
2. Előre definiált tulajdonságok
- contents
- A tárgy vagy helyszín tartalma.
Ezt nem kell kézzel kitölteni; a location tulajdonságok alapján az értelmező feltölti induláskor.
Ahogy a location tulajdonságot, ezt sem szabad kézzel módosítani.
Tárgyak mozgatásához a moveInto parancsot kell használni. - location
- A tárgy kezdő helye. Ha nincs kitöltve, akkor a tárgy "sehol" sincs.
Később a tárgy a moveInto paranccsal mozgatható másik helyre. - sdesc
- Rövid leírás (short description).
Ez egyszerűen a tárgy neve, ebből származtatja a program a ragozott eseteket is.
Szobák esetén ezt fogja a program kiírni, amikor a játékos itt tartózkodik.
Tárgyak esetén ez többnyire egy szó (pl "asztal" vagy "kis kulcs")
szobák esetében pedig pár szó (pl. "A ház előtt"). - isfixed
- Ha 1, a tárgy mozdíthatatlan. Ha 0, akkor felvehető.
A felvehető tárgyak adesc leírása szerepel a helyszín leírása végén,
vagy a tartalmazó Container leírásánál.
Ha a tárgy mozdíthatlan, akkor a helyszín leírásának végén a heredesc fog szerepelni. - weight
- A tárgy súlya. Ez mozdítható (lásd: isfixed) tárgyaknál számít csak.
A szereplők (pl a játékos) és Containerek csak véges sok súlyt bírnak el (lásd: maxweight, bulk). - bulk
- A tárgy mérete. Ez mozdítható (lásd: isfixed) tárgyaknál számít csak.
A szereplők (pl a játékos) és Containerek csak véges összméretet bírnak el (lásd: maxbulk, weight). - score
- A tárgy pontértéke.
Ennyi pontot kap a játékos, amikor első alkalommal felveszi a tárgyat.
Nyilván csak mozdítható (isfixed=0) tárgyaknál van értelme. - adesc
- A tárgy neve határozatlan névelővel.
Így szerepel majd a tárgy a listákban (pl. "egy kis kulcs").
Személyneveknél és anyagneveknél érdemes felülírni. - thedesc
- A tárgy neve határozott névelővel.
Egyes üzeneteknél használja a program (pl. "A kis kulcs már nálad van"). - targydesc
- A tárgy neve tárgyesetben.
- ondesc
- A tárgy esete helyhatározós esetben.
- ldesc
- A tárgy hosszú leírása.
- isactor
- 1 Actor osztály esetén. Ez egy beépített mező, ne buzeráld el.
- maxbulk
- Összesen ennyi bulk (méret) fér ebbe a tárgyba.
Container és Actor típusoknál számít. - maxweight
- Összesen ennyi weight (súly) fér ebbe a tárgyba.
Container és Actor típusoknál számít. - iscontainer
- Értéke 1, ha a tárgy egy Container.
- Thing
- Ez minden játékban található dolognak az ősosztálya. Szimpla felvehető tárgyakhoz ez is bőven megfelel. Ha valami bonyolultabbat akarsz csinálni, akkor érdemes a leszármazottak valamelyikét használni helyette.
- Container
- Ez egy olyan tárgy, ami tartalmazhat más, mozdítható tárgyakat.
- OpenableContainer
- Ez egy olyan Container, amit ki lehet nyitni.
- Room
- A játék egyik helyszíne.
- NestedRoom
- Szoba a szobán belül.
- DarkRoom
- Egy sötét szoba.
- Conversation
- Egy speciális "szoba", ami egy párbeszéd lefolytatására alkalmas.
- DoorWay
- Ajtó, ami két szoba között vezet.
- KeyItem
- Kulcs, amivel valamit ki lehet nyitni.
- Actor
- A játék egyik NPC szereplője.
- BasicMe
- A játék főszereplője, őt irányírja a játékos.
- Daemon
- Egy háttérban futó folyamat.
- Fuse
- Egy időzített esemény.
'Thing' => [qw(contents location sdesc isfixed weight bulk score adesc thedesc targydesc ondesc ldesc)], 'Actor' => [qw(isactor maxweight maxcnt totecnt toteweight)], 'BasicMe' => [qw(isbasicme)], 'Container' => [qw(maxbulk maxweight isopen iscontainer contentsvisible issurface)], 'OpenableTrait' => [qw(isopenable isclosed keys openscore islockable)], 'OpenableContainer' => [qw(istransparent)], 'Doorway' => [qw(isdoor)], 'Room' => [qw(islit isseen)], 'NestedRoom' => [qw(isparentreachable reachable)],
3. Igék
- vizsgáld meg
- A játékban ez az ige a legfőbb érzékszerved. Általános szabály: mindig nézz körül, és mindent vizsgálj meg alaposan. Az igének két formája van: önállóan és tárggyal is lehet használni. Önálló formájában a környezetedről ad tájékoztatást, tárgyas formában pedigaz adott tárgyról. Példák:
nézz körül
vizsgáld meg a hatalmas playboy posztert
Szinonímák: n, v, néz, vizsgál, megnéz, megvizsgál, átvizsgál, körülnéz - vedd fel
- Ez a második legfontosabb ige, egy mozdítható tárgyat kell megadni hozzá. Például:
vedd fel az almát
A főszabály: ami nincs leszögezve, azt nyúld le. Ha valami le van szögezve, akkor előbb a szögeket nyúld le. Sajnos előfordulhat, hogy már túl sokmindent cipelsz magaddal, és valami már nem fér a kezedbe, vagy a súlyát nem bírod el. Ilyenkor érdemes egy zsákot beszerezni.
Szinonímák: f, vf, fv, felvesz, elrak, eltesz,... - tedd le
- Egy olyan tárgyat kell megadni, ami nálad van. Például:
tedd le a nehéz ládát
Szinonímák: eldob letesz lerak,... - nyisd ki
- Egy ajtót, vagy más becsukott tárgyat lehet kinyitni ezzel az igével. Például:
nyisd ki a keleti ajtót
Előfordulhat, hogy egy ajtó vagy szekrény zárva van. Ilyenkor nincs más hátra: meg kell találni a kulcsot, amit nyitja. Például így:
Nyisd ki a tölgyfa szekrényt a kis rézkulccsal
Szinonímák: nyit - csukd be
- Egy ajtót, szekrényt, ládát, vagy más csukható tárgyat lehet így becsukni. Hasonlóan a "nyisd ki" igéhez, itt is lehet egy kulcsot használni, feltéve hogy a céltárgyat be lehet zárni. Például:
zárd be a ládikót a kis aranykulccsal
Szinonímák: zár bezár csuk becsuk,... - rakd
- Ezzel lehet dolgokat rárakni vagy beletenni másik dolgokba. Például:
Rakd bele a műkincset a széfbe
Szinonímák: rak tesz beletesz belerak - várj
- Előfordulhat, hogy a játékban bizonyos dolgok csak az idő múlásával következnek be. Ilyenkor jól jöhet ez az ige, amivel egy kőrig nem csinálsz semmit. Más haszna nemigen van, és szinonímája sincs.
- nyomd meg
- Nem csak gombokat lehet nyomkodni: oszlopokat boríthatsz fel, vagy lemerült akkumulátorú kocsit lökhetsz be ezzel az igével. Például:
lökd meg a részeg fazont
Szinonímái: megnyom nyom lök meglök tol eltol - húzd meg
- Kötelet, emelőkart vagy kutyát pórázon egyaránt húzhatsz ezzel az igével. Például:
húzd meg a nagy piros kart
Szinonímái: húz meghúz kihúz - add oda
- Egy másik személlyel oszthatod meg így tárgyaidat és vagyonodat. Például:
Add oda a Penthouse magazint a katolikus papnak
Ahogy az életben is: vigyázz, mert nem biztos, hogy az elajándékozott tárgyadat valaha is viszontlátod.
Szinonímái: ad odaad átad. - szólítsd meg
- Ha a történet szereplőjével intenzív baráti kapcsolatot akarsz ápolni, akkor nem árt szóba elegyedni velük. Például:
köszönj az ovónőnek
Szinonímák: beszél köszön megszólít - menj északra
- Rövidítve: é
- menj délre
- Rövidítve: d
- menj keletre
- Rövidítve: k
- menj nyugatra
- Rövidítve: ny
- menj fel
- Rövidítve: fel
- menj le
- Rövidítve: le
- menj ki
- Rövidítve: ki
- menj be
- Rövidítve: be