This is what i have so far.
Things seem to be working well apart from the enemy fire, but its late so ill try again tomorrow
Thanks
Destroyer
Things seem to be working well apart from the enemy fire, but its late so ill try again tomorrow
;***************** ;* F O D D A * ;***************** Graphics 800,600,16,2 Type player Field x#,y# Field ang#,speed# Field img Field hp End Type Type enemy Field enx#,eny# Field life Field img Field hp Field state Field m_time Field dir End Type Type bullet Field x#,y# Field ang#,speed# Field img Field life# Field ammo# Field make End Type Type grenade Field x#,y# Field ang#,speed# Field img Field life# Field ammo# End Type Type blood Field x#,y#,dx#,dy# ;location and speed Field timer Field size# Field r,g,b End Type Type shrap Field x#,y#,dx#,dy# ;location and speed Field timer Field size# Field r,g,b End Type Type particle Field x#,y#,dx#,dy#;location and speed Field size# Field r,g,b End Type Const Gunsize = 8 Global me.player = New player Global b.bullet = New bullet Global clickedx = MouseX() Global clickedy = MouseY() Global mover = 1 Global nme = 2 Global hp = 100 Global gammo=6 Global level=1 Global sndExplode=LoadSound("explode.wav") Global sndPistol=LoadSound("pistol.wav") ;player gfx---------- me\x=400 me\y=300 me\img=CreateImage(9,9) SetBuffer ImageBuffer(me\img) Color 100,255,100 Oval 0,0,8,8 MidHandle me\img ;-------------------- SeedRnd MilliSecs() create_enemies(nme) ;-------------------- HidePointer SetBuffer BackBuffer() ;**MAIN LOOP**-------------------------------------- While Not KeyDown(1) Cls Color 150,150,150 Oval MouseX(),MouseY(),4,4 ;mouse gfx DrawPlayer() DrawEnemy() UpdatePlayer() MoveBlood() Moveshrap() For pt.particle = Each particle pt\x = pt\x + pt\dx pt\y = pt\y + pt\dy pt\size = pt\size - .6 If pt\size=<0 Then Delete pt Next For pt.particle = Each particle Color pt\r,pt\g,pt\b Oval pt\x-pt\size/2,pt\y-pt\size/2,pt\size,pt\size Next Color 255,255,255;t Rect 0,0,800,40 Color 55,55,55;b Rect 1,1,800,40 Color 150,150,150;m Rect 1,1,799,39 ;On screen info Color 55,55,55 Text 5,5,"LMB = Move / RMB = Shoot / Spacebar = Grenade" Text 100,20,"G-Ammo "+gammo Text 190,20,"Level "+level Text 5,20,"Enemy = "+nme Flip Wend FreeImage me\img End ;-------------------------------------------------- ;Functions ;-------------------------------------------------- Function DrawPlayer() DrawImage me\img,me\x,me\y ;draw player End Function ;-------------------------------------------------- Function UpdatePlayer() If MouseHit(1) clickedx=MouseX() clickedy=MouseY() me\ang=ATan2(clickedx-me\x,clickedy-me\y) me\speed=2 EndIf If Sqr((me\x-clickedx)^2+(me\y-clickedy)^2)<3 me\speed=0 EndIf me\y=me\y+(Cos(me\ang)*me\speed) me\x=me\x+(Sin(me\ang)*me\speed) dX = MouseX() - me\x dY = MouseY() - me\y Gunang = ATan2(dY,dX) Gundx# = Cos(Gunang) Gundy# = Sin(Gunang) GunendX = me\x + gundx*Gunsize GunendY = me\y + gundy*Gunsize Color 100,255,100 Line(me\x,me\y,gunendx,gunendy) ;draw gun If MouseHit(2) b.bullet = New bullet ;Create bullet b\x = gunendx : b\y = gunendy b\ang= ATan2(MouseX()-b\x,MouseY()-b\y)+Rnd(-3,6) b\speed=4+me\speed b\life=60 b\make=0 PlaySound sndPistol End If For b.bullet = Each bullet movebullet(b) Next If MouseHit(3) Or KeyHit(57) And gammo > 0 g.grenade = First grenade If g = Null Then g.grenade = New grenade g\x = gunendx : g\y = gunendy g\ang= ATan2(MouseX()-g\x,MouseY()-g\y) g\speed=4+me\speed g\life=100 gammo=gammo-1 If gammo <= 0 gammo=0 End If EndIf End If For g.grenade = Each grenade movegrenade(g) Next End Function ;-------------------------------------------------- Function DrawEnemy() If nme <= 0 level=level+1 gammo=gammo+1 nme=level*2 If level >= 5 nme=level*3 End If create_enemies(nme) End If For en.enemy = Each enemy DrawImage en\img,en\enx,en\eny Select(en\state) Case 0 If en\m_time = 0 en\dir = Rand(4) en\m_time = Rand(300) End If If en\dir = Rand(4) And Sqr((en\enx-me\x)^2+(en\eny-me\y)^2)<50 en\state=2 End If Case 1 If en\enx > me\x Then en\dir=1 If en\enx < me\x Then en\dir=0 If en\eny > me\y Then en\dir=3 If en\eny < me\y Then en\dir=2 en\state=2 Case 2 dX = me\x - en\enx dY = me\y - en\eny Gunang = ATan2(dy,dx) Gundx# = Cos(Gunang) Gundy# = Sin(Gunang) GunendX = en\enx + gundx*Gunsize GunendY = en\eny + gundy*Gunsize Color 255,100,100 Line(en\enx,en\eny,gunendx,gunendy) If en\enx>me\x Then en\enx=en\enx-.8 If en\enx<me\x Then en\enx=en\enx+.8 If en\eny>me\y Then en\eny=en\eny-.8 If en\eny<me\y Then en\eny=en\eny+.8 b.bullet = First bullet If b = Null b.bullet = New bullet ;Create bullet b\x = gunendx : b\y = gunendy b\ang= ATan2(me\x-b\x,me\y-b\y)+Rnd(-3,6) b\speed=4 b\life=60 b\make=1 PlaySound sndPistol End If End Select Select (en\dir) Case 0 en\enx=en\enx+.5 Case 1 en\enx=en\enx-.5 Case 2 en\eny=en\eny+.5 Case 3 en\eny=en\eny-.5 Case 4 End Select en\m_time=en\m_time-1 If en\enx > 790 Then en\dir=1 If en\eny > 590 Then en\dir=3 If en\enx < 20 Then en\dir=0 If en\eny < 50 Then en\dir=2 If ImagesCollide (me\img, me\x, me\y,0, en\img, en\enx, en\eny,0) angle# = ATan2(me\y - en\eny,en\enx - me\x) en\enx = en\enx + (mover * (Cos (angle))) en\eny = en\eny + (mover * (Sin (angle))) End If Next End Function ;-------------------------------------------------- Function MoveBullet(b.bullet) b\y=b\y+(Cos(b\ang)*b\speed) b\x=b\x+(Sin(b\ang)*b\speed) Color 200,200,100 Rect b\x,b\y,2,2 ;Collision check If b<>Null For en.enemy=Each enemy If Sqr((b\x-en\enx)^2+(b\y-en\eny)^2)<8 And b\make=0 hp=hp-20 If hp < 0 nme = nme-1 : Delete en.enemy hp=100 End If b\life=-1 For i=1 To 10 bl.blood = New blood bl\x = b\x bl\y = b\y bl\dx = Rnd(-2,2):bl\dy=Rnd(-2,2) bl\size = Rand(1,2) Next End If Next End If b\life=b\life-1 If b\life<0 ;Then Delete b.bullet For i=1 To 10 pt.particle = New particle pt\x = b\x pt\y = b\y pt\dx = Rnd(-2,2):pt\dy=Rnd(-2,2) pt\size = Rand(2,4) col# = Rnd(48,128) pt\r = col: pt\g = col: pt\b = col If i>3 Then pt\r=255: pt\g=300-pt\size*40: pt\b=0 ;colour it red/yellow pt\dx=pt\dx/2 ;slow it down pt\dy=pt\dy/2 End If Next Delete b.bullet End If End Function ;-------------------------------------------------- Function Movegrenade(g.grenade) g\y=g\y+(Cos(g\ang)*g\speed) g\x=g\x+(Sin(g\ang)*g\speed) gw=4 gh=4 Color 100,100,100 Oval g\x,g\y,gw,gh,1 g\life=g\life-1 If g\life<70 g\speed=1 End If If g\life<50 g\speed=.5 End If If g\life<30 g\speed=0 Color Rnd(48,228),Rnd(48,228),0 Oval g\x,g\y,gw,gh,1 End If If g\life<1 PlaySound sndExplode For i=1 To 30 s.shrap = New shrap s\x = g\x s\y = g\y s\dx = Rnd(-4,4):s\dy=Rnd(-4,4) s\size = Rnd(2,4) col# = Rnd(48,128) s\r = col: s\g = col: s\b = col If i>5 Then s\r=255: s\g=300-s\size*40: s\b=0 s\dx=s\dx/2 s\dy=s\dy/2 End If Next Delete g.grenade End If End Function ;-------------------------------------------------- Function MoveBlood() For bl.blood = Each blood bl\x = bl\x + bl\dx bl\y = bl\y + bl\dy bl\timer=bl\timer+1 If bl\timer>15 Then Delete bl ;15 frames until destroy Next For bl.blood = Each blood Color 255,0,0 Oval bl\x-bl\size/2,bl\y-bl\size/2,bl\size,bl\size Next End Function ;-------------------------------------------------- Function Moveshrap() For s.shrap = Each shrap s\x = s\x + s\dx s\y = s\y + s\dy s\timer=s\timer+1 If s\timer>30 Then Delete s ;15 frames until destroy Next For s.shrap = Each shrap Color s\r,s\g,s\b Oval s\x-s\size/2,s\y-s\size/2,s\size,s\size Next ;Collision check For s.shrap = Each shrap For en.enemy=Each enemy If Sqr((s\x-en\enx)^2+(s\y-en\eny)^2)<8 en\hp=en\hp-50 If en\hp < 0 nme = nme-1 : Delete en.enemy hp=100 End If For i=1 To 2 bl.blood = New blood bl\x = s\x bl\y = s\y bl\dx = Rnd(-2,2):bl\dy=Rnd(-2,2) bl\size = 2 Next End If Next Next End Function ;-------------------------------------------------- Function create_enemies(nme) For i=1 To nme en.enemy=New enemy en\enx=Rand(0,800) en\eny=Rand(0,600) en\img=CreateImage(9,9) en\hp=100 SetBuffer ImageBuffer(en\img) Color 255,100,100 Oval 0,0,8,8 MidHandle en\img SetBuffer BackBuffer() Next End Function
Thanks
Destroyer