24. 9. 2012

Samotér - game design

Je to již přes rok, co jsem se poprvé zamyslil nad realizací pokračování slavné osmibitové hry Saboteur, absolutní božárny od Durell. Text s názvem Saboteur 3 - koncept se zabýval hrubými rysy, kterými by se měla hra vyznačovat. Od té doby jsem ale v hlavě rozpracovával vizi do větší hloubky a hledal jsem programátora, který by dokázal takovou hru napsat s tím, že level design bych si vzal na starosti já. Moje žádost byla vyslyšena, což men motivovalo k sepsání detailnějšího design dokumentu, na jehož základě by už mělo být možné něco udělat. Programátor se však posléze omluvil, že na to prostě nemá čas (a kdo má, že ano) a mně přišlo líto se textu zbavit. Takže jej nyní publikuji na blogu, jako inspiraci pro ostatní. Hra dostala pracovní název Samotér.



Ještě než sem okopíruji původní texty, měl bych se zmínit o příběhu hry. V prvním textu jsem se zmínil, že je poměrně malé množství her, které by se odehrávaly v období první světové války. Je to zřejmě způsobeno tím, že dané období neposkytuje dostatečně explozivní události. Existuje samozřejmě celá řada leteckých simulátorů, případně tahových strategií, ale v kontextu mainstreamu dneska nevídáme běžně first person střílečky nebo jiné populární žánry. Pro mne je však právě nevyspělost bojové technologie hnacím motorem, jak podpořit stealth způsob hraní, aby hráč proti sobě neměl tisíce ozbrojených vojáků s neomezenou municí.

V souvislosti s tímto zaměřením jsem dostal zásadní nápovědu od Matěje Smetany, který briliantně hru zasadil do prostředí Maginotovy linie. Naprosto geniální a originální myšlenka s sebou přinesla hned několik výhod. Za prvé - hra se odehrává někdy v letech 1930-1940, což je naprosto ideální. První válka je již za námi a druhá právě začíná. Tím pádem mohu operovat ze začátku hry s rozestavěnými a prakticky neobývanými pevnostmi jako tutorialem, abych postupem hry vybudoval pořádný odpor.


Druhá výhoda je samotná stavba pevností v dané linii. Jenom pohled na průřez připomíná mapu do nějaké počítačové hry, právě typu Saboteur. Volba nemohla dopadnout lépe, díky Matěji! Třetí výhoda pak přišla sama. Hlavní hrdina by byl německý důstojník, mající za úkol zmapovat v naprostém utajení celou síť pevností zmapovat a samozřejmě sabotovat. Klidně by to mohl být hlavní důvod kapitulace Francie v roce 1940 - samozřejmě by existence tohoto aspektu byla utajená. Docházím tím k tomu, že zasazení hry do tohoto prostředí vyhovuje nejen mé touze po uvěřitelnosti, ale také nahrává zpracování.


Když jsem pak Googlil další informace pro historické reálie Maginotovy linie, našel jsem další perfektní téma. A sice - v rámci pevností byly také lékařské patra, starající se o zraněné vojáky. V souvislosti s tím jsem si našel jméno slavného chirurga jménem Harold Gillies. Tento průkopník je považován za otce plastické chirurgie, který již v roce 1917 opravil obličej zraněnému vojákovi pomocí takzvané "flap surgery". Ta spočívá v odstřižení kusu tkáně z jedné části těla a přešití na jiné. Jelikož v té době ještě neexistovaly antibiotika, měla tato metoda přednost, že se nemusí řešit dopad na imunitu - dárce i příjemce je ta samá osoba.

Po přehození kusu tkáně bylo ale potřeba zajistit, aby přešitá tkáň měla přístup k živinám a krevnímu oběhu. Toho se docílilo tak, že tkáň byla pořád spojena s místem jejího původu pomocí "trubky", která se odřízla mezi místem původu a cílem aplikace. Blbě se to popisuje - lepší bude, když se podíváte na nějaké fotografie. Pokud nejste slabší povahy, najdete i zde sérii fotografií, které demonstrují úspěchy této metody. Moje pointa je, že v rámci Maginovoty linie se mohou vyskytovat běžně takto zranění a operovaní vojáci, čímž mám k dispozici parádní a originální motiv hnusu, který hru může (na několika místech) provázet. Vtip by byl i v tom, že hráč (ani jeho postava) by neměla tušení o tom, že tyto zrůdy jsou ve skutečnosti lidé v přechodné fázi metody a že s velkou pravděpodobností po několika letech nebude na tváři (vyjma pár jizev) nic extra poznat. Hráč by měl získat dojem, že tam Francouzi vyvádějí nějaké tajné experimenty, což by mělo vytvářet sekundární motivaci ke zničení Maginotovy linie (bohužel se mi nepodařilo zjistit, jestli Gilliesova metoda byla používaná v dané době i v nacistickém Německu).

Čili, motivace pro hru a základ level designu bychom měli. Nyní následují citáty z design dokumentu, který jsem psal pro mého dvorního programátora.

1. Hrubý nástřel

Prostor 2D - průchozí (background), neprůchozí (zdi), neprůchozí otvíratelné (dveře), krycí nízké (kryjí při skrčení, joystick dolů), krycí vysoké (výklenky, kryjí při stání, joystickem nahoru), krycí horní (větrací šachty, průchozí stropy, joystick nahoru+fire), krycí dolní (větrací šachty v podlaze, joystick dolů+fire), definice míst na podlaze, kudy chodí stráž (dokola nebo dokola s pauzou).

Postava umí běhat, chodit skrčená, plazit se (v úzkých prostorech v podlaze/stropu), důležité je, že se rozeznává stav kdy je skrytá a kdy ne, respektive kdy ji někdo může vidět či vidí a kdy není viděna. Pokud postava je viditelná (stojí v chodbě, ve které někdo je), dělá FIRE něco jiného, než když není viděna (a to ať už protože je v krytu nebo že ji nepřítel zrovna nevidí)

Dvě akční tlačítka - FIRE a TIME.

Nepřítel - je-li postava vidět, tlačítko FIRE mlátí, případně použije zbraň v ruce.
Není-li postava vidět, má nad sebou nepřítel od určité vzdálenosti běhající ukazatel zprava doleva, který má tři barevné zóny - ideální úspěch, úspěch, speciální úspěch, neúspěch. Velikost těchto zón je definována různými vlastnostmi postavy i nepřátel. Rychlost ukazatele je v tomto režimu ale konstantní.
Ideální úspěch a úspěch znamená, že postava potichu zlikviduje nepřítele (počet animací likvidace - ve stoje, ve stoje z krytu (dojde ke skrytí mrtvoly), v podřepu, v podřepu za překážkou (skrytá mrtvoly), z podlahy (skrytí mrtvoly), ze stropu (skrytí mrtvoly).
Speciální úspěch - varianta téhož, ale nedojde ke skrytí mrtvoly.
Neúspěch - nepřítel se vyvleče, případně vytáhne hrdinu z krytu a má automaticky útok. V ten okamžik je postava v režimu "viděný".

2. Detaily

Princip hry

Postava se snaží být co nejčastěji v krytu, ze kterého lze dělat tiché výpady. Aby mohla zvýšit svoje šance na úspěch, smí si postava omezeně zpomalit čas. Zpomalení času také aktivuje extra činnosti, které budou kontextové (a tajné). K hraní jsou tak potřeba nejméně dvě tlačítka - kontextové FIRE a pak univerzální TIME.

Postava má možnosti být ve skrytu:
- za nízkou překážkou (bedna, krb, stůl)
- za vysokou překážkou (výklenek, strom)
- ve vysoké poloze (větrací šachta ve stropě, větve)
- v nízké poloze (díra v podlaze, větrací šachta, kanál)
- za dveřmi (speciální případ)

Pokud je postava ve skrytu, může potichu zlikvidovat nepřítele.

Postava která není v krytu:
- může se volně pohybovat po definovaném prostoru
- může propadnout dírou v podlaze
- může slézt dolů dírou do nižšího patra (obrazovky)
- může lézt nahoru dírou do vyššího patry (obrazovky)
- může lézt po žebříku oběma směry
- může být spatřena nepřítelem (viditelnost se ověřuje směrem pohledu nepřítele a pak překážkami typu dveře)
- může sbírat předměty, otvírat dveře, lézt po žebřících
- může se pokoušet o tichou likvidaci zezadu

Likvidace nepřátel - tichá:

- nepřítel se musí přiblížit k postavě
- v ten okamžik se nad hlavou objeví "ukazatel s čárkou", která má tři barevné oddíly - zelená, žlutá, červená. Velikost těchto oddílů je definovaná dovednostmi postavy a typem nepřítele.

Žlutá a zelená zóna:

- úspěšný stisk tlačítka znamená tichou likvidaci nepřítele, který spadne mrtvý na zem
- úspěšný dlouhý stisk tlačítka znamená tichou likvidaci a schování nepřítele do krytu
- pokud se hráč trefí do zelené zóny, nabije si trochu ukazatel zpomalení času
- pokud hráč aktivuje zpomalení času, zmizí zelená zóna, zvětší se žlutá a zmenší červená

Červená zóna:
- neúspěšný stisk tlačítka znamená vytažení postavy z krytu - postava je nyní v očích nepřítele vždy viditelná, nemůže se v této místnosti znova skrýt, dokud místnost neopustí
- neúspěšný dlouhý stisk tlačítka znamená, že postava je nejen viditelná, ale navíc jí nepřítel uštědří jeden zásah automaticky.

Likvidace nepřátel - hlasitá:

- útok z blízka ze stoje
- útok z blízka v podřepu
- útok z blízka ve skoku
- použití střelné či vrhací zbraně na dálku - nebere se v ohled nějaká balistika - předmět prostě letí napříč místností, dokud se netrefí do nepřítele nebo jiné překážky (dveře, zeď)
- při útoku na dálku i na blízko je možné zpomalit čas. Objeví se ukazatel s čárkou a hráč se tak může pokusit o "headshot", případně likvidaci jedním úderem. Ukazatel má jen dvě barvy - červená a žlutá. Při neúspěchu přijde o veškerý zpomalovač a ještě dostane automaticky zásah

Dveře

- dveře představují speciální prvek v designu, neboť blokují výhled jak nepřátelům, tak postavě
- pokud postava přijde ke dveřím a klekne si, "dívá se skrz klíčovou dírku" a vidí, kdo stojí za dveřmi - ale jen jednoho nejbližšího nepřítele
- pokud postava přijde ke dveřím a stojí, "naslouchá skrz dveře" a vidí "stíny" nepřátel, pokud se zrovna pohybují (a to všechny pohybující se nepřátele)
- dveře lze otevřít i zavřít, ovlivňovat tím aktivně viditelnost
- pokud za dveřmi stojí nepřítel zády, je možné udělat tichou likvidaci dle vzoru napsaného výše. S tím rozdílem, že podrží-li hráč tlačítko v úspěšné zóně, dojde ke stažení mrtvoly za dveře
- pro zavření dveří musí stát hráč na specifickém vedlejším políčku (aby nedošlo ke kolizi s případným soubojem nebo tichou likvidací)***tohle ještě domyslím, jestli by se dveře neotvíraly nějak jinak, než FIRE tlačítkem***

Speciální případy, kdy se objeví barvený ukazatel s čárkou.
Hráč bude objevovat experimentálně různá místa, kde se objeví ukazatel. Ten bude odvolávat na unikátní skript. Pár příkladů:
- pokud na hráče letí projektil, může si zpomalit čas. U projektilu se objeví ukazatel. Pokud má postava v ruce střelnou zbraň, může trefením do žluté zóny projektil odrazit, trefením do zelené zóny dokonce vrátit směrem k nepříteli se všemi následky
- některé předměty půjde sebrat jen po nakliknutí žluté nebo zelené zóny, jinak bude postava například zraněna (například sebrat něco z hořícího krbu - bude možné si zpomalit čas)
- ukazatel se může objevit i během bossfightu (se kterými zatím nepočítám, ale je to jenom příklad)
- někteří nepřátelé mohou mít vzorce chování - například budou spát nebo budou opilí - které mohou náhodně generovat ukazatel s čárkou po neúspěchu dojde k jejich probuzení

Umělá inteligence

- nepřátelé mají možnost chodit pouze po přístupné podlaze, tj. maximálně ke dveřím
- nepřátelé mají definovanou trajektorii patrolování (tj. nechodí nutně vždy po celé délce místnosti)
- mají vždy nadefinováno jak rychle chodí, kdy se na chvíli zastaví, kdy se otočí (sekvence tiků, která se opakuje)
- pakliže uvidí postavu, automaticky se přepnou do režimu alarmu
- v alarmu začne nepřítel střílet směrem k postavě
- není-li nepřítel ozbrojen, běží směrem k postavě a snaží se ji zbít zblízka
- pokud se postava skryje nebo zavře dveře, nepřítel běží k postavě a z krytu ji vytáhne / otevře dveře
- v alarmu není možné nepřítele potichu likvidovat - nebude se objevovat ukazatel s čárkou
- během alarmu je možné zpomalit čas a udělat "headshot" (viz výše)
- pokud nepřítel vidí jiného nepřítele na zemi, běží k němu (jenom jednou), do stavu alarmu se ale přepne až v okamžiku, kdy se přiblíží k mrtvole (tj. je možné ho potichu zlikvidovat, pokud je hráč skryt na půl cesty)
- pokud je postava ozbrojena, nepřítel nejprve zakřičí a tím zalarmuje všechny v místnosti (i ty, co jsou za dveřmi), teprve pak sám střílí nebo běží k postavě
- pokud nepřítel stojí u mrtvoly a nevidí postavu, zavolá si posily, které de facto nahradí mrtvou postavu
- v rámci místnosti mohou být nadefinovány předměty, které fungují stejně, jako mrtvola, tj. přilákají nepřítele (může jít i o předměty, které postava nosí s sebou v inventáři / "zbraně")
- nepřítel přilákaný k předmětu, který není mrtvola, zůstane stát na místě
- nepřátelé se při opuštění místnosti nerespawnují, přijdou ale o svůj status alarmu - vrací se na svou patrolující trasu. Mrtvoly ale zůstávájí **** Jedna z věcí, kterou musím domyslet *****


Obecné ustanovení

- postava může sbírat předměty ze země, u sebe může mít vždy jen jeden aktivní předmět (typicky zbraň)
- postava může neomezeně sbírat "příběhové" předměty, nutné pro splnění mise - a adventurně tyto předměty používat na předem daných místech (typicky klíče)

3. Nepřátelé

Typy nepřátel:

Situace:

- doba reakce vyjadřuje dobu, po kterou se voják dívá daným směrem, než začne něco dělat (typicky pohyb k cíli nebo útok)
A) Uvidí postavu
B) Uvidí mrtvolu na zemi
C) Uvidí podezřelý předmět
D) Uslyší podezřelý zvuk
E) Je zasažen projektilem nebo jiným typem útoku

Základní voják

A) Doba reakce 10 tiků, pak běží automaticky k postavě a útočí zblízka
B) Doba rakce 10 tiků, pak běží k mrtvole a začne ji zkoumat. Po 30 ticích spustí alarm
C) Doba reakce 10 tiků, pak běží k předmětu a zůstane u něj 60 tiků dřepět a zkoumat ho. Pak ho sebere (15 tiků) a vrací se k patrolování
D) Reakce je okamžitá, Otočí (5 tiků) se a 30 tiků čeká. Pokud se zvuk v tomto intervalu zopakuje, běží automaticky směrem ke zdroji zvuku. Pokud se pak zvuk již neozve, vrací se po 60 ticích ke své patrole. Pokud stojí blízko zdroje zvuku a je poblíž možnost krytu, automaticky do krytu sáhne a vytáhne postavu, je-li tam. (Platí pro všechny druhy krytů). Je-li zdrojem zvuku předmět, začne ho zkoumat 60 tiků, pak ho sebere a vrací se k patrole.
E) Po zranění se 7 tiků nehýbá, pak se otočí se správným směrem (5 tiků) a běží směrem k postavě, aby mohl útočit zblízka

Spící voják (varianta základního, ale i jiných)

A) nevidí
B) nevidí
C) nevidí
D) První zvuk ho neprobudí, pokud se ale ozve dvakrát zvuk v intervalu kratším, než 30 tiků, probudí se, vstane (30 tiků) a vydá se zkoumat zdroj zvuku (v tento okamžik funguje jako jiný voják z výběru)
E) Automaticky umírá (ekvivalent headshotu)

Opilý voják (varianta základního, ale i jiných)

A) Doba reakce na spatření je 20 tiků, pak spustí alarm
B) Doba reakce je 30 tiků, pak běží k mrtvole a po 60 ticích spouští alarm
C) Doba reakce je 30 tiků, pak běží k předmětu, zkoumá ho 90 tiků, sebere ho (15 tiků) a vrací se na svou pozici
D) Reakce je okamžitá, otočí se (5 tiků) a pak 60 tiků čeká. Ozve-li se zvuk znova, běží ke zdrojí zvuku. Pokud se po dalších 90 ticích zvuk neozve, vrací se na svou patrolu. Pokud se zvuk ozve, sáhne do krytu. Případně začne předmět (zdroj zvuku) zkoumat 90 tiků, pak ho sebere a vrací se na místo.
E) Automaticky umírá (ekvivalent headshotu)

Seržant

A) Reakce 10 tiků, pak vytáhne pistoli (5 tiků) a střílí. Pokud dvakrát mine, běží směrem k postavě, aby ji mohl vytáhnout z krytu a útočit zblízka
B-E) Identické se základním vojákem

Kapitán
A) Okamžitá reakce, střílí bez váhání bez jakéhokoliv zpoždění. Pokud jednou mine, přiběhne blíže na vzdálenost "10 tiků", tj. že je-li hráč v krytu a pokusí se z něj vylézt, kapitán ho zcela jstě trefí okamžitým výstřelem. Pokud postava není viditelná, ale kapitán o ní ví, za 180 tiků spustí alarm (30 tiků), který přivolá posily (základní vojáky, kteří se již ke krytu přiblíží dost na to, aby postavu vytáhli)
B) Reakce 30 tiků, pak rovnou spustí alarm.
C) Reakce 10 tiků, pak běží k předmětu, zkoumá ho 30 tiků, sebere ho za 15 tiků a jde na svou patrolu
D) Reakce je okamžitá, otočí se správným směrem (5 tiků) a čeká 90 tiků, jestli se zvuk nezopakuje. Pokud ano, přiblíží se ke zdroji zvuku. Pokud se do dalších 90 tiků zvuk zase ozve, začne zkoumat předmět a sebere ho (30+15 tiků) nebo vytáhne postavu z krytu
E) Jako základní voják.

4. Tiky

Pro představu vycházím z toho, že 1 tik = 1 frame, tedy že 30 tiků je jedna vteřina.
Většina akcí popsaná níže spadá pod možnost zpomalit čas (vyjma ukazatele s čárkou), tj. animace se pak pouštějí s dvojnásobným počtem tiků.
Logicky pak platí, že většina tiků se aplikuje ve stejné míře i na nepřátele.

Pohyb postavy:
- celou obrazovku přeběhne postava za 90 tiků
- celou obrazovku přejde postava v podřepu za 180 tiků
- otočení postavy 5 tiků
- chůze nepřátel je 180 tiků na obrazovku
- po žebříku vyleze postava za 45 tiků (celá výška místnosti)
*** Nevím, jak je to s rozlišením obrazu, ale nebylo by blbý udělat herní obrazovku tak velkou, aby 1 tik odpovídal násobku pixelů, tj. například 360 pixelů na šířku nebo podobně, snad rozumíš. Není samozřejmě rozhodnuto.

Schování se do krytu:
- horní a dolní kryt - postava se schová za 10 tiků
- vysoká a nízká pozice - 30 tiků

Útoky:
- zblízka 10 tiků (platí i pro nepřátele)
- zblízka kopem 15 tiků (delší dosah - naopak netrefí, pokud je postava příliš blízko nepřítele)
- zblízka z podřepu 10 tiků
- na dálku - 10 tiků, rychlost projektilu 45 tiků na obrazovku (90 při zpomalení času)
- prodleva mezi útoky je 10 tiků

Interakce:
- otvírání i zavírání dveří 15 tiků
- sebrání předmětu ze zěmě nebo jeho položení rovněž 15 tiků
- automatické dopňování zdravíčka - jedno srdíčko za 90 tiků

Tichá likvidace nepřátel:
- ve stoji 30 tiků, ve stoji se skrytí* mrtvoly 20 tiků
- v podřepu v krytu 30 tiků, se skrytím* mrtvoly 20 tiků
- zpoza dveří 35 tiků včetně otevření dveří
- zpoza dveří se skrytím mrtvoly* 25 tiků
* = připočítá se také čas nutný k delšímu podržení FIRE tlačítka!

Ukazatel s čárkou
- standardní doba běhu čárky je 30 tiků, se zpomalením 60 tiků
- pro speciální úspěch (dlouhé podržení FIRE) je potřeba držet tlačítko po dobu 10 tiků, aby to systém vyhodnotil, jako "dlouhé podržení"
- výdrž "bulletime" je na 180 tiků (ale to se bude časem zvyšovat, na začátku hry třeba nebude bullettime vůbec)

Zranění
- v případě pádu z výšky je postava neovladatelná po dobu 15 tiků
- v případě zásahu projektilem nebo pěstí postava nemůže okamžitě reagovat, je neovladatelná po dobu 7 tiků. V tomto případě bych udělal výjimku ve zpomalení času - 7 tiků platí i v případě, že je zpomalený čas, nikoliv 14 - aby hráč měl možnost snadněji utéci za cenu ztráty zpomalovače

Aktivity nepřátel (AI) (bude rozepsáno v extra dokumentu):
- zaregistrování zvuku (výstřel, útok, otevření některých dveří) - 10 tiků (vykřičník nad hlavou), pak následuje otočení 5 tiků (postava se může stihnout do té doby skrýt a nespustí se tak alarm)
- pokud nepřítel uvidí postavu, trvá mu 10 tiků, než zareaguje (opět vykřičník u hlavy), pokud se hráč do té doby skryje, nespustí se alarm fáze
- když nepřítel uvidí na zemi mrtvolu (nebo jiný podezřelý předmět), nejprve 10 tiků zpozorní (vykřičník u hlavy), pak přiběhne k objektu. Je-li objekt mrtvola, "spustí alarm". Pokud jde o nějaký předmět na odlákání pozornosti, sebere ho (15 tiků) a pak se vrací k patrolování na původní místo

Alarm:
- nepřítel začne volat kolem sebe (30 tiků) za 120 tiků přiběhne náhrada mrtvých vojáků, kteří zaujmou místo k patrolování
- někteří nepřátelé mohou spustit alarm dříve nebo za jiných okolností, než začnou bojovat. V takovém případě přijdou posily nad rámec původního počtu nepřátel (**** bude upřesněno v dané, levelu ****)