HRA

Pac-Land
Herní styl Platformer (Scrolling Screen)
Multiplayer Bez multiplayeru
Rok vydání 1988
Programátor Martin Gannon & Allan Og...
Grafik (Unknown)

INTRO

Sprity, Sprity , Sprity ...

Co dělá Commodore 64 Commodorem (64) ? .... Sprity, slovensky škriatek.

Sprity jsou dominana C64 absolutně nezpochybnitelná. Sprit je část paměti o velikosti 24 x 21 bitů, která je graficky nezávislá od ostatního grafického režimu počítače. Jednoduše řečeno, je rpti "stát ve státě". Můžeme jej nezávisle obravovat do jedné barvy + pozadí (hires), můžeme jej obarvovat do tří barev + pozadí (multicolor), můžeme s nimi nezávisle manipulovat po obrazovce, animovat, prostě cokoliv.

Hires sprit má tedy velikost 24 * 21 bitů, což znamená , že zabírá v paměti místo 4*21 bajtů ( 64 znaků). Chceme-li editovat sprit, musíme použít nějaký editor spritů , protože organizace spritu v paměti není vhodná pro přímě vepisování hodnot. K editaci spritu také můžeme použít vestavěný monitor Final Cartridge III ( nebo Action Replay) . V FCIII najdeme výpis spritů pod příkazem ES adresa adresa.

Sprity se mohou ve standartně zaplém banku paměti nacházet od adres $2000 - $4000 s tím, že sprit vždy musí začínat na násobku hodnoty 64 ($40). To znamená, že sprit může být v paměti nakreslen od adresy $2000 , $2040, $2080, $20c0 , $2100 ... atd.

Zobrazujem, ukazujem, nastavujem ...

Sprity jako takové jsou standartně vypnuty. Zapínají se na adrese $D015. Osm bitů této adresy je osm spritů zobrazitelných na obrazovce. Takže následujíví příklad nám zapne první, pátý a šestý sprit. Nejjednodušší je používat možnost binární editaci hodnot, protože pak máme vše jako na talíři.

lda #%00110001
sta $d015

Tímto docílíme, že se sprit zapne a bude viditelný. Ovšem ještě pořád počítač neví, jaké sprity z jaké části paměti zobrazit. Tyto ukazatele na jednotlivé sprity se nachází na adresách $07f8 - $07ff. Adresa $07f8 je první sprit, $07f9 druhý atd... Hodnotu pro ukazatel vypočítáme takto:
Představme si, že máme nakreslený sprit od adresy $3000 - $3040. Ukazatel na něj pak získáme jednoduchým výpočtem $3000 / $40 = $c0.

lda #$c0
sta $07f8

Tímto máme nastaven ukazatel spritu na místo od $3000

Pozicujem a divíme se ... a pozicujeme přes hodnotu 255(x)

Každý sprit má dvě adresy. Jednu pro X souřadnici a druhou pro Y souřadnici. Od adresy $D000 začínají adresy pro pozici spritů následovně.

$d000 1. sprit souřadnice X
$d001 1. sprit souřadnice Y
$d002 2. sprit souřadnice X
$d003 2. sprit souřadnice Y
$d004 3. sprit souřadnice X
$d005 3. sprit souřadnice Y
$d006 4. sprit souřadnice X
$d007 4. sprit souřadnice Y
$d008 5. sprit souřadnice X
$d009 5. sprit souřadnice Y
$d00a 6. sprit souřadnice X
$d00b 6. sprit souřadnice Y
$d00c 7. sprit souřadnice X
$d00d 7. sprit souřadnice Y
$d00e 8. sprit souřadnice X
$d00f 8. sprit souřadnice Y

Následující příklad umístní sprit na souřadnice X=100 a Y=217

lda #100
sta $d000
lda #217
sta $d001

Zde ale nastává jedna zásadní otázka. A to ... Commodore 64 má přeci v X-ové souřadnici bodů 320 !! ... Jak udělat , aby jsme mohli nastavit sprit za hodnotu 255 ???
Tohle je takový malý problémek. Pro "přetečení" za hodnotu 255 slouží adresa $D010. Jestliže nastavíme příslušný bit na této adrese, sprit se posune za hodntu 255 a počítání začně od znova. Takže následující příklad nám umístní sprit na X=300 a Y=120

lda #%00000001
sta $d015
lda #$c0
sta $07f8
lda #%00000001
sta $d010
lda #44 ;(300-256 = 44)
sta $d000
lda #120
sta $d001
rts

problém při používání pohybu přes 255 hodnotu je , že musíme kontrolovat Xsouřadnici 2x. Jednou, když přejíždíme spritem přes 255 a podruhé, když zapneme přetečení na adrese D010. To musíme hlídat pohyb za rám obrazovky.

Zvětšujeme, zmenšujeme , a tak dále

Sprit můžeme také jednoduše horizontálně nebo vertikálně dvojnásobně zvětšit. To se děje na adresách $D017 - svislé zvětšení a $D01D - vodorovné zvětšení. Opět nastavním příslušného bitu pro daný sprit tento zvětšíme či opět vrátíme na původní hodnoty. Takto zvětšený sprit zvětší pouze zobrazenou velikost. Tudíž všechny body se zvětší, ale velikost v paměti zůstane stejná.

Priority zobrazení

Další věc,kterou VIC se sprity umí je nastavení priority zobrazení spritu před nebo za znaky. Adresa $D01B je adresa priority. Tímto docílíte toho,že můžete mít sprit schovaný za znaky nebo před znaky. (více popisu je nejen zbytečnost, ale i pitomost :)
Někdy se můžeme setkat s problémem, že máme sprit překreslený jiným spritem a rádi bychom ho měli jako první viditelný. Tuto prioritu nastavujeme pouze ukazatelem spritu na $07f8 - $07ff. Sprit ,který má ukazatel na adrese 07F8 bude úplně v popředí a další sprity se budou skládat za něj postupně.

Barvišššky miláášššek ...

Tak jako grafika i sprity mohou mít multicolor mód. A tak jako u grafiky i u spritů se jejich rozlišení zmenší v X-ové ose dvakrát. To znamená, že sprit má poté velikost 12 x 21 bodů. Multicolor mód u spritů se zapíná na adrese $D01C. Po zapnutí opět příslušným bitem můžeme nastavit barvy multicoloru na adresách $D025 a $D026. Zde jsem se ještě zapoměl zmínit o klasickém obarvení spritů. A to se děje na adresách $D027 - $D02E.
Obarvíme první sprit hodnotu 01 (bílá).

lda #1
sta $D027

Kolize sprit / sprit ... sprit / znak

Co dělá hru hrou ??? Kolize. Kolize raketky letící mezi sprity , mezi znaky .. A na tyto kolize jsou opět dvě adresy . Na adrese $D01E je kontrolována kolize sprit / sprit a na adrese $D01F kolize sprit / znak. Jestliže nastane kolize spritů , na adrese D01E jde tento stav přečíst. Jako obvykle můžeme binárně zjistit, které sprity kolidují. Ovšem koliduje-li sprit se znakem, adresa D01F nám pouze vrací hodnotu 0 = není kolize a 1 = nastala kolize. Nemůžeme proto tak snadno zjistit , který znak nám zrovna koliduje se spritem. Na zjištění kolize se znakem musíme použít nějakou svoji metodu. Například zjištění souřadnice spritu a podle toho přepočítat na matici obrazovky místo, kde se nacházíme a pod ním kód znaku. I přes toto omezení ale patří práce se sprity s tím nejjednodušším.

Tímto jsme završili všechny možnosti použití spritů na Commodore 64. Sprity jsou úžasné svoji nezávislostí na grafickém módu . Můžou být použity jak v textovém, tak v grafickém režimu úplně stejně. Na multicolor grafiku můžeme umístnit hires sprit a naopak.

Nový příspěvek k článku

podpis :
První znak podpisu musí být vykřičník, jinak se příspěvek neodešle (ochrana proti spamu)

Advert

Hardcode and datamining by PCH of UNREAL, Hardware guru by RAY of UNREAL, Bugs report by SILLICON of UNREAL
UNREAL 2014-2021 Czech republic