Skip to content

Story engine Analysis

MatousK edited this page Jul 22, 2018 · 14 revisions

Story engine

Story engine je souhrnné označení pro nástroje sloužící pro tvorbu příběhu hry. Základní stavební jednotkou tohoto enginu jsou takzvané questy. Každý quest ve hře bude reprezentován jedním data assetem typu QuestAsset.

Quest v kontextu našeho enginu označuje skupinu věcí, které hráč musí pro postup ve hře udělat, která je nezávislá na ostatních questech ve hře. Ale nemusí souhlasit s tím, co bychom jako quest označily v RPG hře. Pokud například v rámci kapitoly musí hráč splnit tři různé úkoly, měly být rozděleny do zvláštních questů jen a pouze tehdy, pokud se jejich plnění navzájem neovlivňuje. Tedy každý úkol lze plnit bez toho, aby hráč udělal cokoliv pro ostatní questy. V klasické adventuře očekáváme, že 1 quest = 1 kapitola.

Ve questu jsou definovány všechny věci, co hráč musí udělat pro jeho splnění, a proměnné, které jsou k plnění questu potřebné. Nebude ovšem sám tato data měnit – to je zodpovědnost herních skriptů.

Vždy bude ve hře právě jeden main quest, který bude aktivní po celou dobu hry.

Quest editor

Pro návrh questů vytvoříme grafický editor. Zde je mockup, který znázorňuje, jak si představujeme hlavní editační prostor questu:

Quest reprezentujeme orientovaným grafem závislostí. Každý vrchol reprezentuje nějaký hráčův cíl, může být buď splněn, nebo nesplněn. Vrcholům budeme říkat Flag. Pokud je mezi vrcholy A a B hrana, znamená to, že A musí být splněno předtím, než je splněno B. Pro usnadnění počítáme s tím, že vrchol, který je jednou splněn už nikdy nemůže být nesplněn. Obsahuje tyto typy vrcholů:

  • Simple flag vrchol – V mockupu je žlutý. Reprezentuje bool proměnnou, která je zpočátku false. Na true jí může nastavit jakýkoliv skript. Na false nastavit nelze.

  • Is In Inventory vrchol – V mockupu modrý. Nastaví se na true v případě, že hráč sebere daný předmět. Nekontroluje se dál ovšem, jestli má hráč předmět stále v inventáři. To už si musí skripty hlídat sami.

  • Subquest vrchol – v mockupu tyrkysový. Odkazuje se na jiný quest. Tento Flag bude splněn v okamžik, kdy se splní cílový quest.

  • Komentářový vrchol – v mockupu fialový. Vždy true. Slouží k tomu, aby šli do grafu vkládat delší komentáře. Nemůže mít vstupní hrany.

  • OR vrchol – v mockupu světle šedy. Je splněn právě v případě, že alespoň jedna ze vstupních hran je splněna.

  • END vrchol – v mockupu tmavě šedý. Existuje právě jeden, je v grafu defaultně a nelze ho smazat. Jakmile jsou splněny všechny vrcholy vedouci do END vrcholu, je splněn i END Flag a s ním se považuje za splněný celý graf.

´ Pro každý vrchol pak bude možné volitelně nadefinovat lokaci, ve které lze quest splnit, ta se pak zobrazí ve vrcholu.

Na každém questu pak půjde nadefinovat libovolně mnoho proměnných. Pokud nebude vybrán žádný vrchol, v Properties půjde definovat proměnné stejně jako na blueprint objektech. Negarantujeme ovšem, že budou k dispozici všechny typy proměnných, garantujeme proměnné typu string, bool, int, float. Také půjde na grafu definovat vlastní události (EventDispatcher), znovu stejně, jako na blueprintech.

Quest editor bude podporovat i validaci, ve které ověří, že žádný quest neobsahuje cykly.

Quest manager

Pro práci s questy během runtime bude na hlavní GameInstance (TODO: Přidat odkaz) k dispozici třída Quest Manager. Přes tu bude možné získávat reference na konkrétní questy ve hře.

Na questu bude možné získávat a pokud možno i měnit, hodnoty jednotlivých proměnných a vrcholů. Zároveň bude možné poslouchat události na questu, jak ty uživatelem definované, tak ty, které se vygenerují automaticky – PropertyChanged event pro každou proměnnou a Flag a QuestCompleted event pro celý quest.

Skrze Quest Manager pak bude možné získat i seznam všech splnitelných Flagů, tj těch, jejichž vstupní hrany jsou splněné, ale které sami splněné nejsou. Také bude pro každý vrchol získat pravdivostní hodnotu všech vstupních hran.

Clone this wiki locally