diff options
-rw-r--r-- | GFX/fireball.png | bin | 0 -> 272 bytes | |||
-rw-r--r-- | GFX/sprites.bms | bin | 3187 -> 4235 bytes | |||
-rw-r--r-- | gametypes.bmx | 33 | ||||
-rw-r--r-- | global.bmx | 73 | ||||
-rw-r--r-- | missile_lock.bmx | 38 | ||||
-rw-r--r-- | particle.bmx | 2 |
6 files changed, 125 insertions, 21 deletions
diff --git a/GFX/fireball.png b/GFX/fireball.png Binary files differnew file mode 100644 index 0000000..850fa15 --- /dev/null +++ b/GFX/fireball.png diff --git a/GFX/sprites.bms b/GFX/sprites.bms Binary files differindex 8e5ba6f..b4ce2c9 100644 --- a/GFX/sprites.bms +++ b/GFX/sprites.bms diff --git a/gametypes.bmx b/gametypes.bmx index caf9a24..f5d3bf9 100644 --- a/gametypes.bmx +++ b/gametypes.bmx @@ -33,7 +33,7 @@ Const SHIP_MIN_SPEED:Double=1 Const MIN_TURN:Double=1 Const MAX_TURN:Double=5.0 Const MIN_SPEED:Double=1 -Const MAX_SPEED:Double=1.99 +Const MAX_SPEED:Double=2.2 Type GameState Global score:Int=0 @@ -49,6 +49,7 @@ Type GameState Global shield:Int=5*HERTZ Global game_over:Int=False Global hit:Int=False + Global pause:Int=False Function Reset() score=0 @@ -60,6 +61,7 @@ Type GameState SetLevel(1) ShieldShip() game_over=False + pause=False End Function Function ShieldShip() @@ -107,7 +109,8 @@ Type GameState speed=Max(SHIP_MIN_SPEED,speed-SHIP_SPEED/2) End If - If KeyDown(GameConfig.kpause) + If KeyHit(GameConfig.kpause) + pause=True End If If KeyHit(KEY_ESCAPE) @@ -247,34 +250,44 @@ Type Missile Field onscreen:Int Field turn:Double Field speed:Double + Field accurate:Int Method New() Select Rand(1,4) Case 1 - x=Rand(0,800) + x=Rand(20,780) y=Rand(-100,0) ang=180 Case 2 - x=Rand(0,800) + x=Rand(20,780) y=Rand(600,700) ang=0 Case 3 - y=Rand(0,600) + y=Rand(20,580) x=Rand(-100,0) ang=90 Case 4 - y=Rand(0,600) + y=Rand(20,580) x=Rand(800,900) ang=270 End Select speed=Rnd(Max(MIN_SPEED,GameState.missile_speed-0.1),GameState.missile_speed) turn=Rnd(Max(MIN_TURN,GameState.missile_turn-0.1),GameState.missile_turn) onscreen=False + If Rand(100)>50 + accurate=True + EndIf End Method - Method Update() + Method Update(tx:Double,ty:Double) If onscreen - Local a:Double=ATan2(GameState.x-x,y-GameState.y) + Local a:Double + + If accurate + a=ATan2(tx-x,y-ty) + Else + a=ATan2(GameState.x-x,y-GameState.y) + EndIf If a<0 Then a:+360 @@ -348,8 +361,10 @@ Type MissileSet SetColor(255,255,255) + Local x:Double=(GameState.x+Sin(GameState.ang)*GameState.speed) Mod 800 + Local y:Double=(GameState.y-Cos(GameState.ang)*GameState.speed) Mod 600 For Local m:Missile=EachIn plist - m.Update() + m.Update(x,y) Next SetRotation(0) @@ -38,6 +38,7 @@ Incbin "GFX/exhaust.png" Incbin "GFX/flame.png" Incbin "GFX/star.png" Incbin "GFX/asteroid.png" +Incbin "GFX/fireball.png" Const HERTZ:Int=70 @@ -56,7 +57,7 @@ Type GFX Global flame:TImage Global star:TImage Global asteroid:TImage - Global explosion:TImage + Global fireball:TImage Function SafeLoadImage:TImage(p:String, mode:Int) Local i:TImage=LoadImage(p,mode) @@ -92,6 +93,9 @@ Type GFX asteroid=SafeLoadImage("incbin::GFX/asteroid.png",FILTEREDIMAGE) MidHandleImage(asteroid) + + fireball=SafeLoadImage("incbin::GFX/fireball.png",FILTEREDIMAGE) + SetImageHandle(fireball,7,7) End Function End Type @@ -181,12 +185,20 @@ Type Scroller Global msgx:Int Function Init() + Rem msg=" " - msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER XY-9 YOU ARE AMBUSHED IN THE ASTEROID FIELD OUTSIDE OF MARS... " + msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER OGL-X YOU ARE AMBUSHED IN THE ASTEROID FIELD OUTSIDE OF MARS... " msg:+"THE EVIL EMPIRE CANNOT BE ALLOWED TO DESTROY THE PROTOTYPE SO YOU MUST PILOT THE WEAPONLESS CRAFT, " msg:+"AVOIDING THE DEADLY MISSILES UNTIL HELP ARRIVES... " msg:+"SHOW HEART YOUNG PILOT, STAR-FLEET IS DEPENDING UPON YOU!" - + EndRem + + msg=" " + msg:+"IT IS A TIME OF WAR. IN A LAST DITCH ATTEMPT TO WIN A LOSING WAR THAT HAS RAGED THROUGH THE GALAXY AGAINST THE EVIL EMPIRE " + msg:+"A NEW SHIP, THE DX-9, HAS BEEN DEVELOPED. ON A ROUTINE TEST FLIGHT THE SHIP HAS BEEN AMBUSHED IN AN ASTEROID FIELD. " + msg:+"WEAPONLESS, YOU MUST PILOT THE DX-9 AND AVOID THE EMPIRE'S MISSILE SALVOS AMONGST THE ASTEROIDS... HELP WILL ARRIVE EVENTUALLY, " + msg:+"BUT UNTIL THEN YOU ARE OUR LAST HOPE. IF THE DX-9 IS LOST THEN SO IS THE EARTH. EARTH IS DEPENDING ON YOU!!!" + msgx=0 msgp=0 End Function @@ -202,6 +214,49 @@ Type Scroller End Function End Type +Type VText + Field t:String + Field y:Int + + Function Create:VText(t:String, y:Int) + Local o:VText=New VText + o.t=t + o.y=y + Return o + End Function +End Type + +Type VerticalScroller + Global msg:TList + Global maxy:Int + + Method New() + msg=CreateList() + maxy=0 + End Method + + Method Add(s:String) + SetScale(2,2) + msg.AddLast(VText.Create(s,maxy+800)) + maxy:+GFX.font.TextHeight(s) + SetScale(1,1) + End Method + + Method Draw() + SetScale(2,2) + For Local o:VText=EachIn msg + o.y:-1 + If o.y<-GFX.font.TextHeight(o.t) + o.y:+maxy + EndIf + If o.y<799 + GFX.font.Centre(o.t,o.y) + EndIf + Next + SetScale(1,1) + End Method +End Type + Type Thanks Global item:String[] Global i:Int @@ -259,6 +314,18 @@ Type TFadeScreen Return Create(1,-0.05) End Function + Function DoFadeIn() + Local fade:TFadeScreen=TFadeScreen.FadeIn() + Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight()) + + While fade.Fade() + Cls + DrawPixmap(pm,0,0) + fade.Draw() + Flip + Wend + End Function + Function DoFadeOut() Local fade:TFadeScreen=TFadeScreen.FadeOut() Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight()) diff --git a/missile_lock.bmx b/missile_lock.bmx index ebd5017..b2b7bea 100644 --- a/missile_lock.bmx +++ b/missile_lock.bmx @@ -84,6 +84,7 @@ Menu() While Not quit GameState.Reset() + 'GameState.SetLevel(10) MissileSet.StartLevel() AsteroidSet.StartLevel() @@ -97,7 +98,6 @@ While Not quit Particles.Draw() Trail.Draw() - GameState.Display() GameState.Control() GameState.Move() @@ -131,7 +131,18 @@ While Not quit EndIf EndIf + If GameState.pause + GFX.font.Centre("PAUSED!",300,255,255,0) + EndIf + + GameState.Display() Flip(1) + + If GameState.pause + GameState.pause=False + While Not KeyHit(GameConfig.kpause) And Not KeyHit(KEY_ESCAPE) + Wend + EndIf Wend If Not GameState.game_over @@ -155,7 +166,6 @@ While Not quit Particles.Draw() Trail.Draw() - GameState.Display() GameState.Control() GameState.Move() @@ -187,7 +197,19 @@ While Not quit GFX.font.Centre("GET READY!",300) EndIf + If GameState.pause + GFX.font.Centre("PAUSED!",300,255,255,0) + EndIf + + GameState.Display() Flip(1) + + If GameState.pause + GameState.pause=False + While Not KeyHit(GameConfig.kpause) And Not KeyHit(KEY_ESCAPE) + Wend + EndIf + timer:-1 Wend @@ -262,14 +284,15 @@ Function Menu() While Not done Cls - - If Rand(100)>30 - Particles.AddScaledImage(GFX.exhaust,Rand(0,800),Rand(0,600),0.3) + + If Rand(100)>80 + Local x:Int=Rand(0,800) + Local y:Int=Rand(0,600) + Particles.AddScaledImage(GFX.fireball,x,y,0.1) End If Backdrop.Draw() Particles.Draw() - GameState.Display() Scroller.Draw(560) SetColor(255,255,255) @@ -366,11 +389,10 @@ Function Menu() EndIf EndIf + GameState.Display() Flip(1) Wend Particles.Clear() TFadeScreen.DoFadeOut() End Function - - diff --git a/particle.bmx b/particle.bmx index e511ace..da31401 100644 --- a/particle.bmx +++ b/particle.bmx @@ -114,7 +114,7 @@ Type Particles End Function Function AddBigExplosion(x:Double, y:Double) - plist.AddLast(TParticle.ScaleImage(GFX.exhaust,x,y,0,0,0.3,255,0,0)) + plist.AddLast(TParticle.ScaleImage(GFX.fireball,x,y,0,0,0.1,255,255,255)) For Local f:Int=0 To 50 plist.AddLast(TParticle.Image(GFX.star,x,y,Rnd(-2,2),Rnd(-2,2),Rand(100,255),Rand(100,255),Rand(100,255))) Next |