summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GFX/flame.pngbin172 -> 192 bytes
-rw-r--r--GFX/sprites.bmsbin2911 -> 4231 bytes
-rw-r--r--GFX/star.pngbin0 -> 158 bytes
-rw-r--r--gametypes.bmx109
-rw-r--r--global.bmx38
-rw-r--r--missile_lock.bmx48
-rw-r--r--particle.bmx10
7 files changed, 146 insertions, 59 deletions
diff --git a/GFX/flame.png b/GFX/flame.png
index 1e5a662..5c0a425 100644
--- a/GFX/flame.png
+++ b/GFX/flame.png
Binary files differ
diff --git a/GFX/sprites.bms b/GFX/sprites.bms
index a16c28f..3673e52 100644
--- a/GFX/sprites.bms
+++ b/GFX/sprites.bms
Binary files differ
diff --git a/GFX/star.png b/GFX/star.png
new file mode 100644
index 0000000..4e3ee77
--- /dev/null
+++ b/GFX/star.png
Binary files differ
diff --git a/gametypes.bmx b/gametypes.bmx
index afd9997..4b0875a 100644
--- a/gametypes.bmx
+++ b/gametypes.bmx
@@ -21,6 +21,7 @@
' $Id$
'
Strict
+Import noddybox.algorithm
Import "global.bmx"
Type GameState
@@ -28,30 +29,48 @@ Type GameState
Global x:Double=0
Global y:Double=0
Global ang:Int=0
- Global shields:Int=0
+ Global lives:Int=0
Function Reset()
score=0
- x=0
- y=0
+ x=400
+ y=300
ang=0
- shields=3
+ lives=3
+ End Function
+
+ Function Control()
+ If KeyDown(GameConfig.kleft)
+ ang:-2
+ If ang<0 Then ang:+360
+ End If
+ If KeyDown(GameConfig.kright)
+ ang=(ang+2) Mod 360
+ End If
+ End Function
+
+ Function Move()
+ x=(x+Lookup.si[ang]*2) Mod 800
+ y=(y-Lookup.co[ang]*2) Mod 600
+ If x<0 Then x:+800
+ If y<0 Then y:+600
+ Trail.Add()
End Function
Function Display()
- Local s:String="SHIELDS "
+ Local s:String="LIVES "
- For Local f:Int=1 To shields
+ For Local f:Int=1 To lives
s:+"~~"
Next
- GFX.font.Draw("SCORE",-400,-300)
- GFX.font.Draw(Number.Format(score),-400,-284,255,255,0)
+ GFX.font.Draw("SCORE",0,-0)
+ GFX.font.Draw(Number.Format(score),0,16,255,255,0)
- GFX.font.Draw(s,-80,-300)
+ GFX.font.Centre(s,0)
- GFX.font.DrawRight("HISCORE",399,-300)
- GFX.font.DrawRight(Number.Format(GameConfig.hiscore),399,-284,255,255,0)
+ GFX.font.DrawRight("HISCORE",799,0)
+ GFX.font.DrawRight(Number.Format(GameConfig.hiscore),799,16,255,255,0)
End Function
End Type
@@ -64,8 +83,8 @@ Type BackdropStar
Field b:Int
Method New()
- x=Rand(-400,400)
- y=Rand(-400,400)
+ x=Rand(0,800)
+ y=Rand(0,600)
r=Rand(128,255)
g=Rand(128,255)
b=Rand(128,255)
@@ -83,4 +102,68 @@ Type Backdrop
s[f]=New BackdropStar
Next
End Function
+
+ Function Draw()
+ For Local f:Int=0 To 399
+ SetColor(s[f].r,s[f].g,s[f].b)
+ DrawImage(GFX.star,s[f].x,s[f].y)
+ Next
+ End Function
+End Type
+
+Type TrailPart
+ Field x:Double
+ Field y:Double
+ Field ang:Double
+ Field al:Double
+ Field sc:Double
+
+ Method New()
+ x=GameState.x
+ y=GameState.y
+ ang=GameState.ang
+ al=1
+ sc=1
+ End Method
+End Type
+
+Type Trail
+ Global plist:TList
+
+ Function Init()
+ plist=CreateList()
+ End Function
+
+ Function Clear()
+ plist.Clear()
+ End Function
+
+ Function Add()
+ plist.AddLast(New TrailPart)
+ End Function
+
+ Function Draw()
+ SetColor(255,255,255)
+ Local l:TEasyLink=TEasyLink.Create(plist)
+
+ While l.Value()
+ Local t:TrailPart=TrailPart(l.Value())
+
+ If t.al>0.1
+ SetRotation(t.ang)
+ SetScale(t.sc,t.sc)
+ SetAlpha(t.al)
+ DrawImage(GFX.flame,t.x,t.y)
+ t.al:-0.05
+ 't.sc:+0.1
+ l.MoveNext()
+ Else
+ l.Remove()
+ EndIf
+ Wend
+
+ SetRotation(0)
+ SetAlpha(1)
+ SetScale(1,1)
+ End Function
End Type
diff --git a/global.bmx b/global.bmx
index f2c92c0..1d078fa 100644
--- a/global.bmx
+++ b/global.bmx
@@ -36,6 +36,7 @@ Incbin "GFX/ship.png"
Incbin "GFX/missile.png"
Incbin "GFX/exhaust.png"
Incbin "GFX/flame.png"
+Incbin "GFX/star.png"
Const HERTZ:Int=70
@@ -44,12 +45,12 @@ Type Lookup
Global co:Double[]
Function Init()
- si=New Double[3600]
- co=New Double[3600]
+ si=New Double[360]
+ co=New Double[360]
- For Local a:Double=0 To 3599
- si[a]=Sin(a/10.0)
- co[a]=Cos(a/10.0)
+ For Local a:Double=0 To 359
+ si[a]=Sin(a)
+ co[a]=Cos(a)
Next
End Function
End Type
@@ -64,6 +65,7 @@ Type GFX
Global missile:TImage
Global exhaust:TImage
Global flame:TImage
+ Global star:TImage
Function SafeLoadImage:TImage(p:String, mode:Int)
Local i:TImage=LoadImage(p,mode)
@@ -84,15 +86,18 @@ Type GFX
title=SafeLoadImage("incbin::GFX/title.png",0)
- ship=SafeLoadImage("incbin::GFX/ship.png",0)
- flame=SafeLoadImage("incbin::GFX/flame.png",0)
+ ship=SafeLoadImage("incbin::GFX/ship.png",FILTEREDIMAGE)
+ flame=SafeLoadImage("incbin::GFX/flame.png",FILTEREDIMAGE)
MidHandleImage(ship)
MidHandleImage(flame)
- missile=SafeLoadImage("incbin::GFX/missile.png",0)
+ missile=SafeLoadImage("incbin::GFX/missile.png",FILTEREDIMAGE)
exhaust=SafeLoadImage("incbin::GFX/exhaust.png",FILTEREDIMAGE)
SetImageHandle(missile,3,7)
SetImageHandle(exhaust,3,3)
+
+ star=SafeLoadImage("incbin::GFX/star.png",0)
+ SetImageHandle(star,1,1)
End Function
End Type
@@ -184,21 +189,24 @@ Type Scroller
Function Init()
msg=" "
- msg=" "
- msg:+"TAKE THE LAST REMAINING STAR-FIGHTER AND USE SKILL AND JUDGEMENT TO AVOID THE DEADLY MISSILES THE EVIL ALIENS ARE FIRING AT YOU WHILE "
- msg:+"DESTROYING THEIR ADVANCING FLEET... "
- msg:+"SHOW HEART YOUNG PILOT, THE EARTH IS DEPENDING UPON YOU!"
+ msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER OX-9 YOU ARE AMBUSHED IN THE ASTEROID FIELD... "
+ msg:+"THE EVIL EMPIRE CANNOT BE ALLOWED TO DESTROY THE PROTOTYPE SO YOU MUST PILOT THE WEAPONLESS OX-9 "
+ msg:+"AVOIDING THE DEADLY MISSILES UNTIL HELP ARRIVES... "
+ msg:+"SHOW HEART YOUNG PILOT, STAR-FLEET IS DEPENDING UPON YOU!"
+ 'msg:+"TAKE THE LAST REMAINING STAR-FIGHTER AND USE SKILL AND JUDGEMENT TO AVOID THE DEADLY MISSILES THE EVIL ALIENS ARE FIRING AT YOU WHILE "
+ 'msg:+"DESTROYING THEIR ADVANCING FLEET... "
+ 'msg:+"SHOW HEART YOUNG PILOT, THE EARTH IS DEPENDING UPON YOU!"
- msgx=-400
+ msgx=0
msgp=0
- msgy=560-300
+ msgy=560
End Function
Function Draw()
GFX.font.Draw(msg[..70],msgx,msgy)
msgx:-2
- If msgx<-(GFX.font.TextWidth(msg[0..1])+400)
+ If msgx<-GFX.font.TextWidth(msg[0..1])
msgx:+GFX.font.TextWidth(msg[0..1])
msg=msg[1..]+msg[0..1]
EndIf
diff --git a/missile_lock.bmx b/missile_lock.bmx
index 21ba804..f4a4652 100644
--- a/missile_lock.bmx
+++ b/missile_lock.bmx
@@ -52,7 +52,6 @@ EndIf
?
Graphics 800,600,32,HERTZ
-SetOrigin(400,300)
HideMouse
SetBlend(ALPHABLEND)
@@ -69,8 +68,8 @@ Lookup.Init()
GameConfig.Load()
Scroller.Init()
Particles.Init()
-
-GameState.Reset()
+Backdrop.Init()
+Trail.Init()
Global quit:Int=False
@@ -84,10 +83,23 @@ Menu()
While Not quit
GameState.Reset()
- TFadeScreen.DoFadeOut()
+ While Not KeyHit(KEY_ESCAPE)
+ Cls
+ Backdrop.Draw()
+ Particles.Draw()
+ Trail.Draw()
+ GameState.Display()
+ GameState.Control()
+ GameState.Move()
+ SetRotation(GameState.ang)
+ DrawImage(GFX.ship,GameState.x,GameState.y)
+ SetRotation(0)
+ Flip(1)
+ Wend
GameConfig.Save()
- 'last_score=game.score
+
+ TFadeScreen.DoFadeOut()
Menu()
Wend
@@ -121,28 +133,26 @@ Function Menu()
Local defkey:Int=0
Particles.Clear()
+ GameState.Reset()
While Not done
Cls
If Rand(100)>30
- Particles.AddScaledImage(GFX.exhaust,Rand(-400,400),Rand(-400,400),0.3)
+ Particles.AddScaledImage(GFX.exhaust,Rand(0,800),Rand(0,600),0.3)
End If
- GameState.ang=(GameState.ang+2) Mod 3600
-
- SetOrigin(400,300)
+ Backdrop.Draw()
Particles.Draw()
GameState.Display()
Scroller.Draw()
- SetOrigin(0,0)
SetColor(255,255,255)
DrawImage(GFX.title,0,0)
If defkey>0
- If defkey=5
+ If defkey=4
GFX.font.Centre("PRESS A KEY TO GO BACK TO THE MENU",380)
Else
GFX.font.Centre("DEFINE KEYS",350)
@@ -152,16 +162,13 @@ Function Menu()
Local c1:Int=128+128*(defkey=1)
Local c2:Int=128+128*(defkey=2)
Local c3:Int=128+128*(defkey=3)
- Local c4:Int=128+128*(defkey=4)
GFX.font.Draw("LEFT",250,200,c1,c1,c1)
GFX.font.Draw("RIGHT",250,220,c2,c2,c2)
- GFX.font.Draw("FIRE",250,240,c3,c3,c3)
- GFX.font.Draw("PAUSE",250,260,c4,c4,c4)
+ GFX.font.Draw("PAUSE",250,240,c3,c3,c3)
GFX.font.Draw(KeySym(GameConfig.kleft),500,200,c1,c1,0)
GFX.font.Draw(KeySym(GameConfig.kright),500,220,c2,c2,0)
- GFX.font.Draw(KeySym(GameConfig.kfire),500,240,c3,c3,0)
- GFX.font.Draw(KeySym(GameConfig.kpause),500,260,c4,c4,0)
+ GFX.font.Draw(KeySym(GameConfig.kpause),500,240,c3,c3,0)
Local k:Int=-1
@@ -183,14 +190,12 @@ Function Menu()
Case 2
GameConfig.kright=k
Case 3
- GameConfig.kfire=k
- Case 4
GameConfig.kpause=k
End Select
defkey:+1
- If defkey=6
+ If defkey=5
GameConfig.Save()
defkey=0
FlushKeys()
@@ -213,7 +218,7 @@ Function Menu()
GFX.font.Centre("COPYRIGHT (C) NODDYBOX 2006",200)
- GFX.font.Centre("PRESS FIRE TO PLAY",300)
+ GFX.font.Centre("PRESS SPACE TO PLAY",300)
GFX.font.Centre("PRESS R TO REDEFINE KEYS",380)
GFX.font.Centre("PRESS ESCAPE TO QUIT",400)
@@ -227,12 +232,11 @@ Function Menu()
EndIf
EndIf
- Flip
+ Flip(1)
Wend
Particles.Clear()
TFadeScreen.DoFadeOut()
- SetOrigin(400,300)
End Function
diff --git a/particle.bmx b/particle.bmx
index 79c7f8c..4098598 100644
--- a/particle.bmx
+++ b/particle.bmx
@@ -68,12 +68,9 @@ Type TParticle
End Function
Method Update:Int()
- Local p:TAlgoPointD=DoRotateD(x,y,3599-GameState.ang)
- p.x:-GameState.x
- p.y:+GameState.y
SetAlpha(a)
SetScale(s,s)
- DrawImage(i,p.x,p.y)
+ DrawImage(i,x,y)
x:+dx
y:+dy
life:-1
@@ -107,10 +104,6 @@ Type Particles
End Function
Function Draw()
- Local r:Double=GetRotation()
-
- SetRotation(-GameState.ang/10.0)
-
SetColor(255,255,255)
Local l:TEasyLink=TEasyLink.Create(plist)
@@ -125,6 +118,5 @@ Type Particles
Wend
SetAlpha(1)
SetScale(1,1)
- SetRotation(r)
End Function
End Type