So the main game loop, moving the base, adding stars, and checking for fire, runs at an okay speed. I wouldn't want to change that, or the game would be too slow to be "playable". You're able to move left and right and stars keep dropping.
The shooting itself was fast enough to remove a column of stars and continue as if everything is still running. Adding score and sound wouldn't be impossible here. I was then thinking about having the stars disappear, doing some stuff, but not too much, and then get back into the action. This is what I have done now. And the laser now only hits below the stars - actually not much of an effect, but it works.
I'm not sure where it's going to go now. I thought about having something in the sky, above the stars, and if you hit it, you're being punished somehow. Don't know if that would work. I guess the "action" is almost there, to make that kind of mistake, and if you're not fast enough, the stars will descend on you. Plenty of room for an end of game/level effect.
100 CALL CLEAR::CALL SCREEN(2)::FOR X=1 TO 9::READ Y::CALL COLOR(X,Y,1)::NEXT X
102 DATA 4,6,12,12,12,12,12,9,14
105 CALL CHAR(39,"1038387C38FE7CFE1038FE7C386C44")::CALL CHAR(95,"081020100804081000FF")
107 CALL HCHAR(22,1,96,32)::DISPLAY AT(23,1):"SHOTS 0";::DISPLAY AT(24,1):"STARS 0";
110 DIM ST(31)::PL=15::CALL HCHAR(21,PL+1,39)
120 CALL JOYST(1,X,Y)::IF X THEN CALL HCHAR(21,PL+1,32)::PL=(PL+SGN(X))AND 31::CALL HCHAR(21,PL+1,39)
125 IF Y AND NOT X THEN CALL VCHAR(3+ST(PL),PL+1,95,18-ST(PL))::CALL COLOR(2,1,1)::GOTO 900
130 X=(RND*1000)AND 31::ST(X)=ST(X)+1::CALL HCHAR(ST(X)+2,X+1,40)::IF ST(X)<10 THEN 120
900 SH=SH+1::SS=SS++ST(PL)::ST(PL)=0::CALL VCHAR(3,PL+1,32,18)::CALL COLOR(2,6,1)
910 DISPLAY AT(23,6):SH; ::DISPLAY AT(24,6):SS; ::GOTO 130