Skip to content

Story engine Analysis

Marek Polák edited this page Jul 28, 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

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čili v RPG hře. Pokud například v rámci kapitoly musí hráč splnit tři různé úkoly, měly by 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, nicméně není to nutné.

V 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 ji 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 samy.

  • 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 šly do grafu vkládat delší komentáře. Nemůže mít vstupní hrany.

  • OR vrchol – v mockupu světle šedý. 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 vedoucí 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, co jsou v blueprintech, 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.

Při návrhu samotných questů je doporučeno, aby byly všechny questy nutné pro postup ve hře subquesty main questu (nebo subquest subquestu main questu atd.). Pokud to tak designer udělá, jednoduchým projitím grafu hlavního úkolu, jeho subquestů atd. lze snadno zjistit, v jakém stavu hráč je a které všechny akce může hráč udělat pro postup ve hře, což může zjednodušit vývoj různých komponent, hlavně tedy hint systému.

Quest editor bude rozšiřitelný hlavně tak, že bude možné přidávat vlastní typy vrcholů. Ty všechny by ale měly stále plnit podmínku, že jakmile jsou jednou pravdivé, jsou pravdivé navždy,

Quest manager

Pro práci s questy během runtime bude na hlavní GameInstance 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, a to 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é samy splněné nejsou. Také bude pro každý vrchol možné získat pravdivostní hodnotu všech vstupních hran.

Je důležité zdůraznit, že Quest Manager nevynucuje závislosti v grafu vyznačené. Nastavení Flagu na true uspěje i v případě, že závislosti splněny nejsou – taková akce pouze vyvolá warning.

Clone this wiki locally