Tenebra Extended pro Ondru

Úvod

Není tomu tak dávno, co jsem dokončil novou ROM pro Ondru s názvem Ondra+. Ve svých toulkách po inspiraci pro nový projekt jsem objevil hru Tenebra Extended, která mě na první pohled zaujala hned z několika důvodů. První důvod je, že se jedná o „sakra dobrou“ hru a druhý, že hra je už od pohledu předurčena pro černobílý osmibit. Rychlou úvahou jsem dospěl k tomu, že by na ni mohl Ondra výkonově stačit.

Úvodní obrazovka na Ondrovi, kde plápolají ohniště

Začátek

Pro začátek jsem zkoušel hrát ZX Spectrum verzi na svém počítači Mistrum, abych si hru tzv. osahal. ZX Spectrum verze je svižná, protože pro pohyb na hrací ploše využívá atributy a tudíž Spectrum nemusí nic překreslovat. Navíc je Spectrum mnohonásobně rychlejší než Ondra. Přidanou hodnotou, která na jiné platformě není, je lokalizace do českého jazyka. Toto by mohl být dobrý důvod, proč si někdy vyndat právě Ondru místo Spectra.

Hrubá představa byla jasná a mohlo se začít. Vzhledem k tomu, že hra nemá zdrojové kódy nikde ke stažení a i po důkladném hledání jsem nenašel licenční ujednání, nebyl jsem si jistý zda hru mohu vůbec napsat. Byl jsem připraven hru napsat kompletně od začátku, což je mnoho práce a nerad bych poté zjistil, že porušuji autorská práva. Logicky jsem tedy napsal autorovi o svolení a podmínky. V tuto chvíli jsem stále nebyl zcela rozhodnut, zda nebudu psát raději jinou hru. Avšak za pár dní mi přišla velmi potešující odpověď, kde jsme si vzájemně ještě ujasnili představy a dokonce mi byly nabídnuty zdrojové kódy, které jsem samozřejmě velmi rád přijal. Tím bylo rozhodnuto, jdu dělat Tenebru!

Ukázka ze hry, Level 1

Úprava pro Ondru

Jako základ jsem použil kód pro Amstrad CPC. V první fázi jsem se snažil zprovoznit hru tak, jak je pro Amstrad, i když jsem věděl, že na Ondrovi nemůže uspokojivě rychle běžet. To šlo poměrně rychle. Výsledek byl samozřejmě naprosto nepoužitelně pomalý. Nutno dodat, že autor mi byl nápomocen svými radami, kdy měl pocit, že na vykreslení je velmi mnoho strojového času pro jakýkoliv jemu známý počítač a navrhl kostru jak optimalizovat. Mě zase bylo jasné, že se musí optimalizovat hodně. Verze pro MSX nemá žádné optimalizace, ten stihne vše překreslit jako nic. CPC verze má optimalizování pouze tak, že překreslí jen dotčené celé řádky. To bylo stále neuvěřitelně pomalé. Tudíž jsem musel pohyb hráče napsat nově tak, že se překresloval minimální čtvercový rozsah 11×11 polí. To už mělo docela přijatelnou rychlost, ale stále to bylo málo, potřeboval jsem uspořit další nejméně třetinu, protože jsem ještě neměl hotové efekty hoření světel po celé hrací ploše a také veškeré generování zvuků, které zvláště pro OndraMELODIK spotřebují nezanedbatelnou část strojového času. Rozhodl jsem se již neztrácet čas a jít rovnou úplně „na krev“. Udělám to podobně jako v Ondra mezi balvany, do video RAM se budou kreslit zcela striktně jen ta pole, která jsou změněna. V tomto bodě se musí každý programátor správně rozhodnout, zda sama optimalizační logika nezabije přínos optimalizace samotné. Zamyslel jsem se tedy tím směrem, kde má Ondra slabé a naopak silné stránky. Slabé už známe – pomalost. Silná stránka je velký objem paměti RAM, kde mám v případě ViLi ROM k dispozici téměř celých 64kB. Tudíž předpřipravit Ondrovi vše co není nutné aby sám počítal. A to jsem použil. V první řadě si mohu dovolit další stínovou znakovou reprezentaci hrací plochy tak, jak je již na obrazovce.

Pozn.: Princip hry je takový, že jedna znaková RAM obsahuje level, druhá znaková RAM rozmístění tmy. Na obrazovku se generuje jen ty pole levelu, kde je světlo. Já přidal znakovou RAM výsledku tak, aby se dal porovnávat s novým pohybem.

Týpek se bojí chodit ve tmě…

V druhé řadě jsem vytvořil stínovou reprezentaci nezbytného okolí hráče. To není čtverec 11×11, ale kruh o průměru 11. Jako vztažný bod kruhu jsem zvolil levý dolní roh a vůči němu vytvořil tabulku „přídavků“ a umístil opět do RAM. Logika poté už jen vezme aktuální pozici hráče, přidá přídavek adresy z tabulky, což je velmi rychlé a jsme na znaku, kde chceme být. A aby toho nebylo málo, porovná se každý znak se stínovým znakem a vykreslí se jen pokud je jiný. Po úspěšném zvládnutí a odladění celé smyčky lítal hráč s pochodní po hrací ploše jako kdyby ho honilo hejno včel! Tady už jsem věděl, že hru dokončím úspěšně. V následujícím kroku jsem aktivoval časování hry na základě přerušení a dodělal hoření všech světel tak, jak byly původně. No a zde jsem dost narazil. Ondra nestihne vždy překreslit pohyb hráče a všechna hořící světla v rámci jednoho přerušení. Zkrátka při pohybu hráče se často zpomalovalo hoření světel. Začal jsem se tomu více věnovat a zjistil jsem, že se to děje i v původní verzi hry pro CPC. S tím jsem se nedokázal smířit. Působí to nepřirozeně. Rozhodl jsem se tedy přepsat časování událostí tak, aby mělo hoření světel přednost případně na úkor drobného zpomalení hráče. Strojový čas už nebylo kde brát a oheň by měl vždy hořet stejnou rychlostí, kdežto u hráče, který se navíc potácí katakombami s pochodní v ruce mi občasná nerovnost v chůzi připadá docela přirozená. Zkoušel jsem sice prodloužit minimální čas kroku tak, aby pokryl ty nejnáročnější případy (hodně světel, složité okolí hráče), ale hra začala být zdlouhavá. Tudíž občasné zpomalování kroku je vlastnost.

A co efekt plápolajícího ohně neboli flicker? Říkal jsem si, že to zkusím. Jako základ je signál přerušení. Pomocí random generátoru a jeho vhodnou filtrací jsem vytvořil takový šířkově modulovaný signál, který nejvíce odpovídá plápolajícímu ohni. Nevím jak na LCD monitorech, ale na jediném správném zobrazovadle Tesla Merkur jsem s výsledkem nad očekávání spokojen. CRT obrazovka opravdu vytváří podobný dojem. Mohu to tak hrát dlouhou dobu, aniž by mě to vyrušovalo. Kdo by měl problém, blikání se kdykoli dá vypnout klávesou F. Drobnou úlitbou je, že v původní hře autora na Commodore C64 bliká jen hrací plocha, nikoli i stavový řádek. Ale to na Ondrovi zkrátka není možné.

Dalším úkolem bylo udělat zvuky. Hra podporuje jak vnitřní pípák, tak OndraMelodik, kde jsou zvuky samozřejmě pestřejší. Hudební doprovod jsem vůbec nedělal, z povahy a záměru hry, která si drží svou tajemnou atmosféru. O co jsem se ale pokusil alespoň v úvodní obrazovce s připojeným Melodikem je zvukový doprovod k efektu plápolání ohně. Jedná se o nejnižší frekvenci šumového generátoru, kde se poslechem asi nejvíce podobá při velké fantazii všem těm hořícím ohňům. Zvuky ve hře lze případně vypnout klávesou S. Zvuky jsem dělal komplet od začátku, nic jsem nepřejímal. Rozhodně jsem se nezaměřoval jen na použití Melodiku a snažil jsem se co nejlepší zážitek poskytnout i přes chudý rozladěný 7mi tónový Ondrův pípák.

Mírné změny v grafice

Tenebra je graficky vpodstatě dokonalá. Já si dovolil změnit několik detailů tak, jak mi více zapadají do konceptu hry. Postavička hráče je mírně změněná, staré zdi katakomb ztratily své ostré rohy, brána je skutečně brána, kde lépe poznám zda je otevřená nebo zavřená. Rozbité kolejnice byly špatně vidět a občas jsem je přehlédl, takže jsou nyní ještě více rozbité.

Hezky česky

Posledním úkolem bylo hru počeštit. Pro tuto úlohu jsem použil font Čapek z Atari, který je 8x8px a kvůli diakritice se jeví písmo menší než původní. Současně s tím je k dispozici i anglická verze hry, přeci jen kdyby se někdo takový našel. Hra je k dispozici ke stažení na itch.io v obou jazykových verzích. Tenebra byla dosud k dispozici pro platformy PC, Amiga, C64, Amstrad CPC, MSX, ZX Spectrum, BBC Micro, Atari, NES a verzí pro Ondru se završí pokrytí pro nejvýznamější světové platformy 🙂

Závěr

Tenebra Extended se umístila na 1. místě v kategorii logických her pro ZX Spectrum pro rok 2022 v soutěži GOTY Planeta Sinclair awards. Verze pro Ondru je převedena bez ztráty jakýchkoliv užitných vlastností a obsahuje navíc češtinu. Pokud jste ji tedy již hráli, či nikoli, právě česká verze by mohla být důvodem, proč vyndat svého Ondru a strávit pár příjemných chvil při hraní něčeho nového. To jasně prokazuje, že i na Ondrovi lze mít moderní hru světové úrovně.

Zde bych rád také poděkoval za několikanásobné a trpělivé testování hry Solarisovi104.

Hra je ke stažení za dobrovolnou cenu i zdarma tentokrát pouze na itch.io. Já jsem si rozhodně hru koupil, abych autora podpořil. Pokud si hru koupíte také, veškeré prostředky jdou autorovi. Ale jinak je samozřejmě hra zdarma a vždy bude. Hra pro Ondru je součástí celého balíku a najdete tam BIN, TAP i WAV verzi pro obě jazykové verze. Tentokrát pouze pro ViLi ROM (nebo samozřejmě Ondra+ ROM). Tesla verze by byla možná, ale asi ji nikdo nepoužívá, resp. nemám vůbec žádnou zpětnou vazbu, tak jsem ji nedělal.

Takže stahujte níže a hurá do tmy!!

Příspěvek byl publikován v rubrice Software. Můžete si uložit jeho odkaz mezi své oblíbené záložky.