snowatch/carbon/ep1

Jak se říká u nás na vsi: First things first.

Takže, repozitář s kódem hry je zde: https://bitbucket.org/jIRI/snowatch.

Repo má issue tracker, nevím nakolik je přístupný z venku (nepřihlášený uživatel, který není členem týmu), ale mělo by být lze v něm sledovat jak postupuji a tak dále.

Do souboru snowatch/doc/decision-log.md postupně doplňuji něco jako dokumentaci a decision log, ale jelikož jsem, jako obvykle, nejprve nachrlil velké množství kódu, než jsem ho začal dokumentovat, jde to pomalu (pokud by nastal naprosto nepravděpodobný případ, že by někdo chtěl použít snowatch k psaní vlastní hry — ne, to momentálně není dobrý nápad, možná až dokončím [carbon] a celá věc se víc usadí).

Teď trochu technicky. Repo obsahuje v zásadě dvě věci: zaprvé snowatch jako takový, což je framework/engine/whatever ve kterém bych chtěl napsat několik her, které mám tak nějak ve frontě, a zadruhé [carbon], což je kódové označení první hry, kterou za pomocí frameworku píšu. Celá věc vzniká asi tak dva a půl roku (závratným tempem maximálně čtyř hodin týdně), s tím, že jsem začal programovat v ES6, pak jsem (kvůli typové kontrole a dalším důvodům) přešel na Typescript, jako UI framework (a pro aplikační bootstrap a dependency injection) používám Aurelia (jakkoliv by neměl být problém použít cokoliv jiného, protože těch závislostí na Aurelii není moc), styly píšu v SASS a celé to builduje Webpack. Prostě klasická SPA jak se dneska píše…

Nicméně. Po několika pokusech s Twine, jsem došel k závěru, že chci psát hry, které jsou více system-based než CYOA (a třeba takový Drift byl ke konci hodně náročný na údržbu a jakékoliv změny). Proto jsem zvažoval, že bych použil některý z existujících nástrojů pro psaní interaktivních fikcí, ale takový, který by podporoval distribuci ve formě webové stránky, přitom nebyl převážně klikací a nepoužíval vlastní DSL (ke kterým jsem si několika bolestivými zkušenostmi vypěstoval odpor) jsem tehdy nenašel. (Současně s tím, v mé profesní kariéře v té době vzniklo období, kdy mé web-dev schopnosti spíše zaostávaly, takže jsem potřeboval něco, co by mělo udrženo v kondici.)

Proto jsem se rozhodl napsat si vlastní framework/engine, který bude sice spíše deklarativní (komponenty ve hře by měly mít v kódu nějaký konvencemi předdefinovaný tvar), ale současně mi nebude nic bránit vrazit kamkoliv nějakou tu ad hoc funkci, když to bude potřeba. Také jsem v té době experimentoval s různými druhy designu a chtěl jsem zkusit něco jiného, než je takový ten obvyklý typ aplikací co se píšou v korporacích, kde každý soutěží v tom, kolik přechytřelých návrhových vzorů do aplikace nacpe a tak podobně.

Proto snowatch vznikl jako jakýsi hybrid mezi lehce objektově orientovaným a mírně funkcionálním návrhem pospojovaný přes pub-sub sběrnici.

Tolik prozatím k technické stránce věci (i když mám ještě několik dalších technických poznámek, které tu časem utrousím).

Pokud jde o [carbon]: [carbon] je hra, kterou jsem už dvakrát začal psát v Unity, ale náročnost tvorby 3D hry je pro mě prostě příliš velká. Modelování a ladění jemných detailů 3D světa je něco, co je nad moje síly jak časově, tak jaksi řemeslně (je rozdíl mezi tím napsat si nějaký ten A* nebo zjednodušený raycaster pro textovou hru a učit se jak psát shadery pro grafickou kartu), takže jsem skončil u varianty, kdy většina hry bude v textu a části, kde to dává smysl, naimplementuji pomocí canvasu.

To ovšem neznamená, že bych chtěl psát hru stejně, jako jsem to dělal, blahé paměti, na začátku devadesátých let na Didaktiku Gama. Jak už jsem řekl, chci hru, která bude zaměřená spíše na systémy než na skriptované události, takže každý předmět ve hře je entita, která má různé atributy a může být manipulována za pomocí různých schopností. Pokud mám bednu a chci se postavit před ni, nebo na ni, potřebuji aby měla horní a přední povrch a pro postavu dovednost přesunout se do nějakého vztahu s takovým povrchem. Pak už je otázka hry, aby propojila ty dvě věci dohromady a nabídla mi co je k dispozici.

Podobně s kompozicí textu, který jde směrem k uživateli — pokud hra umožňuje přepínat pohlaví postavy, nechci psát texty dvakrát pro každý rod, ale je na hře, aby dala dohromady pokud možno gramaticky správnou verzi věty. (A, omluvte mou výslovnost, čeština je v tomto směru kurva nejhorší jazyk na světě.)

Takže toto je zhruba směr, kterým se hra bude vyvíjet — existuje nějaká abstraktní narativní linka, které se chci držet, ale jinak by hra měla být nelinární (ve smyslu, že existuje nějaký souhrn úkonů, které je potřeba provést, ale je jedno v jakém pořadí a za pomocí jakých nástrojů) a zaměřená více na interakce systémů než na vyprávění jako takové. Což je pro mě, vzhledem k mým předchozím angažmá v textových hrách, spíše novinka, takže uvidíme jak to celé dopadne.

Tolik zatím na úvod, následovat bude pravděpodobně popis dalších technických aspektů a více vulgárních nadávek na adresu našeho rodného jazyka.

Zůstaňte (dobře) naladěni.

snowatch/carbon

Takže.

Řekněme, že tak dva až tři roky pracuji na své další interaktivní fikci (nebo textové hře?) a že jsem se s vývojem dostal do stavu, kdy bych potřeboval nějakou tu zpětnou vazbu. Nebo něco v tom smyslu.

Takže dokončím první puzzle hry, trochu ho vyleštím a zveřejním.

Například tady: [carbon].

A pak budu dál pracovat na zbytku a doufat, že se k tomu někdo vyjádří.

Takže asi tak.

PS: Další informace, detaily, zdrojový kód a možná i dokumentace budou následovat, ale momentálně je pro mě kritické dojít alespoň do této úvodní fáze.