8. 1. 2010

Hrátky s časem

Jak jsem psal níže, debata o hrách s možností měnit dějiny, byla široká. Inspirovala mne k samostatnému, nedlouhému článku.

Počítačové hry si celkem často berou jako téma cestování v čase, ovlivňování minulosti a odpovědnost za činy budoucí. Snad každé fantasy hovoří i osudu hlavního hrdiny, mnoho her otevřeně pracuje se skoky v časoprostoru a nezřídka jsme konfrontování s detaily minulosti, které masivně ovlivňují přítomnost či budoucnost. Existuje ale nějaká hra, která by systémově pracovala s časem a vývojem událostí?

Myslím si, že znám prakticky všechny hry, co kdy vyšly napříč platformami a jsem si jistý, že bych si hru pracující s ovlivňováním minulosti pamatoval. Mám teď na mysli opravdu systémové řešení, nikoliv adventuru Chronomaster ;). Je to přitom tak těžké?

Počítačové programy těží z toho, že dokáží zpracovat obrovské množství dat vysokou rychlostí - ale nejsou schopny samy od sebe vytvářet nové části sebe sama - nejsou schopny modifikovat svůj program. Jsou naprosto závislé na tom, co jim vnukne programátor do vínku a nikdy nebudou umět více. Alespoň ne v současnosti. Počítačové programy navíc neumí "pojmenovat" své produkty, jsou to jen jedničky a nuly. Bohužel pro nás, lidi, je tento přístup nevhodný a tak se programátoři snaží pojmenovat každý stav, abychom jako hráči věděli, co se to vlastně stalo, i když je to jen výpočet nějakého algoritmu.

Moje výchozí úvaha pro vytvoření hry s komplexním a systémovým cestování v čase je prostá. Pakliže existují hry, kde se posouvá čas vpřed, není problém se objevit na nějaké dřívější pozici, ale s aktuálními vědomostmi (ať už vědomosti hráče nebo hrané postavy) a výbavou - a tím ovlivnit další vývoj událostí. Stačí si jen vybrat, jaký časový paradox budeme aplikovat, respektive jestli pojmeme čas lineárně (determinismus) či jako vývojový strom (efekt motýlích křídel) nebo nějak kombinovaně.

Představme si třeba hru Quake. Se základní brokovnicí dojdu do místnosti plné potvor. SAVE. Místnost vyčistím, ale přijdu o mnoho nábojů a zdraví. Hned za místností je raketomet, který si vezmu. Nyní udělám LOAD pozice před místností (ještě plnou příšer) a pomocí cheatu si přidám raketomet - který jsem sebral v budoucnosti. Nyní vyčistím místnost mnohem rychleji a bez zbytečné ztráty krve. Pomineme to, že za místností bude opět raketomet - právě jsem popsal primitivní cestování v čase, které by šlo realizovat v každé hře naprosto jednoduše, pomocí jednoduchého skriptu. To, co si s sebou nesu do minulosti z levelu zmizí. Stačí tedy implementovat nějakou funkci, kterou si zarezervuji nějaký okamžik a vše, co se stane v následujícím období se obnoví, vyjma sebraných předmětů. Například hra Braid má tento princip dotažený k dokonalosti. Vymyslet takovou pěknou PortalTimeGun a máme to v kapse.

Zmíněné hry ale mají jeden problém. Jejich herní mechanismy jsou velice jednoduché a je jich velice málo. Stavba levelu musí přísně odpovídat možnostem hrané postavy. Vše je předem vymyšleno a definováno. Jakmile máme hru se stovkami herních mechanismů, které se vzájemně ovlivňují, narůstá programátorská činnost do extrému. Vezměme si za příklad opět film(y) Terminator. Kdyby se prvnímu Terminatorovi podařilo zabít Sarah Connor, nikdy by se nenarodil John Connor, vůdce lidského odboje v budoucnosti. Skynet uvažoval tak, že tím vyhraje válku proti lidem. Jak je ale možné, že tento superpočítač uvažoval takto primitivně?

1) Jak si Skynet mohl být jistý, že místo Johna Connora nenastoupí nějaký jiný, podobně schopný vůdce? Posílal by tedy Terminátory do minulosti tak dlouho, až by vyvraždil všechny lidi?
2) Jak Skynet pozná, že byl John Connor vůbec zabit? Při alternativním vývoji událostí by byl stvořen Skynet do světa bez John Connora a tím pádem by o něm ani nevěděl.
3) Pokud by smrt Johna Connora spustil alternativní průběh dějin (což by anulovalo bod 2), tak ve větvi, kde Skynet posílá do minulosti Terminátora, se nic nezmění a John Connor bude stále žít dál - nic se nezmění.
4) Filmem přiznaný paradox, že Skynet by nevzniknul bez toho, že lidé dostanou do ruky čip z hlavy Terminátora z budoucnosti, naznačuje, že součástí dějin jsou neúspěšné pokusy o zabití Sarah a Johna Connorových - tedy že je nutné Terminátory do minulosti poslat, ale musí selhat. Skynet si tak musí uvědomovat determinismus událostí, jejichž součástí je i cestování v čase. Proč si tedy myslel, že dokáže změnit minulost, když si sám musí pamatovat z dokumentace svůj vznik - cestování do minulosti vedlo k událostem, kterých je svědkem.
5) V případě, že by smrt Sarah nebo Johna Connorových opravdu vedl ke změně událostí, není mnohem větší riziko, že Skynet vůbec nevznikne a stanou se úplně jiné věci? Přeci jenom po řádění Terminátorů se lidstvo bude chovat trochu jinak. Skynet by navíc byl v přímém ohrožení sám - je potřeba zničit prvního Terminátora v lisu, aby z něj lidstvo vydolovalo mikročip. Jaký měl program Terminátor v případě, že by ve své misi uspěl?

Tyto problémy se samozřejmě týkají cestování v čase obecně a i když jsou vytržené z kontextu filmu, jde o otázky, které se úzce týkají pokusu o zpracování událostí počítačovou formou. Pro atraktivnost tématu předpokládejme, že cestováním do minulosti je možné měnit budoucnost a to v lineárním průběhu - nevznikají alternativní události. A jedině samotný cestovatel v čase si to bude pamatovat, ať cestuje kamkoli. Takže - ráno se probudím se strašnou kocovinou, teleportuju se do minulosti a varuji sebe sama, abych tolik nepil. Teleportuji se zpátky do současnosti a hle - hlava mne nebolí, protože si pamatuju sebe samotného, jak jsem se od pití odrazoval.

Tohle by bylo jednoduché a v zásadě to popisuje výše uvedený příklad se hrou Quake. Když se ale podívám na bod 5 kritiky Skynetovy logiky, musím si klást otázku - co se krom toho, že mne nebude bolet hlava, ještě změní? Neumím si představit, že by mělo dojít například k smrti mé osoby (tedy neměl bych se ke komu vrátit do současnosti) nebo ke konci světa třeba. Ale docela možné je, že se probudím bez kocoviny, ale s mrtvou kočkou pod peřinou.

Představme si tu situaci. Moje současné já varuje moje minulé já, aby nepilo. Pak se pokojně teleportuji do současnosti a když si jdu lehnout, najdu mrtvou kočku. Něco není v pořádku. Takže se opět teleportuji do minulosti a sleduji konání svého minulého já, které vede k přitáhnutí mrtvé kočky do postele. A můžu se opět pokusit zabránit i této události. Vlastně se mohu sledovat až do okamžiku, kterým se teleportuji do minulosti. A i před tím bych se mohl varovat...

Hlavní problém tedy je v množství proměnných, které ovlivňují události. Těch je enormní množství a není možné je dokonale podchytit. Druhý hlavní problém je ve výběru konkrétního časového paradoxu. Ať už z fyzikálního hlediska nebo z filozofického. Takže by bylo dobré začít na něčem jednoduchém.

Jeden z nejjednodušších modelů cestování v čase je jistě hra "Život", neboli "Conway's Game of Life". Jde o primitivní algoritmus, kde je minimální množství proměnných a přesto se hra vyvíjí sama od sebe, díky jednoduchým pravidlům. Ta jsou jenom čtyři a aplikují se na síť čtvetcových políček, čili každé políčko má osm sousedů.

1) Buňka s méně než dvěmi sousedy zemře na osamělost.
2) Buňka s více než třemi sousedy zemře na nedostatek prostoru.
3) Buňka se dvěmi nebo třemi sousedy se dožije další generace (tedy herního kola).
4) Mrtvá (prázdné políčko) buňka s přesně třemi sousedy se oživí (neboli rozmnoží se).

Tato hra má tu výhodu, že ji lze velice snadno ovlivnit - pří správně navržené struktuře můžeme hovořit až o efektu motýlích křídel - ale stejně tak nepromyšleným náhodným zásahem je možné, že nedocílíme žádné zásadní změny. Hra se dá vysledovat od počátku až do konce, nekonečně dlouho a vždy je jasné, co se stane, pokud se do systému nezasáhne. Pokud ale hráč v libovolném okamžiku hru zastaví, modifikuje počet buňek, dokáže změnit budoucnost vývoje. Ba co víc, hru by šlo postavit obousměrně - že hráč jedním zásahem změní zásadně i minulost vývoje. Zkrátka dojde k výpočtu dle čtyř základních pravidel v obou směrech časové linie.

V případě jednodušší hry by měl hráč za úkol udržet při životě co nejvíce buněk po co nejdelší dobu. Měl by tedy k dispozici nástroj, který by mu vypočítal vývoj života od začátku až do konce - systém bude navržen tak, že konec znamená smrt všech buněk. Hráč bude moci posuvníkem lézt do minulosti a přidávat nebo naopak ubírat buňky. Následující výpočet mu prozradí, o kolik se prodloužil nebo zkrátil život svěřené populace.

Všimněte si, kolikátá generace to je. Ten algoritmus si o zpracování do formy interaktivní hry přímo říká!

Na tomto příkladu je tedy jasně vidět, že cestování v čase a ovlivňování minulosti pomocí jednoduchého časového paradoxu je možné realizovat. Je tedy na čase si vzít na mušku komplexnější systém.

Tuším, že to byl první Command and Conquert (nebo Red Alert?), který v sekci multiplayer zavedl pojem "skirmish", tedy souboj s počítačem, který simuluje síťovou hru. Od klasických misí se skirmish liší především tím, že počítač i hráč mají nachlup stejné podmínky a lze regulovat obtížnost jednotlivých počítačem řízených stran. Samozřejmě matematika realtime strategií se v zásadě neliší od výše zmíněné hry života (teoreticky stačí přidat systém kámen nůžky papír a při rovnocenném rozložení sil lze simulovat mnoho "generací života" v obou směrech toku času. Představme si ale na chvíli takový skirmish ve hře Civilization, kde je matematika mnohonásobně komplikovanější a tedy k jednomu výsledku může vést více cest.

V tomto bodě již musíme vyloučit možnost historické změny a sledovat události, které vedly k situaci, kterou hráč pozměnil. Čas začíná plynout jenom jedním směrem. Když se najednou uprostřed mayské vesnice v roce 2000 před Kristem objeví tank poslaný z budoucnosti, není možné nasimulovat historii tak, aby se tam tank objevil přirozeným vývojem (což je teoreticky možné u Game of Life). Rozhodně ale můžeme sledovat vývoj událostí po objevení tanku (když přijmeme herní premisu, že 2000 let před Kristem dokázali Mayové tank ovládat, měli pro něj munici a palivo). Jak to zahýbe s vývojem událostí v jižní Americe? No nedivil bych se, kdyby Mayové dokázali ovládnout celý svět, díky této výhodě.

Hra by tedy spočívala v tom, že by hráč měl k dispozici záznam kompletního skirmishe mezi osmi civilizacemi, přičemž jeho úkolem bude zajistit vítězství Mayů. Podle historického záznamu by Mayové byli vybiti v roce 1950, kdy už sice měli k dispozici relativně moderní zbraně, ale měli jich málo a obecně to s nimi šlo z kopce. Hráč by nyní dostal k dispozici stroj času, kterým by mohl tuto skromnou výbavu - jeden tank - poslat do hluboké minulosti a pak nechat opět spočítat zbytek skirmishe. Aplikujeme časový paradox, kdy je možné poslat do minulosti tank, aniž by následující události měly k vývoji technologie tanků vůbec vést - tedy přísná lineární časová osa bez větvení - byť nelogická. Nemusím snad dodávat, že tento model vyžaduje naprostou eliminaci všech náhodných elementů.

Nešlo by ale jenom o válku. Hráč by mohl změnit pořadí vynalézání nových objevů, měnit náboženství nebo zaměření na ekonomiku. Bylo by docela možné, že se Mayové začnou díky výhodě ve formě tanku vyvíjet tak rychle, že přeskočí rovnou k laserovým zbraním - třeba už kolem roku 1500. A hráč by měl možnost opět poslat do minulosti první bojové lasery, klidně do stejného okamžiku, jako tam poslal tank - výhoda mayského národu bude natolik enormní, že vítězství je nevyhnutelné.

Co se ale stane, že si laser pošlu do doby před posláním tanku? Objeví se pak tank "z ničeho nic"? Podle mne nikoliv. Po jakémkoliv zásahu do minulosti dojde k výpočtu zbytku událostí (ať už by vedly k vítězství Mayů nebo k jejich konci) - a v tomto výpočtu není možné vzít potaz události budoucí - tedy poslání onoho tanku. Ten se prostě neobjeví, ale hráč bude mít po dokončení výpočtu událostí znovu posílat do minulosti jednotky nebo příkazy ze současnosti respektive budoucnosti.

V zásadě se jedná o systém ála Quake z prvních odstavců článku k dokonalosti - ovlivňujeme stovky herních mechanismů a proměnných naráz a jelikož jsou algoritmy pevně dané, vždy se dočkáme nějakého výsledku. Můžeme tak velice snadno říct, že jeden tank ovlivnil historické události tak a tak. Trochu do problému se dostáváme v okamžiku, kdy by se součástí herních pravidel stal samotný stroj času - ale s tím Civilizace naštěstí nepočítá ;).

Když jsme navrhovali hru Connor vs Skynet, předcházela tomu mnohahodinová debata. Jeden z bodů, kde jsme se všichni shodli, byla textová počítačová hra. Definované historické události vedoucí k válce lidí se stroji. A vymýšleli jsme, jak ovlivnit události tak, aby k válce vůbec nedošlo. Nápadů bylo mnoho, ale chyběl tomu systém. A tak jsem si vybavil mou oblíbenou hru Princess Maker 2.

V této hře vychováváme dívku a máme obrovskou svobodu v tom, jak ji budeme přetvářet. Základem je její číselná charakteristika - její síla, obratnost, charisma, ale také desítky dovedností a zručností v mnoha oborech. Na to následují široké možnosti akcí, které princezna konfrontuje. Chodí na zpěv, na malbu, věnuje se čtení nebo se naopak věnuje rozvoji tělesných schopností, posiluje nebo chodí na výpravy s mečem přes rameno. Hra má přes 200 různých zakončení a některých specifických lze docílit jen správnou kombinací všech událostí.

Když si tedy představím svět složený z obrovského množství podobně definovaných postav, začínám se dostávat do ideální fáze. Už neřeším nějaké jednotky nebo globální události, ale konkrétní osobnosti, přičemž počet variant je přesně definovaný, konečný a pojmenovaný. Spojit Princess Maker například se Sims by pro hru s časovými skoky bylo nejlepší. Ze Sims by se převzala vůle osobností po něčem toužit a změny tužeb v závislosti na okolí. Z Princess Makeru zase detailní statistika všech možných vlastností a pojmenování stavů. Čili jednotlivé konce Princess Makeru by se vyhodnocovaly každý "tah" hry a následně by se generoval další tah. Tím by události dostaly realistický vzhled.

Zbývá tedy vymyslet jen mechanismy, kterými hráč bude ovlivňovat okolí jednotlivých NPC. Mohl by ovládat jedinou postavu a sledovat chování ostatních, které by se odvíjelo na základě toho, jaké mají tužby. Hráč by mohl k NPC promlouvat a motivovat je k jiným činům, dát jim třeba nějaké prostředky, peníze - nebo je naopak zrazovat či dokonce zabít. Hráč by pak mohl nahlížet do různých částí historie a sledoval by, nakolik je ovlivnění historie patrné a s jakým výsledkem. Motivace příběhu by mohla být daná i tím, že v jistém historickém okamžiku se NPC dozvědí o hráčově postavě pravdu - že je schopná cestovat v čase a měnit minulost. A jak z toho vybruslit? To bych nechal na hráči.

Definice konečných možností programu nemusí nutně znamenat, že dojde k omezení herního obsahu. Je to jen otázka správné derivace herních proměnných, kterých můžou být pořád stovky - a na to navázat herní mechanismy, které dáme do rukou hráče. Druhou podmínkou je volba časového paradoxu, přesněji řečeno otázka, zda okolí hráčovy postavy smí vědět o cestování v čase respektive jestli i tyto postavy budou mít k dispozici stroj času. Pro účely hry bych obojí "zakázal", jelikož pak se dostáváme do problematiky přesahující rámec této úvahy.