Nintendo Entertainment System
Nintendo Entertainment System
Nintendo Entertainment System
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
5.5 Eksempel 5: Et metatile-system<br />
5.5. EKSEMPEL 5: ET METATILE-SYSTEM<br />
Siden attribute tablene bare kan fargelegge individuelle blokker på 2 x 2 tiles eller større, er det<br />
hensiktsmessig å dele inn grafikken etter denne begrensningen, slik vi gjorde i forrige eksempel.<br />
Da kan vi gi hver blokk en egen palett, og samtidig tar informasjonen om hvilke blokker som skal<br />
plasseres hvor på skjermen mye mindre plass. Et helt nametable tar 960 bytes, mens en oversikt<br />
over hvilke metatiles som skal hvor på skjermen tar til sammenligning 15 · 16 = 240 bytes (det<br />
er 16 blokker på én rekke og 15 rekker). Blokker på 2 x 2 tiles kaller man ofte for metatiles.<br />
Svært mange NES-spill, da spesielt platformspill, bygger grafikken opp slik.<br />
I dette et eksempelet skal vi implementere et system for å bygge opp bakgrunnsgrafikken med<br />
metatiles. Det programmet skal gjøre er å ta et brett som forteller hvor metatilene skal plasseres<br />
på skjermen, og fylle nametable 1 med de riktige tilene:<br />
Sammenhengen mellom tabellen til venstre og figuren til høyre bør være grei å se. Vi ser da for<br />
eksempel at metatile 0 her helt blank, mens metatile 2 er mursteiner. I koden vår er vi nødt til<br />
å definere hvilke individuelle tiles hver metatile skal bestå av. De ni første tilene i pattern table<br />
ser slik ut i dette eksempelet:<br />
Figur 5.4: Tile 0 til 8 i pattern table 1<br />
Vi ser da med andre ord at alle de fire tilene i metatile 0 må bestå av tile 8 (den er blank), mens<br />
metatile 1 må bestå av de fire første tilene, og metatile 2 må bestå av de fire neste. Det er flere<br />
måter å oppgi hvilke tiles metatilene skal bestå av. Én måte kunne for eksempel være at vi gjør<br />
noe slikt:<br />
metatiles :<br />
; metatile 0<br />
. byte 8, 8, 8, 8<br />
; metatile 1<br />
. byte 0, 1, 2, 3<br />
; metatile 2