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
;*****************
;* 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