Na Schlimeisch párty jsem znovu narazil na hru, která mi už několik let ležela v hlavě. Nebylo to poprvé, co jsem ji viděl. Poprvé se mi dostala do ruky už kdysi na JH Conu, kde jsem si tehdy řekl, že by bylo moc pěkné udělat něco podobného pro ZX Spectrum. Jenže znáte to. Člověk si něco uloží do hlavy, pak přijde jiná práce, jiný projekt, další nápady, a najednou zjistí, že tenhle rest s ním chodí už docela dlouho. Na Schlimeisch party se mi to celé připomnělo znovu a tentokrát už jsem si řekl, že to prostě zkusím dotáhnout. Resp. to bylo takhle, Sillicon pustil tuto hru a začal ji hrát a já řekl - to by bylo pěkné mít tuto hru na ZX Spectru a hned mě trklo do hlavy, že jsem to už někde slyšel a zastyděl jsem se.
Původní inspirace je jasná: rychlá, přesná, hypnotická akční hra, kde se hráč pohybuje kolem středu a vyhýbá se stěnám přibližujících se hexagonů. Verze pro Commodore 64 se hraje moc pěkně a je na ní vidět, že autor si dal opravdu hodně práce a snažil se z C64 vyždímat maximum. Právě proto jsem ale nakonec nechtěl dělat kompromisní port na klasické ZX Spectrum - upřímně, jakýkoliv kompromis by této hře uškodil, navíc kdo by pak chtěl poslouchat uštěpačné poznámky od C64 userů, že? :) Nechtěl jsem přijít o rotující pozadí, barevnost, plynulost a celkový dojem. Rozhodl jsem se tedy jít rovnou na ZX Spectrum Next, protože ten dovolí udělat hru výrazně blíž tomu, co jsem měl v hlavě.
Začátek vývoje byl mnohem skromnější. První pokusy šly cestou vektorů a bez rotujícího pozadí, protože jsem si upřímně nebyl jistý, jak to celé na Nextu rozumně pojmout. Vypadalo to funkčně, dalo se na tom zkoušet ovládání, kolize a rytmus hry, ale pořád tomu chyběla ta správná atmosféra. U takové hry je totiž obraz skoro stejně důležitý jako samotná mechanika. Když se pozadí nehýbe, chybí tomu tlak, tempo a ten zvláštní pocit, že se celý svět točí kolem vás. I když něco podobného by se dalo i udělat na klasickém ZX Spectru... nevím, možná časem to zkusím udělat. Nakonec se mi podařilo rozběhat variantu s rotujícím pozadím a od té chvíle začala hra konečně vypadat tak, jak jsem si ji představoval. Myslím, že se povedla hlavně plynulost. Na obrazovce se zároveň děje rotující pozadí, středový prostor, několik přibližujících se hexagonů, hráč, HUD, změny rychlosti a testování kolizí. Vypadá to jednoduše, ale ve skutečnosti jsem několikrát narazil na limity Nextu a musel jsem hodně přemýšlet, kde co zjednodušit, přesunout, předpočítat nebo obejít tak, aby hra pořád běžela svižně a hlavně aby se dala hrát. Ale to zná každý, kdo někdy programoval pro osmibity a je to na tom to krásné.
Ovládání je schválně velmi jednoduché. Na klávesnici se hraje přes O/P nebo šipky doleva a doprava. Kdo chce, může v menu přepnout ovládání na Kempston joystick. V menu se dá přepínat také obtížnost, takže si hráč může vybrat, jestli chce spíš plynulejší a přístupnější hru, nebo ostřejší režim, kde se hra chová tvrději a rychleji trestá chyby. Ve hře jsou dva hlavní režimy obtížnosti: Easy a Hard. Easy není myšlený jako nudná verze hry, naopak se snaží chováním přiblížit předloze z C64. Rotace a změny směru jsou jemnější, hra se snaží nepouštět nejprudší varianty chování hned od začátku a hráč má víc prostoru pochopit rytmus. A hlavně hráč sám kopíruje rotaci pozadí. Hard je naproti tomu přímočařejší, rychlejší a méně odpouští a co je hlavní Vy musíte svým pohybem kompenzovat rotování hexagonů, abyste trefili mezeru, přes kterou se snažíte proletět.Já vím, je to nahouby, tězké ... ale víte jak, režim hard :). Důležité pro mě bylo, aby rozdíl mezi Easy a Hard nebyl jen kosmetický. Nechtěl jsem jen změnit číslo rychlosti. Easy má být hratelný a čitelný, Hard má být režim pro ty, kdo už přesně vědí, co dělají a easy mode je pro ně ranní rutinou při čištění zubů.
Next Hexagon je rozdělený do devíti postupně se měnících fází. První část je klidnější a slouží k rozehrání. Potom přichází fáze s více ringy, hustšími kombinacemi mezer a rychlejšími změnami. V pozdějších částech se objevují fáze jako Triple, Warp, Hyper, Chaos a Nightmare. Každá z nich trochu mění rytmus hry. Někde jde hlavně o počet současných hexagonů, jinde o tempo, jinde o rotaci a nutnost rychleji číst, kam se přesunout. Při ladění levelů jsem řešil hlavně to, aby za sebou nešly mezery pořád stejně. Když může hráč stát na jednom místě a projde dvěma nebo třemi hexagony bez pohybu, hra ztratí napětí. Na druhou stranu nesmí vznikat nesmyslné kombinace, kde by hráč musel přeskočit přes půl kruhu během okamžiku. Snažil jsem se tedy stavět patterny tak, aby hráč musel téměř pokaždé udělat nějakou akci, typicky o jedno nebo dvě políčka, a jen výjimečně o tři. Tři políčka už jsou krizová situace, která se nesmí řetězit moc často.
Technicky je hra postavená kolem Layer 2 grafiky, bankovaného bitmapového pozadí a hardwarových spritů pro hráče a stěny hexagonů. Rotující pozadí není počítané celé v reálném čase. Je připravené jako sada bitmapových fází v paměti a hra z nich podle aktuální rotace vybírá správný obraz. To umožňuje zachovat plynulý dojem bez toho, aby se procesor utopil ve výpočtech grafiky. Na 2MB Nextu se načítá plná efektní varianta pozadí, zatímco slabší konfigurace (1MB) běží (zatím) bez rotujícího pozadí. Samotné hexagony byly samostatná kapitola. Nakreslit, resp. vygenerovat sprity hexagonů ve všech úhlech tak, aby byl pohyb přirozený mi chvilku trvalo a pár pokusů bylo vysloveně nepovedených. Pár jich ale bylo celkem zajímavých - hexagony se různě vrtěly a vypadali jako ručně kreslené a gumové. Další problém byl limit hardwarových spritů. ZX Spectrum Next jich umí hodně, ale ne nekonečně. Když se na obrazovce potkají tři hexagony, každá stěna je složená z více sprite segmentů a k tomu je ještě hráč, dostanete se k limitu velmi rychle. Proto hra používá jednoduché LOD chování. Velké a důležité stěny se kreslí dostatečně dlouhé a čitelné, menší nebo vzdálenější části používají méně sprite vzorků. Cílem nebylo ušetřit za každou cenu, ale najít bod, kde obraz pořád vypadá dobře a hra se nezačne rozpadat kvůli limitu spritů. Samozřejmě se muselo podle úhlu natočení vybrat pro každou hranu hexagonu konkrétní typ narotovaného spritu. Stejně jako u pozadí, které se přeneslo.
Hra ukládá nejlepší skóre do souboru NEXTHEX.CFG, které najdete na SD kartě v rootu. Ten obsahuje čas, nejlepší dosaženou fázi, obtížnost, počet spuštěných her a také zvolený typ ovládání. Na webu je jednoduchá stránka, kam jde tento CFG soubor nahrát ručně. Zadá se nick, heslo a vybere se soubor. Heslo neslouží k žádné velké registraci, jen k tomu, aby si stejný hráč mohl později přepsat vlastní rekord, když se zlepší. Zde bych rád podělkoval panu PCH z c64.cz, který obdobný systém používá u několika svých her (byť tam nemá zabezpečení heslem - já jsem jen paranoidní). Takže díky... ;) Kromě ručního uploadu jsem chtěl mít i přímé odeslání ze hry. Next Hexagon proto umí přes Wi-Fi modul poslat výsledek přímo na server. Hra si vyžádá nick a heslo, uloží si je do uživatelského souboru a při novém rekordu může poslat CFG data přes HTTP API. Server zkontroluje formát souboru, signaturu, verzi a checksum, uloží výsledek do databáze a vrátí JSON odpověď. Není to neprůstřelný anti-cheat systém a ani se za něj nevydává, ale je to praktický a příjemný způsob, jak dostat výsledky z reálného Nextu na online leaderboard. Jo a leaderboard najdete zde: jsem tam ale zatím jen já...
Když hráč v hlavním menu chvíli nic nedělá, spustí se demo režim. Není to jen přehrané video, ale skutečná hra řízená jednoduchým autopilotem. Ten sleduje blížící se hexagony, vybírá si cílovou mezeru a snaží se do ní včas dostat. Bylo docela zábavné sledovat, že i autopilot občas nestíhal, hlavně v pozdějších fázích. Nakonec to ale pomohlo při ladění obtížnosti. Když se i jednoduchý automat začne chovat zmateně, je to dobrý signál, že lidský hráč bude mít také problém. A ano, hádáte správně, autopilota jsem udělal pro testování levelů - kdo mě zná, nebo mě někdy viděl hrát jakoukoliv hru, tak ví, že já jsem špatný gamesník a do vyšších levelů bych se vůbec nedostal. Demo režim bude vidět i ve videu pod článkem. Spouští se přímo z menu po nečinnosti a pěkně ukazuje rytmus hry bez toho, aby bylo nutné hned sahat na klávesnici nebo joystick. Ve videu hraje hudba, ale ta nepochází z hry, ale je to jen podkres z youtube. A když už jsme u hudby.... Hudbu mi slíbil Jamie Mallender. To je pro mě hodně příjemná představa, protože Jamie je ve světě ZX Spectrum Next známý hlavně jako hudebník, skladatel herní hudby a popularizátor tvorby hudby pro retro platformy. Věnuje se zejména zvuku čipu AY, trackerové hudbě a tvorbě soundtracků pro hry na ZX Spectrum Next. Na svém YouTube kanálu ukazuje postupy, jak takovou hudbu skládat, a sdílí i praktické ukázky práce s nástroji jako Vortex Tracker. Takže jestli se všechno podaří, mohl by Next Hexagon dostat přesně ten typ zvuku, který k rychlé, neklidné a hypnotické hře sedí.
Next Hexagon pro mě začal jako malý rest z minulosti a rostl mi velmi rychle pod rukama a já si na něm vyzkoušel spoustu věcí. Od vektorových pokusů přes rotující bitmapové pozadí, správu spritů, čitelnost patternů, level design, ukládání CFG, Wi-Fi upload až po demo autopilota. Hra není ještě dokončena, jak jsem napsal, čekám na hudbu a ještě testuji levely a hraji do zblbnutí a musím čistě nesobecky říct, že mě baví tuto hru hrát. Jinak princip s leaderboardem zavedu i u Voltixu, který už čeká jen na dokončení levelů a jejich otestování... Tak držte palce, ať vše dopadne dobře.
2 Comments
pan Shrek umí!!
Tohle je moc dobré a já, jakožto takřka stoletý uživatel Commodore 64 musím dát palec nahoru.
Jestli tímto tempem pojede dál, za pár let obšlehne všechny hry na Commodore 64 a my se přesunem jinam do vesmíru!
Dobrá práce 🙂
Ahoj, díky moc … a ještě jednou díky za super pokec o víkendu. A jak vidíš, plním sliby, řekl jsem, že nahrávání skóre použiji 😉
A ten kdo umí jsi ty: já jsem jen lopata, která buší do klávesnice… 😉