prog8/examples/cx16/sprites/dragon.p8

63 lines
1.9 KiB
Plaintext
Raw Normal View History

2023-08-31 14:56:52 +00:00
%import diskio
2023-08-31 21:24:46 +00:00
%import textio
%import sprites
2023-08-31 14:56:52 +00:00
%zeropage basicsafe
%option no_sysinit
; an example that displays and moves a single dragon (actually 2 sprites).
2023-08-31 14:56:52 +00:00
main {
; we choose arbitrary unused vram location for sprite data: $12000
const ubyte SPRITE_DATA_BANK = 1
const uword SPRITE_DATA_ADDR = $2000
const ubyte SPRITE_PALETTE_OFFSET = 1 ; sprite palette at color index 16
2023-08-31 21:24:46 +00:00
sub start() {
txt.plot(32,30)
txt.print("there be dragons!")
2023-08-31 14:56:52 +00:00
2023-08-31 21:24:46 +00:00
; load the sprite data and color palette directly into Vera ram
void diskio.vload_raw("dragonsprite.bin", SPRITE_DATA_BANK, SPRITE_DATA_ADDR)
void diskio.vload_raw("dragonsprite.pal", 1, $fa00 + SPRITE_PALETTE_OFFSET*16*2)
2023-08-31 14:56:52 +00:00
2023-08-31 21:24:46 +00:00
; initialize the dragon sprites
sprites.init(1, SPRITE_DATA_BANK, SPRITE_DATA_ADDR, sprites.SIZE_64, sprites.SIZE_64, sprites.COLORS_16, SPRITE_PALETTE_OFFSET)
sprites.init(2, SPRITE_DATA_BANK, SPRITE_DATA_ADDR + 64*64/2, sprites.SIZE_64, sprites.SIZE_64, sprites.COLORS_16,SPRITE_PALETTE_OFFSET)
2023-08-31 14:56:52 +00:00
ubyte tt = 0
2023-08-31 21:24:46 +00:00
word xpos = -64
word ypos
bool flippedx = false
2023-08-31 14:56:52 +00:00
sprites.pos(1, 0, 100)
sprites.pos(2, 100, 300)
2023-08-31 14:56:52 +00:00
repeat {
2023-08-31 20:31:04 +00:00
if flippedx
2023-08-31 14:56:52 +00:00
xpos -= 2
else
xpos += 2
if xpos >= 640 or xpos <= -64
2023-08-31 20:31:04 +00:00
flippedx = not flippedx
2023-08-31 14:56:52 +00:00
ypos = (240-64 as word) + math.sin8(tt)
tt++
2023-08-31 20:31:04 +00:00
2023-08-31 21:24:46 +00:00
txt.plot(32, 32)
txt.print("at: ")
txt.print_w(sprites.getx(1))
txt.chrout(',')
txt.print_w(sprites.gety(1))
txt.print(" ")
2023-08-31 14:56:52 +00:00
sys.waitvsync()
; we set absolute sprite position, rather than the relative move() routines
2023-08-31 14:56:52 +00:00
sprites.pos(1, xpos, ypos)
sprites.pos(2, xpos, ypos+64)
2023-08-31 20:31:04 +00:00
sprites.flipx(1, flippedx)
sprites.flipx(2, flippedx)
2023-08-31 14:56:52 +00:00
}
}
}