Možná si někteří z vás vzpomínají na náš report z GDC Europe 2012, kde Stefan informoval o zajímavém nástroji pro modelování herních systémů z rukou Jorise Dormanse, nazvaném Machinations Tool. Na pozadí toho všeho však stojí mnohem více, než se zdá a proto jsme se rozhodli pro vás připravit tutoriál, v němž vám ukážeme nejen jak pracovat s tímto báječným nástrojem, ale seznámíme vás i s myšlenkami a ideologií frameworku, na němž je postaven.

A půjdeme mnohem dále. Machinations Framework má mnoho co nabídnout a byla by škoda toho nevyužít. V následujících dnech se můžete těšit na pravidelná vydání tohoto čtyřdílného tutoriálu, ovšem budeme pokračovat i dále řadou tématických článků pramenících z Machinations. Nebudu vás tedy již dále zdržovat a vrhneme se na to.

Machinations Framework

Joris Dormans, držitel doktorského a magisterského titulu z oboru game designu a kulturních studií, se již řadu let zabývá výzkumem herní teorie, speciálně pak analýzou a formalizací herních mechanik a patternů. Prvopočátky Machinations vznikly jako součást jeho dizertační práce, ovšem dnes již framework dosáhl verze 4.01 a neustále se vyvíjí kupředu.

Základní myšlenkou frameworku je odhalení a analýza rekurentních patternů na pozadí herních mechanik. K tomuto účelu byla zapotřebí jistá formalizace, a proto vznikl jazyk Machinations. Tento jazyk umožňuje na různých úrovních abstrakce jednotnou formou vyjádřit herní mechaniky, vztahy mezi nimi a jejich následnou analýzu. Nepřímo tak poskytl i báječný nástroj herním designérům pro balancování a prototypování svých her.  Jak sám jeho autor ale prohlašuje, nejde s ním namodelovat všechno (alespoň prozatím). Speciálně pak rozsáhlé a příliš komplexní systémy.

Samotný nástroj Machinations Tool je zautomatizovaný „překladač“ jazyka, který uvede celou strukturu do chodu a umožní v reálném čase zkoušet a testovat formalizovaný model. Co si pod takovým jazykem představit? Nemusíte se bát, nečeká vás žádné programování. Jazykem se v tomto případě rozumí pouze způsob zachování informace. K tomu slouží prvky jazyka, jako jsou Skladiště (Pools), Brány (Gates), Registry (Registers)  a spousta dalších, jejichž vlastnosti a chování si postupně ukážeme. Pro lepší představu, jak Machinations funguje, se můžeme podívat na následující diagram:

Nahoře vidíte „notions on the structure of games“, neboli poznámky o struktuře her. Tyto poznámky jsou základem pro budování modelu herních mechanik (codified by) a utvoření diagramu. Z těchto diagramů jsou patrné rekurentní patterny, které se ve více čí méně obměněné podobě vyskytují napříč širokému spektru her a mohou být implementovány a analyzovány pomocí Machinations Toolu. Jak poznámky, tak rekurentní patterny a data, která nástroj vygeneruje, vytváří podklady pro design konkrétních her, což vede k vytvoření nových herních mechanik a kruh se uzavírá.

V našem tutoriálu se zaměříme především na políčka „diagrams“ a „tool“.  Samotný nástroj pak naleznete na stránkách Jorise Dormanse nebo na oficiální wiki (či vždy na konci článku). Pojďme si nyní říct něco o základním elementu, na němž je celý framework postaven – zdroje.

Zdroje (Resources)

Zdroje jsou základním elementem Machinations a v podstatě i všech herních systémů. Ať už jsou to virtuální peníze, které hráč vlastní, počet životů, surovin, kartiček v balíčku, počet nepřátel či například množství obsazených teritorií. V zásadě by se dal herní zdroj charakterizovat jako:

Proměnlivý a kvantitativně vyjádřitelný herní prvek      

Zdroje mohou proudit, vznikat i zanikat a to na miliony způsobů, díky čemuž je každá hra unikátní. Machinations Framework pro účely vyjádření modelu proudění zdrojů definuje řadu elementů. Zvažme například následující jednoduchý model karetní hry.


Tento model simuluje zamíchání balíčku karet a následné rozdání sedmi karet hráči. Pro jednoduchost modelu se však orientujeme pouze na dvě základní typologie karet – černá a bílá. Jak je vidět, lze vymodelovat několik úrovní abstrakce. Kdybychom se například potřebovali zaměřit na konkrétní typ karty, měli bychom místo dvou barev čtyři a tak dále.

Vlevo se nachází tzv. trigger, nebo-li spouštěč. Jeho kliknutím dojde k vygenerování vždy 26ti karet každé barvy prostřednictvím producenta (trojuhelník), které jsou společně umístěny do jednoho balíčku karet (kolečko). Kliknutím na kolečko označené jako „draw cards“ pak dojde k náhodnému výběru sedmi karet z balíčku, které se přesunou do ruky hráče.

Je zřejmé, že zdroje jsou zde v tomto případě dva – černá nebo červená karta. Ty se přesouvají do společného balíčku a následně pak do rukou hráče, čímž dochází k pohybu zdrojů. Podobným způsobem bychom pak mohli vybudovat celý model karetní hry, jako je například black-jack. Účelem tohoto modelu je pouze ukázat základní princip, na kterém je framework postaven.

Obecná nastavení

Pakliže v Machinations Tool nemáte vybraný žádný jiný prvek, v pravém sloupci se vám zpřístupní nastavení diagramu. Zde lze nastavit několik základních vlastností modelu.

Časový mód

Časový mód modelu určuje způsob redistribuce zdrojů. Vzhledem k tomu, že některé elementy mohou být automatické, jiné interaktivní a jiné pasivní (viz. níže), je třeba blíže specifikovat, jakým způsobem se chovají. K dispozici jsou tři druhy časových módů:

  • Synchronní mód – v synchronním módu se všechny akce odehrávají v jeden časový tik, jehož délka je specifikována intervalem. Interaktivní a pasivní prvky mohou v jednom intervalu vykonat jen jednu akci a ta se vykoná vždy při jeho konci.
  • Asynchronní mód – v asynchronním módu se v daný časový interval vykonají pouze akce automatických elementů. Interaktivní a pasivní elementy vykonají svou akci okamžitě.
  • Tahový mód – tahový mód je speciálním případem asynchronního módu, kdy se namísto intervalu určí počet akčních bodů a každému interaktivnímu prvku je přiřazena jeho cena za použití. Jakmile dojde k vyčerpání všech akčních bodů pro daný tah, spustí se akce všech automatických prvků a začíná nové kolo.

Distribuční mód

Distribuční mód určuje způsob přesouvání zdrojů. Machinations Tool podporuje dva způsoby distribuce:

  • Fixed Speed – všechny zdroje se přesouvají stejnou rychlostí, přičemž jejich přesun je znázorněn animací. Rychlost přesunu je určena množstvím přesouvaných zdrojů a časovým intervalem vždy tak, aby se v rámci jednoho časového intervalu přesunuly všechny zdroje. V případě synchronního časového módu tedy na distribučním módu nezáleží. V asynchronním módu však může tento způsob distribuce ovlivnit výsledek modelu a proto nemusí být vždy žádoucí.
  • Instaneous – všechny zdroje se přesunou okamžitě v průběhu časového intervalu bez animace a zpoždění. V tomto případě tedy nedochází v asynchronním módu ke zpoždění surovin v důsledku animace.

Symboly

Machinations Tool aktuálně využívá 4 symbolů:

Dice (D) – náhoda
Skill (S) – hráčova manuální schopnost ovládat hru
Multiplayer (M) – semináhodné ovlivnění hry ostatními hráči
Strategy (ST) – semináhodné ovlivnění hry hráčovou strategií

Tyto symboly lze použít namísto labelu zdrojových proudů(viz. níže) jednoduše tak, že jako hodnotu labelu uvedete písmeno v závorce (pozor, musí být velké). Tím se text nahradí automaticky symbolem.

V nastavení diagramu pak naleznete čtyři položky s názvy těchto symbolů (Dice, Skill, Multiplayer, Stragegy). Zde lze definovat jejich význam. To může být jakákoli matematická formule, většinou však s použitím náhody.

K vyjádření náhody se v Machinations používá formát xDy, kde x definuje koeficient a y počet prvků, z nichž je „losováno“. Tedy například 2D11 znamená hod 11tistěnnou kostkou, přičemž výsledek hodu je vynásoben dvěma. Lze ale používat i složitější formule jako například (2D11 + 8)*2D8.

 V každém časovém intervalu je pak tato formule vyhodnocena a všude tam, kde je použit daný symbol, je použita výsledná hodnota této formule.

Color Coding

Color coding je mocný nástroj Machinations Toolu pro rozlišení typu zdrojů. Je-li určena u nějakého zdroje barva, pak pouze prvky diagramu stejné barvy mohou s těmito zdroji operovat. Konkrétní užití si ukážeme později. Prozatím nám postačí tuto možnost znát.

V nastaveních diagramu lze určit také další věci jako jméno, autora a rozměry. Ty jsou však tak zřejmé, že se jimi nebudeme dále zdržovat a vrhneme se rovnou na konkrétní prvky Machinations frameworku.

Resource Connection (Zdrojový proud)

Zdrojový proud určuje, v jakém množství proudí zdroje z jednoho elementu na druhý. Například fakt, že hráč obdrží na začátku sedm karet, určuje zdrojový proud. Jejich kouzlo však spočívá v tom, že způsobů, jak definovat výši těchto zdrojů, je hromada.

Toto množství lze definovat pomocí labelu, který může být následujících tvarů:

Typ Hodnota Příklad Efekt
Prázdný Roven hodnotě 1
Hodnota x 0, 2, 9, 0.5, 1.8 Proudem projde množství rovno dané hodnotě. Desetinná čísla svou desetinnou část přenášejí do další vlny.
Náhodná hodnota Dx, yDx, x% D9, 2D11, 75%, 180% V každém časovém intervalu se vyhodnotí náhodná hodnota která je pro daný interval hodnotou proudu. Hodnoty vyšší než 100% jsou rovny 1 surovině pro každých 100% + šance zbývající pravděpodobnosti.
Zlomky x/y ¼, 2/2, D3/2, D3/(D8+1) Určuje, kolik intervalů trvá propuštění jedné suroviny. V případě náhodných hodnot se nová hodnota vygeneruje vždy při dosažení aktuálního počtu intervalů.
Vše all all Při každém výstřelu vyšle všechny suroviny které aktuálně má.
Náhodný výběr drawx draw1, draw5, draw8 Suroviny brané ze zdroje se neberou ve stejném pořadí, v jakém do zdroje přišly, nýbrž v náhodném pořadí.

Všimněte si typu draw a vzpomeňte si na náš první příklad s karetní hrou. Zde byl draw použit pro vyjádření „zamíchaného“ balíčku, který vrací karty určitých barev náhodně, nikoliv ve striktně daném pořadí.

Také si vzpomeňte na výše zmíněné symboly. Můžete totiž do labelu umístit i reprezentační znaky symbolů (D,S, M, ST). Tehdy je label nahrazen výrazem určeným v nastavení diagramu. Takto můžete nadefinovat pomocí jedné formule například strategii hráče a na vhodných místech použít zástupný symbol. Jakmile budete chtít otestovat odlišnou strategii, pouze změníte formuli a spustíte nový test.

Speciálním případem proudu je situace, kdy jeho zdrojovým elementem je brána (gate). Zde se pravidla pro formát labelu liší, nicméně si je ukážeme, až budeme brány probírat. Kromě labelu lze proudu nadefinovat i další nastavení:

  • Barva – vizuální barva labelu. Vhodná pro odlišení a důležitá při užití barevného kódování (viz. Color Coding).
  • Tloušťka – tloušťka čáry v diagramu. Slouží pouze k vizuálnímu odlišení.
  • Minimální/maximální hodnota – určuje maximální a minimální možnou hodnotu labelu. Toto ovlivňuje vše, jak hodnoty generované náhodnými výrazy, tak například i úpravy hodnot pomocí stavových modifikátorů (viz. níže). Jakmile je hodnota nad, nebo pod limitem, je okamžitě zaokrouhlena na hodnotu maxima/minima.

S proudy se setkáte napříč celým tutoriálem a jsou prakticky nevyhnutelnou součástí každého modelu. Budeme se k nim tedy ještě často vracet. Stejně nevyhnutelným prvek je ovšem také sklad.

Pool (Sklad)

Jedním ze základních elementů Machinations je tzv. sklad, který je znázorněn jako kruh a reprezentuje „držitele“ zdrojů. V případě herních mechanik se může jednat o hráče samotného, ale i o virtuální prvky, jako například nepřítel, NPC, banka nebo i silně abstraktní prvky jako náhoda nebo herní svět.

Účelem skladu je pouze držet, získávat a předávat zdroje za podmínek určených vztahovou spojnicí (viz. níže). Ve výše uvedeném modelu jsme měli dva sklady.  Jeden pro balíček karet a jeden pro karty v rukou hráče.

Každý sklad může být jedním ze 4 typů:

Passive – Slouží pouze jako držitel zdrojů. Sám o sobě nikdy nevyvolá akci spojenou s přesouváním zdrojů, pouze pokud je spuštěn triggerem (viz. níže)
Interactive - Vykoná akci pouze v případě, že na něj hráč klikne nebo je vyvolán pomocí AI scriptu
Automatic – Vykoná akci při každém časovém intervalu
OnStart – Vykoná akci pouze jednou při startu a poté se chová stejně jako passive.

Každý sklad může být v jednom ze 4 modů, které určují, co se stane, dojde-li k akci (tzv. fire):

  • Pull any – pokusí se prostřednictvím všech vstupních proudů natáhnout počet surovin definovaných proudem bez ohledu na jejich dostupnost.
  • Pull all – vytáhne vždy maximální možný počet surovin rovný výši definované vstupními proudy a to pouze tehdy, jsou li všechny surovin ze všech proudů k dispozici.
  • Push any – vystřelí (předá) vždy maximální možný počet surovin do výstupních proudů bez ohledu na jejich dostupnost. Pakliže není dostatek surovin k dispozici, postupně se rovnoměrným způsobem přijímané suroviny rozdělují do všech výstupních proudů, takže dojde k co nejrovnoměrnějšímu rozdělení.
  • Push all – Pokud dojde k akci, vystřelí vždy maximální možný počet surovin roven výší definovanou vstupními proudy a to jen tehdy, jsou-li tyto suroviny k dispozici.

Mimo jiné každý sklad definuje také:

  • Color – barva elementu. Slouží k vizuálnímu odlišení částí modelu a pro účely barevného kódování. Následně připojené prvky automaticky přejímají barvu zdroje.
  • Thickness – tloušťka čáry okolo skladu. Všechny následně připojené prvky automaticky přejímají tloušťku čáry zdroje.
  • Label – popisek. Slouží pro popisné účely a pomocí labelu se také odkazuje ve scriptech.
  • Actions počet akcí, které stojí akce interaktivního skladu v turn-based módu.
  • Resources – barva potažmo typ suroviny, které sklad v počátku diagramu obsahuje.
  • Number – počet surovin ve skladu v počátku diagramu.
  • Max – maximální počet surovin ve skladu. Pokud se pokusí vytáhnout (pull), nebo je mu poslána (push) nějaká surovina, je zahozena, je-li maximální limit dosažen. Pokud je hodnota -1, žádný limit není definován.
  • Display limit – počet surovin, při kterém se zobrazení změní ze symbolického na numerické. Maximální možná hodnota je 25.

Podívejme se nyní na následující schéma:

Na první pohled se vám může zdát model složitý, ovšem prozatím se soustřeďte pouze na modrou část v oblasti „Player“. Pravá část pouze simuluje velmi jednoduchou umělou inteligenci a vrátíme se k ní později.

Jedná se o model strategické hry, kdy vaším cílem je dosáhnout populace 30ti lidí dříve, než váš protihráč. K dispozici máte peníze, jež pravidelně v každém tahu získáváte z banky. Ty můžete utrácet buďto za ekonomii, výzkum, nebo na získávání zdrojů. Každá oblast přitom stojí různou částku a různý počet akčních bodů. Jakmile dosáhnete dostatečného počtu bodů v každé oblasti, tyto body se promění ve vyšší populaci. Pokud stisknete tlačítko „Run“, můžete si celý model vyzkoušet v reálném čase a to klikáním na elementy označené dvojkruhem (interactive pool). Kliknutím vždy utratíte peníze, které máte k dispozici společně s daným počtem akčních bodů (číslo v závorce). Pokud chcete, můžete svůj tah přeskočit kliknutím na „Skip Turn“.

Nyní si vyzkoušejte následující:

  • Zahrajte si model a vypozorujte co nejvíce souvislostí. Jaké zdroje proudí a kudy? Proč? Kde je definováno jejich množství? Pokud nevíte, jděte dále. Postupně si všechno ukážeme později.
  • Nyní se podívejte na graf znovu a pokuste se identifikovat co nejvíc elementů Machinations a  všechny jejich vlastnosti. Soustřeďte se ale jen na modrou oblast hráče.

Povedlo se? Výborně! Pravděpodobně by se z takového modelu nikdy nestal veleúspěšný trhák, nicméně nám umožnil dobře ilustrovat téměř vše, co jsme si již ukázali. Pokud se vám podařilo všechno určit správně, gratuluji. Pokud ne, zde je detailnější popis diagramu:

Nejprve si všimněte skladu s číslem 100 a všech jeho přidružených symbolů. Tento sklad je zde prakticky navíc a počátečních 100 surovin by mohla banka obsahovat rovnou. Nicméně nám umožnil ilustrovat jeden ze 4 základních typů: OnStart (poznáte jej podle symbolu s).

Číslo 100 znamená množství surovin ve skladu a znak & znamená, že je v módu „push all“. Běžně se tento mód označuje „p&“ (viz. sklad banky), ovšem zde má pouze výstupní proudy, takže je písmeno p  vynecháno.

Tyto výstupní proudy jsou namířeny do tří dalších skladů – peníze hráče, peníze počítače a banka. Číslo 2 znamená, že proudí 2 suroviny. All znamená, že pošle všechny zbývající. Při spuštění diagramu tedy dojde k vyvolání akce skladu typu OnStart, který rozešle všechny své suroviny až do maximální výše definované výstupními proudy (2 + 2 + all, tedy všechny).

Bonusová otázka: Je nutné, aby tento sklad byl v módu push all?

 Odpověď: Není. Stejně tak může být v módu push any, neboť má vždy dostatek surovin aby uspokojil všechny své výstupní proudy, čili bude výsledek stejný.

Nyní se podívejme na banku. Hvězdička u ní značí základní typ automatic, tedy že v každém časovém intervalu (tik nebo kolo tahového módu), vyvolá akci specifikovanou jeho módem. Ten je „push all“ (všimněte si, že zde není písmeno p vynecháno). V každém kole tedy banka rozešle 2 suroviny každému hráči a to jen tehdy, má-li dostatek bodů pro oba (push all).

Bonusová otázka: Co se stane když bude v módu push any?

Odpověď: V tomto případě nic vážného, neboť 100 surovin je číslo dělitelné 4mi a žádný jiný sklad zdroje neodebírá, takže vždy vyjde na všechny. Pokud by ale byl počáteční zdroj např. 101, chování by se lišilo.

Postupujeme dále. Na řadě je sklad označený jako „money“. Tento nám ukazuje základní typ „passive“. Nedělá nic, pouze drží, přijímá a odevzdává suroviny. Na první pohled se tedy zdá, že na jeho módu nezáleží, neboť sám o sobě žádnou akci nikdy nevyvolá. Přesto je třeba myslet na tzv. triggery, které mohou externě vyvolat akci i pasivních skladů (například v části PC jsou prvky Economy, Research a Resources pasivní, ale mohou být spuštěny náhodným triggerem. Více ale později.

Už víme, od koho suroviny přijímá (banka). Pojďme se podívat, kdo je odebírá. Sklady Economy, Research, Resources a Skip Turn představují poslední ze 4 typů: interactive. Ty svou akci vyvolají v případě, že na ně hráč (nebo skriptem definovaná AI) klikne. Je-li nastaven turn-based časový mód, je možné těmto skladům nastavit počet akčních bodů, které jejich akce vyžaduje.

Vezměme si nejprve první tři. Všichni jsou v módu pull all (značí se pomocí „&“). Pokud na ně hráč klikne, pokusí se získat počet surovin roven množství definovaném jeho vstupními proudy. Každý z nich má připojen jen jeden vstupní proud, tedy toto množství je rovno jejich labelu. Například Economy vyžaduje jen 1 surovinu, Research 3 a Resources 5. Pokud nebude v bance dostatek surovin, nestane se nic a hráč pouze utratí akční body. Pokud je surovin dost, utratí akční body a přesunou se suroviny z banky do příslušného skladu.

Může se tedy stát, že hráč nemá v bance dost zdrojů na utrácení, nebo je utrácet nechce a přesto mu zbývají akční body. Proto je zde políčko Skip Turn, které nic nedělá a pouze utratí dostatek bodů aby ukončil tah hráče.

Bonusová otázka: Co kdyby byla maximální hodnota proudu vedoucího z skladu Money do skladu Resources 3?

Odpověď: Maximální a minimální hodnoty vždy přebíjí hodnotu labelu. To znamená, že nenachází-li se hodnota labelu uvnitř intervalu, platí buďto maximální nebo minimální hodnota. Jelikož je label větší než maximum, hodnotou proudu by se stalo číslo 3.

Zbývá nám už jen poslední sklad – Population. Tento je také automatický, ovšem v odlišném módu – pull all. To znamená, že se v každém tahu pokusí vytáhnout všechny suroviny ze všech vstupů – Economy(5 surovin), Research (2 suroviny) a Resources(1 surovina). Pokud byť jediný z nich nemá dostatek, nestane se nic. A tím se utváří základní mechanika hry – pokud rozdělíte suroviny špatně nebo neefektivně, nebudete mít dostatek surovin na dosažení 30ti členné populace, nebo vás předběhne počítač.

Přesto je vidět, že se nejedná ani tak o hru, jako spíš o nějaký druh logické hádanky. Obsahuje jednu dominantní strategii, která ve většině případů vede k vítězství. Jakmile dojde k jejímu odhalení, hra už přestává být zábavnou. Možná bychom mohli přidat nějakou náhodu, nebo více provázat vazby mezi elementy. Možná bychom mohli přidat více dynamických prvků, které nám umožní suroviny násobit nebo dělit, či proměňovat na jiné typy. Nebo bychom mohli vyvinout sofistikovanější mechanismus příjmů a výdajů. To všechno Machinations umí a jak uvidíte dále v závěru tutorialu, umožní nám vymodelovat i vcelku obstojný herní systém.

To už je ale pro dnešek vše. Příště se podíváme na feedback loop mechanismus a prozkoumáme další 3 prvky Machinations – stavový modifikátor, bránu a rozhodčího. Takže nashledanou za dva dny u příštího dílu :)

žádný komentář k “Machinations Tutorial I. – Úvod do Machinations”
  1. Stefan Durmek říká:

    Konečně nějaký pořádný tool pro system game design. Chtěl jsem se na něj vrhnout hned po GDC, ale když jsi mi řekl, že připravuješ tutorial, věděl jsem, že se vyplatí počkat. Díky, Michale! Skvělá práce!

  2.  
Zanechej komentář

K zanechání komentáře ke článku musíte být přihlášen. Přihlásit »