Programování pro hračičky/Měniči/Lekce 10
Tato stránka je součástí kurzu: | |
středoškolská | |
Příslušnost: skupinová |
Efekty přeonačení
editovatV příkladech použití příkazu přeonač
v minulé lekci jsme se zatím setkali jen s efektem zadávaným pomocí klíčového slova self
, spočívajícím ve vyslání hlášky tomu, kdo použil definovaný příkaz. Herní realita se však neskládá jen ze zpráv, které dostáváme v odpověď na zadané příkazy, nýbrž také ze zpráv, které dostáváme o činnosti jiných hráčů. A právě k tomu je určen druhý z hlavních efektů, zadávaný pomocí klíčového slova others
. Jeho použití si nejlépe ukážeme na jednoduchém příkladě:
> přeonač okolí
Soustředíš se na měnění...
Zadej příkazy, pomocí nichž má být možné tvoji metodu zavolat.
Seznam příkazů: pšoukni,psoukni,pšouknu,psouknu
Zadej efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): self:Pšouk! (Teď se ti opravdu ulevilo.)
Celková náročnost přeonačení je nyní 13 ŽB a 21 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): others:Najednou to tu zasmrdělo, jako by... si tu někdo upšoukl.
Celková náročnost přeonačení je nyní 14 ŽB a 28 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): .
Svět se ti krátce zavlnil před očima.
Přeonačil jsi své okolí na tak akorát dlouho.
Dalším široce využitelným efektem je wait
, který způsobí čekání zadaný počet sekund, než se provede další efekt v pořadí:
> přeonač okolí
Soustředíš se na měnění...
Zadej příkazy, pomocí nichž má být možné tvoji metodu zavolat.
Seznam příkazů: kýchni,kychni,kejchni,kýchnu,kychnu,kejchnu
Zadej efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): self:He...
Celková náročnost přeonačení je nyní 17 ŽB a 25 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): wait:2
Celková náročnost přeonačení je nyní 19 ŽB a 25 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): self:... e-e-e...
Celková náročnost přeonačení je nyní 20 ŽB a 30 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): wait:2
Celková náročnost přeonačení je nyní 22 ŽB a 30 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): self:... pčík!!!
Celková náročnost přeonačení je nyní 23 ŽB a 35 DB.
Po posledním efektu zadej "." pro provedení přeonačení.
Chceš-li celé přeonačení ukončit, použij "~q".
Zadej další efekty, jež by měla tvoje metoda vyvolat.
Efekt (a jeho parametr): .
Svět se ti krátce zavlnil před očima.
Přeonačil jsi své okolí jen na krátkou chvilku.
Konečně, poslední z efektů, které jsou v současné verzi příkazu přeonač
k dispozici, je random_move
, který způsobí, že hráč, který zadal definovaný příkaz, se přesune do náhodné sousední místnosti (navenek přitom vydává normální pohybové hlášky (tedy třeba Všudybud odchází na východ.
a Ze západu přichází Všudybud.
), sám však žádnou hlášku automaticky neobdrží. Tu je nutno mu vyslat efektem self
.
Celkem tedy jsou v příkazu přeonač
v současnosti k dispozici tyto efekty (v pravém sloupci tabulky je uveden příklad použití):
self |
hráči, který zadal příkaz, se vyšle zadaná hláška | self:Udělalo se ti špatně.
|
others |
do okolí hráče, který zadal příkaz, se vyšle zadaná hláška | others:$Ten(1,OBJ_TP) úplně $dan(zezelenal,OBJ_TP). Asi se $ho(3,OBJ_TP) udělalo špatně.
|
wait |
čeká se zadaný počet vteřin | wait:4
|
random_move |
hráč, který zadal příkaz, odejde náhodným směrem | random_move
|
Specifikace objektu akce
editovatPři definici akcí příkazem přeonač
jsme se zatím zaměřili jen na samotné příkazové sloveso a nevěnovali jsme žádnou pozornost tomu, co hráč napsal po něm. První příklad z tohoto kroku bude fungovat úplně stejně, ať hráč zadá samotné pšoukni
, nebo pšoukni si velmi hlasitě
, nebo třeba pšoukni do Všudybudova batohu a pak ho rychle zašněruj
. V mnoha případech by však pro věrohodný herní účinek bylo potřeba zbytek zadání příkazu nějak zohlednit.
Příkaz přeonač
nám proto umožňuje zadat, že zadané sloveso musí být následováno určením nějakého objektu, s nímž se má příkaz provést, jaká předložka má případně určení objektu předcházet a v jakém pádě má být objekt pojmenován.[1] V současné verzi příkazu přeonač
je možno zadat jen jednu předložkovou a pádovou vazbu pro všechna zadaná slovesa — po seznamu sloves oddělených čárkami následuje buď středníkem oddělená předložka a dalším středníkem oddělené číslo pádu od 1
do 7
, nebo bez předložky přímo středníkem oddělené číslo pádu.[2] Takto definovaný příkaz pak bude při zadání vyžadovat předmět v daném pádu a případně též s danou předložkou.
Místo jednoduché redefinice příkazu vem
, kterou jsme si ukázali jako příklad v minulém kroku, můžeme tedy napsat:
vem,vezmi,vezmu,beru;4
Příkaz pak na zadání vem kleště
reaguje stejným způsobem jako v příkladu z minulého kroku, ovšem při zadání předmětu, který se poblíž hráče nevyskytuje, nebo při zadání samotného vem
neprovede efekty definované přeonačením, nýbrž — obdobně jako standardní herní příkazy — bude se ptát hráče, co přesně že má na mysli.
Obdobně můžeme definicí předložky a pádové vazby například způsobit, aby jiní hráči mohli standardně plivat kolem sebe, ale nemohli plivat na někoho, pokud plivání na někoho předefinujeme vlastní akcí:
plivni,plivej,plivnu,plivu;na;4
self:Ale ne, to se přece nedělá!
others:Někdo tu chtěl plivat, ale raději si to rozmyslel.
.
V případě takhle definovaného příkazu hráč při zadání samotného plivni
bude nově definovaným příkazem odmítnut, ale na jeho místo nastoupí standardní příkaz plivni
, takže hráč i jeho okolí dostanou hlášku, že hráč plive kolem sebe. Pokud však hráč zadá například plivni na Všudybuda
, tak při Všudybudově nepřítomnosti bude dotázán, koho že má na mysli, a při Všudybudově přítomnosti obdrží on sám hlášku Ale ne, to se přece nedělá!
a jeho okolí hlášku Někdo tu chtěl plivat, ale raději si to rozmyslel.
Pseudoklauzury při přeonačování
editovatPodobně jako v příkazu změň
můžeme i v příkazu přeonač
zadávat do hlášek pseudoklauzury. Důležité je to zejména pro věrohodné výstupy efektu others
:
$Ten(1,OBJ_TP) se opatrně $plural(rozhlíží,rozhlížejí,OBJ_TP). Že by $dan(větřil,OBJ_TP) nějaké nebezpečí?
Co to bylo za dutou ránu? Aha, zdá se, že $ten(4,OBJ_TP) klepla pepka.
$Ten(1,OBJ_TP) vyděšeně $dan(vykřikl,OBJ_TP) a $dan(skácel,OBJ_TP) se k zemi.
Kromě objektových zkratek OBJ_TP
a OBJ_TO
, které jsme poznali při používání pseudoklauzur v příkazu změň
, máme v příkazu přeonač
k dispozici navíc i zkratku OBJ_CO
pro objekt, na který hráč odkázal při zadání příkazu definovaného přeonačováním — například objekt stromu při zadání příkazu ohmatej strom
(pokud byla pro ohmatej
deklarována vazba se 4. pádem) nebo objekt píšťaly při zadání pískej na píšťalu
(pokud byla pro pískej
deklarována vazba s předložkou „na“ a 4. pádem). Celkově tedy jsou pro pseudoklauzury k dispozici tyto objektové zkratky:
OBJ_TO |
„this object“, tedy objekt, který byl změněn nebo přeonačen |
OBJ_TP |
„this player“, tedy jednající objekt (hráč nebo nehráčská bytost) |
OBJ_CO |
„concerned object“, tedy objekt, který byl jmenován při zadání příkazu |
Zejména pomocí OBJ_CO
můžeme mnohem lépe začleňovat do kontextu hry hlášky, které po zadání přeonačeného příkazu má dostat sám hráč i jeho okolí. Například u příkazu plivej
, jak jsme jej definovali na konci minulé kapitoly, můžeme nyní zadat:
self:Plivej si podle libosti, ale ne na $ten(4,OBJ_CO)!
others:$Ten(1,OBJ_TP) se $dan(pokusil,OBJ_TP) plivnout na $ten(4,OBJ_CO), ale
$ten(1,OBJ_CO) se na $nej(4,OBJ_TP) $dan(podíval,OBJ_CO) tak přísně, že si to
$ten(1,OBJ_TP) $dan(rozmyslel,OBJ_TP).
Úkoly
editovatPovinné
editovat- Přeonačte nějaký objekt za použití efektu
wait
. - Vyzkoušejte si pseudoklauzury při přeonačování aspoň jednou v hlášce vysílané jednajícímu (akce
self
) a aspoň jednou v hlášce vysílané okolí (akceothers
). - Vyzkoušejte si v pseudoklauzurách použití
OBJ_TP
,OBJ_TO
iOBJ_CO
.
Dobrovolné
editovat- Přeonačte nějaký objekt tak, aby jedna z jeho standardních smyslových vlastností (popis, zápach, zvuk, povrch) pro prozkoumávajícího zůstala nezměněna, ale pro okolí zjevila děj expresivně zkomolený. (Například topinka, která při očichání vrací hlášku
Topinka je cítit česnekem.
, bude vracet nadále hláškuTopinka je cítit česnekem.
, ale do okolí místo standardníhoVšudybud očichává topinku.
vyšleVšudybud se naklonil nad topinku, vyvalil oči a začal dávit.
.)
- Přeonačte nějaký objekt tak, aby jedna z jeho standardních smyslových vlastností při prozkoumání pro okolí vydala standardní hlášku, ale prozkoumávajícímu sdělila nějakou tajnou zprávu. (Například stůl, který při ohmatání okolí ohlásí
Všudybud ohmatává stůl.
, ale hráči samotnému sdělí:Ohmatáváš stůl, a při tom si všimneš, že v jeho desce je Braillovým písmem vyryta zpráva: Ve dvoře na sever odtud je zakopán poklad.
)
- Standardní příkazy pro pohyb do světových stran není možno přeonačit, nestandardně pojmenované průchody však ano. Najděte místnost s nestandardně pojmenovaným průchodem a překryjte jej pomocí příkazu
přeonač
.
Pomocné stránky
editovatPoznámky
editovat- ↑ Současná verze příkazu
přeonač
povoluje jen jednoslovnou předložku, která musí následovat hned po slovese a po níž musí hned následovat pojmenování objektu v příslušném pádě. Za pojmenováním objektu sice mohou následovat další slova, ale nebere se na ně žádný zřetel. - ↑ Ve druhém případě je možno zadat středníky též dva, tedy napsat do zadání i onu prázdnou předložku, ale tím si to nemusíme komplikovat.