ZX Spectrum Next: historie
29. 3. 2026

Vývoj mojí hry Voltix se zase posunul o kus dál. Aktuálně mám hotový a plně hratelný první level (byť jsou tam sem tam nějaké chybičky), takže si při psaní této hry mohu pořádně zapařit. V tomto článku se chci zaměřit hlavně na to, jak jsou ve hře řešené levely, jak je vytvářím, jak jsou uložené a jak se následně kreslí na obrazovku. Berte to jako příležitost se mi vysmát, že to dělám úplně špatně a nebo (v nějakém paralelním světě) to může i někomu pomoct.

Voltix: Level 1

Vývoj mojí hry Voltix se zase posunul o kus dál. Aktuálně mám hotový a plně hratelný první level (byť jsou tam sem tam nějaké chybičky), takže si při psaní této hry mohu pořádně zapařit. V tomto článku se chci zaměřit hlavně na to, jak jsou ve hře řešené levely, jak je vytvářím, jak jsou uložené a jak se následně kreslí na obrazovku. Berte to jako příležitost se mi vysmát, že to dělám úplně špatně a nebo (v nějakém paralelním světě) to může i někomu pomoct.

První level už dnes obsahuje všechno důležité, co hra potřebuje:

  • startovní pozici robota
  • plošiny a žebříky
  • nebezpečné prvky
  • elixír
  • exit
  • nepřátele
  • kolize
  • sbírání předmětu a zpřístupnění cesty dál

Na tvorbu levelů používám svůj vlastní nástroj, který jsem si pro Voltix připravil: https://mb-maniax.cz/voltix/. Díky tomu nemusím levely skládat ručně, u čehož bych pravděpodobně umřel a nebo se raději odhodlal programovat pro Atari, ale můžu je pohodlně navrhovat ve specializovaném editoru. Ten mi pak vygeneruje výsledná data ve formátu, který hra přímo používá.

Pokud si to chcete vyzkoušet, stačí do generátoru nahrát ukázkový soubor levels.asm. Po jeho vložení stačí stisknout tlačítko PARSE a data se načtou do editoru. Výsledná data, která editor vytvoří, jsou pak vidět v sekci Výstup.

Každý level je uložený jako blok dat. Nejde tedy o jednu hotovou bitmapu obrazovky, ale o mapu složenou z dlaždic.

Na začátku levelu je krátká hlavička, ve které jsou uložené důležité informace, například:

  • startovní pozice hráče
  • pozice exitu
  • pozice elixíru

Za touto hlavičkou následují samotná data mapy. Ta jsou tvořena jednotlivými dlaždicemi, kde každé číslo představuje určitý typ objektu nebo povrchu. Typicky jde o:

  • prázdné místo
  • stěnu
  • plošinu
  • žebřík
  • bodce
  • elixír
  • exit

Tyto "mapy" jsou ale napojené i přímo na herní logiku. Stejná data se nepoužívají jen pro vykreslení scény, ale i pro detekci kolizí a vyhodnocování pohybu. Když je někde v mapě žebřík, hra to ví nejen vizuálně, ale i logicky. To samé platí pro plošiny, volný prostor, nebezpečné prvky nebo exit.

Při vykreslení levelu hra nepracuje s jedním hotovým obrázkem, ale skládá scénu postupně z jednotlivých dlaždic.

Pro každou pozici v mapě se zjistí typ tile a podle něj se vykreslí:

  • pixelová data
  • odpovídající atribut barvy

Každá dlaždice má vlastní definici grafiky a vlastní atribut. Díky tomu se může jedna část levelu chovat jako pevná stěna, jiná jako plošina, další jako žebřík a jiná třeba jako nebezpečný objekt. Jedna z důležitých věcí je, že se během hry nepřekresluje celá obrazovka bezhlavě pořád dokola. Level je rozdělený do řádků a renderer si hlídá, co je potřeba překreslit. To samozřejmě šetří drahocenný čas. Statické pozadí tvoří samotná mapa, zatímco robot, nepřátelé a další pohyblivé objekty se vykreslují zvlášť.

Když se robot pohne, hra musí:

  • obnovit pozadí na jeho staré pozici
  • vykreslit novou pozici robota
  • případně překreslit dotčené části mapy

Stejný princip platí i pro další pohyblivé objekty. Bez toho by po pohybu zůstávaly na obrazovce duchové a rozbité zbytky starých pozic. Popravdě s artefakty po pohybu např. robota jsem měl chvílema velké problémy... ale snad jsem to dořešil. ZX Spectrum má známý problém s atributovou kolizí - no pro někoho problém, pro někoho něco, co se mu líbí. Když se ve stejné oblasti obrazovky potkají různé barevné objekty, může to vést k nehezkým atributovým kolizím, kdy se robot zbarví do barvy předmětu za ním.

Ve Voltixu to řeším tak, že pokud by mělo dojít k atributové kolizi, robůtek začne blikat v rytmu 50 Hz (a střídají se tyto dva objekty mezi sebou) a k žádné skutečné atributové kolizi nedojde. Není to zatím úplně dokonalé řešení, ale v praxi funguje překvapivě dobře. Po chvíli hraní si toho člověk prakticky přestane všímat a celé to působí mnohem čistěji, než kdyby se barvy mezi objekty navzájem přepisovaly.

Dalším krokem je pokračovat ve tvorbě dalších levelů a dál vylepšovat vykreslování, kolize i chování jednotlivých herních prvků - sem tam se nějaký ten bugýsek najde. V tomto článku najdete i video z prvního levelu a pak druhý prázdny level... hudba je jen na pozadí, co mi tu hrála, ve hře zatím žádná není. A toho problikávání si moc nevšímejte, ve skutečnosti to tak hrozné není,... je to způsobené záznamem.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *