-- The Poke commands generate the music, poke4 creates the first two notes
-- the first poke2 creates the third note (when you miss)
-- the last poke2 sets the speed of the notes (16)
poke4(0x3200,0x5ba4.380c)
poke2(0x3204,0x6911)
poke2(0x3240,0x1001)
c=0 -- combo count.
h=0 -- high score.
t={} -- notes in play.
m={} -- flags if you hit a button and missed a note (for both bars).
o=0p=0 -- delay between note generation, so 40 of them don't stack on top of each other.
_set_fps(60) -- set fps to 60, so the scrolling doesn't look awful
::e:: -- normally, gotos are ugly, but for code golf, they're a necessary evil.
-- clear screen and render the bars. A rectangle generates both lines.
cls()
rect(-1,56,128,72)
circ(15,56,4)
circ(15,72,4)
-- reset and tick down parameters for next frame.
p-=1o-=1m[4]=1m[5]=1
-- generate a note randomly, if it's created, add delay until next note (p and o).
if(rnd(25)<1 and o<0)add(t,{x=127,y=53,b=4})o=12
if(rnd(25)<1 and p<0)add(t,{x=127,y=69,b=5})p=12
-- loop over each note, see if it was correctly played, missed, etc...
for i in all(t)do
i.x-=1 -- come on down, you're the next contestant!
?"♪",i.x,i.y,12 -- draw the note
-- if note was played inside the circle, play the sound,
-- remove it from play, and signify the player didn't miss,.
if(btnp(i.b)and i.x>=8 and i.x<=20)sfx(0,0,i.b-4,1)del(t,i)c+=1m[i.b]=0
-- if the player missed. remove their combo, play the missed note sound.
if(btnp(i.b)and m[i.b]>0)sfx(0,0,2,1)c=0
-- if the note left the screen, remove it from memory.
if(i.x<0)del(t,i)c=0
end
-- if the current combo is higher then the old one, add it to the high score.
if(c>h)h=c
-- print hud
?"combo: "..c,5,5,6
?"high: "..h,90,5
-- render the crowd, have them dance to the left and right depending on the note hit.
for i=0,4 do
?"웃웃웃웃웃웃",40+m[4]-m[5],100+i*6
end
-- draw to the screen, loop back to the beginning.
flip()goto e