https://git.spwbk.site/swatson/pico8/raw/master/shmup.p8
___________________________________
pico-8 cartridge // http://www.pico-8.com
version 32
__lua__
--https://ztiromoritz.github.io/pico-8-shooter/
--https://github.com/ztiromoritz/pico-8-shooter/tree/master/p8
function fps()
 f = stat(7)
 print("fps: "..f, 0, 120, 1)
end

t=0
bullets={}

function init_stars()
 stars={}
 star_cols={1,2,5,6,7,12}
 warp_f=3
 for i=1,#star_cols do
   for j=1,10 do
     local s={
       x=rnd(128),
       y=rnd(128),
       z=i,
       c=star_cols[i]
     }
     add(stars,s)
   end
 end
end

function init_enemies()
 enemies={}
 for i=1,10 do
   add(enemies, {
     sp=4,
     m_x=i*16,
     m_y=60-i*8,
     x=-32,
     y=-32,
     r=12,
   })
 end
end

function draw_enemies()
 for e in all(enemies) do
   spr(e.sp,e.x,e.y)
 end
end

function update_enemies()
 for e in all(enemies) do
   e.x = e.r*sin(t/50) + e.m_x
   e.y = e.r*cos(t/50) + e.m_y
 end
end

function init_player()
 player={
   h=3,
   sp=1,
   x=64,
   y=64,
 }
end

function draw_health()
 inc=10
 for i=1,player.h do
   spr(2,(inc*i),1)
 end
end

function draw_player()
 spr(player.sp,player.x,player.y)
end

function update_player()
 if(t%6<3) then
   player.sp=0
 else
   player.sp=1
 end
end

function fire()
 local b={
   sp=3,
   x=player.x,
   y=player.y,
   dx=0,
   dy=-3,
 }
 add(bullets,b)
end

function draw_bullets()
 for b in all(bullets) do
   spr(b.sp,b.x,b.y)
 end
end

function draw_stars()
 for s in all(stars) do
   pset(s.x,s.y,s.c)
 end
end

function update_stars()
 for s in all(stars) do
   s.y+=s.z*warp_f/10
   if s.y>128 then
     s.y=0
     s.x=rnd(128)
   end
 end
end

function _init()
 player_xpos=64
 player_ypos=64
 init_stars()
 init_player()
 init_enemies()
end

function _update60()
 t=t+1
 if ( t > 1000) then t=0 end

 for b in all(bullets) do
   b.x+=b.dx
   b.y+=b.dy
   if b.x < 0 or b.x > 128 or
     b.y < 0 or b.y > 128 then
     del(bullets,b)
   end
 end

 if (btn(0) and player.x > 0) player.x -= 2
 if (btn(1) and player.x < 127) player.x += 2
 if (btn(2) and player.y > 0) player.y -= 2
 if (btn(3) and player.y < 127) player.y += 2
 if btnp(4) then fire() end

 update_stars()
 update_player()
 update_enemies()
end

function _draw()
 cls()
 fps()
 draw_health()
 draw_stars()
 draw_player()
 draw_bullets()
 draw_enemies()
end




__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
005dd500005dd500005dd500000000000b3333b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0455554004555540045555400000000000b33b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
04466440044664400446644000088000000bb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
07466470074664700746647000088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
07898970079898700700007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
57089075570980755700007500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
55008055550800555500005500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000