Hra Aiming aneb „Jak na HTML5 v Game Makeru?“
Dneska jsem provedl úspěšnou konverzi z GM8.0 do HTML5 (javascript) na jednom kusu ze své starší tvorby. Než vám popíšu, jak to šlo, můžete se kouknout na výsledek: http://www.povray.cz/HTML5/Aiming/index.html
Nejprve je třeba říct, že o tu jednu hru jde jen okrajově. Hlavní věc zkoumání byla užitečnost a použitelnost Game Makeru Studio obecně, což se pokusím vysvětlit malou historickou vsuvkou.
Nemám rád změny. Musím přiznat, že byla doba, kdy jsem velmi dlouho zvažoval, jestli se budu GM jako IDE držet, když yoyogames přestali vyvíjet klasický Game Maker pro Windows ( Mac ) a začali bastlit své Game Maker Studio. Měl jsem v té době za sebou už řadu vytvořených herních pokusů s různou úrovní úspěšnosti a v původním Game Makeru jsem se konečně začínal cítit programátorsky sebejistý. Uvědomoval jsem si nedostatky Game Makeru a většinu problémů jsem byl schopen obejít nebo zcela vyřešit. Samozřejmě jsem uvítal snahu Yoyogames rozvíjet můj oblíbený software, protože bylo jasné, že původní koncept Game Makeru napsaný v Delphi je zastaralý a bez budoucnosti. Jenže pěkné myšlenky které Yoyogames o Game Makeru Studio šířili a dosud šíří jsou pravdivé asi jako reklama na „chutné a zdravé jídlo z výprodeje“. Na soudní žalobu to není, ale fakticky se jako zákazník člověk děsně nachytá, když si to koupí a jednoduše tomu věří.
Přesto jsem u Game Makeru zůstal a Studio Professional si před časem koupil. Přechod byl drastický a efektivita tvorby v GMS je trapným zlomkem mé původní efektivity v GM8. Jak je to možné? V první řadě nekompatibilita na úrovni resources. GMS neumí zpracovat tytéž soubory ani grafické, ani zvukové a neumí pracovat s fonty. Tzn. pokud má člověk nějakou sbírku svých klipartů, spritů, MIDI hudby a podobně, tak má celkem smůlu a čeká ho spousta úmorné práce na konverzích. Druhý hřebík do rakve je nekompatibilita jazyka GML, vlastního skriptovacího jazyka Game Makeru. Spousta funkcí pracuje jinak nebo byly úplně a bez náhrady vyhozeny, takže opět staré odladěné skripty píšete znovu. Třetí brzda je samotné prostředí Game Makeru Studio, které je celkově prasečí. Udržet nápad konzistentní v okamžiku jeho zrození je přetěžká věc a jakékoli zdržení či ztráta koncentrace je smrtící. Nutnost založit a pojmenovat projekt kdykoli chci začít cokoli zkoušet mi zabila už mnoho nápadů hned v zárodku. Je to podobné, jako bych poznámkové lístky zamkl do trezoru s časovým zámkem. Než bych to otevřel, nebylo by co poznamenávat. Že Game Maker Studio neumí česky a když chci napsat na české klávesnici array závorky [ ], používám alt+091(093) je jen malá část potíží.
Přesto jsem se rozhodl pro cestu boje a GMS jsem nejenže nezahodil, ale ještě jsem k němu přikoupil HTML5 exportní modul, který stojí víc, než nakolik mě přišel GMS Pro sám. Této koupě narozdíl od GMS nelituji ani v nejmenším. Osobně se mi HTML jako jazyk nikdy nelíbil a žádná jeho verze nezmění moji averzi, takže je poněkud ironie osudu, že jsem si mezi exportními moduly nabízenými ke GMS vybral právě tento, aniž bych o něm předtím mnoho věděl. Server yoyogames.com oficiálními informacemi o skutečných možnostech nabízených produktů totiž příliš nehýří a nejvíc se člověk dozví asi z help souboru v GMS, který je naštěstí univerzální pro všechny pluginy.
Instalace klíče byla bezproblémová a HTML exporter byl okamžitě funkční bez dalšího nastavování. Pro začátek je dobré zkusit funkčnost na novém projektu s minimálním obsahem. Řekněmě 1 room, 1 objekt s nějakým animovaným sprite. Při přepnutí na HTML5 v rámečku target horní lišty se sice nic zjevného nestane, ale spuštění hry se pak provede rovnou v prohlížeči ( nejlepší z hlediska kompatibility je asi Chrome ). GMS při spouštění hry z IDE nejprve vytvoří vlastní webserver, který poskytne lokální adresu. Tato adresa se pak objeví v řádku prohlížeče, který se automaticky spustí, pokud ještě spuštěný není. Když už prohlížeč otevřený máte, hra se objeví v nové záložce. Když adresu ručně okopírujeme do případného dalšího prohlížeče bude fungovat taky, dokud běží webserver nebo dokud je hra otevřená v prohlížeči. Takže lze např. zkoušet funkčnost zároveň v Chrome a zároveň ve Firefoxu jako to dělám já. Znamená to, že když vypnete webserver, hra pokračuje dál, protože je v prohlížeči načtená. Webserver má vlastní okno a lze ho nezávisle vypnout.
Trochu složitější problém je ladění. Na pohodlný debugger z GM8 je třeba rovnou zapomenout, aby člověk neměl noční můry ještě léta.
To, co vypisuje webserver se nezdálo být možné ovlivňovat, ale možná jsem s tím jen neuměl. Každopádně je nejlepší si hned na začátku vyrobit prázdný objekt, který bude v události DrawGUI vypisovat vybrané proměnné do levého horního rohu v řádcích pod sebe. Jinak doporučuji základ hry nejprve odladit pro target Windows a v HTML5 ladit jen webovou podobu, pokud je to jen trochu možné.
Samotná konverze starší hry měla dvě fáze. Import z GM8 do GMS byl první. To vezmu trochu zkrátka, protože hra Aiming je jednoduchá a potíže byly jen v neschopnosti GMS vyskočit příkazem break z bloku kódu a jedna proměnná deklarovaná ošklivě jako globalvar ( nedoporučuji vůbec používat ) nebyla vidět v objektech, které ji potřebovaly. Kód jsem tedy vyčistil a pro Windows to jelo asi během dvaceti minut. Pak se ještě trochu proházela automaticky generovaná depth u některých objektů, takže bylo třeba nastavit ručně, co má být zobrazeno nad a co pod pod ostatními objekty.
Druhá část konverze je odladění pro HTML5. Tady je třeba říct, co se vlastně vytvoří jako výsledek. Game Maker exportuje soubor index.html, ikonu a složku html5game ( názvy lze změnit ) kamkoli na lokální disk. Lze to spustit i rovnou odtamtud, ale jen pro testovací účely, protože to vybafne hlášky o nutnosti spouštění z webserveru. Nicméně to po odklikání přesto spustí. Vlastní program je v souboru s koncovkou .js, což znamená javascript ( pozor javascript není totéž co Java ), který se stáhne spolu s webovou stránkou a jeho provedení zajišťuje prohlížeč. To mimo jiné znamená dvě věci: jede to tak rychle, jak je rychlý hráčův počítač nezávisle na tom jak rychlé je internetové připojení a taky to znamená, že celý kód hry je v době hraní přístupný hráči k prohlížení a případně úpravám. Tzn. minimální zabezpečení. Game Maker Studio řeší bezpečnost kódu poměrně standardní cestou, tzv. obfuskováním, kdy se kód proloží nesmyslnými znaky tak, že je pro člověka nesrozumitelný, ale počítač ho zpracovává normálně. Není to úplně dokonalé, ale běžného uživatele to spolehlivě odradí od nabourávání. Stejně je asi lepší nějaké cheaty do toho zabudovat rovnou a hráči pak nemají potřebu to lámat. 🙂
V HTML5 to jelo prakticky ihned bez chybových hlášek. Jen jsem ještě chtěl, aby se velikost herního okna přizpůsobovala velikosti okna prohlížeče a přitom zůstaval zachován poměr stran. GM8 tohle uměl pro windows jedním tlačítkem v preferencích, GMS to neumí automaticky pro žádnou platformu vůbec. Napsal jsem si proto trochu kódu, který v zásadě funguje natolik, nakolik lze zaručit jednotné chování různých prohlížečů webu. Tady je:
Událost Create:
ratio=max(room_width/browser_width,room_height/browser_height); size_x=room_width/ratio; size_y=room_height/ratio; x=browser_width-size_x; y=browser_height-size_y;
Událost BeginStep:
ratio=max(room_width/browser_width,room_height/browser_height); size_x=room_width/ratio; size_y=room_height/ratio; x=browser_width-size_x; y=browser_height-size_y; window_set_rectangle(x/2,y/2,size_x,size_y);
Když mi všechno fungovalo, vyexportoval jsem soubory na lokální disk. Ikonu jsem nahradil svojí vlastní prostě tak, že jsem ji přepsal svým ico souborem se stejným názvem. Pak jsem změnil text zobrazený v hlavičce stránky. To jsem udělal tak, že jsem index.html otevřel v poznámkovém bloku a změnil text uzavřený mezi tag <title> </title>. Nakonec nezbylo než nahrán obsah na nějaký hosting. Já mám už delší dobu placený hosting pro svoje starší a zcela zanedbané stránky ( hanba mi 😳 ) a tak jsem to využil i pro tentokrát. Má to výhodu nepřítomnosti reklam a přiměřené spolehlivosti provozu.
V zásadě lze říct, že se HTML5 exporter pro GMS vyplatí, pokud děláte hry nevyžadující vysoký výkon, nejsou založeny na práci se soubory a obecně nejsou příliš složité a náročné. Teoreticky se takto dají vyrobit celé běžné webové stránky jako solidní grafická prezentace.
Kdyby někdo nerozuměl, jak se hra Aiming hraje: mačká se jen klávesa SPACE. Nejlépe se soutěží na šest ran. Klávesa R vyčistí terč a spustí to znovu.
Míření:
První stisk spustí náměr, druhý stisk se musí shodnout s prvním pohyblivým bodem, třetí stisk se musí shodnout s druhým pohyblivým bodem. Na konci dráhy bílého bodu nastává výstřel. Přesnost shody s pohyblivými body určuje přesnost zásahu. Pokud se nestihne první bod, je lépe druhý nemačkat vůbec – k výstřelu prostě nedojde a nepočítá se pokus.
9 odezev
Jak jsem si to zkusil z webu, mám lepší výsledek než z Windows.
Schválně kolik nastřílíte vy. 🙂 ( 2x střed, ale ta poslední trochu uletěla.. )
Diky ti za dobry a zajimavy clanek!
Pěkné shrnutí zkušeností s Gamemakerem ve „studiové“ verzi. Osobně už bych se ke starším verzím programu vracel jenom nerad, ale uznávám, že prvotní šok je celkem nepříjemný. Po čase se mi uživatelské rozhraní a výpis chyb líbí hodně. Výsledný produkt navíc běží podstatně rychleji.
Jaký máš problém s globální proměnnou deklarovanou přes globalvar? Používám to celkem normálně a problémy s tím nebyly.
Celkově ve výsledku koupě nelituji, ačkoliv na nemožnost pracovat půl roku na Cubesis nikdy nezapomenu.
Já jsem si nechal legálně obě verze ( nepoužil jsem to jako upgrade ) a tak můžu využít vždycky to, co se mi zlíbí. 🙂
Problém s globalvar nemám. Prostě to kvůli toho nejelo a moc jsem neřešil detaily. Fakt je ten, že se bez rozlišovačky global považovala proměnná za lokální, zatímco v GM8 se to chovalo podobně jako lives nebo health. Docela si myslím, že i vím proč, ale bez ověření teď nechci šířit spekulativní teorie. Obecně se ale dá říct, že použití globálních proměnných ve větším množství dělá kód nepřehledným i pro svého autora a často taky signalizuje chybu v objektovém konceptu. O tom ten článek ale být neměl. Navíc je to celkem slovo do pranice, protože existují jak horliví zastánci globálních proměnných, tak stejně zuřiví odpůrci. Já osobně se necítím ani jedním z nich a obvykle vesele oponuji oběma táborům zároveň.
Představa většího projektu zaseknutého kvůli změnám ve vývojářských nástrojích mi vyvolává husí kůži. To muselo být strašné. Já vždycky neskutečně ztrácím motivaci s každým hloupým dnem, kdy musím řešit něco jiného než postup vpřed. Vlastně stačí, když dostanu nějaký jiný skvělý nápad, který s rozpracovaným projektem nesouvisí a je takříkajíc vymalováno.
Taky mám obě verze. 🙂 Ale jak říkám, neměl jsem potřebu zapnout tu starou už velmi velmi dlouho.
O globálních proměnných nemám žádnou speciální představu. Používám je, když je potřeba. Spíš jsem se jen ptal, abych věděl. 🙂
Hra Cubesis se nezasekla na převádění do GM:S, to se sfouklo za takových 36 hodin práce. Vývoj se zasekl kvůli nějaké podivné chybě po updateu GM:S, kterou podpora nedokázala vyřešit )jakože to byly desítky hodin zkoušení, kontroly registrů, změny jazyka windows, atd.), až jsem po půl roce zjistil, že stačilo vymazat všechny zvuky a nahrát je znovu. 🙂 Každopádně ano, z tohohle hlediska mám asi nervy ze železa. 😀 To taky není dobrý. Ještě teď v Cubesis dělám nějaké drobné úpravy, které nejsou zajímavé, ani nejsou nějakým zázračným postupem vpřed. Každopádně určitá těkavost nevadí, pokud máš vývoj her jenom jako koníček bez nějaké vidiny, že bys chtěl v budoucnu nějak víc prorazit.
No asi tak: živit se tím nehodlám, dělám to, protože mě to baví. Mám dvě děti a těší mě, že občas hrají to, co vytvořím. Tak je mi někdy dokonce upřímně jedno, jestli moje výtvory mají něco jako veřejný úspěch. Ostatně opravdová genialita bývá tvůrcům přiznána stejně většinou až in memoriam a toho si člověk tak nějak moc neužije. 😀
edit:
Co vlastně děláš jako obživu ty? ( pokud to není tajné.. )
Tak to je ideální. 🙂 Myslím, že to je asi nejlepší stav, v jakém můžeš hry dělat. 🙂
Já se zatím neživím nijak. Jsem poměrně pilně studující student Fakulty humanitních studií Univerzity Karlovy na studijním oboru Studium humanitní vzdělanosti. Právě pracuji na bakalářce – což asi vysvětluje, proč tu teď nejsem moc aktivní. 🙂 Vedle toho jsem si v minulosti občas něco přivydělal grafickými „zakázkami“: web design, návrh obálky katalogu, zvětšování a zmenšování (tzv. resize) animovaných spritů pixelartové hry Horror Labs + kresba některých nepřátel, grafika hry Frozen… V zásadě i k pracím na Cubesis se dá od určitého momentu přistupovat jako k pracovním, jakkoliv neplaceným. Každopádně bych se, dá-li pán Bůh, jak se říká, rád uchytil v herním průmyslu jako herní designér (tj. paradoxně ne jako grafik). Ale jestli se to povede, to ukáže až čas. 🙂
Přiznám se, že jsem ten obor musel vygooglit a ani tak nemám pořádně představu, co to obnáší. 🙂 Ale podle popisu vede k dovednostem, které by se asi hernímu designérovi hodit měly a myslím, že ani grafické nadání nemusíš nechat úplně zahálet. Já jsem toho názoru, že když někdo něco umí, jde o obecně pozitivní fakt a je jen otázkou času, kdy se to projeví úspěchem. Asi jako bublinky vzduchu vždycky musí vystoupat nahoru vařící se vodou. Dřív nebo později a to i tehdy, když osud třese konvicí. 🙂
Můžu tě ujistit, že v podstatě nikdo mimo ten obor neví, co to obnáší. 🙂 V podstatě to závisí na přístupu studenta, protože jde o studium liberální, respektive svobodné, takže si velkou část rozvrhu student volí sám. Možnost vybrat si přináší řadu výhod (např. studovat, co mě zajímá), ale zároveň to sebou nese odpovědnost za celek studia, totiž za to, co si z něj odnesu nebo neodnesu.Vedle toho na studenta čeká sada povinných zkoušek, která by ho měla jednak seznámit s danými humanitními obory (filosofie, historie, antropologie, sociologie, psychologie, ekonomie) a jednak by ho měla naučit určitým obecně prospěšným dovednostem. Tak by měl student zvládat velmi dobře číst, psát a mluvit, což v posledku znamená také dobře myslet. K tomu slouží kvantum textů, s nimiž by měl každý pracovat během přípravy na povinné zkoušky. Jako příklad můžu uvést pětikreditovou úvodní zkoušku z historie, na jejíž splnění student musí projít něco málo přes tisíc stránek vybraných pasáží z odborných knih o historii, vybrat z nich to důležité a ještě s tím umět zacházet písemně, tj. netestově, takže všechny ty informace, které se týkají celých dějin a ve kterých jsou letopočty pouze třešničkou na dortu, musí mít v paměti přístupné k volném vybavování. Další zkouška vyžaduje přeložit sto normostran odborného cizojazyčného textu (konkrétní si vybírá překladatel). Tam by si měl člověk osvojit cizí jazyk a vlastní mateřštinu, protože výsledek musí být opravdu česky, nikoliv pouze s českými slovy. Následuje zkouška z filosofie, kde je třeba přečíst dvanáct primárních filosofických titulů (od Platóna, Descarta, atd.), na jejichž základě se student musí umět vyjádřit ke třiceti „otázkám“, tj. musí dané tituly znát co do jejich argumentace a musí je umět interpretovat. Pak přijde zkouška z historie, kde je třeba prostudovat průměrně tři tisíce stránek historických knih (minimálně deset titulů), kde je cílem každou knihu pochopit a její obsah v podstatě znovu vyložit, ideálně i s určitou reflexí, a v druhé části zkoušky je pak za úkol v pěti minutách přednést odborné téma. Před bakalářskou prací a před státnicemi studenta čeká ještě souborná zkouška ze společenských věd, na kterou je třeba navrhnout projekt empirického výzkumu (tj. seznámit se s metodologií) a zpracovat si osm společenskovědních témat (základní četba představuje asi patnáct set stran textu – část z toho jsou sekundární texty k nějaké problematice, část z toho jsou texty primární). Dvě z témat pak student presentuje u zkoušky, přičemž to má vedle pouhé presentace také charakter zasvěcené diskuse nad četbou.
Nastínil jsem tu ty nejvydatnější zkoušky, které studenta neminou, ale jak tenhle pomyslný skelet obalí, to už záleží jenom na něm. Může si vybrat kurzy ke všem zmíněným oborům, může se na jeden obor zaměřit víc, nebo si může volit řadu kreativních kurzů a studium si nechat protéct mezi prsty, tedy se buď nechat vyhodit nebo si neodnést nic.
Každopádně jsem přesvědčený, že všechny ty zkoušky a všechno to trápení v tvorbě zúročím. Školu jsem si vybíral s tím, že jako mladý ňouma po „střední“ nejen že nic nevím, ale navíc ani nemám ideově co nabídnout, a protože je pro mě myšlenkový obsah nezbytnou součástí jakéhokoliv sdělovacího prostředku, tedy potenciálně i hry, považoval jsem to za podstatný problém. Rozhodně nemám nic proti prostě jenom zábavným věcem, spíš mi přijde škoda, že v herním průmyslu nevznikají Malí princové, Wertherové, Stepí vlci, Války s mloky, Proměny atd., a zároveň mám dojem, že je to způsobené absencí humanitního vzdělání v daném oboru. Tak nezbývá než doufat, že máš pravdu, že je to s tím úspěchem jako s vařením vody. 🙂