22. Srpen 2017 - 03:19

Autor Téma: Seriál o programování textových her v TADS 3  (Přečteno 6763 krát)

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 100
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #60 kdy: 17. Květen 2017 - 09:28 »
Tady jsem našel diskuzi ohledně řešení přivazování provazu a také zajímavou definici akcí TAction – přesně tu bych využil při definici nové akce typu „přivaž“, „přepiluj“ apod., pokud jí dobře chápu. Také uvedené příklady dobjFor se hodí. Budu studovat a juknu se zase do Library reference a definici tříd a objektů

http://rec.arts.int-fiction.narkive.com/zp9ZA3sU/tads-3-attaching-problem

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 87
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #61 kdy: 19. Květen 2017 - 19:57 »
Zatím jsem nezvládnul použití lana, které potřebuji pro vstup do studny, bude to nějaká akce a jak píšeš, naprogramovat realisticky se chovající lano nebude jednoduché. Nikde v manuálech ani tutoriálech na webu jsem nenašel příklad s přivázáním lana, to by mi parádně pomohlo a ani v Základně podobná akce pokud vím není, takže zde budu ještě bádat. Oficielní manuály moc hezky popisují šplhání po skalách, škoda, že vynechali právě to lano.

Teď pár týdnů budu mít málo času, tak odpovídám po kouskách. Realistická lana patří k těm nejsložitějším věcem k simulování a já vlastně ani nevím, jak se lano v Exoterovi používá. Ale hodil jsem na web překlad jedné demonstrační hry Attachable třídy. Kdysi dávno jsem ji přeložil, ale byly tam po staru zadané názvy a slovníky objektů. Teď jsem ji oprášil a připravil k publikování, je na http://www.tads.cz/cs/demonstracni-hra.

Ten odkaz je super, dostala mě hlavně ta hláška ohledně suda v Geeks And Non-Geeks. Netušil jsem, že používáš i javovský Spring, tu už je asi jiná třída.

Né, nepoužívám, jen čtu Geek and Poke...

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 87
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #62 kdy: 21. Květen 2017 - 22:08 »
Pád z výšky do sena / na dlažbu – zde bude nějaká konstrukce if else. Napadlo mě použít:
 dobjFor(Enter) - method of ThroughPassage in travel.t[2618],
případně přesměrování, zatím jsem však nebyl úspěšný. Budu dále studovat nebo zkusím metodu jinou.

Možnosti a způsoby přesunů postav jsou docela rozsáhlé, spíš bys mohl použít v místnosti metodu enteringRoom, která tě informuje o vstupu postavy:
Kód: [Vybrat]
    enteringRoom(traveler)
    {
        if(traveler == me && nejake dalsi podminky)
        {
            "Něco... ";
        }
    }

V ní si otestuješ, o jakou postavu se jedná a jakékoliv jiné podmínky a něco uděláš. Pokud postavu nezabiješ, tak se výstupy zobrazí před rozhlédnutím v nové místnosti.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 100
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #63 kdy: 22. Květen 2017 - 08:17 »
Krásné ránko přeji,

paráda, hru Attachable jsem si stáhnul, binárka je v pohodě, jen zdroják attachment-20170519-1.zip bude asi poškozený, po rozbalení vidím jen prázdný adresář Attachable, můžu poprosit ještě jednou o nahrátí na server? Na řešení toho lana se moc těším, snad najdu inspiraci.

Taky mám teď spoustu práce, celý víkend koně a dnes kroužky s dcérenkou, vždy se ale alespoň o něco posunu dále. Se strážcem zatím ještě bojuju, budu dále zkoušet a podívám se na ten pád do sena - v místnosti sv_nadvori přidám metodu enteringRoom s podmínkami, zda je/není seno v místnosti, až se pohnu, dám sem výsledek.

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 87
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #64 kdy: 22. Květen 2017 - 20:18 »
Pardon, už je to spravené.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 100
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #65 kdy: 25. Květen 2017 - 12:16 »
Vrhnul jsem se na pád z výšky do kupky sena, přiznám se, že si nejsem jist, kde mám metodu enteringRoom(traveler) použít – zda ve druha_mistnost_vrchol_vez nebo v sv_nádvoří, u obou případů jsem nedosáhl kýženého výsledku. Ale po juknutí se do zdrojáků Heidi a Tvého Attachment mě napadlo ještě jedno, nevím zda ouplně správné systémové řešení:

druha_mistnost_vrchol_vez: Room 'Druhá místnost na vrcholu věže' 'do druhé místnosti na vrcholu věže'
    "Jsi v místnosti na vrcholu věže. \bMůžeš jít na východ, dolů. "
    east = mistnost_vrchol_vez
    down : TravelMessage
          {  ->sv_nadvori
              "Spadl jsi přímo doprostřed kupky sena, která ideálně ztlumila tvůj pád. "
                canTravelerPass(traveler) {return kupka_sena.isIn(sv_nadvori); }
              explainTravelBarrier(traveler)
         { "Zabil jsi se pádem z výšky. "; finishGameMsg(ftDeath, [finishOptionUndo] );}
    }
;

Pomocí metody  TravelMessage jsem dosáhl toho, že pokud se kupka sena nachází v sv_nadvori, hráči se nic nestane a v opačném případě zahyne přesně tak jako v Exoterovi.

Mimochodem teprve dalším studiem zdrojáků Heidi jsem se dozvěděl, že ve hře lze i křičet a tento křik může zanikat ve větru, to minimálně u předělávky a dalším pokračování Kroužícího orla musím využít. Opravdu bezva systém, líbí se mi čím dál tím více.
 
Na tomto místě jsem zjistil, že po smrti hráče hra vypisuje ZEMŘELO JSI. - u definice hráčovy postavy me však nemohu využít striktní definici rodu typu *1, setkal jsi se s tím také u tvorby Základny?

V místnosti se studnou jsem pomocí zdrojáku Attachment a výše uvedené kombinace  TravelMessage zkusil něco podobného, zatím ale bez kloudného výsledku:

jz_nadvori: Room 'Jihozápadní část nádvoří' 'do jihozápadní části nádvoří'
    "Stojíš na nádvoří. \bMůžeš jít na sever, na východ, na jih, dolů. "
    north = sz_nadvori
    east = jv_nadvori
    south = brana
    down : TravelMessage
          {  ->ve_studni
              "Sešplhal jsi dolů za pomoci přivázaného lana. "
//                canTravelerPass(traveler) {return provaz.moveinto(studna); }
        canTravelerPass(traveler) {!provaz.isConnectedTo(studna); }
              explainTravelBarrier(traveler)
         { "Studna je moc hlubová na to, abys do ní skočil jen tak. "; }
    }
;

+ studna : Attachable, Thing, Heavy 'studna' 'studna' *3
    @jz_nadvori
    "Hluboká studna, nyní však již zcela vyschlá. "
    specialDesc = "Je tu stará kamenná studna. "

    canAttachTo(obj) {return obj == provaz;}
    handleAttach (other)
    {   provaz.moveinto(studna);
       "Spustil jsi jej dolů. ";
     }

     gcName = 'studnu, studni, studna, studni, studnou'
     gcVocab = 'studnu/studni/studnou'
;

Také doprovodné hlášky zatím nejsou zrovna ideální:

>prozkoumej studnu
Hluboká studna, nyní však již zcela vyschlá.
Studna je připevněna k provazu.

>d
Je tu příliš velká tma, než abys vidělo na cestu.


Zde asi TravelMessage nepoužívám správně, zkusím si ještě jednou projet zdroják a v Library reference prozkoumat používané metody. Tak jako tak mi provaz zůstane po připevnění ke studni v ruce, takže zde budu muset upravit změnu stavu.

Každopádně uvázání provazu a boj se strážcem/drakem/psem jsou poslední dva zádrhele, až tyhle rozseknu, tvorba se bude chýlit ke konci.

gaspoda

  • Mladší člen
  • **
  • Příspěvků: 87
    • Zobrazit profil
Re: Seriál o programování textových her v TADS 3
« Odpověď #66 kdy: 25. Květen 2017 - 12:36 »
Abych nehádal, prosím napiš mi, jak má vypadat ideální výstup ze hry s provazem i kupkou sena, tj. příkazy hráče a odpovědi hry na ně.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 100
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #67 kdy: 25. Květen 2017 - 12:57 »
Sakra, ty jsi ale rychlík, ještě jsem zapomněl dát sem aktuální zdroják.

Projel jsem celou současnou hru tak, že napoprvé spadnu do sena, pak zkouším vlézt do studny pomocí provazu, seberu seno a druhým pádem na dlažbu hra končí.

A ještě mě napadlo upravit Tebou přeložené příkazy. U studny mohu použít "připevni provaz", ale ne už "přivaž provaz". Upravil jsem soubor cs_cz.t v adresáři /usr/share/frobtads/tads3/lib/adv3/cs_cz i v tom samém pod Wine a hurá, možnost "přivaž" už interpretr zná. Takže pokud se nepletu, mělo by zafungovat přidání slova "přepiluj" tam, kde máš uvedeno odemkni, to zkusím příště.

Vše potřebné zasílám v příloze. Teď za chvíli frčím pro dcérenku do školky, během zítřka nebo nejpozději o víkendu se zase dostanu k Exoterovi, baví mě to čím dál více.

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 100
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #68 kdy: 26. Květen 2017 - 08:55 »
Dnes jsem ještě jednou v klidu juknul na soubory, které jsem Ti zaslal a jak vidno, spěch není to pravé, zase je tu problém s kódováním. Nyní posílám následující soubory v jednom archivu:

Pruchod_Exoter.txt a Pruchod_Exoter.pdf - to je přesný postup zkopírovaný z hraní hry ve Win verzi TADS3 Interpretr
Auto 318.cmd - nahraný průchozí skript pod Linuxem s nečitelným kódováním, ve Win verzi Workbenche plně funční
cs_cz.t - moje malá úprava s přivázáním provazu

Se senem je tedy vše OK, nyní se pokusím zprovoznit jeho spálení pomocí zapálené pochodně plus bude asi vhodnější, aby jej hráč nemohl sebrat. Budu ještě laborovat ohledně lana a studny. Až bude hra hotová, vrhnul bych se na doplnění souboru cs_cz.t a doplnil další slova, která se mi zdají být užitečná, pokud budeš souhlasit a je-li to správný postup, můžeme jej dát i na Tvůj web jako novou verzi, alespoň takto málo budu schopen i já pomoci v překladu TADSu.

Krásný víkend a modrou oblohu nad hlavou přeje

Orel

Kroužící orel

  • Plný člen
  • ***
  • Příspěvků: 100
    • Zobrazit profil
    • Šťastný statek
Re: Seriál o programování textových her v TADS 3
« Odpověď #69 kdy: 31. Květen 2017 - 09:40 »
Tak se zase dostávám k tvorbě, lano a strážce zatím nechám stranou a zaměřil jsem se na zapálení pochodně. Prozkoumal jsem v Library - extras.t třídu class Candle: FueledLightSource a pečlivě přečetl práci s baterkou v Heidi a především Tour Guide stranu 102 - Light and Fire. Parádně je tu popsána klasická svítilna na baterky jako OpenableContainer, olejová lampa a informace o tom, že pochodeň mohu definovat podle Candle & FireSource. Zkoušel jsem všechny příklady, posílám aktuální zdroják, kde mám na str. 181 pochodeň a str. 247 křesadlo. Ve všech případech dostávám po příkazu zapal pochodeň hlášku "{Tím iobj} nemůžeš nic zapálit.".

Až budeš mít čas, zkus se prosím juknout i na pochodeň, zatím budu dále zkoumat.