TGC Codebase Backup



Astervoid by GZMGames Admin

11th Feb 2005 18:16
Summary

difrent version of Astro-blast



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    
Rem Project: Astervoid
Rem Created: 2/08/05 7:13:12 PM

Rem ***** Main Source File *****
rem Written by: Jeremy Davis (C)COPYRIGHT GZM Games


cls
ink rgb(0,0,255),0
print "   Welcome to AsterVoid(C)"
ink rgb(255,255,255),0
print "Use up arrow to move forward"
print "press any key to continue"
PRINT "CONTROLS:"
PRINT "UP ARROW=MOVE FORWARD"
PRINT "LEFT AND RIGHT ARROWS=MOVE LEFT AND RIGHT"
PRINT "SPACEBAR=FIRE, IF HELD DOWN NOTHING WILL HAPPEN"
PRINT "S=SHIELDS, REMEBER TO TURN THEM OFF WHEN YOU DONT"
PRINT "NEED THEM THEY GO FAST"
PRINT "Z=BIGGER SHIELD 'ZAPPER'"
PRINT "ESC=EXITS GAME"
PRINT "PRESS ANY KEY TO CONTINUE"
pRINT "JOYSTICK COMPATIBLE"
wait key
cls

set cursor 200,200
print "Credits"
wait key
cls

set cursor 200,200
print "Programmer: Jeremy Davis"
wait key
cls

set cursor 200,200
print "Inspired by Astro-Blast"
wait key
cls

set cursor 200,200
print "Game created with DarkBASIC Pro(C)"
wait key
cls

set cursor 200,200
print "game testers:"
wait key
cls

set cursor 200,200
print "Tom Mcandrew"
set cursor 200,210
print "Jeremy Davis"
set cursor 200,220
print "Nancy davis"
wait key
cls

set cursor 200,200
print "Special thanks to:"
wait key
cls

set cursor 200,200
print "DarkBASICPro"
set cursor 200,210
print "Richard Sardini"
set cursor 200,220
print "Joseph Thomson"
wait key
cls



set cursor 200,200
print "It's the year 3010"
wait key
cls


set cursor 150,210
print "The world is being attacked by asteroids in a chain reaction"
wait key
cls

set cursor 200,200
print "the fate of the world lie in your hands"
wait key
cls

print "       inbox:"
print "            President"
set cursor 150,200
print "Hello, you have been assigned to fly out into"
print "space and destroy all remaining asteroids."
print "Failure is not an option in this situation."
print "If you succeed, you will be rewarded with "
print "$77,000,000."
print "If you fail, all humanity will be erased."
print "To accept this mission press any key ONCE, to decline it,"
print "press ESC button NOW"
wait key
cls

print "       inbox:new message"
print "                president"
set cursor 150,200
print "Thank you for accepting, now I have issued a crew to go with"
print "you on your journey, I have also upgraded your ship"
print "to shoot faster,move quicker and the sheilds are much more protectant"
print "I thank you again"
ink rgb (255,0,0),0
print "The fate of the world lie in your hands"
PRINT
PRINT "PRESS SPACE BAR TO START MISSION"
wait key
cls

waiting:
if joystick fire a()=1 then goto hitit
if inkey$()="" then goto waiting

hitit:
cls
set display mode 800,600,16

black=rgb(0,0,0):white=rgb(255,255,255):red=rgb(255,0,0):green=rgb(0,255,0):blue=rgb(0,0,255)

sync on

   rem make bitmap for particles
create bitmap 1,100,100
ink black,0:for x=0 to 100:line x,0,x,100:next x:ink red,0
for x=1 to 30:circle 50,50,x:next x:ink rgb(50,170,255),0
for x=1 to 10:circle 50,50,x:next x:blur bitmap 1,6:get image 100,0,0,100,100
delete bitmap 1
   rem make ship
make object cone 1,30:scale object 1,100,100,50:color object 1,white
xrotate object 1,90:fix object pivot 1
   rem make shields
make object sphere 2,90:color object 2,red:ghost object on 2
position object 2,-5000,-5000,-5000
autocam off
color backdrop black
   rem make simple radar screen
make camera 1
color backdrop 1,rgb(100,100,100)
set camera view 1,650,20,750,120

position camera 1,0,1200,0:point camera 1,0,0,0
set camera range 1,1,10000
set current camera 0
position camera 0,0,50,-100
point camera 0,0,0,0

hide mouse
ink white,0
   rem make exhaust
make particles 1,100,30,30:color particles 1,100,130,230

   rem make boarders
make object box 2000,100,4,100:color object 2000,blue:position object 2000,0,-100,0
set object collision off 2000:ghost object on 2000
for x=2001 to 2004:clone object x,2000:color object x,red:ghost object on x:next x
position object 2001,-1100,0,-1100:position object 2002,-1100,0,1100
position object 2003,1100,0,-1100:position object 2004,1100,0,1100
make object box 2005,2500,4,4:color object 2005,green:position object 2005,0,0,-1000
clone object 2006,2005:color object 2006,green:position object 2006,0,0,1000
make object box 2007,4,4,2500:color object 2007,green:position object 2007,-1000,0,0
clone object 2008,2007:color object 2008,green:position object 2008,1000,0,0
for x=2000 to 2008:set object collision off x:next x
   rem make alien
make object sphere 100,20:make mesh from object 100,100:delete object 100
make object sphere 10,40:scale object 10,100,140,30
add limb 10,1,100:color object 10,rgb(120,140,255):color limb 10,1,red
offset limb 10,1,0,0,-20
xrotate object 10,90:fix object pivot 10:position object 10,-3000,-3000,-3000
 rem set variables
yr#=270:dim bpdur(5):dim bltrng(5):dim expdur#(210):dim afdur(5)
newgame:
astrd=1000:score=0:thrust#=0:lev#=0:lev1=1:blts=1:frdelay=0
shields#=200:sh=-1:shexdur=0:ships=7:freq=800:freq1=600
alexdur=0:appear=0:shscale#=80:shsize=140:skipzap=0:restor=0
   rem position ship
position object 1,0,0,0
point object 10,object position x(1),0,object position z(1)

   rem main loop
do
   rem check for and move alien

if object position x(10)<-2000
   appear=rnd(2000)
   if appear=1000
      replacealien:
      num1=rnd(800)-400:num2=rnd(800)-400
      if num1>-200 and num1<200 or num2>-200 and num2<200 then goto replacealien
      position object 10,object position x(1)+num1,0,object position z(1)+num2
      if object position x(10)<-1000 or object position x(10)>1000 or object position z(10)<-1000 or object position z(10)>1000
         goto replacealien
      endif
      t1=object collision(10,0)
      if t1=1 then goto replacealien

   endif
endif
   rem move alien
if object position x(10)>-2000
   move object 10,.105+lev#
   position object 10,object position x(10),0,object position z(10)
   fire=rnd(freq1)
   if fire=freq1/2 and object in screen(10)=1
      pick5=0
      for x=70 to 72
         if pick5=1 then goto skipsquare
         if object exist(x)=0
            make object cube x,5:color object x,green:position object x,object position x(10),0,object position z(10)
            point object x,object position x(1),0,object position z(1):move object x,20
            afdur(x-69)=600:pick5=1
         endif
      skipsquare:
      next x
   endif
endif
   rem move alien bullets
for x=70 to 72
   if object exist(x)=1
      move object x,1
      dec afdur(x-69)
      if afdur(x-69)<0 then delete object x
      if object exist(x)=1
         t1=object collision(x,0)
         if t1>299 and t1<701 or t1=1
            delete object x:inc score,20
            if t1>299 and t1<400
               count=1
               for y=400 to 499
               if count>2+(lev1-2) then goto skipmake7
               if object exist(y)=0
                  make object sphere y,40:color object y,rgb(rnd(255),rnd(255),rnd(255))
                  position object y,object position x(t1),0,object position z(t1)
                  point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
                  inc count
               endif
               skipmake7:
               next y
            delete object t1
            endif

            if t1>399 and t1<500
               count=1
               for y=500 to 700
                  if count>4 then goto skipmake8
                  if object exist(y)=0
                     make object sphere y,25:color object y,rgb(rnd(255),rnd(255),rnd(255))
                     position object y,object position x(t1),0,object position z(t1)
                     point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
                     inc count
                  endif
                  skipmake8:
               next y
            delete object t1
            endif

            if t1>499
               if particles exist(t1)=0
                  make particles t1,100,80,30:position particles t1,object position x(t1),0,object position z(t1)
                  expdur#(t1-499)=5:color particles t1,rnd(255),rnd(255),rnd(255)
               endif
            delete object t1
            endif
            if t1=1
               hide object 1:if particles exist(2)=0 then make particles 2,100,30,50
               position particles 2,object position x(1),0,object position z(1)
               shexdur=5:shields#=100
               if sh=1 then sh=-1:position object 2,-5000,-5000,-5000:set object collision on 1
            endif
         endif
      endif
   endif
next x




   rem point alien at us
c=rnd(freq):if c=freq/2 then point object 10,object position x(1),0,object position z(1)
   rem bonuses
if score=500 then inc ships:inc score,100
if score=1000 then inc ships:inc score,200
if score=2000 then inc ships:inc score,500
if score=3000 then inc ships,5:inc score,1000

   rem end of game
if ships=0
   for x=2 to 1200:if particles exist(x)=1 then delete particles x
   next x
   sync off:backdrop off
   set cursor 200,200
   print "GAME OVER YOUR SCORE WAS-->";score
   redoinput:
   print "PLAY AGAIN? (Y/N)"
   wait key
   if inkey$()="n" then end
   if inkey$()="y"
      sync on:backdrop on:for x=300 to 700:if object exist(x)=1 then delete object x
      next x
      goto newgame
   endif
   print "Bad input, try again."
   goto redoinput
endif
   rem charge shields
if shields#<100 then shields#=shields#+.0125
if shlddelay>0 then dec shlddelay:goto skipshields
if shexdur>0 then goto skipshields
if inkey$()="s" or joystick fire b()=1
   sh=sh*-1:shlddelay=75
   if sh=1 then set object collision off 1:shscale#=80
   if sh=-1 then position object 2,-5000,-5000,-5000:set object collision on 1
endif
skipshields:
   rem move ship
move object 1,thrust#

if skipzap>0 then dec skipzap:goto skipzapper
if shexdur>0 then goto skipzapper
if joystick fire c()=1 or inkey$()="z"
   if shsize=140 and shields#>80
      shsize=600:skipzap=5000
      if sh=-1 then sh=1:restor=1
   endif
endif
skipzapper:

   rem show shields
if sh=1
   inc shscale#
   if shsize>140 then inc shscale#
   if shscale#>shsize
      shscale#=80:shsize=140
      if restor=1
         sh=-1:restor=0:position object 2,-5000,-5000,-5000:set object collision on 1
         scale object 2,shscale#,shscale#,shscale#
      endif
   endif
   if sh=1
      scale object 2,shscale#,shscale#,shscale#
      color object 2,rgb(rnd(255),rnd(255),rnd(255))
      position object 2,object position x(1),0,object position z(1)
      if shsize=140 then shields#=shields#-.1125
      if shields#<0 then sh=-1:position object 2,-5000,-5000,-5000:set object collision on 1
      if invul>5 then set object collision off 1
   endif
endif
   rem check object for boudaries
for x=300 to 700
   if object exist(x)=1
      if object position x(x)<-1010 or object position x(x)>1010 or object position z(x)<-1010 or object position z(x)>1010
         position object x,rnd(50)-25,0,rnd(50)-25
      endif
   endif
next x
   rem pause function
if inkey$()="p"
   sync off:backdrop off
   set cursor 400,200
   print "! ! GAME PAUSED ! !"
   wait key
   sync on:backdrop on
endif
   rem movement and thrust
if leftkey()=1 or joystick left()=1
   turn object left 1,.5
   yr#=yr#+.5:if yr#>360 then yr#=0
endif

if rightkey()=1 or joystick right()=1
   turn object right 1,.5
   yr#=yr#-.5:if yr#<0 then yr#=360
endif

   rem increase and show thrust
if upkey()=1 or joystick up()=1
   position particles 1,object position x(1)+cos(yr#)*20,0,object position z(1)+sin(yr#)*20
   rotate particles 1,object angle x(1),object angle y(1),object angle z(1)
   set particle life 1,20:set particle chaos 1,10:show particles 1
   inc thrust#,.0125
   if thrust#>.95 then thrust#=.95
endif

   rem hide thrust
if upkey()=0 and joystick up()=0
   hide particles 1
endif


   rem fire sequence
if frdelay>0 then dec frdelay:goto skipfire
if shexdur>0 then goto skipfire
if spacekey()=1 or joystick fire a()=1
   pick=0:frdelay=20
   for x=1 to 5
      if pick=1 then goto fired
      if object exist(50+x)=0
         make object sphere 50+x,5:color object 50+x,red:pick=1
         position object 50+x,object position x(1),0,object position z(1)
         set object to object orientation 50+x,1:move object 50+x,20
         bltrng(x)=250
      endif
      fired:
   next x
endif
skipfire:
   rem move bullets and check for hits
for x=1 to 90
   if object exist(50+x)=1
      move object 50+x,20
      dec bltrng(x)
      if bltrng(x)<0 then delete object 50+x
      if object exist(50+x)=1
         t1=object collision(50+x,0)
         if t1>299 and t1<701 or t1=10 or t1>69 and t1<73
            delete object 50+x:inc score,20
            if t1>299 and t1<400
               count=1
               for y=400 to 499
               if count>2+(lev1-2) then goto skipmake
               if object exist(y)=0
                  make object sphere y,40:color object y,rgb(rnd(255),rnd(255),rnd(255))
                  position object y,object position x(t1),0,object position z(t1)
                  point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
                  inc count
               endif
               skipmake:
               next y
            delete object t1
            endif

            if t1>399 and t1<500
               count=1
               for y=500 to 700
                  if count>4 then goto skipmake2
                  if object exist(y)=0
                     make object sphere y,25:color object y,rgb(rnd(255),rnd(255),rnd(255))
                     position object y,object position x(t1),0,object position z(t1)
                     point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
                     inc count
                  endif
                  skipmake2:
               next y
            delete object t1
            endif

            if t1>499
               if particles exist(t1)=0
                  make particles t1,100,80,30:position particles t1,object position x(t1),0,object position z(t1)
                  expdur#(t1-499)=5:color particles t1,rnd(255),rnd(255),rnd(255)
               endif
            delete object t1
            endif

            if t1=10
               if particles exist(10)=0
                  make particles 10,100,30,60:position particles 10,object position x(10),0,object position z(10)
                  position object 10,-3000,-3000,-3000:alexdur=5:score=score+40
               endif
            endif

            if t1>69 and t1<73
               make particles t1,100,80,30
               position particles t1,object position x(t1),0,object position z(t1)
               color particles t1,0,255,0:bpdur(t1-69)=5
            delete object t1
            endif
         endif
      endif
   endif
next x
   rem control asteroid explosions
for x=500 to 700
   if particles exist(x)=1
      inc expdur#(x-499),12:if expdur#(x-499)>500 then delete particles x
      if particles exist(x)=1
         set particle velocity x,expdur#(x-499)
         set particle emissions x,100-expdur#(x-499)
         set particle chaos x,expdur#(x-499)
      endif
   endif
next x
   rem check ship for hits
t1=object collision(1,0)
if t1>299 or t1>69 and t1<73 or t1=10
   if t1>299 and t1<400
      count=1
      for y=400 to 499
         if count>2+(lev1-2) then goto skipmake3
         if object exist(y)=0
            make object sphere y,40:color object y,rgb(rnd(255),rnd(255),rnd(255))
            position object y,object position x(t1),0,object position z(t1)
            point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
            inc count
         endif
         skipmake3:
      next y
   delete object t1
   endif

   if t1>399 and t1<500
      count=1
      for y=500 to 700
         if count>4 then goto skipmake4
         if object exist(y)=0
            make object sphere y,25:color object y,rgb(rnd(255),rnd(255),rnd(255))
            position object y,object position x(t1),0,object position z(t1)
            point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
            inc count
         endif
         skipmake4:
      next y
   delete object t1
   endif

   if t1>499
      if particles exist(t1)=0
         make particles t1,100,80,30:position particles t1,object position x(t1),0,object position z(t1)
         expdur#(t1-499)=5:color particles t1,rnd(255),rnd(255),rnd(255)
      endif
   delete object t1
   endif
   if t1=10
      if particles exist(10)=0
         make particles 10,100,30,60:position particles 10,object position x(10),0,object position z(10)
         position object 10,-3000,-3000,-3000:alexdur=5:score=score+40
      endif
   endif

   hide object 1:if particles exist(2)=0 then make particles 2,100,30,50
   position particles 2,object position x(1),0,object position z(1)
   shexdur=5:shields#=100
   if sh=1 then sh=-1:position object 2,-5000,-5000,-5000:set object collision on 1
endif

   rem ship invulnerability after being killed and restored
if invul>5
   dec invul
   color object 1,rgb(rnd(255),rnd(255),rnd(255))
   if invul=5
      set object collision on 1
      color object 1,white
      invul=10
   endif
endif
   rem ships explosion
if shexdur>0
   inc shexdur,5
   if shexdur>200
      delete particles 2
      shexdur=0:show object 1:ships=ships-1
      invul=1000:set object collision off 1
   endif
   if particles exist(2)=1
      set particle chaos 2,shexdur
      set particle emissions 2,shexdur
      set particle velocity 2,shexdur
   endif
endif
   rem alien ships explosion
if alexdur>0
   inc alexdur,8
   if alexdur>1545
      delete particles 10
      alexdur=0
   endif
   if particles exist(10)=1
      set particle chaos 10,alexdur
      set particle emissions 10,alexdur
      set particle velocity 10,alexdur
   endif
endif
   rem check shields
if sh=1
   t1=object collision(2,0)
   if t1>299 or t1=10 or t1>69 and t1<73
      if t1>299 and t1<400
         count=1
         for y=400 to 499
            if count>2+(lev1-2) then goto skipmake5
            if object exist(y)=0
               make object sphere y,40:color object y,rgb(rnd(255),rnd(255),rnd(255))
               position object y,object position x(t1),0,object position z(t1)
               point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
               inc count
            endif
            skipmake5:
         next y
      delete object t1
      endif

      if t1>399 and t1<500
         count=1
         for y=500 to 700
            if count>4 then goto skipmake6
            if object exist(y)=0
               make object sphere y,25:color object y,rgb(rnd(255),rnd(255),rnd(255))
               position object y,object position x(t1),0,object position z(t1)
               point object y,object position x(t1)+(rnd(50)-25),0,object position z(t1)+(rnd(50)-25):move object y,20
               inc count
            endif
            skipmake6:
         next y
      delete object t1
      endif

      if t1>499
         if particles exist(t1)=0
            make particles t1,100,80,30:position particles t1,object position x(t1),0,object position z(t1)
            expdur#(t1-499)=5:color particles t1,rnd(255),rnd(255),rnd(255)
         endif
      delete object t1
      endif

      if t1=10
         if particles exist(10)=0
            make particles 10,100,30,60:position particles 10,object position x(10),0,object position z(10)
            position object 10,-3000,-3000,-3000:alexdur=5:score=score+40
         endif
      endif

      if t1>69 and t1<73
         make particles t1,100,80,30
         position particles t1,object position x(t1),0,object position z(t1)
         color particles t1,0,255,0:bpdur(t1-69)=5
      delete object t1
      endif
   endif
endif
for x=70 to 72
   if particles exist(x)=1
      inc bpdur(x-69),6:if bpdur(x-69)>160 then delete particles x
      if particles exist(x)=1
         set particle velocity x,bpdur(x-69)
         set particle emissions x,100-bpdur(x-69)
         set particle chaos x,bpdur(x-69)
      endif
   endif
next x


   rem change thrust
if thrust#>0 then dec thrust#,.0025
if thrust#<0 then thrust#=0

   rem check ship boundaries and turn ship 180 degrees
if object position x(1)<-1000 or object position x(1)>1000 or object position z(1)<-1000 or object position z(1)>1000
   turn object right 1,180
   yr#=wrapvalue(yr#+180)

   if object position x(1)<-1005 or object position x(1)>1005 or object position z(1)<-1005 or object position z(1)>1005
      position object 1,0,0,0
   endif
endif

   rem move asteroids
for x=300 to 399
if object exist(x)=1
   move object x,.25+lev#
   if object position x(x)<-1000 or object position x(x)>1000 or object position z(x)<-1000 or object position z(x)>1000
      turn object right x,180+rnd(90)-45
   endif
endif
next x
   rem move asteroids
for x=400 to 499
if object exist(x)=1
   move object x,.5+lev#
   if object position x(x)<-1000 or object position x(x)>1000 or object position z(x)<-1000 or object position z(x)>1000
      turn object right x,180+rnd(90)-45
   endif
endif
next x
   rem move asteroids
for x=500 to 700
if object exist(x)=1
   move object x,.75+lev#
   if object position x(x)<-1000 or object position x(x)>1000 or object position z(x)<-1000 or object position z(x)>1000
      turn object right x,180+rnd(90)-45
   endif
endif
next x
   rem asteroids bounce off each other here
for x=300 to 700
if object exist(x)=1
   t1=object collision(x,0)
      if t1>300 and t1<600
         turn object right x,180+(rnd(90)-45):move object x,5
         turn object right t1,180+(rnd(90)-45):move object t1,5
      endif
endif
next x
   rem see if all asteroids have been destroyed
check=0
for x=300 to 700:if object exist(x)=1 then check=check+1
next x
if check=0
   for x=300 to 305+lev1
   make object sphere x,80:color object x,rgb(rnd(255),rnd(255),rnd(255))
   pickover:
   obx=rnd(2000)-1000:obz=rnd(2000)-1000
   if obx>-600 and obx<600 or obz>-600 and obz<600 then goto pickover
   position object x,obx,0,obz:point object x,(rnd(500)-250),0,(rnd(500)-250)
   next x
   pickover2:
   check=0
   for x=300 to 305+lev1
   t1=object collision(x,0)
   if t1>300 and t1<308+lev1
      inc check
      pickover3:
      obx=rnd(2000)-1000:obz=rnd(2000)-1000
      if obx>-600 and obx<600 or obz>-600 and obz<600 then goto pickover3
      position object x,obx,0,obz:point object x,(rnd(500)-250),0,(rnd(500)-250)
   endif
   next x
   if check>0 then goto pickover2
   lev1=lev1+1:lev#=lev#+.125:if lev1>10 then lev1=10
endif
   rem set cameras and print stats
position camera 1,object position x(1),1200,object position z(1)
point camera 1,object position x(1),0,object position z(1)
position camera object position x(1),0,object position z(1)
rotate camera object angle x(1),object angle y(1),object angle z(1)
position camera object position x(1),700,object position z(1)
point camera object position x(1),0,object position z(1)

set cursor 0,0
print "SCORE-->";score;:set cursor (screen width()/2)-75,0:Print "ASTRO-BLAST   - Written by Jeremy Davis (C)COPYRIGHT GZM Games"
print "SHIPS--->";ships
print "ASTERVOIDS LEFT-->";check
print "SHIELDS-->";int(shields#)
if skipzap=0
   set cursor 50,screen height()/2
   ink rgb(rnd(255),rnd(255),rnd(255)),0
   set cursor 50,(screen height()/2)+20
   if shields#<80
      set cursor 50,(screen height()/2)+40
      print "SHIELD ENERGY TO LOW-WAIT FOR REFUEL"
   endif
   ink white,0
endif

   rem refresh screen
sync
   rem goto main loop
loop