SpaceImpact

On your display
A tiny self-playing retro space shooter for your AWTRIX display. (Resource Hungry)
- Works with
- AWTRIX NG
- Topic
- Gaming
- Includes
- Script
Choose your display in the next step.
Flow description
A lightweight Space Impact inspired animation for AWTRIX-NG. (Inspired by Nokia 3310)
Watch the spaceship automatically track enemies, fire lasers and trigger small pixel explosions.
The animation is resourcehungry, maybe not every device will it run.
No configuration or additional icons required — just install and run.
DBsWQrBt2YlT.ax
# @name Space Impact
# @desc Tiny self-playing retro shooter animation
# @version 0.4
# @author mckdoubleu
class SpaceImpact
var w
var h
var py
var ex
var ey
var bullet
var by
var boom
var boomx
var boomy
var frame
var wait
var wave
var last
def init()
self.w=width()
self.h=height()
self.py=self.h/2
self.ex=self.w-2
self.ey=2
self.bullet=-1
self.by=0
self.boom=0
self.boomx=0
self.boomy=0
self.frame=0
self.wait=0
self.wave=0
self.last=now_ms()
end
def spawn()
self.wave+=1
self.ex=self.w-2
self.ey=1+((self.wave*3)%(self.h-2))
end
def update()
var t=now_ms()
if t-self.last<90
return
end
self.last=t
self.frame+=1
if self.boom>0
self.boom-=1
end
if self.bullet>=0
self.bullet+=2
if self.bullet>=self.w
self.bullet=-1
end
end
if self.ex>=0
if self.frame%2==0
self.ex-=1
end
if self.frame%2==0
if self.ey<self.py && self.py>1
self.py-=1
elif self.ey>self.py && self.py<self.h-2
self.py+=1
end
end
if self.bullet<0 && self.frame%5==0
self.bullet=7
self.by=self.py
end
if self.bullet>=self.ex-1 && self.bullet<=self.ex+1
if self.by==self.ey
self.bullet=-1
self.boom=3
self.boomx=self.ex
self.boomy=self.ey
self.ex=-1
self.wait=5
end
end
if self.ex<1
self.ex=-1
self.wait=5
end
else
if self.wait>0
self.wait-=1
else
self.spawn()
end
end
end
def draw_stars()
var shift=self.frame%self.w
for i : 0 .. 7
var x=(i*5+self.w-shift)%self.w
var y=(i*3+1)%self.h
var c=0x26364D
if i%3==0
c=0xA8CFFF
end
pixel(x,y,c)
end
end
def draw_enemy()
if self.ex<1
return
end
var x=self.ex
var y=self.ey
pixel(x,y,0xFF416C)
if x>0
pixel(x-1,y,0xB51F43)
end
if x+1<self.w
pixel(x+1,y,0xFF416C)
end
pixel(x,y-1,0xFF94AA)
pixel(x,y+1,0xFF94AA)
end
def draw_ship()
var y=self.py
pixel(2,y,0x44DFFF)
pixel(3,y,0x44DFFF)
pixel(4,y,0x44DFFF)
pixel(5,y,0xC8FAFF)
pixel(3,y-1,0x44DFFF)
pixel(3,y+1,0x44DFFF)
if self.frame%2==0
pixel(1,y,0xFFB12B)
else
pixel(1,y,0xFF5722)
end
end
def draw_bullet()
if self.bullet>=0 && self.bullet<self.w
pixel(self.bullet,self.by,0xFFF36B)
if self.bullet>0
pixel(self.bullet-1,self.by,0xFF9F2F)
end
end
end
def draw_boom()
if self.boom<=0
return
end
var x=self.boomx
var y=self.boomy
pixel(x,y,0xFFFFFF)
if x>0
pixel(x-1,y,0xFFD23F)
end
if x+1<self.w
pixel(x+1,y,0xFFD23F)
end
if y>0
pixel(x,y-1,0xFF6A20)
end
if y+1<self.h
pixel(x,y+1,0xFF6A20)
end
end
def draw()
self.update()
clear(0)
self.draw_stars()
self.draw_enemy()
self.draw_bullet()
self.draw_boom()
self.draw_ship()
end
def duration()
return 30000
end
end
return SpaceImpact()
Discussion 0
Ask a question, suggest a change or share how you use it.
No comments yet. Start the conversation.
More flows for AWTRIX NG Scripts or Gaming
Something wrong with this flow? Report it.
Have an idea?
Sign in to ask questions and join the conversation.