MASARYKOVA UNIVERZITA F}w¡¢£¤¥¦§¨  AKULTA INFORMATIKY !"#$%&'()+,-./012345

Vyvoj´ hern´ıhoeditoru na platformˇeFlash

DIPLOMOVAPR´ ACE´

Bc. Martin Jakubec

Brno, jaro 2014 Prohl´aˇsen´ı

Prohlasuji,ˇ zeˇ tato diplomova´ prace´ je mym´ puvodn˚ ´ım autorskym´ d´ılem, ktere´ jsem vypracoval samostatne.ˇ Vsechnyˇ zdroje, prameny a literaturu, ktere´ jsem priˇ vypracovan´ ´ı pouzˇ´ıval nebo z nich cerpal,ˇ v praci´ rˇadn´ eˇ cituji s uveden´ım upln´ eho´ odkazu na prˇ´ıslusnˇ y´ zdroj.

Vedouc´ıpr´ace: RNDr. Barbora Kozl´ıkova,´ Ph.D.

ii Podˇekov´an´ı

Rad´ bych podekovalˇ Ba´reˇ Kozl´ıkove´ za skvelˇ e´ veden´ı diplomove´ prace´ a za vsechenˇ cas,ˇ ktery´ mi venovala.ˇ Dale´ chci podekovatˇ Michalu Gab- rielovi za konzultace a odborne´ rady a celemu´ tymu´ CUKETA, s.r.o. za po- skytnut´ı zazem´ ´ı priˇ vyvoji´ hern´ıho editoru.

iii Shrnut´ı

C´ılem diplomove´ prace´ je navrhnout a implementovat jadro´ hern´ıho en- ginu a editoru pro konfiguraci hern´ıch mechanismu˚ na platformeˇ Flash. Hern´ı engine bude modularn´ ´ı, aby jej bylo moznˇ e´ rozsiˇ rovatˇ a vyuzˇ´ıvat pro ruzn˚ e´ typy her. Soucˇast´ ´ı prace´ bude ukazka´ hry nakonfigurovane´ v tomto editoru. V neposledn´ı radˇ eˇ se budu snazitˇ prezentovat prakticke´ zkusenostiˇ z vyvoje´ realn´ e´ hry.

iv Kl´ıˇcov´aslova hern´ı editor, level editor, hern´ı engine, vyvoj´ her, , game en- gine, Flash Player, hern´ı prumysl,˚ hern´ı navrh,´ game design

v Obsah

1 Uvod´ ...... 3 2 Historie hern´ıhopr ˚umyslu ...... 5 2.1 50.–60. leta´ ...... 5 2.2 60.–70. leta´ ...... 5 2.3 80. leta´ ...... 6 2.4 90. leta´ ...... 8 2.5 2000–soucasnostˇ ...... 9 3 Hern´ıenginy a editory ...... 10 3.1 Hern´ı enginy ...... 10 3.1.1 Historie ...... 11 3.2 Dostupne´ flashove´ knihovny ...... 11 3.2.1 FlashPunk ...... 11 3.2.2 Citrus Engine ...... 12 3.3 Vykreslovan´ ´ı ...... 12 3.3.1 3D vykreslovan´ ´ı ...... 12 3.3.2 2D vykreslovan´ ´ı ...... 13 3.3.3 Prom´ıtan´ ´ı hern´ıho svetaˇ ...... 13 3.4 Hern´ı editory ...... 14 3.4.1 Historie ...... 14 3.4.2 Hra jako editor ...... 15 4 Flash jako hern´ıplatforma ...... 16 4.1 Historie Flashe ...... 16 4.2 Vyuzitˇ ´ı v soucasnostiˇ ...... 17 4.3 Vykreslovan´ ´ı ve Flashi ...... 17 4.4 Vyhl´ıdky do budoucna ...... 17 4.5 Alternativy ...... 18 4.5.1 Microsoft Silverlight ...... 18 4.5.2 HTML 5 ...... 18 4.5.3 ...... 19 4.5.4 iOS ...... 19 5 Vyvoj´ hern´ıhoenginu ...... 20 5.1 Jadro´ ...... 20

1 5.1.1 World ...... 20 5.1.2 Player ...... 21 5.1.3 Entity ...... 21 5.1.4 IAction ...... 21 5.1.5 IModule ...... 22 5.1.6 Diagram trˇ´ıd ...... 22 5.2 Trˇ´ıdy a techniky pro efektivn´ı praci´ ...... 22 5.3 Komunikace v s´ıti ...... 26 6 Level editor ...... 28 6.1 Konfigurace chovan´ ´ı ...... 28 6.1.1 Typy konfigurace ...... 29 6.1.2 Konfigurace meho´ enginu ...... 29 6.1.3 Reprezentace akc´ı a ulozenˇ e´ reakce na udalosti´ . . . . 30 6.1.4 Verzovan´ ´ı konfigurace ...... 30 6.1.5 Ukazka´ popisneho´ XML souboru ...... 32 6.1.6 Ukazka´ konfigurace akce ...... 33 6.1.7 Ukazka´ konfigurace udalosti´ ...... 33 6.2 Navrh´ uzivatelskˇ eho´ rozhran´ı ...... 33 6.2.1 Casovˇ a´ osa ...... 34 6.2.2 Rˇ ´ıd´ıc´ı panel ...... 35 6.2.3 Konfiguracnˇ ´ı panel ...... 35 6.2.4 Flow-based programming ...... 35 6.2.5 Akce zpetˇ a vpredˇ ...... 38 6.2.6 Komponenta pro urcenˇ ´ı pozice ...... 38 6.2.7 Klavesov´ e´ zkratky ...... 38 6.3 Sprava´ extern´ıch zdroju˚ ...... 39 6.3.1 Verzovan´ ´ı zdroju...... ˚ 39 6.3.2 Generovan´ ´ı grafickych´ atlasu˚ ...... 40 6.4 Automaticke´ uklad´ an´ ´ı projektu ...... 40 7 Specifika programov´an´ına platformˇeFlash ...... 42 7.1 Prace´ s typem Vector ...... 42 7.2 Informovan´ ´ı o zmenˇ eˇ stavu enginu ...... 43 7.3 Garbage collector ...... 44 8 Uk´azkov´ahra ...... 45 8.1 Typy neprˇatelsk´ ych´ jednotek ...... 45 8.2 Typy strelnˇ ych´ zbran´ı ...... 46 8.3 Uzivatelskˇ e´ rozhran´ı ...... 46 8.4 Pouzitˇ e´ moduly ...... 46 8.5 Shrnut´ı ...... 46 9 Z´avˇer ...... 48

2 Kapitola 1 Uvod´

Jelikozˇ je pocˇ´ıtacovˇ a´ hra z velke´ cˇasti´ audio-vizualn´ ´ı d´ılo, je nutne´ se behemˇ vyvoje´ soustreditˇ nejen na technickou stranku´ veci.ˇ Velkou roli hraje navrh´ hry (game design), ktery´ definuje hern´ı mechaniky a t´ım vlastneˇ urcujeˇ zabavnost´ hry. Spolu s vizualn´ ´ım a zvukovym´ zpracovan´ ´ım je to hlavn´ı cˇast´ vyvoje´ hry. Pomerˇ rozsahu prac´ı na jednotlivych´ cˇastech´ celkoveho´ pro- duktu se mu˚ zeˇ lisitˇ v zavislosti´ na typu a zameˇrenˇ ´ı hry. V 3D akcnˇ ´ıch hrach´ jde vetˇ sinouˇ predevˇ sˇ´ım o co nejrealistictˇ ejˇ sˇ´ı zobrazen´ı reality, oproti tomu takzvane´ adventury vetˇ sinouˇ vynikaj´ı umeleckˇ ym´ zpracovan´ ´ım a speci- fickymi´ hern´ımi mechanikami. V dobach´ davno´ minulych,´ kdy pocˇ´ıtacovˇ e´ hry nebyly ani zdaleka tak propracovane,´ veskerˇ e´ hern´ı mechaniky programovali prˇ´ımo pro- gramato´ ri.ˇ V dnesnˇ ´ı dobeˇ jsou ale naroky´ jak na technicke,´ tak i vizualn´ ´ı zpracovan´ ´ı mnohem vysˇsˇ´ı, proto se vyuzˇ´ıvaj´ı editory, tj. softwarove´ nastroje,´ ktere´ designerum˚ umozˇnujˇ ´ı menitˇ chovan´ ´ı hry bez nutnosti kom- pilovat hru po kazdˇ e´ zmenˇ e.ˇ Tyto editory jsou naprosto kl´ıcovˇ e´ pro krea- tivn´ı praci´ game designeru˚ a dalsˇ´ıch lid´ı, kterˇ´ı se pod´ıl´ı na tvorbeˇ audio- vizualn´ ´ı stranky´ hry. Pro nekterˇ e´ hern´ı zˇanry´ existuje relativneˇ velke´ mnozstvˇ ´ı jizˇ hotovych´ komercnˇ ´ıch enginu˚ a editoru.˚ Do teto´ kategorie patrˇ´ı hlavneˇ 3D akcnˇ ´ı hry (, Cry engine). Je to dano´ t´ım, zeˇ vytvoritˇ 3D vykreslovac´ı engine s co nejrealistictˇ ejˇ sˇ´ım zobrazen´ım reality nen´ı vubec˚ jednoduche.´ Tyto enginy vetˇ sinouˇ stoj´ı dost penez,ˇ na druhou stranu zarucujˇ ´ı jistou kva- litu a technickou podporu. Vetˇ sinaˇ her ma´ ale specificke´ hern´ı mechaniky a proto se ani priˇ pouzitˇ ´ı komercnˇ ´ıho softwaru nevyhnete programovan´ ´ı nastaveb´ a pluginu˚ pro specificke´ u´ celyˇ vyv´ıjene´ hry. Vytva´retˇ vlastn´ı engine a editor je ale beˇznˇ e´ i u velkych´ a usp´ eˇsnˇ ych´ fi- rem. Pro danou platformu naprˇ´ıklad na trhu nemus´ı byt´ dostupne´ zˇadn´ e´ vyhovuj´ıc´ı hotove´ reˇ senˇ ´ı. Existuj´ı natolik specificke´ hry, zeˇ je vlastn´ı en- gine vylozenˇ eˇ zˇadouc´ ´ı. Touto kategori´ı mohou byt´ napr.ˇ logicke´ hry, kde jsou hern´ı mechaniky vetˇ sinouˇ jednoduche´ a hlavn´ı duraz˚ se klade na pro- pracovanost a mnozstvˇ ´ı urovn´ ´ı, nebo adventury, ktere´ castoˇ byvaj´ ´ı velmi

3 1. U´ VOD umeleckyˇ zalozenˇ e.´ Castoˇ se pouzˇ´ıva´ extern´ı editor pro vytvorenˇ ´ı proto- typu hry (vytvorenˇ ´ı hern´ıch mechanik) a azˇ pote,´ co se vymysl´ı zakladn´ ´ı hern´ı koncept a mechaniky, tak se vytvorˇ´ı engine na m´ıru pozadavkˇ um˚ (napr.ˇ velmi obl´ıbeny´ StarCraft Editor). Ve firmeˇ CUKETA, s.r.o, kde pracuji na pozici hern´ıho vyvoj´ a´re,ˇ tvorˇ´ıme real-time strategickou 2D hru v pohledu shora (falesnˇ y´ isometricky´ pohled) na platformeˇ Flash. Vyv´ıj´ıme vlastn´ı engine a editor, protozeˇ na platformeˇ Flash nen´ı dostupny´ zˇadn´ y´ jizˇ hotovy,´ ktery´ by splnovalˇ naseˇ pozadavky.ˇ Protozeˇ tvurcem˚ obou, enginu i editoru, jsem vyhradn´ eˇ ja,´ v teto´ praci´ se budu snazitˇ priblˇ ´ızitˇ specifika vyvoje´ hern´ıho editoru a hry jako takove,´ pokud vyvoj´ enginu a prace´ game designeru˚ prob´ıhaj´ı soubeznˇ e.ˇ Dule˚ zitouˇ soucˇast´ ´ı textu by melyˇ byt´ prakticke´ zkusenostiˇ s vyvojem´ hern´ıho editoru a samozrejmˇ eˇ jeho implementace. V prvn´ı kapitole se venujiˇ velmi rychlemu´ a strucnˇ emu´ shrnut´ı histo- rie hern´ıho prumyslu.˚ V nasleduj´ ´ıc´ı kapitole popisuji ruzn˚ e´ typy hern´ıch enginu˚ a editoru,˚ jejich historii a soucasnˇ e´ vyuzitˇ ´ı. Tretˇ ´ı kapitola je venovˇ ana´ platformeˇ Flash. Popisuji historicky´ vyvoj,´ soucasnˇ e´ alternativy i vyhl´ıdky do budoucna. Dalsˇ´ı kapitoly jsou venovˇ any´ popisu prakticke´ cˇasti´ prace.´ Nejprve popisuji vyvoj´ hern´ıho enginu a jeho architekturu. Nejvetˇ sˇ´ı cˇast´ prace´ je venovˇ ana´ popisu vyvoje´ hern´ıho editoru. Popisuji jeho architekturu, formaty´ souboru˚ a konfiguraci chovan´ ´ı. Dale´ vyjme- nuji a pop´ısiˇ dule˚ zitˇ e´ komponenty editoru i uziteˇ cnˇ e´ tipy k implementaci. Upln´ eˇ na zav´ erˇ jsem naselˇ m´ısto pro dveˇ kratk´ e´ kapitoly, z nichzˇ ta prvn´ı je venovˇ ana´ nekterˇ ym´ uziteˇ cnˇ ym´ tipum˚ k programovan´ ´ı v jazyce Action- Script. V posledn´ı kapitole predstavˇ ´ım ukazkovou´ hru, ktera´ byla nakonfi- gurovana´ s pouzitˇ ´ım meho´ editoru.

4 Kapitola 2 Historie hern´ıhopr ˚umyslu

V roce 2014 mame´ za sebou pribliˇ znˇ eˇ 60 let vyvoje´ pocˇ´ıtacovˇ ych´ her. V nasleduj´ ´ıc´ıch odstavc´ıch se budu snazitˇ velmi strucnˇ eˇ priblˇ ´ızitˇ nebo pripomenoutˇ zacˇatky´ hern´ıho prumyslu,˚ priˇ cemˇ zˇ se budu soustreditˇ hlavneˇ na informace relevantn´ı k tematu´ me´ prace.´

2.1 50.–60. l´eta

V roce 1952 vznikla snad upln´ eˇ prvn´ı pocˇ´ıtacovˇ a´ hra OXO. Byly to 3x3 piskvorkyˇ na pocˇ´ıtaciˇ EDSAC s osciloskopovym´ displejem a jako vstup byl pouzitˇ rotacnˇ ´ı cˇ´ıseln´ık ze stareho´ telefonu [29]. Sloˇ sp´ısˇ jen o pokus, nezˇ o necoˇ realn´ eˇ hratelneho.´ V roce 1958 potom vznikla hra Tennis for two na analogovem´ pocˇ´ıtaci,ˇ priˇ odrazu m´ıckuˇ se vygeneroval zvuk. Podle do- stupnych´ informac´ı to tedy byla zrejmˇ eˇ prvn´ı ozvucenˇ a´ pocˇ´ıtacovˇ a´ hra. Vsechnyˇ hry v tomto obdob´ı byly velmi jednoduche´ – prvn´ı prototypy pocˇ´ıtacovˇ ych´ her, zarove´ nˇ to byly hry, ktere´ pouze napodobovaly jizˇ exis- tuj´ıc´ı deskove´ nebo karetn´ı hry, prˇ´ıpadneˇ simulovaly nejakˇ y´ sport, ciˇ jine´ situace z realn´ eho´ zivota.ˇ Azˇ hra z roku 1962 Spacewar! (Obrazek´ 2.1) na pocˇ´ıtaciˇ PDP-1 vytva´relaˇ upln´ eˇ novy´ hern´ı svetˇ – vesm´ırne´ rakety, ktere´ strˇ´ılely a vyhybaly´ se strelˇ am´ ostatn´ıch raket [11].

2.2 60.–70. l´eta

Vznikaly prvn´ı textove´ hry, jednou z nejslavnejˇ sˇ´ıch je Hamurabi – predchˇ udce˚ vsechˇ modern´ıch budovatelskych´ strategi´ı. Textovka Adven- ture byla jednou z prvn´ıch her, ktere´ se sˇ´ırily zdarma prostrednictvˇ ´ım teh- dejsˇ´ıho ARPANETu. Textove´ hry byly prelomovˇ e´ v tom, zeˇ jejich technicky´ vyvoj´ nebyl oproti jinym´ typum˚ her tak naro´ cnˇ y,´ proto se tvurci˚ mohli mnohem v´ıce venovatˇ hratelnosti a scen´ a´rˇum˚ her – dnes bychom to po- jmenovali jako game design. V teto´ dobeˇ vznikaly take´ prvn´ı hern´ı auto- maty, ktere´ byly sice vetˇ sinouˇ jednou´ celovˇ e,´ na druhou stranu umoznilyˇ

5 2. HISTORIEHERN´IHOPRUMYSLU˚

Obrazek´ 2.1: Vzhled hry Spacewar! na oscilosko- pove´ obrazovce mu˚ zeˇ z dnesnˇ ´ıho pohledu vy- padat azˇ komicky (prevzatoˇ z www.wheels.org). rozsˇ´ırenˇ ´ı pocˇ´ıtacovˇ ych´ her take´ mezi sirˇ sˇ´ı neodbornou verejnost,ˇ protozeˇ do te´ doby byly hry vysadou´ inzenˇ yr´ u˚ v pocˇ´ıtacovˇ ych´ spolecnostechˇ nebo vysokoskolskˇ ych´ studentu.˚ Dalsˇ´ı dule˚ zitˇ e´ hry z tohoto obdob´ı: Space Travel, Empire (predchˇ udce˚ tem´ eˇrˇ vsechˇ strategickych´ her). Nebo vubec˚ prvn´ı RPG (Role Playing Game) hra Rogue (Obrazek´ 2.2) s nahodn´ eˇ generovanymi´ mapami, vykres- lovanymi´ na obrazovku pomoc´ı ASCII artu [28]. Vetˇ sinaˇ dosavadn´ıch hern´ıch zarˇ´ızen´ı byla postavena na diskretn´ ´ıch elektronickych´ soucˇastk´ ach´ (elektronky, pozdejiˇ tranzistory). Koncem 70. let vznikla hern´ı konzole Atari 2600, ktera´ byla oproti predchozˇ ´ımu hardwaru d´ıky pouzitˇ ´ı 8-bitoveho´ mikroprocesoru relativneˇ levna´ [26]. Zaj´ımavost´ı je, zeˇ uzˇ v teto´ dobeˇ byly pro vyvoj´ her pouzˇ´ıvany´ skripto- vac´ı jazyky, ktere´ se potom preklˇ adaly´ a beˇzelyˇ ve virtualn´ ´ım stroji (napr.ˇ Z- machine, vytvorenˇ y´ v roce 1979) [18]. Hern´ıch platforem v te´ dobeˇ bylo oproti soucasnostiˇ velmi mnoho a bylo vyhodn´ e´ portovat hry na ruzn˚ a´ zarˇ´ızen´ı, hlavneˇ u textovych´ her, ktere´ nevyzadovalyˇ nijak velky´ vypo´ cetnˇ ´ı vykon.´

2.3 80. l´eta

V 80. letech se situace na hern´ı scen´ eˇ ponekudˇ zmenila.ˇ Zacalyˇ se v´ıce rozsiˇ rovatˇ domac´ ´ı a osobn´ı pocˇ´ıtaceˇ s kvalitnejˇ sˇ´ı grafikou a zvukem. Objevil se take´ operacnˇ ´ı system´ MS-DOS. Nav´ıc nov´ı hra´ciˇ s temitoˇ pocˇ´ıtaciˇ nezaziliˇ eru´ starych´ textovek na pocˇ´ıtacˇ´ıch s vektorovym´ monitorem, proto k temtoˇ hram´ zrejmˇ eˇ nemeliˇ tak velky´ vztah. Zacalyˇ vznikat hry, ktere´ nezobrazo- valy jen staticky´ obsah za pomoc´ı textu nebo obrazku,´ ale ve kterych´ hra´cˇ prˇ´ımo interagoval s hern´ım svetem,ˇ ktery´ se v realn´ em´ caseˇ menil.ˇ

6 2. HISTORIEHERN´IHOPRUMYSLU˚

Obrazek´ 2.2: Hra Rogue spustˇ enˇ a´ na barevne´ obrazovce IBM PC (prevzatoˇ z www.roguetemple.com).

Velky´ rozmach zaznamenavaj´ ´ı take´ hern´ı konzole (Atari, Nintendo, Sega, Nintendo Entertainment System, atd.). Z her z tohoto obdob´ı jme- nujme napr.ˇ plosinovkuˇ H.E.R.O, simulator´ zavodu´ formul´ı Pole Posi- tion, nebo adventuru King’s Quest (Obrazek´ 2.3). Koncem 80. let vznika´ vubec˚ prvn´ı univerzaln´ ´ı kapesn´ı konzole Atari Lynx (do te´ doby byly pouze jednou´ celovˇ e,´ stavenˇ e´ pro jednu konkretn´ ´ı hru). Ackolivˇ se v tomto obdob´ı objevuj´ı prvn´ı pokusy o ztvarn´ enˇ ´ı trojrozmernˇ eho´ zobrazen´ı (prˇ´ıp. pouze imitace trˇ´ı rozmerˇ u)˚ hern´ıho svetaˇ ve strˇ´ıleckˇ ach,´ na plnohod- notne´ 3D strˇ´ıleckyˇ je nutne´ jesteˇ par´ let pockat.ˇ

Obrazek´ 2.3: Adventura King’s Quest (prevzatoˇ z www.sierraplanet.com).

7 2. HISTORIEHERN´IHOPRUMYSLU˚

2.4 90. l´eta

Kromeˇ velmi slavnych´ her teto´ ery´ (Sonic, Mortal Combat, Super Ma- rio Bros, Arkanoid nebo Tetris) se jizˇ objevuj´ı i prvn´ı 3D hry. Rozsˇ´ırenˇ ´ı take´ zazˇ´ıvaj´ı kapesn´ı konzole (Nintento Game Boy) a vznika´ prvn´ı operacnˇ ´ı system´ MS Windows. Pocˇatkem´ tohoto obdob´ı vznika´ slavna´ budovatelska´ strategie Civilization. Autoriˇ hry vytvoriliˇ pomernˇ eˇ komplexn´ı ekonomicky´ model, jehozˇ vstupy jsou uzivatelskˇ e´ akce, ktere´ jsou velmi malo´ limito- vane,´ a hra´cˇ ma´ tak velkou svobodu rozhodovan´ ´ı. Dalsˇ´ı usp´ eˇsnˇ e´ budova- telske´ hry jsou naprˇ´ıklad Castles nebo SimCity, ktera´ pro zobrazen´ı pouzilaˇ izometricky´ pohled a d´ıky tomu umoznilaˇ zaveden´ı tretˇ ´ıho rozmeruˇ – bylo moznˇ e´ v terenu´ tvarovat kopce. Strategicke´ hry zazˇ´ıvaj´ı v tomto obdob´ı obecny´ rozmach, vzni- kaj´ı napr.ˇ slavne´ serie´ jako Dune (Obrazek´ 2.4), Warcraft nebo Command & Conquer, ktere´ narozd´ıl od drˇ´ıve jmenovanych´ nebyly orien- tovane´ na tahy, ale hra jizˇ prob´ıhala plneˇ v realn´ em´ case.ˇ

Obrazek´ 2.4: Hra Dune 2 urcilaˇ smerˇ vsemˇ dalsˇ´ım strategi´ım (prevzatoˇ z www.cracked.com).

Tyto hry byly jizˇ dost vyspelˇ e´ jak po graficke,´ tak technicke´ strance.´ Castoˇ se vyuzˇ´ıvaly napr.ˇ algoritmy pro hledan´ ´ı cesty i zakladn´ ´ı algoritmy pro simulaci umelˇ e´ inteligence (hlavneˇ RTS1). Hra Dune vynikala v poctuˇ ruzn˚ ych´ druhu˚ jednotek (celkem triˇ rasy, kazdˇ a´ s jinymi´ jednotkami) a take´ po zvukove´ strance´ (jednotky v kazdˇ e´ rase melyˇ namluvene´ hlasy). No- vinkou hry Command & Conquer byla moznostˇ oznacitˇ do skupiny vetˇ sˇ´ı mnozstvˇ ´ı jednotek najednou nebo hra v´ıce hra´cˇu˚ proti sobeˇ pripojenˇ ych´ v pocˇ´ıtacovˇ e´ s´ıti. Dule˚ zitouˇ moznostˇ ´ı byla take´ tvorba vlastn´ı mapy, dalsˇ´ı

1. Real Time Strategy – strategicke´ hry v realn´ em´ caseˇ

8 2. HISTORIEHERN´IHOPRUMYSLU˚ d´ıl hry Warcraft 2 disponoval jizˇ plnohodnotnym,´ acˇ velmi jednoduchym,´ map editorem, ktery´ byl vytvorenˇ y´ jako samostatna´ aplikace. Prulomovou˚ hrou byl Doom, vytvorenˇ y´ spolecnostˇ ´ı ID Software. Jed- nalo se o plneˇ 3D akcnˇ ´ı strˇ´ılecku.ˇ Tato hra se stala inspirac´ı pro mnoho dalsˇ´ıch 3D her, stejneˇ jako jej´ı engine . Od 90. let se pocˇ´ıtacovˇ e´ hry stavaj´ ´ı mainstreamovou zabavou´ a v tom se odra´zˇ´ı i rozpoctyˇ nejvetˇ sˇ´ıch her. Uzˇ se nejedna´ o male´ firmy nebo nezavisl´ e´ nadsence.ˇ Velky´ boom zazˇ´ıvaj´ı studia jako Electronic Arts, Westwood Studios nebo Blizzard Entertainment. D´ıky velkemu´ technolo- gickemu´ pokroku je moznˇ e´ vytva´retˇ cˇ´ım dal´ rozsahlej´ sˇ´ı hry s propracova- nou grafikou. Hern´ı trh i jednotlive´ zˇanry´ se siroceˇ rozrustaj˚ ´ı.

2.5 2000–souˇcasnost

V novem´ tis´ıcilet´ı zacˇ´ına´ hon za co nejrealistictˇ ejˇ sˇ´ı grafikou. Zanikaj´ı stare´ a vznikaj´ı nove´ platformy. S rozsˇ´ırenˇ ´ım internetu mezi vetˇ sˇ´ı mnozstvˇ ´ı beˇznˇ ych´ uzivatelˇ u˚ vznika´ cˇ´ım dal´ v´ıce multiplayer her a vznikaj´ı nove´ dis- tribucnˇ ´ı kanaly´ a platformy. Hry s velmi vysokym´ rozpoctemˇ (AAA tituly) se nevydavaj´ ´ı jen na jedne´ platforme,ˇ ale vyrobci´ se snazˇ´ı pokryt´ co nejvetˇ sˇ´ı trh. Je dule˚ zitˇ e,´ aby tyto hry byly spustitelne´ na ruzn˚ ych´ platformach,´ proto se zas tak moc nelisˇ´ı graficky´ vykon´ jednotlivych´ konzol´ı. Ten se vzdyˇ zvysujeˇ s nastupem´ dalsˇ´ı generace. Od roku 2010 uzˇ se grafika novych´ her moc nevyv´ıj´ı, vyrobci´ se soustredˇ ´ı sp´ısˇ na propracovanejˇ sˇ´ı detaily a celko- vou konzistenci hern´ıho sveta.ˇ Velke´ spolecnostiˇ jsou nicmen´ eˇ castoˇ velmi usazene´ a neprichˇ az´ ´ı s novymi´ hern´ımi koncepty. Toho vyuzˇ´ıvaj´ı mala´ nezavisl´ a´ hern´ı studia, ktera´ castoˇ vytva´rˇ´ı velice umeleckyˇ zalozenˇ e´ hry s originaln´ ´ım konceptem, a slav´ı s nimi velky´ usp´ ech.ˇ Velky´ rozmach zazˇ´ıvaj´ı mobiln´ı platformy (iOS, Android). Prav´ eˇ d´ıky mobiln´ım platformam´ a internetu je velmi snadne´ vydat svou vlastn´ı hru. D´ıky hotovym´ enginum˚ a velmi jednoduche´ publikaci k tomu nen´ı potrebaˇ ani tak velka´ technicka´ znalost a vyvoj´ a´rskˇ e´ tymy´ obsahuj´ı mnohem v´ıce kreativn´ıch pozic nezˇ kdykoliv drˇ´ıve.

9 Kapitola 3 Hern´ıenginy a editory

3.1 Hern´ıenginy

Hern´ım enginem je vetˇ sinouˇ myslenaˇ sada softwarovych´ nastroj´ u˚ (fra- mework), ktere´ umozˇnujˇ ´ı vyv´ıjet pocˇ´ıtacovˇ e´ hry bez nutnosti implemen- tovat logiku na n´ızke´ urovni.´ Takovy´ engine je znovupouzitelnˇ y´ pro v´ıce her, obsahuje tedy men´ eˇ chyb, jeho vyvoj´ je levnejˇ sˇ´ı a hern´ım vyvoj´ a´rˇum˚ umozˇnujeˇ soustreditˇ se na reˇ senˇ ´ı problem´ u˚ konkretn´ ´ı hry. Hern´ı engine mu˚ zeˇ obsahovat mnozstvˇ ´ı ruzn˚ ych´ modulu,˚ ktere´ vyvoj´ a´rˇum˚ usnadnujˇ ´ı praci.´ Jejich pocetˇ zavis´ ´ı na velikosti a rozsˇ´ırenostiˇ daneho´ enginu. Nejbeˇznˇ ejˇ sˇ´ı moduly, dule˚ zitˇ e´ pro tvorbu vetˇ sinyˇ her, jsou napr.:ˇ

• Vykreslovan´ ´ı (2D, 3D)

• Fyzikaln´ ´ı vypo´ ctyˇ

• Kolize objektu˚

• Umelˇ a´ inteligence

• Hern´ı logika

• Zvukovy´ engine

• Skriptovan´ ´ı

• Generovan´ ´ı prostredˇ ´ı

• Generator´ cˇastic´ (Particles emitter)

•Uzivatelskˇ e´ rozhran´ı

Profesionaln´ ´ı hern´ı enginy pracuj´ı vyhradn´ eˇ s trojrozmernouˇ grafikou a vetˇ sinouˇ obsahuj´ı vsechnyˇ zminovanˇ e´ soucˇasti´ a take´ spoustu dalsˇ´ıch. Oproti tomu 2D enginy jsou velmi male´ a vetˇ sinouˇ se sˇ´ırˇ´ı jen mezi

10 3. HERN´IENGINYAEDITORY nezavisl´ ymi´ vyvoj´ a´ri.ˇ Castoˇ je nutne´ pouzˇ´ıt v´ıce mensˇ´ıch frameworku,˚ kdy kazdˇ y´ zajistˇ ’uje rozd´ılnou funkcionalitu.

3.1.1 Historie

V prvopocˇatc´ ´ıch hern´ıho prumyslu˚ se pro vyvoj´ her nepouzˇ´ıvaly zˇadn´ e´ enginy. Kazdˇ a´ hra byla psana´ na m´ıru, hlavneˇ kvuli˚ hardwarovym´ narok´ um˚ a omezene´ kapaciteˇ operacnˇ ´ı pameti,ˇ kterou by slozitˇ ejˇ sˇ´ı engine spotreboval.ˇ Jestˇ eˇ zacˇatkem´ 80. let se hry vyv´ıjely zpusobem,˚ ktery´ neumozˇnovalˇ rozsahl´ e´ znovupouzitˇ ´ı kodu´ v jinych´ projektech. Vsechnyˇ mechaniky a hern´ı logika byly zapsane´ prˇ´ımo v kodu.´ Vyvoj´ kazdˇ e´ nove´ hry byl proto velmi casovˇ eˇ naro´ cnˇ y´ a vyvoj´ a´riˇ si toho byli vedomi.ˇ Tato situace se s prˇ´ıchodem vykonn´ ejˇ sˇ´ıho hardwaru zacalaˇ s postupem casuˇ menitˇ a vznikaly prvn´ı hern´ı enginy. Nejdrˇ´ıve vznikaly enginy pro pouzitˇ ´ı ve spolecnostech,ˇ kde byly vy- tvoreny,ˇ a pozdejiˇ s rostouc´ım trhem se tyto enginy take´ prodavaly´ ostatn´ım vyvoj´ a´rˇum.˚ Koncem 80. let take´ vznikaly prvn´ı univerzaln´ ´ı en- giny vyuzˇ´ıvaj´ıc´ı isometricke´ zobrazen´ı, nejznam´ ejˇ sˇ´ı je zrejmˇ eˇ od spolecnostiˇ Ultimate Play The Game, ktery´ byl predlohouˇ pro velke´ mnozstvˇ ´ı jinych´ enginu˚ od ruzn˚ ych´ firem [7].

3.2 Dostupn´eflashov´eknihovny

Dostupnych´ knihoven naprogramovanych´ v ActionScriptu pro pouzitˇ ´ı k vyvoji´ her na platformeˇ Flash existuje mnoho. Jedna´ se z velke´ cˇasti´ o soft- ware uvolnovanˇ y´ pod open- nebo jinou volnou licenc´ı. Vetˇ sinouˇ jsou to jednou´ celovˇ e´ knihovny pro reˇ senˇ ´ı konkretn´ ´ıho problemu´ (pathfinding, kolize, fyzikaln´ ´ı engine, atd.) vytvorenˇ e´ jedn´ım nezavisl´ ym´ vyvoj´ a´rem.ˇ Flash ma´ velkou nevyhodu´ v tom, zeˇ neexistuje zˇadn´ e´ oficialn´ ´ı centraln´ ´ı m´ısto pro publikovan´ ´ı techtoˇ knihoven, jake´ ma´ napr.ˇ Unity (Asset Store). Programator´ si tedy mus´ı sehnat potrebnˇ e´ knihovny na internetu. Existuje i nekolikˇ vylozenˇ eˇ hern´ıch enginu,˚ mezi ty znam´ ejˇ sˇ´ı patrˇ´ı Fla- shPunk nebo Citrus Engine.

3.2.1 FlashPunk

FlashPunk je velmi znam´ y´ engine pro tvorbu 2D her s bitmapovou grafi- kou. Obsahuje napr.ˇ kolizn´ı a fyzikaln´ ´ı system,´ pomocne´ trˇ´ıdy pro praci´ s textem, animacemi a zvukem. Bohuzelˇ vsechnyˇ tyto funkce jsou prˇ´ımo

11 3. HERN´IENGINYAEDITORY soucˇast´ ´ı enginu, nav´ıc poskytuj´ı jen zakladn´ ´ı funkcionalitu. FlashPunk za- ostav´ a´ svym´ navrhem´ a nen´ı tem´ eˇrˇ vubec˚ modularn´ ´ı. Prˇ´ıkladem mu˚ zeˇ byt´ trebaˇ trˇ´ıda Entity, ktera´ je pevneˇ svaz´ ana´ s jej´ım fyzikaln´ ´ım telemˇ nebo gra- fikou. Obsahuje napr.ˇ metody setHitbox() (nastaven´ı velikosti kolizn´ıho tela)ˇ nebo distanceToPoint() (vypo´ cetˇ vzdalenosti´ od daneho´ bodu), ktere´ k to- muto objektu zrovna moc nepatrˇ´ı. Vyhodou´ naopak mu˚ zeˇ byt´ kompletn´ı, i kdyzˇ ne zrovna moc vymluvn´ a´ dokumentace1.

3.2.2 Citrus Engine

Hern´ı engine, ktery´ je moznˇ e´ vyuzˇ´ıt jak pro tvorbu 2D her (vykres- lovan´ ´ı zajistˇ ’uje ), tak i 3D her (vykreslovan´ ´ı zajistˇ ’uje ). Obsahuje take´ fyzikaln´ ´ı enginy , Nape nebo AwayPhysics a programator´ si mu˚ zeˇ zvolit, ktery´ mu nejv´ıc vyhovuje. Ma´ vlastn´ı wiki2 a kompletn´ı API dokumentaci3, ktera´ sice obsahuje veskerˇ e´ trˇ´ıdy a jejich metody, ale z velke´ cˇasti´ postrad´ a´ jakykoliv´ popis.

3.3 Vykreslov´an´ı

Jedna z nejdule˚ zitˇ ejˇ sˇ´ıch a esencialn´ ´ıch cˇast´ ´ı hern´ıho enginu je vykreslovan´ ´ı. Zarove´ nˇ je to cˇast,´ jej´ızˇ vyvoj´ patrˇ´ı k temˇ naro´ cnˇ ejˇ sˇ´ım. Bez vykreslovan´ ´ı nen´ı moznˇ e´ hra´ceˇ informovat o stavu sveta.ˇ Engine, ktery´ je vyv´ıjeny´ jako soucˇast´ teto´ prace,´ pouzˇ´ıva´ jednoduchy´ 2D vykreslovac´ı modul, postaveny´ na frameworku Genome2D. Je moznˇ e´ jej ale samozrejmˇ eˇ vymenitˇ za jakykoliv´ jiny.´

3.3.1 3D vykreslov´an´ı

Velke´ hern´ı enginy, jako napr.ˇ Unity, Unreal Engine nebo CryEngine maj´ı velmi pokrocilˇ e´ 3D vykreslovan´ ´ı a d´ıky tomu se radˇ ´ı mezi spiˇ ckyˇ na trhu [6]. Pro trojrozmernˇ e´ vykreslovan´ ´ı se v dnesnˇ ´ı dobeˇ pouzˇ´ıvaj´ı prakticky pouze klasicke´ polygonove´ modely objektu,˚ protozeˇ na vypo´ cetˇ techtoˇ modelu˚ jsou prˇ´ımo optimalizovane´ dnesnˇ ´ı graficke´ karty. Zacˇ´ınaj´ı se postupneˇ objevovat i ray-tracingove´ metody. Soucasnˇ e´ pocˇ´ıtaceˇ ale nejsou schopny tyto algoritmy pocˇ´ıtat v realn´ em´ case,ˇ cozˇ je pro 3D pocˇ´ıtacovˇ e´ hry nutnost [23].

1. http://useflashpunk.net/docs/ 2. http://wiki.starling-framework.org/citrus/start 3. http://citrusengine.com/api/

12 3. HERN´IENGINYAEDITORY

3.3.2 2D vykreslov´an´ı

I kdyzˇ to tak na prvn´ı pohled nevypada,´ dvojrozmernˇ e´ vykreslovan´ ´ı je oproti predchozˇ ´ımu velice naro´ cnˇ e´ na vykon.´ Pro vykreslen´ı dvoj- rozmernˇ e´ grafiky totizˇ neexistuj´ı tem´ eˇrˇ zˇadn´ e´ optimalizacnˇ ´ı techniky. Je nutne´ vykreslit na obrazovku kazdˇ y´ pixel vysledn´ eho´ obrazu, cozˇ priˇ rozlisenˇ ´ı soucasnˇ ych´ zobrazovac´ıch zarˇ´ızen´ı mu˚ zeˇ byt´ dost naro´ cnˇ e.´ Nen´ı sice potrebaˇ tolik geometrickych´ algoritmu˚ (na jejichzˇ vypo´ cetˇ jsou gra- ficke´ karty optimalizovane),´ na druhou stranu je potrebaˇ uchovavat´ velke´ mnozstvˇ ´ı textur v plnem´ rozlisenˇ ´ı. Textury pro 2D grafiku je nutne´ zobrazo- vat v aktualn´ ´ım rozlisenˇ ´ı, na rozd´ıl od 3D se totizˇ nespokoj´ı s natahovanymi´ texturami, ktere´ sice nemus´ı z dalky´ vypadat skaredˇ e,ˇ ale priˇ priblˇ ´ızenˇ ´ı uzˇ ano. Takoveto´ techniky by ve hreˇ s dvojrozmernˇ ym´ vykreslovan´ ´ım nevy- padaly hezky. Kdyzˇ se objevovaly prvn´ı trojrozmernˇ e´ hry, spousta vyrobc´ u˚ her v nich videlaˇ potencial´ do budoucna, velka´ cˇast´ vyvoj´ a´rˇu˚ se soustredilaˇ prav´ eˇ na vyvoj´ 3D zobrazen´ı a od 2D grafiky se zacaloˇ upoustˇ et.ˇ Azˇ v posledn´ı dobeˇ se vyvoj´ a´riˇ a hlavneˇ hra´ciˇ opetˇ vrac´ı k dvojrozmernˇ ym´ hram.´ Takova´ hra, pokud je kvalitneˇ zpracovana,´ mu˚ zeˇ m´ıt mnohem vetˇ sˇ´ı kouzlo, nezˇ 3D svet,ˇ ktery´ kromeˇ neustal´ eho´ vylepsovˇ an´ ´ı zobrazovan´ ´ı reality nema´ moc velky´ prostor pro originalitu.

3.3.3 Prom´ıt´an´ıhern´ıhosvˇeta

Aby bylo moznˇ e´ model hern´ıho svetaˇ nejakˇ ym´ zpusobem˚ zobrazit hra´ci,ˇ je nutne´ zvolit zpusob˚ prom´ıtnut´ı na obrazovku. Cistˇ eˇ textove´ hry prom´ıtan´ ´ı nepotrebujˇ ´ı, temtoˇ hram´ se ale v teto´ praci´ nevenuji.ˇ

2D pudorys˚ nebo bokorys

Jedny z prvn´ıch zobrazen´ı vubec.˚ Model svetaˇ je prom´ıtnuty´ na obrazovku ve 2 rozmerech,ˇ bez perspektivy. Pudorys˚ i bokorys se velmi casoˇ vyuzˇ´ıvaj´ı v klasickych´ 2D hrach,´ plosinovkˇ ach,´ veskerˇ ych´ logickych´ hrach´ (sachy,ˇ piskvorky,ˇ a jine).´

Rovnobeˇznˇ e´ prom´ıtan´ ´ı Tento zpusob˚ prom´ıtan´ ´ı je men´ eˇ castˇ y,´ objevoval se sp´ısˇ v drˇ´ıvejˇ sˇ´ıch dobach,´ kdy vyvoj´ a´riˇ hledali zpusoby,˚ jak imitovat trojrozmernˇ e´ zobrazen´ı. Zjistilo se ale, zeˇ nen´ı vhodne´ pro pocˇ´ıtacovˇ e´ hry, protozeˇ pusob˚ ´ı moc tech- nicky, neprirozenˇ eˇ a je jizˇ prekonanˇ e.´

13 3. HERN´IENGINYAEDITORY

Isometricke´ prom´ıtan´ ´ı Velmi castˇ y´ zpusob˚ zobrazen´ı hern´ıho sveta,ˇ zvla´stˇ eˇ v posledn´ı dobe.ˇ T´ımto zpusobem˚ lze velice hezky imitovat trojrozmernˇ e´ zobrazen´ı, nekdyˇ i s per- spektivou, a pritomˇ zachovavat´ rysy a kouzlo dvojrozmernˇ eho´ zobrazen´ı.

3D zobrazen´ı Plneˇ trojrozmernˇ e´ zobrazen´ı se pouzˇ´ıva´ v´ıcemen´ eˇ u vsechˇ modern´ıch akcnˇ ´ıch her, hlavneˇ klasickych´ strˇ´ılecek.ˇ Existuje spoustu znam´ ych´ algo- ritmu˚ a technik pro realisticke´ 3D vykreslovan´ ´ı. V neposledn´ı radˇ eˇ je nutne´ jmenovat alternativn´ı zpusoby˚ zobrazen´ı hry - v posledn´ı dobeˇ naprˇ´ıklad nova´ a stale´ castˇ ejiˇ diskutovana´ platforma Ocu- lus Rift.

Kombinovane´ Vsechnyˇ jmenovane´ zpusoby˚ je samozrejmˇ eˇ moznˇ e´ jakkoliv kombinovat. Hern´ı designeriˇ se snazˇ´ı prichˇ azet´ s originaln´ ´ımi napady´ a myslenkamiˇ na zobrazen´ı her a nekdyˇ se z toho mu˚ zeˇ vyvinout velice zaj´ımave´ zpracovan´ ´ı. Prˇ´ıkladem mu˚ zeˇ byt´ naprˇ´ıklad zaj´ımava´ hra Fez, cozˇ je 2D plosinovka,ˇ ve ktere´ je ale moznˇ e´ hern´ı plochu rotovat po 90 stupnovˇ ych´ kroc´ıch ko- lem osy Z, cozˇ hreˇ dodav´ a´ dalsˇ´ı rozmer,ˇ ve kterem´ je moznˇ e´ se pohybovat.

3.4 Hern´ıeditory

Hern´ı editor jde ruku v ruce s hern´ım enginem. I kdyzˇ by bylo teoreticky moznˇ e´ vyvinout univerzaln´ ´ı format´ pro uklad´ an´ ´ı konfigurace hry, bylo by to velmi omezuj´ıc´ı pro obeˇ strany, jak engine, tak editor. Prakticky neexistuj´ı zˇadn´ e´ editory, ktere´ by byly univerzaln´ ´ı pro ruzn˚ e´ typy hern´ıch enginu.˚

3.4.1 Historie

Prvn´ı pocˇ´ıtacovˇ e´ hry byly vetˇ sinouˇ vytva´renyˇ jedn´ım programatorem,´ ktery´ celou hru naprogramoval prˇ´ımo v kodu.´ Tyto hry byly velmi nenaro´ cnˇ e´ na navrh´ (game design), jednoduche´ pocˇ´ıtaceˇ v te´ dobeˇ ani ne- umozˇnovalyˇ pouzitˇ ´ı jakychkoliv´ podpurn˚ ych´ nastroj´ u.˚ V evoluci hern´ıch editoru˚ mu˚ zemeˇ rozeznavat´ triˇ zakladn´ ´ı typy konfi- gurace hry. Prvn´ı typ byl nejjednodusˇsˇ´ı a dnes se jizˇ prakticky nepouzˇ´ıva.´ Zˇ adn´ y´ editor neexistoval, cela´ hra vcetnˇ eˇ konfigurace byla napsana´ prˇ´ımo v kodu´

14 3. HERN´IENGINYAEDITORY aplikace a kazdˇ a´ zmenaˇ (funkcnˇ ´ı kod´ i konfigurace) vyzadovalaˇ kompilaci zdrojoveho´ kodu.´ Byl to primitivn´ı a zdlouhavy´ zpusob˚ vyvoje´ her a hry se slozitˇ ejˇ sˇ´ımi hern´ımi urovn´ emiˇ nebo prˇ´ıbehovouˇ slozkouˇ bylo takovymto´ zpusobem˚ velmi slozitˇ e´ vytvorit.ˇ Dalsˇ´ım typem je konfigurace v editoru, ktery´ umozˇnovalˇ upravy´ mapy i objektu˚ hern´ıho sveta.ˇ Vysledkem´ takove´ editace byl soubor (textovy´ ciˇ binarn´ ´ı), ktery´ bylo nutne´ nejakˇ ym´ zpusobem˚ nahrat´ do konkretn´ ´ı hry (vetˇ sinouˇ presunutˇ ´ım do urcitˇ eho´ adresa´re).ˇ Pote´ bylo moznˇ e´ tuto vy- tvorenouˇ misi spustit prˇ´ımo ve hre.ˇ Byl to obrovsky´ krok vpred,ˇ nicmen´ eˇ t´ımto zpusobem˚ vetˇ sinouˇ nebylo moznˇ e´ konfigurovat hern´ı mechaniky jako takove,´ ale pouze jednotlive´ hern´ı urovn´ eˇ (mise). Kvuli˚ nutnemu´ zno- vuspustˇ enˇ ´ı hry a nactenˇ ´ı dane´ urovn´ eˇ je tento zpusob˚ stale´ dost zdlou- havy.´ Prˇ´ıkladem takoveho´ editoru mu˚ zeˇ byt´ napr.ˇ Map editor hry Heroes of Might and Magic III. Velmi rozsˇ´ırenˇ y´ a popularn´ ´ı editor je StarCraft Edi- tor [5]. Ten se navzdory tomuto nedostatku castoˇ pouzˇ´ıva´ i dnes na proto- typovan´ ´ı novych´ her d´ıky moznostiˇ konfigurace veskerˇ ych´ hern´ıch mecha- nismu.˚ Nejmodernejˇ sˇ´ım zpusobem˚ konfigurace hry je editace v realn´ em´ case.ˇ Hra je soucˇast´ ´ı level editoru a veskerˇ e´ provedene´ zmenyˇ a upravy´ mapy nebo konfigurace se okamzitˇ eˇ prom´ıtaj´ı do hry. Spustˇ enouˇ hru je tak moznoˇ pozastavit, upravit aktualn´ ´ı scenu´ a po ukoncenˇ ´ı editace opetˇ po- kracovatˇ ve hran´ı [8]. Je ocividnˇ e,´ zeˇ takovy´ zpusob˚ upravy´ urovn´ eˇ je oproti predchozˇ ´ımu mnohem efektivnejˇ sˇ´ı, a co v´ıc, podporuje kreativn´ı praci´ lid´ı pod´ılej´ıc´ıch se na vyvoji.´ Vsechnyˇ modern´ı hern´ı editory podporuj´ı tento zpusob˚ konfigurace.

3.4.2 Hra jako editor Pokud se bav´ıme o hern´ıch editorech, stoj´ı za to trochu odbocitˇ a zm´ınit tzv. p´ıskovistˇ eˇ (sandbox games). Jedna´ se o pocˇ´ıtacovˇ e´ hry, jejichzˇ hlavn´ım c´ılem nen´ı splnenˇ ´ı urcenˇ eho´ ukolu,´ ale vytva´renˇ ´ı vlastn´ı mapy. Hra´covaˇ castoˇ jedina´ cinnostˇ ve hreˇ je tedy uprava´ hern´ıho prostredˇ ´ı pomoc´ı do- stupnych´ nastroj´ u.˚ Za´zitekˇ z hran´ı takove´ hry je vlastneˇ pouze zados- tiucinˇ enˇ ´ı z vytvorenˇ ´ı vlastn´ıho hern´ıho sveta.ˇ I kdyzˇ tento typ her nen´ı upln´ eˇ ojedinelˇ y,´ jak by se mohlo zdat,´ proslavila jej a sklidila opravdu velky´ usp´ echˇ hra Minecraft [20].

15 Kapitola 4 Flash jako hern´ıplatforma

Adobe Flash je softwarova´ platforma pouzˇ´ıvana´ pro tvorbu animovane´ grafiky, her a webovych´ aplikac´ı. Flash aplikace mohou byt´ interak- tivn´ı, a to d´ıky integrovanemu´ programovac´ımu jazyku ActionScript. Pro spustˇ enˇ ´ı Flash aplikace je nutne´ m´ıt nainstalovany´ virtualn´ ´ı stroj . Ten je dostupny´ pro vetˇ sinuˇ pocˇ´ıtacovˇ ych´ platforem a webovych´ prohl´ızeˇ cˇu˚ zdarma.

4.1 Historie Flashe

Prvn´ı zarodek´ Flashe byla aplikace SmartSketch od FutureWave Software, ktera´ slouzilaˇ pro kreslen´ı. Po nejakˇ e´ dobeˇ byla pridˇ ana´ podpora vekto- rovych´ animac´ı a cely´ produkt byl uveden jako FutureSplash Animator. Tuto aplikaci pouzˇ´ıval naprˇ´ıklad Microsoft nebo Disney Online [27]. V roce 1996 FutureSplash koupila spolecnostˇ a uvedla jej na trh pod nazvem´ Flash. V soucasnˇ e´ dobeˇ je Flash vyv´ıjen spolecnostˇ ´ı Adobe Systems, ktera´ jej od spolecnostiˇ Macromedia koupila v roce 2005. V ranych´ verz´ıch byl Flash vyuzˇ´ıvan´ hlavneˇ pro tvorbu reklamn´ıch ban- neru,˚ kde nahrazoval animovane´ GIFy. Velikost Flash animac´ı byla oproti animovanym´ GIFum˚ minimaln´ ´ı, cozˇ byla velka´ vyhoda´ v tehdejsˇ´ı dobeˇ po- maleho´ internetu. Jak se Flash vyv´ıjel, a zarove´ nˇ s n´ım jeho programovac´ı jazyk Action- Script, vyv´ıjely se i moznostiˇ jeho uplatnenˇ ´ı. Adobe Flash Player, behovˇ e´ prostredˇ ´ı pro SWF soubory, je zdarma a ma´ velmi malou velikost. Je tedy velmi snadne´ jej nainstalovat. Dlou- hou dobu byl Flash take´ jedina´ moznost,ˇ jak na webu prehrˇ avat´ video. Tyto skutecnostiˇ pomohly k jeho masovemu´ rozsˇ´ırenˇ ´ı.

16 4. FLASHJAKOHERN´I PLATFORMA

4.2 Vyuzit´ıvˇ souˇcasnosti

V soucasnˇ e´ dobeˇ je platforma Flash tem´ eˇrˇ vyhradn´ eˇ vyuzˇ´ıvana´ ke spoustˇ enˇ ´ı pocˇ´ıtacovˇ ych´ her ve webovem´ prohl´ızeˇ ci.ˇ Podle pruzkum˚ u˚ je Flash Player nainstalovany´ na 95–99,5% osobn´ıch pocˇ´ıtacˇu˚ [25], [21]. To z nejˇ delˇ a´ v soucasnˇ e´ dobeˇ tem´ eˇrˇ idealn´ ´ı platformu pro distribuci webovych´ her.

4.3 Vykreslov´an´ıve Flashi

Azˇ donedavna´ nedisponoval Flash vykreslovan´ ´ım urychlovanym´ grafic- kou kartou. To se zmeniloˇ koncem roku 2011 s prˇ´ıchodem Flash Playeru 11. Ten obsahoval nove´ n´ızkourov´ novˇ e´ API pro akcelerovane´ graficke´ rende- rovan´ ´ı s nazvem´ [24]. Vzniklo nekolikˇ frameworku˚ pro praci´ s touto technologi´ı, mezi nejznam´ ejˇ sˇ´ı patrˇ´ı napr.ˇ Starling Framework, Away3D, nebo Ge- nome2D. V enginu, ktery´ vznikl jako soucˇast´ teto´ prace,´ pouzˇ´ıvam´ jednodu- chou 2D vykreslovac´ı vrstvu postavenou na frameworku Genome2D, ktery´ z vy´seˇ jmenovanych´ vykazuje nejvysˇsˇ´ı vykon´ v 2D grafice jak na osobn´ıch pocˇ´ıtacˇ´ıch, tak na mobiln´ıch zarˇ´ızen´ıch [30].

4.4 Vyhl´ıdkydo budoucna

Z historickeho´ vyvoje´ by se dalo usuzovat, zeˇ Flash jestˇ eˇ nemus´ı m´ıt sva´ nejlepsˇ´ı leta´ za sebou. Spolecnostˇ Adobe melaˇ jestˇ eˇ donedavna´ tem´ eˇrˇ mo- nopoln´ı postaven´ı na hry ve webovem´ prohl´ızeˇ ci.ˇ Situace za posledn´ı rok se ale pro Flash nevyv´ıj´ı nejlepe.´ Adobe vyvoj´ Flashe trochu odsunula na druhou kolej. Dlouhodobeˇ se snazˇ´ı o (neusp´ eˇsnou)ˇ monetizaci Flashe – v posledn´ı dobeˇ naprˇ´ıklad licencovan´ ´ım pouzitˇ ´ı Stage3D technologie, ktera´ byla v zap´ etˇ ´ı zrusena.ˇ Spolecnostˇ Adobe by zoufale potrebovalaˇ vlastn´ı hern´ı engine pro Flash, jehozˇ pouzitˇ ´ı by bylo moznˇ e´ licencovat, podobneˇ jako Unity. Vsechnyˇ velke´ enginy sice podporuj´ı export do Flashe, ten je ale bez vlastn´ıho enginu stale´ jen platforma (i kdyzˇ stale´ nejrozsˇ´ırenˇ ejˇ sˇ´ı na webu), ktera´ pod natlakem´ Unity mu˚ zeˇ casemˇ ustupovat do pozad´ı. Nicmen´ eˇ stale´ je duvod˚ se domn´ıvat, zeˇ Adobe prijdeˇ s nejakouˇ zaj´ımavou novinkou, ktera´ Flash vrat´ ´ı zpetˇ do hry. Adobe ma´ k dispo- zici cely´ ekosystem´ softwarovych´ nastroj´ u˚ (Adobe Creative Cloud), ktere´ pouzˇ´ıva´ spousta lid´ı na celem´ svetˇ e,ˇ pracuj´ıc´ıch v tomto oboru. Tyto

17 4. FLASHJAKOHERN´I PLATFORMA nastroje´ je moznˇ e´ velice efektivneˇ propojit s Flash technologi´ı, cozˇ se mu˚ zeˇ zdat´ jako jeden ze spravn´ ych´ kroku˚ dopredu,ˇ vzhledem k tomu, zeˇ jeden z nejvetˇ sˇ´ıch nedostatku˚ samotneho´ Flashe je chybejˇ ´ıc´ı animacnˇ ´ı nastroj,´ ktery´ by nativneˇ podporoval Stage3D technologii. Na letosnˇ ´ım Game Developer Conference v San Franciscu spolecnostiˇ Epic Games a Crytek oznamily´ nove´ zpusoby˚ licencovan´ ´ı jejich hern´ıch enginu˚ Unreal Engine a CryEngine. Cena za licenci se pohybuje v rˇadu´ nekolikaˇ dolaru˚ mesˇ ´ıcnˇ eˇ + procentualn´ ´ı provize z prodeje hry, cˇ´ımzˇ se tyto enginy staly dostupne´ i pro mala´ hern´ı studia a nezavisl´ e´ vyvoj´ a´reˇ [22], [9]. I s vyuzitˇ ´ım techtoˇ nastroj´ u˚ je ale pro vyvoj´ webovych´ her nutne´ behovˇ e´ prostredˇ ´ı, a to by mohla byt´ dobra´ zprava´ pro Flash. Unity dosud teˇziloˇ z toho, zeˇ Flash nema´ zˇadn´ y´ vlastn´ı graficky´ engine a kvalitn´ı 3D editor. Profesionaln´ ´ı engine typu Unreal Engine + behovˇ e´ prostredˇ ´ı Flash Player by se mohlo zdat´ jako skvelˇ a´ kombinace.

4.5 Alternativy

Adobe Flash nen´ı jedina´ platforma pro spoustˇ enˇ ´ı her a zobrazovan´ ´ı inter- aktivn´ıho obsahu na webu obecne.ˇ V nasleduj´ ´ıc´ıch rˇadc´ ´ıch vyjmenuji dalsˇ´ı technologie, ktere´ nab´ız´ı podobnou funkcionalitu a stejneˇ jako Flash maj´ı sve´ klady a zapory.´

4.5.1 Microsoft Silverlight

V roce 2007 priˇ selˇ Microsoft s prakticky stejnou platformou jako Flash [12]. Melˇ obrovske´ pokryt´ı trhu d´ıky rozsˇ´ırenˇ ´ı operacnˇ ´ıho systemu´ MS Win- dows, ve kterem´ byl Silverlight predinstalovˇ an´ a integrovan´ do Inter- net Exploreru. Silverlight melˇ stejny´ c´ıl jako Flash (byl prˇ´ımo inspirovan´ jeho usp´ echem),ˇ stala´ za n´ım silna´ spolecnost,ˇ existovaly kvalitn´ı vyvojov´ e´ nastroje´ (MS Visual Studio), melˇ silnou komunitu vyvoj´ a´rˇu˚ (.NET). Presˇ vsechnyˇ tyto prednostiˇ se tem´ eˇrˇ vubec˚ nerozsˇ´ıril,ˇ nikdo nec´ıtil potrebuˇ pouzˇ´ıvat a vyv´ıjet aplikace pro cokoliv jineho´ nezˇ Flash. K vyvoji´ her se prakticky nikdy nepouzˇ´ıval a po nekolikaˇ neusp´ eˇsnˇ ych´ pokusech od nejˇ sam´ Microsoft upustil.

4.5.2 HTML 5

HTML 5 je nejnovejˇ sˇ´ı verze jazyka HTML [3]. V dobeˇ predˇ HTML 5 nebyl ve webovych´ prohl´ızeˇ cˇ´ıch zˇadn´ y´ jiny´ zpusob,˚ jak prehrˇ at´ video nebo jiny´ in- teraktivn´ı obsah, nezˇ prav´ eˇ Flash. JavaScript byl v plenkach´ a neexistovaly

18 4. FLASHJAKOHERN´I PLATFORMA pouzitelnˇ e´ frameworky. Mnoho lid´ı si myslelo, zeˇ s prˇ´ıchodem HTML 5 uzˇ nebude Flash potreba,ˇ protozeˇ jej nahrad´ı, nav´ıc nebude potrebovatˇ plugin v prohl´ızeˇ ci.ˇ Realita je takova,´ zeˇ novinky teto´ technologie jsou do prohl´ızeˇ cˇu˚ imple- mentovany´ relativneˇ pozde.ˇ Nav´ıc i v roce 2014, kdy se webove´ stranky´ pro Internet Explorer 6 uzˇ ani neoptimalizuj´ı, stale´ se m´ısty vyskytuj´ı problemy´ s ruznou˚ implementac´ı JavaScriptu v jednotlivych´ prohl´ızeˇ cˇ´ıch. HTML 5 je vhodny´ pro interaktivn´ı aplikace a webove´ stranky,´ ale pro hry (cozˇ je hlavn´ı a v dnesnˇ ´ı dobeˇ asi jedina´ c´ılova´ skupina Flashe) je vylozenˇ eˇ ne- vhodny.´ Objevuj´ı se experimenty s portovan´ ´ım existuj´ıc´ıch her do HTML 5, dostatecnˇ y´ vykon´ na modern´ı hru ale stale´ nema´ a jestˇ eˇ dlouhou dobu m´ıt nebude [19].

4.5.3 Unity

Unity je skvelˇ y´ 3D engine s obrovskou komunitou. Kromeˇ vlastn´ıho plu- ginu umozˇnujeˇ i export na jine´ platformy a dosahuje vysokeho´ vykonu´ na mobiln´ıch zarˇ´ızen´ıch. Unity plugin je ale nekolikanˇ asobn´ eˇ (~100 MB) vetˇ sˇ´ı nezˇ Flash plugin, cozˇ je dost velky´ problem´ pro prˇ´ılezitostnˇ e´ hra´ce,ˇ kterˇ´ı v dnesnˇ ´ı dobeˇ tvorˇ´ı stale´ vetˇ sˇ´ı cˇast´ trhu. Unity plugin proto dosahuje pokryt´ı asi jen 30 procent [14].

4.5.4 iOS Posledn´ı technologie sice nen´ı webova,´ operacnˇ ´ı system´ iOS ale v po- sledn´ıch letech znacnˇ eˇ ovlivnil vyvoj´ Flashe a jeho vn´ıman´ ´ı verejnostˇ ´ı. odjakzivaˇ nemelˇ rad´ Flash a hlasal,´ zeˇ zˇadn´ e´ mobiln´ı zarˇ´ızen´ı od firmy Apple nikdy Flash nebude podporovat [13]. Kdyzˇ v roce 2012 spolecnostˇ Adobe oznamila,´ zeˇ zastavuj´ı vyvoj´ mobiln´ı verze Flash Playeru, vyvo- lalo to velky´ rozruch a hlavneˇ nepochopen´ı ze strany uzivatelˇ u˚ i vyvoj´ a´rˇu.˚ Veskerˇ e´ aplikace pro mobiln´ı zarˇ´ızen´ı (vcetnˇ eˇ her) se ale nespoustˇ ´ı na webu, ale jako nativn´ı aplikace pro dane´ zarˇ´ızen´ı. D´ıky technologii Adobe AIR je moznˇ e´ aplikace napsane´ ve Flashi zkompilovat a zabalit jako nativn´ı apli- kace pro iOS nebo Android, mobiln´ı Flash Player tedy vubec˚ nen´ı potreba.ˇ

19 Kapitola 5

Vyvoj´ hern´ıhoenginu

Kdyzˇ jsem zacalˇ psat´ diplomovou praci,´ ve firmeˇ CUKETA, s.r.o. jsme zacˇ´ınali vyv´ıjet pocˇ´ıtacovouˇ hru, ktera´ melaˇ jasneˇ dane´ pozadavky.ˇ Melaˇ to byt´ RTS tower defense hra pro jednoho hra´ceˇ (kampanˇ s prˇ´ıbehem)ˇ nebo pro dva hra´ceˇ (multiplayer), multiplatformn´ı (web, mobiln´ı zarˇ´ızen´ı s operacnˇ ´ımi systemy´ iOS a Android) s 2D enginem. Vzhledem k vyjmeno- vanym´ narok´ um˚ a dosavadn´ım zkusenostemˇ celeho´ tymu´ jsme zvolili plat- formu Flash a ja´ jsem dostal na starost vyvoj´ hern´ıho enginu, nad kterym´ melˇ byt´ pozdejiˇ postaven editor pro konfiguraci mis´ı. Popis vyvoje´ hern´ıho enginu a editoru v teto´ a nasleduj´ ´ıc´ı kapitole tvorˇ´ı steˇzejnˇ ´ı cˇast´ me´ diplo- move´ prace.´

5.1 J´adro

Cele´ jadro´ je zalozenoˇ na existenci nekolikaˇ zakladn´ ´ıch objektu˚ a struk- tur, ktere´ definuj´ı vztahy mezi temitoˇ objekty. Jsou to World, Player, En- tity, Action.Zakladn´ ´ı princip fungovan´ ´ı enginu je spoustˇ enˇ ´ı akc´ı, ktere´ menˇ ´ı stav hern´ıho sveta,ˇ entit a vsechˇ dalsˇ´ıch objektu,˚ ktere´ hern´ı svetˇ obsahuje. Tyto akce jsou uchovav´ any´ a spoustˇ enyˇ v zasobn´ ´ıku akc´ı, ktery´ je reprezen- tovan´ objektem ActionStack.

5.1.1 World

Objekt World predstavujeˇ cely´ hern´ı svetˇ a seskupuje v sobeˇ entity, ktere´ se v nemˇ nachazej´ ´ı. Primarn´ eˇ obsahuje seznam hra´cˇu,˚ kterˇ´ı jsou reprezen- tovani´ objektem Player. Je moznˇ e´ se dozˇadat´ konkretn´ ´ıho hra´ceˇ na zaklad´ eˇ identifikatoru´ nebo seznamu vsechˇ hra´cˇu.˚ Dale´ obsahuje nekterˇ e´ dalsˇ´ı struktury potrebnˇ e´ k reprezentaci hern´ıho sveta,ˇ jako je naprˇ´ıklad definice hern´ıho prostredˇ ´ı (mapy) nebo konfigurace. Jsou zde take´ uchovany´ informace o stavu hern´ıho svetaˇ v caseˇ a struk- tury, ktere´ tento stav menˇ ´ı. V prvn´ı radˇ eˇ je to ActionStack, ktery´ kromeˇ

20 5. VYVOJHERN´ ´IHOENGINU seznamu akc´ı, ktere´ jsou naplanovan´ e´ k vykonan´ ´ı, uchovav´ a´ informaci o aktualn´ ´ım case,ˇ ve kterem´ se svetˇ nachaz´ ´ı.

5.1.2 Player

Objekt Player predstavujeˇ hra´ce,ˇ ktery´ se u´ castnˇ ´ı dane´ hry. Mu˚ zeˇ to byt´ realn´ y´ clovˇ ek,ˇ ktery´ menˇ ´ı svetˇ interakc´ı s grafickym´ uzivatelskˇ ym´ roz- hran´ım, nebo pouze hra´cˇ reprezentovany´ pocˇ´ıtacem,ˇ jehozˇ chovan´ ´ı je ovladan´ e´ skriptem nebo umelouˇ inteligenc´ı. Pocetˇ hra´cˇu˚ z principu nen´ı omezen, nemus´ı byt´ dokonce zˇadn´ y.´ Jednotliv´ı hra´ciˇ mohou byt´ sesku- povani´ do tym´ u.˚ Hra´cˇ v sobeˇ agreguje vsechnyˇ entity, jichzˇ je vlastn´ıkem, a uchovav´ a´ si informace o svem´ profilu, tj. urove´ nˇ hra´ce,ˇ mnozstvˇ ´ı virtualn´ ´ı meny,ˇ pocetˇ zivotˇ u˚ a dalsˇ´ı.

5.1.3 Entity

Objekt Entity reprezentuje realn´ y´ objekt, ktery´ je v hern´ım svetˇ eˇ um´ısten.ˇ Mu˚ zeˇ to byt´ staticka´ budova, pohybuj´ıc´ı se jednotka nebo trebaˇ figurka na sachovnici.ˇ Entita sama o sobeˇ nema´ zˇadnou´ konkretn´ ´ı funkcionalitu a nen´ı potrebaˇ pro ruzn˚ e´ typy objektu˚ implementovat ruzn˚ e´ entity. Ruzn˚ e´ funkcionality ruzn˚ ych´ druhu˚ entit jsou zajistˇ enyˇ ruzn˚ ymi´ moduly, ktere´ en- tita agreguje. Mu˚ zeˇ to byt´ napr.ˇ modul pro zajistˇ enˇ ´ı pohybu po mapeˇ nebo modul pro strelbu.ˇ

5.1.4 IAction

Akce jsou objekty implementuj´ıc´ı rozhran´ı IAction. Jde o objekty predstavujˇ ´ıc´ı navrhov´ y´ vzor command, ktere´ svym´ vykonan´ ´ım zajistˇ ’uj´ı zmenuˇ stavu hern´ıho sveta.ˇ Vsechnyˇ objekty mohou o zmenˇ eˇ sveho´ stavu informovat objekty, ktere´ se prihlˇ as´ ´ı jako posluchaciˇ udalost´ ´ı podle vzoru event listener. Akce samotne´ mohou byt´ take´ spoustˇ enyˇ jako reakce na udalosti,´ protozeˇ ony samy mohou byt´ v nekterˇ ych´ prˇ´ıpadech poslu- chaci.ˇ Kazdˇ a´ akce ma´ bezparametrickou metodu execute s navratov´ ym´ typem Boolean. Tato navratov´ a´ hodnota slouzˇ´ı k rozeznan´ ´ı, jestli dana´ akce ma´ byt´ po vykonan´ ´ı vracena´ znovu do zasobn´ ´ıku akc´ı, nebo jestli ma´ byt´ za- hozena. Vracen´ ´ım zpetˇ do zasobn´ ´ıku se akce recykluje a znovu se vykona´ v dalsˇ´ım naplanovan´ em´ case.ˇ Tyto akce nejsou jednorazov´ e,´ ale reprezen-

21 5. VYVOJHERN´ ´IHOENGINU tuj´ı nejakouˇ dlouhodobou cinnost.ˇ Mu˚ zeˇ to byt´ naprˇ´ıklad stavba budovy nebo let projektilu.

5.1.5 IModule

Jak uzˇ bylo reˇ cenoˇ v sekci Entity, kazdˇ a´ entita agreguje seznam ano- nymn´ıch modulu,˚ ktere´ mohou byt´ dotazem z´ıskany´ na zaklad´ eˇ identi- fikatoru´ modulu. Tyto moduly mohou byt´ do entity vlozenyˇ a opetˇ z´ıskany´ kterymkoliv´ objektem (pokud je to dovoleno). Entita ale nen´ı jediny´ ob- jekt, ktery´ mu˚ zeˇ tyto moduly agregovat. Dalsˇ´ımi takovymi´ strukturami jsou World, Player nebo jakykoliv´ jiny´ objekt, ktery´ si mu˚ zeˇ vyvoj´ a´rˇ vytvoritˇ jako plugin. Z toho vyplyv´ a,´ zeˇ hlavn´ı funkcnˇ ´ı prvky, ktere´ hybou´ hern´ım svetem,ˇ jsou IAction a IModule. V predchozˇ ´ı kapitole byla zm´ınka o ActionScript knihovnach,´ ktere´ je moznˇ e´ pouzˇ´ıt k vyvoji´ her. Tyto knihovny maj´ı vetˇ sinouˇ uzˇ z principu na- prosto odlisnˇ e´ rozhran´ı, nekterˇ e´ napr.ˇ pouzˇ´ıvaj´ı staticke´ metody pro volan´ ´ı svych´ funkc´ı. Pouzitˇ ´ı takove´ knihovny prˇ´ımo v projektu by zpusobilo˚ pev- nou zavislost´ a v budoucnu by znemozniloˇ pouzitˇ ´ı jine´ knihovny bez velkych´ zmenˇ ve stavaj´ ´ıc´ım kodu.´ Muj˚ engine doka´zeˇ bez problemu´ vyuzˇ´ıt jakykoliv´ extern´ı framework, ktery´ bude cht´ıt vyvoj´ a´rˇ pouzˇ´ıt. Stacˇ´ı jej pripojitˇ do projektu a naprogramovat modul, ktery´ bude tento framework zapouzdrovat.ˇ

5.1.6 Diagram tˇr´ıd

Na obrazku´ 5.1 jsou videtˇ zakladn´ ´ı trˇ´ıdy enginu, ktere´ byly popsany´ vy´se.ˇ Diagram je zjednodusenˇ y´ tak, aby z nejˇ bylo moznˇ e´ pochopit zakladn´ ´ı vztahy mezi jednotlivymi´ objekty.

5.2 Tˇr´ıdya techniky pro efektivn´ıpr´aci

Priˇ vyvoji´ vlastn´ıho hern´ıho enginu nebo nastavby´ do existuj´ıc´ıho en- ginu se setkate´ s problemy´ typickymi´ pro prostredˇ ´ı pocˇ´ıtacovˇ ych´ her. Tyto problemy´ jsou efektivneˇ reˇ sitelnˇ e´ urcitˇ ymi´ datovymi´ strukturami nebo al- goritmy. V nasleduj´ ´ıc´ı kapitole pop´ısiˇ nekterˇ e´ z techtoˇ problem´ u˚ a navrhy´ na jejich reˇ senˇ ´ı.

22 5. VYVOJHERN´ ´IHOENGINU

World ActionStack 1 1 1..* +getPlayers() : +addAction(action : IAction) +getPlayer(id : String) : Player +tick() : void +addEntity(entity : Entity) : void +removeEntity(entity : Entity) : void 0..* +getModule(type : String) : IModule +getActionStack() : ActionStack 1 IAction +tick() : void +execute() : Boolean +getTick() : int 1 0..* 1..* Player 0..* 0..* +getEntities() : +getEntities(type : String, state : String) : IModule 1..* +getEntity(id : String) : Entity -actions : 0..* +getModule(type : String) : IModule +getType() : String

1..* 0..*

0..* Entity 0..* +getPlayer() : Player +getType() : String +getModule(type : String) : IModule

Obrazek´ 5.1: Zjednodusenˇ e´ jadro´ enginu

Konfigurace hodnot hern´ıchatribut ˚u

Kazdˇ a´ entita vyskytuj´ıc´ı se v hern´ım svetˇ eˇ je konfigurovana´ mnozstvˇ ´ım parametru,˚ ktere´ jsou reprezentovany´ nejakouˇ primitivn´ı hodnotou. Typy techtoˇ parametru˚ jsou zavisl´ e´ od povahy daneho´ parametru, typicky je to bud’ cele´ cˇ´ıslo, desetinne´ cˇ´ıslo, vy´ctovˇ a´ hodnota nebo pravdivostn´ı hod- nota. V nekterˇ ych´ prˇ´ıpadech mu˚ zeˇ byt´ konfigurace pomoc´ı primitivn´ıch typu˚ dostatecnˇ a,´ i kdyzˇ tyto hodnoty menˇ ´ıme dynamicky v prub˚ ehuˇ hry. Po- kud menˇ ´ıme napr.ˇ celocˇ´ıselnou hodnotu, existuj´ı prˇ´ıpady, kdy uzˇ pouhe´ zvysovˇ an´ ´ı a snizovˇ an´ ´ı nebude dostacovat.ˇ Predstavmeˇ si situaci, kdy chceme entiteˇ kratkodob´ eˇ zvy´sitˇ pocetˇ zivotˇ u˚ a po uplynut´ı urcenˇ e´ doby ji znovu sn´ızit.ˇ Tohle mu˚ zemeˇ provad´ etˇ v´ıcekrat´ a jednotlive´ bonusy se mo- hou prekrˇ yvat.´ Nav´ıc nekterˇ e´ bonusy mohou byt´ procentualn´ ´ı a nekterˇ e´ bodove.´ V takovem´ prˇ´ıpadeˇ se bude hodit trˇ´ıda, ktera´ zajist´ı spravu´ techtoˇ bonusu˚ a bude umozˇnovatˇ jejich postupne´ pridˇ av´ an´ ´ı a odeb´ıran´ ´ı. V mem´ enginu je tato trˇ´ıda nazvana´ BonusManager (Obrazek´ 5.2). Kazdˇ y´

23 5. VYVOJHERN´ ´IHOENGINU

BonusManager reprezentuje hodnotu jednoho primitivn´ıho typu a obsahuje jeho zakladn´ ´ı hodnotu a seznam bonusu,˚ ktere´ reprezentuje trˇ´ıda Bonus. Bo- nusManageru je moznˇ e´ pridˇ avat´ a pote´ odeb´ırat bonusy, menitˇ jeho zakladn´ ´ı hodnotu a samozrejmˇ eˇ z nejˇ cˇ´ıst aktualn´ ´ı hodnotu, ktera´ je vysledkem´ apli- kovan´ ´ı vsechˇ aktivn´ıch bonusu.˚

SomeClass -damageBonusManager : BonusManager +getDamageValue() : int +getDamageManager() : BonusManager

<>

BonusManager Bonus +getBasicValue() : int 1 0..* +getCurrentValue() : int +getValue() : int +addBonus(bonus : Bonus) +isPercentage() : Boolean +removeBonus(bonus : Bonus)

Obrazek´ 5.2: BonusManager

Vytv´aˇren´ıobjekt ˚ua jejich konfigurace

Existuje mnoho navrhov´ ych´ vzoru˚ slouzˇ´ıc´ıch k vytva´renˇ ´ı objektu˚ a jejich spravu.´ Zde mam´ na mysli vytva´renˇ ´ı objektu˚ s urcitouˇ konfigurac´ı, ktera´ je stejna´ v cele´ hre,ˇ ale v prub˚ ehuˇ hry se mu˚ zeˇ menit.ˇ Jsou to napr.ˇ entity a jej´ı moduly. K vytva´renˇ ´ı techtoˇ objektu˚ jsem zvolil metodu vychazej´ ´ıc´ı z navrhov´ eho´ vzoru Factory Method [4]. Kazdˇ a´ trˇ´ıda implementuj´ıc´ı IModule, ktera´ se t´ımto zpusobem˚ vytva´rˇ´ı, ma´ svuj˚ vlastn´ı objekt IModuleFactory s metodou createModule(). Volan´ ´ım teto´ metody se vytvorˇ´ı instance IModule, ktera´ je pripravenˇ a´ k pouzˇ´ıvan´ ´ı (priˇ vlozenˇ ´ı do hern´ıho svetaˇ se jestˇ eˇ vola´ metoda init()), jak je znazorn´ enoˇ na obrazku´ 5.3. Hern´ı entity a moduly jsou vytva´renyˇ s ruzn˚ ymi´ parametry, ktere´ ovlivnujˇ ´ı jejich chovan´ ´ı behemˇ hry. Tyto parametry jsou nakonfigurovany´ ve factory objektu, ktery´ dane´ objekty vytva´rˇ´ı s jizˇ nastavenymi´ parametry. Behemˇ hry je nutne´ tuto konfiguraci menitˇ a zde opetˇ vyuzijemeˇ BonusMa- nager. Rozlisujemeˇ dva typy nastaven´ı podle toho, jestli chceme zmenitˇ (kratkodob´ eˇ ciˇ dlouhodobe)ˇ parametry jedne´ nebo nekolikaˇ entit na scen´ e,ˇ

24 5. VYVOJHERN´ ´IHOENGINU nebo jestli chceme zmenitˇ parametry prˇ´ımo faktory objektu, cozˇ bude m´ıt za nasledek´ zmenuˇ parametru˚ vsechˇ do budoucna vytvorenˇ ych´ objektu.˚ Oba typy konfigurace se beˇznˇ eˇ vyuzˇ´ıvaj´ı v ruzn˚ ych´ kombinac´ıch podle toho, jake´ hern´ı mechaniky upravujeme.

IModule IModuleFactory 0..* 1 +getModuleFactory() : IModuleFactory +createModule() : IModule

FireModule FireModuleFactory +fire() 0..* 1 +getDamageValue() +getDamageValue() +getDamageBonusManager() +getDamageBonusManager()

Obrazek´ 5.3: Vytva´renˇ ´ı modulu˚ pomoc´ı IModuleFactory

Pooling objekt ˚u

Object pooling je navrhov´ y´ vzor pro opetovnˇ e´ znovupouzitˇ ´ı jizˇ jednou vy- tvorenˇ ych´ objektu.˚ Motivac´ı k teto´ technice mu˚ zeˇ byt´ nekolikˇ a konkretn´ ´ı implementace se mu˚ zeˇ lisitˇ v zavislosti´ na konkretn´ ´ım problemu,´ ktery´ ma´ reˇ sit.ˇ

• Vytva´renˇ e´ objekty jsou velke´ a je casovˇ eˇ naro´ cnˇ e´ je vytvorit.ˇ

• Objekt je maly´ a je vytvorenˇ rychle, ve spiˇ cceˇ se jich ale vytva´rˇ´ı mnoho.

• Chceme omezit celkovy´ pocetˇ stejnych´ objektu,˚ a pokud uzˇ dalsˇ´ı nen´ı k dispozici, zadatelˇ mus´ı cekatˇ na uvolnenˇ ´ı.

Generov´an´ıpseudon´ahodnych´ ˇc´ısel

Vetˇ sinouˇ pozadujeme,ˇ aby byl hern´ı engine plneˇ deterministicky,´ a to i po- kud v prub˚ ehuˇ hry generujeme nahodn´ a´ cˇ´ısla (napr.ˇ strelaˇ zpusob˚ ´ı zranenˇ ´ı nahodn´ eˇ od X do Y). Toho doc´ıl´ıme pouzitˇ ´ım generatoru´ pseudonahodn´ ych´ cˇ´ısel, napr.ˇ Mersenne Twister [15]. Zname-li´ tedy hodnotu pocˇate´ cnˇ ´ıho random seedu“ a touto hodnotou inicializujeme generator,´ mu˚ zemeˇ simu- ” lovat jakoukoliv jizˇ probehlouˇ hru, o ktere´ mame´ zaznam.´ Jedine´ vstupy,

25 5. VYVOJHERN´ ´IHOENGINU ktere´ potom mohou ovlivnit hru, jsou uzivatelskˇ e´ operace z grafickeho´ roz- hran´ı. Seznam techtoˇ operac´ı spolecnˇ eˇ s random seedem tedy tvorˇ´ı kom- pletn´ı zaznam´ odehrane´ hry. Tohle je velmi uziteˇ cnˇ e´ priˇ ladenˇ ´ı enginu a opraveˇ chyb, ktere´ se nedarˇ´ı jednoduseˇ zreprodukovat. Mame-li´ zaznam´ hry, ve ktere´ se projevila chyba programu, mu˚ zemeˇ si tuto hru prehrˇ avat´ opakovaneˇ a oprava chyby je mnohem jednodusˇsˇ´ı.

IOperation <> User Interface +decode() : IAction +getTick()

0..* <>

Dispatcher 1 +acceptOperation(op : IOperation)

<> <>

SynchronizationService World +addAction(action : IAction)

Obrazek´ 5.4: Prace´ s Dispatcherem

5.3 Komunikace v s´ıti

Generovan´ ´ı pseudonahodn´ ych´ cˇ´ısel vyuzijemeˇ i priˇ vyvoji´ hry pro v´ıce hra´cˇu.˚ Priˇ komunikaci dvou enginu˚ v pocˇ´ıtacovˇ e´ s´ıti je nutne´ zajistit, aby jejich stav byl v kazdˇ em´ okamzituˇ naprosto stejny.´ Pokud zarˇ´ıd´ıme, aby priˇ inicializaci generatoru´ byl na obou stranach´ stejny´ seed, budou tyto dveˇ hry prob´ıhat naprosto stejne.ˇ Potom uzˇ stacˇ´ı jen zajistit prenosˇ uzivatelskˇ ych´ operac´ı k druhemu´ klientovi. K tomu slouzˇ´ı Dispatcher (obrazek´ 5.4). Dispatcher je trˇ´ıda, ktera´ zajistˇ ’uje prenosˇ uzivatelskˇ ych´ operac´ı mezi v´ıce klienty. Uzivatelskˇ a´ operace je reprezentovana´ trˇ´ıdou, ktera´ implementuje rozhran´ı IOperation a predstavujeˇ jakykoliv´ extern´ı zasah´ do enginu (presˇ uzivatelskˇ e´ rozhran´ı). Uzivatelskˇ e´ rozhran´ı zavola´ na Dispatcheru metodu acceptOperation() a ten pote´ zajist´ı jej´ı prenosˇ a vykonan´ ´ı v presnˇ eˇ dany´

26 5. VYVOJHERN´ ´IHOENGINU okamzikˇ u vsechˇ klientu.˚ Operace priˇ dekodov´ an´ ´ı vytvorˇ´ı konkretn´ ´ı akci, kterou engine vykona.´ Protozeˇ se operace serializuje a pos´ıla´ po s´ıti, je vhodne,´ aby jej´ı pa- rametry byly pouze primitivn´ı typy. Pokud tedy chceme poslat informaci o nekterˇ e´ Entite,ˇ nepos´ılame´ cely´ objekt (ktery´ se mu˚ zeˇ skladat´ z des´ıtek dalsˇ´ıch objektu),˚ ale pouze jej´ı unikatn´ ´ı identifikator,´ ktery´ Dispatcher nasledn´ eˇ preloˇ zˇ´ı na dany´ objekt.

27 Kapitola 6 Level editor

Ned´ılnou soucˇast´ ´ı hern´ıho enginu je editor, tj. aplikace, ktera´ umozˇnujeˇ konfiguraci chovan´ ´ı pomoc´ı grafickeho´ rozhran´ı. Takove´ aplikace se castoˇ pojmenovavaj´ ´ı ruzn˚ ymi´ nazvy´ (, map editor, level editor), v zasad´ eˇ ale maj´ı spolecnˇ e´ hlavn´ı rysy a slouzˇ´ı ke stejnemu´ u´ celu.ˇ Tento editor vyv´ıj´ım jizˇ necele´ dva roky a od zacˇatku´ vyvoje´ byl pouzˇ´ıvan´ tymem´ game designeru˚ pro vytva´renˇ ´ı real-time strategicke´ hry, s cˇ´ımzˇ se pojilo nekolikˇ vyhod,´ ale take´ nevyhod.´ Vyhodou´ byl samozrejmˇ eˇ tem´ eˇrˇ okamzitˇ y´ feedback na novou funkcionalitu. D´ıky nasˇ´ı spolupraci´ jsem take´ znal jejich potreby,ˇ a proto jsem mohl vyv´ıjet editor na zaklad´ eˇ realn´ ych´ potrebˇ opravdovych´ uzivatelˇ u.˚ Na druhou stranu, d´ıky nove´ funkcionalite,ˇ ktera´ tem´ eˇrˇ kazdˇ y´ den vyvoje´ vznikala, vznikaly take´ nove´ chyby, ktere´ bylo nutne´ reˇ sit,ˇ a pruznˇ eˇ a rychle reagovat na kazdˇ y´ nega- tivn´ı feedback, ktery´ by mohl zpomalit nebo upln´ eˇ zastavit praci´ game de- signeru.˚ Nutnou soucˇast´ ´ı bylo tedy verzovan´ ´ı programu i souboru˚ v nemˇ vytvorenˇ ych´ tak, aby bylo moznˇ e´ se kdykoliv vratit´ k praci´ s predchozˇ ´ı verz´ı editoru, kdyby se vyskytla kriticka´ chyba bran´ ´ıc´ı v praci.´

6.1 Konfigurace chov´an´ı

Aby bylo moznˇ e´ hern´ı engine pouzˇ´ıt pro tvorbu realn´ e´ hry, je nutne,´ aby jej bylo moznoˇ nakonfigurovat tak, aby vyhovoval specifickym´ pozadavkˇ um˚ konkretn´ ´ı hry. Velke´ hern´ı enginy vetˇ sinouˇ disponuj´ı pokrocilˇ ym´ grafickym´ vykres- lovan´ ´ım, d´ıky kteremu´ je moznˇ e´ vizualizovat jakoukoliv hru jakehokoliv´ zˇanru.´ Nadhern´ a´ grafika, at’ uzˇ 2D nebo 3D, ale nestacˇ´ı. Hern´ı mechaniky, principy, uzivatelskˇ e´ rozhran´ı a dalsˇ´ı, je moznˇ e´ v takovem´ enginu konfi- gurovat vetˇ sinouˇ jen pro mensˇ´ı hry a v mensˇ´ım tymu´ lid´ı. Pokud hra ma´ byt´ rozsahlej´ sˇ´ı, nestacˇ´ı dodany´ engine a editor, ale vetˇ sinouˇ je nutne´ spe- cifickou funkcionalitu doprogramovat jako souhrn pluginu˚ do hotoveho´ enginu. At’ uzˇ se tedy rozhodnete programovat vlastn´ı engine, nebo pouzˇ´ıt

28 6. LEVELEDITOR jizˇ hotovy,´ nevyhnete se programovan´ ´ı hern´ıho sveta,ˇ ktery´ mu˚ zeˇ byt´ dost slozitˇ y´ v zavislosti´ na typu hry. Toho ostatneˇ vyuzˇ´ıvaj´ı i velke´ hern´ı spolecnosti.ˇ Vyuzijˇ ´ı pokrocilˇ e´ vy- kreslovan´ ´ı hotoveho´ enginu a zbytek hry si naprogramuj´ı sami. Jeden z duvod˚ u˚ se nab´ız´ı – navzdory tomu, zeˇ napr.ˇ v Unreal Enginu by tech- nicky bylo moznˇ e´ naklikat i rozsahlej´ sˇ´ı hru, bylo by znacnˇ eˇ slozitˇ e´ tuto hru vyv´ıjet a udrzovat,ˇ pokud by tym´ game designeru˚ melˇ hodneˇ clenˇ u.˚ Beˇznˇ y´ pocetˇ game designeru˚ ve strednˇ eˇ velkem´ nebo vetˇ sˇ´ım hern´ım studiu, pra- cuj´ıc´ıch na jedine´ hre,ˇ castoˇ byv´ a´ v rˇadu´ des´ıtek azˇ stovek. V takovemto´ mnozstvˇ ´ı lid´ı uzˇ nen´ı moznˇ e´ efektivneˇ veskerouˇ funkcionalitu hry konfigu- rovat v samotnem´ hern´ım editoru bez jakychkoliv´ nastaveb.´

6.1.1 Typy konfigurace

Kazdˇ y´ engine si svou konfiguraci uchovav´ a´ v nejakˇ em´ vlastn´ım formatu,´ bud’to binarn´ ´ım, nebo pomoc´ı XML. Tato konfigurace mu˚ zeˇ byt´ take´ za- kompilovana´ do hotove´ hry v okamzikuˇ exportu. Nav´ıc vetˇ sinaˇ hern´ıch enginu˚ disponuje v´ıce ciˇ men´ eˇ jednoduchym´ skriptovac´ım jazykem, ktery´ umozˇnujeˇ jednoduche´ psan´ı skriptu,˚ ktere´ je moznˇ e´ spoustˇ etˇ na zaklad´ eˇ ruzn˚ ych´ hern´ıch udalost´ ´ı nebo na zaklad´ eˇ casu.ˇ Tyto skriptovac´ı jazyky jsou vetˇ sinouˇ odvozene´ z jizˇ existuj´ıc´ıch jazyku˚ (napr.ˇ Unity4 umozˇnujeˇ psat´ skripty v jazyc´ıch C#, JavaScript nebo Boo), ktere´ maj´ı omezene´ moznostiˇ nebo maj´ı nekterˇ e´ konstrukce zakazan´ e.´

6.1.2 Konfigurace m´ehoenginu

Jak bylo zm´ınenoˇ v drˇ´ıvejˇ sˇ´ı kapitole, zakladem´ meho´ enginu jsou akce, tj. trˇ´ıdy implementuj´ıci rozhran´ı IAction. Priˇ vytvorenˇ ´ı takoveho´ objektu se konstruktorem predajˇ ´ı veskerˇ e´ dalsˇ´ı objekty a parametry, ktere´ akce potrebujeˇ ke svemu´ vykonan´ ´ı. Kazdˇ a´ takova´ akce (nebo bal´ık akc´ı) ma´ nav´ıc svuj˚ popisny´ XML soubor, ktery´ definuje poradˇ ´ı a semantiku´ para- metru˚ konstruktoru. D´ıky tomuto souboru editor zna´ vsechnyˇ dostupne´ akce, a to ma´ dveˇ vyhody.´ Za prve´ je d´ıky tomu moznˇ e´ engine rozsiˇ rovatˇ o dalsˇ´ı akce, za druhe´ editor zna´ vyznam´ jednotlivych´ parametru˚ a d´ıky tomu doka´zeˇ vykreslit formula´rˇ pro konfiguraci takoveto´ akce, vcetnˇ eˇ tex- toveho´ popisu a dalsˇ´ıch vecˇ ´ı, potrebnˇ ych´ pro uzivatelskˇ e´ rozhran´ı.

29 6. LEVELEDITOR

6.1.3 Reprezentace akc´ıa ulozen´ereakceˇ na ud´alosti

Rozhran´ı IAction a jednotlive´ akce, ktere´ toto rozhran´ı implementuj´ı, nejsou jedine´ dule˚ zitˇ e´ objekty v procesu vytva´renˇ ´ı a spoustˇ enˇ ´ı akc´ı. Pokud akci konfigurujeme jako reakci na nejakouˇ udalost,´ je potrebaˇ uchovat parame- try potrebnˇ e´ k vytvorenˇ ´ı dane´ akce. Objekty IAction vseobecnˇ eˇ nen´ı moznˇ e´ vykonavat´ opakovane,ˇ pokud k tomu nejsou prˇ´ımo urceny.ˇ Nav´ıc jako re- akce na udalost´ se mohou spustit dveˇ stejne´ akce a mohou beˇzetˇ paralelne.ˇ Proto nen´ı moznˇ e´ m´ıt predvytvoˇ renˇ e´ jizˇ hotove´ akce a ty potom spustit. K tomuto slouzˇ´ı objekt ActionItem. Ten uchovav´ a´ seznam parametru,˚ ktere´ jsou priˇ vytva´renˇ ´ı akce predˇ any´ do konstruktoru, a referenci na ob- jekt, ktery´ akce vytva´rˇ´ı. Tento objekt implementuje rozhran´ı IActionTem- plate a slouzˇ´ı jako factory objekt pro akce. Dynamicke´ parametry, ktere´ nejsou znamy´ priˇ konfiguraci, ale azˇ v dobeˇ spoustˇ enˇ ´ı akce, doplnujeˇ ob- jekt, ktery´ akce spoustˇ ´ı pomoc´ı setter metod. Vztahy mezi temitoˇ objekty jsou znazorn´ enyˇ na obrazku´ 6.1.

IActionTemplate +createAction(tick : int, params : ) : IAction

1 <> 0..* ActionItem IAction +getParameters() : +execute() : Boolean +getActionTemplate() : IActionTemplate +getTick() : int +createAction() : IAction 0..* 0..*

0..* IModule +runEvent() : void 0..*

Obrazek´ 6.1: Vytva´renˇ ´ı akc´ı pomoc´ı IActionTemplate a ActionItem

6.1.4 Verzov´an´ıkonfigurace

Priˇ vyvoji´ kazdˇ eho´ softwaru je nutnost´ı pouzˇ´ıvat nejakˇ y´ verzovac´ı system.´ At’ uzˇ se jedna´ o Git, Subversion, Mercurial nebo nekterˇ e´ men´ eˇ popularn´ ´ı

30 6. LEVELEDITOR systemy,´ zakladn´ ´ı duvody˚ pro pouzˇ´ıvan´ ´ı jsou stejne´ - zaznamenan´ ´ı a his- torie vsechˇ zmenˇ v programu a reˇ senˇ ´ı konfliktn´ıch situac´ı, kdy v´ıce pro- gramator´ u˚ menˇ ´ı stejnou cˇast´ kodu.´ I jeden nezavisl´ y´ tvurce˚ her, ktery´ ne- mus´ı reˇ sitˇ konflikty v´ıce programator´ u,˚ mu˚ zeˇ teˇzitˇ z verzovan´ ´ı a moznostiˇ dohledan´ ´ı vsechˇ provedenych´ zmen.ˇ Verzovan´ ´ı zdrojoveho´ kodu´ ma´ jednu zasadn´ ´ı vlastnost - verzovane´ soubory jsou textoveho´ formatu,´ cozˇ je hlavn´ı predpokladˇ pro to, aby bylo moznˇ e´ uchovavat´ zmenyˇ jednotlivych´ rˇadk´ u˚ kodu,´ cozˇ je princip, na kterem´ pracuj´ı vsechnyˇ nejznam´ ejˇ sˇ´ı verzovac´ı systemy.´ Je moznˇ e´ ver- zovat i binarn´ ´ı soubory, ty vsakˇ z principu po rˇadc´ ´ıch verzovat samorejmˇ eˇ nejdou, proto se verzuj´ı jako cele´ soubory. Uzˇ od zacˇatku´ vyvoje´ editoru jsem konfiguraci ukladal´ do XML sou- boru.˚ Tyto XML soubory bylo moznˇ e´ v editoru otevrˇ´ıt, upravit a pote´ znovu ulozit.ˇ V pocˇatc´ ´ıch vyvoje´ hry ale bylo nutne´ konfiguraci vyexportovat do souboru binarn´ ´ıho formatu,´ ktery´ dokazala´ preˇ cˇ´ıst samotna´ hra. Tyto binarn´ ´ı soubory jsme ukladali´ do SVN repozita´re.ˇ Po caseˇ se tento zpusob˚ ukazal´ jako nevhodny,´ proto jsme zahrnuli parser zdrojovych´ XML sou- boru˚ prˇ´ımo do hry. Vyjmenuji nekolikˇ duvod˚ u,˚ kvuli˚ kterym´ jsme se pro tento zpusob˚ rozhodli:

• Kdyzˇ bylo potrebaˇ testovat hru, bylo nutne´ vyexporotvat vsechnyˇ potrebnˇ e´ konfigurace. Je to zdlouhava´ a rutinn´ı cinnostˇ a ta nikdy nepodporuje kreativn´ı myslenˇ ´ı, ktere´ je u vyvoje´ hry potreba.ˇ • Velmi castoˇ se objevovaly problemy´ s kompatibilitou binarn´ ´ıch sou- boru˚ a softwaru, ve kterem´ byly tyto soubory nacˇ´ıtany.´ To velmi kom- plikuje proces testovan´ ´ı a zana´sˇ´ı to do nejˇ dalsˇ´ı chybovy´ faktor. • Verzovan´ ´ı techtoˇ souboru˚ nema´ smysl a velmi to komplikuje mer- govan´ ´ı jednotlivych´ vetvˇ ´ı.

I kdyzˇ verzovan´ ´ı binarn´ ´ıch souboru˚ je ve vsechˇ systemech´ podporovano´ a dokonce existuj´ı verzovac´ı systemy´ urcenˇ e´ primarn´ eˇ pro binarn´ ´ı soubory, napr.ˇ Boar1, ze zkusenostiˇ doporucuji,ˇ pokud je to moznˇ e,´ se temtoˇ sou- borum˚ vyhnout, nebo je alesponˇ uchovavat´ v oddelenˇ em´ repozita´ri.ˇ Zde uvad´ ´ım nekterˇ e´ doporucenˇ ´ı pro praci´ s verzovac´ım systemem´ a binarn´ ´ımi soubory:

•Vubec˚ neuchovavejte´ v repozita´riˇ binarn´ ´ı soubory, ktere´ neslouzˇ´ı jako zdrojova´ data, ale jsou pouze vysledek´ nejakˇ e´ exportovac´ı procedury

1. https://code.google.com/p/boar/

31 6. LEVELEDITOR

(napr.ˇ graficke´ atlasy, ktere´ je moznˇ e´ alesponˇ ve vyvojov´ em´ prostredˇ ´ı generovat behemˇ spustˇ enˇ ´ı hry z jednotlivych´ obrazk´ u).˚

• Nebo naopak neuchovavejte´ v repozita´riˇ soubory, ktere´ jsou zdro- jove,´ ale vubec˚ nejsou potrebaˇ ani ve vyvojov´ em,´ ani v produkcnˇ ´ım prostredˇ ´ı (napr.ˇ zdrojove´ soubory programu˚ pro praci´ se zvukem a grafikou).

• Neuchovavejte´ binarn´ ´ı soubory (zvuk, grafiku) spolecnˇ eˇ se zdro- jovymi´ kody´ v jednom repozita´ri.ˇ Tyto soubory jsou vetˇ sinouˇ velke,´ cozˇ je neprˇ´ıjemne´ priˇ mergovan´ ´ı vetvˇ ´ı a updatovan´ ´ı lokaln´ ´ı kopie re- pozita´re.ˇ

Binarn´ ´ı soubory mohou m´ıt sice mensˇ´ı velikost, nezˇ upov´ıdany“´ XML ” soubor, to se ale v dnesnˇ ´ı dobeˇ neda´ povazovatˇ za vyhodu.´ Konfigu- race vetˇ sinouˇ nen´ı tak rozsahl´ a,´ aby to priˇ vyvoji´ hralo´ vyznamnou´ roli. Priˇ stahovan´ ´ı souboru˚ ze serveru v produkcnˇ ´ım prostredˇ ´ı je moznˇ e´ ce- lou sadu pozadovanˇ ych´ souboru˚ komprimovat napr.ˇ do ZIP formatu,´ cˇ´ımzˇ se usetˇ rˇ´ı velikost dat i pocetˇ pozadavkˇ u˚ na server. XML soubor je nav´ıc snadno citelnˇ y´ a umozˇnujeˇ rychle´ upravy´ i v textovem´ editoru, navzdory tomu binarn´ ´ı soubor je moznˇ e´ otevrˇ´ıt pouze v editoru k tomu urcenˇ em.´ Pouzˇ´ıvan´ ´ı stejneho´ formatu´ souboru˚ ve vyvojov´ em´ i produkcnˇ ´ım prostredˇ ´ı nav´ıc odstranujeˇ reziiˇ spojenou s exportovan´ ´ım a problemy´ s t´ım spojene.´

6.1.5 Uk´azkapopisn´ehoXML souboru

Priˇ vytvorenˇ ´ı pluginu do enginu, ktery´ je reprezentovan´ seskupen´ım trˇ´ıd, ktere´ jsou do projektu pridˇ any´ bud’ jako zdrojovy´ kod,´ nebo jako SWC knihovna2, je potrebaˇ uvest´ seznam dostupnych´ akc´ı, ktere´ vlastneˇ repre- zentuj´ı jedine´ rozhran´ı priˇ pouzˇ´ıvan´ ´ı tohoto pluginu. Kazdˇ a´ takova´ akce je reprezentovana´ aliasem3 a seznamem parametru˚ konstruktoru, podle kterych´ napr.ˇ editor pozna,´ jake´ zobrazit uzivatelskˇ e´ rozhran´ı pro konfi- guraci.

ActionAddResources Add resources

2. Adobe Flash Component file 3. viz flash.net.registerClassAlias() a flash.net.getClassByAlias()

32 6. LEVELEDITOR

6.1.6 Uk´azkakonfigurace akce Predchozˇ ´ı prˇ´ıklad ukazoval registraci pluginu do enginu, nasleduj´ ´ıc´ı prˇ´ıklad ukazuje jizˇ konkretn´ ´ı pouzitˇ ´ı akce ve hre.ˇ Atribut type udav´ a´ alias akce, ktera´ se ma´ spustit a seznam parametru˚ param udav´ a´ konkretn´ ´ı hod- noty jednotlivych´ parametru.˚ Seznam techtoˇ parametru˚ mus´ı korespondo- vat s definic´ı seznamu parametru˚ v pluginu.

6.1.7 Uk´azkakonfigurace ud´alosti Jednotlive´ akce mohou v reakci na nejakouˇ udalost´ spoustˇ etˇ dalsˇ´ı akce. K tomu slouzˇ´ı parametry react.

6.2 N´avrhuzivatelsk´ehorozhran´ıˇ

Podoba grafickeho´ uzivatelskˇ eho´ rozhran´ı proslaˇ od zacˇatku´ vyvoje´ radouˇ zmen.ˇ Sklad´ a´ se z nekolikaˇ zakladn´ ´ıch prvku˚ – okno pro hran´ı a okno pro upravu´ mapy, mezi kterymi´ je moznˇ e´ prepˇ ´ınat, casovˇ a´ osa, hlavn´ı menu, rˇ´ıd´ıc´ı panel a konfiguracnˇ ´ı panel, na kterem´ se zobrazuj´ı formula´reˇ

33 6. LEVELEDITOR pro vyplnovˇ an´ ´ı parametru˚ jednotlivych´ akc´ı. Celkovy´ nahled´ je videtˇ na obrazku´ 6.2. Jedn´ım z hlavn´ıch pozadavkˇ u˚ byla casovˇ a´ osa, na kterou by bylo moznˇ e´ umist’ovat akce, a t´ım konfigurovat jejich spoustˇ enˇ ´ı v zavislosti´ na case.ˇ Jakmile zacalaˇ vznikat cˇ´ım dal´ v´ıce slozitˇ ejˇ sˇ´ı konfigurace urovn´ ´ı, ukazalo´ se, zeˇ vetˇ sinaˇ akc´ı nen´ı spoustˇ enaˇ na zaklad´ eˇ casu,ˇ ale jako reakce na hern´ı udalosti.´ Pocˇatek´ casovˇ e´ osy se tedy transformoval na ulo´ ziˇ stˇ eˇ konfi- guracnˇ ´ıch akc´ı, ktere´ se spoustˇ ´ı ihned priˇ spustˇ enˇ ´ı hry.

Obrazek´ 6.2: Hlavn´ı okno level editoru

6.2.1 Casov´aosaˇ

Casovˇ a´ osa (obrazek´ 6.3) vypada´ podobneˇ jako casovˇ e´ osy nejruzn˚ ejˇ sˇ´ıch znam´ ych´ napr.ˇ animacnˇ ´ıch programu.˚ Ma´ nekolikˇ rˇadk´ u,˚ do kterych´ lze vkladat´ polozkyˇ reprezentuj´ıc´ı konkretn´ ´ı akce. Kazdˇ a´ takova´ akce je gra- ficky znazorn´ enaˇ obdeln´ ´ıkem s textovym´ popiskem, ktery´ je moznˇ e´ upra- vovat. Kromeˇ textoveho´ popisku je moznˇ e´ nav´ıc menitˇ barvu pozad´ı pro lepsˇ´ı orientaci. Graficke´ rozhran´ı umozˇnujeˇ presouvatˇ polozkyˇ na casovˇ e´ ose pomoc´ı metody drag&drop, samozrejmostˇ ´ı je taky moznostˇ oznacenˇ ´ı v´ıce polozekˇ nebo kop´ırovan´ı polozkyˇ drzenˇ ´ım klavesy´ Ctrl.

34 6. LEVELEDITOR

Obrazek´ 6.3: Casovˇ a´ osa

6.2.2 R´ıd´ıc´ıpanelˇ

Nalevo od casovˇ e´ osy je panel s rˇ´ıd´ıc´ımi tlacˇ´ıtky, tj. tlacˇ´ıtko start, stop a restart. Dale´ jsou zde um´ıstenyˇ tlacˇ´ıtka pro zmenuˇ rychlosti hry (1x, 2x, 4x a 8x). Tuto zmenuˇ je moznˇ e´ provest´ i klavesov´ ymi´ zkratkami (viz sekce 6.2.7) - stisknut´ı cˇ´ıslice dane´ rychlosti na numericke´ klavesnici.´ Nastaven´ı rychlejsˇ´ıho prehrˇ av´ an´ ´ı je velmi prakticke,´ protozeˇ game de- signeriˇ vetˇ sinouˇ hraj´ı danou misi jizˇ ponekolikˇ ate´ a dobreˇ vedˇ ´ı, co maj´ı od mise ocekˇ avat.´ Proto si napr.ˇ priˇ testovan´ ´ı kompletn´ı mise mohou urych- lit pro neˇ nudne´ pasa´ze.ˇ Zale´ zˇ´ı na konkretn´ ´ı hre,ˇ nicmen´ eˇ pro nasiˇ hru je vyzkousenˇ e,´ zeˇ zkusenˇ y´ hra´cˇ zvlad´ a´ testovat priˇ dvojnasobn´ e´ rychlosti bez jakychkoliv´ omezen´ı. Dvojnasobn´ a´ rychlost mu˚ zeˇ znamenat usetˇ renˇ ´ı casuˇ v rˇadu´ dn´ı a samozrejmˇ eˇ nejde jen o usetˇ renˇ y´ casˇ - testovan´ ´ı dvacetiminu- tove´ mise podesat´ e´ stale´ dokola behemˇ jednoho tydne´ uzˇ nen´ı ani trochu zabavn´ e.´

6.2.3 Konfiguraˇcn´ıpanel

Konfiguracnˇ ´ı panel je um´ıstenˇ napravo od hrac´ı plochy (obrazek´ 6.4). Klik- nut´ım na polozkuˇ na casovˇ e´ ose ji zvol´ıme k editaci a v konfiguracnˇ ´ım pa- nelu se zobraz´ı formula´rˇ pro zmenuˇ jednotlivych´ parametru˚ akce.

6.2.4 Flow-based programming

V profesionaln´ ´ıch hern´ıch editorech se pro konfiguraci podm´ınek a procesu˚ ve hreˇ castoˇ vyuzˇ´ıva´ uzivatelskˇ e´ rozhran´ı, ktere´ vychaz´ ´ı z principu˚ Flow- Based Programming [17]. Jde o graficke´ znazorn´ enˇ ´ı procesu,˚ ktere´ prob´ıhaj´ı

35 6. LEVELEDITOR

Obrazek´ 6.4: Konfiguracnˇ ´ı panel v enginu, pomoc´ı geometrickych´ tvaru˚ (vetˇ sinouˇ obdeln´ ´ıku˚ a elips) a napo- jen´ı techtoˇ procesu˚ na jine´ pomoc´ı spojnic mezi temitoˇ tvary. Tento prˇ´ıstup ma´ mnoho vyhod:´

• vysoka´ prehlednostˇ a uzivatelskˇ a´ prˇ´ıvetivost,ˇ

• snadna´ konfigurace i pro men´ eˇ technicky zdatne´ uzivatele,ˇ

• snadne´ ladenˇ ´ı a vizualizace prav´ eˇ prob´ıhaj´ıc´ıho procesu,

• pro ladenˇ ´ı moznostˇ elegantn´ıho vyuzitˇ ´ı bodu˚ preruˇ senˇ ´ı4.

T´ımto zpusobem˚ je nav´ıc moznˇ e´ konfigurovat opravdu tem´ eˇrˇ vsechnyˇ cˇasti´ enginu, od podm´ınenˇ ych´ akc´ı azˇ po generovan´ ´ı cˇastic´ 5.

4. breakpoint 5. graphical particles

36 6. LEVELEDITOR

V mem´ editoru se zpocˇatku´ pro konfiguraci podm´ınenˇ ych´ akc´ı pouzˇ´ıval jednoduchy´ generovany´ strom (Obrazek´ 6.5), jehozˇ polozkyˇ reprezentovaly jednotlive´ akce, a po kliknut´ı na danou akci se zobrazilo uzivatelskˇ e´ roz- hran´ı, pomoc´ı ktereho´ bylo moznˇ e´ konfigurovat parametry teto´ akce. Podle puvodn˚ ´ıho planu´ melˇ byt´ tento zpusob˚ dostacujˇ ´ıc´ı (a hlavneˇ rychle imple- mentovany),´ ocekˇ avalo´ se nejvy´seˇ nekolikˇ urovn´ ´ı zanorenˇ ´ı.

Obrazek´ 6.5: Puvodn˚ ´ı rozhran´ı pro konfiguraci stromu udalost´ ´ı

Po caseˇ vsakˇ game designeriˇ objevili s´ılu tohoto zpusobu˚ konfigurace a zacaliˇ vytva´retˇ velmi komplikovane´ stromy akc´ı, castoˇ se skladaj´ ´ıc´ı i ze sta a v´ıce polozek.ˇ V tomto mnozstvˇ ´ı se okamzitˇ eˇ ztrac´ ´ı prehlednostˇ a prinˇ a´sˇ´ı to velkou nevyhodu.´ V takovem´ stromeˇ se doka´zeˇ orientovat jizˇ pouze jeho autor a to je nezˇadouc´ ´ı. Upln´ e´ porozumenˇ ´ı cele´ logiky konfigurace je samozrejmˇ eˇ slozitˇ e´ a zasadn´ ´ı upravy´ jsou nemoznˇ e´ bez u´ castiˇ autora, nicmen´ eˇ kvuli˚ neprehlednostiˇ bylo nutne,´ aby sam´ autor vykonaval´ ta- kove´ minoritn´ı upravy,´ jako napr.ˇ casovˇ an´ ´ı, graficke´ ladenˇ ´ı, upravu´ textu˚ dialogu˚ atd. Byla tedy nutna´ zmenaˇ a konfigurace zalozenˇ a´ na graficky znazorn´ enˇ em´ diagramu se samozrejmˇ eˇ nab´ızela. Nova´ podoba navrhu´ uzivatelskˇ eho´ rozhran´ı (ktere´ zat´ım nen´ı implementovano)´ je videtˇ na obrazku´ 6.6.

Obrazek´ 6.6: Nova´ podoba rozhran´ı pro konfiguraci udalost´ ´ı

37 6. LEVELEDITOR

6.2.5 Akce zpˇeta vpˇred

Pro kazdouˇ aplikaci, ktera´ nejakˇ ym´ zpusobem˚ interaguje s uzivatelemˇ presˇ graficke´ rozhran´ı, je tem´ eˇrˇ nutnost´ı, aby zajistˇ ’ovala funkcionalitu krok zpetˇ a krok vpred.ˇ V upln´ eˇ prvn´ıch testovac´ıch verz´ıch editoru toto imple- mentovano´ nebylo, po doplnenˇ ´ı se pohodl´ı priˇ konfiguraci neporovnatelneˇ zvy´silo.ˇ Zaklad´ implementace teto´ funcionality je v pouzitˇ ´ı navrhov´ eho´ vzoru Command. Kazdˇ a´ operace uzivatelskˇ eho´ rozhran´ı je definovana´ jako trˇ´ıda implementuj´ıc´ı rozhran´ı IGuiAction, ktere´ obsahuje metody execute() a undo(). Kazdˇ a´ takova´ akce je po proveden´ı ulozenaˇ na zasobn´ ´ık, od- kud se priˇ akci krok zpˇet odebere a zavola´ se metoda undo(), ktera´ zajist´ı navracen´ ´ı modelu do puvodn˚ ´ıho stavu.

6.2.6 Komponenta pro urˇcen´ıpozice Editor disponuje komponentou, ktera´ priˇ aktivaci ukazuje presnouˇ polohu kurzoru na hrac´ım poli jak v gridech, tak v pixelech. Je to uziteˇ cnˇ a´ funk- cionalita priˇ vyvoji´ mis´ı, zvla´stˇ ’ na vetˇ sˇ´ım hrac´ım poli, kdy game designer nemus´ı m´ıt na prvn´ı pohled prehledˇ o tom, ve ktere´ cˇasti´ mapy se nachaz´ ´ı. Existuj´ı 2 zpusoby˚ zobrazen´ı teto´ komponenty:

• staticke´ um´ıstenˇ ´ı jako cˇast´ uzivatelskˇ eho´ rozhran´ı po celou dobu prace,´ nebo

• zobrazen´ı azˇ po aktivaci v dobe,ˇ kdy je potreba,ˇ a nasledn´ e´ schovan´ ´ı.

V ramci´ usetˇ renˇ ´ı plochy uzivatelskˇ eho´ rozhran´ı jsem zvolil druhou vari- antu, aktivace teto´ komponenty se tedy provad´ ´ı stiskem klavesov´ e´ zkratky Ctrl+D (viz sekce 6.2.7).

6.2.7 Kl´avesov´ezkratky

Pro urychlen´ı prace´ a zvy´senˇ ´ı pohodl´ı priˇ konfiguraci hry jsou zavedene´ nekterˇ e´ klavesov´ e´ zkratky pro ovlad´ an´ ´ı zakladn´ ´ıch funkc´ı editoru. Kromeˇ standardn´ıch klavesov´ ych´ zkratek znam´ ych´ z jinych´ programu˚ (Ctrl+Z - krok zpet,ˇ Ctrl+Y - krok vpred,ˇ Ctrl+S - ulozenˇ ´ı projektu, Ctrl+N - novy´ projekt, Delete - smazan´ ´ı polozky,ˇ atd.) jsem na zaklad´ eˇ zkouman´ ´ı pra- covn´ıch procesu˚ game designeru˚ zavedl nekterˇ e´ specificke´ zkratky pro castoˇ pouzˇ´ıvane´ akce v editoru.

• Ctrl+D - aktivace a deaktivace komponenty pro urcenˇ ´ı pozice

38 6. LEVELEDITOR

• Ctrl+O - oznacˇ´ı vsechnyˇ polozkyˇ na casovˇ e´ osy, ktere´ jsou um´ıstenyˇ napravo od aktualn´ eˇ vybrane´ (vcetnˇ eˇ aktualn´ eˇ vybrane)´

• R - restartuje hru

• 0 - pozastav´ı hru

• 1, 2, 4, 8 - nastav´ı rychlost hry

6.3 Spr´avaextern´ıchzdroj ˚u

Sprava´ extern´ıch zdroju˚ (tzv. assetu)˚ je velmi dule˚ zitˇ a´ a rozsahl´ a´ kapitola vyvoje´ kazdˇ e´ pocˇ´ıtacovˇ e´ hry. Extern´ımi zdroji se rozum´ı v´ıcemen´ eˇ vsechnyˇ soubory, ktere´ nejsou prˇ´ımou soucˇast´ ´ı binarn´ ´ı distribuce aplikace jako ta- kove,´ tj. hlavneˇ obrazky,´ zvuky, soubory konfigurace, lokalizacnˇ ´ı soubory, aj. Vzhledem k tomu, zeˇ vyv´ıj´ıme hru na platformeˇ Flash, predpoklˇ ad´ a´ se, zeˇ hlavn´ı distribucnˇ ´ı kanal´ bude web. To s sebou prinˇ a´sˇ´ı nekterˇ a´ specifika pro praci´ s assety:

• Samotna´ aplikace by melaˇ byt´ co nejmensˇ´ı, aby byla rychle stahnuta´ ze serveru a spustˇ ena.ˇ Dodatecnˇ e´ soubory se stahuj´ı, azˇ kdyzˇ jsou realn´ eˇ potreba.ˇ

• Je nutne´ cachovan´ ´ı a verzovan´ ´ı souboru˚ stahovanych´ z webu.

Dale´ je nutne´ zajistit, aby kazdˇ y´ soubor mohl m´ıt v jednom caseˇ i v´ıce verz´ı, mezi kterymi´ jde prepˇ ´ınat jak za behuˇ aplikace (ruzn˚ a´ kvalita zvuku a grafiky), tak priˇ sestaven´ı aplikace pro ruzn˚ e´ platformy (rozd´ılne´ video formaty´ na webu a na mobiln´ıch zarˇ´ızen´ıch).

6.3.1 Verzov´an´ızdroj ˚u

Vzhledem k tomu, zeˇ vyvoj´ webove´ hry (narozd´ıl od distribuc´ı na fyzickych´ nosicˇ´ıch) nekoncˇ´ı jej´ım vydan´ ´ım, ale upravuje se a dale´ vylepsujeˇ (nebo by alesponˇ mela),ˇ nen´ı moznˇ e´ se spolehat´ na to, zeˇ jedna verze nejakˇ eho´ sou- boru vydrzˇ´ı navzdy.ˇ Grafika, zvuky a vsechnyˇ ostatn´ı soubory se upravuj´ı, vylepsujˇ ´ı a je nutne´ uzivateliˇ dodat vzdyˇ aktualn´ ´ı verzi. Teorie je jednoducha,´ prakticke´ reˇ senˇ ´ı se u kazdˇ eho´ projektu lisˇ´ı v zavislosti´ na typu produktu, moznostechˇ serveru atd. Beˇznˇ a´ praxe u vetˇ sinyˇ webovych´ aplikac´ı je takova,´ zeˇ extern´ı soubory maj´ı nastave- nou tem´ eˇrˇ nekonecnouˇ dobu expirace, a proto je stacˇ´ı stahnout´ jednou

39 6. LEVELEDITOR a pote´ jsou uchovany´ v mezipametiˇ klienta. Pokud je potrebaˇ aktualizo- vat nejakˇ y´ soubor, nenahrazuje se puvodn˚ ´ı, ale vytvorˇ´ı se novy´ (s novym´ URL6). Protozeˇ ma´ tento soubor novy´ nazev,´ klientska´ aplikace jej nezna´ a je nucen jej stahnout´ v aktualn´ ´ı podobe.ˇ Proces verzovan´ ´ı a cachovan´ ´ı samorejmˇ eˇ nen´ı potrebaˇ ve vyvojov´ em´ prostredˇ ´ı (naopak je nezˇadouc´ ´ı), proto se verzovan´ ´ı reˇ sˇ´ı azˇ v pro- cesu vydan´ ´ı nove´ verze aplikace. Pokud tedy mame´ nazev´ souboru napr.ˇ images/texture.jpg, tak v produkcnˇ ´ım prostredˇ ´ı se realn´ y´ sou- bor jmenuje images/texture.jpg-v1562. Ve vyvojov´ em´ prostredˇ ´ı je nazev´ souboru puvodn˚ ´ı, ale apli- kace jej stahuje s prˇ´ıponou, otazn´ıkem a nahodn´ ym´ cˇ´ıslem, tj. images/texture.jpg?45698, cozˇ zabran´ ´ı skladovan´ ´ı v cache pameti.ˇ Cˇ ast´ URL za otazn´ıkem se nazyv´ a´ Query string, slouzˇ´ı pouze pro predˇ an´ ´ı parametru˚ HTTP dotazu a neovlivn´ı vysledn´ y´ soubor, ktery´ nam´ server posleˇ [10]. Klient ale soubor uchova´ v mezipametiˇ pod kompletn´ı adresou, opakovane´ dotazy s ruzn˚ ym´ nahodn´ ym´ cˇ´ıslem tedy vzdyˇ zpusob˚ ´ı vynucene´ stazenˇ ´ı aktualn´ ´ı verze souboru.

6.3.2 Generov´an´ıgrafickych´ atlas ˚u Pro pouzitˇ ´ı Stage3D (nebo obecneˇ jakekoliv´ technologie zalozenˇ e´ na prin- cipech OpenGL) je nutne´ z dostupnych´ obrazk´ u˚ vytvoritˇ jednu velkou bitmapu, ktera´ se pote´ nahraje na grafickou kartu. Proces vytva´renˇ ´ı teto´ bitmapy je moznˇ e´ provad´ etˇ bud’ predem,ˇ nebo azˇ za behuˇ aplikace. Po- kud chceme dosahnout´ optimaln´ ´ıho usporˇad´ an´ ´ı a t´ım usetˇ renˇ ´ı prostoru (bitmapa ma´ omezenou velikost), generovan´ ´ı bude vypo´ cetnˇ eˇ naro´ cnˇ e.´ Proto nen´ı prvn´ı zpusob˚ vhodny´ pro produkcnˇ ´ı nasazen´ı. Na druhou stranu ve vyvojov´ em´ prostredˇ ´ı upln´ eˇ optimaln´ ´ı vysledek´ nepotrebujeme,ˇ proto mu˚ zemeˇ bitmapy vytva´retˇ za behuˇ aplikace s pouzitˇ ´ım jednodusˇsˇ´ıch a rychlejsˇ´ıch algoritmu.˚ To nam´ zajist´ı vzdyˇ aktualn´ ´ı grafiku bez nutnosti generovan´ ´ı grafickych´ atlasu˚ po kazdˇ e´ zmenˇ eˇ jakehokoliv´ obrazku.´ Pro generovan´ ´ı do produkcnˇ ´ıho prostredˇ ´ı mu˚ zemeˇ pouzˇ´ıt software tretˇ ´ı strany, napr.ˇ obl´ıbeny´ Texture Packer7.

6.4 Automatick´eukl´ad´an´ıprojektu

V zacˇatc´ ´ıch vyvoje´ engine a editor obsahuje spoustu chyb, ktere´ se proje- vuj´ı vyjimkou´ programu nebo zamrznut´ım uzivatelskˇ eho´ rozhran´ı. Je proto

6. Uniform Resource Locator 7. http://www.codeandweb.com/texturepacker

40 6. LEVELEDITOR vhodne´ myslet na to, aby kvuli˚ takove´ chybeˇ game designeriˇ neztratili ne- ulozenouˇ praci.´ Muj˚ editor uklad´ a´ automaticky kazdˇ ych´ nekolikˇ vterinˇ cely´ projekt do docasnˇ eho´ ulo´ ziˇ stˇ e.ˇ Pokud je aplikace korektneˇ vypnuta, tak se tato data z docasnˇ eho´ ulo´ ziˇ stˇ eˇ odstran´ı. Pokud je aplikace ukoncenaˇ neocekˇ avan´ e,ˇ data se nesmazouˇ a priˇ opetovnˇ em´ spustˇ enˇ ´ı editoru se au- tomaticky otevreˇ nejaktualn´ ejˇ sˇ´ı verze projektu.

41 Kapitola 7 Specifika programov´an´ına platformˇeFlash

7.1 Pr´aces typem Vector

V jazyce ActionScript 3 reprezentuje trˇ´ıda Vector univerzaln´ ´ı strukturu pro praci´ se seznamem a jinymi´ datovymi´ strukturami znam´ ymi´ z jinych´ programovac´ıch jazyku˚ [1]. Trochu nestˇ ’astneˇ obsahuje metody push(), pop(), shift(), unshift(), a kombinacemi jejich pouzˇ´ıvan´ ´ı mu˚ zemeˇ simulovat napr.ˇ zasobn´ ´ık (push() a shift()) nebo frontu (push() a pop()). V kombinaci s faktem, zeˇ ActionScript 3 neobsahuje genericke´ typy, to zpusobuje˚ velmi nepohodlnou praci´ s temitoˇ datovymi´ strukturami. Vector take´ umozˇnujeˇ trˇ´ıdenˇ ´ı (sort()), vyhledav´ an´ ´ı (indexOf()) nebo mazan´ ´ı prvku˚ (slice() nebo splice()), dale´ potom metodu concat() pro sloucenˇ ´ı dvou vektoru.˚ Metody slice, splice a concat nanestˇ estˇ ´ı priˇ kazdˇ em´ volan´ ´ı vytva´rejˇ ´ı novy´ objekt typu Vector, cozˇ nen´ı vzdyˇ zˇadouc´ ´ı. Odstranovˇ an´ ´ı nepouzˇ´ıvanych´ objektu˚ v ActionScriptu zajistˇ ’uje Garbage Collector, jehozˇ behˇ je velmi drahy,´ a priˇ velkem´ poctuˇ objektu˚ mu˚ zeˇ jeho inicializace zpusobovat˚ kratk´ e´ trhnut´ı aplikace.

Concat

Priˇ testovan´ ´ı enginu jsem u jedne´ konkretn´ ´ı cinnostiˇ (zameˇrovˇ an´ ´ı neprˇatelsk´ ych´ jednotek obrannymi´ veˇzemi)ˇ zjistil, zeˇ pouzˇ´ıvan´ ´ı metody concat zpusob˚ ´ı vytvorenˇ ´ı novych´ vektoru˚ v poctechˇ milionu˚ kusu˚ behemˇ desetiminutove´ hry. Durazn˚ eˇ doporucujiˇ tuto metodu nepouzˇ´ıvat a m´ısto n´ı (pokud je to moznˇ e)´ vsechnyˇ objekty z druheho´ vektoru do prvn´ıho vkladat´ postupneˇ pomoc´ı iterovan´ ´ı druheho´ vektoru. Casovˇ a´ naro´ cnostˇ je stejna´ (metoda concat je ve Flashi take´ implementovana´ pomoc´ı iterace) a novy´ objekt nen´ı vytvoren.ˇ Pokud nav´ıc pro vytvorenˇ ´ı prvn´ıho vektoru pouzijemeˇ techniku poolingu, mu˚ zemeˇ pocetˇ vytvorenˇ ych´ objektu˚ sn´ızitˇ z rˇadu´ milionu˚ na rˇad´ jednotek.

42 7. SPECIFIKA PROGRAMOVAN´ ´I NA PLATFORMEˇ FLASH

Uk´azkaefektivnˇejˇs´ıalternativy metody concat var targets:Vector. = poolVectorEntity.getObject(); for each (var opponent:Player in world.getOpponents(player)) { for each (var enemyUnit:Entity in opponent.getUnits()) { targets.push(enemyUnit); } }

Slice a splice

Tyto metody slouzˇ´ı pro odstranenˇ ´ı (a vracen´ ´ı) jednoho a v´ıce prvku˚ z vek- toru. Slice nemodifikuje puvodn˚ ´ı vektor, jen vrat´ ´ı novy,´ ktery´ obsahuje prvky puvodn˚ ´ıho vektoru zadane´ pocˇate´ cnˇ ´ım a koncovym´ indexem. Splice odstran´ı prvky z puvodn˚ ´ıho vektoru a vrat´ ´ı novy´ vektor obsahuj´ıc´ı ode- brane´ prvky. Obeˇ metody tedy vytvorˇ´ı novy´ objekt. Pokud odstranujemeˇ prvky z vektoru a nezale´ zˇ´ı nam´ na vysledn´ em´ poradˇ ´ı prvku˚ (obdoba struktury java.util.Set v jazyce Java), je moznˇ e´ pouzˇ´ıt techniku presunutˇ ´ı posledn´ıho prvku na m´ısto toho, ktery´ chceme odebrat, a pote´ zkracen´ ´ı delky´ vektoru o jedna.

Uk´azkaefektivnˇejˇs´ıalternativy metody splice var index:int = vector.indexOf(item); if (index > -1) { if (index == vector.length - 1) { vector.pop(); } else { vector[index] = vector.pop(); } }

7.2 Informov´an´ıo zmˇenˇestavu enginu

V nekterˇ ych´ situac´ıch pozadujeme,ˇ aby engine informoval okol´ı (typicky uzivatelskˇ e´ rozhran´ı) o zmenˇ ach´ ve svem´ vnitrnˇ ´ım stavu. Typicke´ prˇ´ıklady

43 7. SPECIFIKA PROGRAMOVAN´ ´I NA PLATFORMEˇ FLASH pro strategickou hru mohou byt´ napr.ˇ informace o prub˚ ehuˇ stavby bu- dovy, zmenaˇ poctuˇ dostupnych´ surovin nebo konec hry. V tomto prˇ´ıpadeˇ vyuzijemeˇ navrhov´ y´ vzor Event Listener. Jednotlive´ moduly drzˇ´ıc´ı infor- mace, ktere´ jsou viditelne´ pro okol´ı enginu, mohou informovat posluchaceˇ o zmenˇ ach´ hodnot jednotlivych´ parametru.˚ V mem´ enginu je Event Liste- ner implementovan´ pomoc´ı popularn´ ´ı knihovny as3signals [2].

7.3 Garbage collector

Kazdˇ a´ aplikace se potrebujeˇ starat o pametˇ ’ovy´ prostor, ktery´ dostane pridˇ elenˇ y.´ U nekterˇ ych´ jazyku˚ se o spravu´ pametiˇ stara´ programator´ (C, C++) a nekterˇ e´ jazyky provad´ ejˇ ´ı spravu´ pametiˇ automaticky pomoc´ı tzv. garbage collectoru. Garbage collector je knihovna nebo cˇast´ behovˇ eho´ prostredˇ ´ı, ktera´ zajistˇ ’uje, zeˇ nepouzˇ´ıvana´ pametˇ ’ je oznacenaˇ a pripravenaˇ pro znovupouzitˇ ´ı. Flash Player pouzˇ´ıva´ implementaci garbage collectoru zalozenouˇ na kombinaci algoritmu˚ pocˇ´ıtan´ ´ı referenc´ı1 a Mark-and-sweep [16]. I kdyzˇ je garbage collector vn´ımany´ jako vyhoda,´ na zarˇ´ızen´ıch s malym´ objemem dostupne´ pametiˇ a n´ızkym´ vykonem´ je potrebaˇ si davat´ po- zor, aby jeho pouzitˇ ´ı nebylo kontraproduktivn´ı. Priˇ castˇ em´ vytva´renˇ ´ı a za- hazovan´ ´ı novych´ objektu˚ se mu˚ zeˇ stat,´ zeˇ kazdˇ y´ behˇ garbage collec- toru zpusob˚ ´ı zatuhnut´ı aplikace azˇ na stovky milisekund, cozˇ je zvla´stˇ eˇ u pocˇ´ıtacovˇ e´ hry nezˇadouc´ ´ı sn´ızenˇ ´ı uzivatelskˇ eho´ prozitku.ˇ

1. Reference counting

44 Kapitola 8 Uk´azkov´ahra

Pro ukazkovou´ hru jsem zvolil klasicky´ jednoduchy´ koncept arkadov´ e´ hry (obrazek´ 8.1). Uprostredˇ hrac´ı plochy je strˇ´ılej´ıc´ı veˇzˇ a vsudeˇ okolo se k n´ı pribliˇ zujˇ ´ı neprˇatelsk´ e´ jednotky. Hra´cˇ klikan´ ´ım na hrac´ı plochu rˇ´ıd´ı strelbuˇ veˇzeˇ a snazˇ´ı se zasahnout´ co nejv´ıc neprˇatel.´ Jakmile se nekterˇ y´ z neprˇatel´ dostane azˇ k bezprostrednˇ ´ı vzdalenosti´ od bunkru, hra´cˇ prohrav´ a´ hru. C´ılem hry je vydrzetˇ co nejdele´ nazivu.ˇ

Obrazek´ 8.1: Ukazka´ nakonfigurovane´ hry

8.1 Typy nepˇr´atelskych´ jednotek

Ve hreˇ existuj´ı dva typy neprˇatelsk´ ych´ jednotek, maj´ı ruzn˚ e´ vlastnosti a jsou vizualn´ eˇ odliseny.ˇ Prvn´ı typ je nejjednodusˇsˇ´ı jednotka, pohybuje se kon- statn´ı rychlost´ı po prˇ´ımce. Druhy´ typ jednotky je podobny´ jako prvn´ı, ale priˇ znicenˇ ´ı za sebou zanecha´ triˇ azˇ petˇ dalsˇ´ıch novych´ jednotek.

45 8. UKAZKOV´ AHRA´

8.2 Typy stˇrelnych´ zbran´ı

Strˇ´ılej´ıc´ı veˇzˇ ma´ nakonfigurovany´ dva typy strelnˇ ych´ zbran´ı, ktere´ je moznˇ e´ prepˇ ´ınat pomoc´ı komponenty uzivatelskˇ eho´ rozhran´ı. Kazdˇ a´ zbranˇ ma´ svuj˚ zasobn´ ´ık po jehozˇ vyprazdn´ enˇ ´ı jizˇ nen´ı moznˇ e´ zbranˇ pouzˇ´ıvat. Naboje´ do zasobn´ ´ıku lze doplnovatˇ sb´ıran´ ´ım specialn´ ´ıch objektu,˚ ktere´ se nahodn´ eˇ zobrazuj´ı na hrac´ı plose.ˇ Prvn´ı zbranˇ ma´ vysokou rychlost strelbyˇ a kratkou´ dobu letu pro- jektilu a priˇ vyst´ reluˇ doka´zeˇ znicitˇ jednoho neprˇ´ıtele, ktery´ se nachaz´ ´ı ve smeruˇ vyst´ relu.ˇ Druha´ zbranˇ strˇ´ıl´ı pomalu a strelaˇ let´ı dlouho nezˇ do- padne na urcenˇ e´ m´ısto. Na tomto m´ısteˇ vybuchne a znicˇ´ı vseˇ v danem´ okol´ı.

8.3 Uzivatelsk´erozhran´ıˇ

Uzivatelskˇ e´ rozhran´ı se sklad´ a´ z komponent zobrazuj´ıc´ıch casˇ hry, skore´ (pocetˇ znicenˇ ych´ neprˇatel)´ a prepˇ ´ınacˇ zbran´ı, ktery´ nav´ıc zobrazuje zbyvaj´ ´ıc´ı pocetˇ naboj´ u.˚

8.4 Pouzit´emodulyˇ

V teto´ hreˇ vyuzˇ´ıvam´ nekterˇ e´ zakladn´ ´ı moduly, ktere´ jsou prˇ´ımo soucˇast´ ´ı enginu. Je to jednoduchy´ modul pro strelbuˇ (FireModule), ktery´ umozˇnujeˇ nasta- vit rychlost strelby,ˇ pocetˇ naboj´ u,˚ rychlost letu projektilu, velikost zranenˇ ´ı a polomerˇ vybuchu.´ Neprˇatelsk´ e´ jednotky vyuzˇ´ıvaj´ı modul pro jednoduchy´ pohyb. Mohou se pohybovat po prˇ´ımce a nepocˇ´ıtaj´ı kolize, tud´ızˇ se mohou prekrˇ yvat.´ Dale´ jsem vytvorilˇ akci pro generovan´ ´ı neprˇatel.´ Pocˇate´ cnˇ ´ı pozice neprˇatelsk´ e´ jednotky se urcˇ´ı vygenerovan´ ´ım nahodn´ eho´ uhlu´ 0–360◦ a spocˇ´ıtan´ ´ım vektoru s pocˇatkem´ ve streduˇ hrac´ı plochy. Pote´ se vypocteˇ kolize tohoto vektoru se stenami,ˇ ktere´ ohranicujˇ ´ı hrac´ı plochy.

8.5 Shrnut´ı

Vysledn´ a´ hra jisteˇ nen´ı kompletn´ı a pripravenˇ a´ na vydan´ ´ı. Jedna´ se o pro- typ hry a ukazku´ konfigurace a pouzitˇ ´ı enginu a editoru. Je zde ale hezky videt,ˇ zeˇ pokud vytvorˇ´ım novy´ vlastn´ı plugin, je velmi snadne´ jej okamzitˇ eˇ pouzˇ´ıvat v editoru bez jakekoliv´ zvla´stnˇ ´ı konfigurace. Mohu tedy napro-

46 8. UKAZKOV´ AHRA´ gramovat akce, ktere´ konfiguruj´ı engine presnˇ eˇ podle potrebˇ dane´ hry tak, abych zajistil game designerum˚ co nejpohodlnejˇ sˇ´ı praci.´

47 Kapitola 9 Z´avˇer

C´ılem diplomove´ prace´ bylo navrhnout a implementovat hern´ı engine a editor takovym´ zpusobem,˚ aby byl engine snadno rozsˇ´ıritelnˇ y´ a editor snadno pouzitelnˇ y.´ Tohoto c´ıle jsem dosahnul,´ za cozˇ hovorˇ´ı napr.ˇ prak- ticke´ pouzˇ´ıvan´ ´ı editoru tymem´ game designeru,˚ kterˇ´ı s jeho pomoc´ı vyv´ıj´ı hru Age of Defenders. V porovnan´ ´ı s ostatn´ımi odvetvˇ ´ımi IT prumyslu˚ toho o vyvoji´ pocˇ´ıtacovˇ ach´ her mnoho napsano´ nebylo. Pritomˇ se zde vyuzˇ´ıva´ znalost´ı snad ze vsechˇ oboru˚ vyzkumu,´ a to nejen informacnˇ ´ıch technologi´ı. Hry pohan´ ´ı vpredˇ vyvoj´ pocˇ´ıtacovˇ e´ grafiky a kvuli˚ hram´ se odehravaj´ ´ı sou- boje o cˇ´ım dal´ vykonn´ ejˇ sˇ´ı hardware osobn´ıch pocˇ´ıtacˇu˚ i mobiln´ıch zarˇ´ızen´ı. Velka´ hern´ı studia zamestnˇ avaj´ ´ı vlastn´ı ekonomy a psychology. To vseˇ kvuli˚ odvetvˇ ´ı, ktere´ radaˇ lid´ı nepovazujeˇ za prˇ´ılisˇ seriozn´ ´ı. Vytvoritˇ kvalitn´ı pocˇ´ıtacovouˇ hru je komplexn´ı problem´ a vyzadujeˇ ce- lou skˇ alu´ znalost´ı. Vyvoj´ her se v posledn´ıch letech stale´ v´ıce speciali- zuje, rozsiˇ rujˇ ´ı se a vznikaj´ı nove´ obory. Jestˇ eˇ donedavna´ byla praxe ta- kova,´ zeˇ nezavisl´ ´ı vyvoj´ a´riˇ programovali sve´ hry tem´ eˇrˇ od nuly, protozeˇ nebyly dostupne´ zˇadn´ e´ pouzitelnˇ e´ podpurn˚ e´ nastroje.´ Tohle se hlavneˇ za posledn´ıch nekolikˇ let zacˇ´ına´ radikaln´ eˇ menitˇ a dnesnˇ ´ı vyvoj´ a´riˇ plneˇ vyuzˇ´ıvaj´ı vyhod´ dostupnych´ profesionaln´ ´ıch programu.˚ D´ıky vysoce kon- kurencnˇ ´ımu trhu posledn´ıch let uzˇ zacˇ´ına´ byt´ nemoznˇ e´ technologicky drzetˇ krok s velkymi´ firmami, cozˇ nemus´ı byt´ zrovna nevyhoda.´ Hern´ı prumysl˚ se konecnˇ eˇ presouvˇ a´ od programovan´ ´ı ke kreativn´ı tvorbeˇ her. D´ıky kva- litn´ım nastroj´ um˚ (Unity, Unreal Editor, Cry Engine) a snadnemu´ a rychlemu´ publikovan´ ´ı her (Facebook, AppStore, Google Play) je to dnes jednodusˇsˇ´ı nezˇ kdykoliv jindy. Presˇ tohle vsechnoˇ stale´ neexistuj´ı nastroje,´ ktere´ by byly naprosto uni- verzaln´ ´ı, a bylo by je moznˇ e´ pouzˇ´ıt pro jakoukoliv hru. Zat´ım zrejmˇ eˇ plat´ı, zeˇ cˇ´ım univerzaln´ ejˇ sˇ´ı editor, t´ım horsˇ´ı uzivatelskˇ e´ rozhran´ı a pouzitelnost.ˇ Firmy, ktere´ tyto nastroje´ vyv´ıjej´ı, proto logicky investuj´ı do takovych,´ ktere´ maj´ı potencial´ co nejvysˇsˇ´ıho zisku. Adobe Flash nema´ v podstateˇ zˇadn´ e´ hern´ı vyvojov´ e´ nastroje,´ cˇ´ımzˇ je

48 9. ZAV´ ERˇ o krok nazpetˇ predˇ konkurenc´ı. A i kdyzˇ se mu˚ zeˇ zdat,´ zeˇ pomalu um´ıra,´ Flash jako platforma s nami´ jestˇ eˇ nejakouˇ dobu zustane.˚ HTML 5 jestˇ eˇ dlouho nebude m´ıt dostatecnˇ y´ hern´ı vykon´ a Unity se zrejmˇ eˇ nikdy ne- podarˇ´ı dosahnout´ tak vysokeho´ pokryt´ı trhu. Tento text jisteˇ nen´ı urcenˇ odborn´ıkum˚ na poli vyvoje´ pocˇ´ıtacovˇ ych´ her. Jako men´ eˇ zkusenˇ y´ ciˇ zacˇ´ınaj´ıc´ı hern´ı vyvoj´ a´rˇ vsakˇ mu˚ zeteˇ ocenit navrh´ velmi praktickeho´ hern´ıho enginu, ktery´ pomu˚ zeˇ v zacˇatc´ ´ıch, at’ uzˇ se roz- hodnete pro implementaci vlastn´ıho nastroje´ nebo budete vytva´retˇ modul pro nastroj´ jizˇ existuj´ıc´ı. Nastavaj´ ´ıc´ı prace´ na editoru a jeho rozsiˇ ritelnostˇ je tem´ eˇrˇ neomezena.´ Mu˚ zemeˇ jmenovat trebaˇ zaveden´ı noveho´ uzivatelskˇ eho´ rozhran´ı pro kon- figuraci zalozenˇ e´ na flow-based programming, vylepsenouˇ spravu´ assetu˚ nebo tvorbu kompletn´ıch fukcnˇ ´ıch modulu˚ pro rozsˇ´ırenˇ ´ı zakladn´ ´ı funcio- nality.

49 Literatura

[1] Adobe: ActionScript® 3.0 reference [online]. http://help.adobe.com/en_US/FlashPlatform/ reference/actionscript/3/Vector.html.

[2] Github: as3signals [online]. https://github.com/robertpenner/as3-signals.

[3] HTML5 Introduction [online]. http://www.w3schools.com/html/html5_intro.asp.

[4] Sourcemaking.com: Factory method design patterns [online]. http://sourcemaking.com/design_patterns/ factory_method.

[5] Starcraft: Campaign editor [online]. http://guidesarchive.ign.com/guides/13598/.

[6] Top ten commercial 3D game engines [online]. http://artofgaming.crazenut.com/com_engines.html.

[7] Wikipedia: Filmation () [online]. http://en.wikipedia.org/wiki/ Filmation_(game_engine).

[8] Recommended level design editors for donwload [online], 2012. http://www.worldofleveldesign.com/categories/ level_design_tutorials/recommended-level -design-editors.php.

[9] Crytek announces its CRYENGINE-as-a-Service Program for 9.90 USD per month [online], 2014. http://www.crytek.com/news/ crytek-announces-its-cryengine-as-a-service -program-for-990-usd-per-month.

[10] Wikipedia: Query string [online], 2014. http://en.wikipedia.org/wiki/Query_string.

50 9. ZAV´ ERˇ

[11] J. M. Graetz. The origin of Spacewar [online], 1981. http://www.wheels.org/spacewar/creative/ SpacewarOrigin.html. [12] Interval.cz. Co je Silverlight? [online], 2008. http://interval.cz/clanky/ silverlight-co-je-silverlight/. [13] Steve Jobs. [online], 2010. http://www.apple.com/hotnews/thoughts-on-flash/. [14] Martin Kral.´ Why Unity isn’t the new Flash (yet) [online], 2013. http://blog.notsocasual.com/ why-unity-isnt-the-new-flash-yet/. [15] Makoto Matsumoto. Mersenne Twister home page [online]. http://www.math.sci.hiroshima-u.ac.jp/ ˜m-mat/MT/emt.html. [16] Adobe Systems Michelle Yaiser. Garbage collection internals for Flash Player and Adobe AIR [online], 2011. http://www.adobe.com/devnet/actionscript/learning/ as3-fundamentals/garbage-collection.html. [17] J. Paul Morrison. Flow-based programming [online]. http://ersaconf.org/ersa-adn/papers/adn003.pdf. [18] Graham Nelson. About interpreters [online]. http://inform-fiction.org/zmachine/ interpreters.html. [19] Scott Schiller. Is Flash dead yet? [online], 2010. http://isflashdeadyet.com/. [20] Jamie Sefton. The roots of open-world games [online], 2012. http:// www.gamesradar.com/the-roots-of-open-world-games/. [21] Stephen Shankland. HTML vs. Flash: Can a turf war be avoided? [online], 2010. http://www.cnet.com/news/ html-vs-flash-can-a-turf-war-be-avoided/. [22] Nick Statt. Epic Games opens Unreal Engine 4 to public for 19 USD a month [online], 2014. http://www.cnet.com/news/ epic-games-opens-unreal-engine-4-to-public -for-19-a-month/.

51 9. ZAV´ ERˇ

[23] Josh Stratton. State of ray tracing (in games) [online]. https://www.cs.utah.edu/˜jstratto/ state_of_ray_tracing/.

[24] Adobe Systems. Stage 3D overview [online]. http://www.adobe.com/devnet/flashplayer/ stage3d.html.

[25] Adobe Systems. Millward Brown survey: Flash Player statistics [online], 2009. http://www.adobe.com/products/ flashruntimes/statistics.html.

[26] Curt Vendel. The Atari VCS prototype [online]. http://www.atarimuseum.com/videogames/consoles/ 2600/proto2600.html.

[27] Rick Waldron. The Flash history: How it all began [online], 2000. http://www.flashmagazine.com/news/detail/the_flash_ history/.

[28] Glenn R. Wichman. A brief history of Rogue [online], 1997. http://www.wichman.org/roguehistory.html.

[29] David Winter. A. S. Douglas’ 1952 Noughts and Crosses game [online]. http://www.pong-story.com/1952.htm.

[30] Peter Stefˇ cek.ˇ Genome2D/Starling benchmarks [online], 2013. http://blog.flash-core.com/?p=3070.

52