JARDARŮV PŘÍKLAD POUŽITÍ PROMĚNNÝCH VE FGBE

Optimalizováno pro rozlišení min. 1024x768, verze 1.2 (pro novější verze kontrolujte na http://textovky.webpark.cz sekci vývoj)

Předpokládám, že máte pořádně prostudovaný manuál FGBE.
V první části návodu zopakuju obecné informace o proměnných a podmínkách. Jejich použití ukážu na jednoduchých (někdy i na první pohled nesmyslných) příkladech. Druhá část návodu je věnována konkrétním řešení daných situací.

Velmi důležitá poznámka: Zapisujte si nejlépe do samostatného souboru každou proměnnou, kterou jste použili a k jakému účelu. Snáze se pak hledají případné chyby.

1. část - podmínky a proměnné
2. část - řešení situací
3. část - složité podmínky a "bitové proměnné"
4. část - podmínky, cykly a "proměnná v proměnné"


1. ČÁST - PODMÍNKY A PROMĚNNÉ

Proměnnou můžeme použít např. pro zaznamenání nějaké "abstraktní" události (hráč něco objevil, slyšel atd.), hráč si vybral určité povolání apod. Možností použití je spoustu. Pomocí zaznamenaných proměnných pak můžeme reagovat na hráčovu akci (akce -> reakce).

Hodnota uložená v proměnné v ní zůstane až do konce hry, pokud ji nezměníte. Všechny proměnné mají při spuštění nové hry nulovou hodnotu.

Základy použítí podmínek a proměnných

Příklad: hráč navštívil poprvé kováře, promluvil s ním a dozvěděl se jeho jméno. Při další návštěvě u kováře změníme text.
<10>
<text obsah="Vešel jsi do kovárny.">
[promenna 1="1"] další vstupy <text obsah="Vidíš Helgona.">tento text se zobrazí, je-li proměnná 1 rovna 1 ... [/] [promenna 1="0"] první vstup <text obsah="Vidíš kováře.">text se zobrazí, je-li proměnná 1 rovna 0 ... [/] <promenna 1="1">nastavení proměnné 1. Musí být až za podmínkami! ...
Nastavení proměnné musí být až za rozhodovacími pomínkami. FGBE vykonává jednotlivé tagy postupně za sebou. Pokud bychom proměnnou nastavili hned na začátku, podmínka "první vstup" by nikdy nebyla splněná.

Příklad: Hráč má na začátku možnost si zvolit speciální schopnost obchodník nebo gambler. Když si vybere obchodníka, zvýší se jeho schopnost smlouvání v obchodech a dostane za věci lepší cenu. Pokud si vybere gamblera, bude mu více nakloněná štěstěna.
<1>
<text obsah="Výběr schopnosti.">
<menu odkaz="2" popis="Obchodník">
<menu odkaz="3" popis="Gambler">
<2>
<text obsah="Zvolil jsi obchodník. Tvá schopnost obchodování je vyšší.">
<promenna 1="1">
<menu odkaz="4" popis="Dál">
<3>
<text obsah="Zvolil jsi gambler. Tvé štěstí je vyšší.">
<promenna 1="2">
<menu odkaz="4" popis="Dál">
...
Na začátku byla provedena volba schopnosti. Pro pozdější určení, co si hráč zvolil, jsem použil proměnnou 1. Když si vybral obchodníka, do proměnné se uložila hodnota 1. Když si vybral gamblera, do proměnné se uložila hodnota 2.
Nyní hráč dorazil do obchodu a chce prodat získané věci.
[promenna 1="1"] = obchodník
  <prodej typ="predmety" procent="50"> vykoná se, pokud si hráč vybral obchodníka
[/]
[promenna 1="2"] = gambler
  <prodej typ="predmety" procent="30"> vykoná se, pokud si hráč vybral gamblera
[/]
Když si hráč vybral obchodníka, dostane za prodávané věci 50 procent z nákupní ceny. Když si zvolil gamblera, dostane jen 30 procent.
Teď opačně něco ke štěstí.
<text obsah="Jdeš po cestě a nedáváš pozor. Zakopnul jsi o kámen.">
[promenna 1="1"] = obchodník <text obsah="Při pádu ses poranil. Na cestě leží vyvrácený kámen."> vykoná se, pokud si hráč vybral obchodníka <zivoty minus="2"> [/] [promenna 1="2"] = gambler <text obsah="Pod vyvráceným kamenem jsi našel 5 zlatých."> vykoná se, pokud si hráč vybral gamblera <penize plus="5"> [/]
Když si hráč zvolil gamblera, měl štěstí, nic se mu nestalo a navíc našel 5 zlatých. Když si hráč zvolil obchodníka, zranil se a nic nenašel.

Použití stavu/vlastnosti postavy v podmínkách

Podle vlastnosti postavy potřebujeme provést nějakou akci.

Příklad: vykopnutí dveří, závisí na síle postavy, jestli se to podaří.
[sila 111<"5"]
<text obsah="Dveře tvému kopu odolaly."> = síla je menší než 5, nepovede se to ... [/] [sila 1>"4"] <text obsah="Kopem jsi rozrazil dveře."> = síla je větší než 4, povede se to ... [/]
Na hodnotě čísla v první části podmínky (před znakem porovnání) nezáleží, může tam být jakékoliv číslo. Doporučuju si zvyknout na jednu hodnotu, nejlépe 1 a tu pak používat stále. Číslo tam být musí pro zachování kompatibility s ostatními typy podmínek.

Příklad: Podle typu zbraně, kterou postava má v ruce, se provede odlišná akce.
[cislozbrane 1="1"]
Postava má v ruce zbraň číslo 1 <text obsah="Ve světle zbraně jdeš širokou chodbou na jih, na stěnách jsou různé výjevy ze života domorodců."> ... [/] [cislozbrane 1>"1"] Postava má jinou zbraň než 1 <text obsah="Jdeš po tmě na jih. Chodba je široká. Budeš se držet při stěně po tvé pravé ruce nebo po levé?"> ... [/]

Příklad: Podle množství peněz, které hráč má u sebe, mu bude nabídnuto několik možností.
<text obsah="Dar chrámu - kolik stříbrňáků dáš?">
[penize 1>"9"]
Má víc než 9 stříbrňáků <menu odkaz="269" popis="10"> [/] [penize 1>"99"] Má víc než 99 stříbrňáků <menu odkaz="270" popis="100"> [/] <menu odkaz="267" popis="nic">

Proměnné a speciální proměnné s uvozujícím znakem $ (s prefixem $)

Proměnnou s prefixem $ můžeme použít ve všech tagech, kde je vyžadován číselný parametr.

Příklad: trochu modifikuju předchozí příklad s volbou schopnosti obchodník a gambler
<1>
<text obsah="Výběr schopnosti.">
<menu odkaz="2" popis="Obchodník">
<menu odkaz="3" popis="Gambler">
<2>
<text obsah="Zvolil jsi obchodník. Tvá schopnost obchodování je vyšší.">
<promenna 1="50">
<menu odkaz="4" popis="Dál">
<3>
<text obsah="Zvolil jsi gambler. Tvé štěstí je vyšší.">
<promenna 1="30">
<menu odkaz="4" popis="Dál">
...
Začátek zůstal podobný jako předtím, pouze jsem do proměnné 1 uložil procenta pro tag prodej. Když si hráč vybral obchodníka, do proměnné 1 se uložila hodnota 50. Když si vybral gamblera, do proměnné 1 se uložila hodnota 30.
Nyní hráč dorazil do obchodu a chce prodat získané věci.
<prodej typ="predmety" procent="$1">
Původní dvě podmínky se "smrskly" na jeden řádek. Do procent FGBE doplní hodnotu proměnné 1, to určuje právě prefix $.
Další část příkladu zůstane v tomto případě stejná jako dřív, pouze se změní hodnota v podmínkách.
<text obsah="Jdeš po cestě a nedáváš pozor. Zakopnul jsi o kámen.">
[promenna 1="50"] = obchodník <text obsah="Při pádu ses poranil. Na cestě leží vyvrácený kámen."> vykoná se, pokud si hráč vybral obchodníka <zivoty minus="2"> [/] [promenna 1="30"] = gambler <text obsah="Pod vyvráceným kamenem jsi našel 5 zlatých."> vykoná se, pokud si hráč vybral gamblera <penize plus="5"> [/]

Příklad: hráč může najít kožený oblek, ten ho trochu ochrání před následky putování divočinou
<promenna 1="2"> = oblek snižuje způsobené zranění o 2 
...
<50>
<text obsah="Cesta pokračuje dál trnitým houštím">
<vzorec 2="3-$1">trnité houští způsobí zranění -3 životy pokud má hráč oblek, utrpí menší zranění, sníží se o hodnotu proměnné 1 <zivoty minus="$2"> = hodnota životů se sníží o hodnotu proměnné 2, tj. o 1 (s oblekem) nebo o 3 životy (bez obleku)
Jestliže hráč dříve našel oblek, do proměnné 1 byla uložena hodnota 2. Vzorcem vypočítáme výsledné zranění, proměnná 2 = 3 - hodnota proměnné 1 (<vzorec 2="3-$1">). Výsledek pak odečtemě od životů (<zivoty minus="$2">).

Proměnnou s prefixem $ můžeme použít i v podmínkách

Příklad: Potřebujeme porovnat množství dvou předmětů, které má hráč v inventáři, a podle toho rozhodnout co dál.
<pocetpredmetu 10="1"> do proměnné 10 uloží počet předmětů 1 - předmět 1 je malina
<pocetpredmetu 11="2"> do proměnné 11 uloží počet předmětů 2 - předmět 2 je sklenice
[promenna 11<"$10"]
  <text obsah="Můžeš vyrobit pouze $11 malinových zavařenin. Máš málo sklenic.">
  ...
[/]
[promenna 11="$10"]
  <text obsah="Můžeš vyrobit $11 malinových zavařenin.">
  ...
[/]
[promenna 11>"$10"]
  <text obsah="Můžeš vyrobit pouze $10 malinových zavařenin. Máš málo malin.">
  ...
[/]

Speciální proměnné s prefixem $

Ve FGBE jsou definovány speciální proměnné jako jsou vlastnosti postavy, penize, zkušenosti apod., které můžeme použít pro různé účely.
Vlastnosti postavy jsou $zivoty, $maxzivoty, $mana, $maxmana, $sila, $obratnost, $rychlost, $energie, k nim existují ekvivalenty $cistyVlastnost (bez účinků zbraní a zbrojí) a $startVlastnost (vlastnosti na počátku hry, případně od posledního volání funkce ulozpocatecnivlastnosti).
<promenna 1="$sila"> do proměnné 1 uložíme velikost síly
<promenna 2="$cistymaxzivoty"> do proměnné 2 uložíme počet maximálních životů
<promenna 3="$penize"> do proměnné 3 uložíme počet peněz
<promenna 4="$zkusenosti"> do proměnné 4 uložíme počet zkušeností
<promenna 5="$vysledeksouboje"> do proměnné 5 uložíme výsledek souboje, jestliže měl parametr neumírej
S takto uloženými speciálními proměnnými můžeme dál pracovat (odložit si stav, modifikovat hodnotu atd.).

Příklad: Ukážu na příkladu se soubojem v aréně. Po souboji bude mít hráč stejné množství životů jako před ním. Obrana trenéra se bude odvíjet od vaší síly. Představte si to jako situaci - bojový výcvik v aréně.
<promenna 1="$zivoty"> odložíme si před soubojem životy
<vzorec 2="$sila + 2"> do proměnné 2 uložím sílu
                       a zvyším hodnotu promenne 2 o 2 - ztížím tím souboj 

<souboj jmeno="Trenér" utok="2k5+0" poskozeni="0" obrana="$2" tvrdost="0" zivoty="40" xp="0" neumirej="1">
Obrana trenéra se bude zvyšovat se vzrůstající sílou postavy

<zivoty je="$1">  po souboji obnovíme původní životy

<promenna 20="$vysledeksouboje">
[PROMENNA 20="0"]
  <text obsah="Prohráls">
[/]
[PROMENNA 20="1"]
  <text obsah="Remíza!">
[/]
[PROMENNA 20="2"]
  <text obsah="Vyhráls!">
  <sila plus="1">
[/]
nahoru

2. ČÁST - ŘEŠENÍ SITUACÍ

Všechny dále uvedené příklady jsou pouze návodem, jak danou situaci řešit. V příkladech používám kouzla a předměty nadefinované v .gbs souborech z mojí hry "Čarodějný soumrak". A k čemu se proměnné dají použít?


Vyhodnocení náhody

Náhoda může ovlivňovat hru. Jakým způsobem? Ukážu pár příkladů.

1. herní situace - zakopli jste a zranili jste se
<nahoda 1="1k2+1"> = do proměnné 1 se uloží výsledek náhody - hodnota 2 nebo 3 
<zivoty minus="$1"> = počet životů se sníží o výsledek náhody.
<text obsah="Zakopl jsi o kořen a upadl. Ztratil jsi $1 životy.">
V textu nemusí být nutně informace o ztracených životech. Vypisuje se ve stavovém okně hry. Může se to ale někdy hodit.

2. herní situace - trháte plody trnitého keře
<text obsah="Otrhal jsi zelené bobule, je jich 10 hrstí.">
<predmet 1="10">
<nahoda 1="1k6"> = do proměnné 1 se uloží výsledek náhody - hodnota 1 až 6 [promenna 1<"4"] Je-li výsledek náhody menší než 4, ztratíte 2 životy <text obsah="Byl jsi nepozorný a zranil ses o ostré trny, ztrácíš 2 body života."> <zivoty minus="2"> [/]

3. herní situace - rozhodli jste se jít podél hluboké propasti po tmě
<1>
<nahoda 1="1k6"> = do proměnné 1 se uloží výsledek náhody - hodnota 1 až 6 [promenna 1<"3"] Je-li výsledek náhody menší než 3, máte smůlu <text obsah="Setmělo se a nevidíš na cestu. Najednou jsi ztratil půdu pod nohama. Zřítil ses do Propasti!"> <zivoty je="0"> = SMRT [/] [promenna 1>"2"] Je-li výsledek náhody větší než 2, máte štěstí <text obsah="Setmělo se a nevidíš na cestu. Musíš si ustlat tam, kde jsi."> <menu odkaz="2" popis="Jdeš spát"> [/] <2> ...

4. herní situace - rozhodli jste se jít po tmě podél hluboké propasti, máte amulet ochrany

Popis: Ve hře můžete najít amulet ochrany. Pokud ho vlastníte, amulet ovlivní výsledek náhody ve váš prospěch tak, že k výsledku náhody se přičte hodnota 2. Jsou dvě možná řešení: rozhodováním pomocí podmínek nebo pomocí jednoduché operace s proměnnou. Ukážu obě varianty na příkladu.

Řešení pomocí rozhodovací podmínky - nevýhodou je použití podmínky u každé náhody. Prodlužuje se a znepřehledňuje se tím zdrojový kód hry.
<50>
<objekt 1="1" jmeno="Amulet ochrany" popis="Chrání svého vlastníka">
...
<100>
<nahoda 2="1k6"> = do proměnné 2 se uloží výsledek náhody - hodnota 1 až 6 [objekt 1>"0"] = zjištění vlastnictví amuletu <zvyspromennou 2="2"> [/] [promenna 2<"3"] Je-li výsledek náhody menší než 3, máte smůlu <text obsah="Setmělo se a nevidíš na cestu. Najednou jsi ztratil půdu pod nohama. Zřítil ses do Propasti!"> <zivoty je="0"> = SMRT [/] [promenna 2>"2"] Je-li výsledek náhody větší než 2, máte štěstí <text obsah="Setmělo se a nevidíš na cestu. Musíš si ustlat tam, kde jsi."> <menu odkaz="101" popis="Jdeš spát"> [/] <101> ...

Řešení pomocí proměnné - výsledek náhody se ovlivní přičtením (odečtením) hodnoty proměnné 1. Proměnná 1 má hodnotu 0. Pokud najdete amulet, nastaví se do proměnné 1 hodnota 2 (účinek amuletu).
<50>
<objekt 1="1" jmeno="Amulet ochrany" popis="Chrání svého vlastníka">
<promenna 1="2"> = našli jste amulet, do proměnné 1 se nastaví hodnota 2 ... <100> <nahoda 2="1k6+$1"> = do proměnné 2 se uloží výsledek náhody - hodnota 1 až 6 a zároveň, jestliže máte amulet, se přičte hodnota 2 uložená v proměnné 1, jinak 0 (nic) [promenna 2<"3"] Je-li výsledek náhody menší než 3, máte smůlu <text obsah="Setmělo se a nevidíš na cestu. Najednou jsi ztratil půdu pod nohama. Zřítil ses do Propasti!"> <zivoty je="0"> = SMRT [/] [promenna 2>"2"] Je-li výsledek náhody větší než 2, máte štěstí <text obsah="Setmělo se a nevidíš na cestu. Musíš si ustlat tam, kde jsi."> <menu odkaz="2" popis="Jdeš spát"> [/] <2> ...

Souboj

V některých případech, kdy nevíte v jakém okamžiku hry hráč danou lokaci navštíví, je potřeba upravit vlastnosti nepřítele podle schopností postavy. Může se to za určitých okolností hodit. Osobně radím používat této možnosti s rozvahou.

1. herní situace - v zákoutí vás přepadně vrah

Popis: Působilo by divně, kdyby vrahovy vlastnosti byly tak nízké, že ho snadno porazíte nebo naopak vrah by porazil snadno vás a vy byste neměli žádnou šanci.
Je potřeba si trochu vyhrát s nastavením atributů, nejlépe je vyzkoušet ve hře.
určení atributů protivníka
<promenna 32="$obratnost">
<vzorec 33="$sila+4">  = souboj trochu ztížím o 4
<vzorec 34="$maxzivoty+5"> = souboj trochu ztížím o 5
definování souboje
<souboj jmeno="vrah" utok="1k6+$32" poskozeni="2" obrana="$33" tvrdost="2" zivoty="$34" xp="200">

Poznámka: Vysoké atributy nepřítele se dají také využít k zabránění pokračování v cestě hráči. Např. situace: hráč přijde na rozcestí. Může se vydat na východ nebo na západ. Když půjde na západ, narazí na draka, na kterého je ještě příliš slabý. Může jít tedy jen na východ.

Použití u kouzel

Vaše postava umí na začátku hry několik kouzel. Ale určitá kouzla účinkují na živé, jiná na nemrtvé. Dále účinek kouzel vzrůstá časem, jak postava nabývá zkušeností.

Kouzla máte nadefinovaná v souboru kouzla.gbs.
...
4,"Roj","Na nepřítele se vrhne roj much, nepříteli se sníží obrana o 1, neúčinkuje proti nemrtvým",5,nobrana-1
5,"Roj","Na nepřítele se vrhne roj vos, nepříteli se sníží obrana o 2, neúčinkuje proti nemrtvým",5,nobrana-2
6,"Roj","Na nepřítele se vrhne roj sršňí, nepříteli se sníží obrana o 3, neúčinkuje proti nemrtvým",5,nobrana-3
...
14,"Léčení","Vyléčí ti až 3 životy",2,zivoty+3
15,"Léčení","Vyléčí ti až 4 životy",2,zivoty+4
16,"Léčení","Vyléčí ti až 5 životů",2,zivoty+5
17,"Léčení","Vyléčí ti až 6 životů",2,zivoty+6
18,"Léčení","Vyléčí ti až 7 životů",2,zivoty+7
19,"Svatá píseň","Zazní nebeská hudba, působí pouze proti nemrtvým, ubere jim 10 životů",10,nzivoty-10,energie-5
20,"Svatá píseň","Zazní nebeská hudba, působí pouze proti nemrtvým, ubere jim 15 životů",10,nzivoty-15,energie-5
21,"Svatá píseň","Zazní nebeská hudba, působí pouze proti nemrtvým, ubere jim 20 životů",10,nzivoty-20,energie-5
22,"Nebeský štít","Zvýší tvoji obranu o 1 a uzdraví tě o 10 životů",10,zivoty+10,obrana+1
Asi vás napadne otázka, proč jsou jednotlivá kouzla nadefinovaná několikrát. Jak postava získává zkušenosti, sílí i její magický potenciál. Po dosažení určité úrovně účinek kouzel zesílí, např. postava bude umět místo kouzla 4 (roj) kouzlo 5 (roj - silnější).
Nejprve je třeba provést předpřípravu. Důkladně si promyslete svůj systém kouzel. Pozdější změny jsou potom příliš pracné (z vlastních zkušeností :-( ). Kouzlu, které budete ve hře povyšovat, přidělte proměnnou, totéž platí pro kouzla, která mají účinkovat pouze na určité tvory.
A to takhle: Pro přehlednost a snazší orientaci doporučuji přidělit proměnné tak, aby se dalo snadno určit, o které kouzlo se jedná. Já jsem použil způsob proměnná 200 + index kouzla v souboru kouzla.gbs. V celé hře potom budete používat takto přidělené proměnné k daným kouzlům. K čemu to je, ukážu na příkladech.

1. herní situace - umíte kouzla Roj, Léčení a Svatá píseň

Popis: Před soubojem s živým nepřítelem musíte kouzlo Roj postavu "naučit" a pak zase "odnaučit". U souboje s nemrtvým je postup analogický s kouzlem Svatá píseň. Kouzlo Léčení umí postava stále bez ohledu na nepřítele.
<1>
začátek hry - nadefinování kouzel, věcí a zbraní ... <promenna 204="4"> index kouzla Roj - účinkuje na živé <kouzlo umime="14"> naučíme kouzlo Léčení <promenna 214="14"> index kouzla Léčení <promenna 219="19"> index kouzla Svatá píseň - účinkuje na nemrtvé <menu odkaz="2" popis="Dál"> <2> <text obsah="Ze stínu náhle vyskočila postava - kostlivec s mečem."> <menu odkaz="3" popis="Bojuj"> <3> Souboj s nemrtvým <vypniinfo> = je vhodné vypnout zobrazení informace v okně zprávy <kouzlo umime="$219"> = před začátkem souboje naučíme kouzlo Svatá píseň <zapniinfo> <souboj jmeno="kostlivec" utok="1k5+1" poskozeni="1" obrana="5" tvrdost="0" zivoty="25" xp="50"> <vypniinfo> <kouzlo neumime="$219"> = po souboji odnaučíme kouzlo Svatá píseň <zapniinfo> <text obsah="Když se kostlivec rozpadl na prach, chtěl si sebrat jeho meč, ale ozvalo se temné zavrčení."> <text obsah="Kostlivec nebyl sám, proti tobě stojí vlk."> <menu odkaz="4" popis="Bojuj"> <4> Souboj s živým <vypniinfo> <kouzlo umime="$204"> = před začátkem souboje naučíme kouzlo Roj <zapniinfo> <souboj jmeno="vlk" utok="1k5+2" poskozeni="3" obrana="4" tvrdost="2" zivoty="20" xp="50"> <vypniinfo> <kouzlo neumime="$204"> = po souboji odnaučíme kouzlo Roj <zapniinfo> <text obsah="Po souboji sis otřel zpocené čelo a ostražitě ses rozhlédl kolem."> ...

2. herní situace - dosáhli jste třetí úrovně magie

Popis: V magické škole postoupíte na vyšší úroveň a naučíte se silnější varianty kouzel.
Jak jsem výše uvedl, proměnná zůstává stále stejná pro dané kouzlo. Pouze se mění index kouzla uložený v proměnné.
<1>
začátek hry - nadefinování kouzel, věcí a zbraní ... <promenna 204="4"> index kouzla Roj <kouzlo umime="14"> naučíme kouzlo Léčení <promenna 214="14"> index kouzla Léčení <promenna 219="19"> index kouzla Svatá píseň <menu odkaz="2" popis="Dál"> <2> ... <500>Jste v magické škole <text obsah="Po třech týdnech intenzivní výuky jsi dostal výuční list mistra"> <vypniinfo> <kouzlo neumime="$214"> = odnaučíme kouzlo Léčení <promenna 204="5"> silnější kouzlo Roj <promenna 214="16"> silnější kouzlo Léčení <promenna 219="20"> silnější kouzlo Svatá píseň <kouzlo umime="$214"> = naučíme silnější kouzlo Léčení <zapniinfo> <info obsah="Síla tvých kouzel se zvýšila" barva="aqua"> ....

Větvení cest

V každém gamebooku se cesty rozcházejí a pak se opět setkávají. Potřebujete vědět, kterou cestou se hráč vydal. Nejjednodušší způsob, jak to zjistit, je použití proměnné.

1. herní situace - dorazili jste na rozcestí, obě vedou ke stejnému cíli.

Pokud se vydáte hlavní cestou, nenajdete nic. Pokud půjdete pěšinou, uvidíte zvláštní byliny.
<1>
<text obsah="Cesta vede mezi pastvinami na nichž se pasou stáda ovcí. Z široké cesty se odděluje pěšina.">
<menu odkaz="2" popis="Vydáš se pěšinou">
<menu odkaz="3" popis="Půjdeš dál po cestě">

<2>
<text obsah="Podél pěšiny kvetou zvláštní byliny, které jsi nikdy předtím neviděl.">
<promenna 1="1">Vydali jste se pěšinou <menu odkaz="3" popis="Půjdeš dál"> <3> <text obsah="Cesta rychle ubíhá, dorazil jsi do vesnice."> <text obsah="Na návsi k tobě přišel stařík."> <text obsah="Vidím, že máš mladé nohy, měl bych k tobě prosbu. Jsem alchymista a nohy už mi tolik neslouží."> <text obsah="Potřeboval bych pár bylin. Byliny rostou ve vrchovině nad vesnicí podél cest, přišel jsi odtamtud."> <text obsah="Stařík ti ukázal obrázek. Přines je, prosím, do mé laboratoře na návsi, dám ti odměnu."> <menu odkaz="4" popis="Pokračování..."> <4> [promenna 1="1"] Šli jste pěšinou <text obsah="Vzpomínáš si na byliny u pěšiny. Jdeš pro ně a ukládáš je do torny."> <objekt 1="1" jmeno="Zvláštní byliny" popis="Byliny od cesty"> <menu odkaz="10" popis="Doneseš je alchymistovi"> [/] [promenna 1="0"] Šli jste po cestě <text obsah="Vyrážíš hledat byliny. Do vrchoviny nad vsí vedou tři cesty. Po pravé jsi přišel, byliny tam nerostly."> <text obsah="Kterou cestou se vydáš?"> <menu odkaz="5" popis="levou cestou"> <menu odkaz="6" popis="prostřední cestou"> [/] ...

Opakované používání jedné lokace

Máte nadefinováno několik hospod (jídlo, nocleh, nápoje), škol (výuka), obchodů atd. na různých místech hry. Některé akce jsou stejné. Pokaždé by je bylo nutné vytvořit znovu nebo zkopírovat (a tím nadělat chyby se zapomenutými odkazy). Později se rozhodnete něco přidat nebo změnit. Změnu musíte potom provést ve všech takových lokacích.

Jak ale volat lokaci opakovaně a vyřešit návrat zpět do potřebné lokace? Použití tagu <zpet> nemusí být vždy dostačující.
Lze to vyřešit pomocí proměnné.

1.herní situace: Ve dvou vsích je hospoda se stejnou nabídkou služeb.
<82> náves vsi Ztracená varta
<text obsah="Stojíš na návsi vesnice. V okolních staveních je hostinec, řemesla a stáje.">">
...
<94> hospoda ve Ztracené vartě	
<text obsah="Jsi ve venkovské hospodě. Vidíš hrubě stlučené stoly a lavice. Přichází k tobě hostinský.">
<text obsah="»Co si budeš přát?«" barva="aqua">
<text obsah="">
<text obsah="Na vývěsce je nabídka" podtrzene="ano" >
<text obsah="Pivo - 5 stříbrňáků">
<text obsah="Jídlo - 10 stříbrňáků">
<text obsah="Nocleh se snídaní - 15 stříbrňáků">
<promenna 40="82"> nastavení návratové proměnné na náves u hospody <menu odkaz="9211" popis="Pivo"> <menu odkaz="9203" popis="Jídlo"> <menu odkaz="9204" popis="Nocleh"> <menu odkaz="82" popis="Odejdeš"> <95> ... <1000> náves vsi Běloves <text obsah="Stojíš na návsi vesnice. V okolních staveních je hostinec, obchod, kovář a stáje.">"> ... <1010> hospoda v Bělovsi
<text obsah="Jsi ve venkovské hospodě. Jako lavice a stoly slouží prkna umístěná na různě vysokých špalcích.">
<text obsah="">
<text obsah="Na vývěsce je nabídka" podtrzene="ano" >
<text obsah="Pivo - 5 stříbrňáků">
<text obsah="Jídlo - 10 stříbrňáků">
<text obsah="Nocleh se snídaní - 15 stříbrňáků">
<promenna 40="1000"> nastavení návratové proměnné na náves u hospody <menu odkaz="9211" popis="Pivo"> <menu odkaz="9203" popis="Jídlo"> <menu odkaz="9204" popis="Nocleh"> <menu odkaz="1000" popis="Odejdeš"> <1011> ... <9203>;==========Dobré výživné jídlo v hospodě================================== [penize 1<"10"] <text obsah="Nemáš dost peněz."> [/] [penize 1>"9"] <text obsah="Sedáš si na volné místo. Hostinský ti přinesl hromadu jídla a korbel piva."> ... <penize minus="10"> [/] <zpet> tohle je jednoduchá situace, tady si vystačíme s tagem <zpet> <9204>;=========Nocleh v hospodě se snídaní===================================== [penize 1<"15"] <text obsah="Nemáš dost peněz."> <zpet> hráč má málo peněz, tady stačí <zpet> [/] [penize 1>"14"] <text obsah="Ráno tě hostinský probudil, po snídani jsi vyrazil."> ... <menu odkaz="$40" popis="Odcházíš..."> po odchodu nebudete v hospodě, ale na návsi <penize minus="15"> [/] <9205> ... <9211>;==========Pivo v hospode na vesnici================================ Určil jsem, že tři vypitá piva způsobí opilost, po pěti pivech hráč usne. [penize 1<"5"] <text obsah="Máš málo peněz."> <zpet> hráč má málo peněz, tady opět stačí <zpet> [/] [penize 1>"4"] <text obsah="Hospodský ti přinesl korbel dobrého piva."> <zvyspromennou 104="1"> počítání piv [promenna 104>"2"][promenna 104<"5"] <text obsah="Jsi opilý."> tři až čtyři piva - opilost ... nadefinování nějakého trestu - třeba snížení obratnosti [/][/] [promenna 104="5"] <text obsah="Usínáš opřený o stůl."> <menu odkaz="9212" popis="Pokračování..."> po pěti pivech je hráč vyhozen na náves [/] [promenna 104<"5"] <zpet> do pěti piv, může hráč sám odejít, tady stačí <zpet> [/] <penize minus="5"> [/] <9212>;==========Probuzeni pred hospodou================================ <text obsah="Probouzíš se s bolestí hlavy v prachu za hospodou."> ... <menu odkaz="$40" popis="Odejdeš"> hráč bude ráno na návsi před hospodou <9213> ...

Opakované navštívení jedné lokace

Hráč má možnost opakovaně navštívit místo, kde už byl. Takže musíte pozorně ošetřit všechny možné stavy, které z toho plynou. Ukážu to na jednotlivých příkladech.

1. herní situace: Objevili jste zajímavou knihu, po jejím prvním přečtení získáte zkušenosti. Po dalším už ne.

Popis: Po nalezení knihy si ji hráč může přečíst kolikrát chce. Musí se ošetřit stav, aby zkušenosti nepřibývali stále s každým dalším přečtením knihy.
<1>
<text obsah="Před tebou leží kniha.">
<menu odkaz="2" popis="Přečteš si ji">
<menu odkaz="3" popis="Podíváš se jinam">

<2>
[promenna 1="0"]
Pouze při prvním přečtení knihy přibydou zkušenosti <text obsah="Přečetl sis zajímavou knihu a něco ses z ní naučil."> <zkusenosti plus="500"> [/] [promenna 1="1"] Další čtení knihy <text obsah="Přečetl sis zajímavou knihu."> [/] <promenna 1="1"> = Nastavení proměnné 1 na hodnotu 1, kniha byla minimálně jednou přečtená <zpet> <3> <text obsah="Odcházíš."> ...

2. herní situace: Hráč navštívil lokaci, otrhal keř (nebo něco sebral atd.) a pak se vrátil zpět.

Popis: Potom, co hráč otrhal keř s malinami, se vrátil zpět na břeh potoka. Maliny na keři už tedy nejsou.

TIP: Je také vhodné změnit i znění textu, působilo by to divně, kdyby hráč k tomu potoku znovu přicházel.
<1>
[promenna 1="0"]
Po vstupu do lokace se vykoná tato podmínka. <text obsah="Přicházíš k zurčícímu potůčku. Vedle na pasece rostou keře obsypané zralými malinami."> <menu odkaz="2" popis="Sníš maliny"> [/] [promenna 1="1"] Po otrhání malin se vykoná tato podmínka. <text obsah="Stojíš na břehu zurčícího potoka. Vedle na pasece rostou keře."> [/] <menu odkaz="3" popis="Půjdeš dál"> <2> <text obsah="Nasytil ses malinami."> <promenna 1="1"> = nastavení proměnné 1 <zpet> <3> <text obsah="Pokračuješ v cestě."> ...

3. herní situace - Hráč navštívil lokaci, postupně otrhal dva keře (nebo sebral dvě věci apod.) a pak se vrátil zpět.

Předchozí situaci jsem rozšířil o další keř. Hráč má možnost si zvolit otrhání obou keřů v libovolném pořadí.

Popis: Danou situaci je možné řešit pomocí dvou proměnných za využití kombinovaných podmínek. Výsledkem jsou čtyři možné kombinace.
Ukážu možné řešení pouze s jednou proměnnou za pomoci "logického" součtu. Teď trocha matematiky. Protože hráč může oba keře otrhat v libovolném pořadí, proměnná může nabýt čtyř hodnot (22). Bobulím přidělím hodnotu 1 (20). Malinám přidělím hodnotu 2 (21).
<1>
[promenna 1="0"]
Po vstupu do lokace se vykoná tato podmínka. <text obsah="Přicházíš k potoku. Na břehu stojí trnitý keř s bobulemi. Vedle na pasece rostou keře obsypané malinami."> <menu odkaz="2" popis="Natrháš bobule."> <menu odkaz="3" popis="Sníš maliny"> [/] [promenna 1="1"] Po otrhání bobulí se vykoná tato podmínka. <text obsah="Stojíš na břehu potoka. Na břehu stojí trnitý keř. Vedle na pasece rostou keře obsypané malinami."> <menu odkaz="3" popis="Sníš maliny"> [/] [promenna 1="2"] Po otrhání malin se vykoná tato podmínka. <text obsah="Stojíš na břehu potoka. Na břehu stojí trnitý keř s bobulemi. Vedle na pasece rostou keře."> <menu odkaz="2" popis="Natrháš bobule"> [/] [promenna 1="3"] Po otrhání malin a bobulí se vykoná tato podmínka. <text obsah="Stojíš na břehu potoka. Na břehu stojí trnitý keř. Vedle na pasece rostou keře."> [/] <menu odkaz="4" popis="Půjdeš dál"> <2> <text obsah="Natrhal jsi bobule, je jich pět hrstí."> <zvyspromennou 1="1"> = zvýšení proměnné o 1, logický součet <predmet 1="5"> <zpet> <3> <text obsah="Nasytil ses malinami."> <zvyspromennou 1="2"> = zvýšení proměnné o 2, logický součet <zpet> <4> <text obsah="Pokračuješ v cestě."> ...
Varování: Tento způsob použití kombinace podmínek a proměnných je pro více než 3 věci zcela nevhodný. Pro 3 věci je to osm kombinací (23), pro 4 věci je to už šestnáct kombinací (24) atd.

4. herní situace: Přišli jste ke stolu, sebrali lektvary a prozkoumali svitek na stole.

Rozvinu předchozí situace a trochu je spojím dohromady. Tady už jedna proměnná nestačí.
Popis: Po prvním příchodu leží všechny věci před tebou na stole. Lektvary můžete sebrat. Svitek po přečtení vrátíte na stůl. Z toho plynou tři různé možné stavy:
  1. Na stole je všechno - příchod, proměnná 1 má v tu chvíli hodnotu 0, pak se nastaví na 1.
  2. Na stole je svitek a neznámý lektvar - přečtení svitku a vrácení zpět na stůl. Neznámý lektvar je stále na stole. Hodnota proměnné 1 se nezmění.
  3. Na stole je svitek - po sebrání neznámý lektvaru hodnota proměnné 1 bude 2
Svitek je výukový, po jeho prvním přečtení se naučíte nové kouzlo. Po dalším přečtení se nestane nic. Nastaví se druhá proměnná.
<1> lokace 1
<smazatinfo>
[promenna 1="2"] = Stav 3
  po sebrání neznámého lektvaru
  <text obsah="Na stole leží svitek.">
[/]
[promenna 1="1"] = Stav 2
  neznámý lektvar je stále na stole
  <text obsah="Na stole leží svitek a neznámý lektvar.">
[/]
[promenna 1="0"] = Stav 1
  Tato podmínka se vykoná po prvním vstupu do lokace.
  <text obsah="Na stole leží svitek a lahvičky s léčivým a magickým lektvarem a jedna s neznámou tekutinou.">
  <text obsah="Bereš léčivý a magický lektvar a ukládáš do torny." barva="*00d0d0d0" kurziva="ano">
  <predmet 3="1">
  <predmet 4="1">
  <promenna 1="1"> = Nastavení proměnné 1 na hodnotu 1
  Nastavení proměnné 1 musí být poslední akcí v tomto podmínkovém bloku. FGBE vyhodnotí neplatnost podmínky.
  <promenna 3="1"> = Tohle se již nevykoná (pouze pro ilustraci)
[/]
<menu odkaz="2" popis="svitek">
[promenna 1<"2"]
  Neznámý lektvar je stále ještě na stole a lze ho tedy sebrat
  <menu odkaz="3" popis="Neznámý lektvar">
[/]
<menu odkaz="4" popis="Podíváš se jinam">

<2> lokace 2
<text obsah="Držíš výukový svitek s kouzlem - magický šíp!>
[promenna 2="0"]
  Tato podmínka se vykoná pouze poprvé.
  <text obsah="Naučil ses nové kouzlo - Magická střela!" barva="*00d0d0d0" kurziva="ano">
  <kouzlo umime="8">
[/]
<promenna 2="1"> = nastavení proměnné 2 na 1, kouzlo je naučeno
<zpet>

<3> lokace 3
<text obsah="Prohlédl sis lektvar a uložil ho do torny.">
<predmet 5="1">
<promenna 1="2"> = po sebrání lektvaru a návratu nastane stav 3
<zpet>

<4> lokace 4
<text obsah="Odcházíš od stolu">
...

Vytvoření herního menu

Ve své hře jsem potřeboval pomocné menu (nazvané POMMENU, GAMEMENU atd.), které by se dalo vyvolat „kdykoliv“ a ve kterém by byly informace o stavu postavy, moje vlastní kouzla atd. FGBE přímo něco takového nepodporuje, ale jde to udělat pomocí proměnných a speciální proměnné $lokace. POMMENU je v podstatě rozšíření předchozích příkladů „Opakované používání jedné lokace“ a „Opakované navštívení jedné lokace“.
Při vytváření POMMENU je nutné dát pozor na jednu věc.
Po návratu z POMMENU se daná lokace znovu vykoná, takže je třeba pozorně ošetřit vyhodnocení či nastavení proměnných, přidávání věcí, peněz, zkušeností atd. Podle mého názoru je vhodné (ale to samozřejmě záleží na každém, jak se k tomu postaví) omezit použití POMMENU v lokacích u soubojů, příp. před bojem a také v lokacích, kde je nastavováno a vyhodnocováno příliš mnoho podmínek, jejichž ošetření by bylo příliš pracné.

Nejdříve ukážu, jak vytvořit pomocné menu a pak ukážu některá úskalí související s jeho použitím.

Příprava: Pro pomocné menu si vyhradíte jednu proměnnou (v příkladu je to 30), kterou není vhodné používat pro jiné účely. Dále musíte pamatovat na zásadu, že proměnné, do kterých se v POMMENU zapisuje, by se neměly používat ve hře také pro zápis a naopak. Tím se předejde vzniku mnoha chyb způsobených „kolizemi“ proměnných. Já jsem si pro zjednodušení přidal nastavení proměnné a vložení odkazu na POMMENU do šablony PsPadu.

Příklad: Vytvoření POMMENU
<17> normální lokace
<text obsah="Přišel jsi ke stromu. Prohledáš jeho vnitřek?">
<menu odkaz="18" popis="Holí">
<menu odkaz="20" popis="Rukou">
<menu odkaz="21" popis="Půjdeš dál">
<promenna 30="$lokace"> vložení čísla lokace pro návrat, je vhodné použít speciální proměnnou $lokace
<menu odkaz="10000" popis="POMMENU" barva="*00909000"> volání POMMENU
<18>
...
<10000> lokace POMMENU
<smazatinfo>
Upozornění pro hráče
<text obsah="Po volbě zpět se vrátíš do stejné situace jako před vstupem sem." barva="*00a0a0a0" kurziva="ano">
Vypsání potřebných informací
<text obsah="ČAS: Je $100 hodin a $101 minut. Putuješ už $103. den." barva="green" tucne="ano">
<text obsah="POSTAVA" barva="yellow" tucne="ano" podtrzene="ano">
<text obsah="SPECIÁLNÍ SCHOPNOSTI:" barva="yellow" kurziva="ano">
<text obsah="lehký krok - schopnost ujít dle povahy terénu velké vzdálenosti bez únavy">
[objekt 2="1"]
  <text obsah="ohnivý útok - před počátkem souboje zaútočí dráček na nepřítele">
[/]
.
.
.
[promenna 29="1"]
  <menu odkaz="10001" popis="KOUZLO" barva="*00909000">
[/]
<menu odkaz="10050" popis="Úkoly" barva="*00909000">
.
.
.
<menu odkaz="$30" popis="zpět do hry">  návrat do hry

1. herní situace - v lokaci si hráč natrhá maliny a část jich sní

Popis: Po návratu z POMMENU text zůstane stejný, ale předměty (jídlo) a životy nesmí být znovu přidány.
<43>
<text obsah="Snědl jsi maliny. Malin je tolik, že si nějaké bereš sebou.">
[promenna 30<>"$lokace"] přidání životů a předmětu se vykoná pouze jednou <zivoty plus="2"> <predmet 2="1"> [/] <menu odkaz="44" popis="Půjdeš dál"> <promenna 30="$lokace"> číslo kapitoly pro <zpet> z POMMENU <menu odkaz="10000" popis="POMMENU" barva="*00909000"> <44> ...

2. herní situace: - v lokaci je tag nahoda

Popis: Náhoda se musí vyhodnotit pouze jednou, její výsledek zůstane uložený v proměnné.
<52>
<text obsah="Prodíráš se porostem, znovu uslyšíš zakvílení a o něco zakopneš.">
[promenna 30<>"$lokace"] náhoda se vyhodnotí pouze jednou <nahoda 32="1k6"> [promenna 32="1"] <zivoty minus="1"> [/] [/] [promenna 32="1"] výsledek náhody je uložen v proměnné 32, text se zobrazí pokaždé, byla-li náhoda = 1 <text obsah="Při pádu sis odřel koleno!"> [/] <text obsah="Vidíš liánu. Vypadá pevně, mohla by se hodit."> <menu odkaz="53" popis="Sebereš liánu"> <menu odkaz="54" popis="Půjdeš dál"> <promenna 30="$lokace"> číslo kapitoly pro <zpet> z POMMENU <menu odkaz="10000" popis="POMMENU" barva="*00909000"> <53> ...
Po návratu z POMMENU se zobrazí stejný text a životy se už znovu neodečtou.
nahoru

3. ČÁST - SLOŽITÉ PODMÍNKY A "BITOVÉ PROMĚNNÉ"

Složité podmínky

Potřeboval jsem realizovat identifikaci lektvaru za těchto podmínek
  1. identifikovat se smí jen jeden lektvar v jednom "kole"
  2. musí být na to dost peněz
  3. některé lektvary vyžadují vyšší znalosti pro identifikaci
V následující ukázce předmět 3 vyjadřuje "Neznámý lektvar", který má hráč v inventáři. Předměty 7 až 10 a 28 jsou lektvary, které se hráči v inventáři objeví po úspěšné identifikaci.
Pro určení neznámých lektvarů, které hráč našel, používám proměnné 251 až 255: V proměnné 39 je úroveň identifikujícího Alchymisty. Proměnné 11 a 40 jsou pomocné.

Příklad: Hráč má 500 peněz. Má tři neznámé lektvary (253=2 a 255=1). Přijde k alchymistovi a chce si nechat lektvary identifikovat.
Postup:
Peněz má dost, takže proběhne zjištění lektvaru, který má. Třetí podmínka (hadí krev) se vyhodnotí jako platná. Alchymista splňuje podmínku znalostí.
Odebere se hráči z inventáře jeden neznámý lektvar (předmět 3) a dostane lektvar Hadí krev (předmět 8). Proměnná 11 se nastaví na hodnotu 1. Tím se zabrání vyhodnocení dalšího předmětu v tomto "kole". A sníží se proměnná 253.
Další dva podmínkové bloky se neprovedou. Hráči se na závěr zobrazí informace o úspěchu identifikace lektvaru.
<100>
<zmenotazku otazka="Identifikovat?" barva="white">
<text obsah="Umím identifikovat lektvary - cena za kus 50 stříbrňáků.">
<promenna 39="5">úroveň alchymisty [predmet 3>"0"] <menu odkaz="9490" popis="lektvar">zjištění, jestli má hráč v inventáři neznámý lektvar [/] <menu odkaz="99" popis="Nic" barva="white"> <9490> <text obsah="Alchymista $39. úrovně" barva="*00a0a0a0"> <text obsah="" barva="white"> <promenna 11="0"> [penize 1<"50"] <text obsah="Nemáš dost peněz, tak nezdržuj."> <promenna 11="2">Vyhodnocení peněz - pokud jich je málo, zablokují se všechny následující podmínky [/] <promenna 40="$11"> Lektvar života [promenna 40="0"][promenna 251>"0"] <predmet 28="1"> Vykoná se jen, je-li 11=0 a 251>0, <odstranpredmet 3="1">tj. hráč má dost peněz (11=0) a lektvar života (251>0) <promenna 11="1"> <snizpromennou 251="1"> [/][/] <promenna 40="$11"> Všelék [promenna 40="0"][promenna 252>"0"][promenna 39>"1"] <predmet 7="1"> Vykoná se jen, je-li 11=0 a 252>0 a 39>1, <odstranpredmet 3="1">tj. hráč má dost peněz a nemá předchozí lektvar (11=0) a má Všelék (252>0) <promenna 11="1"> a znalosti alchymisty jsou min. 2 (39>1) <snizpromennou 252="1"> [/][/][/] <promenna 40="$11"> Hadí krev [promenna 40="0"][promenna 253>"0"][promenna 39>"2"] <predmet 8="1"> <odstranpredmet 3="1"> <promenna 11="1"> <snizpromennou 253="1"> [/][/][/] <promenna 40="$11"> Dryják [promenna 40="0"][promenna 254>"0"][promenna 39>"3"] <predmet 9="1"> <odstranpredmet 3="1"> <promenna 11="1"> <snizpromennou 254="1"> [/][/][/] <promenna 40="$11"> Mocný nápoj [promenna 40="0"][promenna 255>"0"][promenna 39>"4"] <predmet 10="1"> <odstranpredmet 3="1"> <promenna 11="1"> <snizpromennou 255="1"> [/][/][/] Závěrečné vyhodnocení [promenna 11="1"] <text obsah="Alchymista chvíli něco kutil u své aparatury a pak ti podal identifikovaný lektvar."> <penize minus="50">;Indentifikace byla úspěšná a provede se odečtení peněz. Hráč je informován o úspěchu. [/] [promenna 11="0"] <text obsah="Na to moje schopnosti bohužel nestačí.">Znalosti alchymisty byly malé. [/] <zpet>

Bitové proměnné

Potřeboval jsem osm dvoustavových proměnných (nabývajících pouze hodnoty 0 nebo 1), různě je nastavovat nebo mazat. Mohl jsem samozřejmě použít osm různých proměnných. Ale napadlo mě využít bitové reprezentace čísla.
Proměnná ve FGBE může dosáhnout hodnoty -2147483648 až 2147483647, což je 32 bitů.

zápis 32 - bitového čísla
1111 1111 1111 1111 1111 1111 1111 1111
|                                     |
nejvyšší bit               nejnižší bit
Bitové vyjádření v následující tabulce jsem omezil na 16 bitů, pak již výsledné dekadické vyjádření dosahuje příliš vysokých čísel a špatně se s nimi bez kalkulačky počítá. Vyhodnocení příslušného bitu se dá ve FGBE realizovat pomocí tagu vzorec (v tabulce je naše proměnná 1, kterou chceme vyhodnotit, proměnná 2 je pomocná).

Číslo bitu** Bitové vyjádření Dekadicky Vzorec Vzorec (od verze FGBE 4.4)
0 0000 0000 0000 0001 1 <vzorec 2="$1%2">* <vzorec 2="$1 A 1">
1 0000 0000 0000 0010 2 <vzorec 2="($1/2)%2"> <vzorec 2="$1 A 2">
2 0000 0000 0000 0100 4 <vzorec 2="($1/4)%2"> <vzorec 2="$1 A 4">
3 0000 0000 0000 1000 8 <vzorec 2="($1/8)%2"> <vzorec 2="$1 A 8">
4 0000 0000 0001 0000 16 <vzorec 2="($1/16)%2"> <vzorec 2="$1 A 16">
5 0000 0000 0010 0000 32 <vzorec 2="($1/32)%2"> <vzorec 2="$1 A 32">
6 0000 0000 0100 0000 64 <vzorec 2="($1/64)%2"> <vzorec 2="$1 A 64">
7 0000 0000 1000 0000 128 <vzorec 2="($1/128)%2"> <vzorec 2="$1 A 128">
8 0000 0001 0000 0000 256 <vzorec 2="($1/256)%2"> <vzorec 2="$1 A 256">
9 0000 0010 0000 0000 512 <vzorec 2="($1/512)%2"> <vzorec 2="$1 A 512">
10 0000 0100 0000 0000 1024 <vzorec 2="($1/1024)%2"> <vzorec 2="$1 A 1024">
11 0000 1000 0000 0000 2048 <vzorec 2="($1/2048)%2"> <vzorec 2="$1 A 2048">
12 0001 0000 0000 0000 4096 <vzorec 2="($1/4096)%2"> <vzorec 2="$1 A 4096">
13 0010 0000 0000 0000 8192 <vzorec 2="($1/8192)%2"> <vzorec 2="$1 A 8192">
14 0100 0000 0000 0000 16384 <vzorec 2="($1/16384)%2"> <vzorec 2="$1 A 16384">
15 1000 0000 0000 0000 32768 <vzorec 2="($1/32768)%2"> <vzorec 2="$1 A 32768">
* úplný zápis by byl <vzorec 2="($1/1)%2">, ale je to zbytečné
** Je vhodné si jednotlivé bity pojmenovat a přiřadit k nim hodnotu v konstanty.gbs,
   zápis by vypadal např. takto:
BIT00 1
BIT05 32  
BIT15 32768

Vyhodnocení bitu (od verze FGBE 4.4 je možné použít druhý způsob)

Potřebuju zjistit stav např. 5.bitu (25 = 32) proměnné 1.
1.způsob

<vzorec 2="($1/32)%2">

Proměnnou 1 nejprve vydělím 32 a potom vydělím modulo 2. Jestliže byl 5. bit rovný 0, bude výsledek 0. Jestliže byl nastaven do 1, výsledek bude 1.

V proměnné 1 mám číslo 164 (binárně 1010 0100). V pomocné proměnné je 1.
V proměnné 1 mám číslo 132 (binárně 1000 0100). V pomocné proměnné je 0.

Vyhodnocení bitu se provede jednoduchou podmínkou otestováním hodnoty proměnné 2. Jak ale bit nastavím?

Nastavení 5.bitu

  <vzorec 2="($1/32)%2">
[promenna 2="0"]; nastav jen, pokud je nulový <zvyspromennou 1="32"> [/]

Vynulování 5.bitu

  <vzorec 2="($1/32)%2">
[promenna 2="1"]; vynuluj jen, pokud je nastavený <snizpromennou 1="32"> [/]

2.způsob

<vzorec 2="$1 A 32">

Vyhodnocení provedu pomocí logické operace AND, což je logický součin. Mojí proměnnou vynásobím s číslem 32, které odpovídá 5. bitu. Jestliže byl 5. bit rovný 0, bude výsledek 0. Jestliže byl nastaven do 1, výsledek bude 1.

V proměnné 1 mám číslo 164 (binárně 1010 0100). V pomocné proměnné je 32.
V proměnné 1 mám číslo 132 (binárně 1000 0100). V pomocné proměnné je 0.

Vyhodnocení bitu se provede jednoduchou podmínkou otestováním hodnoty proměnné 2 s hodnotou 0 nebo větší než 0. Jak ale bit nastavím?

Nastavení 5.bitu na hodnotu 1

<vzorec 1="$1 O 32">

Nastavení příslušného bitu se provede pomocí logické operace OR, což je logický součet. Odpovídající 5.bit tím nastavím do 1.

Vynulování 5.bitu

<vzorec 1=" $1 B 32">

Vynulování příslušného bitu se provede pomocí logické operace NAND, což je negovaný logický součin. Odpovídající 5.bit tím nastavím do 0.
Je samozřejmě možné použít pro vynulování bitu AND, ale pak by výraz musel být "$1 A 4294967263" (což odpovídá bitové reprezentaci čísla 11111111 11111111 11111111 11011111).
<vzorec 1="$1 O 96"> nastav bity 5 a 6 na hodnotu 1
<text obsah="$1" barva="white"> zobrazí se 96, tj. 0110 000
<vzorec 2="$1 A 32"> zjistím stav 5.bitu
<text obsah="$2" barva="white"> zobrazí se 32, tj. 0010 000
<vzorec 1="$1 B 32"> vynuluj 5.bit, tj. 0010 000
<text obsah="$1" barva="white"> zobrazí se 64, tj. 0100 000
<vzorec 2="$1 A 32"> zjistím stav 5.bitu
<text obsah="$2" barva="white"> zobrazí se  0, tj. 0000 000
nahoru

4. ČÁST - PODMÍNKY, CYKLY A "PROMĚNNÁ V PROMĚNNÉ"

Ve verzi FGBE 4.4 přibyl nový příkaz cyklus a "proměnná v proměnné" v podmínkách.

1. příklad: V několika lokacích jdoucích za sebou vyhodnocuji náhodu a nepotřebuji, aby byla v následující lokaci stejná. Zajistit to lze pomocí cyklů.
<1>
<nahoda 1="1k6">
...
<2>
<nahoda 2="1k6"> do pomocné proměnné nastavíme náhodu
[promenna 1="$2"]
  <nahoda 2="1k6">
  <cyklus> cyklus se bude provádět dokud bude proměnná 1 rovná proměnné 2
[/]
<promenna 1="$2"> nastavíme proměnnou 1 pro další lokaci
...
<3>
<nahoda 2="1k6">
[promenna 1="$2"]
  <nahoda 2="1k6">
  <cyklus>
[/]
<promenna 1="$2">
...
<4>

2. příklad: Prostranství je rozděleno na 30 částí. Každá část má přidělenou svoji proměnnou. Když hráč do něho vstoupí, nastaví se do proměnné nějaká hodnota (může být různá). Potřebujeme zjistit, jestli už byl všude a na základě toho provést nějakou akci.

Popis: Můžeme samozřejmě otestovat pomocí podmínek každou proměnnou a sčítat počet navštívených prostranství. Je to ale zdlouhavé na napsání.

Řešení: Tento dlouhý zápis si můžeme zkrátit pomocí cyklů a proměnné v proměnné za předpokladu, že proměnné máme za sebou (nebo v pravidelném intervalu - např. každá druhá). Máme tedy pro ilustraci vymezeny proměnné v rozsahu 50 až 79, tj. 30 proměnných. Do pomocné proměnné 100 si uložíme číslo 50,tj. první proměnná, která nás zajímá. V proměnné 101 budeme počítat.
... zde máme nadefinované lokace s nastavením proměnných
<250>
<promenna 100="50"> první proměnná, která nás zajímá, je proměnná 50
<promenna 101="0">
[promenna 100<"80"] cyklus skončí po 30 proměnných
  [promenna @100>"0"] zjistění zda proměnná 50 až 79 obsahuje hodnotu větší než 0
    <zvyspromennou 101="1"> jednoduše spočítáme počet
  [/]  
<zvyspromennou 100="1">
<cyklus>
[/]
<text obsah="Navštívil jsi dosud $101 prostranství.">
....
<251>
nahoru