Prince of Persia – zobrazovač postavy hráče

Tento modul se stará o korektní zobrazení postavy hráče. Pokud je hráč na obrazovce přítomen, nutně zasahuje do některých pieces (modul 4×64 videobajtů). Minimálně do jednoho určitě. Ale hra ve verzi PMD-85 umožňuje, aby těch postavou hráče „zasažených“ pieces bylo maximálně čtyři na šířku a maximálně dva na výšku. To kvůli geometrie volné RAM v zápisníku vedle videoram.

Postup při kreslení postavy hráče je následující. Vygeneruji seznam zasažených pieces a ve správném vzájemném prostorovém uspořádání vykreslím do buferu vedle videoram pozadí z těchto pieces. Pak opět na správnou pozici v buferu vykreslím postavu hráče a nakonec přidám popředí. Takto vygenerované pieces zkopíruji z buferu do videoram.

Ovšem kreslení hráče dle výše uvedeného je spíše jeden z těch hierarchicky nižších modulů. Nad ním jsou moduly, které podle tabulky FRAMEDEF „umí“ správně usadit vlastní bitmapy postavy do prostoru, následně podle tabulky SEQTABLE řadí bitmapy do správné sekvence a synchronně mění pozici postavy, a ty nejvyšší moduly už jen dávají požadavky typu „přejdi na sekvenci skok“.

Jedním z klíčových požadavků na portaci pro PMD-85 je zásadní redukce animačních dat postavy hráče. V Mechnerových podkladech uváděných 30kB je šílené číslo. Proto má verze pro PMD-85 zavedenu kompresi, spočívající v existenci atributu „CRLF“, který předčasně ukončí kreslení mikrořádku postavy a přejde na další. Jakkoliv to nevypadá na nic převratného, první výsledky jsou uspokojivé. A pak mám ještě jedno komprimační želízko v ohni..

Drtivou většinu procedur, které kreslení hráče používá, půjde použít i pro ostatní objekty typu „postava“ (včetně myši). Opět se využívá modulu TriStatePixel, který umožní definovat v jednom videobajtu nejen zhasnuté a rozsvícené pixely, ale i pixely typu „pozadí-neměnit“. A to bez nárůstu délky předlohy obrázků. Jakmile dokončím převod animačních postav hráče a jejich kompresi, bude navíc jasné, zda žije naděje i pro 48kB verzi. Prvních 15 animačních fází bez komprese zabírá 2917 bajtů a prostou extrapolací se ukazuje, že 48kB verze je utopie. Ale účty se budou skládat až po kompletaci všech animačních fází.

4 komentáře u „Prince of Persia – zobrazovač postavy hráče

  1. Libor L.A.

    Teď to nějaký čas vypadalo, že se na PoP nepracovalo. Ovšem příprava základů, na kterých bude následující modul postaven, byla celkem jalová a hlavně zabrala kvantum času.
    Od poloviny června tedy probíhá fáze rozpohybování postavy hráče. Sice namítnete, že v předposledním demu už Princ běhal, ale to byla low-level projekce. Nyní zapojuji vyšší hierarchické moduly (viz hlavní článek). Další demo tedy bude už umět ovládání postavy hráče ve vodorovném směru včetně kompatibilních animací (ve smyslu zachování postavy hráče v jednom „patře“). A bude samozřejmě ovládáno klávesami. To by měl být zásadní zlom, kdy se „engine“ trvale rozběhne a půjde na něj navěšovat další vlastnosti.

  2. Libor L.A.

    Dnes malý krůček pro postavu Prince, ale velký skok pro Prince coby hru. Postava poprvé zareagovala na ovládací klávesu. Ta úplně první byla klávesa J. Postava se umí rozběhnout a při puštění klávesy postupně zastaví. Sekvencer tedy funguje. Teď nastane fáze doplňování všech možných animací a milionu explicitních podmínek. Ale nová etapa začala..

    1. Zdeněk

      21th Century is begining already …
      Dobré zprávy z bojiště, to se cení, dobrá práce jen tak dál …

      Princ je mrtev, ať žije PoP ✌️🍺😁

Napsat komentář

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