Skip to content

Story engine Analysis

MatousK edited this page Jul 30, 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 akcí a subquestů, jež hráč musí pro postup ve hře vykonat, která je nezávislá na ostatních questech ve hře. Nemusí však odpovídat tomu, co bychom za 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, neboli každý úkol lze plnit bez toho, aby hráč udělal cokoliv v rámci ostatních questů. V klasické adventuře očekáváme, že jeden quest odpovídá jedné kapitole, nicméně není to podmínkou.

V questu jsou definovány všechny akce, které hráč musí udělat pro jeho splnění, a proměnné, které jsou k plnění questu potřebné. Hráč však sám nebude 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. Následující mockup znázorňuje, jak si představujeme hlavní editační prostor questu:

Quest reprezentujeme orientovaným grafem závislostí. Každý vrchol představuje nějaký hráčův cíl, který může být buď splněn, nebo nesplněn. Vrcholům budeme říkat Flag. Pokud vede z vrcholu A hrana do vrcholu B, 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. Graf může obsahovat 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ý. Je true v okamžik, kdy jsou všechny vstupní hrany true.

  • 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é jej lze splnit, a ta se pak zobrazí ve vrcholu.

Na každém questu bude možné nadefinovat libovolný počet 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. Půjde též, stejně jako na blueprintech, definovat vlastní události (EventDispatcher).

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 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ě o nové, vlastní typy vrcholů. Všechny by však měly stále plnit podmínku, že jakmile jsou jednou splněné, jsou splněné navždy.

Quest Manager

Pro práci s questy během runtime bude na hlavní GameInstance k dispozici třída Quest Manager, poskytující 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.

Quest Manager pak bude poskytovat 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