17. Říjen 2017 - 19:01

Poslední příspěvky

Stran: [1] 2 3 ... 10
1
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od gaspoda kdy 16. Říjen 2017 - 20:36 »
Napadá mě jak byla vygenerována dokumentace, vím, že např. u Javy nebo PHP lze vygenerovat dokumentaci z komentářů, předpokládám správně, že webová Library reference vznikla podobně?

Ano, přesně tak, referenční příručka je generovaná z komentářů v knihovně.

Zdálo by se tedy a někteří diskutující programátoři jsou toho názoru, že učit se staré C je už přežitek stejně jako Pascal, na druhou stranu pokud chci jít do hloubky, bude lépe se věnovat právě starému C a teprve poté C++, cítím, že jedině tak mohu programování opravdu do hloubky pochopit, viz Tvůj názor na prvotní výuku pomocí skriptovacích jazyků. Jen nevím, zda to pro mě nebude trochu obtížné, když se nyní snažím pochopit objektový model a budu se vracet ke strukturovanému, když se ovšem dívám na C++, není to čistě objektový jazyk a některé konstrukce jsou převzané z C, tak to snad půjde.

Abych to upřesnil, můj názor se týkal především skriptovacích jazyků v prostředí webového programování, které  je natolik specifickou doménou, že neposkytuje dobré možnosti pro pochopení základů. Mezi C a C++ bych nutně dělicí čáru nedělal, pochopit OOP je přirozenou součástí. Když budeš o C++ uvažovat tak, že je to Cčko s objektama a pár drobnostma navíc, tak to sice nebude úplně přesné, ale to nevadí. Prostě když se ti bude na něco hodit udělat třídu, tak udělej, když postačí procedurální kód, tak taky dobře.

U lana a provazu mě první slovo napadne přivaž/odvaž, nikoliv připevni, přidal jsem jej tedy do souboru cs_cz.t z aktuální verze překladu, tam i v budoucnu budu dávat synonyma. Společně s aktuálním zdrojákem a průchodem hrou jej zasílám v příloze, třeba Ti cokoliv z toho pomůže u tvorbě dalších verzí.

Jo, synonyma jsem si u sebe přidal. Ale obecně to není správný  způsob, TADS je udělán tak, abys nikdy nemusel do knihoven zasahovat. Cokoliv z knihovny můžeš změnit ve svém vlastním kódu hry. Kdyby ses podíval do zdrojáků Základny, tak podobné změny tam jsou soustředěné v souboru componentMods.t. Všimni si, že každou knihovní třídu můžeš změnit pomocí klíčového slova modify či replace.

A třeba přidání nějakých synonym se dá udělat jednoduše tím, že si patřičnou VerbRule napíšeš u sebe. Buď přidáš další VerbRule ke stejné akci, jako jsem přidával slovo 'bodni' jako synonymum AttachTo v roomControl.t a nebo můžeš existující VerbRule nahradit pomocí klíčového slova replace. Tak jsem třeba v souboru s počeštěním spelling correctoru nahrazoval původní anglické příkazy.

Jo a dej si pozor, máš tam provaz.moveinto(studna), ale mělo by to být s velkým písmenkem moveInto. Při překladu na to dostaneš upozornění, chce ho to číst.
2
Sharp MZ-800 a ostatní / Re: (Budoucí) nová textovka pro Sharp MZ-800
« Poslední příspěvek od vaclavpe kdy 16. Říjen 2017 - 17:31 »
Párkrát jsem se k tomu vrátil, takže menší pokroky po obsahové stránce se občas dějou. Až budu mít "scénář" vymyšlený, začnu teprve s implementací, takže žádné dílčí verze už se tu asi neobjeví. K dispozici bude až (snad odladěný) výsledek a bude to na 99% hotové letos :).

Ahoj mope, tak jak to s tou textovkou vypadá ? Font pěkný, klapání taky fajn, jen hra ničemu zatím nerozumí...
3
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od Kroužící orel kdy 16. Říjen 2017 - 11:34 »
1. Přímý a nepřímý objekt

Konečně se zase dostávám k programování, krásné počasí o víkendu jsme celé projezdili. Paráda, teď už je mi
konečně věta we "leave that to the direct object" jasná, s přímými a nepřímými objekty se zde aktivně setkávám právě až u pochodně, Ericův manuál studuji postupně, vidím, že o nich píše v sekci Actions a právě u třídy Attachable, o které se zmíním později. Metodu iobjFor(BurnWith) jsem využil u křesadla, vyzkoušel jsem si i dobjFor(BurnWith) u pochodně, kterou jsem nakonec zakomentoval, k tomuto řešení bych se přiklonil v případě, že bych chtěl řešit její postupné vyhasínání, čímž u Exotera hráče trápit zatím nechci. Vidím, že jsi studoval také Inform, ten jsem zatím nezkoušel, snad časem, ovšem vypadá to, že TADS je tak komplexní, že jeho možnosti ani nebudu schopen využít. Na ten kafovak u Borise se juknu do Tvých zdrojáků, ohledně PreferredIobj není samozřejmě v Learning TADS 3 ani slovo, je mi jasné, že jsi jej potřeboval vytvořit sám při přípravě překladu.

2. Knihovna, hlavičkové soubory, zdrojáky a historie TADS

Podíval jsem se na adresářovou strukturu frobtadsu, nyní je to krásně vidět, hlavičkové soubory vidím v /usr/share/frobtads/tads3/include, vidím, že i u nich existuje vnořené inkludy, např. hned ten první bignum.h inkluduje systype.h . A na stejné úrovni adrsář /lib vidím zdrojáky s příponou .t, jasně, zde je ten obrovský thing.t, objekty, eventy a v neposlední řadě knihovna adv3.h, o které jsme se bavili minule. Napadá mě jak byla vygenerována dokumentace, vím, že např. u Javy nebo PHP lze vygenerovat dokumentaci z komentářů, předpokládám správně, že webová Library reference vznikla podobně?

Dívám se, že zde mám nainstalovanou také starší verzi TADS2 s mnohem skromnější strukturou, jedná se krom dokumentace jen o 3 soubory:
/usr/share/frobtads/tads2/adv.t
/usr/share/frobtads/tads2/gameinfo.t
/usr/share/frobtads/tads2/std.t

jak vidno, posun ve třetí verzi a tedy i složitost, je obrovský.

Právě to mě nejvíce láká, časem díky znalosti jazyka C budu schopen zkoumat tyto soubory a chápat, o čem jsou a jak linux opravdu funguje. Teď se dívám na wikipedii, TADS2 byl psán nebo spíše jeho syntaxe vycházela z C a trochu z Pascalu, zatímco TADS3 je úplně jiný objektový model vycházející z C++ a z Javy plus využití VM, o tom píšeš i Ty ve svém manuálu.

Zdálo by se tedy a někteří diskutující programátoři jsou toho názoru, že učit se staré C je už přežitek stejně jako Pascal, na druhou stranu pokud chci jít do hloubky, bude lépe se věnovat právě starému C a teprve poté C++, cítím, že jedině tak mohu programování opravdu do hloubky pochopit, viz Tvůj názor na prvotní výuku pomocí skriptovacích jazyků. Jen nevím, zda to pro mě nebude trochu obtížné, když se nyní snažím pochopit objektový model a budu se vracet ke strukturovanému, když se ovšem dívám na C++, není to čistě objektový jazyk a některé konstrukce jsou převzané z C, tak to snad půjde. Pascal, i když jeho implementace FreePascal a Lazarus už je objektová, mi dnes asi nic nedá a skutečné využití pro mě nevidím.

3. Attachable a malé rozšíření překladu

Pečlivě jsem prozkoumal popis této třídy v Learning TADS3, T3TourGuide, Tvůj překlad a také knihovnu. A vypadá to, že hurá, pečlivost se vyplatila, vytvořil jsem objekt studna, ke které pomocí metody canAttachTo(obj) lze přivázat provaz. U provazu jsem s definicí jako Attachable pohořel, to jsem ale očekával, manuály popisují, že typický problém, kdy jej přivázaný táhnu sebou celou mapou není tak jednoduché řešit. Napadlo mě použít NearbyAttachable, který tuto bolístku zvládá, nyní vše funguje jak má. U lana a provazu mě první slovo napadne přivaž/odvaž, nikoliv připevni, přidal jsem jej tedy do souboru cs_cz.t z aktuální verze překladu, tam i v budoucnu budu dávat synonyma. Společně s aktuálním zdrojákem a průchodem hrou jej zasílám v příloze, třeba Ti cokoliv z toho pomůže u tvorbě dalších verzí.

Ukončení hry sebráním 4 diamantů už naprogramovat nebude problém, toto popisuje i manuál, nyní musím vyřešit snad již poslední bolístku, což jsou boje se strážcem, drakem a psem. Tady jsem dříve také zuřivě hledal na internetu, teď znovu prozkoumám knihovnu, pokusím se najít obecnou formulaci a vymyslet řešení, bude to podobné jako Tvůj příklad s pochodní a křesadlem. Začíná mě to stále více bavit, což je přesně to, co potřebuji.

4. Nová verze překladu

A vidím, že jsi zveřejnil novou verzi překladu, vše jsem vyzkoušel. Pokud vím, nic kromě souboru cs_cz.t jsem neupravoval a používám skutečně verzi 3.1.3, s tou jsem také před lety začínal. Nyní již je pojem křesadlo(lit) minulostí, tehdy jsem chybně definoval jeho metodu, pochodeň skutečně svítí jak je vidět v přiloženém transskriptu hry.

Zkusil jsem ještě jednou starší verzi definice křesadla:
+ kresadlo : FireSource, Candle 'křesadlo/křesadla/křesadlu/křesadlem' 'křesadlo' *4
a po jeho zapálení je vidět:
 Neseš šperhák, pochodeň (svítí) a křesadlo (svítí).

I tak je tedy vše v pořádku, je ale samozřejmě možné, že jsem si s překladem hrál více, než je zdrávo a upravil něco, co jsem neměl. 
4
Nové textové hry / Dangerous Days by Dave de Sade
« Poslední příspěvek od pedromagician kdy 16. Říjen 2017 - 09:02 »
Aby sa nezabudlo, Dave vytvoril textovku/book na motivy Blade Runnera
https://writer.inklestudios.com/stories/99d5
5
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od gaspoda kdy 14. Říjen 2017 - 21:10 »
Zveřejnil jsem poslední verzi knihovny, kterou mám. Je tam jen pár drobných oprav. To s tím (lit) nevím, já když to vyzkouším u sebe se zdrojákem, který jsi přiložil, tak mi to v inventáři normáně česky píše, že pochodeň (svítí). Nevrtal ses v knihovně sám? Nebo nemáš nějakou jinou verzi TADSu, než já? Já mám normálně TADS 3.1.3, to by měla být poslední zveřejněná verze.
6
Nové textové hry / Re: Temné noci Toferunu
« Poslední příspěvek od thoorin kdy 13. Říjen 2017 - 20:16 »
Ahoj Thoorine, vypadá to zajímavě a tajemně, určitě díky za tip & podívám se na to. Chce to asi více času, jak jsem tak projížděl ty stránky, ale budou dlouhé zimní večery  ;)

Děkuji! Ještě je na hře skutečně hodně práce, nejvíce časově náročný mi asi přijde překlad do angličtiny. Každopádně pořád postupuji dál a den ode dne jsem blíže dokončení hry. :-)
7
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od gaspoda kdy 12. Říjen 2017 - 23:23 »
1. Křesadlo a pochodeň
Nádherně vysvětleno, právě se dívám na mix-in třídu FireSource, která má jedinou podtřídu Matchstick a jedinou metodu iobjFor(BurnWith).  A pokud si třídu rozkliknu odkazem 1895, skutečně vidím „We don't provide any action handling - we leave that to the direct object.“ - tady autor přímo nabádá, abych si odvozený objekt upravil, přesně jak píšeš.

To není narážka na odvozený objekt, ale na něco trochu jiného. TADS je založený na objektově orientovaném programování a to znamená, že se k herním objektům píší různé metody, které něco dělají. K akcím, které používají dva objekty (přímý a nepřímý), jako zapal koho/co kým/čím, se váží hned dva objekty ve dvou rolích. Přímý objekt, který je manipulován (pochodeň) a nepřímý, který slouží jako pomůcka (křesadlo). Výsledek takové akce se dá naprogramovat na dvou místech. Buď v metodě dobjFor(BurnWith) u pochodně nebo v iobjFor(BurnWith) křesadla.

Na kterém místě reakci naprogramovat je na tvém uvážení. Je to zpravidla jedno. V tom se objektový přístup trochu liší od třeba Informu, který je založen na tabulkách s pravidly. Tam se prostě přidá pravidlo a nemusí se přemýšlet, ke kterému objektu ho přilepit, prostě se hodí na jednu společnou hromadu všech pravidel.

To, co se v manuálu píše tedy říká, že akce bude naprogramovaná u přímého objektu a tady u nepřímého tedy není nic.

S „PreferredIobj“ jsem se zatím nesetkal nebo si jej nevšiml, vidím, že jej používáš ve svém překladu a konkrétně v demonstraci Attachable:

Parser sám neumí poznat, co je přímý a co nepřímý objekt u akcí, které nemají předložku, např. můžeš napsat "podej kafovak Borisovi" i "podej Borisovi kafovak". Proto třída Actor je označkovaná jako PreferredIobj a podle toho, když parser vezme objekty obráceně, tak je před dalším zpracováním prohodím. Je to právě ta situace, kdy by hra řekla, že kafovaku nemůžeš Borise podat. Značka říká, který z objektů je nepřímý, aby se to prohodilo do správného pořadí. U kací s postavou je to automaticky v knihovně, ale u některých akcí nebo nových akcí se to nedá dopředu určit a tak to musí udělat autor hry. Co ještě musím udělat je opačnou variantu, PreferredDobj, protože to u některých akcí je potřeba.

Nyní vše v pochodní funguje, viz soubor Exoter_v2.t, jediný problém, který zatím vidím, je příkaz:

>zapal pochoden kresadlem
To není něco, co by mohlo hořet.

ale

>zapal pochoden
Čím ji chceš zapálit?

>kresadlem
Zapaluješ pochodeň.

funguje parádně, zatím to tak nechám, tyhle detaily si nechám na později.

Jo, já se podívám, jaká verze knihovny je zveřejněná a vyzkouším to.

Teď když už se s Library reference manual více kamarádím a ještě jednou si prohlížím třídu FueledLightSource, napadá mě otázka, co znamená a k čemu slouží soubor  extras.t, na jehož definici se dívám?

Knihovna je poměrně velká, čítá téměř 100 tis. řádek a proto je rozdělená do většího množství souborů, je jich kolem čtyřiceti. Snaha je, aby žádný nebyl extrémně velký. Některé třídy, jako např. Thing, které jsou základem všeho, tak jsou už tak dost velké. Zabírají jeden celý velký soubor jen s pár drobnostma navíc (thing.t). Všechny objekty, které od Thing dědí, jsou rozdělené do několika souborů. Většinu najdeš v objects.t (dveře, kontejnery a kde co), ale pár jich je i v souboru extras.t a tam jsou takové ty exotičtější, jako komplexní kontejnery, baťoh, klíč a další. Jsou to věci, které začínající programátor asi hned nepoužije a myslím, že je to taková sbírka kódu, který naprogramovali (nebo navrhli) pro TADS vesměs jiní lidé, když hledali, čím knihovnu ještě obohatit. Myslím, že nebyly součástí TADSu od úplného počátku.

Jedná se tedy o hlavičkový soubor umístěný v podadresáři lib a když rozkliknu odkaz Source file, mimo celého bohatě komentovaného dokumentu vidím, že na začátku obsahuje direktivu:

#include "adv3.h"

Hlavičkové soubory jsou ty s příponou .h a normální zdrojáky mají koncovku .t. Hlavičkový soubor je zjednodušeně něco, co jen učí kompilátor rozumět zdrojovému kódu v .t souboru. Proto se inkludují do každého .t souboru na začátku. Nic co je uvedeno v hlavičkovém souboru se nepřeloží do výsledné hry, nevznikne žádný program. Jsou v nich tedy hlavně definice maker, šablon atp., ale žádný příkaz, žádná proměnná.
8
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od Kroužící orel kdy 12. Říjen 2017 - 12:28 »
... ještě ty přílohy...
9
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od Kroužící orel kdy 12. Říjen 2017 - 12:27 »
1. Křesadlo a pochodeň
Nádherně vysvětleno, právě se dívám na mix-in třídu FireSource, která má jedinou podtřídu Matchstick a jedinou metodu iobjFor(BurnWith).  A pokud si třídu rozkliknu odkazem 1895, skutečně vidím „We don't provide any action handling - we leave that to the direct object.“ - tady autor přímo nabádá, abych si odvozený objekt upravil, přesně jak píšeš.

S „PreferredIobj“ jsem se zatím nesetkal nebo si jej nevšiml, vidím, že jej používáš ve svém překladu a konkrétně v demonstraci Attachable:

preferredIobj = nil
replace doActionMain()

Dívám se na třídu FueledLightSource, zde je jako jediná podtřída uvedena Candle. Direktivu getFuelLevel() { return fuelLevel; } jsem našel při rozkliknutí odkazu třídy i její podtřídy, odkaz extras.t 2079 i 2205.

Nyní vše v pochodní funguje, viz soubor Exoter_v2.t, jediný problém, který zatím vidím, je příkaz:

>zapal pochoden kresadlem
To není něco, co by mohlo hořet.

ale

>zapal pochoden
Čím ji chceš zapálit?

>kresadlem
Zapaluješ pochodeň.

funguje parádně, zatím to tak nechám, tyhle detaily si nechám na později.

Hledání ve třídách, vlastnostech, metodách apod. v knihovně už je mi jasné, teď se mi jen vše musí spojit dohromady, chápu, to chce čas, jo to vlastně „gró“ programování. Místo abych hledal v knihovně, snažil jsem se nalézt co nejvíce v příkladech, což je asi běžný postup programátorů začátečníků. Upřímně řečeno přes obrovský záběr TADSu jsem si ani neuvědomil, že tak triviální věc jako zapálení pochodně křesadlem, troudu ocílkou nebo obyčejné rozdělání ohně něčím jiným, než sirkami, zde není už jako hotové řešení, tady jsem dost ovlivněn našimi textovkami a příkazem použij – je ale jasné, že standardní knihovna bude popisovat jen obecné věci, vše obsáhnout nelze, chápu, že se s tím v budoucnu setkám i v C++ a jiných jazycích, asi proto existují knihovny rozšiřující, které se snaží nějakou konkrétní množinu problémů řešit. Na programátorovi je také to, aby tyto knihovny znal a ve svém projektu je uměl použít plus to, co jinde nenajde, dokončil sám, to mi stále více a více ukazuje praxe.

Teď když už se s Library reference manual více kamarádím a ještě jednou si prohlížím třídu FueledLightSource, napadá mě otázka, co znamená a k čemu slouží soubor  extras.t, na jehož definici se dívám? Když si přeložím popis „This module defines classes for specialized simulation objects. “, vidím, že se jedná o modul, který definuje třídy pro objekty specializující se na konkrétní simulaci. Jedná se tedy o hlavičkový soubor umístěný v podadresáři lib a když rozkliknu odkaz Source file, mimo celého bohatě komentovaného dokumentu vidím, že na začátku obsahuje direktivu:

#include "adv3.h"

To znamená, že odkazuje na standardní knihovnu adv3, okolo které se celý TADS točí, teď už mi to do sebe více zapadá.

Možná bude pro mě lepší, když budu více zkoumat Library reference manual a nejlépe zkoušet dostupné příklady, tak pochopím více, ostatně i Eveho manuál sem mnohokráte odkazuje. Definice místností a objektů je mi již víceméně jasná, rozhovory s NPC postavami si nechám na jindy, nyní mi jde hlavně o akce, o kterých píšeš i ve svém manuálu a k jejich definici potřebuji pořádně pochopit práci s metodami, o nic se, jak překpokládám, dozvím nejvíce zde. 

2. Nepřeložený řetězec "lit"
Ještě jednou jsem si zkusil projet moji původní verzi Exotera, zde se po zapálení pochodně křesadlem s tím, že jej definuji jako Matchstick, viz soubor Exoter_v1.t, objeví toto:

„Neseš šperhák, pochodeň (svítí) a křesadlo (lit).“

Následně jsem to samé zkusil po Tebou navrhované úpravě, viz soubor Exoter_v2.t:

Neseš šperhák, pochodeň (svítí) a křesadlo.

V souborech cs_cz.t a msg_neu.t je dle mého laického pohledu vše v pořádku, zde asi překladač k objektu Matchstick přiřadil chybný textový řetězec nebo je na místě, které jsem zatím nenalezl. Pokud budeš v budoucnu připravovat další verzi češtiny, prosím o kontrolu objektu Matchstick a přidání překladu, snad alespoň tímto svým testováním alespoň trochu pomohu k jeho zlepšení.

3. Knihovna Adv3lite a TADS Workbench
Moc děkuji za parádní popis této knihovny, chápu, proč lidi toužili po něčem jednodušším, upřímně řečeno jsem dle Tvého popisu nabyl dojmu, že TADS2 byl mnohem jednodušší na použití, než třetí verze, já jsem se setkal až s trojkou.
Sakra, nečekal jsem, že tato knihovna přidává i nové vlastnosti, na druhou stranu vidím, že dopadla podobně jako např. Wordpress nebo Nginx, původně štíhlé projekty vesele bobtnají a původní záměr mizí. I proto je mi velmi sympatická knihovna ncurses, mám rád jednoduché řádkové aplikace s rozhraním ála M602 nebo dosedit, které jsou určené k jediné konkrétní činnosti nebo mé oblíbené účetnictví Tichý – Ježek, které i po dvaceti letech zachovává stejné rozhraní a jen upravuje funkcionalitu, dnes podporuje i EET a existuje i snadný krok, jak jej plně integrovat do Linuxu.
Zatím jí tedy nechám na pokoji, pokud neexistuje překlad, není pro mě určena, takže se na ní podívám v budoucnu. Ta klasická mě stále více a více ohromuje tím, co vše dokáže, takové práce, kterou autoři věnují komunitě, si nesmírně vážím.
S tím Informem jsem si také trochu hrál, na root.cz vyšel i český článek tuším o dvou dílech, který základy popisuje, vypadá mnohem jednodušší, ale obávám se, že složitější problémy už nebude taková sranda realizovat a domnělá jednoduchost se rozplyne jak pára nad hrncem. Pro mě je tedy TADS výhodnější,  díky českému překladu a  především jako parádní příprava na C++.

Neodolal jsem a do google jsem zadal „TADS Workbench source“, napadlo mě, když je TADS otevřený, zda jsou i k WB k dispozici zdrojové kódy. V diskuzi:

https://www.intfiction.org/forum/viewtopic.php?f=10&t=4088

Jeden diskutující píše: „The Workbench source is available as part of the htmltads source release. It's all built directly on Win32 (no MFC or any other Microsoft class libraries are involved).“

Plus zde na github:

https://github.com/uliwitness/TADSWorkbench

Jsou k dispozici nějaké zdrojáky, zběženě jsem je prozkoumal a vypadá to, že jsou určeny pro MAC, ostatně pro něj je k dispozici i starší oficiální verze dostupná na stránkách.  Škoda, linuxový WB by byla paráda plus jak jsem minule psal ta verze ncurses/GTK/QT, jen ty zdrojáky mě zatím opravdu děsí, je jich nějak privela…
Takže zatím zůstanu u kombinace Frobtads/editor českého textu/WB ve Wine, sice trochu krkolomné, ale naštěstí funkční.

4. Lano a attachable obecně
Nyní po vyřešení pochodně bych se rád vrhnul na přivázání lana k temné studni a vše, co s tím souvisí. Využiji všechny dostupné znalosti, jak vidím, attachable je parádně popsaná v manuálu i v Library plus připravil jsi parádní demonstrační hru, pokusím se vše vyřešit sám, jedině tak se dostanu zase o krok dále.
10
Programování / Re: Seriál o programování textových her v TADS 3
« Poslední příspěvek od gaspoda kdy 9. Říjen 2017 - 19:36 »
...divím se, že není k nalezení možnost zapálit pochodeň křesadlem, že by něco takového žádný autor pro textovku nepotřeboval?

Ono těch různých možných kombinací je hodně, takže TADS nemůže postihnout úplně každý případ a proto dává k dispozici jen obecný rámec, který si musíš podle situace trochu přizpůsobit. Jak jsi asi zjistil, existuje mix-in třída FireSource, která představuje hořící objekt který může něco zapálit. To není úplně tvůj případ, protože chceš křesadlo, které může zapálit, ale samo o sobě nehoří. Nicméně je je docela dobrý nápad se podívat do knihovny na definici třídy FireSource, abys viděl, jak je udělaná. Je v ní akorát definice iobjFor(BurnWith), tedy nepřímého objektu akce zapal (přímý je ten, co bude zapálen a nepřímý ten, který slouží jako pomůcka zapálení).

Pojdme tedy udělat obyčejný objekt (Thing) a dát mu iobjFor(BurnWith), jen ho trochu zjednodušíme, aby křesadlo samo nehořelo. Pochodeň je vzata víceméně ze sample games. PreferredIobje je tam proto, že zapal nepoužívá předložky a tak je pro parser neodhadnutelné, co zapaluješ čím, tak si to sám prohodí tak, aby to dávalo smysl.

Kód: [Vybrat]
+ PreferredIobj, Thing 'křesadlo/křesadla/křesadlu/křesadlem' 'křesadlo' *4
    "Snad by se s ním dal rozdělat oheň. "

    iobjFor(BurnWith)
    {
        preCond = [objHeld]
        verify()
        {
            /* don't allow using me to light myself */
            if (gDobj == self)
                illogicalNow(&cannotBurnDobjWithMsg);

            nonObvious;
        }
    }
;

+ FireSource, Candle 'pochodeň/pochodně/pochodni/pochodní' 'pochodeň' *3
    desc()
    {
        if(isLit)
            "Hoří plápolavým plamenem<<if fuelLevel < 3>>, ale ten už začíná dohasínat<<end>>. ";
        else
            "Kdyby se Ti jí podařilo zapálit, jistě by vydávala hodně světla. ";
    }
    fuelLevel = 7
    brightnessOn = 2

    dobjFor(BurnWith)
    {
        check()
        {
            if(fuelLevel < 1)
                sayBurnedOut;
            else
                inherited;
        }
    }
;

Křesadlo se stále chová jako sirka, viz "Škrtnutím křesadla zapaluješ malý plamínek." Po zadání i se v inventáři objeví „křesadlo (lit)“, zde asi bude nepřeložený textový řetězec. Následně křesadlo dohoří stejně jako sirka v Sample games - LightFireSource.

Napadlo mě modifikovat jednu z metod objektu Matchstick tak, aby lépe odpovídal křesadlu - je tento mnou zamýšlený postup správný?

Matchstick je objekt, který můžeš zapálit sám o sobě, tj. zapálíš a hoří matchstick a od něj můžeš zapálit něco jiného, takže to moc neodpovídá. To (lit) u sebe nemám, možná jsem to někdy přeložil později a není to ve zveřejněné knihovně a nebo je to někde, kde nevím kde. Candle dědí z FueledLightSource, takže časem dohoří. Kdybys to chtěl odrušit, tak viz:

Kód: [Vybrat]
    /*
     *   If the light source can burn forever, simply return nil as the
     *   fuel level. 
     */
    getFuelLevel() { return fuelLevel; }

Rád bych se však alespoň zpočátku naučil knihovnu klasickou, protože výše popsané zjednodušení mi ve výuce programování určitě nepomůže. Dostupná dokumentace je dle mého názoru perfektní, to spíše já zatím ještě neumím dohledat všechny potřebné informace.

Adv3lite má na svědomí Eric Eve. Totiž ono to bylo tak, že po uvedení TADS 3 spousta lidí léta remcala, že to programování je moc těžké a nebyli ochotni přejít z TADS 2 dál. A vznikla taková pověra, že kdyby to programování bylo snazší, že by to umožnilo mnohem snadnější vstup do této oblasti těm, kteří pro domělou snadnost dávají přednost Informu a dalším systémům.

Mike Roberts zkoušel něco udělat, napsal nový trochu jednodušší parser nazvaný Mercury, ale neměl už moc času dotáhnout celou situaci až do stavu alternativní knihovny, která by byla obtížností někde mezi TADS 2 a 3. Eric se toho tehdy ujal a naprogramoval Adv3Lite. Původní idea byla odstranit některé ze složitějších vlastností, které knihovnu komplikují (postoje postav, simulování smyslů, hru v reálném čase, tisk řetězců přes žurnál atp.), ty totiž hodně znesnadňovaly orientaci a málo kdo je využil. Původní plán byl udělat hodně jednoduchou knihovnu, která by sloužila jako mezikrok pro programátory, než se pustí do plnohodnotné Adv3. Skutečnost však šla kousek dál, došlo k mohutné redukci, knihovna má o hodně menší počet tříd, ale zároveň i přidává některé nové vlasntosti, třeba scény, takže nakonec není ani zdaleka tak lite, jak se někteří původně domnívali a remcalové remaci dál...

No z hlediska našeho je hlavní problém v tom, že k ní není k dispozici překlad a nebude.
Stran: [1] 2 3 ... 10