☰ Menu

Scene.hu

Magyar demoscene portál – grafikusok, zenészek, programozók alkotói közössége

A Scene.hu Facebook page-en felmerülő kérdések nyomán felkértem Oswaldot egy cikk megírására. Az volt a kérésem, hogy magyarázza el földi haladóknak, hogy miképp lehetséges C64-en olyan elképesztő scrollert csinálni, mint amit a Censor Design produkált a legutóbbi ‘Daah those acid pills’ című demójukban. A video alatt a kimertő választ találjátok…

“Murphy megkeresésére született ez a cikk, amiben elmagyarázom hogyan működik a scroller a ‘Daah those acid pills’ című Censor demóban. Ehhez első körben értenünk kell hogyan épül fel egy 16 színű 160×200-as kép c64-en. Nem színezhetőek szabadon a pixelek, hanem karakterenként legfeljebb 4 különböző szín lehet ebből 3 szín fix karakterenként, a 4. felhasználható szín pedig a háttérszín ami egyforma az egész képen. Ezekhez mindegyik szín szabadon választható a 16ból. Ezek a színek szabadon átírhatóak a képernyő és a szín memóriában (másoknak talán ismerősebb ha attribútum memóriának hívjuk ezt a kettőt).

Kattints a Továbbra a folytatáshoz!

A trükk egyik része az hogy előre ki van számolva egy állókép a hullámmal, és csak a színmemóriákat piszkáljuk. A háttérszínt nem használjuk, mert az fix az egész képen. A scroller pszeudo pixelei egy karakter szélesek, ez azért jó, mert így akár 3 színt is bele tudunk zsúfolni egy karakterbe. Van egy előre generált szénné optimalizált kód ami a scroller textúráját szépen átmappeli a szín/attribútum memóriába. Ha mindezt megcsináljuk akkor még csak ott tartunk , hogy van egy álló hullámunk amin tudunk scrollozni egy szöveget. Itt jön a második trükk: az álló hullám úgy van megrajzolva hogy 40 karakter után ismétli önmagát, szakszóval wrappel :) Az egész képernyőt egy HW hack segítségével vízszintesen scrollozzuk. Ez pár rastersor alatt megoldható sok időt nem vesz el, ilyenkor amit kitolunk az egyik szélén az wrappel a másik oldalon visszajön, ezért wrappeljük az előre kiszámolt hullámot is. Minden frameben egy egész karakternyit scrollozuk az állóhullámunkat jobbra, eközben a scroller a végeredményt tekintve egy karakternyit mozdul balra, és készen vagyunk. :)

Pár dolog még a végére: Ennek a HW scrollnak hátulütője hogy a kiscrollozott visszawrappolódott képernyő egy karaktersorral –nem emlékszem pontosan- feljebb / lejjebb lesz. 39 karakternyi scrollozás után tehát az egész kép egy karaktersorral elcsúszik.Ha most visszaváltunk 0 karakter eltolásra akkor egy karaktert fel/le ugrik a kép. Kétféle megoldás van: van egy beépített függőleges scrollozási lehetőség 7 pixelig, ezzel lehet korrigálni, hogy mire körbeér a képernyő 7 pixelt el is tolom fel/le. Valószínűleg nem ez van mert látszana a finom fel le ugrálás. De az is lehet hogy nem látszik. :) A másik hogy két képernyővel dolgozunk, a másik oldalon visszajött elcsúszott oszlopokat izomból átírjuk hogy ne csússzanak el, de amikor ezt a képernyőt megint 0. ból kezdenénk tolni akkor megint csak el van csúszva az egész ezért ilyenkor egy másik képernyőre váltunk ami nincs elcsúszva, és amíg ezt toljuk el 40. karakterrel addig az első képernyőt szép fokozatosan oszloponként visszareseteljük alapállapotba. Bonyolult. :)

Az utolsó: ugyanezt a trükköt használják a sinus scrollerek (mega ora dycp) ahol nagyon sok scroller ugrál fel le. Az összes scroller egy állóhullámon ugrál karakterenként miközben a képernyőt a HW trükkel toljuk az ellenkező irányba. Az állohullám meg a képernyő szélein folyamatos. Azért jó, hogy állóhullámunk van mert ezzel precalc heavenben vagyunk, „csak” pointereket kell állítgatni, hogy melyik karaktert rajzolja ki a kód. :)  Persze ennél is bonyolultabb a történet, ahol karakterek nem érnek össze ott nem „pixelenként” van kirajzolva a cucc, hanem egy egész karaktert tolunk ki egyszerre, mert van egy trükkös karakterkészletünk amiben fel le mozognak a betűk :)

Oswald / Resource

4 Responses so far.

  1. avatar adsr says:

    Egy szót nem értek az egészből, de jó volt olvasni :-D. (Na jó, egy kicsit azért mégis ;-) ).

  2. avatar Murphy says:

    A font stílusa kicsit a legendás elite systems logójára emlékeztet. http://www.elite-systems.co.uk/elite/htdocs/images/c2-logo.jpg

  3. avatar Artlace says:

    A kodolas a “programozassal” ellentetben mindig is melyviz, ahol semmitol se szabad megijedni akarmilyen ijeszto is – es sokszor az.

    Egyaltalan nem szegyen ha valaki nem erti, sokszor meg koderek is igy jarnak es csak akkor jonnek ra mivel is van dolguk mikor tobb oran at szivnak vele.

  4. avatar Murphy says:

    Artlace: van abban valami amit írsz :)

Leave a Reply

You must be logged in to post a comment.

Ugrás a lap tetejére Ugrás a lap aljára