Prince of Persia – modul statické grafiky pozadí

Tímto modulem začnu. Bude postaven na technologii TriStatePixel (součást knihovny TriPlane, vyvinuté pro hru The Magician’s Curse), která je řešením problému paměťové náročnosti této hry. Tato technologie má poloviční nároky na uložení grafických dat postavy hráče, kdy jak masku, tak i vlastní pixelová data lze uložit vždy pouze do jednoho bajtu namísto dvou (maska AND + data OR). Ovšem to je třeba chápat tak, že i když budou mít animační data poloviční objem, budou mít v zásadě stejnou délku jako originál. Původní hra kreslí bez masky, a v těch několika málo případech, kdy masku potřebuje, tak ji použije (masky jsou uloženy jako běžné obrázky, mají pouze svůj režim kreslení – AND).

Mechnerův originál řeší problém postupného řazení objektů za sebe jinak. Na 6. straně doprovodného souboru POPSOURCE009.PDF je zajímavý obrázek s obdélníky, označenými A, B, C a D (chybí tam ještě rovina FRONT, kreslící úplně dopředu, tedy i před postavy). Jejich postupným vykreslováním ve změněných polích obrazovky dochází k přirozenému řazení objektů podle geometricko-fyzikálních pravidel vidění. Systém TriStatePixel je tak pouze nástrojem pro kreslení s maskou a nakonec tedy není nositelem základní funkcionality pro dosažení precizního technického provedení grafiky hry, kterým je Prince of Persia pověstný.

Ovšem systém TriStatePixel pomohl i jinak. Protože každý bajt grafické předlohy je pouze interním kódem, který určuje jak masku tak i obrazová data, která jsou uložena v tabulce 2×256 bajtů, tak pouhou změnou dvou různých tabulek mohu dosahovat zrcadlového zobrazení bitů. A pokud vykresluji videobajty navíc i opačným směrem, pak celý obrázek je vykreslen korektně horizontálně otočený. Ale opět, Mechner to dělá principiálně stejně, u verze pro PMD-85 to je pouze integrální součástí použitého systému.

Vyvíjený subsystém hry pro kreslení grafiky pozadí zahrnuje i animaci tzv. TROBs – objektů, které zůstávají na místě, tj. mříže, brána, pochodně, lahvičky, gilotiny, plošiny, atd. Každé pole obrazovky (je jich 10 horizontálně a 3 vertikálně) má své ID, určující CO tam je nakresleno, a svůj atribut, který modifikuje tento objekt. A systém pro zobrazování grafiky bere data i z pole atribut a podle toho například vybere animační fázi pochodně, ovšem pochodeň je jako objekt definována v položce ID. Nebo jiný příklad: mříž je definována v položce ID, stupeň jejího zvednutí v pixelech je v položce atribut. Nadřazený programový modul se pak stará o to, že mění údaje v polích ID, atribut (a ještě ve třetím poli XCHG, indikujícím proběhlou změnu) a o zbytek už se stará vykreslovač.

Zde je možná na místě uvést skutečnou geometrii herní plochy. My vidíme pouze 10×3 obrazových polí (a k tomu jeden čtyři pixely vysoký řádek zcela nahoře, kde je vidět struktura podlahy obrazovky o jednu výše – pokud existuje). Z hlediska programátora to je ale jinak. Existují již zmíněná tři pole: ID, ATTR, XCHG, kde každé z nich má rozměr 11×5 bajtů. V těchto polích jsou po zacentrování doprava doprostřed ta viditelná pole 10×3. Navíc jsou v prvním sloupci umístěna data z obrazovky vlevo a v horních a spodních řádcích jsou data z obrazovek nahoře a dole. To kvůli průniku obrazových dat z těchto sousedních obrazovek do té právě viditelné. Tato tři pole (ID, ATTR, XCHG) jsou sestavena vždy při vstupu do místnosti a hra se pak už nezdržuje vyhledáváním dat ze sousedních místností.

Tolik předmluva k prvnímu kvartálu 2020 a vývoji první části hry Prince of Persia.

 

20 komentářů u „Prince of Persia – modul statické grafiky pozadí

  1. Zdeněk

    Už z té předmluvy to ní jako zcela nová pohádka, tentokrát s názvem
    “ PoP: TriPlane“ ( volně přeloženo Princ z Persie: Tři pláňe ) 😆😉
    a to právě i vzhledem k již zmíněnemu “ betlémskému “ modulu.✌
    Je radost o ní číst i když jen zatím …

    … To se mi líbit … 👍

  2. Libor L.A.

    Do hlavního článku jsem dal ke stažení DEMO/prohlížeč levelů PoP z roku 2015/2016. Přeci jen mě napadla možnost jistého vytěžení této práce. Délka uvedeného prohlížeče (což je defacto grafická knihovna a sada bitmap grafiky) zabírá něco málo přes 7kB. Myslím, že ji dokážu stlačit na hodnotu kolem 4-5 kB, což ve srovnání s originálem Apple (jen grafika bez programu kolem 13kB) vypadá na celkem velký progres.

    Ale zatím je to ve stádiu porovnávání, co z které verze využít. Trochu mám obavy z toho, že pokud se zcela oprostím od originálního engine „Mechner“, nedokážu sesynchronizovat jednotlivé moduly hry. Nyní asi provedu analýzu originální procedury FRAMEADV a na ni navázaných zobrazovačů, nakolik je využitelná pro PMD-85.

    1. Zdeněk

      “ … když se kouknu na Tebe, tak tě musím pochválit … “ 😎
      Tak to je slušná práce, vypadá to dost dobře a to i vzhledem k té uvedené velikosti ( spíš malinkosti ).

      Analýza a srovnávání určitě není na škodu.
      Podle dosavadních výsledků na to rozhodně máš, aby jsi to dokázal ( vybereš ze všeho jen to nejlepší a je to 😉 )

      “ …kdo se bojí nesmí do lesa … „

      1. Libor L.A.

        Hned jak se vrátím domů, kouknu na ten druhý odkaz. Podle jména vypadá zajímavě. Jinak bych řekl, že jsi zarytý fanda kinematografie a to nejen té české.

        1. Zdeněk

          Jo, jo koukni to budeš teprve mrkat na drát, co tam na Tebe vykoukne ( ale tentokrát to Vetřelec nebude ).

          To víš, každej jsme nějak “ postiženej “ 😎
          Jestli to nebude tou “ fotografickou “ pamětí, pořád se tam něco “ samo“ ukládá a kolikrát to člověk ani nechce ( např. koukneš na “ pohádku “ MRAZÍK jednou a už se toho nezbavíš )

  3. Libor L.A.

    S PoP jsem se dostal do bodu, kdy začíná narůstat množství záplat. Proto jsem dnes zakonzervoval stávající verzi a na základě nabytých zkušeností přepisuji základní grafické rutiny, tak aby fungovaly bez těch záplat, byly univerzální a přitom rychlé. A pokud možno ještě rychlejší. A nejrychlejší kód je ten, který neexistuje.. Tím nemyslím nic filozofického. Tím myslím zavedení jistého stupně predikce: prostě včas určit, co se kreslit nemusí, když se následně kreslí to či ono. Zároveň bych ošetřil nějaké ty (dys)grafické anomálie.

  4. Libor L.A.

    Důsledně teď ořezávám zobrazovač pozadí za účelem zrychlení a tím vytvoření časové rezervy pro pohyb postav. Oproti té poslední verzi s běhajícím Princem, jejíž video jsem tady někde dával, jsem dosáhl zrychlení o 25% (měřeno). Ale nutno říci, že potenciál pro zrychlování se už vyčerpal. Alespoň pro aktuálně vyvíjenou verzi POP48. Teď už jen dělám pořádek, abych mohl modul grafiky pozadí považovat za dokončený. Ovšem po rozběhnutí Prince bude určitě nutno zalátat některé chyby a tak bych ještě moc nechtěl chválit dne před večerem..

    Tolik tedy moudro dne a zároveň informace o aktuálním stavu vývoje.

    1. Zdeněk

      Pokud mužů nějak pomoci, tak stačí jen říct … 😆😉✌
      ( … “ výjimka “ podle vzoru námitka, pořad ČT2, Dobré ráno 6.4.2020 8:25 )

      [ @tatrakolemsveta2.cz ]
      [ http://www.tatrakolemsveta2.cz ]
      ČESKÁ expedice TATRA KOLEM SVĚTA #2

      1. Libor L.A.

        Zrovna ráno jsem přemýšlel, zda se s někým spojit za účelem rozdělení práce a tím urychlení celkového vývoje. Bohužel, momentálně se vývoj neubírá směrem kupředu. Vše kolem statické grafiky je (dávno!) napsáno, a já jen ladím a tvaruji stávající věci. Jedna změna vyvolá jinou a tak bych stávající práci nazval spíše konvergencí než vývojem. Až začnu psát kód herních postav, bude startovací čára úplně jinde než dnes. Takže zatím asi bez výpomoci. Určitá naděje na spolupráci se rýsuje při úpravě animačních fází postav (těch je řádově 200), ale to až asi tak za půl roku (odhadem).

        1. Zdeněk

          “ … tak zas za rok na “ YDYKSEB „, bude mi smutno přátelé … “ ✌
          “ … má někdo za kamaráda takovýho ptáka ? “ 😆😉

  5. Libor L.A.

    Byl mírně změněn a doplněn článek v záhlaví „Prince of Persia – modul statické grafiky pozadí“. Přeci jen nabyté zkušenosti a poznatky rozšířily mé obzory a změnily pohled na některé věci.

    Momentální stav: zbývá dokončit animace gilotin a bitmapy podpěrných sloupů a jde se na ladění obrazovek (z důvodu větší efektivity při portaci na PMD-85 definuji některé položky bludiště jinak). Připravované demo obsahuje všech 14 levelů (ano, i originál jich má 14) a nese sebou i obě grafické knihovny DUNGEON i PALACE, takže každý level je kreslen ve svém přirozeném grafickém pojetí. Lze krokovat po všech obrazovkách ve všech levelech. V každé obrazovce se z demonstrativních a kontrolních důvodů hýbe vše, co se hýbat může – mříže a brány jezdí nahoru a dolů, podlahy klapají, pochodně plápolají, flašky bublají, atd. Termín uvolnění videa musím mírně posunout na příští týden, přeci jen jsou to kvanta dat.

  6. Libor L.A.

    Vývoj nikdy nekončí a tak aby bylo na co průběžně koukat, uvolnil jsem video s průchodem hry Prince of Persia pro PMD-85. Samozřejmě bez postaviček, jen kvazistatické demo – hýbou se jen kulisy. Grafika je prvotní nástřel a už teď vím, že je na ní hodně co vylepšovat. To demo se celé vešlo do 48kB RAM plus k tomu 16kB videoram. Ale těch 48kB není úplně plných a nemám zkomprimovaná všechna data. Ve finální verzi se budou levely samozřejmě dohrávat po jednom. Dvanáctý a třináctý level se mi podařilo dát do jednoho, aby přechod mezi nimi v magnetofonové verzi nebyl brutálně přerušený.

    Takže teď asi měsíc budu čistit a pilovat to, co dnes s „hrdostí“ ukazuji. Je to prostě polotovar. Možná to ukáže, že cestu je třeba zkorigovat. Takže z prvního kvartálu máme první pololetí a začátkem prázdnin se dá očekávat nástup na rozpohybování postavy hráče.

    https://www.youtube.com/watch?v=GylsYUEQKDg&list=PLT3JKa2Wg_jv188089RqaIWlTustPcgxv&index=4

      1. Libor L.A.

        Nejtěžší bude přišít k tomu animace hráče a oponentů tak, aby se společně „vešli“ i při největší možné šířce do videobuferu 16 byte na šířku (videobufer je v zápisníku napravo od videoram). Nějakou představu mám, ale..

        Nicméně u vás dvou s bráchou jsem se naučil, že je třeba postupovat po krocích, nejprve vyřešit jedno, a až pak se vrtat v dalších věcech. Ovšem nevyřčenou podmínkou je, že nějaká intuice musí napovídat, že to není slepá cesta..

    1. Libor L.A.

      Tak ještě jsem přesněji sečetl zbytky paměti a to demo má 42kB. Bitmapy vězení zabírají odhadem 7kB, bitmapy paláce mají cca 10kB. Ale ty bitmapy, zejména ty naposledy převáděné, ty ještě nejsou komprimované. Reálně uvažuji velikosti bitmap DUNGEON/PALACE tak kolem 6 a 9kB. V paměti je vždy uložena pouze jedna sada bitmapových obrázků a tak určující bude velikost bitmap PALACE. No čekal jsem to lepší.. Prozatím je PoP48 reálným cílem.

  7. Libor L.A.

    Modul grafiky pozadí (data pro kresbu levelů, jinak také BG Graphic) tímto uzavírám jako hotový s konstatováním, že jeho finální délka je 7073 bajtů. To představuje 51% velikosti originálu Mecher, který uvádí délku 13,5kB. Převod tohoto modulu splnil očekávání a předpoklady pro vytvoření verze, která by měla běžet na 64kB RAM (a možná i méně).

Napsat komentář: Libor L.A. Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna.