Voľajaký škriatok zapríčinil že sa tretia časť stratila a nebola zverejnená. Pri zmene designu som si všimol že je stále ako koncept. Takže po dvoch rokoch Budiž život…
Zmeny v priestore, pohyby objektov a rôzne reakcie na hráčove činy už vyžadujú náročnejšie skriptovanie. Najjednoduchšie to bude ukázať si to na príkladoch.
Položenie peňazí v taxíku:
– zničí predmet
– umožní opustiť taxík (vypne #leave akciu)
– zmení popis iného predmetu
{ #objectid=obj_penize; #preset=predmet; #name=peníze; #description=Jedna zmuchlaná stokoruna.; #location=#you; #put={ #printLn actionTaxikář se na peníze lačně vrhl.; #note zlikvidovat peniaze, zmenit popis taxikara, vypnut akciu pri snahe opustit taxik; #object[obj_penize].#life=#false; ##object[obj_taxikar].#description=Taxikář spokojeně bručí a čeká, až vystoupíš.; #room[room_taxik].#leave=#null; }; }
Interpreter kvôli zjednodušeniu všetko prevádza na malé písmená. Niektoré veci dokáže rozoznať ako napríklad #print, ak sa však robí lowerCase aj tam kde to nie je žiadané dá sa to vypnúť zdvojením ##.
Viacnásobné skúmanie koša.
{ #objectid=obj_kos; #preset=dekoracia; #name=koš; #description=V koši jsi něco našel.; #location=room_parcik; #examine={ #if #object[$rom_exec_owner].#countOfExamination=1; #object[obj_salam].#found=#true; ##object[obj_kos].#description=Objevil jsi v něm hromadu papírů.; #elseif #object[$rom_exec_owner].#countOfExamination=2; #object[obj_papir].#found=#true; ##object[obj_kos].#description=Koš je úplně prázdný.; #object[obj_kos].#examine=#null; #endif; }; #nonportable=#false; $text_takeVerifyFail=; #takeVerify={ #printLn badactionKoš je příliš těžký.; #return #false; }; }
V #examine je definovaná akcia, ktorú spustí preskúmanie predmetu. Premenná $rom_exec_owner obsahuje ID majiteľa komu patrí akcia. V Tomto prípade je to priamo ID objektu, rovnaký efekt by malo #object[obj_kos]. Počet ktorý nás zaujíma obsahuje #countOfExamination. Vypíše sa popis objektu, ktorý sa následne zmení. Určite by to šlo napísať čitateľnejšie. Ide skôr o príklad možností nie o to najkrajšie riešenie.
Za zmienku stojí akcia #takeVerify sa zavolá pri pokuse o zdvihnutie a návratová hodnota zabezpečí že sa to nepodarí. Globálny text pre zlyhanie sa prepíše/vypne $text_takeVerifyFail=; Predmet ktorý sa nedá zobrať by sa dal dosiahnuť aj cez cez #nonportable=#true;.
Ďalší zaujímavý objekt je salám, ktorý pri položení na správnom mieste modifikuje objekt. Pridáva mu prídavné mená.
{ #objectid=obj_salam; ... #put={ #if #object[$rom_exec_owner].#location==room_placek_2; #object[$rom_exec_owner].#life=#false; #printLn actionPsisko skočilo po salámu a v mžiku jej sežralo.; ##object[obj_pes].#description=Pes je nažraný a už na tebe nevrčí.; #object[obj_pes].#adjectives.#clear; #object[obj_pes].#adjectives.#add=nažraného; #object[obj_pes].#adjectives.#add=velkého; #object[obj_pes].$hlad=#false; #room[room_pred_vchodem].#enterVerify=#null; #endif; }; ... }
Detekcia hráčovej pozície sa používa pri ďalších peniazoch.
{ #objectid=obj_prachy; ... #put={ #if #object[#you].#location==room_predsin; ... #object[obj_vedouci].$triezvy=#false; ... #endif; }; ... }
Druhá možnosť by bola premenná $rom_your_position. Je tu zároveň ukázané použitie premennej $triezvy v objekte.
Všetky ostatné objekty sú už len varianty toho istého. Či už ide o otvorenie, zatvorenie, oblečenie, zbieranie či položenie predmetu.
Za zmienku stojí definovanie nového príkazu inštaluj ktorý je v bloku #commands;. Jeho použitie spúšťa skript #actionid=newcommand_instaluj;. Skript si kontroluje či bol zadaný so správnym predmetom.
#if $rom_exec_commandline_count_of_primary_objects!=1;#note nebolo zadane co instalovat; #printLn Nelze provést.; #return; #endif; #if $rom_exec_commandline_primary_objects[1]!=obj_likvidator;#note zly predmet chces instalovat; #printLn Nelze provést.; #return; #endif;
Následne si skript skontroluje požadovanú polohy a či ide o prvú inštaláciu.
Ďalšia zaujímavá možnosť na oživenie sveta sú takzvané thready. Ide o skripty ktoré sa spúšťajú na pozadí a je možné ich načasovať na základe počtu zadaných príkazov, na základe počtu krokov alebo na základe reálneho času. Po úspešnej inštalácii likvidátora sú dva spustené.
#threadid=thread_likvidator_cas; #note kazdych 6 sekund znizuje pocitadlo do spustenia likvidacie (zacina na 20); #threadid=thread_likvidator_prikaz; #note kazdy zadany prikaz znizuje pocitadlo do spustenia likvidacie (zacina na 20);
Odporúčam preštudovať kompletný zdrojový kód Pomsty!. Dosť odpovedí sa dá nájsť aj na txtwiki.pohroma.de.