JARDARŮV MANUÁL K ŘETĚZCŮM V FGBE
Optimalizováno pro rozlišení min. 1024x768, verze 1.1 (pro novější
verze kontrolujte na
http://textovky.webpark.cz
sekci vývoj)
Tento dokument je doplňujícím manuálem ke kompletnímu manuálu FGBE.
ZÁKLADY
FGBE umožňuje použít až 10 řetězcových proměnných pro vkládání textu. Textová hodnota vložená do řetězce v něm zůstane, dokud není nahrazena jinou hodnotou. Řetězec můžete použít všude, kde FGBE očekává text (v parametrech jednotlivých příkazů - např. obsah, popis, barva, soubor atd.).
Způsob definice řetězce:
<retezec1="Řetězec1"> do proměnné retezec1 zapíšeme „Řetězec1“
<retezec2="Řetězec2"> do proměnné retezec2 zapíšeme „Řetězec2“
...
<retezec10="Obrázek10"> do proměnné retezec10 zapíšeme „Obrázek10“
Způsob použití řetězců (řetězce se používají jako speciální proměnná s prefixem $):
<menu popis="$retezec1.">
<text obsah="Zobrazíme si obsah řetězce 2 - $retezec2.">
<obrazekvtextu soubor="$retezec10.jpg">
Výsledkem je v menu:
Řetězec1
a v textové části:
Zobrazíme si obsah řetězce 2 - Řetězec2
a nakonec se zobrazí obrázek s názvem
Obrázek10.jpg.
Ostatní řetězce zobrazímě stejným způsobem, jen zaměníme číslo na konci speciální proměnné $retezecx (x je číslo od 1 do 10).
REÁLNÉ POUŽITÍ ŘETĚZCŮ
1.příklad - různé jméno protivníka
Mám předdefinovaný souboj a nevím, kdy hráč na protivníka narazí. V proměné 140 je uložena proměnná, která říká, jak silný má být protivník (např. je to stanoveno na základě nějaké události či v závislosti na úrovni hráče).
<promenna 31="3"><promenna 33="8"><promenna 34="2"><promenna 35="40">
<retezec 1=""> incializace řetězce
[promenna 140<>"0"]
<zvyspromennou 31="4"><zvyspromennou 33="4"><zvyspromennou 34="2"><zvyspromennou 35="40">
<retezec 1="válečný "> pokud je splěna podmínka, do řetězce se vloží „válečný“
[/]
<souboj jmeno="$retezec1kostlivec" utok="1k6+$31" poskozeni="$34" obrana="$33" tvrdost="$34" zivoty="$35" xp="100">
Jestliže není splněna podmínka, tj. proměnná 140=0, název protivníka bude
„kostlivec“.
Ale pokud je splněna podmínka, tj. proměnná 140<>0, název protivníka bude
„válečný kostlivec“.
2.příklad - přidávání textu do řetězce
Potřebujeme přidat do stejného řetězce další text. Lze to provést velmi jednoduše. Do retězce vložíme nejprve promennou $retezecx a pak přidáme na základě splněných podmínek potřebný text.
<retezec 1="Info:"> inicializace řetězce
[objekt 2="1"]
<retezec 1="$retezec1 B"> je-li splněna podmínka, přidáme písmeno B s mezerou „ B“
v retezec 1 bude „Info: B“
[promenna 28="1"]
<retezec 1="$retezec1j"> je-li splněna podmínka, přidáme písmeno j bez mezery „j“
v retezec 1 bude „Info: Bj“
[/]
[/]
[promenna 26="1"]
<retezec 1="$retezec1 J"> je-li splněna podmínka, přidáme písmeno J s mezerou „ J“
v retezec 1 bude „Info: Bj J“
[/]
<menu popis="$retezec1" barva="*00a0a0a0"> zobrazíme výsledek v menu
3.příklad - dvoustavový obrázek
Máme několik tlačítek a potřebujeme zobrazit jejich různý stav.
Nejprve si musíme připravit pro každé tlačítko dva obrázky. Máme tedy dvě sady obrázků (měly by mít stejné rozměry) vyjadřující stav tlačítka. První sada vyjadřuje výchozí stav tlačítka (v příkladu nestisknuté), názvy souborů s obrázky jsou vstup1.jpg, vstup2.jpg a vstup3.jpg. Další sada obrázků vyjadřuje opačný stav tlačítka (v příkladu stisknuté), názvy souborů s obrázky jsou vstup1s.jpg, vstup2s.jpg a vstup3s.jpg.
Všimněte si, že názvy souborů vyjadřující oba stavy jsou si podobné - vstup1.jpg versus vstup1s.jpg. Liší se pouze písmenem navíc (místo písmene může být samozřejmě i delší text, např. stisknuto, pak by byl název souboru vstup1stisknuto.jpg). K důvodu se dostanu zanedlouho.
Dále nepřehlédněte v příkladu použití parametru odkaz u tagu obrazekvtextu (viz kompletní manuál FGBE).
Příklad lze realizovat dvěma zůsoby.
1. Prvním způsob je nadefinovat pro každou možnou kombinaci samostatnou lokaci s deklarací obrázků. Počet takových lokací je druhou mocninou počtu tlačítek - tj. v případě dvou tlačítek jsou to 4 možné kombinace (což je ještě bez problémů), ale v případě 9 tlačítek je to již 81 kombinací (a to realizovat bez chyby je velmi pracné). Tuto variantu nebudu ukazovat, je mimo rámec tohoto manuálu.
2. Druhou možností je pomocí řetězcových proměnných měnit jméno zobrazovaného souboru. A tuto variantu nyní ukážu.
Názvy souborů obrázků s opačným stavem musí být podobné, protože druhou část budeme vkládat do řetězce. Řetězec bude součástí parametru soubor v tagu obrazevtextu.
Do parametru soubor pro první tlačítko vložíme „vstup1$retezec1.jpg“.
Pokud $retezec1 nebude obsahovat text, FGBE zobrazí obrázek vstup1.jpg.
Pokud $retezec1 bude obsahovat písmeno „s“, FGBE zobrazí obrázek vstup1s.jpg. Název obrázku se totiž nejprve složí a pak teprve engine FGBE zavolá obrázek se složeným názvem.
Tolik teorie a teď následuje příklad:
<1>
<text obsah="Přišel jsi ke kamenným dveřím, nikde nevidíš kliku, ale vedle je několik tlačítek.">
<retezec 1=""> vymažeme řetězec
[promenna 34="1"]<retezec 1="s">[/] bylo-li stisknuto tlačítko 1, zobrazí se stiskuté tlačítko,
jinak zůstane nestisknutý stav
<obrazekvtextu soubor="chram\vstup1$retezec1.jpg" sirka="67" vyska="65" posunx="20" posuny="30" odkaz="454">
<retezec 1=""> vymažeme řetězec
[promenna 34="2"]<retezec 1="s">[/] bylo-li stisknuto tlačítko 2, zobrazí se stiskuté tlačítko,
jinak zůstane nestisknutý stav
<obrazekvtextu soubor="chram\vstup2$retezec1.jpg" sirka="67" vyska="65" posunx="87" posuny="0" odkaz="455">
<retezec 1=""> vymažeme řetězec
[promenna 34="3"]<retezec 1="s">[/] bylo-li stisknuto tlačítko 3, zobrazí se stiskuté tlačítko,
jinak zůstane nestisknutý stav
<obrazekvtextu soubor="chram\vstup3$retezec1.jpg" sirka="67" vyska="65" posunx="87" posuny="0" odkaz="456">
<2>
<454> kliknutí na obrázek vstup1.jpg
<text obsah="Stisknul jsi tlačítko, ozvalo se cvaknutí." barva="white">
<promenna 34="1">
<zpet> po návratu do lokace se zobrazi opacny stav tlacitka 1, tj. obrázek vstup1s.jpg
<455> kliknutí na obrázek vstup2.jpg
<text obsah="Stisknul jsi tlačítko, ozvalo se zacvakání." barva="white">
<promenna 34="2">
<zpet> po návratu do lokace se zobrazi opacny stav tlacitka 2, tj. obrázek vstup2s.jpg
<456> kliknutí na obrázek vstup3.jpg
<text obsah="Stisknul jsi tlačítko, ozvalo se zadunění." barva="white">
<promenna 34="3">
<zpet> po návratu do lokace se zobrazi opacny stav tlacitka 3, tj. obrázek vstup3s.jpg
<457>
4. příklad - zobrazení času
Někdo se mě ptal, jak zobrazuji čas v menu v mé hře.
Provádím to za pomoci proměnných. Obsah vzorců nebudu rozebírat, slouží pouze pro ilustraci a je nad rámec tohoto manuálu.
V proměnné 100 jsou hodiny, v proměnné 101 jsou minuty, v proměnné 103 je doba ve dnech od začátku hry. Proměnné 11 a 149 jsou pouze pomocné pro výpočty.
<vzorec 149="7569+(($103+139)/336)"> proměnná 149 obsahuje aktuální rok
<vzorec 11="(($103+139)%336)/28+1"> výpočet aktuálního měsíce
<retezec 2="$11."> vložíme ho do řetězce 2 pro zobrazení
<vzorec 11="(($103+27)%28)+1"> výpočet aktuálního dne
<retezec 1="$100:"> vložíme hodiny
[promenna 101<"10"]
<retezec 1="$100:0"> vložíme vodící nulu, jsou-li minuty menší než 10
[/]
<menu popis="$retezec1$101 $11.$retezec2$149 ($103.den)"> zobrazení výsledného času
Je-li v proměnné 100=15, 101=0, 103=1, výsledek v menu bude
„15:00 1.6.7569 (1.den)“.
5. příklad - zadání a vyhodnocení otázky
FGBE od verze 4.30 umožňuje interaktivní vyplnění odpovědi na otázku a její vyhodnocení pomocí dvou nových příkazů. Můžete zadat otázku a je očekávána odpověď od hráče.
Jejich použití ukazuje následující primitivní příklad.
<text obsah="Test otázky" barva="white">
<textoveokno otazka="Co roste na stráni?" retezec="1"> definice otázky a čísla řetězce, ve kterém bude odpověď
<srovnejretezce a="$retezec1" b="strom" vysledek="31"> zjištění správné odpovědi,
výsledek porovnání uloží se do proměnné 31,
správně=1, špatně=0
[promenna 31="0"] nadefinování vlastní akce
<text obsah="špatně" barva="white">
[/]
[promenna 31="1"]
<text obsah="dobře" barva="white">
[/]
Technická poznámka: nezáleží na velikosti písmen v odpovědi, tj. "strom"="StRom" atd.
6. příklad - skrytí otázky v POMMENU
Tento příklad je určen spíše pokročilým a znalým. Tvorba POMMENU je popsána v
návodu na proměnné.
Prefix a
preprefix je popsán v
jiném manuálu.
Někdo se mě ptal, jak skrývám otázku v POMMENU. Odpověď zní jednoduše pomocí řetězcových proměnných.
Pro účely otázky jsem si vyhradil řetězcovou proměnnou číslo 7 ($retezec7).
Upozornění: Tuto řetězcovou proměnnou nesmíte použít pro jiné účely ve hře!!!!
Místo standardní otázky ve FGBE <zmenotazku> používám následující konstrukt:
<retezec 7="Stiskneš?"><zmenotazku otazka="$retezec7" barva="white">
Po zobrazení POMMENU do tagu <zmenotazku> vložím prázdný řetězec:
<zmenotazku otazka="" barva="white">
Po návratu z POMMENU je třeba obnovit otázku. Jde to třemi způsoby.
- nadefinováním otázky v každé lokaci, ze které lze vstoupit do POMMENU
Pokud lze vstoupit do POMMENU pouze z několika lokací, není problém si tento stav ohlídat (v tomto případě nemusíte řetězcovou proměnnou vůbec použít, uvedl jsem to pro úplnost).
Ale pokud lze vstoupit do POMMENU skoro v každé lokaci, bylo by příliš pracné neustále kopírovat nebo vkládat otázku do každé lokace. Snadno se při tom udělá chyba. V tom případě je vhodné použít jedno z následujících dvou řešení (řešení 3 je jednodušší).
- pomocí proměnné a prefixu
V prefixu je definováno:
[promenna 109>"0"]
<zmenotazku otazka="$retezec7" barva="white">
<promenna 109=0>
[/]
Po vstupu do POMMENU spolu s otázkou nastavím proměnnou 109 na hodnotu 1. Prefix musí být vypnut v celém POMMENU!
Po opuštění POMMENU se v cílové lokaci provede prefix a tím dojde k obnovení otázky.
Pokud někoho napadla otázka: Co když je prefix v cílové lokaci zakázán? Tak vězte, že z takovéto lokace nesmí jít vstoupit do POMMENU. Musí to být ošetřeno ve skriptu.
- pomocí preprefixu u návratu z POMMENU
Návratový odkaz do hry vypadá takto:
<menu odkaz="$30" popis="zpět do hry" preprefix="preprefix_zpommenu">
Knihovna „preprefix_zpommenu“ má následující obsah:
<zmenotazku otazka="$retezec7" barva="white">
FGBE po kliknutí na odkaz nejprve vykoná obsah knihovny uvedené v parametru preprefix, tj. obnoví otázku a pak teprve provede skok zpět do hry na uvedený odkaz.
Pozn: Pro usnadnění psaní skriptů jsem si modifikoval šablonu Gamebook v PSPadu. Vložil jsem na konec šablony tuto definici:
[zmenotazkuMOJE |n Změní otázku v menu]
<retezec 7="|"><zmenotazku otazka="$retezec7" barva="white">