Displaying sprites: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
m (add graphics code category) |
||
Line 65: | Line 65: | ||
[[Category:Code]] | [[Category:Code]] | ||
[[Category:Graphics Code]] |
Revision as of 04:46, 26 November 2015
How to display a 64*80 (4*5 tiles) sprite block at x=88, y=36.
Loading palette
At least one palette needs to be loaded. Here SpritePalette is loaded as palette 0 and the backdrop color is set to black.
lea SpritePalette,a0
lea PALETTES,a1
moveq.l #16-1,d0
.ldpal
move.w (a0)+,(a1)+
dbra .ldpal
move.w #BLACK,BACKDROPCOLOR
Setting the map
The sprite's map is an array of tile numbers and attributes. Here the 4 sprites are made of tiles 0~4 with no special attributes.
move.w #64,d2 ;SCB1, sprite 1
move.w #1,VRAM_MOD
moveq.l #4-1,d6
.sprites:
move.w d2,VRAM_ADDR
clr.w d1 ;First tile is #0
moveq.l #5-1,d7
.tiles:
move.w d1,VRAM_RW ;Tile number
move.w #0,VRAM_RW ;No attributes
addq.b #1,d1
dbra d7,.tiles
addi.w #64,d2 ;Next sprite
dbra d6,.sprites
Setting the shrinking
No shrinking at all (full size).
move.w #SCB2+1,VRAM_ADDR
moveq.l #4-1,d7
.zset:
move.w #$0FFF,VRAM_RW
dbra d7,.zset
Setting the size and vertical position
First sprite is the driving one, next are driven.
move.w #SCB3+1,VRAM_ADDR
move.w #((496-36)<<7)+5,VRAM_RW ;Y position and size for the first sprite
moveq.l #5-1-1,d7
.yset:
move.w #64,VRAM_RW ;Sticky bit only for the 3 others
dbra d7,.yset
Setting the horizontal position
move.w #SCB4+1,VRAM_ADDR
move.w #88<<7,VRAM_RW