Sorry for taking a while to get back to you guys, had a test thrown at me that I had to study all weekend for.
Anyway, I managed to pull together a rough procedural generation routine for the aliens. It's not super great, but should provide waves of aliens that grow steadily harder (It looked like it would last about 250 waves before level 1 aliens were completely gone from the group, so it might need some tweeking)
randomize timer()
REM Max Columns and rows
Width=9
Height=5
Rem Set init value to Width*Height
Difficulty=45
REM For future tweaking of the difficulty of each alien
Dim ADiff#(3)
ADiff#(1)=1
ADiff#(2)=2
ADiff#(3)=3
REM Array that stores the values of each alien within the group
Dim AWave(width,height)
stx=10
sty=10
REM Establish the grid
For X=0 to Width
LINE stx+(x*50),sty,stx+(x*50),sty+250
NEXT X
FOR Y=0 to height
Line stx,sty+(y*50),stx+450,sty+(y*50)
next y
Get image 1,0,0,640,480
sync on : sync rate 0
REM Set all the aliens to 1 to start
For X=1 to Width
For Y=0 to Height
AWave(X,Y)=1
NEXT Y
NEXT X
REM THe total number of aliens on screen at once
Atot=Width*Height
DO
paste image 1,0,0
REM Equations used: Atot=x+y+z, Difficulty=X+2Y+3Z, Y=3Z/2
X#=Atot-(((5*Difficulty)-(5*Atot))/8.0)
Y#=((3*Difficulty)-(3*Atot))/8.0
Z#=(Difficulty-Atot)/4.0
REM Outputs
TEXT 500,0,"X="+str$(X#)
TEXT 500,20,"Y="+str$(Y#)
TEXT 500,40,"Z="+str$(Z#)
Text 500,60,"Difficulty="+str$(difficulty)
REM Positioning variables
Xpos=25
Ypos=25
REM Display each alien's value
For TileX=1 to width
For TileY=0 to Height-1
if awave(tileX,tileY)=2 then ink rgb(255,0,0),0
if awave(tileX,tileY)=3 then ink rgb(0,255,0),0
Text Xpos+(TileX-1)*50,YPos+(TileY)*50,str$(Awave(TileX,TileY))
ink rgb(255,255,255),0
NEXT TileY
NEXT TileX
If SpaceKey()=1
repeat
sync
until spacekey()=0
inc Difficulty
dec oldX
gosub gen_Group
Endif
sync
cls
LOOP
gen_group:
REM Reset the Group to 1's
For X=1 to Width
For Y=0 to Height
AWave(X,Y)=1
NEXT Y
NEXT X
REM Reset the counter
placecount=0
REM Place approx the number of lvl 2 aliens on the grid
While PlaceCount<int(Y#)
inc placecount
Awave(rnd(Width),rnd(height-1))=2
ENDWHILE
REM place approx the number of lvl 3 aliens on the grid
placecount=0
While PlaceCount<int(Z#)
inc placecount
Awave(rnd(Width),rnd(height-1))=3
ENDWHILE
RETURN
Great Quote:
"Time...LINE??? Time isn't made out of lines...it is made out of circles. That is why clocks are round!" -Caboose