Maliusz Home FrissVáltozások
EarthDawn SpellJammer
Preferences | Upload | Térkép

Szöveges Kalandjáték/Tulajdonságok

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
2. Előre definiált tulajdonságok
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